Система бронирования железнодорожных билетов

Проектирование и реализация системы для просмотра имеющихся билетов и их бронирования через Internet. Создание таблиц, хранимых процедур, реализующих функции бизнес-логики и триггера на удаление записей из таблицы в базе данных. Описание структуры БД.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 11.12.2013
Размер файла 237,6 K

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

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

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

Министерство образования Российской Федерации

ГОУ ВПО

Система бронирования железнодорожных билетов

Пояснительная записка к курсовой работе по дисциплине "Базы данных"

Екатеринбург 2008

Содержание

    • Постановка задачи
    • 1. Используемые таблицы
    • 2. Система безопасности
    • 3. Хранимые процедуры
    • 4. Триггеры
    • 5. Задание
    • 6. Описание структуры БД
    • Вывод
    • Приложение

Постановка задачи

Задача

Спроектировать и реализовать систему «бронирование железнодорожных билетов», то есть систему, позволяющую человеку просматривать имеющиеся билеты и бронировать их через Internet.

Описание системы

Для простоты подразумевается, что с системой работают две категории пользователей: клиенты и администраторы системы. Кроме того, система самостоятельно выполняет некоторые функции.

Считается, что клиент бронирует билет на весь маршрут движения поезда, неважно, до какой станции он на нём едет. Как только поезд отходит от начальной станции, бронирование билетов на него невозможна.

Система предоставляет клиентам следующие сервисы:

1) Регистрация в качестве клиента.

2) Идентификация клиента по имени и паролю.

3) Просмотр списка поездов, проходящих от станции отправления до станции назначения в указанную дату.

4) Просмотр списка свободных мест в указанном поезде с разделением на вагоны (СВ, купе, плацкарт и т.п.)

5) Возможность бронирования указанных мест в выбранном поезде.

6) Просмотр истории всех заказов, в том числе и текущих, с указанием статуса заказа (оплачен или нет, снят и т.п.).

7) Отмена заказа.

Система предоставляет администраторам следующие сервисы:

1) Идентификация по имени и паролю.

2) Формирование расписания поездов, добавление/удаление определенного поезда и т.п.

3) Просмотр любой информации по любому клиенту.

4) Просмотр отчетов:

a) Маркетинговых:

i) информация о заказах.

ii) информация о поездах.

Автоматические процедуры, выполняемые системой:

1) Сдвиг расписания поездов на 1 день (выполняется каждый день)

бронирование internet триггер запись

1. Используемые таблицы

Скрипт создания базы данных и таблиц: 1_create_database.sql

В БД используются следующие таблицы:

1. clients

create table dbo.clients( --список клиентов

clientid int identity(1, 1)

,login varchar(20) not null --логин

,passwd varchar(20) not null --пароль

,clname varchar(20) not null --имя

,surname varchar(30) not null --фамилия

,bday smalldatetime not null --дата рождения

,passport varchar(11) not null --паспорт: серия, номер

--Ограничения

,constraint pk_cl_login primary key(clientid)

,constraint cl_login_unique unique (login)

,constraint cl_check_passport check

(passport like '[0-9][0-9][0-9][0-9] [0-9][0-9][0-9][0-9][0-9][0-9]')

)

В таблице хранится информация по клиентам - логин, пароль, имя, фамилия, дата рождения, паспортные данные.

Считается, что в таблице будет большое число клиентов, и поэтому создан первичный ключ по полю login (как наиболее часто встречающемуся в запросах). При этом это автоматически является кластерным индексом для этой таблицы.

Также есть ограничение на введение паспортных данных - по шаблону.

2. stations

create table dbo.stations( --ж/д станции

stid int identity(1, 1) --id станции

,stname varchar(40) not null --название

--Ограничения

,constraint pk_st_stid primary key (stid)

,constraint st_stname_unique unique (stname)

)

В таблице записаны железнодорожные станции, ограничение первичного ключа на id станции.

3. trains

create table dbo.trains( --поезда

trnum int not null --номер

,caption varchar(40) null --название поезда

--Ограничения

,constraint pk_tr_trid primary key (trnum)

,constraint tr_unique unique (trnum, caption)

)

В таблице записаны все имеющиеся поезда. Ограничение первичного ключа на поле trid.

4. routs

create table dbo.routs( --маршруты

trnum int --номер поезда

,stid int --id станции

,stnum int not null --порядковый номер станции в пути следования данного поезда

,roadtime int null --время от предыдущей станции до текущей (в минутах)

,stoptime int null --время стоянки (в минутах)

--Ограничения

,constraint fk_r_routnum foreign key (trnum)

references trains(trnum) on delete cascade

,constraint fk_r_routstid foreign key (stid)

references stations(stid) on delete cascade

,constraint r_check_stnum check

(stnum > 0)

,constraint r_check_roadtime check

(roadtime > 0)

,constraint r_check_stoptime check

(stoptime > 0)

,constraint r_unique unique (trnum, stnum)

)

В таблице записаны маршруты, ограничение внешнего ключа на таблицу trains. Таким образом для каждого поезда есть несколько записей в таблице routs. Также как и в таблице vagons, стоит опция on delete cascade.

Каждая запись описывает поезд, станцию и номер станции в расписании поезда.

В полях roadtime и stoptime - время в минутах пути от предыдущей станции и время стоянки на станции соотвественно.

Если станция начальная, то в полях roadtime и stoptime стоит null. Также у конечной станции поле stoptime содержит null.

5. timetable

create table dbo.timetable( --расписание

trid int identity(1, 1) --id поезда

,trnum int --номер поезда

,send_date smalldatetime not null --дата отправления

--Ограничения

,constraint pk_tt_trid primary key (trid)

,constraint fk_ttnum foreign key (trnum)

references trains(trnum) on delete cascade

,constraint tt_unique unique (trnum, send_date)

)

В таблице хранятся реальные поезда, которые выезжают в определенное время (им сопоставляется расписание из таблицы routs по номеру поезда).

6. vagons

create table dbo.vagons( --вагоны

vagid int identity(1,1) --id вагона

,trid int --id поезда

,vagnum int not null --номер вагона

,type tinyint not null --тип вагона: 3 - плацкарт, 2 - купе, 1 - СВ

,freenum tinyint not null --число свободных мест в вагоне (изначально будет рассчитываться как vagtype*18)

--Ограничения

,constraint pk_v_vagid primary key (vagid)

,constraint fk_v_vagtrid foreign key (trid)

references timetable(trid) on delete cascade

,constraint v_check_vagnum check

(vagnum > 0)

,constraint v_check_type check

(type in (1, 2, 3))

,constraint v_check_freenum check

(freenum >= 0)

)

В таблице записаны выгоны, ограничение внешнего ключа на таблицу trains. Таким образом для каждого поезда есть несколько записей в таблице vagons. Во внешнем ключе стоит опция on delete cascade - чтобы при удалении поезда из таблицы trains, удалялись все записи, соответствующие ему.

В поле type - типа вагона: 3 - плацкарт, 2 - купе, 1 - СВ.

При этом такая нумерация используется для начального числа свободных мест freenum, которое рассчитывается по формуле: type*18.

7. current_orders

create table dbo.current_orders( --текущие заказы

orderid int identity(1, 1) --id заказа

,clientid int --id клиента

,trid int --id поезда

,vagnum int not null --номер вагона

,type tinyint not null --тип вагона

,amount int not null --количество

,status tinyint not null --статус заказа 1 - забронирован, 2 - снят

,buy_date datetime not null --дата заказа

--Ограничения

,constraint pk_co_orderid primary key (orderid)

,constraint fk_co_clientid foreign key (clientid)

references clients(clientid) on delete cascade

,constraint fk_co_trid foreign key (trid)

references timetable(trid)

,constraint co_check_vagnum check

(vagnum > 0)

,constraint co_check_type check

(type in (1, 2, 3))

,constraint co_check_amount check

(amount > 0)

,constraint co_check_status check

(status in (1, 2))

)

В таблице записаны имеющиеся активные заказы (которые не были закрыты и не просрочены).

Можно просмотреть какой-либо заказ по его orderid. Есть ограничение внешнего ключа с опцией on delete cascade на поле clientid таблицы clients.

При снятии заказа соответствующая запись переносится из таблицы current_orders в таблицу history_orders с соответствующим статусом.

8. history_orders

create table dbo.history_orders( --история заказов

histid int not null --id заказа

,clientid int --логин клиента

,trid int --id поезда

,vagnum int not null --номер вагона

,type tinyint not null --тип вагона

,amount int not null --количество

,status tinyint not null --статус заказа 1 - забронирован, 2 - снят, 3 - куплен

,buy_date datetime not null --дата заказа

--Ограничения

,constraint fk_ho_clientid foreign key (clientid)

references clients(clientid)

,constraint fk_ho_trid foreign key (trid)

references timetable(trid)

,constraint ho_check_vagnum check

(vagnum > 0)

,constraint ho_check_type check

(type in (1, 2, 3))

,constraint ho_check_amount check

(amount > 0)

,constraint ho_check_status check

(status in (1, 2, 3))

)

В таблице хранится история об уже выполненных заказах. Все поля аналогичны таблице current_orders. При записи в историю в поле histid записывается orderid соответствующего заказа. Это требуется для совместного использования этих двух таблиц (например, для отчета).

9. history_trains

create table dbo.history_trains( --история движения поездов

histid int not null --id поезда

,trnum int --номер поезда

,send_date smalldatetime --дата отправления

,amount_vagon int --число вагонов

,amount_places int --общее число мест в поезде

,free_number int --общее число свободных мест в поезде

--Ограничения

,constraint fk_ht_trnum foreign key (trnum)

references trains(trnum)

,constraint ht_check_amount_vagon check

(amount_vagon > 0)

)

Таблица, хранящая данных обо всех поездах, которые отъехали от начальной станции (т.е., считается, что их уже нельзя изменить).

Диаграмма таблиц в базе данных представлена на рис. 1.

Рис. 1. Диаграмма таблиц

2. Система безопасности

С базой данных работают две категории пользователей: клиенты и администраторы системы.

Авторизация клиентов происходит не в самой БД. В Базе Данных для всех клиентов создан один пользователь - dbuser. Под ним и должны заходить все клиенты. При этом считается, что в некоторых процедурах в качестве параметра передается логин пользователя - его личный логин (информация о клиентах хранится в таблице clients).

Для администраторов системы создана специальная роль admins. Изначально в неё включен один пользователь с логином «1» и паролем «1» - для тестирования. В дальнейшем при добавлении нового администратора, соответствующий пользователь включается в роль admins. При этом администраторы в данном случае - администраторы самой системы, а не базы данных (то есть те, кто имеет право изменять расписание поездов и т.п.).

Для dbuser разрешено только выполнение нескольких хранимых процедур.

Для пользователей роли admins разрешено выполнение некоторых хранимых процедур (кроме тех, которые доступны только клиентам - например, бронирование билета), а также все действия с таблицами (кроме таблицы clients - на неё рарешен только select).

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

В БД есть хранимые процедуры, реализующие некоторые функции бизнес-логики. Некоторые процедуры могут выполняться только администраторами системы, другие разрешены для пользователей.

1. sp_viewtrainlist

@station1 varchar(40), @station2 varchar(40)

Доступна пользователям и администраторам. Реализует функцию просмотра списка поездов, проходящих из станции1 в станцию2. Поезд при этом может быть проходящим.

Выводит таблицу с номерами поездов и информацию по ним (название, дата отправления), а также время прибытия, стоянки и отправления со станции1 и станции2. Если станция не имеет какого-либо значения (например, нет времени отправления со станции2, т.к. это конечная станция), то выводится null.

2. sp_viewtrain

@number int, @send_date smalldatetime

Доступна пользователям и администраторам. Позволяет просматривать списки свободных мест в указанном поезде. При этом выводится в форме таблицы, каждая строка - по отдельному вагону, описывает его тип и число свободных мест.

3. sp_buyticket

@number int, @send_date smalldatetime, @vagon int, @amount int, @login varchar(20)

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

При этом добавляется запись в таблицу current_orders, заказ записывается на имя пользователя с логином @login. Также изменяется число оставшихся свободных мест в таблице trains.

Выводится id заказа, по которому пользователь может его отменить.

4. sp_viewhistory

@login varchar(20)

Доступна пользователям и администраторам. Позволяет просматривать историю пользователя с логином @login: как текущие активные заказы, так и старые.

5. sp_cancelorder

@orderid int --значение OrderID, @login varchar(20)

Доступна только пользователям. Позволяет отменять заказ, по введенному orderid. При этом происходит снятие заказа, только если это заказ текущего пользователя (нельзя снять чужой заказ). При этом соответствующая запись удаляется из таблицы current_orders и вставляется в history_orders со статусом «снят».

6. sp_addnewtrain

@trnum int, @send_date smalldatetime, @caption varchar(40), @station_list varchar(8000)

,@vagon_list varchar(8000)

Доступна только администраторам. Позволяет добавлять новые поезда. Входной параметр @station_list - список названий станций, время пути от предыдущей станции и время тоянки через запятую. Если нет времени прибытия или стоянки (для начальных и конечных станций), соответсвующая запись пропускается (то есть остаются только запятые). Все станции, через которые проходит поезд, в соответствующем порядке записываются в таблицу routs.

7. sp_addnewrealtrain

@trnum int, @send_date smalldatetime --номер поезда, время отправления

,@vagon_list varchar(8000)

Доступна только администраторам. Добавляет реальный поезд в расписание.

Входной параметр @vagon_list содержит информацию по типам вагонов через запятую.

Вставляются записи в таблицы trains, vagons и routs.

8. sp_addstationtotrain

@trnum int, @send_date smalldatetime, @stname varchar(40)

,@roadtime int = null, @stoptime int = null, @stnum int = 1

Доступна только администраторам. Позволяет добавлять станцию в расписание движение существующего поезда, с порядковым номером станции @stnum. Вводятся значения времени пути от предыдущей станции и время стоянки. При этом время пути от новой станции до следующей рассчитывается как разность между бывшем временем в пути между соседними станциями и новым введенным временем пути до новой станции.

9. sp_deletetrain

@trnum int, @send_date smalldatetime

Доступна только администраторам. Позволяет удалять выбранный поезд из расписания.

10. sp_showmarketingreport

@startdate smalldatetime = null, @enddate smalldatetime = null

Доступна только администраторам. Позволяет просматривать маркетинговые отчеты (по заказам).

11. sp_ sp_showtrainreport

@startdate smalldatetime = null, @enddate smalldatetime = null

Доступна только администраторам. Позволяет просматривать отчеты по поездам.

4. Триггеры

В базе данных используются триггер на удаление записей из таблицы timetable.

d_timetable

create trigger d_timetable on timetable

for delete

as

insert into history_trains(histid, trnum, send_date, amount_vagon, amount_places, free_number)

select d.trid, d.trnum, d.send_date, count(*), sum(v.type)*18, sum(v.freenum)

from vagons v inner join deleted d

on v.trid = d.trid

group by v.trid, d.trid, d.trnum, d.send_date

insert into history_orders

select c.orderid, c.clientid, c.trid, c.vagnum

,c.type, c.amount, c.status, c.buy_date

from current_orders c inner join deleted d

on c.trid = d.trid

delete

from current_orders

where trid = (select trid from deleted)

delete

from vagons

where trid = (select trid from deleted)

go

Триггер выполняется, если вставляется запись о поезде, который уже есть в таблице (т.е. при вставке поезда с тем же номером, но другой датой). Используется в джобе и процедуре sp_filltrains. В триггере вставляются записи, соответствующие данному поезду в таблицы routs и vagons.

5. Задание

В БД реализована автоматически выполняющаяся функция, которая удаляет все старые поезда.

Джоб выполняется ежедневно.

use msdb

go

exec sp_add_job @job_name = 'change_timetable'

,@enabled = 1

,@description = 'каждый день все расписание сдвигается на 1 день'

,@notify_level_eventlog = 0

,@notify_level_email = 0

,@notify_level_netsend = 0

,@notify_level_page = 0

,@delete_level = 0

exec sp_add_jobstep

@job_name = 'change_timetable'

,@step_name = 'удаление старых поездов'

,@command = 'delete from timetable

where (send_date < getdate())'

,@database_name = 'db103'

exec sp_apply_job_to_targets

@job_name = 'change_timetable'

,@target_servers = 'MICHMAN'

,@operation = apply

exec sp_add_jobschedule

@job_name = 'change_timetable'

,@name = 'план выполнения задания )'

,@enabled = 1 --включено

,@freq_type = 4 --ежедневно

,@freq_interval = 1 --каждый день

,@active_start_date = 20081208 -- начиная с 08-12-2008

,@active_start_time = 073700 --в 07:37

go

use db103

6. Описание структуры БД

В БД существует 2 вида пользователей: администраторы (роль sysadmin) и пользователи, для которых создана специальная роль clients. Для неё разрешено выполнение некоторых хранимых процедур.

Для простоты не учитываются номера мест в вагонах, считается только число свободных мест в каждом из вагонов. Также считается, что все вагоны нумеруются в каждом поезде, начиная с единицы. Число мест вагонов считается по формуле type*18,где type = 3 для плацкартных вагонов, type = 2 для купе и type = 1 для СВ. Таким образом в плацкартных вагонах - 54 места, в купе - 36, в СВ - 18.

Можно купить билет только на всю поездку, причем только до того, как поезд не отъехал с начальной станции.

Может быть несколько одинаковых поездов, но с разной датой отправления (считается, что поезда выезжают каждодневно, и в таблице хранится информация на 5 дней вперед, то есть 5 поездов одного вида.)

Все скрипты находятся в 5 файлах.

Порядок запуска скриптов:

1_create_database.sql - создание БД и таблиц, логина db_user и роли admins,

2_stored_procedures.sql - хранимые процедуры, триггер, job,

3_default_fill_tables.sql - заполнение таблиц справочников,

4_drop_database.sql - скрипт удаления БД и всех созданных пользователей.

test.sql - может использоваться для тестирования БД.

Вывод

Мной была написана БД, реализующая систему бронирования железнодорожных билетов. В ней я закрепил навыки использования языка T-SQL в среде MS SQL.

Приложение

Листинг 1_create_database.sql

create database db103; --Валиев М.Ф., гр. Р-45031

go

use db103;

if exists( select id from sysobjects where type='U' and name='clients')

drop table clients

create table dbo.clients( --список клиентов

clientid int identity(1, 1)

,login varchar(20) not null --логин

,passwd varchar(20) not null --пароль

,clname varchar(20) not null --имя

,surname varchar(30) not null --фамилия

,bday smalldatetime not null --дата рождения

,passport varchar(11) not null --паспорт: серия, номер

--Ограничения

,constraint pk_cl_login primary key(clientid)

,constraint cl_login_unique unique (login)

,constraint cl_check_passport check

(passport like '[0-9][0-9][0-9][0-9] [0-9][0-9][0-9][0-9][0-9][0-9]')

)

