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

Изучение основных средств, предоставляемых средой MS SQL SERVER 2012. Программа создания базы данных и серверной части информационной системы средствами языка программирования C++ в среде С++ Builder. Пользовательский интерфейс клиентского приложения.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 14.02.2016
Размер файла 1,9 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

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

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

"Базы данных"

Реферат

Пояснительная записка

ADO, C++, MS SQL SERVER 2012, C++ Builder, БАЗА ДАННЫХ,ТАБЛИЦЫ, ЗАПРОСЫ, ПРЕДМЕТНАЯ ОБЛАСТЬ, ПРЕДСТАВЛЕНИЯ, ТРИГГЕРЫ, ХРАНИМЫЕ ПРОЦЕДУРЫ, ИНФОРМАЦИОННАЯ СИСТЕМ, КЛИЕНТ, СЕРВЕР.

Объектом разработки является информационная система, созданная с использованием средств, предоставляемых современными СУБД реляционного типа.

Цель работы - разработка программного обеспечения для информационной системы транспортной компании в архитектуре клиент - сервер.

Полученные результаты: в процессе разработки проводилось изучение основных средств, предоставляемых средой MS SQL SERVER 2012, и на основе их использования разработана и отлажена программа создания базы данных и серверной части информационной системы. Средствами языка программирования C++ в среде С++ Builder разработано программное обеспечение для информационной системы транспортной компании в архитектуре клиент-сервер.

Графическая часть включает в себя диаграмму базы данных.

Содержание

  • Введение
  • 1. Информационная система транспортной компании в архитектуре клиент - сервер
  • 1.1 Анализ предметной области
  • 1.2 Анализ информационных задач и круга пользователей системы
  • 1.3 Выработка требований и ограничений
  • 1.4 Разработка проекта базы данных
  • 1.5 Программная реализация проекта базы данных
  • 1.6 Запросы
  • 1.7 Представления
  • 1.8 Серверная часть информационной системы
  • 1.9 Запросы клиентского приложения к базе данных
  • 1.10 Пользовательский интерфейс клиентского приложения
  • Заключение
  • Список использованной литературы
  • Приложения
  • Введение
  • Система баз данных-- это компьютеризированная система хранения записей, т.е. компьютеризированная система, основное назначение которой - хранить информацию, предоставляя пользователям средства ее извлечения и модификации. К информации может относиться все, что заслуживает внимания отдельного пользователя или организации, использующей систему, иначе говоря, все необходимое для текущей работы данного пользователя или предприятия. клиентский приложение builder server
  • Основными составляющими информационных систем, построенных на основе баз данных, являются файлы БД, СУБД и программное обеспечение (клиентские приложения), позволяющие пользователю манипулировать информацией и совершать необходимые для решения его задач действия.
  • 1. Информационная система транспортной компании в архитектуре клиент - сервер
  • В процессе выполнения курсового проекта должно быть разработано и реализовано клиент - серверное приложение для базы данных транспортной компании.
  • Пользовательский интерфейс должен быть как можно более удобным для конечного пользователя. Серверная часть должна содержать в себе таблицы, представления, хранимые процедуры, триггеры и быть разработана на языке Transact SQL. Помимо этого должны быть представлены: структура базы данных и результаты работы программы. В качестве языка разработки была выбрана среда С++ Builder, поскольку она обладает компонентами, позволяющими работать с базами данных.
  • 1.1 Анализ предметной области
  • Предметной областью данного проекта является транспортная компания. В качестве объектов этой области можно выделить заказчика, груз, автомобиль. Каждый из объектов содержит в себе некие характеристики (см. Рис xyz) и представляет собой таблицу базы данных.

1. Заказчики - код заказчика, Ф.И.О., название организации, адрес, телефон;

2. Грузы - код груза, наименование, код вида автомобиля для транспортировки;

3. Автомобили - код автомобиля, код марки, код вида автомобиля, регистрационный номер, номер кузова, номер двигателя, год выпуска, дата последнего ТО;

Взаимосвязь этих объектов происходит в таблице "Рейсы", характеристиками которой являются код рейса, код автомобиля, код заказчика, откуда, куда, дата отправления, дата прибытия, код груза, цена, отметка об оплате, отметка о возврате.

  • 1.2 Анализ информационных задач и круга пользователей системы
  • В качестве пользователя системы был выбран менеджер. Его информационные задачи: регистрировать рейсы. Он добавляет записи в таблицу "Рейсы".
  • 1.3 Выработка требований и ограничений
  • При разработке клиентского приложения необходимо определить ряд ограничений, для потенциального пользователя. В данной работе пользователем выступает менеджер транспортной компании. Он может управлять рейсами и пользоваться дополнительными табличками для внесения полной информации о рейсе.

На данные наложены ограничения, позволяющие уменьшить вероятность внесения не верной информации. Например: формат телефонного номера "+7(***)-***-**-**", где вместо "*" цифры от 0 до 9. Данные текстового типа ограничены по длине: адрес - 50 символов, ФИО - 40, номер кузова - 17.

  • 1.4 Разработка проекта базы данных
  • .
  • Их взаимосвязь также можно проиллюстрировать схемой БД (см. рис 1).

Рис 1. Схема БД.

  • 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.

  • 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 'г. Заречный%'
  • Полный перечень разработанных запросов и результаты их работы см. приложение Г.
  • 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;

Рис 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.

  • 1.8 Серверная часть информационной системы
  • Серверная часть информационной системы может содержать в себе бизнес логику, а именно пользовательские функции, хранимые процедуры, триггеры, которые могут облегчить клиентское приложение и его сопровождение, но замедлить работу сервера при большом количестве пользователей и поступающих запросов.

Хранимые процедуры

Данный курсовой проект содержит 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.

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,

@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.

Триггеры для поддержки сложных ограничений целостности в базе данных

Данный курсовой проект содержит два триггера.

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)

Рис 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

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. Поиск рейсов происходит также, посредством хранимой процедуры.
  • Для оптимизации взаимодействия клиента с сервером необходимо избегать передачи лишней информации для экономии траффика. Это и позволяют сделать хранимые процедуры. Также, их достоинствами является то, что они хранятся на сервере в откомпилированном виде и позволяют скрывать информацию.
  • 1.10 Пользовательский интерфейс клиентского приложения
  • При проектировке приложения надо учитывать то, что оно будет использоваться продолжительное время пользователем, не знающим языка Transact - SQL. Поэтому, запросы к серверу должны быть прописаны в исходном коде ПО, а сам интерфейс (см. Рис 6 - Рис 10) должен быть максимально интуитивным и не утомлять работника.

Рис 6. Главное окно.

Рис 7. Окно добавления рейса.

Рис 8. Окно статистики.

Рис 9. Подробности о заказчике.

По большей части пользователь будет работать с первым окном и кнопками добавить/изменить рейс. При необходимости он может воспользоваться поиском или посмотреть другие таблички.

  • Заключение
  • В результате выполнения курсового проекты было разработано и реализовано клиент - серверное приложение для менеджера транспортной компании. При помощи приложения можно работать с рейсами. Приложение разработано в среде С++ Builder на языке C++. Серверная часть реализована в SQL SERVER 2012 на языке Transact - SQL. Программа отлажена. Результаты работы проиллюстрированы. Задание выполнено в полном объеме.
  • Список использованной литературы
  • 1. А. Я. Архангельский. Программирование в C++ Builder. - Бином, 2010. 1304с.
  • 2. И. А. Казакова. Основы языка Transact SQL. - Пенза: Издательство ПГУ, 2013. 163 с.
  • 3. А. Г. Бондарь. Interbase и Firebird. - Санкт-Петербург: БХВ-Петербург, 2012. 593 с.
  • Приложения
  • Утв.

Текст программы создания БД

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_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,

Reg_nomer CHAR(9) CHECK (Reg_nomer LIKE '[а,е,м,о,с,у][0-9][0-9][0-9][а,е,м,о,с,у][а,е,м,о,с,у][0-9][0-9][0-9," "]') NOT NULL,

Nomer_kuzova VARCHAR(17) CHECK (Nomer_kuzova LIKE '[0-9,A-H,J-N,P,R-Z][0-9,A-H,J-N,P,R-Z][0-9,A-H,J-N,P,R-Z][0-9,A-H,J-N,P,R-Z][0-9,A-H,J-N,P,R-Z][0-9,A-H,J-N,P,R-Z][0-9,A-H,J-N,P,R-Z][0-9,A-H,J-N,P,R-Z][0-9,A-H,J-N,P,R-Z][0-9,A-H,J-N,P,R-Z][0-9,A-H,J-N,P,R-Z][0-9,A-H,J-N,P,R-Z][0-9,A-H,J-N,P,R-Z][0-9][0-9][0-9][0-9]') NOT NULL,

Nomer_dvigatelya VARCHAR(10) NOT NULL,

God_vypuska SMALLINT CHECK (God_vypuska>=2010 AND God_vypuska<=2040) NOT NULL,

Data_poslednego_TO DATE CHECK (Data_poslednego_TO BETWEEN '2013-01-01' AND '2040-01-01') NOT NULL

)

CREATE TABLE Zakazchiki

(

Kod_zakazchika SMALLINT PRIMARY KEY CHECK (Kod_zakazchika>0 AND Kod_zakazchika<10000),

FIO VARCHAR(40) NOT NULL,

NAME_organization VARCHAR(50) NOT NULL,

Adress VARCHAR(50) NOT NULL,

Telephone VARCHAR(16) CHECK (Telephone LIKE '[+][7][(][0-9][0-9][0-9][)][0-9][0-9][0-9][-][0-9][0-9][-][0-9][0-9]') NOT NULL

)

CREATE TABLE Reisy

