3.5 Удаление заказа

Пользователь может удалить свой заказ. Администратор имеет возможность удалить любой выбранный заказ. Билеты, забронированные данным заказом, переходят в разряд свободных.

Удаление заказа осуществляется посредством хранимой процедуры Delete_Order:

CREATE PROCEDURE [dbo].[Delete_Order]

@orderID int

AS

BEGIN

DELETE FROM Orders WHERE [OrderID]=@orderID

END

 

3.6 Добавление рейса

Добавление рейса осуществляется хранимой процедурой Insert_FlightString:


CREATE PROCEDURE [dbo].[Insert_FlightString]

@dateDeparture datetime,

@dateArrival datetime,

@price1 decimal(18,0),

@price2 decimal(18,0),

@company int,

@aircraft int,

@cityDeparture int,

@cityArrival int

AS

BEGIN

INSERT INTO [Flights]

([DateDeparture],[DateArrival],

[Price1],[Price2],

[CompanyID],[AircraftID],

[CityDepartureID],[CityArrivalID])

VALUES (

@dateDeparture,@dateArrival,

@price1,@price2,

@company,@aircraft,

@cityDeparture,@cityArrival)

END

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


3.7 Редактирование рейса

Обновление информации о рейсе обеспечивается хранимой процедурой Update_FlightString:

CREATE PROCEDURE [dbo].[Update_FlightString]

@FlightID int,

@dateDeparture datetime,

@dateArrival datetime,

@price1 decimal(18,0),

@price2 decimal(18,0),

@companyID int,

@aircraftID int,

@cityDepartureID int,

@cityArrivalID int

AS

BEGIN

UPDATE Flights SET

dateDeparture = @dateDeparture,

dateArrival = @dateArrival,

price1 = @price1,

price2 = @price2,

cityDepartureID = @cityDepartureID,

cityArrivalID = @cityArrivalID,

companyID = @companyID,

aircraftID = @aircraftID

WHERE FlightID = @FlightID

END


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

 

3.8 Удаление рейса

При удалении рейса срабатывает триггер TR_Flights_Delete:

CREATE TRIGGER [TR_Flights_Delete] ON [dbo].[Flights] INSTEAD OF DELETE

AS

DELETE FROM Orders

WHERE Orders.FlightID= (SELECT top(1) deleted.FlightID FROM deleted)

DELETE FROM Flights

WHERE Flights.FlightID= (SELECT top(1) deleted.FlightID FROM deleted)

RETURN

Так как в базе данных существует связь FK_Orders_Flights между таблицами Flight и Orders, то невозможно удалить рейс, пока есть хотя бы одна заявка на него. Поэтому сначала должны быть удалены все связанные заявки, а уже потом – сам рейс. Эту логику и осуществляет даный триггер.

3.8 Добавление пользователя

При добавлении пользователя применяется хранимая процедура Insert_User:

CREATE PROCEDURE [dbo].[Insert_User]

@login nvarchar(20),

@password nvarchar(20),

@email nvarchar(50)

AS

BEGIN

INSERT Users

(UserLogin, Password, Email)

VALUES

(@login, @password, @email)

END

3.9 Удаление пользователя

Удаление пользователя осуществляется хранимой процедурой Delete_User:

CREATE PROCEDURE [dbo].[Delete_User]

@UserID int

AS

BEGIN

DELETE FROM Orders WHERE [UserID]=@UserID

DELETE FROM Users WHERE [UserID]=@UserID

END

Так как существует ограничение FK_Orders_Users, то перед удалением пользователя необходимо удалить все сделанные им заказы.


4. Описание работы приложения

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

В системе хранится список зарегистрированных пользователей. При входе в систему у пользователя запрашивается имя и пароль, если введенные данные присутствуют в списке, то пользователь допускается к работе с системой. Форма аутентификации приведена на рисунке 3.

Рисунок 3 – Форма аутентификации

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

После входа в систему пользователь оказывается на странице поиска полетов. Эта страница имеет разный вид в зависимости от роли пользователя. Если это администратор, то он увидит страницу, показанную на рисунке 4, иначе загрузится страница, приведенная на рисунке 5.


Рисунок 4 – Страница Flights интерфейса администратора

Рисунок 5 - Страница Flights пользовательского интерфейса

Обе страницы предоставляют возможность искать рейсы по таким критериям, как город отправления и прибытия, дата и время вылета и прибытия. Не обязательно указывать все параметры. Можно их не указывать вовсе. В этом случае будут отобраны все рейсы. Однако выбор критериев позволяет уточнить результаты запроса. Благодаря тому, что пользователь не вводит значения сам, а выбирает их из загружаемых списков, сведена к минимуму вероятность ввода некорректных значений.

На параметры поиска налагается одно ограничение: время вылета или прибытия не может быть указано без соответствующей даты. При нарушении этого условия появляется сообщение об ошибке (Рисунок 6).


Рисунок 6 – Сообщение об ошибке

Выбрав рейс, пользователь может сделать заказ на некоторое количество билетов первого и/или второго класса. Для этого ему необходимо на странице Orders указать нужное количество билетов и номер кредитной карты. Информацию о заявке невозможно будет сохранить, пока он не укажет количество билетов, не превышающее число свободных мест заданного класса и корректный номер кредитной карты (16 цифр). В случае неправильного заполнения полей система выводит соответствующие сообщения. (Рисунок 7) Эти надписи остаются видимыми до тех пор, пока ошибка не будет исправлена.

Рисунок 7 – Страница Orders


Если введенная информация корректна, то в таблицу Orders добавляется новая запись, ассоциированная с текущим пользователем системы и выбранным рейсом.

Администратору системы предоставляются расширенные возможности. В частности, он имеет доступ к странице просмотра списка пользователей с возможностью их удаления. Единственное ограничение в данном случае – это попытка удаления самого администратора. При этом выдается сообщение об ошибке. При удачном удалении появляется сообщение об успешном удалении (Рисунок 8)

 

Рисунок 8 – Удаление пользователя посредством интерфейса страницы Users

Кроме этого администратор может добавлять рейсы – на странице AddingFlight (Рисунок 9) и редактировать информацию по выбранному рейсу на странице EditFlight (Рисунок 10). На этих обязательно заполнение всех полей. Также проверяется, чтобы: не совпадали указанные город вылета и прибытии; значения, введенные в поля цены за билеты были положительными числами; дата прибытии была бы больше даты вылета. Если хотя бы одно из этих условий нарушается, выводится сообщение об ошибке. В случае корректного ввода информация сохраняется в базе данных и система сообщает пользователю об успешно выполненной операции.


Рисунок 9 – Страница добавления рейса

Рисунок 10 - Страница редактирования рейса


Заключение

В рамках данной курсовой работы была разработана система бронирования авиабилетов: спроектирована база данных для MS SQL Server 2005, а так же реализованы слой доступа к данным и WEB-интерфейс. При проектировании базы данных акцент делался на серверную часть. На стороне сервера были применены индексы, хранимые процедуры, функции, триггеры, представления. Клиентская часть была реализована посредством языка С# на платформе.NET. В частности: доступ к данным был обеспечен провайдером ADO.NET, а WEB-интерфейс построен с помощью ASP.NET. Дополнительно при реализации WEB-представления были использованы HTML, CSS, JavaScript, AJAX.

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


Список использованных источников

1.    Жилинский А.А. Самоучитель Microsoft SQL Server 2005 – СПб.: БХВ-Петербург, 2007. – 224 с.

2.    Рихтер ДЖ. CLR via C#. Программирование на платформе.NET Framework 2.0 на языке С#. Мастер-класс./ Пер. с англ. – М.: Издательство «Русская редакция»; СПб.; Питер, 2007. – 656 с.

3.    Экспозито Д. Microsoft ASP.NET 2.0. Базовый курс. Мастер-класс/ Пер. с англ. – М. Издательство «Русская редакция»; СПб.; Питер, 2007. – 688 с.

