Санкт-Петербургский Государственный Политехнический Университет
Факультет Управления и Информационных Технологий
Кафедра «Управление в социально-экономических системах
Курсовая работа
(курс «Информатика»)
Создание Базы данных
«Web-сайт - авиакомпании»
Выполнил:
Студент Группа 1242/0
Xxxxxxx X.X.
Проверил:
Санкт- Петербург
0000 год
Содержание.
Описание таблиц. 5
Описание форм. 8
Отчеты. 22
Меню. 30
Введение. Описание предметной области.
Передо мной стояла задача сделать базу данных авиакомпании, с помощью которой возможны просмотр, редактирование и выборка нужной информации. У авиакомпании имеется несколько типов самолетов, в которых имеется определенное количество мест. Каждый самолет летает по определенному маршруту. Каждому маршруту соответствует свои дата полета, время отправления и цена, причем она определяется в зависимости от выбранного типа класса, Также авиакомпания предоставляет скидки для некоторых групп лиц. Все это было необходимо учесть при создании базы данных авиакомпании. Значит основными задачами моей базы данных было:
Хранение информации о
самолетах
а. типы самолетов
b. количество имеющихся мест в каждом самолете
с. рейсы, выполняемые данным типом самолета
2) рейсах
а. какой самолет осуществляет полет по данному рейсу
b. пункт отправления
c. пункт назначения
d. время в пути
e. дни недели, в который осуществляется данный рейс.
3) типах билетов (классы)
4) предоставляемых скидка
5) стоимости билетов ( в зависимости от класса и скидки)
2. Поиск рейса по пункту отправления, прибытия и по дате желаемого вылета; также необходимо осуществлять поиск по номеру рейса
Вывод на печать выбранных рейсов, информацию о всех имеющихся рейсах, и прайс-лист.
Для удобства пользования базой сделано меню.
Описание таблиц.
Итак мною были выработаны следующие таблицы:
Самолеты
Маршруты
Дни
Скидки
Типы билетов
Стоимость
Теперь рассмотрим более подробно каждую из таблиц.
Самолеты
Таблица содержит данные о всех самолетах, имеющихся в распоряжении данной авиакомпании. Данная таблица выглядит так:
Маршруты.
Таблица содержит информацию о всех рейсах, предоставляемых данной авиакомпанией, а также типах самолетах, осуществляющих данные рейсы:
3.Дни
В этой таблице содержится информация о днях недели, в которые осуществляется тот или иной рейс, а также время отправления:
4.Скидки.
Здесь содержится информация о скидках, предоставляемых авиакомпанией:
5.Типы билетов
Информация о имеющихся классах:
6.Стоимость.
В этой таблице содержится информация о стоимости билетов, в зависимости от маршрута и класса:
Схема данных.
Между таблицами для обеспечения целостности данных установлены следующие связи:
Описание форм.
В ходе создания базы данных мною было разработано 10 форм. Причем среди них имеются формы просто для просмотра, хранения, изменения и дополнения имеющейся информации, а также формы для выборки нужной информации по каким – либо параметрам, задающимся самим пользователем.
Опишу сначала первый вид форм.
Для начала я создала ленточные формы по каждой таблице (Самолеты, Маршруты, Дни, ТипыБилетов, Скидки, Стоимость). Получилось 6 ленточных форм. Но легко было заметить, что просмотр информации в таких формах крайне неудобен и некоторые формы надо было объединить. Поэтому форму Маршруты я сделала подчиненной к форме Самолеты.
В таком виде более удобно просматривать, изменять и добавлять новую информацию о всех типах самолетов. Таким образом хорошо видно, какой самолет каким рейсом летает и в случае необходимости данную информация очень просто изменить. Причем в главной форме (Самолеты) пользователю не надо видеть код самолета. Поэтому в свойствах этого поля я поставила вывод на экран – нет.
В добавок к этому, каждому рейсу соответствует своя цена, в зависимости от класса, а также день недели, в который осуществляется данный рейс. Удобно было бы, если всю эту информацию возможно было бы просматривать в одном окне. Поэтому я сделала формы Стоимость, типы Билетов, Дни подчиненными к форме Маршруты.
Причем, в форме Дни пользователю не надо показывать код маршрута, т.к. он уже отображается в форме Маршруты =>его необходимо скрыть. В форме ТипыБилетов пользователю необязательно видеть код классов, поэтому его тоже необходимо скрыть. В форме Стоимость также необходимо скрыть поля КодТипаБилета и КодМаршрута.
Т.к. каждому маршруту и каждому типу билета соответствует только одна цена, то во избежание ошибок ввода я сделала форму Стоимость одиночной. А в форме ТипыБилетов поставила фильтр. Так что при нажатии нужного типа класса высвечивается соответствующая ему цена в соседней форме Стоимость.
В общем итоге у меня получилась форма, имеющая следующий вид:
Итак, мною была создана форма для удобного просмотра и изменения информации о рейсах, самолетах, совершающих эти рейсы и ценах на билет в зависимости от класса.
Форму Скидки я оставила почти без изменений. Только поле Код скидки сделала невидимым, т.к. пользователю его видеть не нужно.
Формы для выборки нужной информации.
Очень часто бывает, что пользователю неудобно просматривать всю имеющуюся в базе информацию, а необходимо вывести для просмотра какую-то определенную ее часть. Для этого удобно делать формы для выборки информации, так называемые формы с фильтрами. В моем случае критериями отбора должен был быть необходимый пользователю маршрут, т.е. пункт отправления и пункт назначения. Также надо было предусмотреть то, что некоторым пользователям необходимо знать осуществляется ли тот или иной рейс в определенную, необходимую ему, дату. Учитывая все это я создала форму с фильтром по трем полям: пункт отправления, пункт назначения и дата.
Для создания данной формы сначала было необходимо создать запрос, где будут содержаться все необходимые поля. Это запрос на основе двух таблиц: Маршруты и Дни. У меня он получился вот таким:
Я назвала его ЗапросНаДатуБезФильтра
Далее на основе этого запроса я создала ленточную форму, которую назвала Все. Форма имела вот такой вид:
Дальше пришлось немного переделать внешний вид этой формы в режиме конструктора, а именно: в заголовок формы я вставила еще 3 новых поля. Первое я назвала Отк ( здесь пользователь будет выбирать необходимый ему пункт отправления), второе – Куд (пункт назначения) и третье – Дата (необходимая дата).поля Отк и Куд я преобразовала в поля со списком и создала еще 2 запроса: Откуда и Куда ( на основе таблицы Маршруты)
И поставила 2 эти запроса источником строк полей Отк и Куд соответственно. Теперь пользователь может выбирать необходимый ему город из списка, а не вбивать его вручную.
В свойствах поля Дата на вкладке данные поставим маску ввода – выберем краткий формат даты. Теперь пользователю необходимо вводить только числа соответствующие числу, месяцу и году необходимым ему, без всяких разделительных знаков. Это сводит до минимума возможность неверного ввода и ошибок при выводе данных. Итак, моя форма приняла вид:
Далее необходимо было создать запрос для фильтрации данных. Для этого я просто скопировала уже созданный запрос запросНаДатуБезФильтра и изменила свойства некоторых полей. Т.к. пункт отправления должен браться тот, что выберет пользователь в поле Отк поэтому в условии отбора поля откуда я написала следующую формулу:
Like IIf(IsNull([Forms]![Все]![Отк]);"*";[Forms]![Все]![Отк])
В поле Куда:
Like IIf(IsNull([Forms]![Все]![Куд]);"*";[Forms]![Все]![Куд])
(Информация берется из поля Куд)
Т.к. в базе хранится информация по каким дням недели летает тот или иной рейс, а пользователь вводит необходимую ему дату => необходимо было преобразовать введенную дату в день недели и в зависимости от него вывести информацию на экран. Поэтому в условие отбора поля день я поставила следующую формулу:
Like IIf(IsNull([Forms]![Все]![Дата]);"*";WeekdayName(Weekday(CVDate([Forms]![Все]![Дата]));0;1))
И еще в этом запросе необходимо добавить еще одно поле День, для отображения дня недели.
Далее я поставила в искомой форме кнопку и назвала ее Выбор а в свойствах, на вкладке События - Нажатие кнопки поставила следующую процедуру обработки событий:
Me.RecordSource = "ЗапросНаДату"
Me.Requery
‘Первая строчка задает в качестве источника записей для формы запрос с фильтрами по городам и дате. Вторая обновляет данные в форме.
Потом стоило поставить еще одну кнопку в форме (БезФильтра) ,при нажатии которой отображаются все имеющиеся рейсы. В свойствах этой кнопки я поставила на нажатие процедуру возврата формы к искомому виду, т.е. без фильтра.
Me.RecordSource = "ЗапросНаДатуБезФильтра"
Me.Requery
Следовательно форма приняла следующий вид:
Сделав такую форму, я подумала, что было бы хорошо, если бы пользователь мог сразу же просмотреть также и цены на выбранный им рейс для каждого класса и с учетом скидки. Причем класс и скидка также выбирались бы из списка. При этом совсем не хотелось, чтобы вся эта информация была в той же форме Все, потому, что информация о ценах не всегда и не всем необходима. Поэтому я просто сделала связанную форму ПоЦенам, которая открывается нажатием кнопки с формы Все. ( Для этого в форму Все пришлось поставить еще одну кнопку – Цены.)
Форму По ценам я делала в режиме конструктора. В области данных я создала 5 новых полей: класс, скидка, цена, ставка и ИТОГО. Поля Класс и Скидка я преобразовала в поля со списком, здесь пользователь должен выбирать желаемый класс и скидку. При этом мне хотелось, чтобы при выборе класса в поле цена автоматически подставлялась цена билета, соответствующая данному классу. Поэтому для источника данных поля класс я создала запрос, который назвала ЗапросНаЦены. Выглядит он так:
Однако при выборе класса пользователю необходимо видеть только типы классов, поэтому в свойствах поля присоединенных столбцов пишем четыре, однако видимым ставим только один.( ненужным столбцам ширину устанавливаем равной нулю)
На вкладке события – после обновления ставим следующую процедуру обработки событий:
Me.Цена = Me.Класс.Column(0)
Me.Requery
Т.о. я сделала автоподстановку цены при выборе класса.
С полем скидка дело обстоит аналогично. Необходимо выбирать имеющиеся скидки из списка + необходима автоматическая подстановка процентной ставки выбранной скидки в поле ставка => я создала запрос, который назвала СкидкиЗапрос:
И аналогично с предыдущим установила видимым только одно нужное мне поле и поставила на вкладку события – после обновления аналогичную формулу.
И наконец поле ИТОГО. В этом поле должен идти подсчет цены на билет с учетом выбранных класса и скидки. Поэтому в свойствах этого поля на вкладке данные пишем следующую формулу:
=[Цена]-[Цена]*[Ставка]/100
Теперь для более удобного просмотра все данные необходимо вывести на один лист. Для этого я поставила в форме кнопку(КнопкаДляОтчета), которая открывает отчет, систематизирующий введенные данные в двух формах - Все и ПоЦенам.( ОтчетОполете – о нем можно прочитать в главе Отчеты).
Итак, в конечном итоге формы принимают вот такой вид:
Но также очень часто бывает, что необходимо найти информацию по номеру рейсу. Для этого я сделала еще одну форму с фильтром по то же схеме.
Во - Первых, я создала запрос (ЗапросНаВыборПоРейсуБезФильтра):
Затем на его основе – форму (ВыборПоРейсу):
В заголовке формы создала новое поле ( поле со списком) для выбора необходимого номера рейса. Для этого снова пришлось сделать запрос (ЗапросНаКодМаршрута):
Далее я создала запрос с фильтром ( ЗапросНаВыборПоРейсу) путем копирования первоначального запроса (ЗапросНаВыборПоРейсуБезФильтра) и изменения условия отбора одного из полей, а именно КодМаршрута:
[Forms]![ВыборПоРейсу]![МаршрутаКод].
Затем в форме ПоРейсу я создала две кнопки ( ПоРейсу и Все Рейсы) на одну я поставила фильтр, а на другую искомый запрос без фильтра.
Также еще я поставила кнопку (КнопкаОтчетаОрейсах) для вывода для печати отчета о выбранном рейсе.(ОтчетОрейсах – о нем можно прочитать в главе Отчеты)
И в конечном итоге форма ВыборПоРейсу приняла вид: