Автор работы: Пользователь скрыл имя, 29 Апреля 2013 в 14:55, курсовая работа
В данном курсовом проекте была разработана база данных в СУБД Microsoft SQL Server 2000 для автоматизированного учета пассажирских перевозок. Для этого нужна общая база данных, включающая всю необходимую информацию. Мощность базы данных обусловлена возможностью ее постоянного пополнения новыми данными, причем в неограниченном количестве информации. Это является очень удобным для пользователя. Таким образом, создание базы данных, обладающей такими свойствами, задача достаточно актуальная и полезная. Программа, работающая с БД, позволяет вести учет водителей, автобусов, маршрутов.
Пользователями базы данных выступают специалисты автовокзала. Для доступа к БД необходимо ввести пароль.
Введение
4
1 Техническое задание
5
1.1 Анализ предметной области
5
1.2 Постановка задачи
9
2 Технический проект информационной системы
10
2.1 Функциональная модель
10
2.1.1 Контекстная диаграмма и диаграммы детализации процессов
10
2.1.2 Диаграмма дерева узлов
14
2.2 Информационная модель
15
2.2.1 Идентификация сущностей и связей. ER-диаграмма логического уровня
15
2.2.2 ER-диаграмма физического уровня. Ограничения ссылочной целостности. Определение триггеров
16
2.2.3 Определение представлений, хранимых процедур серверной компоненты
19
2.3 Верификация спроектированной логической модели
21
3 Реализация системы
23
3.1 T-SQL-определения регламентированных запросов
23
3.2 T-SQL-определения триггеров
24
3.3 T-SQL-определения хранимых процедур
30
3.4 T-SQL-определения курсоров
33
3.5 Описание клиентских приложений
34
4 Результат тестирования информационной системы
49
Заключение
50
Список использованных источников
3 Реализация системы
1.Вывод фамилии и телефона водителя с именем Игорь.
CREATE VIEW a1_1
AS SELECT Familia, Telefon
FROM Voditeli
WHERE Imia='Игорь'
2. Вывод паспортных данных, фамилии и имени водителя, у которого телефон имеет код «33».
CREATE VIEW a1_2
AS SELECT Pasportnie_dannie, Familia, Imia
FROM Voditeli
WHERE Telefon LIKE '33%'
3. Вывод информации о рейсах, у которых конечным пунктом является Могилёв.
CREATE VIEW a2_1_1
AS SELECT*
FROM Reisi
WHERE Konechni_punct='Могилёв'
4. Вывод информации о рейсах, которые отправляются с 8:00 до 12:00 и конечным пункт является Кричев.
CREATE VIEW a2_2
AS SELECT *
FROM Reisi
WHERE Vrimia_otpravlenia between '8:00' AND '12:00' AND Konechni_punct='Кричев'
5. Вывод информации о рейсах, которые отправляются по всем дням недели.
CREATE VIEW a2_3
AS SELECT *
FROM Reisi
WHERE Dni_nedeli IN ('1,2,3,4,5,6,7')
6. Вывод информации об автобусах, которые имеют марку «Икарус».
CREATE VIEW a3_1
AS SELECT *
FROM Avtobusi
WHERE Marka='Икарус'
7. Вывод информации об автобусах, которые имеют маршрут, начинающийся на «Чериков» и имеют тип автобуса «мягкий».
CREATE VIEW a3_2
AS SELECT *
FROM Avtobusi
WHERE Marsrut like 'Чериков%' AND Tip_avtobusa='мягкий'
8. Вывод информации о проданных билетах дата отправления, которых 02.12.2013.
CREATE VIEW a4_1
AS SELECT *
FROM Prodaga
WHERE Data_otpravlenia='02.12.2013'
9. Вывод информации о проданных билетах, которые купили предварительно на автобус с номером 321.
CREATE VIEW a4_2
AS SELECT *
FROM Prodaga
WHERE Tekes_pred_pokupka='
10. Вывод информации о количестве проданных билетов за каждый день.
CREATE VIEW a4_3
AS SELECT Data_otpravlenia, count(Data_otpravlenia) AS Количество_билетов
FROM Prodaga
GROUP BY Data_otpravlenia
1. Триггер a1_3 срабатывает при вставке или обновлении записи в таблице «Водители». Он проверяет на корректность вставленные поля таблицы. В случае ошибки записи изменены не будут.
CREATE TRIGGER a1_3
ON Voditeli
FOR Insert, Update
AS IF exists (select Pasportnie_dannie From Inserted
WHERE Pasportnie_dannie=' ')
BEGIN
PRINT 'Не заполнено поле Pasportnie_dannie'
ROLLBACK TRANSACTION
END ELSE
IF exists (SELECT Familia From Inserted
WHERE Familia=' ')
BEGIN
PRINT 'Не заполнено поле Familia'
ROLLBACK TRANSACTION
END ELSE
IF exists (SELECT Imia From Inserted
WHERE Imia=' ')
BEGIN
PRINT 'Не заполнено поле Imia'
ROLLBACK TRANSACTION
END ELSE
IF exists (SELECT Telefon From Inserted
WHERE Telefon=' ')
BEGIN
PRINT 'Не заполнено поле Telefon'
ROLLBACK TRANSACTION
END
2. Триггер a2_4 срабатывает при вставке или обновлении записи в таблице «Рейсы». Он проверяет на корректность вставленные поля таблицы. В случае ошибки записи изменены не будут.
CREATE TRIGGER a2_4
ON Reisi
FOR Insert,Update
AS IF exists(SELECT Nomer_reisa From Inserted
WHERE Nomer_reisa=' ')
BEGIN
PRINT 'Не заполнено поле Nomer_reisa'
ROLLBACK TRANSACTION
END ELSE
IF exists(SELECT Vrimia_otpravlenia From Inserted
WHERE Vrimia_otpravlenia=' ')
BEGIN
PRINT 'Не заполнено поле Vrimia_otpravlenia'
ROLLBACK TRANSACTION
END ELSE
IF exists(SELECT Dni_nedeli From Inserted
WHERE Dni_nedeli=' ')
BEGIN
PRINT 'Не заполнено поле Dni_nedeli'
ROLLBACK TRANSACTION
END ELSE
IF exists(SELECT Rastoyanie From Inserted
WHERE Rastoyanie=' ')
BEGIN
PRINT 'Не заполнено поле Rastoyanie'
ROLLBACK TRANSACTION
END ELSE
IF exists(SELECT Nachaln_punct From Inserted
WHERE Nachaln_punct=' ')
BEGIN
PRINT 'Не заполнено поле Nachaln_punct'
ROLLBACK TRANSACTION
END ELSE
IF exists(SELECT Konechni_punct From Inserted
WHERE Konechni_punct=' ')
BEGIN
PRINT 'Не заполнено поле Konechni_punct'
ROLLBACK TRANSACTION
END
3. Триггер a3_3 срабатывает при вставке или обновлении записи в таблице «Рейсы». Он проверяет на корректность вставленные поля таблицы. В случае ошибки записи изменены не будут.
CREATE TRIGGER a3_3
ON Avtobusi
FOR Insert,Update
AS IF exists(SELECT Nomer_avtobusa From Inserted
WHERE Nomer_avtobusa=' ')
BEGIN
PRINT 'Не заполнено поле Nomer_avtobusa'
ROLLBACK TRANSACTION
END ELSE
IF exists(SELECT Tip_avtobusa From Inserted
WHERE Tip_avtobusa=' ')
BEGIN
PRINT 'Не заполнено поле Tip_avtobusa'
ROLLBACK TRANSACTION
END ELSE
IF exists(SELECT Kol_vo_mest From Inserted
WHERE Kol_vo_mest=' ')
BEGIN
PRINT 'Не заполнено поле Kol_vo_mest'
ROLLBACK TRANSACTION
END ELSE
IF exists(SELECT Marsrut From Inserted
WHERE Marsrut=' ')
BEGIN
PRINT 'Не заполнено поле Marsrut'
ROLLBACK TRANSACTION
END ELSE
IF exists(SELECT Marka From Inserted
WHERE Marka=' ')
BEGIN
PRINT 'Не заполнено поле Marka'
ROLLBACK TRANSACTION
END
4. Триггер a4_4 срабатывает при вставке или обновлении записи в таблице «Рейсы». Он проверяет на корректность вставленные поля таблицы. В случае ошибки записи изменены не будут.
CREATE TRIGGER a4_4
ON Prodaga
FOR Insert,Update
AS IF exists(SELECT Nomer_prodagi From Inserted
WHERE Nomer_prodagi=' ')
BEGIN
PRINT 'Не заполнено поле Nomer_prodagi'
ROLLBACK TRANSACTION
END ELSE
IF exists(SELECT Data_otpravlenia From Inserted
WHERE Data_otpravlenia=' ')
BEGIN
PRINT 'Не заполнено поле Data_otpravlenia'
ROLLBACK TRANSACTION
END ELSE
IF exists(SELECT Vrimia_otpravlenia From Inserted
WHERE Vrimia_otpravlenia=' ')
BEGIN
PRINT 'Не заполнено поле Vrimia_otpravlenia'
ROLLBACK TRANSACTION
END ELSE
IF exists(SELECT Platforma From Inserted
WHERE Platforma=' ')
BEGIN
PRINT 'Не заполнено поле Platforma'
ROLLBACK TRANSACTION
END ELSE
IF exists(SELECT Stancia_otpravlenia From Inserted
WHERE Stancia_otpravlenia=' ')
BEGIN
PRINT 'Не заполнено поле Stancia_otpravlenia'
ROLLBACK TRANSACTION
END ELSE
IF exists(SELECT Do_stancii From Inserted
WHERE Do_stancii=' ')
BEGIN
PRINT 'Не заполнено поле Do_stancii'
ROLLBACK TRANSACTION
END ELSE
IF exists(SELECT Nomer_reisa From Inserted
WHERE Nomer_reisa=' ')
BEGIN
PRINT 'Не заполнено поле Nomer_reisa'
ROLLBACK TRANSACTION
END ELSE
IF exists(SELECT Nomer_avtobusa From Inserted
WHERE Nomer_avtobusa=' ')
BEGIN
PRINT 'Не заполнено поле Nomer_avtobusa'
ROLLBACK TRANSACTION
END ELSE
IF exists(SELECT Mesto_nomer From Inserted
WHERE Mesto_nomer=' ')
BEGIN
PRINT 'Не заполнено поле Mesto_nomer'
ROLLBACK TRANSACTION
END ELSE
IF exists(SELECT Kol_biletov From Inserted
WHERE Kol_biletov=' ')
BEGIN
PRINT 'Не заполнено поле Kol_biletov'
ROLLBACK TRANSACTION
END ELSE
IF exists(SELECT Pasportnie_dannie From Inserted
WHERE Pasportnie_dannie=' ')
BEGIN
PRINT 'Не заполнено поле Pasportnie_dannie'
ROLLBACK TRANSACTION
END ELSE
IF exists(SELECT Tekes_Pred_pokupka From Inserted
WHERE Tekes_Pred_pokupka=' ')
BEGIN
PRINT 'Не заполнено поле Tekes_Pred_pokupka'
ROLLBACK TRANSACTION
END ELSE
IF exists(SELECT Rastoanie From Inserted
WHERE Rastoanie=' ')
BEGIN
PRINT 'Не заполнено поле Rastoanie'
ROLLBACK TRANSACTION
END
5. Триггер, который проверяет количество мест в автобусе и не дает записать номер места больше, чем указано.
CREATE TRIGGER a4_10
ON Prodaga
FOR Insert,Update
AS IF exists(SELECT * FROM Inserted,Avtobusi
WHERE Inserted.Nomer_avtobusa=
AND Mesto_nomer>Kol_vo_mest)
BEGIN
PRINT 'Такого места нет'
ROLLBACK TRANSACTION
END
1. Поиск данных о водителях по номеру телефона.
create procedure a1_5
@Telefon int
as select * From Voditeli
where Telefon=@Telefon
2. Поиск данных о водителях по фамилии.
create PROCEDURE a3_6_1
@Familia varchar(30)
AS SELECT * FROM Voditeli
WHERE Familia= @Familia
3. Поиск данных о водителях по паспортным данным.
create PROCEDURE a3_6_2
@Pasportnie_dannie varchar(30)
AS SELECT * FROM Voditeli
WHERE Pasportnie_dannie= @Pasportnie_dannie
4. Поиск данных о водителях, которые выполняли рейсы по датам.
create PROCEDURE a3_6_3
AS SELECT Voditeli.Familia, Voditeli.Imia, Prodaga.Data_otpravlenia, Prodaga.Nomer_avtobusa
FROM Voditeli,Prodaga
WHERE Voditeli.Pasportnie_dannie=
5. Поиск информации об автобусах по типу.
CREATE PROCEDURE a3_5
@Tip_avtobusa varchar(30)
AS SELECT * FROM Avtobusi
WHERE Tip_avtobusa= @Tip_avtobusa
6. Поиск информации об автобусах по маршруту.
CREATE PROCEDURE a2_6
@Marsrut varchar(30)
AS SELECT * FROM Avtobusi
WHERE Marsrut=@Marsrut
7. Поиск информации об автобусах, которые имеют количество мест меньше выбранного.
create procedure a3_7
@Kol_vo_mest int
AS select * from Avtobusi
Where Kol_vo_mest<=@Kol_vo_mest
8. Вывод информации о количестве имеющихся типов автобусов.
create procedure a3_6
@Tip_avtobusa varchar(30)
AS select Tip_avtobusa, count (Tip_avtobusa) as Kol_vo_avtobusov from Avtobusi
Where Tip_avtobusa=@Tip_avtobusa
Group by Tip_avtobusa
9. Поиск информации об автобусах по марке.
create PROCEDURE a3_6_4
@Marka varchar(30)
AS SELECT *
FROM Avtobusi
WHERE Marka=@Marka
10. Поиск информации об автобусах, которые имеют количество мест меньше выбранного.
create procedure a2_7
@Nachaln_punct varchar(30),
@Dni_nedeli varchar(30)
AS select * from Reisi
Where Nachaln_punct=@Nachaln_punct and Dni_nedeli=@Dni_nedeli
11. Поиск информации о рейсе, у которого самая низкая стоимость.
CREATE procedure a3_8
as select Min(Stoimost) as Min_stoimost From Reisi
12. Поиск информации о рейсах по конечному пункту.
create PROCEDURE a3_6_9
@Konechni_punct varchar(30)
AS SELECT *
FROM Reisi
WHERE Konechni_punct=@Konechni_punct
13. Поиск информации о проданных билетах в выбранном диапозоне.
CREATE PROCEDURE a4_8
@first_data datetime,
@last_data datetime
AS SELECT * FROM Prodaga
WHERE Data_otpravlenia<= @first_data and Data_otpravlenia>=@last_data
14. Вывод информации о стоимости проданных билетах.
create procedure a4_9
AS select Nomer_prodagi, Data_otpravlenia, Vrimia_otpravlenia, Platforma, Stancia_otpravlenia, Do_stancii, Nomer_reisa, Nomer_avtobusa, Mesto_nomer, Kol_biletov, Pasportnie_dannie, Tekes_Pred_pokupka, Rastoanie, Rastoanie*2300*Kol_biletov as Stoimos from Prodaga
15. Поиск информации о проданных билетах по номеру рейса.
create procedure a1_12
@Nomer_reisa int
as select * From Prodaga
where Nomer_reisa=@Nomer_reisa
1. Удаление данных о водителе.
DECLARE curs10 CURSOR
LOCAL SCROLL KEYSET
FOR SELECT Voditeli.Pasportnie_dannie,
FROM Voditeli
FOR UPDATE
open curs10
DECLARE
@@Pasportnie_dannie varchar(20),
@@Familia varchar(20),
@@Imia varchar(20),
@@Telefon int,
@@Counter int
SET @@Counter = 0
WHILE @@COUNTER< @@CURSOR_ROWS
BEGIN
DELETE curs10
SET @@Pasportnie_dannie=NULL
set @@Familia =NULL
set @@Imia =NULL
SET @@Telefon=NULL
SET @@Counter =@@Counter +1
END
CLOSE curs10
3.5 Описание клиентских приложений
При разработке клиентского приложения были созданы следующие формы.
При запуске приложения появляется главная форма «Автовокзал» (рисунок 10), на форме присутствуют пункты меню (Файл, Продажа билетов, О программе, Выход) и текущее время. Код формы:
procedure TForm1.N3Click(Sender: TObject);
begin
Form1.Hide ;
Form2.Show;
end;
procedure TForm1.N4Click(Sender: TObject);
begin
Form1.Hide ;
Form3.Show;
end;
procedure TForm1.N5Click(Sender: TObject);
begin
Form1.Hide ;
Form4.Show;
end;
procedure TForm1.N8Click(Sender: TObject);
begin
Form1.Hide ;
Form5.Show;
end;
procedure TForm1.N9Click(Sender: TObject);
begin
Form1.Hide ;
Form6.Show;
end;
procedure TForm1.N10Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.N7Click(Sender: TObject);
begin
Form1.Hide ;
Form7.Show;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
cHour,cMin: word;
begin
cHour := HourOf(Now);
cMin := MinuteOf(Now);
if Timer1.Tag = 0
then begin
if cHour <> Hour then
begin
Hour := cHour;
Label3.Caption := IntToStr(Hour);
end;
if cMin <> Min then
begin
Min := cMin;
if min <10
then Label5.Caption := '0' + IntToStr(Min)
else Label5.Caption := IntToStr(Min);
end;
if Label4.Visible
then Label4.Visible := False
else label4.Visible := True;
end
else
if (cHour = AlHour) and (cMin = AlMin)
then begin
Form1.Show;
Timer1.Tag := 0;
Timer1.Interval := 1000;
try
except
end;
end;
end;
end.
Рисунок 10 – Форма «Автовокзал»
Если нажать на пункт меню «Файл» и выбрать первый пункт – «Водители», то откроется форма «Водители» (рисунок 11).
Рисунок 11 – Форма «Водители»
Код формы:
procedure TForm2.Label3Click(Sender: TObject);
begin
Form2.Hide ;
Form1.Show;
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
ADOStoredProc2.Parameters.
ADOStoredProc2.Active:=true;
Datasource1.DataSet.Active:=
DataSource5.DataSet.Active:=
DBGrid1.DataSource:=
end;
procedure TForm2.N21Click(Sender: TObject);
begin
Datasource1.DataSet.Active:=
Datasource2.DataSet.Active:=
Информация о работе Результат тестирования информационной системы