(

Kod_reisa SMALLINT PRIMARY KEY CHECK (Kod_reisa>0 AND Kod_reisa<100000),

Kod_avto_F SMALLINT FOREIGN KEY REFERENCES Avto(Kod_avto) CHECK (Kod_avto_F>0 AND Kod_avto_F<500) NOT NULL,

Kod_zakazchika_F SMALLINT FOREIGN KEY REFERENCES Zakazchiki(Kod_zakazchika) CHECK (Kod_zakazchika_F>0 AND Kod_zakazchika_F<10000) NOT NULL,

Otkuda VARCHAR(50) NOT NULL,

Kuda VARCHAR(50) NOT NULL,

Data_otpravki DATE CHECK (Data_otpravki BETWEEN '2013-01-01' AND '2040-01-01') NOT NULL,

Data_pribytiya DATE CHECK (Data_pribytiya BETWEEN '2013-01-01' AND '2040-01-01') NOT NULL,

Kod_gruza_F SMALLINT FOREIGN KEY REFERENCES Gruzy(Kod_gruza) CHECK (Kod_gruza_F>0 AND Kod_gruza_F<10000) NOT NULL,

Cost INT CHECK (Cost>0 AND COST<10000000) NOT NULL,

Otmetka_ob_oplate BIT NOT NULL,

Otmetka_o_vozvrate BIT NOT NULL

)

Текст программы для ввода текстовых данных

(Обязательное)

USE Transport

Insert Into [Zakazchiki] Values

(1,'Абрамов Максим Петрович','ООО "Движение"','г. Пенза, ул. Володарского 24','+7(901)233-72-03'),

(2,'Аганов Артур Дмитривич','ОАО "Информационно-вычислительный центр"','г. Пенза, ул. Революционная 21','+7(962)266-34-51'),

(3,'Адрианов Тимофей Николаевич','ООО "Смарт Медиа"','г. Сердобск, ул. Ленина 257','+7(987)297-42-13'),

(4,'Александров Никита Алексеевич','ООО "Рекламное Агентство "Такса"','г. Кузнецк, ул. Ленина 271','+7(937)290-70-52'),

(5,'Алексеев Федор Михайлович','ЗАО "Фьючер Медиа"','г. Сердобск, ул. Гоголя 16','+7(965)295-85-42'),

(6,'Гордон Павел Алексеевич','ООО "Стенд-XXI"','г. Сердобск, ул. Красная 37','+7(937)213-16-61'),

(7,'Губа Евгений Александрович','ООО "Принт РУСЬ"','г. Пенза, ул. Кирова 55','+7(950)251-65-91'),

(8,'Голуб Олеся Александровна','ООО "Нью Медиа"','г. Заречный, ул. Ленина 44','+7(962)382-52-40'),

(9,'Вьюгинов Николай Юрьевич','ООО "Студия Черкасова"','г. Кузнецк, ул. Московская 65','+7(901)221-47-06'),

(10,'Горохов Никита Дмитриевич','ООО "Медиа Холдинг "РЕЗОНАНС"','г. Заречный, ул. Зеленая 9','+7(903)044-48-08'),

(11,'Григорьев Святослав Александрович','ООО "Голден Стрим Медиа"','г. Заречный, пр. Победы 47','+7(965)267-18-27'),

(12,'Гудков Сергей Михайлович','ООО "Астер-Ек+"','г. Пенза, ул. Бакунина 11','+7(908)982-94-31'),

(13,'Красавцев Илья Александрович','ООО "Высшая лига"','г. Кузнецк, ул. Белинского 151','+7(965)379-04-99'),

(14,'Кувшинова Дария Михайловна','ООО "Эзапринт"','г. Пенза, ул. Суворова 144','+7(903)290-41-63'),

(15,'Манукян Карен Артурович','ООО "Форт Диалог-Исеть"','г. Сердобск, ул. Гагарина 20','+7(908)287-01-64'),

(16,'Ниссхен Ксения Денисовна','ООО "АграфЕк"','г. Сердобск, ул. Ленина 152','+7(937)217-29-56'),

(17,'Печеркин Александр Андреевич','ООО "НВМ"','г. Пенза, ул. Пушкина 158','+7(962)350-58-55'),

(18,'Савостьянов Антон Сергеевич','ООО "Фабрика Цвета"','г. Сердобск, ул. Калинина 53','+7(937)200-83-36'),

(19,'Таранов Денис Васильевич','ООО "ЦСБ"','г. Сосновоборск, ул. Ленина 24','+7(950)295-73-90'),

(20,'Филиппов Дмитрий Сергеевич','ООО "ПрессА"','г. Пенза, ул. Калинина 135','+7(937)217-71-53'),

(21,'Шокиров Иброхим Джамшедович','ООО "Парамаунт"','г. Сосновоборск, ул. Сосновая 7','+7(961)375-70-10'),

(22,'Юрьев Семен Юрьевич','ООО "Астарта"','г. Кузнецк, ул. Гагарина 31','+7(996)219-66-96'),

(23,'Яковлева Дарья Владимировна','ООО "Диамант"','г. Пенза, ул. Мереняшева 93','+7(950)350-16-50'),

(24,'Рубинский Глеб Викторович','ООО "Хозяйство"','г. Заречный, ул. Мира 32','+7(937)355-55-59'),

(25,'Свечиский Андрей Сергеевич','ООО "Мастер цвета"','г. Сосновоборск, ул. Калинина 22','+7(996)377-68-70'),

(26,'Полковников Алексей Леонидович','ООО "АДАУРА"','г. Пенза, ул. Захарова 16','+7(937)797-88-55'),

