Автор: Пользователь скрыл имя, 11 Марта 2013 в 10:28, курсовая работа
Хранение данных информационных процессов фирмы в структурированном электронном виде имеет ряд преимуществ перед бумажным документооборотом, т.к. предоставляет возможность за меньшее время найти больший объем информации, в любой момент исправить ошибку или распечатать необходимое количество копий документа на принтере. А своевременное резервное копирование базы данных и шифрование информации позволяет защитить ценную информацию от порчи или кражи. Целью данного курсового проекта является спроектировать и реализовать на основе клиент/серверных технологий базу данных компьютерной фирмы, а также реализовать все необходимые для поиска и работы с компьютерными комплектующими запросы и отчеты.
Введение
1 Техническое задание
1.1 Анализ предметной области
1.2 Постановка задачи
2 Технический проект информационной системы
2.1 Функциональная модель
2.1.1 Контекстная диаграмма и диаграммы детализации процессов
2.1.2 Диаграмма дерева узлов
2.2 Информационная модель
2.2.1 Идентификация сущностей и связей. ER-диаграмма логического уровня
2.2.2 ER-диаграмма физического уровня. Ограничения ссылочной целостности. Определение триггеров
2.2.3 Определение представлений, хранимых процедур серверной компоненты
2.3 Верификация спроектированной логической модели
3 Реализация системы
3.1 T-SQL-определения регламентированных запросов
3.2 T-SQL-определения триггеров
3.3 T-SQL-определения хранимых процедур
3.4 T-SQL-определения курсоров
3.5 Описание клиентских приложений
4 Результат тестирования информационной системы
Заключение
Список использованных источников
После разработки информационной модели ее следует связать с функциональной моделью. Такая связь гарантирует завершенность анализа, гарантирует, что есть источники данных (сущности) для всех работ. Связывание моделей способствует согласованности, корректности и завершенности анализа. Стрелки в функциональной модели обозначают некоторую информацию, использующуюся в моделируемой системе. В информационной модели на логическом уровне информация изображается в виде сущностей. Сущности состоят из совокупностей экземпляров сущностей (кортежи отношений). К информационной модели предъявляется требование нормализации, что должно обеспечить компактность и непротиворечивость хранения данных. Информация, которая моделируется одной стрелкой в функциональной модели, может содержаться в нескольких сущностях и атрибутах информационной модели. На функциональной модели могут присутствовать различные стрелки, изображающие одни и те же данные. Информация о таких стрелках находится в одних и тех же сущностях. Следовательно, одной и той же стрелке в функциональной модели могут соответствовать несколько сущностей в информационной модели и, наоборот, одной сущности может соответствовать несколько стрелок.
Работы в функциональной модели могут создавать или изменять данные, которые соответствуют входящим и выходящим стрелкам. Они могут воздействовать как целиком на сущности (создавая и модифицируя экземпляры сущности), так и на отдельные атрибуты сущности.
Таблица 1 – Отчет о верификации модели
Arrow Name |
Entity Name |
Attribute Name |
Ассортимент товаров у поставщиков |
Поставщик_Товар |
Код_поставщика |
Количество_в_наличии | ||
Количество_заказано | ||
Оптовая_цена | ||
Штрихкод_товара | ||
Гарантийный талон |
Гарантийный_талон |
Дата_время |
Код_гарантийного_талона | ||
Код_сотрудника | ||
Серийный_номер |
Код_гарантийного_талона | |
Серийный_номер_экземпляра | ||
Штрихкод_товара | ||
Сотрудник |
Код_сотрудника | |
ФИО_сотрудника | ||
Товар |
Название_товара | |
Срок_гарантии | ||
Штрихкод_товара | ||
График работы сервисных центров |
Сервисный_центр |
График_работы |
Код_сервисного_центра | ||
Договор о покупке товара в кредит |
Клиент |
Адрес_клиента |
Дата_рождения | ||
Код_клиента | ||
Номер_паспорта | ||
Телефон_домашний | ||
Телефон_мобильный | ||
ФИО_клиента | ||
Кредитный_договор |
Ежемесячная_выплата | |
Код_договора | ||
Код_клиента | ||
Первоначальный_взнос | ||
Срок_оплаты | ||
Продажа |
Код_гарантийного_талона | |
Код_договора | ||
Количество | ||
Тип_оплаты | ||
Цена | ||
Штрихкод_товара | ||
Товар |
Категория | |
Название_товара | ||
Срок_гарантии | ||
Штрихкод_товара | ||
Журнал гарантийного обслуживания |
Гарантийный_журнал |
Дата_время |
Код_направления_на_замену | ||
Примечание | ||
Серийный_номер_экземпляра | ||
Статус_обслуживания | ||
Штрихкод_товара | ||
Журнал продаж |
Гарантийный_талон |
Дата_время |
Код_гарантийного_талона | ||
Продажа |
Код_гарантийного_талона | |
Код_договора | ||
Количество | ||
Тип_оплаты | ||
Цена | ||
Штрихкод_товара | ||
Завозимые товары |
Товар |
Количество_требуется_в_ |
Штрихкод_товара | ||
Заказанная конфигурация |
Поставщик_Товар |
Код_поставщика |
Количество_заказано | ||
Штрихкод_товара | ||
Закон РБ "О ЦЕНООБРАЗОВАНИИ" |
Поставщик_Товар |
Оптовая_цена |
Товар |
Цена | |
Имеющиеся товары |
Товар |
Категория |
Код_сервисного_центра | ||
Количество_магазин | ||
Количество_склад | ||
Название_товара | ||
Описание | ||
Срок_гарантии | ||
Цена | ||
Штрихкод_товара | ||
Информация о гарантийном талоне |
Гарантийный_талон |
Дата_время |
Код_гарантийного_талона | ||
Код_сотрудника | ||
Информация о доступных товарах |
Товар |
Количество_магазин |
Название_товара | ||
Штрихкод_товара | ||
Информация о доступных товарах и их местонахождении |
Товар |
Категория |
Код_сервисного_центра | ||
Количество_магазин | ||
Количество_склад | ||
Название_товара | ||
Описание | ||
Срок_гарантии | ||
Цена | ||
Штрихкод_товара | ||
Информация о клиентах |
Клиент |
Адрес_клиента |
Дата_рождения | ||
Код_клиента | ||
Номер_паспорта | ||
Телефон_домашний | ||
Телефон_мобильный | ||
ФИО_клиента | ||
Информация о клиенте |
Клиент |
Адрес_клиента |
Дата_рождения | ||
Код_клиента | ||
Номер_паспорта | ||
Телефон_домашний | ||
Телефон_мобильный | ||
ФИО_клиента | ||
Информация о количестве завозимых товаров |
Товар |
Количество_магазин |
Количество_склад | ||
Количество_требуется_в_ | ||
Название_товара | ||
Штрихкод_товара | ||
Информация о местонахождении товаров |
Товар |
Категория |
Код_сервисного_центра | ||
Количество_магазин | ||
Количество_склад | ||
Количество_требуется_в_ | ||
Название_товара | ||
Описание | ||
Срок_гарантии | ||
Цена | ||
Штрихкод_товара | ||
Информация о наценках на товары |
Товар |
Цена |
Штрихкод_товара | ||
Информация о покупке |
Продажа |
Количество |
Тип_оплаты | ||
Цена | ||
Штрихкод_товара | ||
Информация о поставщиках |
Поставщик |
Адрес_поставщика |
Код_поставщика | ||
Название_поставщика | ||
Телефон_поставщика | ||
Информация о сервисных центрах |
Сервисный_центр |
Адрес |
График_работы | ||
Код_сервисного_центра | ||
Название_сервисного_центра | ||
Телефон | ||
Информация о собранной конфигурации |
Товар |
Категория |
Количество_магазин | ||
Количество_склад | ||
Название_товара | ||
Штрихкод_товара | ||
Информация о сотрудниках |
Сотрудник |
Адрес_сотрудника |
Дата_рождения | ||
Код_сотрудника | ||
Телефон_домашний | ||
Телефон_мобильный | ||
ФИО_сотрудника | ||
Информация о сотруднике, выдавшем товар |
Сотрудник |
Код_сотрудника |
ФИО_сотрудника | ||
Информация о товаре, выданном на замену по гарантии |
Продажа |
Код_гарантийного_талона |
Количество | ||
Тип_оплаты | ||
Цена | ||
Штрихкод_товара | ||
Информация по проданных товарах за период |
Гарантийный_талон |
Дата_время |
Код_гарантийного_талона | ||
Кредитный_договор |
Ежемесячная_выплата | |
Код_договора | ||
Первоначальный_взнос | ||
Срок_оплаты | ||
Продажа |
Код_гарантийного_талона | |
Код_договора | ||
Количество | ||
Тип_оплаты | ||
Цена | ||
Штрихкод_товара | ||
Клиентские заказы |
Поставщик_Товар |
Код_поставщика |
Количество_заказано | ||
Штрихкод_товара | ||
Навый заказ |
Поставщик_Товар |
Код_поставщика |
Количество_заказано | ||
Штрихкод_товара | ||
Направление на замену товара по гарантии |
Гарантийный_журнал |
Дата_время |
Код_направления_на_замену | ||
Примечание | ||
Серийный_номер_экземпляра | ||
Статус_обслуживания | ||
Штрихкод_товара | ||
Новая заявка |
Гарантийный_журнал |
Дата_время |
Код_направления_на_замену | ||
Примечание | ||
Серийный_номер_экземпляра | ||
Статус_обслуживания | ||
Штрихкод_товара | ||
Новые товары |
Товар |
Категория |
Код_сервисного_центра | ||
Количество_магазин | ||
Количество_склад | ||
Количество_требуется_в_ | ||
Название_товара | ||
Описание | ||
Срок_гарантии | ||
Цена | ||
Штрихкод_товара | ||
Новые цены/наценки |
Товар |
Цена |
Штрихкод_товара | ||
Номер гарантийного талона |
Продажа |
Код_гарантийного_талона |
Номер договора |
Продажа |
Код_договора |
Оптовые заказы |
Поставщик_Товар |
Код_поставщика |
Количество_заказано | ||
Штрихкод_товара | ||
Оптовые цены поставщиков |
Поставщик_Товар |
Оптовая_цена |
Штрихкод_товара | ||
Отчет по продажам за указанный период |
Гарантийный_талон |
Дата_время |
Код_гарантийного_талона | ||
Кредитный_договор |
Ежемесячная_выплата | |
Код_договора | ||
Первоначальный_взнос | ||
Срок_оплаты | ||
Продажа |
Код_гарантийного_талона | |
Код_договора | ||
Количество | ||
Тип_оплаты | ||
Цена | ||
Штрихкод_товара | ||
Плановые оптовые заказы товаров |
Поставщик_Товар |
Код_поставщика |
Количество_заказано | ||
Штрихкод_товара | ||
Прайс-лист |
Товар |
Категория |
Код_сервисного_центра | ||
Количество_магазин | ||
Количество_склад | ||
Название_товара | ||
Описание | ||
Срок_гарантии | ||
Цена | ||
Штрихкод_товара | ||
Серийные номера купленных товаров |
Серийный_номер |
Код_гарантийного_талона |
Серийный_номер_экземпляра | ||
Штрихкод_товара | ||
Список завозимых в магазин товаров |
Товар |
Количество_требуется_в_ |
Штрихкод_товара | ||
Статистическая диаграмма спроса на товары |
Гарантийный_талон |
Дата_время |
Код_гарантийного_талона | ||
Продажа |
Код_гарантийного_талона | |
Количество | ||
Цена | ||
Штрихкод_товара | ||
Статус заявки |
Гарантийный_журнал |
Дата_время |
Код_направления_на_замену | ||
Примечание | ||
Серийный_номер_экземпляра | ||
Статус_обслуживания | ||
Штрихкод_товара | ||
Требования, пожелания клиентов при формировании заказа |
Товар |
Категория |
Название_товара | ||
Описание | ||
Срок_гарантии | ||
Шаблоны конфигураций компьютера |
Готовое_решение |
Код_конфигурации |
Название_конфигурации |
1. Информация обо всех номерах паспортов клиентов.
CREATE VIEW GetAllClientPass
AS
SELECT Номер_паспорта_клиента
FROM Клиент
ORDER BY Номер_паспорта_клиента ASC
2. Информация обо всех полных именах сотрудников (ФИО).
CREATE VIEW GetAllEmplFIO
AS
SELECT ФИО_сотрудника
FROM Сотрудник
ORDER BY ФИО_сотрудника ASC
3. Информация обо всех номерах паспортов сотрудников.
CREATE VIEW GetAllEmplPass
AS
SELECT Номер_паспорта_сотрудника
FROM Сотрудник
ORDER BY Номер_паспорта_сотрудника ASC
4. Информация обо всех различных должностях сотрудников.
CREATE VIEW GetAllEmplPost
AS
SELECT DISTINCT Должность
FROM Сотрудник
ORDER BY Должность ASC
5. Информация обо всех категориях товаров, имеющихся на данный момент в базе.
CREATE VIEW GetAllGoodsCategories
AS
SELECT DISTINCT Категория
FROM Товар
ORDER BY Категория ASC
6. Информация обо всех штрихкодах товаров имеющихся на данный момент в базе.
CREATE VIEW GetAllGoodsCodes
AS
SELECT Штрихкод_товара
FROM Товар
ORDER BY Штрихкод_товара ASC
7. Информация обо всех названиях товаров имеющихся на данный момент в базе.
CREATE VIEW GetAllGoodsCodes
AS
SELECT Штрихкод_товара
FROM Товар
ORDER BY Штрихкод_товара ASC
8. Информация обо всех типах оплаты товара при продаже.
CREATE VIEW GetAllGoodsCategories
AS
SELECT DISTINCT Категория
FROM Товар
ORDER BY Категория ASC
9. Информация обо всех кодах направлений на замену товара по гарантии.
CREATE VIEW GetAllReplacementCodes
AS
SELECT DISTINCT Код_направления_на_замену
FROM Гарантийный журнал
WHERE Код_направления_на_замену <> NULL
ORDER BY Код_направления_на_замену ASC
10. Информация обо всех названиях сервисных центров.
CREATE VIEW GetAllServiceNames
AS
SELECT Название_сервисного_центра
FROM Сервисный_центр
ORDER BY Название_сервисного_центра ASC
11. Информация обо всех названиях поставщиков.
CREATE VIEW GetAllVendorNames
AS
SELECT Название_поставщика
FROM Поставщик
ORDER BY Название_поставщика ASC
1. tIU_Empl срабатывает при вставке или обновлении записи в таблице «Сотрудник». Он проверяет на корректность вставленные поля таблицы. В случае ошибки записи изменены не будут.
CREATE TRIGGER tIU_Empl
ON Сотрудник
FOR INSERT, UPDATE
AS
BEGIN
IF EXISTS (SELECT Номер_паспорта_сотрудника FROM inserted WHERE Номер_паспорта_сотрудника = '')
BEGIN
RAISERROR ('Введите номер паспорта сотрудника', 16, 10)
ROLLBACK TRANSACTION
END
ELSE
IF EXISTS (SELECT ФИО_сотрудника FROM inserted WHERE ФИО_сотрудника = '')
BEGIN
RAISERROR ('Введите ФИО сотрудника', 16, 10)
ROLLBACK TRANSACTION
END
ELSE
IF EXISTS (SELECT Должность FROM inserted WHERE Должность = '')
BEGIN
RAISERROR ('Введите дожность сотрудника', 16, 10)
ROLLBACK TRANSACTION
END
ELSE
IF EXISTS (SELECT Дата_рождения FROM inserted WHERE Дата_рождения IS NULL)
BEGIN
RAISERROR ('Введите дату рождения сотрудника', 16, 10)
ROLLBACK TRANSACTION
END
END
2. tIU_Service срабатывает при вставке или обновлении записи в таблице «Сервисный_центр». Он проверяет на корректность вставленные поля таблицы . В случае ошибки записи изменены не будут.
CREATE TRIGGER tIU_Service
ON Поставщик
FOR INSERT, UPDATE
AS
BEGIN
IF EXISTS (SELECT Код_сервисного_центра FROM inserted WHERE Код_сервисного_центра = NULL)
BEGIN
RAISERROR ('Код сервисного центра не может быть нулевым', 16, 10)
ROLLBACK TRANSACTION
END
ELSE
IF EXISTS (SELECT Название_сервисного_центра FROM inserted WHERE Название_сервисного_центра = '')
BEGIN
RAISERROR ('Введите название сервисного центра, 16, 10)
ROLLBACK TRANSACTION
END
END
3. tIU_Goods срабатывает при вставке или обновлении записи в таблице «Товар». Он проверяет на корректность вставленные поля таблицы . В случае ошибки записи изменены не будут.
CREATE TRIGGER tIU_Goods
ON Товар
FOR INSERT, UPDATE
AS
BEGIN
IF EXISTS (SELECT Штрихкод_товара FROM inserted WHERE Штрихкод_товара = '')
BEGIN
RAISERROR ('Введите штрихкод товара', 16, 10)
ROLLBACK TRANSACTION
END
ELSE
IF EXISTS (SELECT Название_товара FROM inserted WHERE Название_товара = '')
BEGIN
RAISERROR ('Введите название товара', 16, 10)
ROLLBACK TRANSACTION
END
ELSE
IF EXISTS (SELECT Категория FROM inserted WHERE Категория = '')
BEGIN
RAISERROR ('Введите категорию товара', 16, 10)
ROLLBACK TRANSACTION
END
END
4. tIU_Vendor срабатывает при вставке или обновлении записи в таблице «Поставщик». Он проверяет на корректность вставленные поля таблицы . В случае ошибки записи изменены не будут.
CREATE TRIGGER tIU_Vendor
ON Поставщик
FOR INSERT, UPDATE
AS
BEGIN
IF EXISTS (SELECT Код_поставщика FROM inserted WHERE Код_поставщика = NULL)
BEGIN
RAISERROR ('Код поставщика не может быть нулевым', 16, 10)
ROLLBACK TRANSACTION
END
ELSE
IF EXISTS (SELECT Название_поставщика FROM inserted WHERE Название_поставщика = '')
BEGIN
RAISERROR ('Введите название поставщика', 16, 10)
ROLLBACK TRANSACTION
END
END
5. tD_GoodsOwner проверяет права на удаление пользователем записи из таблицы «Товар». Если пользователь не является владельцем базы данных, то прав на удаление он не имеет. Запись удалена не будет;
CREATE TRIGGER tD_GoodsOwner
ON Товар
FOR DELETE
AS
IF (CURRENT_USER <> 'dbo')
BEGIN
RAISERROR ('у вас нет прав на удаление этой записи', 16, 1)
ROLLBACK TRANSACTION
END
3.3 T-SQL-определения хранимых процедур
1. DeleteEmpl.sql – для удаления данных из таблицы «Сотрудник»;
CREATE PROCEDURE DeleteEmpl
@Номер_паспорта_сотрудника nvarchar(15)
AS
IF EXISTS (SELECT Номер_паспорта_сотрудника
FROM Сотрудник
WHERE Номер_паспорта_сотрудника = @Номер_паспорта_сотрудника)
DELETE
FROM Сотрудник
WHERE Номер_паспорта_сотрудника = @Номер_паспорта_сотрудника
ELSE
BEGIN
RAISERROR ('Не найдена запись,
соответствующая номеру
WITH NOWAIT
END
2. DeleteGoods.sql – для удаления данных из таблицы «Товар»;
CREATE PROCEDURE DeleteGoods
@Штрихкод_товара varchar(20)
AS
IF NOT EXISTS (SELECT Штрихкод_товара
FROM Товар
WHERE Штрихкод_товара = @Штрихкод_товара)
BEGIN
RAISERROR ('Не найдена запись, соответствующая коду товара.', 16, 1)
RETURN 1
END
IF EXISTS (select * from Поставщик_Товар, Товар
where
Поставщик_Товар.Штрихкод_
BEGIN
RAISERROR ('Нельзя удалить
товар, т.к. ассортимент постав
RETURN 1
END
DELETE
FROM Товар
WHERE Штрихкод_товара = @Штрихкод_товара
3. DeleteVendor.sql – для удаления данных из таблицы «Поставщик»;
CREATE PROCEDURE DeleteVendor
@Код_поставщика int
AS
IF EXISTS (SELECT Код_поставщика
FROM Поставщик
WHERE Код_поставщика = @Код_поставщика)
DELETE
FROM Поставщик
WHERE Код_поставщика = @Код_поставщика
ELSE
BEGIN
RAISERROR ('Не найдена запись, соответствующая коду поставщика.', 16, 1)
WITH NOWAIT
END
4. DeleteVendorAssort.sql – для удаления данных из таблицы «Поставщик_Товар»;
CREATE PROCEDURE DeleteVendorAssort
@Штрихкод_товара [nvarchar](50),
@Название_поставщика [nvarchar](50)
AS
DECLARE @Код_поставщика int
SET @Код_поставщика = (SELECT Код_поставщика
FROM Поставщик
WHERE Название_поставщика = @Название_поставщика)
IF EXISTS (SELECT Код_поставщика, Штрихкод_товара
FROM Поставщик_Товар
WHERE Штрихкод_товара = @Штрихкод_товара AND
Код_поставщика = @Код_поставщика)
DELETE
FROM Поставщик_Товар
WHERE Штрихкод_товара = @Штрихкод_товара AND
Код_поставщика = @Код_поставщика
ELSE
BEGIN
RAISERROR ('Не найдена запись, соответствующая переданному названиею поставщика и штрихкоду товара.', 16, 1)
WITH NOWAIT
END
5. GetEmplByFIO.sql – для поиска сотрудника по его полному имени в таблице «Сотрудник»;
CREATE PROCEDURE GetEmplByFIO
@ФИО_Сотрудника nvarchar(50)
AS
IF EXISTS (SELECT ФИО_Сотрудника
Информация о работе Разработка информационной системы "Компьютерная фирма"