Информационная система транспортной компании в архитектуре клиент-сервер




МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ

Федеральное государственное бюджетное образовательное

Учреждение высшего профессионального образования

«Пензенский государственный университет»

(ФГБОУ ВПО «Пензенский государственный университет») ______________________________________________________________________

Кафедра «Математическое обеспечение и применение ЭВМ»

Зав. кафедрой Макарычев П.П.

"___" _____________ 2013 г.

Информационная система транспортной компании в архитектуре клиент-сервер

Пояснительная записка к курсовому проекту по дисциплине

«Базы данных»

ПГУ 010500–5КП111.12 ПЗ

Автор работы Шутов Е.Е.

Группа 11ВА1

Специальность 010500

Руководитель работы Казакова И.А.

Работа сдана “___”________2013г.

Работа защищена “___”________2013г.

Оценка ____________________

г. Пенза – 2013 г.

Реферат Пояснительная записка содержит xyz листов, xyz рисунков, xyz таблиц, xyz использованных источника и xyz приложений. ADO, C++, MS SQL SERVER 2012, C++ Builder, БАЗА ДАННЫХ,ТАБЛИЦЫ, ЗАПРОСЫ, ПРЕДМЕТНАЯ ОБЛАСТЬ, ПРЕДСТАВЛЕНИЯ, ТРИГГЕРЫ, ХРАНИМЫЕ ПРОЦЕДУРЫ, ИНФОРМАЦИОННАЯ СИСТЕМ, КЛИЕНТ, СЕРВЕР. Объектом разработки является информационная система, созданная с использованием средств, предоставляемых современными СУБД реляционного типа. Цель работы – разработка программного обеспечения для информационной системы транспортной компании в архитектуре клиент - сервер. Полученные результаты: в процессе разработки проводилось изучение основных средств, предоставляемых средой MS SQL SERVER 2012, и на основе их использования разработана и отлажена программа создания базы данных и серверной части информационной системы. Средствами языка программирования C++ в среде С++ Builder разработано программное обеспечение для информационной системы транспортной компании в архитектуре клиент-сервер. Графическая часть включает в себя диаграмму базы данных.    
          ПГУ 010500–5КП111.12 ПЗ
         
Изм Лист № докум. Подпись Дата
Разраб. Шутов Е.Е.     Информационная система станции транспортной компании в архитектуре клиент-сервер Пояснительная записка Лит. Лист Листов
Пров. Казакова И.А.           3 46
            гр. 11ВА1
Н.-конт.      
Утв.      
Содержание
  Введение. 5 1. Информационная система транспортной компании в архитектуре клиент – сервер. 6 1.1. Анализ предметной области. 7 1.2. Анализ информационных задач и круга пользователей системы. 8 1.3. Выработка требований и ограничений. 9 1.4. Разработка проекта базы данных. 10 1.5. Программная реализация проекта базы данных. 13 1.6. Запросы.. 14 1.7. Представления. 15 1.8. Серверная часть информационной системы.. 17 1.8.1. Хранимые процедуры.. 17 1.8.2. Триггеры для поддержки сложных ограничений целостности в базе данных………………………………………………………………….….20 1.9. Запросы клиентского приложения к базе данных. 22 1.10. Пользовательский интерфейс клиентского приложения. 23 Заключение. 26 Список использованной литературы.. 27 ПРИЛОЖЕНИЕ А Диаграмма БД 28 ПРИЛОЖЕНИЕ Б Текст программы создания. 30 ПРИЛОЖЕНИЕ В Текст программы ввода текстовых данных…………………..32 ПРИЛОЖЕНИЕ Г Реализация запросов на языке SQL. 35 ПРИЛОЖЕНИЕ Д Реализация клиентского приложения 37 ПРИЛОЖЕНИЕ ЕРезультаты работы хранимых процедур 44    

 

          ПГУ 010500–5КП111.12 ПЗ   Лист
         
2  
4

Изм Лист № докум. Подпись Дата
Введение Система баз данных— это компьютеризированная система хранения записей, т.е. компьютеризированная система, основное назначение которой - хранить информацию, предоставляя пользователям средства ее извлечения и модификации. К информации может относиться все, что заслуживает внимания отдельного пользователя или организации, использующей систему, иначе говоря, все необходимое для текущей работы данного пользователя или предприятия. Основными составляющими информационных систем, построенных на основе баз данных, являются файлы БД, СУБД и программное обеспечение (клиентские приложения), позволяющие пользователю манипулировать информацией и совершать необходимые для решения его задач действия.    
          ПГУ 010500–5КП111.12 ПЗ   Лист
         
2  
5

Изм Лист № докум. Подпись Дата
1. Информационная система транспортной компании в архитектуре клиент – сервер В процессе выполнения курсового проекта должно быть разработано и реализовано клиент – серверное приложение для базы данных транспортной компании. Пользовательский интерфейс должен быть как можно более удобным для конечного пользователя. Серверная часть должна содержать в себе таблицы, представления, хранимые процедуры, триггеры и быть разработана на языке Transact SQL. Помимо этого должны быть представлены: структура базы данных и результаты работы программы. В качестве языка разработки была выбрана среда С++ Builder, поскольку она обладает компонентами, позволяющими работать с базами данных.    
          ПГУ 010500–5КП111.12 ПЗ   Лист
         
2  
6

Изм Лист № докум. Подпись Дата
  1.1. Анализ предметной области Предметной областью данного проекта является транспортная компания. В качестве объектов этой области можно выделить заказчика, груз, автомобиль. Каждый из объектов содержит в себе некие характеристики (см. Рис xyz) и представляет собой таблицу базы данных. 1. Заказчики – код заказчика, Ф.И.О., название организации, адрес, телефон; 2. Грузы – код груза, наименование, код вида автомобиля для транспортировки; 3. Автомобили - код автомобиля, код марки, код вида автомобиля, регистрационный номер, номер кузова, номер двигателя, год выпуска, дата последнего ТО; Взаимосвязь этих объектов происходит в таблице «Рейсы», характеристиками которой являются код рейса, код автомобиля, код заказчика, откуда, куда, дата отправления, дата прибытия, код груза, цена, отметка об оплате, отметка о возврате.  
          ПГУ 010500–5КП111.12 ПЗ   Лист
         
2  
7

Изм Лист № докум. Подпись Дата
  1.2. Анализ информационных задач и круга пользователей системы. В качестве пользователя системы был выбран менеджер. Его информационные задачи: регистрировать рейсы. Он добавляет записи в таблицу «Рейсы».              
          ПГУ 010500–5КП111.12 ПЗ   Лист
         
2  
8

Изм Лист № докум. Подпись Дата
  1.3. Выработка требований и ограничений При разработке клиентского приложения необходимо определить ряд ограничений, для потенциального пользователя. В данной работе пользователем выступает менеджер транспортной компании. Он может управлять рейсами и пользоваться дополнительными табличками для внесения полной информации о рейсе. На данные наложены ограничения, позволяющие уменьшить вероятность внесения не верной информации. Например: формат телефонного номера «+7(***)-***-**-**», где вместо «*» цифры от 0 до 9. Данные текстового типа ограничены по длине: адрес – 50 символов, ФИО – 40, номер кузова – 17.                
          ПГУ 010500–5КП111.12 ПЗ   Лист
         
2  
9

Изм Лист № докум. Подпись Дата
  1.4. Разработка проекта базы данных Таблица 1. Заказчики
Имя столбца Содержатель-ное описание Тип данных Размерность Область допустимых значений Возможность значения Null Роль Пример
Kod_zakazchika Код заказчика целый   0001-9999 нет РК  
FIO Ф.И.О символьный   ‘А-я’ ‘ ’ нет   Иванова Мария Петровна
NAME_organization Название организации символьный   ‘А-я’ ‘ ’ ‘"’ нет   ООО "Высшая лига"
Adress Адрес символьный   ‘А-я’ ’0-9’ ’-’ ’ ’ ‘,’ ‘.’ нет   Калинина 42-67
Telephone Телефон символьный   ‘0-9’ ’+’ ’-’ нет   +7(962)350-58-55
Profit Прибыль целый   0-9999999 нет    

 

Таблица 2. Виды автомобилей