(27,'Першаков Николай Михайлович','ООО "Квант-2"','г. Кузнецк, ул. Ленина 227','+7(962)567-45-65')

Insert Into [Vidy_avto] Values

(1,'Тягач'),

(2,'Фургон промтоварный изотермический'),

(3,'Фургон рефрижераторный'),

(4,'Цистерна')

Insert Into [Vidy_gruzov] Values

(1,'Строительная техника',1),

(2,'Военная техника',1),

(3,'Мебель',2),

(4,'Пищевые продукты',3),

(5,'Растения',3),

(6,'Жидкости',4),

(7,'Газ',4)

Insert Into [Marka_avto] Values

(1,'Volvo'),

(2,'Iveco'),

(3,'Daf'),

(4,'Kamaz'),

(5,'Renault'),

(6,'Man'),

(7,'Mercedes-Benz'),

(8,'Scania'),

(9,'Hyunday'),

(10,'Mitsubishi Fuso'),

(11,'Isuzu'),

(12,'Hino'),

(13,'Avia'),

(14,'Ford')

Insert Into [Gruzy] Values

(1,'Кран',1),

(2,'Танк',2),

(3,'Стол',3),

(4,'Кровать',3),

(5,'Кухонный гарнитур',3),

(6,'Мороженое',4),

(7,'Курица',4),

(8,'Полуфабрикаты',4),

(9,'Саженцы кедра',5),

(10,'Саженцы пальмы',5),

(11,'Вода',6),

(12,'Нефть',6),

(13,'Бензин',6),

(14,'Пропан',7)

Insert Into [Avto] Values

(1,1,3,'а100аа58','XTZA8N6M3D2F14538','K3-VET',2010,'2013-08-20'),--Фургон рефрижераторный

(2,4,1,'а124ао58','XWWA8KDS3D2F18255','HE-EG',2012,'2013-07-10'),--Тягач

(3,6,2,'е744мм77','X1VA8LT53D2F14872','1G-EU',2011,'2013-09-13'),--Фургон промтоварный изотермический

(4,13,1,'м345оу58','X6FA8V6K4R2F13386','5E-L',2010,'2013-03-06'),--Тягач

(5,4,2,'с976са58','Z72A8S836D2F16877','D4-NM',2013,'2013-01-09'),--Фургон промтоварный изотермический

(6,8,2,'с876уа58','H38A8N846D2F13478','FF-FD',2013,'2013-04-03'),--Фургон промтоварный изотермический

(7,4,1,'м261оа58','R53A8C876D2F17873','KV-5B',2012,'2013-12-26'),--Тягач

(8,9,3,'с456са58','ZA6A8Y836D2F12776','NS-B9',2011,'2013-07-07'),--Фургон рефрижераторный

(9,5,4,'у276уа58','AJ2A8J876D2F17273','54-DH',2013,'2013-04-15'),--Цистерна

(10,11,4,'с876са75','BN8A8D866D2F14770','MJ-J4',2013,'2013-11-03'),--Цистерна

(11,2,3,'с876са58','55AA8H826D2F11377','N7-YE',2012,'2013-02-06'),--Фургон рефрижераторный

(12,3,3,'м956оа58','6WNA8G836D2F12873','GM-HB',2013,'2013-04-23'),--Фургон рефрижераторный

(13,2,2,'а926са48','2GTA8D836D2F13371','E4-4F',2013,'2013-05-17'),--Фургон промтоварный изотермический

(14,12,1,'с476уа58','7SEA8J838D2F14733','BN-BM',2012,'2013-06-24'),--Тягач

(15,5,1,'у606оа58','ZHBA8F846D2F15435','4R-JX',2013,'2013-07-02'),--Тягач

(16,9,4,'а176са58','B73A8H876D2F18459','V4-FN',2010,'2013-03-18')--Цистерна

Insert Into [Reisy] Values

(1,1,1,'г. Пенза, ул. Володарского 31','г. Пенза, ул. Пушкина 40','2013-07-01','2013-07-20',7,10000,1,0),

(2,2,2,'г. Заречный, пр. Победы 25','г. Заречный, ул. Зеленая 8','2013-07-05','2013-07-10',1,53200,1,0),

(3,3,3,'г. Пенза, ул. Ленина 16а','г. Сердобск, ул. Гагарина 28','2013-08-25','2013-09-10',2,33700,1,1),

(4,4,4,'г. Пенза, ул. Суворова 156','г. Кузнецк, ул. Ленина 7','2013-09-03','2013-09-13',1,15600,0,0),

(5,5,2,'г. Кузнецк, ул. Белинского 35','с. Чемодановка, ул. Заречная 3','2013-09-07','2013-09-12',1,17600,1,1),

(6,3,7,'г. Пенза, ул. Лермонтова 3','г. Пенза, ул. Чкалова 17','2013-08-21','2013-09-01',3,18600,1,0),

(7,5,3,'г. Заречный, ул. Комсомольская 1а','г. Кузнецк, ул. Октябрьская 69','2013-07-23','2013-07-29',1,43000,0,1),

