После входа в систему пользователь оказывается на странице поиска полетов. Эта страница имеет разный вид в зависимости от роли пользователя. Если это администратор, то он увидит страницу, показанную на рисунке 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]
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
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
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Users]') AND type in (N'U'))
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
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Cities]') AND type in (N'U'))
CREATE TABLE [dbo].[Cities](
[CityID] [int] IDENTITY(1,1) NOT NULL,
[CityName] [nvarchar](40) NULL,
CONSTRAINT [PK_Cities] PRIMARY KEY CLUSTERED
[CityID] ASC
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Aircrafts]') AND type in (N'U'))
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
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'))
execute dbo.sp_executesql @statement = N'CREATE FUNCTION [dbo].[timeFlight]
@dateArrival datetime,
@dateDeparture datetime
)
RETURNS char(5)
RETURN
convert(char(2),datediff(hh,@dateDeparture,@dateArrival))+'':''+
convert(char(2),datediff(mi,@dateDeparture,@dateArrival)-datediff(hh,@dateDeparture,@dateArrival)*60)
END'
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Flights]') AND type in (N'U'))
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
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]
Страницы: 1, 2, 3, 4