if exists( select id from sysobjects where type='U' and name='stations')

drop table stations

go

create table dbo.stations( --ж/д станции

stid int identity(1, 1) --id станции

,stname varchar(40) not null --название

--Ограничения

,constraint pk_st_stid primary key (stid)

,constraint st_stname_unique unique (stname)

)

if exists( select id from sysobjects where type='U' and name='trains')

drop table trains

go

create table dbo.trains( --поезда

trnum int not null --номер

,caption varchar(40) null --название поезда

--Ограничения

,constraint pk_tr_trid primary key (trnum)

,constraint tr_unique unique (trnum, caption)

)

if exists( select id from sysobjects where type='U' and name='routs')

drop table routs

go

create table dbo.routs( --маршруты

trnum int --номер поезда

,stid int --id станции

,stnum int not null --порядковый номер станции в пути следования данного поезда

,roadtime int null --время от предыдущей станции до текущей (в минутах)

,stoptime int null --время стоянки (в минутах)

--Ограничения

,constraint fk_r_routnum foreign key (trnum)

references trains(trnum) on delete cascade

,constraint fk_r_routstid foreign key (stid)

references stations(stid) on delete cascade

,constraint r_check_stnum check

(stnum > 0)

,constraint r_check_roadtime check

(roadtime > 0)

,constraint r_check_stoptime check

(stoptime > 0)

,constraint r_unique unique (trnum, stnum)

)

if exists( select id from sysobjects where type='U' and name='timetable')

drop table timetable

go

create table dbo.timetable( --расписание

trid int identity(1, 1) --id поезда

,trnum int --номер поезда

,send_date smalldatetime not null --дата отправления

--Ограничения

,constraint pk_tt_trid primary key (trid)

,constraint fk_ttnum foreign key (trnum)

references trains(trnum) on delete cascade

,constraint tt_unique unique (trnum, send_date)

)

if exists( select id from sysobjects where type='U' and name='vagons')

drop table vagons

go

create table dbo.vagons( --вагоны

vagid int identity(1,1) --id вагона

,trid int --id поезда

,vagnum int not null --номер вагона

,type tinyint not null --тип вагона: 3 - плацкарт, 2 - купе, 1 - СВ

,freenum tinyint not null --число свободных мест в вагоне (изначально будет рассчитываться как vagtype*18)

--Ограничения

,constraint pk_v_vagid primary key (vagid)

,constraint fk_v_vagtrid foreign key (trid)

references timetable(trid) on delete cascade

,constraint v_check_vagnum check

(vagnum > 0)

,constraint v_check_type check

(type in (1, 2, 3))

,constraint v_check_freenum check

(freenum >= 0)

)

if exists( select id from sysobjects where type='U' and name='current_orders')

drop table current_orders

go

create table dbo.current_orders( --текущие заказы

orderid int identity(1, 1) --id заказа

,clientid int --id клиента

,trid int --id поезда

,vagnum int not null --номер вагона

,type tinyint not null --тип вагона

,amount int not null --количество

,status tinyint not null --статус заказа 1 - забронирован, 2 - снят

,buy_date datetime not null --дата заказа

--Ограничения

,constraint pk_co_orderid primary key (orderid)

,constraint fk_co_clientid foreign key (clientid)

references clients(clientid) on delete cascade

,constraint fk_co_trid foreign key (trid)

references timetable(trid)

,constraint co_check_vagnum check

(vagnum > 0)

,constraint co_check_type check

(type in (1, 2, 3))

,constraint co_check_amount check

(amount > 0)

,constraint co_check_status check

(status in (1, 2))

)

if exists( select id from sysobjects where type='U' and name='history_orders')

drop table history_orders

go

create table dbo.history_orders( --история заказов

histid int not null --id заказа

,clientid int --логин клиента

,trid int --id поезда

,vagnum int not null --номер вагона

,type tinyint not null --тип вагона

,amount int not null --количество

,status tinyint not null --статус заказа 1 - забронирован, 2 - снят, 3 - куплен

,buy_date datetime not null --дата заказа

--Ограничения

,constraint fk_ho_clientid foreign key (clientid)

references clients(clientid)

,constraint fk_ho_trid foreign key (trid)

references timetable(trid)

,constraint ho_check_vagnum check

(vagnum > 0)

,constraint ho_check_type check

(type in (1, 2, 3))

,constraint ho_check_amount check

(amount > 0)

,constraint ho_check_status check

(status in (1, 2, 3))

)

if exists( select id from sysobjects where type='U' and name='history_trains')

drop table history_trains

go

create table dbo.history_trains( --история движения поездов

histid int not null --id поезда

,trnum int --номер поезда

,send_date smalldatetime --дата отправления

,amount_vagon int --число вагонов

,amount_places int --общее число мест в поезде

,free_number int --общее число свободных мест в поезде

--Ограничения

,constraint fk_ht_trnum foreign key (trnum)

references trains(trnum)

,constraint ht_check_amount_vagon check

(amount_vagon > 0)

)

--создание пользователя user

exec sp_addlogin 'dbuser', '', db103

exec sp_grantdbaccess 'dbuser'

--создание роли admins

exec sp_addrole 'admins'

grant select

on clients

to admins

grant all

on stations

to admins

grant all

on trains

to admins

grant all

on routs

to admins

grant all

on timetable

to admins

grant all

on vagons

to admins

grant all

on current_orders

to admins

grant all

on history_orders

to admins

grant all

on history_trains

to admins

Листинг 2_stored_procedures.sql

--1. просмотр списка поездов от станции1 до станции2 (для юзеров)

if exists (select * from dbo.sysobjects

where id=object_id(N'sp_viewtrainlist') and objectproperty (id,N'IsProcedure') = 1

)

drop procedure sp_viewtrainlist

go

create proc sp_viewtrainlist

@station1 varchar(40), @station2 varchar(40)

as

declare @stid1 int --id станции1

set @stid1 = (select stid from stations

where stname = @station1)

declare @stid2 int --id станции2

set @stid2 = (select stid from stations

where stname = @station2)

create table #tr(

trid int --id поезда (из timetable)

,trnum int --номер поезда

,st1_time int --время прибытия поезда к ст.1, в минутах

,st1_stoptime int --время стоянки поезда на ст.1, в минутах

,st2_time int --время прибытия поезда к ст.2, в минутах

,st2_stoptime int --время стоянки поезда на ст.2, в минутах

)

insert into #tr(trid, trnum) --вставляем id и номера нужных поездов