Имя столбца Содержатель-ное описание Тип данных Размерность Область допустимых значений Возможность значения Null Роль Пример
Kod_vida_avto Код вида автомобиля целый   001-200 нет РК  
NAME_vid_avto Наименование символьный   ‘А-я’ ‘ ’ нет   Цистерна

 

Таблица 3. Марки автомобилей

Имя столбца Содержатель-ное описание Тип данных Размерность Область допустимых значений Возможность значения Null Роль Пример
Kod_marki Код марки целый   0001- 9999 нет РК  
NAME_marka Наименование символьный   ‘A-z’ нет   Scania

 

 

 

          ПГУ 010500–5КП111.12 ПЗ   Лист
         
2  
10

Изм Лист № докум. Подпись Дата

Таблица 4. Виды грузов

Имя столбца Содержатель-ное описание Тип данных Размерность Область допустимых значений Возможность значения Null Роль Пример
Kod_vida_gruza Код вида груза целый   001-200 нет PK  
NAME_vid_gruza Наименование символьный   ‘А-я’ ‘ ’ нет   Мебель
Kod_vida_avto_F Код вида автомобиля целый   001-200 нет FK  

Таблица 5. Грузы

Имя столбца Содержатель-ное описание Тип данных Размерность Область допустимых значений Возможность значения Null Роль Пример
Kod_gruza Код груза целый   001- 200 нет РК  
NAME_gruz Наименование символьный   ‘А-я’ ‘ ’ нет   ООО Эксперт
Kod_vida_gruza_F Код вида груза целый   001-200 нет FK  

Таблица 6. Автомобили

Имя столбца Содержатель-ное описание Тип данных Размерность Область допустимых значений Возможность значения Null Роль Пример
Kod_avto Код автомобиля целый   001-500 нет РК  
Kod_marki_F Код марки целый   001- 200 нет  
Kod_vida_avto_F Код вида автомобиля целый   001-200 нет  
Reg_nomer Регистрационный номер символьный   ‘A-я’ ‘0-9’ нет   м345оу58
Nomer_kuzova Номер кузова символьный   ‘A-z’ ‘0-9’ нет   AJ2A8J876D2F17273
Nomer_dvigatelya Номер двигателя символьный   ‘A-z’ ‘0-9’ нет   MJ-J4
God_vypuska Год выпуска целый   2010-2040 нет    
Data_poslednego_TO Дата последнего ТО дата   2013-01-01 - 2040-01-01 нет   2013-08-23

 

          ПГУ 010500–5КП111.12 ПЗ     Лист
         
2  
11

Изм Лист № докум. Подпись Дата  

Таблица 7. Рейсы

Имя столбца Содержатель-ное описание Тип данных Размерность Область допустимых значений Возможность значения Null Роль Пример
Kod_reisa Код рейса целый   00001-99999 нет РК  
Kod_avto_F Код автомобиля целый   001- 500 нет  
Kod_zakazchika_F Код заказчика целый   0001-9999 нет  
Otkuda Откуда символьный   ‘A-я’ ‘0-9’ нет   г. Пенза, ул. Суворова 121
Kuda Куда символьный   ‘A-я’ ‘0-9’ нет   г. Пенза, ул. Суворова 121
Data_otpravki Дата отправки Дата   2013-01-01 - 2040-01-01 нет   2013-08-23
Data_pribytiya Дата прибытия Дата   2013-01-01 - 2040-01-01 нет   2013-08-23
Kod_gruza_F Код груза целый   001-200 нет  
Cost Цена целый   1-9999999 нет    
Otmetka_ob_oplate Отметка об оплате бит   ‘0-1’ нет    
Otmetka_o_vozvrate Отметка о возврате бит   ‘0-1’ нет    

 

 

 

 

 

 

 

          ПГУ 010500–5КП111.12 ПЗ     Лист
         
2  
12

Изм Лист № докум. Подпись Дата  
  В таблицах 1 – 7 отображены сущности и их атрибуты. Их взаимосвязь также можно проиллюстрировать схемой БД (см. рис 1). Рис 1. Схема БД.              
          ПГУ 010500–5КП111.12 ПЗ   Лист
         
2  
13