(8,1,9,'г. Сердобск, ул. Комсомольская 9','г. Пенза, ул. Тельмана 25','2013-10-12','2013-10-13',1,59800,1,0),

(9,7,12,'г. Пенза, ул. Калинина 152','г. Пенза, ул. Тухачевского 58','2013-08-11','2013-09-01',2,23500,1,0),

(10,9,4,'г. Пенза, ул. Окружная 9','г. Сердобск, ул. Гоголя 96','2013-07-07','2013-07-23',11,67000,1,0),

(11,11,23,'г. Пенза, ул. Пушанина 12','г. Заречный, ул. Светлая 20','2013-08-03','2013-09-26',8,21000,1,1),

(12,12,13,'г. Кузнецк, ул. Пензенская 345','г. Кузнецк, ул. Победы 47','2013-09-08','2013-09-18',9,43100,0,0),

(13,6,18,'г. Пенза, ул. Сухумская 32','г. Пенза, ул. Измайлова 42','2013-07-03','2013-07-20',4,27700,1,0),

(14,15,19,'г. Пенза, ул. Санитарная 21','г. Пенза, ул. Ангарская 46','2013-08-06','2013-08-31',2,12400,1,0),

(15,3,8,'г. Пенза, ул. Кураева 10','г. Пенза, ул. Тарханова 7','2013-07-05','2013-07-16',4,36700,1,1),

(16,8,17,'г. Сердобск, ул. Калинина 21','г. Заречный, пр. Мира 17','2013-09-11','2013-09-24',6,55200,0,0),

(17,8,22,'г. Пенза, ул. Ставского 13','г. Кузнецк, ул. Правды 22','2013-10-26','2013-10-30',7,31600,0,0),

(18,5,27,'г. Пенза, ул. Карпинского 10а','г. Сердобск, ул. Циалковского 49','2013-10-22','2013-10-30',3,23300,1,0),

(19,2,1,'г. Кузнецк, ул. Орджоникидзе 212','г. Пенза, ул. Свободы 29','2013-09-06','2013-09-23',2,16000,1,0),

(20,11,24,'г. Пенза, ул. Фурманова 15','г. Пенза, ул. Урицкого 125','2013-08-03','2013-08-25',9,55200,1,0),

(21,13,25,'г. Сердобск, ул. Комарова 1','г. Заречный, ул. Строителей 47','2013-08-07','2013-08-13',13,31600,0,1),

(22,14,7,'г. Пенза, пр. Строителей 38','г. Пенза, ул. Суворова 121','2013-08-08','2013-08-19',12,20700,0,1),

(23,9,11,'г. Сердобск, ул. Гагарина 3','г. Сердобск, ул. Кирпичная 5','2013-07-04','2013-08-10',1,40700,1,0),

(24,5,19,'г. Пенза, ул. Рахманинова 49','г. Пенза, ул. Пушкина 128','2013-09-01','2013-09-13',5,15200,1,0),

(25,10,12,'г. Заречный, пр. Победы 22','г. Пенза, ул. Мира 6','2013-09-07','2013-09-12',13,53100,0,0),

(26,11,20,'г. Пенза, ул. Ладожская 83','г. Пенза, ул. Ленинградская 2','2013-10-03','2013-10-23',10,45600,1,0),

(27,16,9,'г. Заречный, ул. Конституции 41','г. Пенза, ул. Попова 50','2013-08-04','2013-08-20',13,25600,0,0),

(28,6,2,'г. Кузнецк, ул. Московская 35','г. Пенза, ул. Окружная 115б','2013-06-12','2013-07-03',4,55600,1,1),

(29,3,22,'г. Заречный, ул. Светлая 33','г. Кузнецк, ул. Ленина 271','2013-09-17','2013-09-24',5,25600,1,0)

Реализация запросов на языке SQL

(Обязательное)

--Простые запросы.

--Простые запросы.

--1. По Дате отправки рейса определить цены оплаченных рейсов.

SELECT Data_otpravki AS Дата, Cost AS "Цена" FROM Reisy WHERE Data_otpravki BETWEEN getdate()-70 AND getdate()

--2. По Номеру кузова определить дату последнего ТО.

SELECT Data_poslednego_TO AS "Дата последнего ТО" FROM Avto WHERE Nomer_kuzova = 'H38A8N846D2F13478'

--3. По ФИО заказчика определить его номер телефона.

SELECT Telephone AS "Телефон" FROM Zakazchiki WHERE FIO LIKE 'Филиппов%'

--Сложные запросы.

--4. По Дате отправки груза определить список ФИО заказчиков.

SELECT Data_otpravki AS Дата, FIO AS "ФИО" FROM Zakazchiki, Reisy WHERE Reisy.Kod_zakazchika_F=Zakazchiki.Kod_zakazchika AND Reisy.Data_otpravki BETWEEN getdate()-70 AND getdate()

--5. По Регистрационному номеру авто определить марку.

SELECT NAME_marka AS "Марка" FROM Marka_avto, Avto WHERE Avto.Kod_marki_F=Marka_avto.Kod_marki AND Avto.Reg_nomer='м345оу58'

--6. По Дате отправления определить виды грузов.