select trid, trnum

from timetable

where trnum in (select r1.trnum from routs r1 --выбираем такие поезда, кот. проходят

where (r1.stid = @stid1) --сначала через ст.1, а потом через ст.2

and exists (select * from routs r2

where (r2.trnum = r1.trnum) and (r2.stid = @stid2)

and (r2.stnum >= r1.stnum)

)

)

update #tr --находим время прибытия к ст. 1

set st1_time = (select case

when sum(r.roadtime) is not null and sum(r.stoptime) is null then sum(r.roadtime)

else sum(r.roadtime) + sum(r.stoptime)

end

from routs r

where (r.trnum = #tr.trnum)

and r.stnum <= (select r1.stnum from routs r1 --суммируем время до ст.1

where (r1.trnum = r.trnum) and (r1.stid = @stid1))

group by r.trnum)

update #tr --находим время стоянки на ст.1

set st1_stoptime = (select r.stoptime

from routs r

where (r.trnum = #tr.trnum) and (r.stid = @stid1))

update #tr --вычитаем из времени прибытия время стоянки на самой ст.1

set st1_time = (select case

when #tr.st1_stoptime is null then #tr.st1_time

else #tr.st1_time - #tr.st1_stoptime

end)

update #tr --находим время прибытия к ст.2

set st2_time = (select case

when sum(r.roadtime) is null and sum(r.stoptime) is null then 0

when sum(r.roadtime) is not null and sum(r.stoptime) is null then sum(r.roadtime)

else sum(r.roadtime) + sum(r.stoptime)

end

from routs r

where (r.trnum = #tr.trnum)

and r.stnum <= (select r1.stnum from routs r1

where (r1.trnum = r.trnum) and (r1.stid = @stid2))

group by r.trnum)

update #tr --находим время стоянки на ст.2

set st2_stoptime = (select r.stoptime

from routs r

where (r.trnum = #tr.trnum) and (r.stid = @stid2))

update #tr --вычитаем из времени прибытия время стоянки на самой ст.2

set st2_time = (select case

when #tr.st2_stoptime is null then #tr.st2_time

else #tr.st2_time - #tr.st2_stoptime

end)

select tt.trnum, tt.send_date, t.caption

,case

when #tr.st1_time is null then null --если эта станция - первая в маршруте поезда

else dateadd(minute, #tr.st1_time, tt.send_date) --переводим в дату

end as [ст.1 прибытие]

,#tr.st1_stoptime as [ст.1 стоянка]

,case

when #tr.st1_time is null then tt.send_date --если эта станция - первая в маршруте поезда

else dateadd(minute, #tr.st1_time+#tr.st1_stoptime, tt.send_date)

end as [ст.1 отправление]

,dateadd(minute, #tr.st2_time, tt.send_date) as [ст.2 прибытие]

,#tr.st2_stoptime as [ст.2 стоянка]

,case

when #tr.st2_stoptime is null then null --если станция - последняя в маршруте поезда

else dateadd(minute, #tr.st2_time+#tr.st2_stoptime, tt.send_date)

end as [ст.2 отправление]

from #tr inner join timetable tt

on #tr.trid = tt.trid

inner join trains t

on tt.trnum = t.trnum

order by tt.trnum, tt.send_date

drop table #tr

go

--система безопасности

grant execute

on sp_viewtrainlist

to admins

grant execute

on sp_viewtrainlist

to dbuser

--2. просмотр списка свободных мест в указанном поезде (для юзеров)

if exists (select * from dbo.sysobjects

where id=object_id(N'sp_viewtrain') and objectproperty(id,N'IsProcedure') = 1 )

drop procedure sp_viewtrain

go

create proc sp_viewtrain

@number int, @send_date smalldatetime --номер и дата отправления поезда

as

declare @trid int --id поезда

set @trid = (select trid from timetable

where (trnum = @number) and (send_date = @send_date))

select t.trnum, tt.send_date, t.caption --выводим инфо о поезде

from timetable tt inner join trains t

on tt.trnum = t.trnum

where (tt.trid = @trid)

select vagnum, case type --выбираем в табличку номер вагона, тип, число свободных мест

when 3 then 'плацкарт'

when 2 then 'купе'

when 1 then 'СВ'

end, freenum

from vagons

where (trid = @trid)

order by vagnum

go

--система безопасности

grant execute

on sp_viewtrain

to admins

grant execute

on sp_viewtrain

to dbuser

--3. бронирование билета (для юзеров)

if exists (select * from dbo.sysobjects

where id=object_id(N'sp_buyticket') and objectproperty(id,N'IsProcedure') = 1)

drop procedure sp_buyticket

go

create proc sp_buyticket

@number int, @send_date smalldatetime, @vagnum int, @amount int --поезд, номер вагона,

,@login varchar(20) --число билетов

,@result tinyint output --результат: 1- успех, 0 -неудача

,@orderid int = null output

as

if exists (select * from timetable --если есть такой поезд

where trnum = @number and send_date = @send_date )

and exists (select * from vagons --и есть такой вагон

where trid = (select trid from timetable

where trnum = @number and send_date = @send_date )

and vagnum = @vagnum

and freenum >= @amount

and @amount > 0

)

begin

declare @trid int --id поезда

set @trid = (select trid from timetable

where (trnum = @number) and (send_date = @send_date))

update vagons --изменяем число своб. мест

set freenum = vagons.freenum -@amount

where (trid = @trid) and (vagnum = @vagnum)

declare @type tinyint --тип вагона, нужен для записи в таблицу текущих заказов

set @type = (select type from vagons

where (trid = @trid) and (vagnum = @vagnum))

--вставляем в таблицу текущих заказов

declare @logid int --clientid

set @logid = (select clientid from clients

where login = @login)

declare @instime datetime --время вставки в таблицу

set @instime = getdate();

insert into current_orders(clientid, trid, vagnum, type,amount, status, buy_date)

values(@logid, @trid, @vagnum, @type, @amount, 1, @instime);

set @orderid = (select orderid from current_orders --значение OrderId (для юзеров)

where clientid = @logid

and buy_date = @instime)

set @result = 1

end

else

set @result = 0

go

--система безопасности

grant execute

on sp_buyticket

to dbuser

--4. просмотр своей истории (для юзеров)

if exists (select * from dbo.sysobjects

where id=object_id(N'sp_viewhistory') and objectproperty(id,N'IsProcedure') = 1

)

drop procedure sp_viewhistory

go

create proc sp_viewhistory

@login varchar(20)

as

select * from clients where login = @login

select co.orderid, tt.trnum, tt.send_date, co.vagnum, case co.type

when 1 then 'СВ'

when 2 then 'Купе'

when 3 then 'Плацкарт'

end as type

,co.amount, case co.status

when 1 then 'забронирован'

when 2 then 'снят'

end as status, co.buy_date

from current_orders co inner join timetable tt

on co.trid = tt.trid

where clientid = (select clientid from clients

where login = @login)

union all

select ho.histid, ht.trnum, ht.send_date, ho.vagnum, case ho.type

when 1 then 'СВ'

when 2 then 'Купе'

when 3 then 'Плацкарт'

end as type

,ho.amount, case ho.status

when 1 then 'забронирован'

when 2 then 'снят'

when 3 then 'куплен'

end as status, ho.buy_date

from history_orders ho inner join history_trains ht

on ho.trid = ht.histid

where clientid = (select clientid from clients

where login = @login)

union all

select ho.histid, tt.trnum, tt.send_date, ho.vagnum, case ho.type

when 1 then 'СВ'

when 2 then 'Купе'

when 3 then 'Плацкарт'

end as type

,ho.amount, case ho.status

when 1 then 'забронирован'

when 2 then 'снят'

when 3 then 'куплен'

end as status, ho.buy_date

from history_orders ho inner join timetable tt

on ho.trid =tt.trid

where clientid = (select clientid from clients

where login = @login)

go

--система безопасности

grant execute

on sp_viewhistory

to admins

grant execute

on sp_viewhistory

to dbuser

--5. отмена заказа (для юзеров)

if exists (select * from dbo.sysobjects

where id=object_id(N'sp_cancelorder') and objectproperty(id,N'IsProcedure') = 1

)

drop procedure sp_cancelorder

go

create proc sp_cancelorder

@orderid int --значение OrderID

,@login varchar(20) --логин юзера

,@result tinyint output --результат: 1- успех, 0 -неудача

as

if exists (select orderid from current_orders --выполняется,это его заказ

where orderid = @orderid

and clientid = (select clientid from clients

where login = @login))

begin

select * into #curorders --текущие заказы юзера

from current_orders

where orderid = @orderid

delete --удаляем из current_orders

from current_orders

where orderid = @orderid

insert into history_orders(histid, clientid, trid, vagnum, type, amount, status, buy_date)

select orderid, clientid, trid, vagnum, type, amount, 2, getdate()

from #curorders --вставка в историю

declare @amount int --число заказанных мест

set @amount = (select amount from #curorders)

update vagons --вставляем места обратно

set freenum = vagons.freenum + @amount

where (trid = (select trid from #curorders))

and (vagnum = (select vagnum from #curorders))

drop table #curorders

set @result = 1

end

else

set @result = 0

go

--система безопасности

grant execute

on sp_cancelorder

to dbuser

--6. добавление нового поезда (только для админов)

if exists (select * from dbo.sysobjects

where id=object_id(N'sp_addnewtrain') and objectproperty(id,N'IsProcedure') = 1

)

drop procedure sp_addnewtrain

go

create proc sp_addnewtrain

@trnum int, @caption varchar(40), @station_list varchar(8000)

--номер поезда, название, список названий станций: название,время от предыдущей станции,

as -- время стоянки через запятую,

insert into trains(trnum, caption) --вставляем в trains

values(@trnum, @caption)

--вставляем в routs

declare @list varchar(8000)

set @list = @station_list --список названий станций, через зпт

declare @stnum int

set @stnum = 1 --номера станций в маршруте данного поезда

while (len(@list) > 0) --пока еще есть станции

begin

declare @i int

set @i = charindex(',', @list)-1

declare @stname varchar(40) --название станции

set @stname = substring(@list, 1, @i)

declare @stid int --id станции

set @stid = (select stid from stations where stname = @stname)

declare @roadtime int --время от предыдущей станции

declare @stoptime int --время стоянки

set @list = substring(@list, @i+2, len(@list)-@i-1)

set @i = charindex(',', @list)-1

set @roadtime = cast(substring(@list, 1, @i) as int)

set @list = substring(@list, @i+2, len(@list)-@i-1)

set @i = charindex(',', @list)-1

if (@i = -1)

set @i = len(@list)

set @stoptime = cast(substring(@list, 1, @i) as int)

insert into routs(trnum, stid, stnum, roadtime, stoptime) --вставляем новую запись для данного поезда и станции

select @trnum, @stid, @stnum, case

when @roadtime = 0 then null

else @roadtime

end, case

when @stoptime = 0 then null

else @stoptime

end

if charindex(',', @list) = 0

set @list = ''

else

set @list = substring(@list, @i+2, len(@list)-@i-1)

set @stnum = @stnum + 1

end

go

--система безопасности

grant execute

on sp_addnewtrain

to admins

--7. добавление нового поезда в расписание (только для админов)

if exists (select * from dbo.sysobjects

where id=object_id(N'sp_addnewrealtrain') and objectproperty(id,N'IsProcedure') = 1

)

drop procedure sp_addnewrealtrain

go

create proc sp_addnewrealtrain

@trnum int, @send_date smalldatetime --номер поезда, время отправления

,@vagon_list varchar(8000) --список типов вагонов через зпт

as

insert into timetable(trnum, send_date) --вставляем в timetable

values(@trnum, @send_date)

declare @trid int

set @trid = (select trid from timetable

where trnum = @trnum

and send_date = @send_date)

--вставляем в vagons

declare @list varchar(8000)

set @list = @vagon_list --список вагонов с указанием их типа через запятую

declare @stnum int

set @stnum = 1 --номер вагона

while (len(@list) > 0) --пока еще есть вагоны

begin

declare @i int

set @i = charindex(',', @list)-1

if (@i = -1)

set @i = len(@list)

declare @type tinyint --тип вагона

set @type = cast(substring(@list, 1, @i) as tinyint)

insert into vagons(trid, vagnum, type, freenum) --вставляем запись про новый вагон поезда

values(@trid, @stnum, @type, 18*@type)

if charindex(',', @list) = 0

set @list = ''

else

set @list = substring(@list, @i+2, len(@list)-@i-1)

set @stnum = @stnum + 1

end

go

--система безопасности

grant execute

on sp_addnewrealtrain

to admins

--8. добавление новой станции в существующий поезд (только для админов)

if exists (select * from dbo.sysobjects

where id=object_id(N'sp_addstationtotrain') and objectproperty(id,N'IsProcedure') = 1

)

drop procedure sp_addstationtotrain

go

create proc sp_addstationtotrain

@trnum int, @stname varchar(40)

,@roadtime int = null, @stoptime int = null, @stnum int = 1, @roadnexttime int

,@result tinyint output --результат: 1 - успех, 0 - неудача

as

declare @stid int

set @stid = (select stid from stations where stname = @stname)

if exists (select * from stations where stname = @stname)

and exists (select * from trains where trnum = @trnum)

and not exists (select * from routs where trnum = @trnum

and stid = @stid

and stnum = @stnum)

begin

update routs --увеличиваем номера станций, которые после новой

set stnum = routs.stnum + 1

where (trnum = @trnum) and (stnum >= @stnum)

insert into routs(trnum, stid, stnum, roadtime, stoptime) --вставляем новую станцию

values(@trnum, @stid, @stnum, @roadtime, @stoptime)

update routs --изменяем время движения от введенной станции до следующей

set roadtime = @roadnexttime

where stnum = (@stnum + 1)

set @result = 1

end

else

set @result = 0

go

--система безопасности

grant execute

on sp_addstationtotrain

to admins

--9. удаление поезда из расписания (только для админов)

if exists (select * from dbo.sysobjects

where id=object_id(N'sp_deletetrain') and objectproperty(id,N'IsProcedure') = 1

)

drop procedure sp_deletetrain

go

create proc sp_deletetrain

@trnum int, @send_date smalldatetime

as

delete from timetable --удаляем из timetable

where (trnum = @trnum) and (send_date = @send_date)

go

--система безопасности

grant execute

on sp_deletetrain

to admins

--10. просмотр отчетов: 1 - маркетинговый (истории заказов)

if exists (select * from dbo.sysobjects

where id=object_id(N'sp_showmarketingreport') and objectproperty(id,N'IsProcedure') = 1

)

drop procedure sp_showmarketingreport

go

create proc sp_showmarketingreport

@startdate smalldatetime = null

,@enddate smalldatetime = null

as

declare @start smalldatetime

declare @end smalldatetime

if @startdate is null

set @start = '1900-01-01 00:00'

else

set @start = @startdate

if @enddate is null

set @end = getdate()

else

set @end = @enddate

select * from history_orders

where buy_date between @start and @end

order by histid

go

--система безопасности

grant execute

on sp_showmarketingreport

to admins

--11. просмотр отчетов: 2 - по поездам (только для админов)

if exists (select * from dbo.sysobjects

where id=object_id(N'sp_showtrainreport') and objectproperty(id,N'IsProcedure') = 1

)

drop procedure sp_showtrainreport

go

create proc sp_showtrainreport

@startdate smalldatetime = null

,@enddate smalldatetime = null

as

declare @start smalldatetime

declare @end smalldatetime

if @startdate is null

set @start = '1900-01-01 00:00'

else

set @start = @startdate

if @enddate is null

set @end = getdate()

else

set @end = @enddate

select * from history_trains

where send_date between @start and @end

order by histid

go

--система безопасности

grant execute

on sp_showtrainreport

to admins

go

--Триггеры

create trigger d_timetable on timetable

for delete

as

insert into history_trains(histid, trnum, send_date, amount_vagon, amount_places, free_number)

select d.trid, d.trnum, d.send_date, count(*), sum(v.type)*18, sum(v.freenum)

from vagons v inner join deleted d

on v.trid = d.trid

group by v.trid, d.trid, d.trnum, d.send_date

insert into history_orders

select c.orderid, c.clientid, c.trid, c.vagnum

,c.type, c.amount, c.status, c.buy_date

from current_orders c inner join deleted d

on c.trid = d.trid

delete

from current_orders

where trid = (select trid from deleted)

delete

from vagons

where trid = (select trid from deleted)

go

--Job

use msdb

go

exec sp_add_job @job_name = 'change_timetable'

,@enabled = 1

,@description = 'каждый день все расписание сдвигается на 1 день'

,@notify_level_eventlog = 0

,@notify_level_email = 0

,@notify_level_netsend = 0

,@notify_level_page = 0

,@delete_level = 0

exec sp_add_jobstep

@job_name = 'change_timetable'

,@step_name = 'удаление старых поездов'

,@command = 'delete from timetable

where (send_date < getdate())'

,@database_name = 'db103'

exec sp_apply_job_to_targets

@job_name = 'change_timetable'

,@target_servers = 'MICHMAN'

,@operation = apply

exec sp_add_jobschedule

@job_name = 'change_timetable'

,@name = 'план выполнения задания )'

,@enabled = 1 --включено

,@freq_type = 4 --ежедневно

,@freq_interval = 1 --каждый день

,@active_start_date = 20081208 -- начиная с 08-12-2008

,@active_start_time = 073700 --в 07:37

go

use db103

Листинг 3_default_fill_tables.sql

--clients

insert into clients(login, passwd, clname, surname, bday, passport)

values ('123', '123', 'Дмитрий', 'Медведев', '1965-04-12', '6040 123123');

insert into clients(login, passwd, clname, surname, bday, passport)

values ('bar', 'bar', 'Барак', 'Обама', '1970-01-24', '6234 341234');

--stations

insert into stations(stname)

values('Свердловск');

insert into stations(stname)

values('Палкино');

insert into stations(stname)

values('Ромкино');

insert into stations(stname)

values('Москва');

insert into stations(stname)

values('Пермь');

--trains

insert into trains (trnum, caption)

values (1, 'Свердловск - Москва')

insert into trains (trnum, caption)

values (2, 'Свердловск - Москва')

insert into trains (trnum, caption)

values (3, 'Свердловск - Ромкино')

insert into trains (trnum, caption)

values (4, 'Пермь - Москва')

insert into trains (trnum, caption)

values (5, 'Палкино')

--routs

insert into routs(trnum, stid, stnum, roadtime, stoptime) --Поезд №1: Свердловск,Палкино,Ромкино,Москва

values(1, 1, 1, null, null)

insert into routs(trnum, stid, stnum, roadtime, stoptime)

values(1, 2, 2, 400, 10)

insert into routs(trnum, stid, stnum, roadtime, stoptime)

values(1, 3, 3, 240, 2)

insert into routs(trnum, stid, stnum, roadtime, stoptime)

values(1, 4, 4, 480, null)

insert into routs(trnum, stid, stnum, roadtime, stoptime) --Поезд №2: Свердловск,Палкино,Москва

values(2, 1, 1, null, null)

insert into routs(trnum, stid, stnum, roadtime, stoptime)

values(2, 2, 2, 400, 10)

insert into routs(trnum, stid, stnum, roadtime, stoptime)

values(2, 4, 3, 700, null)

insert into routs(trnum, stid, stnum, roadtime, stoptime) --Поезд №3: Свердловск,Ромкино

values(3, 1, 1, null, null)

insert into routs(trnum, stid, stnum, roadtime, stoptime)

values(3, 3, 2, 600, null)

insert into routs(trnum, stid, stnum, roadtime, stoptime) --Поезд №4: Пермь,Москва

values(4, 5, 1, null, null)

insert into routs(trnum, stid, stnum, roadtime, stoptime)

values(4, 4, 2, 300, null)

insert into routs(trnum, stid, stnum, roadtime, stoptime) --Поезд №5: Палкино

values(5, 2, 1, null, null)

--timetable

insert into timetable(trnum, send_date)

values(1, '2008-12-17 14:53');

insert into timetable(trnum, send_date)

values(2, '2008-12-16 10:00');

insert into timetable(trnum, send_date)

values(3, '2008-12-16 9:40');

insert into timetable(trnum, send_date)

values(4, '2008-12-17 16:12');

insert into timetable(trnum, send_date)

values(5, '2008-12-16 17:39');

insert into timetable(trnum, send_date)

values(1, '2008-12-18 14:53');

--vagons

insert into vagons(trid, vagnum, type, freenum)

values(1, 1, 1, 18)

insert into vagons(trid, vagnum, type, freenum)

values(1, 2, 2, 36)

insert into vagons(trid, vagnum, type, freenum)

values(1, 3, 1, 18)

insert into vagons(trid, vagnum, type, freenum)

values(1, 4, 3, 54)

insert into vagons(trid, vagnum, type, freenum)

values(2, 1, 2, 36)

insert into vagons(trid, vagnum, type, freenum)

values(2, 2, 3, 54)

insert into vagons(trid, vagnum, type, freenum)

values(2, 3, 2, 36)

insert into vagons(trid, vagnum, type, freenum)

values(2, 4, 3, 54)

insert into vagons(trid, vagnum, type, freenum)

values(3, 1, 1, 18)

insert into vagons(trid, vagnum, type, freenum)

values(3, 2, 1, 18)

insert into vagons(trid, vagnum, type, freenum)

values(3, 3, 1, 18)

insert into vagons(trid, vagnum, type, freenum)

values(4, 1, 3, 54)

insert into vagons(trid, vagnum, type, freenum)

values(4, 2, 3, 54)

insert into vagons(trid, vagnum, type, freenum)

values(4, 3, 2, 36)

insert into vagons(trid, vagnum, type, freenum)

values(5, 1, 1, 18)

insert into vagons(trid, vagnum, type, freenum)

values(5, 2, 1, 18)

insert into vagons(trid, vagnum, type, freenum)

values(5, 3, 1, 18)

insert into vagons(trid, vagnum, type, freenum)

values(6, 1, 2, 36)

insert into vagons(trid, vagnum, type, freenum)

values(6, 2, 1, 18)

insert into vagons(trid, vagnum, type, freenum)

values(6, 3, 1, 18)

exec sp_addlogin '1', '1', db103

exec sp_grantdbaccess '1'

exec sp_addrolemember'admins', '1'

Листинг 4_drop_database.sql

use master;

drop database db103; --удаляем БД

use msdb; --удаляем Джоб

exec sp_delete_jobschedule

@job_name = 'change_timetable'

,@name = 'план выполнения задания )'

exec sp_delete_job @job_name = 'change_timetable'

use master;

exec sp_droplogin 'dbuser'

exec sp_droplogin '1'

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


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

  • Описание процесса бронирования билетов. Концептуальное и физическое проектирование базы данных. Точность и корректность хранения и отображения данных в базе данных. Проектирование логики диалога с пользователем. Разработка и описание приложения.

    курсовая работа [1,7 M], добавлен 11.02.2016

  • Понятие, принципы бронирования билетов на железнодорожные рейсы, порядок автоматизации данного процесса. Методика и этапы формирования программного обеспечения для упрощения бронирования на основе входной и выходной информации. Модели организации данных.

    контрольная работа [25,4 K], добавлен 21.02.2012

  • Необходимость особых подходов к проектированию сверхбольших БД. Создание БД для хранения информации о рейсах в программном продукте Microsoft Access 2003. Редактирование базы билетов. Поиск и просмотр информации в базе данных о бронировании билета.

    курсовая работа [2,2 M], добавлен 18.11.2014

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

    курсовая работа [1,2 M], добавлен 25.05.2010

  • Изучение методов разработки приложений в среде визуального программирования Visual Studio. Создание программы, реализующей заказ железнодорожных билетов. Язык SQL-запросов в системе управления базами данных MS Access. Тестирование созданной программы.

    курсовая работа [1,0 M], добавлен 03.07.2016

  • Недостатки бумажных билетов. Преимущества электронного билета. Компьютерные системы бронирования. Сайты продаж электронных билетов. Развитие технологии электронных билетов в России. Автоматическая подача запросов. Поисковые запросы в системе Sirena 2000.

    контрольная работа [396,9 K], добавлен 19.10.2013

  • Многоуровневые архитектуры клиент–сервер. Диаграммы классов, реализующих уровни презентации, бизнес–логики и базы данных приложения. Словесное описание процесса выполнения транзакций. Создание, изменение и удаление хранимых процедур, их выполнение.

    курсовая работа [3,4 M], добавлен 23.03.2013

  • Проектирование информационной системы бронирования билетов кассы аэропорта. Анализ информационных задач и круга пользователей системы. Составление реляционных отношений. Дополнительные ограничения целостности. Физическое проектирование базы данных.

    курсовая работа [949,1 K], добавлен 28.03.2011

  • Системный анализ предметной области. Нормальные формы таблиц. Физическое проектирование базы данных. Реализация структуры БД в СУБД MySQL. Запросы на создание таблиц, добавление и выборку данных. Реализация триггера и функции. Программный код WEB-страниц.

    курсовая работа [748,9 K], добавлен 01.11.2014

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

    дипломная работа [154,6 K], добавлен 08.02.2013

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