Изм Лист № докум. Подпись Дата  
  1.5. Программная реализация проекта базы данных Для создания базы данных была использована команда CREATE DATABASE Transport, для создания таблиц CREATE TABLE, где Transport – имя БД. Например, создание таблицы «Грузы» будет иметь вид: CREATE TABLE Gruzy ( Kod_gruza TINYINT PRIMARY KEY CHECK (Kod_gruza>0 AND Kod_gruza<200), NAME_gruz VARCHAR(20) NOT NULL, Kod_vida_gruza_F TINYINT FOREIGN KEY REFERENCES Vidy_gruzov(Kod_vida_gruza) CHECK (Kod_vida_gruza_F>0 AND Kod_vida_gruza_F<200) NOT NULL ) Для управления таблицами существуют команды: ALTER TABLE имя_БД и DROP TABLE имя_БД. Первая производит модификацию таблицы, а вторая выполняет ее удаление. Например, добавим в таблицу поле вес, после чего модифицируем его, а затем удалим. Добавление поля. ALTER TABLE Gruzy ADD Ves INT NOT NULL Модификация поля. ALTER TABLE Gruzy ADD CONSTRAINT Ves CHECK ves > 0 AND ves < 5000) Удаление поля. ALTER TABLE Gruzy DROP COLUMN Ves Для заполнения таблицы используется команда INSERT. Insert Into [Gruzy] Values (1,'Кран',1) Подробный код см. приложение xyz и приложение xyz.    
          ПГУ 010500–5КП111.12 ПЗ   Лист
         
2  
14

Изм Лист № докум. Подпись Дата  
  1.6. Запросы Запросы на выборку данных относят к двум группам: простые и сложные. В простых запросах выборка идет из одной таблицы, а в сложных может быть задействовано сразу несколько таблиц. Сложные запросы можно реализовать методом вложенных запросов и методом объединения таблиц. В данном проекте используются вложенные запросы. Пример простого запроса. 1. По Дате отправки рейса определить цены оплаченных рейсов. SELECT Data_otpravki AS [Дата отправки], Cost AS "Цена" FROM Reisy WHERE Data_otpravki BETWEEN getdate()-30 AND getdate() Примеры сложных запросов: 2. По Грузу определить вид автомобиля для перевозки. SELECT NAME_vid_avto AS "Вид автомобиля" FROM Gruzy,Vidy_gruzov, Vidy_avto WHERE Gruzy.Kod_vida_gruza_F=Vidy_gruzov.Kod_vida_gruza AND Vidy_gruzov.Kod_vida_avto_F=Vidy_avto.Kod_vida_avto AND Gruzy.NAME_gruz='Танк' 3. По Адресу отправки определить название организации. SELECT NAME_organization AS "Название организации", Kuda AS [Адрес] FROM Zakazchiki, Reisy WHERE Reisy.Kod_zakazchika_F=Zakazchiki.Kod_zakazchika AND Reisy.Kuda LIKE 'г. Заречный%' Полный перечень разработанных запросов и результаты их работы см. приложение Г.          
          ПГУ 010500–5КП111.12 ПЗ   Лист
         
2  
15

Изм Лист № докум. Подпись Дата  
  1.7. Представления Представление (VIEW) – тип таблицы, чье содержание выбирается из других таблиц с помощью выполнения запроса. Поскольку значения в этих таблицах меняются, то автоматически, их значения могут быть показаны представлением. Помимо всего, представления способны маскировать от конечного пользователя, как столбцы, так и строки. Данная работа содержит 2 представления. Представление ViewReisy используется для более удобного отображения перечня товаров, имеющихся на складе. Оно объединяет в себе данные из четырех таблиц – это «Рейсы», «Заказчики», «Автомобили» и «Грузы» (см. Рис 2). CREATE VIEW ViewReisy AS SELECT [Kod_reisa] AS [Код рейса] ,[Reg_nomer] AS [Номер автомобиля] ,[FIO] AS [Заказчик] ,[Otkuda] AS [Откуда] ,[Kuda] AS [Куда] ,[Data_otpravki] AS [Дата отправки] ,[Data_pribytiya] AS [Дата прибытия] ,[NAME_gruz] AS [Груз] ,[Cost] AS [Цена] ,[Kod_avto_F] AS [Код автомобиля] ,[Kod_zakazchika_F] AS [Код заказчика] ,[Kod_gruza_F] AS [Код груза] ,[Otmetka_ob_oplate] AS [Отметка об оплате] ,[Otmetka_o_vozvrate] AS [Отметка о возврате] FROM [Reisy],[Zakazchiki],[Avto],[Gruzy] WHERE Reisy.Kod_zakazchika_F=Zakazchiki.Kod_zakazchika AND Reisy.Kod_avto_F=Avto.Kod_avto AND Reisy.Kod_gruza_F=Gruzy.Kod_gruza;  
          ПГУ 010500–5КП111.12 ПЗ   Лист
         
