Система бронирования билетов «Aircraft Tickets» Software Design Description Версия 1.1 08/06/2009 Юлия Беляева, Михаил Дворкин, Антон Иринёв, Евгений Курбацкий, Дмитрий Трофимов i Оглавление 1 Введение ................................................................................................................................. 2 1.1 Цель .................................................................................................................................. 2 1.2 Краткий обзор.................................................................................................................. 2 1.3 Список определений, сокращений и аббревиатур ...................................................... 2 1.4 Ссылки .............................................................................................................................. 3 2 Диаграмма размещения ........................................................................................................ 4 3 Архитектурный дизайн .......................................................................................................... 5 3.1 4 Описание интерфейсов компонетов ............................................................................. 5 3.1.1 Интерфейсы Database и DatabaseOperations ......................................................... 5 3.1.2 Интерфейсы DatabaseListener и DatabaseListenerOperations ............................. 8 Дизайн структур данных ........................................................................................................ 9 4.1 Таблица «Airports» .......................................................................................................... 9 4.2 Таблица «Airplanes» ........................................................................................................ 9 4.3 Таблица «Airplanes_seats» .............................................................................................. 9 4.4 Таблица «Tickets» ............................................................................................................ 9 4.5 Таблица «Flights» ............................................................................................................. 9 5 Сценарии работы.................................................................................................................... 9 6 Дизайн графического интерфейса пользователя ................................................................ 9 1 1 Введение 1.1 Цель Целью данного документа является детальное изложение того, как устроена система покупки авиабилетов Aircraft Tickets. 1.2 Краткий обзор Система состоит из трех компонент – клиентского приложения (которые существуют двух типов – для администраторов и операторов системы), сервера приложений и базы данных. Сервер приложений обслуживает подключенных к нему клиентов, позволяя тем совершать операции по покупке билетов, добавлению новых аэропортов, самолетов, мест и рейсов. Все данные об аэропортах, самолетах, билетах, местах содержатся в базе данных. 1.3 Список определений, сокращений и аббревиатур CORBA – Common Object Request Broker Architecture, общая архитектура брокера объектных запросов OMG – Object Management Group SQL – Structured Query Language Аэропорт – запись в базе данных, содержащая название и международный код аэропорта Билет — запись в базе данных, содержащая номер рейса, номер места и паспортные данные клиента, и означающая факт покупки клиентом указанного места на указанном рейсе Место — запись в базе данных, содержащая код самолета и номер места, и означающая наличие в указанном типе самолета места с указанным номером Рейс — запись в базе данных, содержащая коды аэропортов отправления и прибытия, даты отправления и прибытия, и код самолета, на котором осуществляется рейс Самолет — запись в базе данных, содержащая название типа самолета и его код СУБД – система управления базой данных 1.4 Ссылки 1. Sun Java http://java.sun.com/ 2. OMG’s CORBA web site. http://www.corba.org/ 3. http://www.oracle.com/technology/obe/2day_dba/backup/backup.htm#t2 4. Система бронирования авиабилетов Expedia www.expedia.com 5. СУБД Oracle http://www.oracle.com 2 Диаграмма размещения На рис. 1 представлена диаграмма физического размещения компонентов cистемы. Client Editor Client Monitor Компьютер администратора Компьютер оператора Application server Database Сервер Сервер с базой данных Рис. 1. Диаграмма размещения 3 Архитектурный дизайн Диаграмма компонентов с указанием интерфейсов представлена на рис. 2. Client Application DatabaseListener Database Oracle C++ Call Interface Application Server Oracle DBMS Advanced Query Рис. 2. Диаграмма компонентов 3.1 Описание интерфейсов компонетов В данном разделе описаны интерфейсы между компонентами системы. 3.1.1 Интерфейсы Database и DatabaseOperations Интерфейс Database наследуется от DatabaseOpeations, который будет описан далее. Интерфейс DatabaseOperations содержит следующие операции: boolean deleteTicket (int id) Описание: Удаление билета по идентификатору. Аргументы: Идентификатор билета. Возвращаемое значение: Был удалён билет или нет. Предусловия: Существование билета с данным идентификатором. Постусловие: Билет удалён или возвращено значение false. boolean updateTicket (int id, int flightId, int seatId, java.lang.String clientName, java.lang.String clientPassport) Описание: Обновление информации о билете. Аргументы: Идентификатор билета, идентификатор полёта, идентификатор места, имя клиента, паспортные данные клиента. Возвращаемое значение: Был обновлён билет или нет. Предусловия: Существование билета с данным идентификатором. Постусловие: Информация о билете обновлена или возвращено значение false. boolean addTicket (int flightId, int seatId, java.lang.String clientName, java.lang.String clientPassport) Описание: Добавление нового билета. Аргументы: Идентификатор полёта, идентификатор места в самолёте, имя клиента, паспортные данные клиента. Возвращаемое значение: Был добавлен билет или нет. Предусловия: Отсутствие билета на полёт с данным идентификатором на данное место. Постусловие: Билет добавлен или возвращено значение false. ru.ifmo.airtickets.idl.Ticket[] getTicket (int id) Описание: Получение билета по идентификатору. Аргументы: Идентификатор билета. Возвращаемое значение: Билет с данным идентификатором или массив длины ноль. Предусловия: Нет. Постусловие: Нет. ru.ifmo.airtickets.idl.Ticket[] getAllTickets () Описание: Получение всех забронированных билетов. Аргументы: Нет. Возвращаемое значение: Массив билетов. Предусловия: Нет. Постусловие: Нет. boolean deleteFlight (int id) Описание: Удаление полёта по идентификатору. Аргументы: Идентификатор полёта. Возвращаемое значение: Был удалён полёт или нет. Предусловия: Существование полёта с данным идентификатором. Постусловие: Полёт удалён или возвращено значение false. boolean updateFlight (int id, int departureAirportId, java.lang.String departureDate, int arrivalAirportId, java.lang.String arrivalDate, int airplaneId, double cost) boolean addFlight (int departureAirportId, java.lang.String departureDate, int arrivalAirportId, java.lang.String arrivalDate, int airplaneId, double cost) ru.ifmo.airtickets.idl.Flight[] getFlight (int id) ru.ifmo.airtickets.idl.Flight[] getAllFlights () boolean deleteAirplaneSeat (int id) boolean updateAirplaneSeat (int id, int airplaneId, java.lang.String seat) boolean addAirplaneSeat (int airplaneId, java.lang.String seat) ru.ifmo.airtickets.idl.AirplaneSeat[] getAirplaneSeat (int id) ru.ifmo.airtickets.idl.AirplaneSeat[] getAllAirplaneSeats () boolean deleteAirplane (int id) boolean updateAirplane (int id, java.lang.String name) boolean addAirplane (java.lang.String name) ru.ifmo.airtickets.idl.Airplane[] getAirplane (int id) ru.ifmo.airtickets.idl.Airplane[] getAllAirplanes () boolean deleteAirport (int id) boolean updateAirport (int id, java.lang.String shortName, java.lang.String fullName) boolean addAirport (java.lang.String shortName, java.lang.String fullName) ru.ifmo.airtickets.idl.Airport[] getAirport (int id) ru.ifmo.airtickets.idl.Airport[] getAllAirports () void addDatabaseListener (ru.ifmo.airtickets.idl.DatabaseListener listener) 3.1.2 Интерфейсы DatabaseListener и DatabaseListenerOperations Интерфейс DatabaseListener наследуется от DatabaseListenerOpeations, который будет описан далее. Интерфейс DatabaseListenerOperations содержит следующие операции: void updateByQuery (java.lang.String query) void updateTickets () void updateFlights () void updateAirplaneSeats () void updateAirplanes () void updateAirports () 4 Дизайн структур данных Инфологическая модель используемой базы данных приведена на рис. 3. AIRPORTS AIRPLANES PK ID U1 SHORT_NAME LONG_NAME PK ID NAME FLIGHTS AIRPLANES_SEATS PK ID FK2 DEPARTURE_AIRPORT_ID DEPARTURE_DATE ARRIVAL_AIRPORT_ID ARRIVAL_DATE AIRPLANE_ID COST FK3 FK1 PK ID FK1,U1 AIRPLANE_ID SEAT U1 TICKETS PK ID FK2,U1 FLIGHT_ID FK1,U1 SEAT_ID CLIENT_NAME CLIENT_PASSPORT Рис. 3. Инфологическая модель базы данных 4.1 Таблица «Airports» Атрибут Тип атрибута Размер Описание ID Long 8 Идентификатор SHORT_NAME Char 3 Трехбуквенный международный идентификатор аэропорта LONG_NAME Text 100 Название аэропорта (включая город и страну) 4.2 Таблица «Airplanes» Атрибут Тип атрибута Размер Описание ID Long 8 Идентификатор NAME Text 100 Название типа самолета 4.3 Таблица «Airplanes_seats» Атрибут Тип атрибута Размер Описание ID Long 8 Идентификатор записи AIRPLANE_ID Long 8 Идентификатор типа самолета SEAT Text 5 Буквенно-цифровое обозначение места 4.4 Таблица «Tickets» Атрибут Тип атрибута Размер Описание ID Long 8 Идентификатор FLIGHT_ID Long 8 Идентификатор рейса SEAT_ID Long 8 Идентификатор места в самолете CLIENT_NAME Text 100 Имя и фамилия пассажира CLIENT_PASSPORT Text 20 Номер паспорта пассажира 4.5 Таблица «Flights» Атрибут Тип атрибута ID Long Размер 8 Описание Идентификатор DEPARTURE_AIRPORT_ID Long 8 Идентификатор аэропорта отправления ARRIVAL_AIRPORT_ID Long 8 Идентификатор аэропорта назначения DEPARTURE_DATE DateTime 7 Дата и время отлета ARRIVAL_DATE DateTime 7 Дата и время прибытия AIRPLANE_ID Long 8 Идентификатор типа самолета COST Numeric 10,2 Стоимость билета (в долларах США) Все атрибуты во всех таблицах являются обязательными. 5 Сценарии работы В настоящем разделе описаны сценарии работы системы. На рис. 4 изображен сценарий получения списка рейсов. Client Application Server Database getAllFlights() SQL Query SQL Query Result FlightArray Рис. 4. Сценарий получения списка рейсов На рис. 5 изображен сценарий получения списка самолетов. Client Application Server Database getAllAirplanes() SQL Query SQL Query Result AirplaneArray Рис. 5. Сценарий получения списка самолетов На рис. 6 изображен сценарий получения списка самолетов. Client Application Server Database getAllAirplaneSeats() SQL Query SQL Query Result AirplaneSeatArray Рис. 6. Сценарий получения списка мест На рис. 7 изображен сценарий получения списка аэропортов. Client Application Server Database getList SQL Query SQL Query Result airportsList Рис. 7. Сценарий получения списка аэропортов На рис. 8 изображен сценарий получения списка проданных билетов. Client Application Server Database getAllTickets() SQL Query SQL Query Result TicketArray Рис. 8. Сценарий получения списка проданных билетов На рис. 9 изображен сценарий добавления нового аэропорта. Client Application Server Database new airport data make transaction result ALT [SQLException] bad new airport [else] confirm OK Рис. 9. Сценарий добавления нового аэропорта На рис. 10 изображен сценарий добавления нового самолета. Действия, выполняемые при этом аналогичны действиям, выполняемым при добавлении нового аэропорта. Client Application Server Database new airplane data make transaction result ALT [SQLException] bad new airplane [else] confirm OK Рис. 10. Сценарий добавления нового самолета На рис. 11 изображен сценарий добавления нового места в самолет. Client Application Server Database new seat data make transaction result ALT [SQLException] bad new seat [else] confirm OK Рис. 11. Сценарий добавления нового места в самолет На рис. 12 изображен сценарий добавления нового рейса. Client Application Server Database new filght data make transaction result ALT [SQLException] bad new flight [else] confirm OK Рис. 12. Сценарий добавления нового места в самолет На рис. 13 изображен сценарий покупки билета. Client Application Server Database flight date and route SQL query SQL query result f lights list preferable flight SQL query SQL query result seats list preferable seat make transaction result ALT [SQLException] seat not available [else] confirm OK Рис. 13. Сценарий покупки билета Сценарии изменения информации о самолете, аэропорте, рейсе, месте или о билете аналогичны сценариям, приведенным на рис. 9–13, поэтому приводиться не будут. На рис. 14 изображен сценарий удаления информации о существующем аэропорте. Client Application Server Database airport name make transaction result ALT [SQLException] cannot be deleted [else] confirm OK Рис. 14. Сценарий удаления существующего аэропорта На рис. 15 изображен сценарий удаления информации о существующем самолете. Этот сценарий аналогичен приведенному на рис. 14. Client Application Server Database airplane name make transaction result ALT [SQLException] cannot be deleted [else] confirm OK Рис. 15. Сценарий удаления существующего самолета На рис. 16 изображен сценарий удаления информации о существующем месте в самолете. Client Application Server Database seat code make transaction result ALT [SQLException] cannot be deleted [else] confirm OK Рис. 16. Сценарий удаления существующего места На рис. 17 изображен сценарий удаления информации о существующем рейсе. Client Application Server Database flight code make transaction result ALT [SQLException] cannot be deleted [else] confirm OK Рис. 17. Сценарий удаления существующего рейса 6 Дизайн графического интерфейса пользователя Клиентское приложение Monitor позволяет редактировать данные о рейсах, типах самолетов, местах и аэропортах. Внесенные изменения вносятся в базу данных через сервер приложений, а изменения, внесенные другими приложениями, будут отражены автоматически. Вкладка «Flights» отображает информацию о рейсах. По умолчанию отображаются все рейсы, хранящиеся в базе данных, однако имеется возможность фильтрации рейсов по аэропортам отправления и назначения, а также дате вылета. Там же оператор может забронировать билет на данный рейс, указав для этого номер места в самолете, имя и фамилию клиента и номер паспорта клиента. На рис. 18 изображен снимок экрана при открытой вкладке «Flights» Рис. 18. Вкладка «Flights» Вкладка «Airplanes» содержит информацию о типах самолетов и имеющихся в них местах. На рис. 19 изображен снимок экрана при открытой вкладке «Aircrafts» Рис. 19. Вкладка «Aircrafts» На рис. 20 изображен снимок экрана при открытой вкладке «Airports». Рис. 20. Вкладка «Airports» Также в клиентском приложении Monitor можно бронировать билеты. Клиентское приложение Editor имеет схожую структуру и интерфейс с приложением Monitor, однако в нем у пользователя (правильнее говорить, администратора) имеется возможность добавлять, редактировать и удалять записи обо всех сущностях, хранящихся в базе данных. Эти действия осуществляются через соответствующие пункты меню с естественным интерфейсом. На рис. 21 изображен снимок экрана с приложением Editor при открытой вкладке «Flights». Рис. 21. Вкладка «Flights» приложения Editor