Аэропорт

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

САРАНСКИЙ КООПЕРАТИВНЫЙ ИНСТИТУТ

АВТОНОМНОЙ НЕКОММЕРЧЕСКОЙ ОРГАНИЗАЦИИ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

ЦЕНТРОСОЮЗА РОССИЙСКОЙ ФЕДЕРАЦИИ

«РОССИЙСКИЙ УНИВЕРСИТЕТ КООПЕРАЦИИ»

Кафедра информационно-вычислительных систем

КУРСОВАЯ РАБОТА

по дисциплине:

«Проектирование экономических информационных систем»

на тему: «Аэропорт»

Автор курсовой работы:

Сковородникова Л.В.

Специальность:

Прикладная информатика (в экономике) ПИ-501

САРАНСК 2013

Содержание

  • Введение
  • 1. Анализ предметной области
  • 1.1 Описание предметной области решаемой задачи
  • 1.2 Функции предметной области реализуемой задачи
  • 2. Постановка задачи
  • 4. Описание алгоритма решения задачи и его машинная реализация
  • 5. Разработка диалогового приложения пользователя
  • 5.1 Разработка и реализация пользовательского приложения
  • 5.2 Разработка инструкции пользователя по решению задачи
  • Заключение
  • Список использованной литературы

Введение

В последнее время резко возрос интерес к программированию. Это связано с развитием и внедрением в повседневную жизнь информационно-коммуникационных технологий. Если человек имеет дело с компьютером, то рано или поздно у него возникает желание, а иногда и необходимость, программировать. Среди пользователей персональных компьютеров в настоящее время наиболее популярно семейство операционных систем Windows и, естественно, что тот, кто собирается программировать, стремится писать программы, которые будут работать в этих системах. Несколько лет назад рядовому программисту оставалось только мечтать о создании собственных программ, работающих в среде Windows, т.к. единственным средством разработки был Borland C++ for Windows, явно ориентированный на профессионалов, обладающих серьезными знаниями и опытом.

Бурное развитие вычислительной техники, потребность в эффективных средствах разработки программного обеспечения привели к появлению систем программирования, ориентированных на так называемую «быструю разработку», среди которых можно выделить Borland Delphi и Microsoft Visual Basic. В основе систем быстрой разработки (RAD-систем, Rapid Application Development — среда быстрой разработки приложений) лежит технология визуального проектирования и событийного программирования, суть которой заключается в том, что среда разработки берет на себя большую часть рутинной работы, оставляя программисту работу по конструированию диалоговых окон и функций обработки событий. Производительность программиста при использовании RAD-систем — очень высокая.

Delphi — это среда быстрой разработки, в которой в качестве языка программирования используется язык Delphi. Язык Delphi — строго типизированный объектно-ориентированный язык, в основе которого лежит хорошо знакомый программистам Object Pascal.

1. Анализ предметной области

1.1 Описание предметной области решаемой задачи

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

Одной из самых значимых сфер оказания услуг является сфера предоставления транспортных услуг. Ежедневно в мире перевозятся миллионы тонн грузов и сотни тысяч пассажиров. Наиболее быстрыми, хотя и не дешёвыми, являются авиаперевозки. Клиентам предоставляется возможность за очень короткое время преодолеть сравнительно большие расстояния.

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

Мною разработана программа в среде Delphi, позволяющая оперативно вести учёт наличия свободных мест на различных авиарейсах направляющихся из города Саранска.

программа авиарейс алгоритм пользователь

1.2 Функции предметной области реализуемой задачи

В целях оперативного учёта свободных мест на авиарейсах, а также полного и достоверного отображения данных из базы разработанная мною программа выполняет ряд функций:

— отображение количества свободных мест по выбранному рейсу и на выбранную дату;

— автоматическое обновление базы данных с прошествием времени;

— вывод статистики по всем рейсам за 3 дня;

— применение сортировки записей по различным полям;

— применение фильтра записей по выбранному рейсу;

— выполнение операции продажи авиабилета;

— выполнение операции возврата авиабилета;

— занесение в базу нового авиарейса;

— удаление из базы авиарейса.

2. Постановка задачи

Как уже говорилось выше необходимо разработать программу для автоматизации учёта свободных мест на авиарейсы из аэропорта города Саранска.

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

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

Пользователь программы (кассир аэропорта) должен получить от клиента ряд сведений, необходимых для оформления заказа. А именно, дату вылета самолёта, номер рейса (хранящий в себе пункт назначения) и класс желаемого места. В нашем случае на каждый рейс предоставляется 40 мест во втором классе и 70 мест в более комфортабельном первом классе. Заказ может быть оформлен на сегодня, завтра и послезавтра. Аналогичным образом для сдачи билета в кассу необходимо внести сведения о дате вылета и номере рейса.

После проведения операции продажи или возврата билета информация о ней отражается в базе.

3. Разработка информационного обеспечения задачи

В своей основе программа имеет базу данных Microsoft Access «Аэропорт. db». Эта база хранит сведения о всех исходящих рейсах аэропорта города Саранска. А именно, дату, номер рейса, время вылета, количества свободных мест в салонах первого и второго классов. Так как компания предоставляет возможность приобрести авиабилет заранее: за два дня до вылета и непосредственно в день вылета База данных состоит из трёх таблиц (Рис. 1). Эти таблицы называются «Сегодня», «Завтра», «Послезавтра». Соответственно каждая таблица содержит сведения об авиарейсах на день вылета. Их структура полностью идентична. Они состоят из пяти колонок: Дата, Номер рейса, Время вылета, Первый класс, Второй класс. Различия могут быть лишь в значениях ячеек первого и двух последних столбцов.

Рисунок 1. Таблица Сегодня

Создание этих таблиц осуществлялось с помощью конструктора таблиц Microsoft Access. Он позволяет вводить имена столбцов определять тип данных для каждого столбца ячеек. Структура таблиц «Сегодня», «Завтра», «Послезавтра» представлена в таблице 1.

Таблица 1.

Структура таблиц «Сегодня», «Завтра», «Послезавтра» базы данных «Аэропорт»

Имя поля

Тип данных поля

Дата

Дата/Время

Номер_рейса

Текстовый

Время_вылета

Дата/Время

Первый_класс

Числовой

Второй_класс

Числовой

Так же возможно определение формата вводимых в ячейке данных.

Каждая строка в любой из трёх таблиц соответствует одному рейсу.

Особенностью данной базы является её динамичность, т. е. в каждую таблицу можно добавлять и удалять записи. Кроме того, средствами Delphi ежедневно происходит её автоматическое обновление. Данные сдвигаются на день вперёд: Завтра на Сегодня, Послезавтра на Завтра, обновление Послезавтра. Количество записей в таблицах неограниченно.

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

4. Описание алгоритма решения задачи и его машинная реализация

Общий алгоритм решения поставленной задачи включает в себя ряд пунктов:

1. Описание и создание структуры базы данных;

2. Разработка пользовательского приложения:

а) создание подключения к базе данных средствами Delphi;

б) создание экранных форм и помещение на них элементов для отображения и управления данными базы.

Структура базы данных «Аэропорт» была описана выше. При разработке пользовательского приложения я использовал объектно-ориентированный язык программирования Delphi версии 7. Среда программирования Borland Delphi 7 обладает широким набором объектов, позволяющих выполнять различные операции. Все эти объекты разбиты по функциональным группам, которые отображаются в виде вкладок. Например, Standart, Additional, Win 32, System и другие. Вкладка Ado содержит объекты, позволяющие работать с базами данных. Согласно алгоритму реализации поставленной задачи вначале необходимо выполнить подключение к базе данных. Для этого мы создаём модуль и помещаем в него объект AdoConnection, служащий для подключения к какой либо базе данных. Далее задаём свойства этого объекта. Свойство ConnectionString базу к которой осуществляется подключение.

Рисунок 2. Окно свойства ConnectionString

После нажатия кнопки Build осуществляется вызов окна свойств связи с данными.

Рисунок 3. Окно свойств связи с данными.

В этом окне необходимо выбрать поставщика OLE DB, непосредственно саму базу и права доступа к этой базе. После выбора базы необходимо проверить подключение нажатием кнопки «Проверить подключение» на вкладке «Подключение». В свойстве LoginPrompt отключаем запрос пароля на доступ к базе, задав значение false. Свойству Connected задаём значение True.

Для чтения данных из базы в модуль проекта помещаем три объекта с вкладки Ado AdoTable (для каждой таблицы из базы данных по объекту). Задаём свойства объекта. Connection определяет используемое подключение, TableName — имя таблицы из базы, Active — определяет активность объекта (true/false)

Со вкладки DataAccess в модуль помещаем три объекта DataSource. Для каждого из них в свойстве DataSet выбираем соответственно объекты AdoTable 1,2 и 3. Данные объекты будут служить для переноса данных из AdoTable в таблицы форм.

На этом подключение к базе данных завершено. Далее создаём ряд экранных форм. Для этого в Delphi существует команда New Form. Как и любой другой объект обладает набором свойств: Name (программное имя), Caption (строка заголовка), Height (высота), Width (ширина), Border Style (тип границы) и другие. Со вкладок помещаем на формы различные объекты для отображения и редактирования информации в уже подключенной базе данных.

5. Разработка диалогового приложения пользователя

5.1 Разработка и реализация пользовательского приложения

Программа «Аэропорт» содержит семь пользовательских форм. Главной формой является форма «Продажа авиабилетов». Она первой отображается при инициализации проекта.

Рисунок 5. Форма Продажа авиабилетов

Основное её назначение это выполнение запросов по заданным рейсам, выполнение операций покупки продажи билетов и их возврата, а также переход на другие формы проекта. Она содержит следующие объекты: 7 меток, 1 текстовое поле, одно комбинированное текстовое поле, 3 текстовых поля баз данных, 3 командных кнопки и одно горизонтальное меню. Горизонтальное меню (объект MainMenu) содержит пункты и подпункты: Файл (Выход); Операции (Запрос, Продажа, Возврат); Статистика; Редактор (Добавить рейс, Удалить рейс); О программе.

Перед отображением формы срабатывает процедура, записывающая текущую дату на форму и в текстовое поле.

procedure TForm1. FormCreate (Sender: TObject);

var d: tdatetime;

begin // Ввод начальных данных формы

d: =date;

edDate. Text: =datetostr (d);

label2. Caption: =datetostr (d);

end;

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

procedure TForm1. cmbNumberDropDown (Sender: TObject);

// Процедура для заполнения комб-го поля для номеров рейсов

begin

form1. cmbNumber. Clear;

datamodule2. ADOTable1. First;

while datamodule2. ADOTable1. Eof< >true do

begin

form1. cmbNumber. Items. Add (datamodule2. ADOTable1_. AsString);

datamodule2. ADOTable1. Next;

end;

end;

Использование комбинированного текстового поля со списком избавляет от необходимости помнить все номера рейсов. Кнопка Запрос служит для обращения к базе данных на основе введённой даты и номера рейса. Процедура данной кнопки обращается к каждой таблице и если дата из поля Дата совпадает с табличной, то осуществляется поиск нужного рейса в этой таблице и вывод его времени вылета, а также количества свободных мест в первом и втором салоне самолёта.

procedure TForm1. btnzaprosClick (Sender: TObject);

// Процедура определения количества билетов по выбранному рейсу

var vremia: string;

sysTime: tdatetime;

begin

if edDate. Text=datamodule2. ADOTable1DSDesigner. Text then

begin

{showmessage ('Нашел дату'); }

datamodule2. ADOTable1. First;

while datamodule2. ADOTable1. Eof< >true do

begin

if cmbNumber. Text=datamodule2. ADOTable1_. Text then

begin

{showmessage ('Нашел рейс'); }

vremia: =datamodule2. ADOTable12. Text;

delete (vremia, 1,11);

sysTime: =time;

{showmessage (timetostr (sysTime)); }

if sysTime< strtotime (vremia) then

begin

dbeTime. Text: =vremia;

dbeClass1. Text: =datamodule2. ADOTable13. Text;

dbeClass2. Text: =datamodule2. ADOTable14. Text;

exit;

end

else

showmessage ('Данный рейс уже улетел в '+vremia);

dbeTime. Text: ='';

dbeClass1. Text: ='';

dbeClass2. Text: ='';

exit;

end

else

datamodule2. ADOTable1. Next;

end;

end

else if edDate. Text=datamodule2. ADOTable2DSDesigner. Text then

begin

datamodule2. ADOTable2. First;

while datamodule2. ADOTable2. Eof< >true do

begin

if cmbNumber. Text=datamodule2. ADOTable2_. Text then

begin

vremia: =datamodule2. ADOTable22. Text;

delete (vremia, 1,11);

dbeTime. Text: =vremia;

dbeClass1. Text: =datamodule2. ADOTable23. Text;

dbeClass2. Text: =datamodule2. ADOTable24. Text;

exit;

end

else

datamodule2. ADOTable2. Next;

end;

end

else if edDate. Text=datamodule2. ADOTable3DSDesigner. Text then

begin

datamodule2. ADOTable3. First;

while datamodule2. ADOTable3. Eof< >true do

begin

if cmbNumber. Text=datamodule2. ADOTable3_. Text then

begin

vremia: =datamodule2. ADOTable32. Text;

delete (vremia, 1,11);

dbeTime. Text: =vremia;

dbeClass1. Text: =datamodule2. ADOTable33. Text;

dbeClass2. Text: =datamodule2. ADOTable34. Text;

exit;

end

else

datamodule2. ADOTable3. Next;

