Результат тестирования информационной системы

Автор работы: Пользователь скрыл имя, 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
Список использованных источников

Файлы: 1 файл

3Пример-Библиотека.doc

— 3.43 Мб (Скачать файл)

3 Реализация системы

3.1 T-SQL-определения регламентированных запросов

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='предварительная' AND Nomer_avtobusa=321

 

10. Вывод информации о количестве проданных билетов за каждый день.

CREATE VIEW a4_3

AS SELECT Data_otpravlenia, count(Data_otpravlenia) AS Количество_билетов

FROM Prodaga

GROUP BY Data_otpravlenia

 

 

3.2 T-SQL-определения триггеров

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=Avtobusi.Nomer_avtobusa

AND Mesto_nomer>Kol_vo_mest)

BEGIN

PRINT 'Такого места нет'

ROLLBACK TRANSACTION

END

 

3.3 T-SQL-определения хранимых процедур

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=Prodaga.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

 

 

3.4 T-SQL-определения курсоров

1. Удаление данных о водителе.

DECLARE curs10 CURSOR

LOCAL SCROLL KEYSET

FOR SELECT  Voditeli.Pasportnie_dannie,Voditeli.Familia, Voditeli.Imia, Voditeli.Telefon

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.ParamByName('@Familia').Value:=DBLookupComboBox1.Text;

ADOStoredProc2.Active:=true;

Datasource1.DataSet.Active:=false;

DataSource5.DataSet.Active:=true;

DBGrid1.DataSource:=DataSource5;

end;

procedure TForm2.N21Click(Sender: TObject);

begin

Datasource1.DataSet.Active:=false;

Datasource2.DataSet.Active:=true;

Информация о работе Результат тестирования информационной системы