SELECT Data_otpravki AS Дата, NAME_vid_gruza AS "Вид груза" FROM Reisy,Gruzy,Vidy_gruzov WHERE Reisy.Kod_gruza_F=Gruzy.Kod_gruza AND Gruzy.Kod_vida_gruza_F=Vidy_gruzov.Kod_vida_gruza AND Reisy.Data_otpravki BETWEEN getdate()-70 AND getdate()

--7. По Грузу определить вид автомобиля для перевозки.

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='Танк'

--8. По Цене рейса определить виды грузов.

SELECT NAME_vid_gruza AS "Вид груза", Cost AS Цена FROM Reisy,Gruzy,Vidy_gruzov WHERE Reisy.Kod_gruza_F=Gruzy.Kod_gruza AND Gruzy.Kod_vida_gruza_F=Vidy_gruzov.Kod_vida_gruza AND Reisy.Cost BETWEEN 10000 AND 30000

--9. По Адресу отправки определить название организации.

SELECT NAME_organization AS "Название организации",Kuda AS Адрес FROM Zakazchiki, Reisy WHERE Reisy.Kod_zakazchika_F=Zakazchiki.Kod_zakazchika AND Reisy.Kuda LIKE 'г. Заречный%'

--10. По Дате прибытия определить виды автомобилей.

SELECT Data_pribytiya AS Дата,NAME_vid_avto AS "Виды автомобилей" FROM Reisy, Avto, Vidy_avto WHERE Reisy.Kod_avto_F=Avto.Kod_avto AND Avto.Kod_vida_avto_F=Vidy_avto.Kod_vida_avto AND Reisy.Data_pribytiya BETWEEN getdate()-70 AND getdate()

Рис 10. Результаты запросов.

Реализация клиентского приложения на языке С++

(Обязательное)

//main.h

//---------------------------------------------------------------------------

#ifndef mainH

#define mainH

//---------------------------------------------------------------------------

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <ADODB.hpp>

#include <DB.hpp>

#include <DBGrids.hpp>

#include <Grids.hpp>

#include <Buttons.hpp>

//---------------------------------------------------------------------------

#include "Avto.h"

#include "AvtoTable.h"

#include "Zakazchiki.h"

#include "ZakazchikiTable.h"

#include "Gruz.h"

#include "GruzTable.h"

#include "Reisy.h"

#include "MarkaTable.h"

#include "VidyAvtoTable.h"

#include "VidyGruzovTable.h"

#include "Statistic.h"

//---------------------------------------------------------------------------

class TFormMain : public TForm

{

__published: // IDE-managed Components

TADOConnection *ADOConnection1;

TADOQuery *ADOQuery1;

TDBGrid *DBGrid1;

TDataSource *DataSource1;

TBitBtn *BitBtnDelete;

TBitBtn *BitBtnAdd;

TBitBtn *BitBtnEdit;

TEdit *Edit_Kod_reisa;

TEdit *Edit_Reg_nomer;

TEdit *Edit_Zakazchik;

TEdit *Edit_Otkuda;

TEdit *Edit_Kuda;

TEdit *Edit_Data_otpravki;

TEdit *Edit_Data_pribytiya;

TEdit *Edit_Gruz;

TEdit *Edit_Cost;

TButton *ButtonSearch;

TButton *ButtonCancel;

TButton *ButtonClear;

TBitBtn *BitBtnAvtoTable;

TBitBtn *BitBtnZakazchiki;

TBitBtn *BitBtnGruzTable;

TBitBtn *BitBtnVidyAvtoTable;

TBitBtn *BitBtnMarkaTable;

TBitBtn *BitBtnVidyGruzivTable;

TADOStoredProc *ADOStoredProcDefaultSize;

TBitBtn *BitBtn1;

void __fastcall DBGrid1DrawColumnCell(TObject *Sender, const TRect &Rect, int DataCol,

TColumn *Column, TGridDrawState State);

void __fastcall DBGrid1CellClick(TColumn *Column);

void __fastcall ButtonSearchClick(TObject *Sender);

void __fastcall ButtonCancelClick(TObject *Sender);

void __fastcall ButtonClearClick(TObject *Sender);

void __fastcall BitBtnDeleteClick(TObject *Sender);

void __fastcall BitBtnAddClick(TObject *Sender);

void __fastcall BitBtnEditClick(TObject *Sender);

void __fastcall BitBtnAvtoTableClick(TObject *Sender);

void __fastcall BitBtnZakazchikiClick(TObject *Sender);

void __fastcall BitBtnGruzTableClick(TObject *Sender);

void __fastcall BitBtnMarkaTableClick(TObject *Sender);

void __fastcall BitBtnVidyAvtoTableClick(TObject *Sender);

void __fastcall Edit_Kod_reisaKeyDown(TObject *Sender, WORD &Key, TShiftState Shift);

void __fastcall BitBtnVidyGruzivTableClick(TObject *Sender);

void __fastcall BitBtn1Click(TObject *Sender);

private: // User declarations

int *defaultSize,n_defaultSize;

void __fastcall DBGrid_Default_setting();

public: // User declarations

__fastcall TFormMain(TComponent* Owner);

};

//---------------------------------------------------------------------------

extern PACKAGE TFormMain *FormMain;

//---------------------------------------------------------------------------

#endif

//main.cpp

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "main.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TFormMain *FormMain;

//---------------------------------------------------------------------------

__fastcall TFormMain::TFormMain(TComponent* Owner)

: TForm(Owner)

{

ADOConnection1->Connected=1;

ADOQuery1->Active=1;

// 0-й параметр ReturnValue

ADOStoredProcDefaultSize->Parameters->Refresh();

n_defaultSize=ADOStoredProcDefaultSize->Parameters->Count-1;

for(int i=0;i<n_defaultSize+1;i++)

{

ADOStoredProcDefaultSize->Parameters->Items[i]->Value=0;

}

ADOStoredProcDefaultSize->ExecProc();

defaultSize=new int[n_defaultSize];

for(int i=0;i<n_defaultSize;i++)

{

defaultSize[i]=ADOStoredProcDefaultSize->Parameters->Items[i+1]->Value;

}

delete ADOStoredProcDefaultSize;

DBGrid_Default_setting();

}

//---------------------------------------------------------------------------

void __fastcall TFormMain::DBGrid1DrawColumnCell(TObject *Sender, const TRect &Rect,

int DataCol, TColumn *Column, TGridDrawState State)

{

if(Column->Field->DataSet->FieldByName("Отметка об оплате")->AsBoolean==0)

{

DBGrid1->Canvas->Brush->Color = clSilver;

}

else

{

DBGrid1->Canvas->Brush->Color = (TColor)RGB(190,255,150);

}

if(Column->Field->DataSet->FieldByName("Отметка о возврате")->AsBoolean==1)

{

DBGrid1->Canvas->Brush->Color = (TColor)RGB(250,200,90);

}

if(Column->FieldName=="Заказчик" || Column->FieldName=="Номер автомобиля" || Column->FieldName=="Груз")

{

DBGrid1->Canvas->Font->Color = clBlue;

DBGrid1->Canvas->Font->Style = TFontStyles() << fsUnderline;

}

DBGrid1->DefaultDrawColumnCell(Rect, DataCol, Column, State);

}

//---------------------------------------------------------------------------

void __fastcall TFormMain::DBGrid1CellClick(TColumn *Column)

{

if(Column->FieldName=="Номер автомобиля")

{

TForm2 *Form2=new TForm2(this,ADOConnection1,3,ADOQuery1->Fields->Fields[9]->AsInteger);

Form2->ShowModal();

delete Form2;

}

else if(Column->FieldName=="Заказчик")

{

TForm3 *Form3=new TForm3(this,ADOQuery1->Fields->Fields[10]->AsInteger,ADOConnection1);

Form3->ShowModal();

delete Form3;

}

else if(Column->FieldName=="Груз")

{

TForm4 *Form4=new TForm4(this,ADOQuery1->Fields->Fields[11]->AsInteger,ADOConnection1);

Form4->ShowModal();

delete Form4;

}

}

//---------------------------------------------------------------------------

void __fastcall TFormMain::ButtonSearchClick(TObject *Sender)

{

ADOQuery1->Close();

ADOQuery1->SQL->Clear();

ADOQuery1->SQL->Add(System::String("")+

"EXEC SearchReisy '"+

Edit_Kod_reisa->Text+"','"+

Edit_Reg_nomer->Text+"','"+

Edit_Zakazchik->Text+"','"+

Edit_Otkuda->Text+"','"+

Edit_Kuda->Text+"','"+

Edit_Data_otpravki->Text+"','"+

Edit_Data_pribytiya->Text+"','"+

Edit_Gruz->Text+"','"+

Edit_Cost->Text+"'"

);

ADOQuery1->Open();

DBGrid_Default_setting();

}

//---------------------------------------------------------------------------

void __fastcall TFormMain::DBGrid_Default_setting()

{

for(int i=0;i<n_defaultSize;i++)

{

if(defaultSize[i]) DBGrid1->Columns->Items[i]->Width=defaultSize[i];

else DBGrid1->Columns->Items[i]->Visible=0;

}

}

//---------------------------------------------------------------------------

void __fastcall TFormMain::ButtonCancelClick(TObject *Sender)

{

ADOQuery1->Close();

ADOQuery1->SQL->Clear();

ADOQuery1->SQL->Add("EXEC SelectReisy");

ADOQuery1->Open();

DBGrid_Default_setting();

}

//---------------------------------------------------------------------------

void __fastcall TFormMain::ButtonClearClick(TObject *Sender)

{

Edit_Kod_reisa->Text="";

Edit_Reg_nomer->Text="";

Edit_Zakazchik->Text="";

Edit_Otkuda->Text="";

Edit_Kuda->Text="";

Edit_Data_otpravki->Text="";

Edit_Data_pribytiya->Text="";

Edit_Gruz->Text="";

Edit_Cost->Text="";

}

//---------------------------------------------------------------------------

void __fastcall TFormMain::BitBtnDeleteClick(TObject *Sender)