2  
16

Изм Лист № докум. Подпись Дата  
  Рис 2. Представление ViewReisy.   Представление ViewZakazchiki используется для скрытия структуры бд и для реализации более удобной формы работы (см. Рис 3). CREATE VIEW ViewZakazchiki AS SELECT [Kod_zakazchika] AS [Код заказчика] ,[FIO] AS [Заказчик] ,[NAME_organization] AS [Название организации] ,[Adress] AS [Адрес] ,[Telephone] AS [Телефон] ,[Profit] AS [Прибыль] FROM [Zakazchiki] Рис 3. Представление ViewZakazchiki.      
          ПГУ 010500–5КП111.12 ПЗ   Лист
         
2  
17

Изм Лист № докум. Подпись Дата  
  1.8. Серверная часть информационной системы Серверная часть информационной системы может содержать в себе бизнес логику, а именно пользовательские функции, хранимые процедуры, триггеры, которые могут облегчить клиентское приложение и его сопровождение, но замедлить работу сервера при большом количестве пользователей и поступающих запросов. 1.8.1. Хранимые процедуры Данный курсовой проект содержит 5 хранимых процедур. 1. DefaultSizeReisy – используется в клиенте для задания ширины столбов по умолчанию. CREATE PROCEDURE DefaultSizeReisy @st0 INT OUTPUT,@st1 INT OUTPUT,@st2 INT OUTPUT,@st3 INT OUTPUT, @st4 INT OUTPUT,@st5 INT OUTPUT,@st6 INT OUTPUT,@st7 INT OUTPUT, @st8 INT OUTPUT,@st9 INT OUTPUT,@st10 INT OUTPUT,@st11 INT OUTPUT, @st12 INT OUTPUT,@st13 INT OUTPUT AS SELECT @st0=60, @st1=100, @st2=180, @st3=130, @st4=130, @st5=90, @st6=90, @st7=100, @st8=60, @st9=0, @st10=0, @st11=0, @st12=0, @st13=0; 2. SelectReisy – используется для выборки данных из представления ViewReisy. CREATE PROCEDURE SelectReisy AS SELECT * FROM ViewReisy;   3. SearchReisy – для поиска в представления ViewReisy.
          ПГУ 010500–5КП111.12 ПЗ   Лист
         
2  
18

Изм Лист № докум. Подпись Дата  
  CREATE PROCEDURE SearchReisy @Kod_reisa VARCHAR,@Reg_nomer VARCHAR(9)='' ,@FIO VARCHAR(40)='',@Otkuda VARCHAR(50)='' ,@Kuda VARCHAR(50)='',@Data_otpravki VARCHAR(10)='' ,@Data_pribytiya VARCHAR(10)='',@NAME_gruz VARCHAR(20)='' ,@Cost VARCHAR(10)='' AS SELECT * FROM ViewReisy WHERE CAST([Код рейса] AS VARCHAR(9)) LIKE '%'+@Kod_reisa+'%' AND [Номер автомобиля] LIKE ('%'+@Reg_nomer+'%') AND [Заказчик] LIKE '%'+@FIO+'%' AND [Откуда] LIKE '%'+@Otkuda+'%' AND [Куда] LIKE '%'+@Kuda+'%' AND [Дата отправки] LIKE '%'+@Data_otpravki+'%' AND [Дата прибытия] LIKE '%'+@Data_pribytiya+'%' AND [Груз] LIKE '%'+@NAME_gruz+'%' AND CAST([Цена] AS VARCHAR(9)) LIKE ('%'+@Cost+'%') 4. DeleteReisy– для удаления рейса по его коду. CREATE PROCEDURE DeleteReisy @Kod_reisa INT AS DELETE FROM Reisy WHERE Kod_reisa=@Kod_reisa   5. MyStatistics – для вывода статистики по рейсам. CREATE PROCEDURE MyStatistics @kol_reysov INT OUTPUT, @avg_reysov INT OUTPUT, @kol_zakaz INT OUTPUT, @kol_avto INT OUTPUT, @kol_reysov_paid INT OUTPUT, @kol_reysov_not_paid INT OUTPUT,  
          ПГУ 010500–5КП111.12 ПЗ   Лист
         