end;

end

else

begin

showmessage ('Билетов на данный рейс нет');

dbeTime. Text: ='';

dbeClass1. Text: ='';

dbeClass2. Text: ='';

end;

end;

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

procedure TForm1. bttProdagaClick (Sender: TObject);

// Процедура для продажи авиабилета

var vremia: string;

sysTime: tdatetime;

cl1,cl2: string;

begin // Определение количества билетов на основе даты и номера рейса

form7. btnProd. Enabled: =true;

form7. btnVozvr. Enabled: =false;

if edDate. Text=datamodule2. ADOTable1DSDesigner. Text then

begin

{showmessage ('Нашел дату'); }

datamodule2. ADOTable1. First;

while datamodule2. ADOTable1. Eof< >true do

begin

if cmbNumber. Text=datamodule2. ADOTable1_. Text then

begin

{showmessage ('Нашел рейс'); }

vremia: =datamodule2. ADOTable12. Text;

delete (vremia, 1,11);

sysTime: =time;

{showmessage (timetostr (sysTime)); }

if sysTime< strtotime (vremia) then

begin

dbeTime. Text: =vremia;

dbeClass1. Text: =datamodule2. ADOTable13. Text;

dbeClass2. Text: =datamodule2. ADOTable14. Text;

cl1: =dbeClass1. Text;

if strtoint (cl1) >0 then;

begin

form7. visible: =true;

end;

exit;

end

else

showmessage ('Данный рейс уже улетел в '+vremia);

dbeTime. Text: ='';

dbeClass1. Text: ='';

dbeClass2. Text: ='';

exit;

end

else

datamodule2. ADOTable1. Next;

end;

end

else if edDate. Text=datamodule2. ADOTable2DSDesigner. Text then

begin

datamodule2. ADOTable2. First;

while datamodule2. ADOTable2. Eof< >true do

begin

if cmbNumber. Text=datamodule2. ADOTable2_. Text then

begin

vremia: =datamodule2. ADOTable22. Text;

delete (vremia, 1,11);

dbeTime. Text: =vremia;

dbeClass1. Text: =datamodule2. ADOTable23. Text;

dbeClass2. Text: =datamodule2. ADOTable24. Text;

cl1: =dbeClass1. Text;

if strtoint (cl1) >0 then;

begin

form7. visible: =true;

end;

exit;

end

else

datamodule2. ADOTable2. Next;

end;

end

else if edDate. Text=datamodule2. ADOTable3DSDesigner. Text then

begin

datamodule2. ADOTable3. First;

while datamodule2. ADOTable3. Eof< >true do

begin

if cmbNumber. Text=datamodule2. ADOTable3_. Text then

begin

vremia: =datamodule2. ADOTable32. Text;

delete (vremia, 1,11);

dbeTime. Text: =vremia;

dbeClass1. Text: =datamodule2. ADOTable33. Text;

dbeClass2. Text: =datamodule2. ADOTable34. Text;

cl1: =dbeClass1. Text;

if strtoint (cl1) >0 then;

begin

form7. visible: =true;

end;

exit;

end

else

datamodule2. ADOTable3. Next;

end;

end

else

begin

showmessage ('Билетов на данный рейс нет');

end;

end;

Кнопка Возврат осуществляет обратную операцию Продажи. Её процедура действует аналогично вышеописанной, только ставится условие, что количество имеющихся билетов не превышало 70 в первом классе и 40 — во втором.

procedure TForm1. btnVozvratClick (Sender: TObject);

// Процедура для возврата авиабилета

var vremia: string;

sysTime: tdatetime;

cl1,cl2: string;

begin

form7. btnProd. Enabled: =false;

form7. btnVozvr. Enabled: =true;

if edDate. Text=datamodule2. ADOTable1DSDesigner. Text then

begin

{showmessage ('Нашел дату'); }

datamodule2. ADOTable1. First;

while datamodule2. ADOTable1. Eof< >true do

begin

if cmbNumber. Text=datamodule2. ADOTable1_. Text then

begin

{showmessage ('Нашел рейс'); }

vremia: =datamodule2. ADOTable12. Text;

delete (vremia, 1,11);

sysTime: =time;

{showmessage (timetostr (sysTime)); }

if sysTime< strtotime (vremia) then

begin

dbeTime. Text: =vremia;

dbeClass1. Text: =datamodule2. ADOTable13. Text;

dbeClass2. Text: =datamodule2. ADOTable14. Text;

cl1: =dbeClass1. Text;

if strtoint (cl1) >0 then;

begin

form7. visible: =true;

end;

exit;

end

else

showmessage ('Данный рейс уже улетел в '+vremia);

dbeTime. Text: ='';

dbeClass1. Text: ='';

dbeClass2. Text: ='';

exit;

end

else

datamodule2. ADOTable1. Next;

end;

end

else if edDate. Text=datamodule2. ADOTable2DSDesigner. Text then

begin

datamodule2. ADOTable2. First;

while datamodule2. ADOTable2. Eof< >true do

begin

if cmbNumber. Text=datamodule2. ADOTable2_. Text then

begin

vremia: =datamodule2. ADOTable22. Text;

delete (vremia, 1,11);

dbeTime. Text: =vremia;

dbeClass1. Text: =datamodule2. ADOTable23. Text;

dbeClass2. Text: =datamodule2. ADOTable24. Text;

cl1: =dbeClass1. Text;

if strtoint (cl1) >0 then;

begin

form7. visible: =true;

end;

exit;

end

else

datamodule2. ADOTable2. Next;

end;

end

else if edDate. Text=datamodule2. ADOTable3DSDesigner. Text then

begin

datamodule2. ADOTable3. First;

while datamodule2. ADOTable3. Eof< >true do

begin

if cmbNumber. Text=datamodule2. ADOTable3_. Text then

begin

vremia: =datamodule2. ADOTable32. Text;

delete (vremia, 1,11);

dbeTime. Text: =vremia;

dbeClass1. Text: =datamodule2. ADOTable33. Text;

dbeClass2. Text: =datamodule2. ADOTable34. Text;

cl1: =dbeClass1. Text;

if strtoint (cl1) >0 then;

begin

form7. visible: =true;

end;

exit;

end

else

datamodule2. ADOTable3. Next;

end;

end

else

begin

showmessage ('Билетов на данный рейс нет');

end;

end;

Форма Выбор класса содержит 2 переключателя определяющих тип класса салона самолёта и 3 кнопки, меняющих свою активность в зависимости от выполняемой операции.

Рисунок 6. Форма Выбор класса.

Процедуры кнопок Продать и Возврат служат для дублирования нажатия кнопок на служебной форме Обновление базы. Она будет описана позже.

Пункт меню Операции на форме Продажа Авиабилетов дублируют нажатие кнопок Запрос, Продажа, Возврат.

procedure TForm1. N5Click (Sender: TObject);

// Процедура дублирования нажатия кнопки Запрос

begin

form1. btnzapros. Click;

end;

procedure TForm1. N6Click (Sender: TObject);

// Процедура дублирования нажатия кнопки Продажа

begin

form1. bttProdaga. Click;

end;

procedure TForm1. N7Click (Sender: TObject);

// Процедура дублирования нажатия кнопки Возврат

begin

form1. btnVozvrat. Click;

end;

Пункт меню Статистика служит для отображения формы Статистика за день. Она служит для отображения всех записей из любой таблицы базы данных. Для этих целей на форму помещён объект DBGrid со вкладки DataControl. В качестве свойства DataSourse определён DataSourse1, подключённый к AdoTable1. Поэтому при открытии формы сразу отображаются данные из таблицы Сегодня. С помощью меток отображается текущая дата.

Рисунок 7. Форма Статистика за день

Аналогично главной форме здесь содержится горизонтальное меню с командами: Файл (Выход); Просмотр (Сегодня, Завтра, Послезавтра); Сортировка (По дате, По номеру рейса); Фильтрация (По номеру рейса).

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

procedure TForm3. N10Click (Sender: TObject);

// Процедура отображения таблицы Сегодня

begin

datamodule2. ADOTable1. Filtered: =false;

datamodule2. DataSource1. DataSet: =datamodule2. ADOTable1;

dbgrid1. DataSource: =datamodule2. DataSource1;

end;

procedure TForm3. N12Click (Sender: TObject);

// Процедура отображения таблицы Завтра

begin

datamodule2. ADOTable2. Filtered: =false;

datamodule2. DataSource2. DataSet: =datamodule2. ADOTable2;

dbgrid1. DataSource: =datamodule2. DataSource2;

end;

procedure TForm3. N13Click (Sender: TObject);

// Процедура отображения таблицы Послезавтра

begin

datamodule2. ADOTable3. Filtered: =false;

datamodule2. DataSource3. DataSet: =datamodule2. ADOTable3;

dbgrid1. DataSource: =datamodule2. DataSource3;

end;

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

procedure TForm3. N5Click (Sender: TObject);

// Процедура сортировки по времени вылета

begin

DataModule2. ADOTable1. IndexFieldNames: ='Номер_рейса';

DataModule2. ADOTable2. IndexFieldNames: ='Номер_рейса';

DataModule2. ADOTable3. IndexFieldNames: ='Номер_рейса';

end;

end.

procedure TForm3. N6Click (Sender: TObject);

// Процедура сортировки по времени вылета

begin

datamodule2. ADOTable1. IndexFieldNames: ='Время_вылета';

datamodule2. ADOTable2. IndexFieldNames: ='Время_вылета';

datamodule2. ADOTable3. IndexFieldNames: ='Время_вылета';

end;

Пункт меню Фильтрация служит для вызова формы Параметры фильтра

procedure TForm3. N8Click (Sender: TObject);

// Процедура отображения формы фильтра

begin

form4. visible: =true;

end;

Рисунок 8. Форма Параметры Фильтра

Эта форма содержит 2 объекта: комбинированное текстовое поле и командная кнопка. Аналогично главной форме поле заполняется номерами рейсов. Процедура кнопки Применить фильтр возможность фильтрации для каждого объекта ADOTable и маску фильтра. В нашем случае это номер рейса.

procedure TForm4. btnFiltrClick (Sender: TObject);

// Процедура кнопки фильтра

begin

datamodule2. ADOTable1. Filtered: =true;

datamodule2. ADOTable1. Filter: ='Номер_рейса='''+cmbNumberF. Text+'''';

datamodule2. ADOTable2. Filtered: =true;

datamodule2. ADOTable2. Filter: ='Номер_рейса='''+cmbNumberF. Text+'''';

datamodule2. ADOTable3. Filtered: =true;

datamodule2. ADOTable3. Filter: ='Номер_рейса='''+cmbNumberF. Text+'''';

end;

На главной форме есть пункт меню редактор. Его процедуры выводят на экран форму Редактор рейсов для ввода нового рейса или удаления существующего рейса. При этом определяется видимость объектов формы, необходимых для добавления или удаления рейса.

procedure TForm1. N13Click (Sender: TObject);

// Процедура отображения формы редактора рейсов

begin

form8. visible: =true;

form8. edVrem. Visible: =true;

form8. Label2. Visible: =true;

form8. Label3. Visible: =true;

form8. btnDobavit. Enabled: =true;

form8. btnUdalit. Enabled: =false;

end;

procedure TForm1. N14Click (Sender: TObject);

// Процедура отображения формы редактора рейсов

begin

form8. Visible: =true;

form8. edVrem. Visible: =false;

form8. Label2. Visible: =false;

form8. Label3. Visible: =false;

form8. btnDobavit. Enabled: =false;

form8. btnUdalit. Enabled: =true;

end;

Рисунок 9. Форма редактор рейсов

Данная форма содержит текстовые поля для номера рейса и времени вылета. При этом (для избежания ошибок работы программы) с помощью метки определяется формат вводимого времени. Кнопки Добавить и Удалить служат для дублирования нажатия соответствующих кнопок на служебной форме Обновление базы. Кнопка отмена закрывает текущую форму.

procedure TForm8. btnCancelClick (Sender: TObject);

// Процедура отмены

begin

form8. Close;

end;

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

Рисунок 10. Форма о программе

На этом закончим описание форм, доступных пользователю для просмотра. Проект содержит одну служебную форму Обновление базы (о ней упоминалось выше). Эта форма не отображается во время работы, но она содержит все объекты используемые для внесения изменений в базу данных «Аэропорт».

Рисунок 11. Форма Обновление базы.

Как видно из рисунка форма содержит метки, определяющие названия таблиц базы и полей каждой таблицы. На форме расположены три столбца из полей DBEdit. Каждый столбец отображает по одной записи из таблицы. Пять командных кнопок выполняют операции, упомянутые на видимых формах проекта. Три объекта DBNavigator осуществляют управление записями в таблицах Сегодня, Завтра, Послезавтра соответственно.

Итак, в самом начале работы проекта срабатывает процедура кнопки Refresh. Именно она производит обновление данных в базе, связанное со сменой текущей даты. Данные планомерно переходят с Послезавтра на Завтра, с Завтра на Сегодня. И так происходит при каждой смене текущей даты. Процедура этой кнопки предусматривает 4 варианта:

1) когда текущая дата равна дате Сегодня, то фактически обновления не происходит;

2) когда текущая дата равна дате Завтра, то данные из таблицы Завтра переходят в таблицу Сегодня, из таблицы Послезавтра — в Завтра, а в таблице Послезавтра заносятся полные наборы билетов;

3) когда текущая дата равна дате Послезавтра, то данные из таблицы Послезавтра переходят в таблицу Сегодня, а в таблицах Завтра и Послезавтра заносятся полные наборы билетов;

4) когда текущая дата не равна ни одной дате в таблицах, то просто заносятся полные наборы билетов во все 3 таблицы.

Важно заметить, что перед отображением главной формы выдаётся служебное сообщение, о том что база обновлена или нуждается в обновлении.

procedure TForm6. Button1Click (Sender: TObject);

// Процедура для обновления данных в базе

var str: string;

x, y, z, n: integer;

dt: tdatetime;

begin

dt: =date;

n: =0;

datamodule2. ADOTable1. First;

while datamodule2. ADOTable1. Eof< > true do

begin

n: =n+1;

datamodule2. ADOTable1. Next;

end;

{showmessage (inttostr (n)); }

datamodule2. ADOTable1. First;

if datetostr (dt) =datamodule2. ADOTable1DSDesigner. Text then

begin

showmessage ('база обновлена');

end

else if datetostr (dt) =datamodule2. ADOTable2DSDesigner. Text then

begin

showmessage ('база нуждается в обновлении сегодня это вчера');

Dt: = Date+2;

nav. BtnClick (nbFirst);

nav1. BtnClick (nbFirst);

nav2. BtnClick (nbFirst);

for x: = 1 to n do

begin

nav. BtnClick (nbDelete);

nav. BtnClick (nbInsert);

str: = DBEdit2. Text;

DBEdit1. Text: = str;

str: = DBEdit5. Text;

DBEdit4. Text: = str;

str: = DBEdit8. Text;

delete (str, 1,11);

{showmessage (str); }

DBEdit7. Text: = str;

str: = DBEdit11. Text;

DBEdit10. Text: = str;

str: = DBEdit14. Text;

DBEdit13. Text: = str;

nav. BtnClick (nbPost);

nav. BtnClick (nbFirst);

nav1. BtnClick (nbNext);

end;

nav1. BtnClick (nbfirst);

nav2. BtnClick (nbfirst);

for y: = 1 to n do

begin

nav1. BtnClick (nbDelete);

nav1. BtnClick (nbInsert);

str: = DBEdit3. Text;

DBEdit2. Text: = str;

str: = DBEdit6. Text;

DBEdit5. Text: = str;

str: = DBEdit9. Text;

delete (str, 1,11);

DBEdit8. Text: = str;

str: = DBEdit12. Text;

DBEdit11. Text: = str;

str: = DBEdit15. Text;

DBEdit14. Text: = str;

nav1. BtnClick (nbPost);

nav1. BtnClick (nbFirst);

nav2. BtnClick (nbNext);

end;

nav1. BtnClick (nbfirst);

nav2. BtnClick (nbfirst);

for z: = 1 to n do

begin

nav2. BtnClick (nbDelete);

nav2. BtnClick (nbInsert);

str: = DateToStr (Dt);

DBEdit3. Text: = str;

str: = DBEdit5. Text;

DBEdit6. Text: = str;

str: = DBEdit8. Text;

delete (str, 1,11);

DBEdit9. Text: = str;

str: ='70';

DBEdit12. Text: = str;

str: ='40';

DBEdit15. Text: = str;

nav2. BtnClick (nbPost);

nav2. BtnClick (nbFirst);

nav1. BtnClick (nbNext);

end;

end

else if datetostr (dt) =datamodule2. ADOTable3DSDesigner. Text then

begin

showmessage ('база нуждается в обновлении сегодня это позавчера');

nav. BtnClick (nbFirst);

nav1. BtnClick (nbFirst);

nav2. BtnClick (nbFirst);

for x: = 1 to n do

begin

nav. BtnClick (nbDelete);

nav. BtnClick (nbInsert);

str: = DBEdit3. Text;

DBEdit1. Text: = str;

str: = DBEdit6. Text;

DBEdit4. Text: = str;

str: = DBEdit9. Text;

delete (str, 1,11);

DBEdit7. Text: = str;

str: = DBEdit12. Text;

DBEdit10. Text: = str;

str: = DBEdit15. Text;

DBEdit13. Text: = str;

nav. BtnClick (nbPost);

nav. BtnClick (nbFirst);

nav2. BtnClick (nbNext);

end;

nav. BtnClick (nbfirst);

nav1. BtnClick (nbfirst);

Dt: =dt+1;

for y: = 1 to n do

begin

nav1. BtnClick (nbDelete);

nav1. BtnClick (nbInsert);

str: = DateToStr (Dt);

DBEdit2. Text: = str;

str: = DBEdit4. Text;

DBEdit5. Text: = str;

str: = DBEdit7. Text;

delete (str, 1,11);

DBEdit8. Text: = str;

str: ='70';

DBEdit11. Text: = str;

str: ='40';

DBEdit14. Text: = str;

nav1. BtnClick (nbPost);

nav1. BtnClick (nbFirst);

nav. BtnClick (nbNext);

end;

nav1. BtnClick (nbfirst);

nav2. BtnClick (nbfirst);

Dt: =dt+1;

for z: = 1 to n do

begin

nav2. BtnClick (nbDelete);

nav2. BtnClick (nbInsert);

str: = DateToStr (Dt);

DBEdit3. Text: = str;

str: = DBEdit5. Text;

DBEdit6. Text: = str;

str: = DBEdit8. Text;

delete (str, 1,11);

DBEdit9. Text: = str;

str: ='70';

DBEdit12. Text: = str;

str: ='40';

DBEdit15. Text: = str;

nav2. BtnClick (nbPost);

nav2. BtnClick (nbFirst);

nav1. BtnClick (nbNext);

end;

end

else

begin

showmessage ('база нуждается в обновлении');

nav. BtnClick (nbFirst);

nav1. BtnClick (nbFirst);

nav2. BtnClick (nbFirst);

for x: = 1 to n do

begin

nav. BtnClick (nbDelete);

nav. BtnClick (nbInsert);

str: = datetostr (dt);

DBEdit1. Text: = str;

str: = DBEdit5. Text;

DBEdit4. Text: = str;

str: = DBEdit8. Text;

delete (str, 1,11);

DBEdit7. Text: = str;

str: ='70';

DBEdit10. Text: = str;

str: ='40';

DBEdit13. Text: = str;

nav. BtnClick (nbPost);

nav. BtnClick (nbFirst);

nav1. BtnClick (nbNext);

end;

nav. BtnClick (nbfirst);

nav1. BtnClick (nbfirst);

Dt: =dt+1;

for y: = 1 to n do

begin

nav1. BtnClick (nbDelete);

nav1. BtnClick (nbInsert);

str: = DateToStr (Dt);

DBEdit2. Text: = str;

str: = DBEdit4. Text;

DBEdit5. Text: = str;

str: = DBEdit7. Text;

delete (str, 1,11);

DBEdit8. Text: = str;

str: ='70';

DBEdit11. Text: = str;

str: ='40';

DBEdit14. Text: = str;

nav1. BtnClick (nbPost);

nav1. BtnClick (nbFirst);

nav. BtnClick (nbNext);

end;

nav1. BtnClick (nbfirst);

nav2. BtnClick (nbfirst);

Dt: =dt+1;

for z: = 1 to n do

begin

nav2. BtnClick (nbDelete);

nav2. BtnClick (nbInsert);

str: = DateToStr (Dt);

DBEdit3. Text: = str;

str: = DBEdit5. Text;

DBEdit6. Text: = str;

str: = DBEdit8. Text;

delete (str, 1,11);

DBEdit9. Text: = str;

str: ='70';

DBEdit12. Text: = str;

str: ='40';

DBEdit15. Text: = str;

nav2. BtnClick (nbPost);

nav2. BtnClick (nbFirst);

nav1. BtnClick (nbNext);

end;

end;

end;

Кнопка — 1 Билет на форме осуществляет запись данных в базу после того как произошла операция продажи билета. Она ищет по дате и номеру рейса в базе данных соответствующую запись, затем проверяет остатки билетов. И если их достаточно, то она вычитает 1 билет из остатка. А затем сохраняет изменения. Иначе выводит сообщение о том что билеты закончились.

procedure TForm6. Button2Click (Sender: TObject);

// Процедура записи данных после продажи билета

var str, d1, c1,c2,r: string;

x, y, z, n, c11, c22: integer;

dt: tdatetime;

begin

dt: =date;

n: =0;

datamodule2. ADOTable1. First;

while datamodule2. ADOTable1. Eof< > true do

begin

n: =n+1;

datamodule2. ADOTable1. Next;

end;

datamodule2. ADOTable1. First;

if form1. edDate. Text=datamodule2. ADOTable1DSDesigner. Text then

begin

{showmessage ('Нашел дату 1'); }

nav. BtnClick (nbFirst);

nav1. BtnClick (nbFirst);

for x: =1 to n do

begin

d1: =dbedit1. Text;

r: =dbedit4. Text;

c1: =dbedit10. Text;

c2: =dbedit13. Text;

nav. BtnClick (nbDelete);

nav. BtnClick (nbInsert);

dbedit1. Text: =d1;

dbedit4. Text: =r;

str: =dbedit8. Text;

dbedit7. Text: =str;

if r=form1. cmbNumber. Text then

begin

if form7. rbNum1. Checked then

begin

c11: =strtoint (c1);

c11: =c11−1;

if c11>0 then

begin

dbedit10. Text: =inttostr (c11);

showmessage ('Продано');

dbedit13. Text: =c2;

form1. dbeClass1. Text: =dbedit10. Text;

form1. dbeClass2. Text: =dbedit13. Text;

end

else

begin

showmessage ('Билеты первого класса закончились');

dbedit10. Text: =c1;

dbedit13. Text: =c2;

form1. dbeClass1. Text: =dbedit10. Text;

form1. dbeClass2. Text: =dbedit13. Text;

form7. Close;

end;

end

else if form7. rbNum2. Checked then

begin

c22: =strtoint (c2);

c22: =c22−1;

if c22>0 then

begin

dbedit10. Text: =c1;

dbedit13. Text: =inttostr (c22);

showmessage ('Продано');

form1. dbeClass1. Text: =dbedit10. Text;

form1. dbeClass2. Text: =dbedit13. Text;

end

else

begin

showmessage ('Билеты вторго класса закончились');

dbedit10. Text: =c1;

dbedit13. Text: =c2;

form1. dbeClass1. Text: =dbedit10. Text;

form1. dbeClass2. Text: =dbedit13. Text;

form7. Close;

end;

end;

end

else

begin

dbedit10. Text: =c1;

dbedit13. Text: =c2;

end;

nav. BtnClick (nbPost);

nav. BtnClick (nbFirst);

nav1. BtnClick (nbNext);

end;

form7. Close;

end;

if form1. edDate. Text=datamodule2. ADOTable2DSDesigner. Text then

begin

{showmessage ('Нашел дату 2'); }

nav1. BtnClick (nbFirst);

nav2. BtnClick (nbFirst);

for y: =1 to n do

begin

d1: =dbedit2. Text;

r: =dbedit5. Text;

c1: =dbedit11. Text;

c2: =dbedit14. Text;

nav1. BtnClick (nbDelete);

nav1. BtnClick (nbInsert);

dbedit2. Text: =d1;

dbedit5. Text: =r;

str: =dbedit9. Text;

dbedit8. Text: =str;

if r=form1. cmbNumber. Text then

begin

if form7. rbNum1. Checked then

begin

c11: =strtoint (c1);

c11: =c11−1;

if c11>0 then

begin

dbedit11. Text: =inttostr (c11);

showmessage ('Продано');

dbedit14. Text: =c2;

form1. dbeClass1. Text: =dbedit11. Text;

form1. dbeClass2. Text: =dbedit14. Text;

end

else

begin

showmessage ('Билеты первого класса закончились');

dbedit11. Text: =c1;

dbedit14. Text: =c2;

form1. dbeClass1. Text: =dbedit11. Text;

form1. dbeClass2. Text: =dbedit14. Text;

form7. Close;

end;

end

else if form7. rbNum2. Checked then

begin

c22: =strtoint (c2);

c22: =c22−1;

if c22>0 then

begin

dbedit11. Text: =c1;

dbedit14. Text: =inttostr (c22);

showmessage ('Продано');

form1. dbeClass1. Text: =dbedit11. Text;

form1. dbeClass2. Text: =dbedit14. Text;

end

else

begin

showmessage ('Билеты второго класса закончились');

dbedit11. Text: =c1;

dbedit14. Text: =c2;

form1. dbeClass1. Text: =dbedit11. Text;

form1. dbeClass2. Text: =dbedit14. Text;

form7. Close;

end;

end;

end

else

begin

dbedit11. Text: =c1;

dbedit14. Text: =c2;

end;

nav1. BtnClick (nbPost);

nav1. BtnClick (nbFirst);

nav2. BtnClick (nbNext);

end;

form7. Close;

end;

if form1. edDate. Text=datamodule2. ADOTable3DSDesigner. Text then

begin

{showmessage ('Нашел дату 3'); }

nav2. BtnClick (nbFirst);

nav1. BtnClick (nbFirst);

for z: =1 to n do

begin

d1: =dbedit3. Text;

r: =dbedit6. Text;

c1: =dbedit12. Text;

c2: =dbedit15. Text;

nav2. BtnClick (nbDelete);

nav2. BtnClick (nbInsert);

dbedit3. Text: =d1;

dbedit6. Text: =r;

str: =dbedit8. Text;

dbedit9. Text: =str;

if r=form1. cmbNumber. Text then

begin

if form7. rbNum1. Checked then

begin

c11: =strtoint (c1);

c11: =c11−1;

if c11>0 then

begin

dbedit12. Text: =inttostr (c11);

showmessage ('Продано');

dbedit15. Text: =c2;

form1. dbeClass1. Text: =dbedit12. Text;

form1. dbeClass2. Text: =dbedit15. Text;

end

else

begin

showmessage ('Билеты первого класса закончились');

dbedit12. Text: =c1;

dbedit15. Text: =c2;

form1. dbeClass1. Text: =dbedit12. Text;

form1. dbeClass2. Text: =dbedit15. Text;

form7. Close;

end;

end

else if form7. rbNum2. Checked then

begin

c22: =strtoint (c2);

c22: =c22−1;

if c22>0 then

begin

dbedit12. Text: =c1;

dbedit15. Text: =inttostr (c22);

showmessage ('Продано');

form1. dbeClass1. Text: =dbedit12. Text;

form1. dbeClass2. Text: =dbedit15. Text;

end

else

begin

showmessage ('Билеты второго класса закончились');

dbedit12. Text: =c1;

dbedit15. Text: =c2;

form1. dbeClass1. Text: =dbedit12. Text;

form1. dbeClass2. Text: =dbedit15. Text;

form7. Close;

end;

end;

end

else

begin

dbedit12. Text: =c1;

dbedit15. Text: =c2;

end;

nav2. BtnClick (nbPost);

nav2. BtnClick (nbFirst);

nav1. BtnClick (nbNext);

end;

form7. Close;

end;

end;

Кнопка +1Билет служит для занесения изменений в базу данных после проведения операции возврата билета. Её процедура действует аналогично предыдущей, но работает условие не превышения количества билетов 70 и 40 в первом и втором классах соответственно, несоблюдение которого приводит к отображению сообщения о том, что все билеты на данный рейс уже сданы. В отличие от предыдущей процедуры здесь идёт увеличение остатков на 1 билет.

procedure TForm6. Button3Click (Sender: TObject);

// Процедура записи данных после возврата билета

var str, d1, c1,c2,r: string;

x, y, z, n, c11, c22: integer;

dt: tdatetime;

begin

dt: =date;

n: =0;

datamodule2. ADOTable1. First;

while datamodule2. ADOTable1. Eof< > true do

begin

n: =n+1;

datamodule2. ADOTable1. Next;

end;

datamodule2. ADOTable1. First;

if form1. edDate. Text=datamodule2. ADOTable1DSDesigner. Text then

begin

{showmessage ('Нашел дату 1'); }

nav. BtnClick (nbFirst);

nav1. BtnClick (nbFirst);

for x: =1 to n do

begin

d1: =dbedit1. Text;

r: =dbedit4. Text;

c1: =dbedit10. Text;

c2: =dbedit13. Text;

nav. BtnClick (nbDelete);

nav. BtnClick (nbInsert);

dbedit1. Text: =d1;

dbedit4. Text: =r;

str: =dbedit8. Text;

dbedit7. Text: =str;

if r=form1. cmbNumber. Text then

begin

if form7. rbNum1. Checked then

begin

c11: =strtoint (c1);

c11: =c11+1;

if c11< =70 then

begin

dbedit10. Text: =inttostr (c11);

showmessage ('Сдано');

dbedit13. Text: =c2;

form1. dbeClass1. Text: =dbedit10. Text;

form1. dbeClass2. Text: =dbedit13. Text;

end

else

begin

showmessage ('Сданы все билеты первого класса');

dbedit10. Text: =c1;

dbedit13. Text: =c2;

form1. dbeClass1. Text: =dbedit10. Text;

form1. dbeClass2. Text: =dbedit13. Text;

form7. Close;

end;

end

else if form7. rbNum2. Checked then

begin

c22: =strtoint (c2);

c22: =c22+1;

if c22< =40 then

begin

dbedit10. Text: =c1;

dbedit13. Text: =inttostr (c22);

showmessage ('Сдано');

form1. dbeClass1. Text: =dbedit10. Text;

form1. dbeClass2. Text: =dbedit13. Text;

end

else

begin

showmessage ('Сданы все билеты вторго класса ');

dbedit10. Text: =c1;

dbedit13. Text: =c2;

form1. dbeClass1. Text: =dbedit10. Text;

form1. dbeClass2. Text: =dbedit13. Text;

form7. Close;

end;

end;

end

else

begin

dbedit10. Text: =c1;

dbedit13. Text: =c2;

end;

nav. BtnClick (nbPost);

nav. BtnClick (nbFirst);

nav1. BtnClick (nbNext);

end;

form7. Close;

end;

if form1. edDate. Text=datamodule2. ADOTable2DSDesigner. Text then

begin

{showmessage ('Нашел дату 2'); }

nav1. BtnClick (nbFirst);

nav2. BtnClick (nbFirst);

for y: =1 to n do

begin

d1: =dbedit2. Text;

r: =dbedit5. Text;

c1: =dbedit11. Text;

c2: =dbedit14. Text;

nav1. BtnClick (nbDelete);

nav1. BtnClick (nbInsert);

dbedit2. Text: =d1;

dbedit5. Text: =r;

str: =dbedit9. Text;

dbedit8. Text: =str;

if r=form1. cmbNumber. Text then

begin

if form7. rbNum1. Checked then

begin

c11: =strtoint (c1);

c11: =c11+1;

if c11< =70 then

begin

dbedit11. Text: =inttostr (c11);

showmessage ('Сдано');

dbedit14. Text: =c2;

form1. dbeClass1. Text: =dbedit11. Text;

form1. dbeClass2. Text: =dbedit14. Text;

end

else

begin

showmessage ('Сданы все билеты первого класса');

dbedit11. Text: =c1;

dbedit14. Text: =c2;

form1. dbeClass1. Text: =dbedit11. Text;

form1. dbeClass2. Text: =dbedit14. Text;

form7. Close;

end;

end

else if form7. rbNum2. Checked then

begin

c22: =strtoint (c2);

c22: =c22+1;

if c22< =40 then

begin

dbedit11. Text: =c1;

dbedit14. Text: =inttostr (c22);

showmessage ('Сдано');

form1. dbeClass1. Text: =dbedit11. Text;

form1. dbeClass2. Text: =dbedit14. Text;

end

else

begin

showmessage ('Сданы все билеты второго класса');

dbedit11. Text: =c1;

dbedit14. Text: =c2;

form1. dbeClass1. Text: =dbedit11. Text;

form1. dbeClass2. Text: =dbedit14. Text;

form7. Close;

end;

end;

end

else

begin

dbedit11. Text: =c1;

dbedit14. Text: =c2;

end;

nav1. BtnClick (nbPost);

nav1. BtnClick (nbFirst);

nav2. BtnClick (nbNext);

end;

form7. Close;

end;

if form1. edDate. Text=datamodule2. ADOTable3DSDesigner. Text then

begin

{showmessage ('Нашел дату 3'); }

nav2. BtnClick (nbFirst);

nav1. BtnClick (nbFirst);

for z: =1 to n do

begin

d1: =dbedit3. Text;

r: =dbedit6. Text;

c1: =dbedit12. Text;

c2: =dbedit15. Text;

nav2. BtnClick (nbDelete);

nav2. BtnClick (nbInsert);

dbedit3. Text: =d1;

dbedit6. Text: =r;

str: =dbedit8. Text;

dbedit9. Text: =str;

if r=form1. cmbNumber. Text then

begin

if form7. rbNum1. Checked then

begin

c11: =strtoint (c1);

c11: =c11+1;

if c11< =70 then

begin

dbedit12. Text: =inttostr (c11);

showmessage ('Сдано');

dbedit15. Text: =c2;

form1. dbeClass1. Text: =dbedit12. Text;

form1. dbeClass2. Text: =dbedit15. Text;

end

else

begin

showmessage ('Сданы все билеты первого класса');

dbedit12. Text: =c1;

dbedit15. Text: =c2;

form1. dbeClass1. Text: =dbedit12. Text;

form1. dbeClass2. Text: =dbedit15. Text;

form7. Close;

end;

end

else if form7. rbNum2. Checked then

begin

c22: =strtoint (c2);

c22: =c22+1;

if c22< =40 then

begin

dbedit12. Text: =c1;

dbedit15. Text: =inttostr (c22);

showmessage ('Сдано');

form1. dbeClass1. Text: =dbedit12. Text;

form1. dbeClass2. Text: =dbedit15. Text;

end

else

begin

showmessage ('Сданы все билеты второго класса');

dbedit12. Text: =c1;

dbedit15. Text: =c2;

form1. dbeClass1. Text: =dbedit12. Text;

form1. dbeClass2. Text: =dbedit15. Text;

form7. Close;

end;

end;

end

else

begin

dbedit12. Text: =c1;

dbedit15. Text: =c2;

end;

nav2. BtnClick (nbPost);

nav2. BtnClick (nbFirst);

nav1. BtnClick (nbNext);

end;

form7. Close;

end;

end;

Кнопка Добавить рейс добавляет в каждую из трёх таблиц новую запись с полями из формы Редактор рейсов.

procedure TForm6. Button4Click (Sender: TObject);

// Процедура добавления нового рейса

var str: string;

dt: tdatetime;

begin

dt: =date;

nav. BtnClick (nbInsert);

dbedit1. Text: =datetostr (dt);

str: =form8. edNomer. text;

dbedit4. Text: =str;

str: =form8. edVrem. text;

dbedit7. Text: =str;

str: ='70';

dbedit10. Text: =str;

str: ='40';

dbedit13. Text: =str;

nav. BtnClick (nbPost);

dt: =dt+1;

nav1. BtnClick (nbInsert);

dbedit2. Text: =datetostr (dt);

str: =form8. edNomer. text;

dbedit5. Text: =str;

str: =form8. edVrem. text;

dbedit8. Text: =str;

str: ='70';

dbedit11. Text: =str;

str: ='40';

dbedit14. Text: =str;

nav1. BtnClick (nbPost);

dt: =dt+1;

nav2. BtnClick (nbInsert);

dbedit3. Text: =datetostr (dt);

str: =form8. edNomer. text;

dbedit6. Text: =str;

str: =form8. edVrem. text;

dbedit9. Text: =str;

str: ='70';

dbedit12. Text: =str;

str: ='40';

dbedit15. Text: =str;

nav2. BtnClick (nbPost);

showmessage ('Новый рейс внесён в базу данных');

form8. Close;

end;

Кнопка Удалить рейс ищет в каждой из трёх таблиц базы номер рейса, указанного на форме Редактор рейсов и удаляет соответствующую запись.

procedure TForm6. Button5Click (Sender: TObject);

// Процедура удаления рейса из базы

var nom: string;

x, y, z, n: integer;

begin

n: =0;

nom: =form8. edNomer. Text;

datamodule2. ADOTable1. First;

while datamodule2. ADOTable1. Eof< > true do

begin

n: =n+1;

datamodule2. ADOTable1. Next;

end;

nav. BtnClick (nbFirst);

for x: =1 to n do

begin

if dbedit4. Text=nom then

begin

nav. BtnClick (nbDelete);

showmessage ('Рейс удалён');

nav. BtnClick (nbNext);

end

else

begin

nav. btnClick (nbNext);

end;

end;

nav1. BtnClick (nbFirst);

for y: =1 to n do

begin

if dbedit5. text=nom then

begin

nav1. btnClick (nbdelete);

nav1. BtnClick (nbNext);

end

else

begin

nav1. btnClick (nbNext);

end;

end;

nav2. BtnClick (nbFirst);

for y: =1 to n do

begin

if dbedit6. text=nom then

begin

nav2. btnClick (nbdelete);

nav2. BtnClick (nbNext);

end

else

begin

nav2. btnClick (nbNext);

end;

end;

form8. Close;

end;

5.2 Разработка инструкции пользователя по решению задачи

После запуска приложения выводится служебное сообщение об обновлении базы. Затем выводится главная форма. Пользователь вводит нужную дату, номер рейса нажимает кнопку Запрос. После вывода остатков билетов по рейсу он может выбрать по необходимости операции продажи или возврата билетов, нажав на соответствующие кнопки (или пункты меню Операции) и выбрав тип класса.

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

Редактор рейсов вызывается пунктами горизонтального меню главной формы Добавит рейс и Удалить рейс. В появившейся форме заносятся номер рейса и время вылета (в случае добавления) и просто номер рейса (в случае удаления). Затем нужно нажать соответствующую активную кнопку на форме редактора.

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

Каждое окно проекта можно закрыть либо пунктом меню Файл/Выход (если таковой есть), либо стандартной кнопкой закрытия окна Windows.

Заключение

Результатом разработки стала программа автоматизации учёта свободных билетов на авиарейсы из г. Саранска. Реализация поставленной задачи стала возможной благодаря широкому набору инструментов и методов обращения к базам данных, предоставляемых средой объектно-ориентированного программирования Borland Delphi 7 2012 г. В программе описан один из возможных вариантов работы с базой данных.

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

Все описанные особенности подтверждают актуальность этой программы и её ценность в рассматриваемой предметной области.

Список использованной литературы

1. Архангельский А. Я. Программирование в Delphi7 — М.: ООО «Бином-Пресс», 2012 г., 1150 стр.

2. Культин Н. Б. Основы программирования в Delphi7 — СПб.: БХВ-Петербург, 2004. — 608 с.: ил.

3. Фленов М. Е. Библия Delphi. — СПб.: БХВ-Петербург, 2004. — 880 с.: ил.

ПоказатьСвернуть
Заполнить форму текущей работой