4.    Экспозито Д. Microsoft ASP.NET 2.0. Углубленное изучение/ Пер. с англ. – М. Издательство «Русская редакция»; СПб.; Питер, 2007. – 592 с.

5.    Microsoft Corporation. Проектирование и реализация баз данных Microsoft SQL Server 2000. Учебный курс MCAD/MSCE, MCDMA/ Пер. с англ. – 2-е изд., испр. – М.: Издательско-торговый дом «Русская редакция», 2003. – 512с.


Приложение А

Скрипт для создания базы данных

CREATE DATABASE [Group0703b]

GO

USE [Group0703b]

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Companies]') AND type in (N'U'))

BEGIN

CREATE TABLE [dbo].[Companies](

[CompanyID] [int] IDENTITY(1,1) NOT NULL,

[CompanyName] [nvarchar](40) NULL,

CONSTRAINT [PK_Companies] PRIMARY KEY CLUSTERED

(

[CompanyID] ASC

)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

END

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Users]') AND type in (N'U'))

BEGIN

CREATE TABLE [dbo].[Users](

[UserID] [int] IDENTITY(1,1) NOT NULL,

[UserLogin] [nvarchar](20) NOT NULL,

[Password] [nvarchar](20) NOT NULL,

[Email] [nvarchar](50) NULL,

CONSTRAINT [PK_Users_1] PRIMARY KEY CLUSTERED

(

[UserID] ASC

)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

END

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Cities]') AND type in (N'U'))

BEGIN

CREATE TABLE [dbo].[Cities](

[CityID] [int] IDENTITY(1,1) NOT NULL,

[CityName] [nvarchar](40) NULL,

CONSTRAINT [PK_Cities] PRIMARY KEY CLUSTERED

(

[CityID] ASC

)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

END

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Aircrafts]') AND type in (N'U'))

BEGIN

CREATE TABLE [dbo].[Aircrafts](

[AircraftID] [int] IDENTITY(1,1) NOT NULL,

[AircraftModel] [nvarchar](40) NULL,

[Count1] [int] NULL,

[Count2] [int] NULL,

CONSTRAINT [PK_Aicrafts] PRIMARY KEY CLUSTERED

(

[AircraftID] ASC

)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

END

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[timeFlight]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))

BEGIN

execute dbo.sp_executesql @statement = N'CREATE FUNCTION [dbo].[timeFlight]

(

@dateArrival datetime,

@dateDeparture datetime

)

RETURNS char(5)

BEGIN

RETURN

convert(char(2),datediff(hh,@dateDeparture,@dateArrival))+'':''+

convert(char(2),datediff(mi,@dateDeparture,@dateArrival)-datediff(hh,@dateDeparture,@dateArrival)*60)

END'

END

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Flights]') AND type in (N'U'))

BEGIN

CREATE TABLE [dbo].[Flights](

[FlightID] [int] IDENTITY(1,1) NOT NULL,

[DateDeparture] [datetime] NULL,

[DateArrival] [datetime] NULL,

[Price1] [decimal](18, 0) NULL,

[Price2] [decimal](18, 0) NULL,

[CompanyID] [int] NULL,

[AircraftID] [int] NULL,

[CityDepartureID] [int] NULL,

[CityArrivalID] [int] NULL,

CONSTRAINT [PK_Flights] PRIMARY KEY CLUSTERED

(

[FlightID] ASC

)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

END

GO

IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[Flights]') AND name = N'IX_Fligts_AircraftID')

CREATE NONCLUSTERED INDEX [IX_Fligts_AircraftID] ON [dbo].[Flights]

(

[AircraftID] ASC

)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

GO

IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[Flights]') AND name = N'IX_Fligts_CityArrivalID')

CREATE NONCLUSTERED INDEX [IX_Fligts_CityArrivalID] ON [dbo].[Flights]

(

[CityArrivalID] ASC

)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

GO

IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[Flights]') AND name = N'IX_Fligts_CityDepartureID')

CREATE NONCLUSTERED INDEX [IX_Fligts_CityDepartureID] ON [dbo].[Flights]

(

[CityDepartureID] ASC

)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

GO

IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[Flights]') AND name = N'IX_Fligts_CompanyID')

CREATE NONCLUSTERED INDEX [IX_Fligts_CompanyID] ON [dbo].[Flights]

(

[CompanyID] ASC

)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

IF NOT EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N'[dbo].[TR_Flights_Delete]'))