2  
19

Изм Лист № докум. Подпись Дата  
@kol_reysov_return INT OUTPUT, @cost_reysov_paid INT OUTPUT, @cost_reysov_not_paid INT OUTPUT, @cost_reysov_return INT OUTPUT AS SELECT @kol_reysov=COUNT(*),@avg_reysov=AVG(Cost) FROM Reisy; SELECT @kol_zakaz=COUNT(*) FROM Zakazchiki; SELECT @kol_avto=COUNT(*) FROM Avto; SELECT @kol_reysov_paid=COUNT(*),@cost_reysov_paid=SUM(Cost) FROM Reisy WHERE [Otmetka_ob_oplate]=1 AND [Otmetka_o_vozvrate]=0; SELECT @kol_reysov_not_paid=COUNT(*),@cost_reysov_not_paid=SUM(Cost) FROM Reisy WHERE [Otmetka_ob_oplate]=0 AND [Otmetka_o_vozvrate]=0; SELECT @kol_reysov_return=COUNT(*),@cost_reysov_return=SUM(Cost) FROM Reisy WHERE [Otmetka_o_vozvrate]=1; Результаты работы данных процедур проиллюстрированы в приложении xyz.                
          ПГУ 010500–5КП111.12 ПЗ   Лист
         
2  
20

Изм Лист № докум. Подпись Дата  
  1.8.2. Триггеры для поддержки сложных ограничений целостности в базе данных Данный курсовой проект содержит два триггера. 1. Вставка записи в табличку перенаправленная со вставки в представление. CREATE TRIGGER InsertReys ON ViewReisy INSTEAD OF INSERT AS Declare @Kod_reisa INT,@Reg_nomer VARCHAR(9),@FIO VARCHAR(40) ,@Otkuda VARCHAR(50),@Kuda VARCHAR(50),@Data_otpravki VARCHAR(10) ,@Data_pribytiya VARCHAR(10),@NAME_gruz VARCHAR(20),@Cost INT ,@Otmetka_ob_oplate INT,@Otmetka_o_vozvrate INT BEGIN SELECT @Kod_reisa=[Код рейса],@Reg_nomer=[Номер автомобиля] ,@FIO=[Заказчик],@Otkuda=[Откуда],@Kuda=[Куда] ,@Data_otpravki=[Дата отправки],@Data_pribytiya=[Дата прибытия] ,@Cost=[Цена],@NAME_gruz=[Груз],@Otmetka_ob_oplate=[Отметка об оплате] ,@Otmetka_o_vozvrate=[Отметка о возврате] FROM inserted; INSERT Reisy VALUES(@Kod_reisa,(SELECT Kod_avto FROM Avto WHERE [Reg_nomer]=@Reg_nomer),(SELECT Kod_zakazchika FROM Zakazchiki WHERE [FIO]=@FIO), @Otkuda,@Kuda,@Data_otpravki,@Data_pribytiya,(SELECT Kod_gruza FROM Gruzy WHERE [NAME_gruz]=@NAME_gruz),@Cost,@Otmetka_ob_oplate, @Otmetka_o_vozvrate); END; Триггер вызывается при вставке в представление ViewReisy и делает вставку данных в таблицу «Рейсы» (см. Рис 4). Запрос на вставку: INSERT ViewReisy ([Код рейса],[Номер автомобиля],[Заказчик],[Откуда],[Куда], [Дата отправки],[Дата прибытия],[Груз],[Цена],[Отметка об оплате],[Отметка о возврате]) VALUES(123,'с876уа58','Печеркин Александр Андреевич', 'г. Сосновоборск, ул. Сосновая 7','г. Кузнецк, ул. Белинского 151','2013-08-10','2013-09-14','Пропан',58100,1,0)
          ПГУ 010500–5КП111.12 ПЗ   Лист
         
