Функциональная организация системы
Хотя возможны различные вариации построения систем, чаще всего используется трехуровневая архитектура: веб-браузер, какая-нибудь технология предоставления динамического веб-контента и база данных. Веб-браузер посылает запросы среднему уровню, который обслуживает их, производя запросы к базе данных, и представляя результаты в пользовательском интерфейсе (рис. 1).
Рис. 1 Архитектура технологии EJB
В данной курсовой работе требуется разработать ИС «Резервирование авиабилетов». Для создания информационной системы необходимо определиться со структурой базы данных (рис.2) и составить алгоритм работы приложения.
В базе данных содержится информация о трех сущностях системы: Самолеты (Aircraft), Рейсы (Flights), Бронь (Reservation).
Каждый самолет имеет идентификационный номер, наименование и число посадочных мест данной модели самолета.
Также БД хранит информацию о ближайших рейсах авиакомпании, в которых известно название рейса, расписание вылета, к какому самолету привязан рейс, число свободных мест в этом рейсе и его цена.
Данные о забронированных билетах также хранятся на сервере, каждому клиенту, присваивается идентификационный номер его брони, идентификационный номер забронированного рейса, регистрируется ФИО клиента и количество билетов для резервирования.
Рис.2 Схема базы данных ИС «Резервирование авиабилетов»
1. Таблица Aircraft – содержит информацию о самолетах.
Атрибуты таблицы Aircraft:
ID_Aircraft – идентификационный номер самолета.
Name_Aircraft – название самолета.
PassengerSeats – количество пассажирских мест.
Ограничения таблицы:
PK_Aircraft: ID_Aircraft – первичный ключ таблицы
2. Таблица Flights – содержит информацию о рейсах авиакомпании.
Атрибуты таблицы Flights:
ID_Flights – идентификационный номер рейса.
Name_Flights – Название рейса.
Timetable – Дата вылета.
ID_Aircraft – идентификационный номер самолета.
TicketsAvailable – осталось билетов.
Ограничения таблицы:
• PK_Flights: ID_Flights – первичный ключ таблицы.
FK_Flights_Aircraft : ID_Aircraft – внешний ключ таблицы.
3. Таблица Reservation – содержит информацию о зарезервированных билетах.
Атрибуты таблицы Reservation:
ID_Reservation – идентификационный номер рейса.
FIO_Client – Название рейса.
ID_Flights – Дата вылета.
ReservedTickets – идентификационный номер самолета.
Ограничения таблицы:
• PK_Reservation: ID_Reservation – первичный ключ таблицы.
FK_Reservation_Flights: ID_Flights – внешний ключ таблицы.
Скрипты создания бд
CREATE TABLE Aircraft
( ID_Aircraft NUMBER(8,2) NOT NULL,
Name_Aircraft NVARCHAR2(255) NOT NULL,
PassengerSeats NUMBER(8,2) NOT NULL
);
CREATE TABLE Flights
(
ID_Flights NUMBER(8,2) NOT NULL,
Name_Flights NVARCHAR2(255) NOT NULL,
Timetable DATE NOT NULL,
ID_Aircraft NUMBER(8,2) NOT NULL,
TicketsAvailable NUMBER(8,2) NULL
);
CREATE TABLE Reservation
(
ID_Reservation NUMBER(8,2) NOT NULL,
FIO_Client NVARCHAR2(255) NOT NULL,
ID_Flights NUMBER(8,2) NOT NULL,
ReservedTickets NUMBER(8,2) NULL
);
ALTER TABLE Aircraft ADD CONSTRAINT PK_Aircraft
PRIMARY KEY (ID_Aircraft)
USING INDEX ;
ALTER TABLE Flights ADD CONSTRAINT PK_Flights
PRIMARY KEY (ID_Flights)
USING INDEX ;
ALTER TABLE Reservation ADD CONSTRAINT PK_Reservation
PRIMARY KEY (ID_Reservation)
USING INDEX ;
ALTER TABLE Flights ADD CONSTRAINT FK_Flights_Aircraft
FOREIGN KEY (ID_Aircraft) REFERENCES Aircraft (ID_Aircraft);
ALTER TABLE Reservation ADD CONSTRAINT FK_Reservation_Flights
FOREIGN KEY (ID_Flights) REFERENCES Flights (ID_Flights);
INSERT INTO Aircraft (ID_Aircraft,Name_Aircraft,PassengerSeats)
CREATE SEQUENCE aircraft_seq
START WITH 5
INCREMENT BY 1
NOMAXVALUE;
create or replace trigger aircraft_id_trg
before insert on aircraft
for each row
begin
if :new.ID_AIRCRAFT is null then
select aircraft_seq.nextval into :new.ID_AIRCRAFT from dual;
end if;
end;
CREATE SEQUENCE flights_seq
START WITH 5
INCREMENT BY 1
NOMAXVALUE;
create or replace trigger flights_id_trg
before insert on flights
for each row
begin
if :new.ID_FLIGHTS is null then
select flights_seq.nextval into :new.ID_FLIGHTS from dual;
end if;
end;
CREATE SEQUENCE reservation_seq
START WITH 5
INCREMENT BY 1
NOMAXVALUE;
create or replace trigger reservation_id_trg
before insert on reservation
for each row
begin
if :new.ID_RESERVATION is null then
select reservation_seq.nextval into :new.ID_RESERVATION from dual;
end if;
end;
INSERT INTO Aircraft (ID_Aircraft,Name_Aircraft,PassengerSeats)
VALUES (1,'Ilyushin Il-18',70);
INSERT INTO Aircraft (ID_Aircraft,Name_Aircraft,PassengerSeats)
VALUES (2,'Boeing 747-8',467);
INSERT INTO Aircraft (ID_Aircraft,Name_Aircraft,PassengerSeats)
VALUES (3,'Embraer 195',118);
INSERT INTO Aircraft (ID_Aircraft,Name_Aircraft,PassengerSeats)
VALUES (4,'Boeing 737-400',150);
INSERT INTO Flights (ID_Flights,Name_Flights,Timetable,ID_Aircraft,TicketsAvailable)
VALUES (1,'Moscow-Adler','01-06-2012',1,70);
INSERT INTO Flights (ID_Flights,Name_Flights,Timetable,ID_Aircraft,TicketsAvailable)
VALUES (2,'Frankfurt-Washington','15-06-2012',2,117);
INSERT INTO Flights (ID_Flights,Name_Flights,Timetable,ID_Aircraft,TicketsAvailable)
VALUES (3,'Yerevan-Sochi','02-07-2012',3,24);
INSERT INTO Flights (ID_Flights,Name_Flights,Timetable,ID_Aircraft,TicketsAvailable)
VALUES (4,'Krasnodar-Moscow','10-08-2012',4,56);
INSERT INTO Reservation (ID_Reservation,FIO_Client,ID_Flights,ReservedTickets)
VALUES (1,'Potapova Evgeniya Nikolaevna',1,2);
INSERT INTO Reservation (ID_Reservation,FIO_Client,ID_Flights,ReservedTickets)
VALUES (2,'Ponamoreva Olga Aleksandrovna',2,1);
INSERT INTO Reservation (ID_Reservation,FIO_Client,ID_Flights,ReservedTickets)
VALUES (3,'Kolesov Dmitriy Sergeevich',3,3);
INSERT INTO Reservation (ID_Reservation,FIO_Client,ID_Flights,ReservedTickets)
VALUES (4,'Nikolaeva Yuliya Alekseevna',4,2);