{

int kod_reisa=ADOQuery1->Fields->Fields[0]->AsInteger;

ADOQuery1->Close();

ADOQuery1->SQL->Clear();

ADOQuery1->SQL->Add(System::String("")+"EXEC DeleteReisy "+kod_reisa);

ADOQuery1->ExecSQL();

ADOQuery1->SQL->Clear();

ADOQuery1->SQL->Add("EXEC SelectReisy");

ADOQuery1->Open();

DBGrid_Default_setting();

}

//---------------------------------------------------------------------------

void __fastcall TFormMain::BitBtnAddClick(TObject *Sender)

{

TForm5 *Form5=new TForm5(this,ADOConnection1,1);

Form5->ShowModal();

delete Form5;

ADOQuery1->Close();

ADOQuery1->SQL->Clear();

ADOQuery1->SQL->Add("EXEC SelectReisy");

ADOQuery1->Open();

DBGrid_Default_setting();

}

//---------------------------------------------------------------------------

void __fastcall TFormMain::BitBtnEditClick(TObject *Sender)

{

TForm5 *Form5=new TForm5(this,ADOConnection1,2,ADOQuery1->Fields->Fields[0]->AsInteger);

Form5->ShowModal();

delete Form5;

ADOQuery1->Close();

ADOQuery1->SQL->Clear();

ADOQuery1->SQL->Add("EXEC SelectReisy");

ADOQuery1->Open();

DBGrid_Default_setting();

}

//---------------------------------------------------------------------------

void __fastcall TFormMain::BitBtnAvtoTableClick(TObject *Sender)

{

TForm6 *Form6=new TForm6(this,ADOConnection1);

Form6->ShowModal();

delete Form6;

}

//---------------------------------------------------------------------------

void __fastcall TFormMain::BitBtnZakazchikiClick(TObject *Sender)

{

TForm7 *Form7=new TForm7(this,ADOConnection1);

Form7->ShowModal();

delete Form7;

}

//---------------------------------------------------------------------------

void __fastcall TFormMain::BitBtnGruzTableClick(TObject *Sender)

{

TForm8 *Form8=new TForm8(this,ADOConnection1);

Form8->ShowModal();

delete Form8;

}

//---------------------------------------------------------------------------

void __fastcall TFormMain::BitBtnMarkaTableClick(TObject *Sender)

{

TForm9 *Form9=new TForm9(this,ADOConnection1);

Form9->ShowModal();

delete Form9;

}

//---------------------------------------------------------------------------

void __fastcall TFormMain::BitBtnVidyAvtoTableClick(TObject *Sender)

{

TForm10 *Form10=new TForm10(this,ADOConnection1);

Form10->ShowModal();

delete Form10;

}

//---------------------------------------------------------------------------

void __fastcall TFormMain::Edit_Kod_reisaKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)

{

if(Key==13)

{

ButtonSearchClick(Sender);

}

}

//---------------------------------------------------------------------------

void __fastcall TFormMain::BitBtnVidyGruzivTableClick(TObject *Sender)

{

TForm11 *Form11=new TForm11(this,ADOConnection1);

Form11->ShowModal();

delete Form11;

}

//---------------------------------------------------------------------------

void __fastcall TFormMain::BitBtn1Click(TObject *Sender)

{

TFormStat *Form=new TFormStat(this,ADOConnection1);

Form->ShowModal();

delete Form;

}

//---------------------------------------------------------------------------

Результаты работы хранимых процедур

(Обязательное)

EXEC SearchReisy `',`',`на', `', `', `', `', `', `'

Рис 10. Результат работы процедуры SearchReisy с параметром ФИО "на".

EXEC SelectReisy

Рис 11. Результат работы процедуры SelectReisy.

EXEC DefaultSizeReisy

@st0 = @st0 OUTPUT,@st1 = @st1 OUTPUT,@st2 = @st2 OUTPUT,

@st3 = @st3 OUTPUT,@st4 = @st4 OUTPUT,@st5 = @st5 OUTPUT,

@st6 = @st6 OUTPUT,@st7 = @st7 OUTPUT,@st8 = @st8 OUTPUT,

@st9 = @st9 OUTPUT,@st10 = @st10 OUTPUT,@st11 = @st11 OUTPUT,

@st12 = @st12 OUTPUT, @st13 = @st13 OUTPUT

Рис 12. Результат работы процедуры DefaultSizeReisy.

EXEC MyStatistics

@kol_reysov = @kol_reysov OUTPUT,

@avg_reysov = @avg_reysov OUTPUT,

@kol_zakaz = @kol_zakaz OUTPUT,

@kol_avto = @kol_avto OUTPUT,

@kol_reysov_paid = @kol_reysov_paid OUTPUT,

@kol_reysov_not_paid = @kol_reysov_not_paid OUTPUT,

@kol_reysov_return = @kol_reysov_return OUTPUT,

@cost_reysov_paid = @cost_reysov_paid OUTPUT,

@cost_reysov_not_paid = @cost_reysov_not_paid OUTPUT,

@cost_reysov_return = @cost_reysov_return OUTPUT

Рис 13. Результат работы процедуры MyStatistic.

EXEC DeleteReis 5

Рис 14. Результат работы процедуры DeleteReis с параметром 5.

Размещено на Allbest.ru

...

Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.