2  
21

Изм Лист № докум. Подпись Дата  
  Рис 4. Таблица до и после работы триггера.   2. Обновление прибыли от клиента при вставке. CREATE TRIGGER EvalProfit ON Reisy AFTER INSERT, DELETE, UPDATE AS Declare @Kod_zakazchika INT,@i INT=1; BEGIN WHILE @i<=(SELECT COUNT(*) FROM inserted) BEGIN SELECT TOP 1 @Kod_zakazchika=TMP.Kod_zakazchika_F FROM (SELECT TOP (@i) Kod_zakazchika_F FROM inserted ORDER BY Kod_zakazchika_F DESC) AS TMP ORDER BY TMP.Kod_zakazchika_F; IF(SELECT COUNT(Reisy.Cost) FROM Reisy WHERE @Kod_zakazchika=Reisy.Kod_zakazchika_F AND Reisy.Otmetka_o_vozvrate=0 AND Reisy.Otmetka_ob_oplate=1)>0BEGIN UPDATE Zakazchiki SET Profit=(SELECT SUM(Reisy.Cost) FROM Reisy WHERE @Kod_zakazchika=Reisy.Kod_zakazchika_F AND Reisy.Otmetka_o_vozvrate=0 AND Reisy.Otmetka_ob_oplate=1) WHERE Kod_zakazchika=@Kod_zakazchika; END; SET @i=@i+1; END; SET @i=1; WHILE @i<=(SELECT COUNT(*) FROM deleted WHERE Kod_zakazchika_F NOT IN (SELECT Kod_zakazchika_F FROM inserted)) BEGIN
          ПГУ 010500–5КП111.12 ПЗ   Лист
         
2  
22

Изм Лист № докум. Подпись Дата  
SELECT TOP 1 @Kod_zakazchika=TMP.Kod_zakazchika_F FROM (SELECT TOP (@i) Kod_zakazchika_F FROM deleted WHERE Kod_zakazchika_F NOT IN (SELECT Kod_zakazchika_F FROM inserted) ORDER BY Kod_zakazchika_F DESC) AS TMP ORDER BY TMP.Kod_zakazchika_F; IF(SELECT COUNT(Reisy.Cost) FROM Reisy WHERE Kod_zakazchika = Reisy.Kod_zakazchika_F AND Reisy.Otmetka_o_vozvrate=0 AND Reisy.Otmetka_ob_oplate=1)>0 BEGIN UPDATE Zakazchiki SET Profit=(SELECT SUM(Reisy.Cost) FROM Reisy WHERE @Kod_zakazchika=Reisy.Kod_zakazchika_F AND Reisy.Otmetka_o_vozvrate=0 AND Reisy.Otmetka_ob_oplate=1) WHERE Kod_zakazchika=@Kod_zakazchika; END; SET @i=@i+1; END; END; Данный триггер при добавлении в таблицу рейсы пересчитывает прибыль от заказчиков (см. Рис 5). Рис 5. До и после добавления рейса. 1.9. Запросы клиентского приложения к базе данных Разработанное клиентское приложение взаимодействует с сервером БД посредством передачи запросов, и приема их результатов. Большинство реализованных функций клиента вызывают хранимые процедуры. Например, при открытии главного окна вызывается процедура, возвращающая размеры колонок. Добавление рейсов также использует процедуру, которая принимает введенные данные и заполняет таблицу командой INSERT. Поиск рейсов происходит также, посредством хранимой процедуры.
          ПГУ 010500–5КП111.12 ПЗ   Лист
         
2  
23

Изм Лист № докум. Подпись Дата  
Для оптимизации взаимодействия клиента с сервером необходимо избегать передачи лишней информации для экономии траффика. Это и позволяют сделать хранимые процедуры. Также, их достоинствами является то, что они хранятся на сервере в откомпилированном виде и позволяют скрывать информацию. 1.10. Пользовательский интерфейс клиентского приложения При проектировке приложения надо учитывать то, что оно будет использоваться продолжительное время пользователем, не знающим языка Transact – SQL. Поэтому, запросы к серверу должны быть прописаны в исходном коде ПО, а сам интерфейс (см. Рис 6 – Рис 10) должен быть максимально интуитивным и не утомлять работника. Рис 6. Главное окно.   Рис 7. Окно добавления рейса.
          ПГУ 010500–5КП111.12 ПЗ   Лист
         