EXEC dbo.sp_executesql @statement = N'CREATE TRIGGER [dbo].[TR_Flights_Delete] ON [dbo].[Flights] INSTEAD OF DELETE

AS

DELETE FROM Orders

WHERE Orders.FlightID= (SELECT top(1) deleted.FlightID FROM deleted)

DELETE FROM Flights

WHERE Flights.FlightID= (SELECT top(1) deleted.FlightID FROM deleted)

RETURN'

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Orders]') AND type in (N'U'))

BEGIN

CREATE TABLE [dbo].[Orders](

[OrderID] [int] IDENTITY(1,1) NOT NULL,

[CreditCard] [varchar](16) NULL,

[Number1cl] [int] NULL,

[Number2cl] [int] NULL,

[UserID] [int] NULL,

[FlightID] [int] NULL,

CONSTRAINT [PK_Orders] PRIMARY KEY CLUSTERED

(

[OrderID] ASC

)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

END

GO

IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[Orders]') AND name = N'IX_Orders_UserID')

CREATE NONCLUSTERED INDEX [IX_Orders_UserID] ON [dbo].[Orders]

(

[UserID] ASC

)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Insert_User]') AND type in (N'P', N'PC'))

BEGIN

EXEC dbo.sp_executesql @statement = N'-- Вставка новой записи в таблицу Users

CREATE PROCEDURE [dbo].[Insert_User]

@login nvarchar(20),

@password nvarchar(20),

@email nvarchar(50)

AS

BEGIN

INSERT Users

(UserLogin, Password, Email)

VALUES

(@login, @password, @email)

END

;

'

END

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Delete_User]') AND type in (N'P', N'PC'))

BEGIN

EXEC dbo.sp_executesql @statement = N'-- Удаление записи из таблицы Users

CREATE PROCEDURE [dbo].[Delete_User]

@UserID int

AS

BEGIN

DELETE FROM Users WHERE [UserID]=@UserID

END

;

'

END

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[CountEmptyPlaces1cl]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))

BEGIN

execute dbo.sp_executesql @statement = N'CREATE FUNCTION [dbo].[CountEmptyPlaces1cl]

(

@flightID int

)

RETURNS int

BEGIN

DECLARE @count int;

IF EXISTS (SELECT OrderID FROM Orders WHERE FlightID=@flightID AND Number1cl>0)

SELECT @count=Aircrafts.Count1

-(SELECT SUM(Number1cl) FROM Orders WHERE FlightID=@flightID)

FROM Flights,Aircrafts WHERE Flights.FlightID=@flightID

AND Flights.AircraftID=Aircrafts.AircraftID

ELSE

SELECT @count=Aircrafts.Count1

FROM Flights,Aircrafts WHERE Flights.FlightID=@flightID

AND Flights.AircraftID=Aircrafts.AircraftID

RETURN @count

END'

END

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[CountEmptyPlaces2cl]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))

BEGIN

execute dbo.sp_executesql @statement = N'CREATE FUNCTION [dbo].[CountEmptyPlaces2cl]

(

@flightID int

)

RETURNS int

BEGIN

DECLARE @count int;

IF EXISTS (SELECT OrderID FROM Orders WHERE FlightID=@flightID AND Number2cl>0)

SELECT @count=Aircrafts.Count2

-(SELECT SUM(Number2cl) FROM Orders WHERE FlightID=@flightID)

FROM Flights,Aircrafts WHERE Flights.FlightID=@flightID

AND Flights.AircraftID=Aircrafts.AircraftID

ELSE

SELECT @count=Aircrafts.Count2

FROM Flights,Aircrafts WHERE Flights.FlightID=@flightID

AND Flights.AircraftID=Aircrafts.AircraftID

RETURN @count

END'

END

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Insert_FlightString]') AND type in (N'P', N'PC'))

BEGIN

EXEC dbo.sp_executesql @statement = N'-- Вставка новой записи в таблицу Flight

CREATE PROCEDURE [dbo].[Insert_FlightString]

@dateDeparture datetime,

@dateArrival datetime,

@price1 decimal(18,0),

@price2 decimal(18,0),

@company int,

@aircraft int,

@cityDeparture int,

@cityArrival int

AS

BEGIN

INSERT INTO [Flights]

([DateDeparture],[DateArrival],

[Price1],[Price2],

[CompanyID],[AircraftID],

[CityDepartureID],[CityArrivalID])

VALUES (

@dateDeparture,@dateArrival,

@price1,@price2,

@company,@aircraft,

@cityDeparture,@cityArrival)

END

;

'

END

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Update_FlightString]') AND type in (N'P', N'PC'))

BEGIN

EXEC dbo.sp_executesql @statement = N'-- Обновление записи в таблице Flights

CREATE PROCEDURE [dbo].[Update_FlightString]

@FlightID int,

@dateDeparture datetime,

@dateArrival datetime,

@price1 decimal(18,0),

@price2 decimal(18,0),

@companyID int,

@aircraftID int,

@cityDepartureID int,

@cityArrivalID int

AS

BEGIN

UPDATE Flights SET

dateDeparture = @dateDeparture,

dateArrival = @dateArrival,

price1 = @price1,

price2 = @price2,

cityDepartureID = @cityDepartureID,

cityArrivalID = @cityArrivalID,

companyID = @companyID,

aircraftID = @aircraftID

WHERE FlightID = @FlightID

END

;

'

END

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Delete_Order]') AND type in (N'P', N'PC'))

BEGIN

EXEC dbo.sp_executesql @statement = N'-- Удаление записи из таблицы Orders по OrderID

CREATE PROCEDURE [dbo].[Delete_Order]

@orderID int

AS

BEGIN

DELETE FROM Orders WHERE [OrderID]=@orderID

END

;

'

END

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Delete_OrderByUserID]') AND type in (N'P', N'PC'))

BEGIN

EXEC dbo.sp_executesql @statement = N'-- Удаление записей из таблицы Orders по UserID

CREATE PROCEDURE [dbo].[Delete_OrderByUserID]

@UserID int

AS

BEGIN

DELETE FROM Orders WHERE [UserID]=@UserID

END

;

'

END

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

IF NOT EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[FlightView]'))

EXEC dbo.sp_executesql @statement = N'CREATE VIEW [dbo].[FlightView] AS

SELECT

FlightID,

DateDeparture,

DateArrival,

dbo.timeFlight(DateArrival,DateDeparture) AS TimeFlight,

CityDepartureID,

CityArrivalID,

DepartureCities.CityName AS CityDeparture,

ArrivalCities.CityName AS CityArrival,

CompanyName,

AircraftModel,

Price1,

Price2,

dbo.CountEmptyPlaces1cl(FlightID) AS EmptyPlace1cl,

dbo.CountEmptyPlaces2cl(FlightID) AS EmptyPlace2cl

FROM dbo.Flights INNER JOIN dbo.Companies

ON Group0703b.dbo.Flights.CompanyID = Group0703b.dbo.Companies.CompanyID

INNER JOIN Group0703b.dbo.Aircrafts

ON Group0703b.dbo.Flights.AircraftID = Group0703b.dbo.Aircrafts.AircraftID

LEFT OUTER JOIN Group0703b.dbo.Cities AS DepartureCities

ON Group0703b.dbo.Flights.CityDepartureID = DepartureCities.CityID

LEFT OUTER JOIN Group0703b.dbo.Cities AS ArrivalCities

ON Group0703b.dbo.Flights.CityArrivalID = ArrivalCities.CityID '

GO

IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_Flights_Aircrafts]') AND parent_object_id = OBJECT_ID(N'[dbo].[Flights]'))

ALTER TABLE [dbo].[Flights] WITH CHECK ADD CONSTRAINT [FK_Flights_Aircrafts] FOREIGN KEY([AircraftID])

REFERENCES [dbo].[Aircrafts] ([AircraftID])

GO

ALTER TABLE [dbo].[Flights] CHECK CONSTRAINT [FK_Flights_Aircrafts]

GO

IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_Flights_Cities_Arrival]') AND parent_object_id = OBJECT_ID(N'[dbo].[Flights]'))

ALTER TABLE [dbo].[Flights] WITH CHECK ADD CONSTRAINT [FK_Flights_Cities_Arrival] FOREIGN KEY([CityArrivalID])

REFERENCES [dbo].[Cities] ([CityID])

GO

ALTER TABLE [dbo].[Flights] CHECK CONSTRAINT [FK_Flights_Cities_Arrival]

GO

IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_Flights_Cities_Departure]') AND parent_object_id = OBJECT_ID(N'[dbo].[Flights]'))

ALTER TABLE [dbo].[Flights] WITH CHECK ADD CONSTRAINT [FK_Flights_Cities_Departure] FOREIGN KEY([CityDepartureID])

REFERENCES [dbo].[Cities] ([CityID])

GO

ALTER TABLE [dbo].[Flights] CHECK CONSTRAINT [FK_Flights_Cities_Departure]

GO

IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_Flights_Companies]') AND parent_object_id = OBJECT_ID(N'[dbo].[Flights]'))

ALTER TABLE [dbo].[Flights] WITH CHECK ADD CONSTRAINT [FK_Flights_Companies] FOREIGN KEY([CompanyID])

REFERENCES [dbo].[Companies] ([CompanyID])

GO

ALTER TABLE [dbo].[Flights] CHECK CONSTRAINT [FK_Flights_Companies]

GO

IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_Orders_Flights]') AND parent_object_id = OBJECT_ID(N'[dbo].[Orders]'))

ALTER TABLE [dbo].[Orders] WITH CHECK ADD CONSTRAINT [FK_Orders_Flights] FOREIGN KEY([FlightID])

REFERENCES [dbo].[Flights] ([FlightID])

GO

ALTER TABLE [dbo].[Orders] CHECK CONSTRAINT [FK_Orders_Flights]

GO

IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_Orders_Users]') AND parent_object_id = OBJECT_ID(N'[dbo].[Orders]'))

ALTER TABLE [dbo].[Orders] WITH CHECK ADD CONSTRAINT [FK_Orders_Users] FOREIGN KEY([UserID])

REFERENCES [dbo].[Users] ([UserID])

GO

ALTER TABLE [dbo].[Orders] CHECK CONSTRAINT [FK_Orders_Users]


Информация о работе «Автоматизированная система бронирования авиабилетов»
Раздел: Информатика, программирование
Количество знаков с пробелами: 33914
Количество таблиц: 0
Количество изображений: 10

Похожие работы

Скачать
60900
0
0

... Ø учет информации о безналичных расчетах, Ø получение финансовых и статистических отчетов. IV. Отечественные системы бронирования и резервирования.   4.1. Сирена. 4.1.1.История создания. Первая автоматизированная система резервирования авиационных билетов «СИРЕНА» в бывшем СССР, разработанная учёными АН СССР и специалистами ...

Скачать
132529
1
5

... меньше времени и ответ клиенту агентство может дать уже в день подачи заявки. Каждая турфирма разрабатывает индивидуальный образец листа бронирования. Согласно Федеральному Закону «Об основах туристской деятельности в Российской Федерации» (гл. IV, ст. 9) – это конкретный заказ туриста или лица, уполномоченного представлять группу туристов, туроператору на формирование туристского продукта. ...

Скачать
73836
0
1

... звеном в туристической деятельности, компьютерные системы бронирования появились сравнительно недавно, но усовершенствуются довольно быстрыми темпами. 2 Создание электронного пособия по использованию компьютерных систем бронирования 2.1 Зарубежные системы бронирования 2.1.1 Система бронирования «Галилео» (Galileo) Система Galileo - это целый комплекс встроенных подсистем, каждая из ...

Скачать
26127
0
0

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

0 комментариев


Наверх