2  
24

Изм Лист № докум. Подпись Дата  
  Рис 8. Окно статистики.   Рис 9. Подробности о заказчике.   По большей части пользователь будет работать с первым окном и кнопками добавить/изменить рейс. При необходимости он может воспользоваться поиском или посмотреть другие таблички.            
          ПГУ 010500–5КП111.12 ПЗ   Лист
         
2  
25

Изм Лист № докум. Подпись Дата  
  Заключение В результате выполнения курсового проекты было разработано и реализовано клиент – серверное приложение для менеджера транспортной компании. При помощи приложения можно работать с рейсами. Приложение разработано в среде С++ Builder на языке C++. Серверная часть реализована в SQL SERVER 2012 на языке Transact – SQL. Программа отлажена. Результаты работы проиллюстрированы. Задание выполнено в полном объеме.    
          ПГУ 010500–5КП111.12 ПЗ   Лист
         
2  
26

Изм Лист № докум. Подпись Дата  
Список использованных источников 1. А. Я. Архангельский. Программирование в C++ Builder. – Бином, 2010. 1304с. 2. И. А. Казакова. Основы языка Transact SQL. - Пенза: Издательство ПГУ, 2010. 163 с. 3. А. Г. Бондарь. Interbase и Firebird. – Санкт-Петербург: БХВ-Петербург, 2012. 593 с.      
          ПГУ 010500–5КП111.12 ПЗ   Лист
         
2  
27

Изм Лист № докум. Подпись Дата  
                       

 

 

Диаграмма БД
ПРИЛОЖЕНИЕ А
(Обязательное)

 
          ПГУ 010500–5КП111.12 ПЗ
         
Изм Лист № докум. Подпись Дата
Разраб. Шутов Е.Е.     Схема БД Лит. Лист Листов
Пров. Казакова И.А.           29 46
            гр. 11ВА1
Н.-конт.      
Утв.      
                     

 

 

Текст программы создания БД
ПРИЛОЖЕНИЕ Б
(Обязательное)

 

CREATE DATABASE Transport

--Создание таблиц БД (пункт 2)

USE Transport

 

CREATE TABLE Marka_avto

(

Kod_marki TINYINT PRIMARY KEY CHECK (Kod_marki>0 AND Kod_marki<200),

NAME_marka VARCHAR(20) NOT NULL

)

 

CREATE TABLE Vidy_avto

(

Kod_vida_avto TINYINT PRIMARY KEY CHECK (Kod_vida_avto>0 AND Kod_vida_avto<200),

NAME_vid_avto VARCHAR(40) NOT NULL

)

 

CREATE TABLE Vidy_gruzov

(

Kod_vida_gruza TINYINT PRIMARY KEY CHECK (Kod_vida_gruza>0 AND Kod_vida_gruza<200),

NAME_vid_gruza VARCHAR(20) NOT NULL,

Kod_vida_avto_F TINYINT FOREIGN KEY REFERENCES Vidy_avto(Kod_vida_avto) CHECK (Kod_vida_avto_F>0 AND Kod_vida_avto_F<200) NOT NULL

)

 

CREATE TABLE Gruzy

(

Kod_gruza TINYINT PRIMARY KEY CHECK (Kod_gruza>0 AND Kod_gruza<200),

NAME_gruz VARCHAR(20) NOT NULL,

Kod_vida_gruza_F TINYINT FOREIGN KEY REFERENCES Vidy_gruzov(Kod_vida_gruza) CHECK (Kod_vida_gruza_F>0 AND Kod_vida_gruza_F<200) NOT NULL

)

 

CREATE TABLE Avto

(

Kod_avto SMALLINT PRIMARY KEY CHECK (Kod_avto>0 AND Kod_avto<500),

Kod_marki_F TINYINT FOREIGN KEY REFERENCES Marka_avto(Kod_marki) CHECK (Kod_marki_F>0 AND Kod_marki_F<200) NOT NULL,

Kod_vi



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-03-24 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: