Курсовая new

50
7/16/2019 Курсовая NEW http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 1/50 Министерство образования и науки РФ ХТИ — филиал ФГАОУ ВПО “Сибирский федеральный университет” Кафедра «Электроэнергетика» Пояснительная записка к курсовой работе по дисциплине «АРМ производственного менеджера» Тема: «Разработка АРМ диспетчера такси» Вариант 1 Выполнил: студент группы 58-1 Тюдешев А.М. Проверил: Минеев П.В. Абакан 2012

Upload: robert-harper

Post on 31-Oct-2015

202 views

Category:

Documents


0 download

TRANSCRIPT

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 1/50

Министерство образования и науки РФХТИ — филиал ФГАОУ ВПО

“Сибирский федеральный университет”

Кафедра «Электроэнергетика»

Пояснительная записка ккурсовой работе

по дисциплине «АРМ производственногоменеджера»

Тема: «Разработка АРМ диспетчера такси»

Вариант 1

Выполнил: студент группы 58-1

Тюдешев А.М.

Проверил: Минеев П.В.

Абакан 2012

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 2/50

Оглавление

Оглавление............................................................................................................... 2

Задание к курсовой работе по дисциплине...........................................................3

«АРМ производственного менеджера»...................................................................3

для специальности 080801.65 Прикладная информатика (по областям)............3

Описание предметной области...............................................................................4

Введение...................................................................................................................5

1.Описание функций, реализуемых АРМ диспетчера таксопарка........................6

2.Построение диаграммы потоков данных АРМ диспетчера таксопарка............7

................................................................................................................................... 9

3. Выбор и обоснование схемы базы данных и описание структуры таблиц....104.Создание базы данных в СУБД Microsoft SQL Server 2008................................12

5.Создание АРМ диспетчера таксопарка в Borland Delphi 7................................18

Заключение.............................................................................................................33

Список литературы................................................................................................34

Приложение 1. Программный код модуля главной формы «АРМ диспетчера

таксопарка» (Unit 1)...............................................................................................35

Приложение 2. Программный код модуля формы формирования нового заказа

(Unit 2)..................................................................................................................... 46Приложение 3. Программный код модуля формы добавления нового клиента

(Unit 2)..................................................................................................................... 49

2

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 3/50

Задание к курсовой работе по дисциплине

«АРМ производственного менеджера»

для специальности 080801.65 Прикладная информатика (по областям)

1. Для заданной предметной области выполнить описание функций, реализуемых создаваемым АРМом.

2. Построить модель разрабатываемого АРМа средствами диаграммпотоков данных (DFD) и выполнить детальное описание данной модели. Вмодели должны быть реализованы все функции создаваемого АРМа.

3. Произвести выбор и обоснование схемы базы данных ивыполнить описание структуры таблиц необходимых таблиц.

4. Создать таблицы базы (не менее трех) данных и внести в каждуютаблицу по 10 записей (делать MS SQL Server).5. Средствами Delphi разработать приложение, реализующее

функции АРМа, перечисленные в п. 1. Для доступа к данным таблицприменить технологию ADO. В приложении должны быть реализованы наменее трех функций АРМа.

6. Оформить пояснительную записку и защитить курсовую работу.

3

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 4/50

Описание предметной области

АРМ диспетчера таксопарка

Работа таксопарка осуществляется следующим образом: каждый

водитель, заступая на смену, связывается с диспетчером, и тот вносит его в

карточку работающих в данный момент. Сведения карточки отображаются

на экране.

Заказы поступают по телефону к диспетчеру, он записывает

необходимые данные в базу заказов. Дата и время поступления заказа

диспетчер вводит сам или вводиться автоматически.

Клиент может сразу у диспетчера узнать стоимость заказа, и только

потом заказывать.

Потом из списка свободных водителей выбирает того, кто будет

выполнять заказ (если в машинах встроены маяки выбирает того, кто ближе к

месту), или водитель сам отвечает по обратной связи, что примет заказ.

После подтверждения водителем диспетчер ставит водителю статус "Занят",

точнее это происходит автоматически, когда статус заказа "Выполняется",

потому что в бланке каждого заказа ставиться исполнитель.

После выполнения заказа водитель по рации отчитывается перед

диспетчером, тот ставит заказу статус "Выполнен" и у водителя меняется

статус на "Свободен".

В случае, когда заказ отменяется по вине клиента, клиент попадает в

"Чёрный список", то есть он не имеет права пользоваться услугами данного

таксопарка. Может быть так, что клиент просто передумал, но не

предупредил диспетчера. В этих случаях водитель сам оповещает диспетчера

о том, что заказ аннулирован. Еще может быть случай, когда клиент

передумал, но предупредил диспетчера, тот связывается с водителем и

перенаправляет его на другой заказ. Во всех случаях статус заказа ставиться

"Отменен".

После каждой смены диспетчер формирует отчет, который показывает,

сколько заказов поступило, сколько выполнилось, сколько было отменено, и

их общую стоимость.

Эти отчеты поступают к администратору, на основании этого всего

администратор формирует общий отчет (сводный отчет) за определенную

дату.

4

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 5/50

Введение

Курсовая работа – это один из главных видов самостоятельной работы

студентов в высшем учебном заведении, направленной на закрепление,

углубление и обобщение знаний по учебным дисциплинам, овладения

 распространенными методами научных исследований, формированиенавыков решения творческих задач в ходе научного исследования по

определенной теме.

Целью данной курсовой работы является разработка АРМ диспетчера

такси при помощи объектно-ориентированного языка Delphi 7 и СУБД

Microsoft SQL Server 2008. Автоматизация работы диспетчера такси

обеспечит информационную поддержку функции учета и регистрации

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

Автоматизированное рабочее место (АРМ) – это программно-

технический комплекс, предназначенный для автоматизации деятельности

определенного вида, в данном случае – диспетчера такси.

АРМ объединяет программно-аппаратные средства, обеспечивающие

взаимодействие человека с компьютером, предоставляет возможность ввода

информации (через клавиатуру, компьютерную мышь, сканер и пр.) и еёвывод на экран монитора, принтер, графопостроитель, звуковую карту — 

динамики или иные устройства вывода. Как правило, АРМ является

частью автоматизированной системы управления.

При помощи объектно-ориентированного языка Borland Delphi 7 будет

спроектировано АРМ диспетчера такси, база данных которого создано в

СУБД Microsoft SQL Server 2008 согласно поставленному заданию курсовой

 работы.

5

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 6/50

1. Описание функций, реализуемых АРМ диспетчера таксопарка

Разрабатываемое АРМ предназначено для автоматизации функций

деятельности диспетчера таксопарка, если эти функции возможно

автоматизировать.

Все функции, которые должны выполняться посредством

 разрабатываемого АРМ, представлены далее в таблице 1.

Таблица 1 – Реализуемые функции АРМ диспетчера таксопарка

п/п

Выполняемая

функция

Исходные

данные

Результат выполнения

функции

1 Организация ввода

сведений о водителях,поступивших на смену

Заявка о

поступлении насмену

Изменение значения

«Статус» в таблице«Водители»

2 Организация вводасведений о заказе

Заказ клиента навызов такси

Сохранение данных втаблицах «Заказы» и

«Список клиентов» базыданных

3 Выбор водителя длявыполнения заказа

Заказ клиента навызов такси

Сохранение данных втаблице «Заказы»,

изменение значения

«Статус» в таблице«Водители» базы данных

4 Ввод и хранениесведений о

выполненных заказах

Данные таблицы«Активные

заказы», отчетводителя о

выполненномзаказе

Изменение значения«Статус» в таблице

«Заказы» базы данных насоответствующее

5 Ввод и хранение

сведений оневыполненныхзаказах

Сведения об

отмене заказа отклиента иливодителя

Изменение значения

«Статус» в таблице«Заказы» базы данных насоответствующее

6 Организация вводасведений о клиенте,попавшем в «черный

список»

Сведения оботмене заказа повине клиента безпредупреждения

Значение «Черный список»в таблице «Список

клиентов» со сведениями оклиенте базы данных

7 Формирование отчетао заказах за смену

Данные таблиц«Выполненные

заказы» и«Невыполненныезаказы»

Отчет в электроннойформе и распечатанном

виде в соответствии сзаданными требованиями

6

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 7/50

Формирование сводного отчета за определенную дату является функцией,

которая реализуется в приложении для администратора, поэтому в АРМ

диспетчера такси данная функция не реализована.

Функции были сформированы из описания заданного вариантом

технического задания. Согласно данным функциям необходимо построитьмодель разрабатываемого АРМ средствами диаграмм потоков данных.

2. Построение диаграммы потоков данных АРМ диспетчера

таксопарка

Построение диаграммы потоков данных АРМ диспетчера таксопарка

осуществляется с помощью выявленных ранее функций проектируемой

АРМ, а также выявленных внешних сущностей. Для начала нужно выявитьвнешние сущности для АРМ.

Определение внешних сущностей:

• Диспетчер таксопарка – осуществляет прием заказов, назначает

водителей на определенный заказ, вводит сведения о

выполненных и отмененных заказах, формирует отчет за смену.

Клиенты – делают заказ на услуги такси, имеют возможностьотменить текущий заказ.

• Водители – принимают заказы, выполняют их, докладывают о

выходе на смену, отмене заказа или его успешном выполнении.

• Администратор – формирует сводный отчет за указанный период

и предоставляет его руководству.

Руководство таксопарка – представляет собой управлениетаксопарка, принимает сводные отчеты от администратора.

Определение накопителей:

• Список клиентов – хранит в себе сведения о клиентах, а также

позволяет их блокировать, внося в «черный список».

• Заказы – содержит сведения обо всех заказах,

зарегистрированных диспетчером такси: активных, выполненных

и невыполненных, отражает текущее состояние заказа.

7

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 8/50

• Водители такси – хранит сведения о водителях, а также о их

текущем статусе, который определяет возможность отправки

водителя на выполнение заказа.

Определение процессов:

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

выше. Так, например, процесс «Внести сведения о поступлении водителя на

смену» соответствует функции «Организация ввода сведений о водителях,

поступивших на смену», или процесс «Ввести сведения о заказе такси»

соответствует функции «Организация ввода сведений о заказе». Аналогично

остальные процессы соответствуют выявленным функциям, поэтому

количество процессов в диаграмме должно соответствовать количеству

выявленных функций.

Определение потоков данных:

Информация в потоках данных также соответствует исходным данным

для выполнения определенных функций. Например, поток данных «Сведения

о заказе», поступающие от внешней сущности «Клиенты» в процесс «Ввести

сведения о заказе такси» соответствует исходным данным «Заказ клиента на

вызов такси» для функции «Организация ввода сведений о заказе». Затем эти

данные обрабатываются в процессе и на выходе из него информация оклиенте потоком данных «Сформированные сведения о клиенте» будут

направлены в накопитель «Список клиентов», а поток данных о

сформированном заказе «Сформированные сведения о заказе» будет

направлен в накопитель «Заказы». Таким образом, будут сформирован заказ

на вызов такси. Аналогичным способом создаются остальные потоки данных.

Полученная диаграмма представлена на рисунке 1. Диаграмма была

построена посредством MS Visio 2007 и содержит в себе все выявленные

внешние сущности, накопители, процессы и потоки данных.

После построения диаграммы потоков данных АРМ диспетчера

таксопарка нужно определить таблицы создаваемой базы данных и их

содержимое.

8

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 9/50

Рисунок 1 – Диаграмма потоков данных АРМ диспетчера таксопарка

9

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 10/50

3. Выбор и обоснование схемы базы данных и описание структуры

таблиц

Реляционная база данных для АРМ диспетчера таксопарка должна

включать в себя все необходимые таблицы для выполнения всех ранее

выявленных функций. Таблицы такой базы данных будут соотноситься с

накопителями диаграммы потоков данных и иметь все необходимые поля для

данных. Ключевые поля и связи между таблицами создаются исходя из

теории нормализации баз данных.

Накопителю «Водители такси» соответствует таблица «Drivers» базы

данных. В ней будут находиться следующие поля, содержимое которых

определяет водителей таксопарка и их текущий статус:

CodDriver - Код водителя, целочисленный тип, ключевое поле, связан с

одноименным полем таблицы «Orders», тип связи: один-ко-многим;

SecondNameDriver – Фамилия водителя, текстовый тип;

FirstNameDriver – Имя водителя, текстовый тип;

PatronymicDriver - Отчество водителя, текстовый тип;

SerialPassportDriver - Серия паспорта, целочисленный тип;

 NumPassportDriver – Номер паспорта, целочисленный тип;

INNDriver – ИНН, целочисленный тип;

PhoneDriver - Контактный телефон, целочисленный тип;

AdressDriver – Адрес водителя, текстовый тип;

 NumSaveDocDriver – Номер страхового свидетельства водителя,

целочисленный тип;

 NumDriveDoc - Номер водительского удостоверения, целочисленный

тип;

 NumCarDriver - Номер рабочей машины, целочисленный тип;

CodStatusOfDriver – Код статуса водителя, целочисленный тип, связан с

одноименным полем таблицы «DriversStatus», тип связи: многие-к-одному.

10

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 11/50

Накопитель «Заказы» содержит сведения обо всех заказах за смену,

произведенных таксопарком. Таблица «Orders» (Заказы) базы данных

содержит следующие поля:

CodOrder - Код заказа, целочисленный тип, ключевое поле, однозначно

определяет номер заказа;

CodClient – Код клиента, целочисленный тип, связан с одноименным

полем таблицы «ClientList», тип связи: многие-к-одному;

AdressStartPoint - Адрес вызова, текстовый тип;

AdressFinishPoint - Адрес пункта назначения, текстовый тип;

DataOfOrder – Дата заказа, тип даты;

DataStartOrder – Время принятия заказа, текстовый тип;

DataFinishOrder – Время завершения/отмены заказа, текстовый тип;

CodDriver - Код водителя, целочисленный тип, связан с одноименным

полем таблицы «Drivers», тип связи: многие-к-одному;

PriceOfOrder - Стоимость заказа, числовой тип;

CodStatusOfOrder – Код статуса заказа, целочисленный тип, связан содноименным полем таблицы «OrdersStatus», тип связи: многие-к-одному.

Таблица «ClientList» (Список клиентов) содержит сведения о клиентах,

совершивших заказ, а также позволяет заносить их в «черный список». Поля

данной таблицы представлены далее:

CodClient - Код клиента, целочисленный тип, ключевое поле, связан с

одноименным полем таблицы «Orders», тип связи: один-ко-многим;

SecondNameClient - Фамилия клиента;

FirstNameClient – Имя клиента, текстовый тип;

PatronymicClient - Отчество клиента, текстовый тип;

PhoneClient – Телефон, целочисленный тип;

BlackListStatus – Статус клиента в черном списке, булевый тип.

Для удобства ведения записей следует добавить еще 2 таблицы,отражающие статусы водителей и заказов.

11

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 12/50

Таблица «DriversStatus» (Статусы водителей) имеет следующие поля:

CodStatusOfDriver – Код статуса водителя, целочисленный тип,

ключевое поле, связан с одноименным полем таблицы «Drivers», тип связи:

один-ко-многим;

StatusOfDriver – Статус водителя, текстовый тип.

Таблица «OrdersStatus» (Статусы заказов) имеет следующие поля:

CodStatusOfOrder – Код статуса заказа, целочисленный тип, ключевое

поле, связан с одноименным полем таблицы «Orders», тип связи: один-ко-

многим;

StatusOfOrder - Статус заказа, текстовый тип.

4. Создание базы данных в СУБД Microsoft SQL Server 2008

Для создания базы данных для АРМ диспетчера таксопарка

использовалось СУБД Microsoft SQL Server 2008 Standard с пакетом

обновления за июль 2012 г.

Система SQL Server 2008 отталкивается от концепции платформы

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

информацию, полученную из структурированных, полуструктурированных и

неструктурированных источников, таких как изображения и музыка. В SQL

Server 2008 имеется большой набор интегрированных служб, расширяющих

возможности использования данных: есть возможность составлять запросы,

выполнять поиск, проводить синхронизацию, делать отчеты, анализировать

данные. Все данные хранятся на основных серверах, входящих в состав

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

Система SQL Server 2008 позволяет обращаться к данным из любого

приложения, разработанного с применением технологий Microsoft .NET и

Visual Studio, а также в пределах сервисно-ориентированной архитектуры и

бизнес-процессов — через Microsoft BizTalk Server. Сотрудники, отвечающие

за сбор и анализ информации, могут работать с данными, не покидая

привычных приложений, которыми они пользуются каждый день, например

приложений выпуска 2007 системы Microsoft Office. SQL Server 2008

12

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 13/50

позволяет создать надежную, производительную, интеллектуальную

платформу, отвечающую всем требованиям по работе с данными. [1]

SQL Server Standard — это законченная платформа для управления

данными и выполнения операций бизнес-аналитики. Она демонстрирует

лучшие в своем классе показатели простоты использования и степениуправляемости приложений, на которых основана работа подразделений

предприятия.

• Простота использования

Легкая в эксплуатации платформа баз данных позволяет снизить

операционные издержки и расходы на разработку малых и средних решений.

• Управляемость

Интуитивно понятные средства управления и автоматизированного

администрирования позволяют эффективно контролировать приложения,

составляющие основу работы отделов предприятия.

• Создание отчетов и аналитика

Встроенные технологии анализа и создания отчетности позволяют

получать практически значимую информацию и принимать более

обоснованные решения. [2]

Создание базы данных происходит в среде SQL Server Management

Studio. При этом среда будет обращаться не к конкретному файлу базы

данных, а к компьютеру, который является сервером с хранилищем баз

данных (рисунок 2).

13

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 14/50

Рисунок 2 – Настройка соединения с сервером

Далее в разделе «Базы данных» обозревателя объектов посредством

команды контекстного меню создается новая база данных «ARM_Taxi».

Свойства созданной базы данных представлены далее на рисунке 3.

14

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 15/50

Рисунок 3 – Свойства БД «ARM_Taxi»

После создания базы данных следует приступить к созданию таблиц,

которые были определены ранее. Для создания таблиц нужно в обозревателе

объектов раскрыть раздел «Таблицы» БД «ARM_Taxi» и с помощью

команды контекстного меню «Создать таблицу…» создать таблицы,определенные в предыдущем пункте курсовой работы:

1) таблица «Drivers» - содержит в себе данные о водителях;2) таблица «Orders» - содержит в себе данные о заказах;3) таблица «ClientList» - содержит в себе сведения о клиентах;4) таблица «DriversStatus» - содержит в себе сведения о возможных

статусах водителей;5) таблица «OrdersStatus» - содержит в себе сведения о возможных

статусах заказов.На рисунке 4 представлено содержимое обозревателя объектов после

добавления вышеуказанных таблиц.

Рисунок 4 – Содержимое обозревателя объектов после добавления таблиц

В создаваемых таблицах следует задать ранее выявленное количество

полей с соответствующими типами данных, затем задать ключевые поля для

каждой таблицы. Ключевые поля создаются посредством нажатия

соответствующей кнопки на панели инструментов. Готовый проект таблицы

«Drivers» (Водители) представлен на рисунке 5.

15

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 16/50

Рисунок 5 – Проект таблицы «Drivers»

Ключевым полем таблицы является «CodDriver» (Код водителя), что

отражено в данном рисунке, также данное поле является идентификатором

для данной таблицы, что указывается в свойстве таблицы «Столбец-

идентификатор». Это необходимо для построения связей между таблицами

базы данных.

После определения полей таблиц базы данных следует создать

отношения между созданными таблицами. Для этого нужно открыть таблицу

в режиме проекта посредством команды контекстного меню «Проект», затем

нажать на панели инструментов кнопку «Отношения».

В результате этих действий появится окно со связями для выбранной

таблицы. Для создания связи с таблицами необходимо нажать на кнопку

«Добавить», затем в свойстве таблицы «Спецификация таблиц и столбцов»

нажать на кнопку с многоточием для открытия окна для установления связи с

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

и выбрать поле, по которому идет связь. Пример окна с готовыми связямидля таблицы «Orders» (Заказы) представлен на рисунке 6.

16

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 17/50

 Рисунок 6 – Связи по внешнему ключу для таблицы «Orders»

Данные связи построены согласно теории нормализации баз данных,

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

таблицами были определены в предыдущем пункте данной курсовой работы.

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

запросов. Для его открытия нужно выбрать раздел панели меню «Запрос» ивыбрать команду «Создать запрос в редакторе…», после чего следует

добавить все имеющиеся таблицы. Окно конструктора запросов с

отображаемыми связями между таблицами представлено на рисунке 7.

Рисунок 7 – Связи таблиц в конструкторе запросов

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

база данных находится в третьей нормальной форме.

17

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 18/50

После создания отношений следует ввести несколько значений в

каждую таблицу. Такой порядок действий при верном построении базы

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

ввода значений нужно вызвать контекстное меню на нужной таблице и

выбрать команду «Изменить первые 200 строк». В результате этого

выбранная таблица откроется в режиме заполнения. Далее на рисунке 8

представлена таблица «ClientList» (Список клиентов) в режиме заполнения.

Рисунок 8 – Таблица «ClientList» в режиме заполнения

Вспомогательные таблицы «DriversStatus» и «OrdersStatus»заполняются в соответствии с возможными состояниями водителей и заказов.

5. Создание АРМ диспетчера таксопарка в Borland Delphi 7

Delphi – императивный, структурированный, объектно-ориентирован-

ный язык программирования, диалект Object Pascal. Начиная со среды

 разработки Delphi 7.0, в официальных документах Borland стала

использовать название Delphi для обозначения языка Object Pascal. Начиная с2007 года уже язык Delphi (производный от Object Pascal) начал жить своей

самостоятельной жизнью и претерпевал различные изменения, связанные с

современными тенденциями (например, с развитием платформы .NET)

 развития языков программирования: появились class helpers, перегрузки

операторов и другое. [3]

Для осуществления связи будущей АРМ с базой данных, созданной в

Microsoft SQL Server 2008, используется технология ADO (ActiveX Data

Objects ). Для построения связи нужно в компоненте ADOConnection1 указать

требуемую базу с данными. Для этого выбирается провайдер Microsoft OLE

18

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 19/50

DB Provider for SQL Server, и в разделе «Соединение» выбирается сервер,

затем выбирается созданная база с данными «ARM_Taxi». После этого

можно приступать к созданию проекта АРМ диспетчера такси.

На главной форме «АРМ диспетчера такси» (рисунок 9) расположены

следующие компоненты класса ADOTable, осуществляющие связь стаблицами БД «ARM_Taxi»:

ADO_Table1 – таблица «Orders», содержит данные о заказах;ADO_Table2 – таблица «ClientList», содержит данные о клиентах;ADO_Table3 – таблица «Drivers», содержит данные о водителях.

Данные компоненты, связанные с указанными таблицами, служат для

изменения записей в таблицах о состоянии заказа, добавления клиента в

«черный список», изменения записи о статусе водителя и некоторые другиефункции, для которых необходимо изменять или добавлять данные в базу

данных.

Во вкладке «Активные заказы» существует возможность вызова формы

для формирования заказа, а также изменение статуса заказа. Данная вкладка

служит для частичной реализации функций ввода и хранения сведений о

выполненных и невыполненных заказах. Также для этого служат вкладки

«Выполненные заказы» и «Невыполненные заказы», на которых отражаются

соответствующие заказы на текущий день. Для полной реализации данной

функции служит форма формирования заказа, рассмотренная далее.

Помимо этого в нижней части главной формы находятся текстовые

поля, отображающие сегодняшнюю дату и время – они копируются из

системных даты и времени компьютера.

19

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 20/50

Рисунок 9 – Главная форма приложения «АРМ диспетчера такси» в режиме

 редактирования, раздел «Управление заказами», вкладка «Активные заказы»

Из всех трех компонентов таблиц только ADOTable2 (Список

клиентов) имеет визуальное отображение на таблице в разделе «Управление

клиентами» (рисунок 10). Также в данном разделе осуществлена функция

добавления клиента в «черный список», также существует возможность

добавления клиента в базу данных, что является частью функции ввода и

хранения заказов, помимо этого реализован просмотр клиентов в «черном

списке», вне его и всех клиентов в таблице «ClientList» БД ARM_Taxi.

20

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 21/50

Рисунок 10 – Главная форма приложения «АРМ диспетчера такси» в режиме

 редактирования, раздел «Управление клиентами»

Помимо компонентов таблиц на главной форме расположены

компоненты класса ADOQuery – запросы данных из таблиц БД. Данные

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

«SQL», определяющее содержимое при выполнении запроса.

ADOQuery1 – выводит список всех заказов в таблицу на вкладке «Все

заказы», находящейся в разделе «Управление заказами». SQL запрос:

SELECT ClientList.SecondNameClient, ClientList.FirstNameClient, Orders.AdressStartPoint,Orders.AdressFinishPoint, Orders.DataStartOrder, Orders.DataFinishOrder,

Drivers.SecondNameDriver, Drivers.FirstNameDriver, Orders.PriceOfOrder,

Orders.DataOfOrder, OrdersStatus.StatusOfOrder FROM ClientList INNER JOIN

Orders ON ClientList.CodClient = Orders.CodClient INNER JOINDrivers ON Orders.CodDriver = Drivers.CodDriver INNER JOINOrdersStatus ON Orders.CodStatusOfOrder = OrdersStatus.CodStatusOfOrder 

Результат данного запроса представлен на рисунке 11.

Рисунок 11 – Результат запроса компонента ADOQuery1 в режиме редактирования,

 раздел «Управление заказами», вкладка «Все заказы»

Также на данной вкладке есть возможность просмотра заказов за

определенный промежуток времени.

ADOQuery2 – выводит список активных заказов в таблицу на вкладке

«Активные заказы». SQL запрос:

21

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 22/50

SELECT Orders.CodDriver, Orders.CodOrder, ClientList.SecondNameClient,ClientList.FirstNameClient, Orders.AdressStartPoint, Orders.AdressFinishPoint,Orders.DataStartOrder, Orders.DataFinishOrder,

Drivers.SecondNameDriver, Drivers.FirstNameDriver, Orders.PriceOfOrder,Orders.DataOfOrder, OrdersStatus.StatusOfOrder FROM ClientList INNER JOIN

Orders ON ClientList.CodClient = Orders.CodClient INNER JOIN

Drivers ON Orders.CodDriver = Drivers.CodDriver INNER JOINOrdersStatus ON Orders.CodStatusOfOrder = OrdersStatus.CodStatusOfOrder 

WHERE Orders.CodStatusOfOrder=4

Результат данного запроса будет выводиться, если имеются активные

заказы. Работоспособность данного запроса будет рассмотрена позже.

ADOQuery3 – выводит список выполненных заказов на сегодняшний

день в разделе «Управление заказами» на таблицу на вкладке «Выполненные

заказы». SQL запрос:

SELECT ClientList.SecondNameClient, ClientList.FirstNameClient, Orders.AdressStartPoint,Orders.AdressFinishPoint, Orders.DataStartOrder, Orders.DataFinishOrder,

Drivers.SecondNameDriver, Drivers.FirstNameDriver, Orders.PriceOfOrder,Orders.DataOfOrder, OrdersStatus.StatusOfOrder FROM ClientList INNER JOIN

Orders ON ClientList.CodClient = Orders.CodClient INNER JOINDrivers ON Orders.CodDriver = Drivers.CodDriver INNER JOINOrdersStatus ON Orders.CodStatusOfOrder = OrdersStatus.CodStatusOfOrder 

WHERE Orders.CodStatusOfOrder=5

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

который отсеивает данные, не относящиеся к сегодняшнему дню.

ADOQuery4 – выводит список невыполненных заказов на сегодняшний

день в разделе «Управление заказами» на таблицу на вкладке «Выполненные

заказы». SQL запрос:

SELECT ClientList.SecondNameClient, ClientList.FirstNameClient, Orders.AdressStartPoint,Orders.AdressFinishPoint, Orders.DataStartOrder, Orders.DataFinishOrder,

Drivers.SecondNameDriver, Drivers.FirstNameDriver, Orders.DataOfOrder FROM ClientList INNER JOIN

Orders ON ClientList.CodClient = Orders.CodClient INNER JOINDrivers ON Orders.CodDriver = Drivers.CodDriver INNER JOINOrdersStatus ON Orders.CodStatusOfOrder = OrdersStatus.CodStatusOfOrder 

WHERE Orders.CodStatusOfOrder=6

Работает аналогично предыдущему запросу, данные также

фильтруются при запуске формы.

ADOQuery5 – выводит список водителей, соответствующих

определенному статусу. SQL запрос:

22

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 23/50

SELECT Drivers.CodDriver, Drivers.SecondNameDriver, Drivers.FirstNameDriver,Drivers.PatronymicDriver, Drivers.SerialPassportDriver, Drivers.NumPassportDriver,Drivers.INNDriver,

Drivers.PhoneDriver, Drivers.AdressDriver, Drivers.NumSaveDocDriver,Drivers.NumDriveDoc, Drivers.NumCarDriver, Drivers.CodStatusOfDriver,

DriversStatus.StatusOfDriver FROM Drivers INNER JOIN

DriversStatus ON Drivers.CodStatusOfDriver = DriversStatus.CodStatusOfDriver 

Результат запроса представлен на рисунке 12.

Также на данной форме осуществлена возможность изменения статуса

водителей, просмотр полной и краткой информации о них, а также

возможность просмотра водителей на смене, выполняющих заказ, свободных

водителей и водителей, которые еще не заступили на смену или вышли с неё,

т.е. данная форма реализует функцию ввода сведений о состоянии водителя.

Программный код главной формы «АРМ менеджера таксопарка»

представлен в приложении 1 пояснительной записки данной курсовой

 работы.

Рисунок 12 – Результат запроса компонента ADOQuery5 в режиме редактирования,

 раздел «Управление водителями»

Далее представлена реализация функции формирования заказа. Для

этого созданы специальные формы.

Форма формирования заказа в режиме редактирования представлена на рисунке 13.

23

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 24/50

Рисунок 13 – Форма для формирования заказа в режиме редактирования

На данной форме имеется 2 компонента класса ADOTable. Они служат

для вывода в таблицы данных о клиентах, которые не находятся в черном

списке, и данных о водителях, которые сейчас свободны, для чего в свойстве

Filter данных компонентов введены соответствующие условия.Программный код формы формирования заказов находится в

приложении 2.

Если клиента нет в базе данных, то следует добавить его посредством

соответствующей формы (рисунок 14), которую можно вызвать из формы

формирования заказа или из раздела «Управление клиентами» главной

формы.

24

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 25/50

Рисунок 14 – Форма для добавления клиента в режиме редактирования

Программный код для данной формы находится в приложении 3

данной пояснительной записки.

Пример создания заказа и присвоение ему определенного состояния в

приложении «АРМ диспетчера такси» рассмотрено далее.

После запуска программы откроется главная форма, раздел

«Управление заказами, вкладка «Активные заказы» (рисунок 15). При этом

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

Активных заказов, разумеется, нет, поэтому следует сформировать

новый заказ. Для этого нужно нажать кнопку «Новый заказ» для вызова

формы формирования заказа. Для выбора клиента достаточно щелкнуть по

строке с нужным клиентом в таблице. Аналогично выбирается водитель.

Поля с временем и датой принятия заказа заполняются автоматически,

поэтому остается лишь ввести адреса начала и конца маршрута и цену заказа.

Заполненная форма представлена на рисунке 16.

25

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 26/50

Рисунок 15 – Главная форма в режиме выполнения, раздел «Управление заказами»,

вкладка «Активные заказы»

Рисунок 16 – Форма формирования заказа в режиме выполнения

После чего нужно нажать на кнопку «Сформировать новый заказ». В

 результате этого форма закроется и вновь станет доступна главная форма.

При этом на вкладке «Активные заказы» отобразится строка с

созданным заказом (рисунок 17).

26

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 27/50

Рисунок 17 – Главная форма в результате создания заказа

При этом выбранный водитель будет в списке занятых водитеей в

 разделе «Управление водителями» (рисунок 18).

Рисунок 18 – Список занятых водителей в разделе «Управление водителями»

 Чтобы заказ считался выполненным, нужно нажать кнопку «Заказ

выполнен», в результате этого строка с заказом исчезнет из вкладки

«Активные заказы» и переместится в компонент DBGrid на вкладке

«Выполненные заказы» (рисунок 19).

27

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 28/50

Рисунок 19 – Главная форма в результате создания заказа

На вкладке «Выполненные заказы», что представлена на рисунке 19, в

компоненте DBGrid отображаются все выполненные заказы, которые были

завершены на текущую дату. Время нажатия на кнопку записывается в

таблицу «Orders» (Заказы) как время завершения заказа. Водитель, занятый

данным заказом меняет статус на «Свободен», что реализовано посредством

изменения данных в поле таблицы «Drivers» (Водители). Весь механизм

данного действия можно проследить при изучении программного модуля

главной формы (Приложение 1).

Для реализации функции «Формирование отчета о заказах за смену»

будет использоваться не один, а два отчета: «Отчет о выполненных заказах»

и «Отчет о невыполненных заказах», так как это будет более удобным

представлением данных для диспетчера такси.

Для создания отчетов в АРМ диспетчера такси использовалась

технология RAVE, которые впервые появилась в Borland Delphi 7.

Использованные компоненты RAVE можно увидеть на главной форме АРМ

диспетчера такси в режиме редактирования (рисунок 9), так как они не

являются визуальными. При разработке АРМ диспетчера такси

использовались следующие компоненты RAVE:

• RVProject1 – служит для связи файлов отчетов RAVE с АРМ

диспетчера такси, также используется для вызова генератораотчетов RAVE Reports 5.0, в котором проектируются макеты

28

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 29/50

отчетов и сохраняются в виде отдельных файлов с расширением .rav.

• RvSystem1 – обеспечивает взаимодействие между отчетом и

функциями по печати и просмотру отчета.

• RvDataSetConnection - обеспечивает соединение с набором

данных СУБД, в данном случае осуществляет связь скомпонентами ADOQuery3 и ADOQuery4, осуществляющиевыборку данных из таблиц «Orders», «Drivers» и «ClientList» повыполненным и невыполненным заказам соответственно.

 Чтобы организовать вывод данных из компонентов ADOQuery в отчет

нужно в свойстве DataSet компонента RvDataSetConnection указать

необходимый компонент данных, в данном случае для вывода данных по

выполненным заказам в компоненте RvDataSetConnection1 указывается

ADOQuery 3.

Далее посредством двойного нажатия левой кнопкой мыши по

компоненту RVProject1 вызывается генератор отчетов Rave Reports 5.0.

 Чтобы связать приложение АРМ диспетчера такси с данным приложением

нужно выполнить команду File/New Data Object, затем в появившемся окне

выбрать вид соединения с данными Direct Data View, нажать кнопку «Next»

(Далее) и выбрать из списка нужный компонент RvDataSetConnection1. После

этого с помощью стандартных компонентов вывода текста следует

сформировать шапку отчета и задать заголовки выводимых столбцов.

Для формирования таблицы с данными из запроса в отчете нужно

добавить компонент Region из раздела Reports, который определяет область ,

на которой находятся другие компоненты вывода данных. В компонент

Region нужно добавить компонент DataBand – он служит для выделения

полосы, на которой располагаются компоненты вывода данных. После этого

на компонент DataBand добавляются компоненты вывода строковых и

числовых значений из связанного с ним источника данных DataText. Чтобыданный компонент был связан с компонентов в приложении ADOQuery3,

нужно в свойстве DataView выбрать соединение с данными DataView1, а в

свойстве DataField выбрать необходимый столбец таблицы запроса,

выполняемого компонентом запроса ADOQuery3.

 Число компонентов DataText должно быть достаточным, чтобы

сформировать то количество столбцов с данными, которое дало общую

картину прошедшей смены. Поэтому в отчет входят сведения о клиенте,время взятия и выполнения заказа, цена произведенной услуги, адреса

начальной и конечной точки пути и фамилия водителя, выполнявшего заказ.

29

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 30/50

Помимо компонентов вывода данных используются компоненты

вычисляемого поля CalcText, которые выводят информацию об общей сумме

выручки за смену и о количестве заказов. В данных компонентах помимо

свойств DataView и DataField, нужно указать тип вычисляемого поля в

свойстве Calc Type, так, например, для вывода суммы всех заказов в свойстве

DataField выбирается столбец с суммой заказа PriceOfOrder, а в свойстве

Calc Type указывается ctSum (сумма).

Готовый проект отчета по выполненным заказам в генераторе отчетов

Rave Reports 5.0 представлен на рисунке 20.

Рисунок 20 – Проект отчета по выполненным заказам Rave Reports 5.0

Далее данный отчет сохраняется как файл CompleteOrders.rav.

Для вызова данного отчета в АРМ диспетчера такси нужно на вкладке«Выполненные заказы» нажать кнопку «Создать отчет». В результате будет

30

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 31/50

запущен компонент RvProject1, позволяющий Delphi строить отчеты с

помощью технологии RAVE, который выведет на монитор окно,

представленное на рисунке 21.

Рисунок 21 – Параметры вывода

Данное окно позволяет осуществить предварительный просмотр

отчета, или сразу отправить его на печать или же выбрать другой файл

отчета.

При нажатии на кнопку «ОК» при выбранном действии Preview(Предварительный просмотр) откроется окно просмотра отчета (рисунок 22).

Для того чтобы отчет выглядел более наглядно, было создано 13

 различных заказов, которым был присвоен статус «Выполнено».

Аналогично создается отчет по невыполненным заказам. Для этого

данные берутся из компонента ADOQuery4, который визуализирует запрос

по невыполненным заказам из таблицы «Orders» (Заказы) на вкладке

«Невыполненные заказы», а компонент RvProject1 использует другой проект,созданный для данных по невыполненным заказам. Весь программный

механизм построения отчетов в приложении «АРМ диспетчера такси» можно

 рассмотреть в Приложении 1 данной курсовой работы.

31

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 32/50

Рисунок 20 – Окно предварительного просмотра отчета по выполненным заказам

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

усложнено для увеличения выполняемых им функций. Например, можно

внедрить геоинформационную систему для выбора оптимального пути для

водителей и составление более корректных цен на заказы.

32

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 33/50

Заключение

В данной курсовой работе была осуществлена разработка АРМ

диспетчера такси в соответствии с заданной предметной областью

посредством СУБД Microsoft SQL Server 2008 и объектно-ориентированного

языка Delphi.

В процессе выполнения курсовой работы было выполнено:

• были определены функции, выраженные в 7-ми пунктах и

представленные в виде таблицы, которые должны выполняться

посредством разрабатываемого АРМ;

с помощью Microsoft Visio была спроектирована модельдиаграммы потоков данных таксопарка, в которой были

определены: 5 внешних сущностей, 3 накопителя и 26 процессов;

• определена структура таблиц базы данных, всего создано 5

таблиц, 3 из которых соответствуют выявленным накопителям, а

2 другие являются вспомогательными, проектируемая база

данных приведена к третьей нормальной форме согласно теории

 реляционных баз данных;

•спроектированная база данных была реализована в СУБДMicrosoft SQL Server 2008, в её таблицы в качестве примера были

добавлены записи, позволяющие определить содержимое таблиц;

• посредством объектно-ориентированного языка Delphi было

 разработано АРМ диспетчера такси, связанное с

спроектированной базой данных Microsoft SQL Server 2008.

Главным итогом курсовой работы стала полностью реализованное и

 работоспособное программное обеспечение, являющееся АРМ диспетчера

такси.

33

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 34/50

Список литературы

1. [Электронный ресурс] // Официальный сайт Майкрософт. Обзор SQL

Server 2008. URL:

http://www.microsoft.com/sqlserver/2008/ru/ru/overview.aspx (дата

обращения: 26.11.2012).

2. [Электронный ресурс] // Официальный сайт Майкрософт. Особенности

SQL Server 2008 Standard. URL:

http://www.microsoft.com/sqlserver/2008/ru/ru/standard.aspx (дата

обращения: 26.11.2012).

3.  [Электронный ресурс] // Википедия – свободная общедоступная

мультиязычная универсальная интернет-энциклопедия. Delphi (язык

программирования). URL:

http://ru.wikipedia.org/wiki/Delphi_(язык_программирования).

34

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 35/50

Приложение 1. Программный код модуля главной формы «АРМ

диспетчера таксопарка» (Unit 1)

unit Unit1;

interface

usesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, Grids, DBGrids, DB, ADODB, StdCtrls, ExtCtrls, ComCtrls, RpCon,RpConDS, RpBase, RpSystem, RpDefine, RpRave;

typeTForm1 = class(TForm)ADOConnection1: TADOConnection;ADOTable2: TADOTable;DataSource2: TDataSource;Edit1: TEdit;Edit2: TEdit;Timer1: TTimer;PageControl2: TPageControl;TabSheet4: TTabSheet;PageControl1: TPageControl;TabSheet1: TTabSheet;DBGrid1: TDBGrid;

TabSheet2: TTabSheet;TabSheet3: TTabSheet;TabSheet5: TTabSheet;TabSheet6: TTabSheet;TabSheet7: TTabSheet;ADOQuery1: TADOQuery;DataSource3: TDataSource;DBGrid2: TDBGrid;GroupBox1: TGroupBox;RadioButton1: TRadioButton;RadioButton2: TRadioButton;

RadioButton3: TRadioButton;GroupBox2: TGroupBox;RadioButton4: TRadioButton;RadioButton5: TRadioButton;DateTimePicker1: TDateTimePicker;RadioButton6: TRadioButton;Label1: TLabel;Label2: TLabel;DateTimePicker2: TDateTimePicker;DBGrid3: TDBGrid;ADOQuery2: TADOQuery;

DataSource4: TDataSource;Button1: TButton;Button2: TButton;

35

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 36/50

Button3: TButton;ADOQuery3: TADOQuery;DataSource5: TDataSource;DBGrid4: TDBGrid;DBGrid5: TDBGrid;ADOQuery4: TADOQuery;

DataSource6: TDataSource;Button4: TButton;Button5: TButton;ADOTable1: TADOTable;DataSource1: TDataSource;DBGrid6: TDBGrid;DataSource7: TDataSource;ADOQuery5: TADOQuery;GroupBox3: TGroupBox;RadioButton7: TRadioButton;RadioButton8: TRadioButton;

GroupBox4: TGroupBox;RadioButton9: TRadioButton;RadioButton10: TRadioButton;RadioButton11: TRadioButton;RadioButton12: TRadioButton;Button6: TButton;Button7: TButton;ADOTable3: TADOTable;ADOTable3CodDriver: TAutoIncField;ADOTable3SecondNameDriver: TWideStringField;ADOTable3FirstNameDriver: TWideStringField;ADOTable3PatronymicDriver: TWideStringField;ADOTable3SerialPassportDriver: TIntegerField;ADOTable3NumPassportDriver: TIntegerField;ADOTable3INNDriver: TBCDField;ADOTable3PhoneDriver: TBCDField;ADOTable3AdressDriver: TWideStringField;ADOTable3NumSaveDocDriver: TWideStringField;ADOTable3NumDriveDoc: TWideStringField;ADOTable3NumCarDriver: TWideStringField;ADOTable3CodStatusOfDriver: TIntegerField;

Button8: TButton;ADOTable1CodOrder: TAutoIncField;ADOTable1CodClient: TIntegerField;ADOTable1AdressStartPoint: TWideStringField;ADOTable1AdressFinishPoint: TWideStringField;ADOTable1DataStartOrder: TWideStringField;ADOTable1DataFinishOrder: TWideStringField;ADOTable1CodDriver: TIntegerField;ADOTable1PriceOfOrder: TBCDField;ADOTable1CodStatusOfOrder: TIntegerField;ADOTable1DataOfOrder: TWideStringField;

ADOQuery2CodOrder: TAutoIncField;ADOQuery2SecondNameClient: TWideStringField;ADOQuery2FirstNameClient: TWideStringField;

36

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 37/50

ADOQuery2AdressStartPoint: TWideStringField;ADOQuery2AdressFinishPoint: TWideStringField;ADOQuery2DataStartOrder: TWideStringField;ADOQuery2DataFinishOrder: TWideStringField;ADOQuery2SecondNameDriver: TWideStringField;ADOQuery2FirstNameDriver: TWideStringField;

ADOQuery2PriceOfOrder: TBCDField;ADOQuery2DataOfOrder: TWideStringField;ADOQuery2StatusOfOrder: TWideStringField;ADOQuery2CodDriver: TIntegerField;RvProject1: TRvProject;RvSystem1: TRvSystem;RvDataSetConnection1: TRvDataSetConnection;Button9: TButton;Button10: TButton;RvDataSetConnection2: TRvDataSetConnection;procedure Timer1Timer(Sender: TObject);

procedure FormActivate(Sender: TObject);procedure RadioButton1Click(Sender: TObject);procedure RadioButton2Click(Sender: TObject);procedure RadioButton3Click(Sender: TObject);procedure RadioButton4Click(Sender: TObject);procedure RadioButton5Click(Sender: TObject);procedure RadioButton6Click(Sender: TObject);procedure Button2Click(Sender: TObject);procedure Button4Click(Sender: TObject);procedure Button5Click(Sender: TObject);procedure Button1Click(Sender: TObject);procedure RadioButton7Click(Sender: TObject);procedure RadioButton8Click(Sender: TObject);procedure RadioButton9Click(Sender: TObject);procedure RadioButton10Click(Sender: TObject);procedure RadioButton11Click(Sender: TObject);procedure RadioButton12Click(Sender: TObject);procedure Button6Click(Sender: TObject);procedure Button7Click(Sender: TObject);procedure Button8Click(Sender: TObject);procedure Button3Click(Sender: TObject);

procedure Button9Click(Sender: TObject);procedure Button10Click(Sender: TObject);private{ Private declarations }

public{ Public declarations }

end;

var Form1: TForm1;Year, Month, Day, YearS, MonthS, DayS,YearF, MonthF, DayF:word;

CurrDate,StartDate,FinishDate:string;implementation

37

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 38/50

uses Unit2, Unit3;

{$R *.dfm}

 procedure TForm1.Timer1Timer(Sender: TObject); begin

Edit1.Text:=('Текущая дата:'+DateToStr(Now));Edit2.Text:=('Время:'+TimeToStr(Now));DBGrid1.Columns[9].Width:=66;end;

 procedure TForm1.FormActivate(Sender: TObject); beginDecodeDate(Now, Year, Month, Day);//Считывание текущей даты и её форматированиеCurrDate:=IntToStr(Year)+'-'+IntToStr(Month)+'-'+IntToStr(Day);//под БД SQL Server ADOQuery1.Active:=True;//Включение всех запросовADOTable2.Sort:='SecondNameClient';

ADOQuery2.Active:=True;ADOQuery3.Active:=True;ADOQuery4.Active:=True;ADOQuery5.Active:=True;ADOQuery3.Filter:='DataOfOrder='+CurrDate;//Включение фильтра на отображениеADOQuery3.Filtered:=True; //заказов на сегодняшний деньADOQuery4.Filter:='DataOfOrder='+CurrDate;ADOQuery4.Filtered:=True;end;

//Отображение всех клиентов procedure TForm1.RadioButton1Click(Sender: TObject); beginif RadioButton1.Checked=True then

 beginADOTable2.Filtered:=False;RadioButton2.Checked:=False;RadioButton3.Checked:=False;Button4.Enabled:=True;Button5.Enabled:=True;end;

end;

//Отображение клиентов вне черного списка procedure TForm1.RadioButton2Click(Sender: TObject); beginif RadioButton2.Checked=True then

 beginADOTable2.Filtered:=False;RadioButton1.Checked:=False;RadioButton3.Checked:=False;ADOTable2.Filter:='BlackListStatus<1';

ADOTable2.Filtered:=True;Button4.Enabled:=True;Button5.Enabled:=False;

38

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 39/50

end;end;

//Отображение черного списка клиентов procedure TForm1.RadioButton3Click(Sender: TObject); begin

if RadioButton3.Checked=True then beginADOTable2.Filtered:=False;RadioButton1.Checked:=False;RadioButton2.Checked:=False;ADOTable2.Filter:='BlackListStatus>0';ADOTable2.Filtered:=True;Button4.Enabled:=False;Button5.Enabled:=True;end;end;

//Отображение заказов на сегодня procedure TForm1.RadioButton4Click(Sender: TObject); beginif RadioButton4.Checked=True then

 beginRadioButton5.Checked:=False;RadioButton6.Checked:=False;ADOQuery1.Filtered:=False;ADOQuery1.Filter:='DataOfOrder='+CurrDate;//Фильтрация по текущей датеADOQuery1.Filtered:=True;end;

end;

//Отображение заказов за все время работы такси procedure TForm1.RadioButton5Click(Sender: TObject); beginif RadioButton5.Checked=True then

 beginRadioButton4.Checked:=False;

RadioButton6.Checked:=False;ADOQuery1.Filtered:=False;end;end;

//Отображение заказов за указанный период procedure TForm1.RadioButton6Click(Sender: TObject); beginif RadioButton6.Checked=True then

 beginif DateTimePicker1.DateTime>DateTimePicker2.DateTime then

ShowMessage('Дата конечного значения не должна превышать начальное!') else beginDecodeDate(DateTimePicker1.Date, YearS, MonthS, DayS);//Считывание начала

39

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 40/50

DecodeDate(DateTimePicker2.Date, YearF, MonthF, DayF);//временного отрезка и концаStartDate:=IntToStr(YearS)+'-'+IntToStr(MonthS)+'-'+IntToStr(DayS);//Форматирование датыкакFinishDate:=IntToStr(YearF)+'-'+IntToStr(MonthF)+'-'+IntToStr(DayF);//в MSSQL Server 2008RadioButton4.Checked:=False;

RadioButton5.Checked:=False;ADOQuery1.Filtered:=False;ADOQuery1.Filter:='(DataOfOrder>='+StartDate+') and (DataOfOrder<'+FinishDate+')';ADOQuery1.Filtered:=True;end;end;end;

//Заказ выполнен procedure TForm1.Button2Click(Sender: TObject); begin

ADOTable1.Filter:='CodOrder='+InttoStr(ADOQuery2.FieldValues['CodOrder']);ADOTable1.Filtered:=True;//Выбор активного заказаADOTable1.Edit;//Изменение данных в заказеADOTable1.FieldByName('DataFinishOrder').AsString:=TimeToStr(Now);//Времязавершения заказаADOTable1.FieldByName('CodStatusOfOrder').AsInteger:=5;//Статус: ВыполненADOTable1.Post;ADOTable1.Filtered:=False;ADOTable3.Filter:='CodDriver='+InttoStr(ADOQuery2.FieldValues['CodDriver']);ADOTable3.Filtered:=True;//Выбор водителя, выполнявшего заказADOTable3.Edit;ADOTable3.FieldByName('CodStatusOfDriver').AsInteger:=2;//Водитель свободенADOTable3.Post;ADOTable3.Filtered:=False;ADOQuery2.Active:=False;//Перезагрузка таблиц запросовADOQuery2.Active:=True;ADOQuery1.Active:=False;ADOQuery1.Active:=True;ADOQuery3.Active:=False;ADOQuery3.Active:=True;ADOQuery5.Active:=False;

ADOQuery5.Active:=True;end;

//Заказ не выполнен procedure TForm1.Button3Click(Sender: TObject); beginADOTable1.Filter:='CodOrder='+InttoStr(ADOQuery2.FieldValues['CodOrder']);ADOTable1.Filtered:=True;//Выбор активного заказаADOTable1.Edit;ADOTable1.FieldByName('DataFinishOrder').AsString:=TimeToStr(Now);//Времязавершения заказа

ADOTable1.FieldByName('CodStatusOfOrder').AsInteger:=6;//Статус: НевыполненADOTable1.FieldByName('PriceOfOrder').AsInteger:=0;//Стоимость обнуляетсяADOTable1.Post;

40

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 41/50

ADOTable1.Filtered:=False;ADOTable3.Filter:='CodDriver='+InttoStr(ADOQuery2.FieldValues['CodDriver']);ADOTable3.Filtered:=True;//Выбор водителя, выполняющего заказADOTable3.Edit;ADOTable3.FieldByName('CodStatusOfDriver').AsInteger:=2;//Водитель свободенADOTable3.Post;

ADOTable3.Filtered:=False;ADOQuery2.Active:=False;//Перезагрузка таблиц запросовADOQuery2.Active:=True;ADOQuery1.Active:=False;ADOQuery1.Active:=True;ADOQuery4.Active:=False;ADOQuery4.Active:=True;ADOQuery5.Active:=False;ADOQuery5.Active:=True;end;

//Добавление клиента в черный список procedure TForm1.Button4Click(Sender: TObject); beginif ADOTable2.FieldByName('BlackListStatus').AsBoolean=False then

beginADOTable2.Edit;ADOTable2.FieldByName('BlackListStatus').AsBoolean:=True;ADOTable2.Post;end

elseShowMessage('Клиент уже в черном списке.');

end;

//Убрать клиента из черного списка procedure TForm1.Button5Click(Sender: TObject); beginif ADOTable2.FieldByName('BlackListStatus').AsBoolean=True then

beginADOTable2.Edit;ADOTable2.FieldByName('BlackListStatus').AsBoolean:=False;ADOTable2.Post;

endelseShowMessage('Клиент вне черного списка.');

end;

//Формирование нового заказа procedure TForm1.Button1Click(Sender: TObject); beginForm2.ShowModal; //Открытие формы создания заказаADOQuery1.Active:=False; //Перезагрузка таблиц и запросовADOQuery1.Active:=True; //после закрытия формы

ADOQuery2.Active:=False;ADOQuery2.Active:=True;ADOQuery3.Active:=False;

41

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 42/50

ADOQuery3.Active:=True;ADOQuery4.Active:=False;ADOQuery4.Active:=True;ADOQuery5.Active:=False;ADOQuery5.Active:=True;ADOTable1.Active:=False;

ADOTable1.Active:=True;ADOTable2.Active:=False;ADOTable2.Active:=True;ADOTable3.Active:=False;ADOTable3.Active:=True;end;

//Отображение подробных сведений о водителях procedure TForm1.RadioButton7Click(Sender: TObject); beginif RadioButton7.Checked=True then

 beginRadioButton8.Checked:=False;DBGrid6.Columns[4].Visible:=True;DBGrid6.Columns[5].Visible:=True;DBGrid6.Columns[6].Visible:=True;DBGrid6.Columns[7].Visible:=True;DBGrid6.Columns[8].Visible:=True;DBGrid6.Columns[9].Visible:=True;DBGrid6.Columns[10].Visible:=True;DBGrid6.Columns[11].Visible:=True;end;end;

//Отображение кратких сведений о водителях procedure TForm1.RadioButton8Click(Sender: TObject); beginif RadioButton8.Checked=True then

 beginRadioButton7.Checked:=False;DBGrid6.Columns[4].Visible:=False;DBGrid6.Columns[5].Visible:=False;

DBGrid6.Columns[6].Visible:=False;DBGrid6.Columns[7].Visible:=False;DBGrid6.Columns[8].Visible:=False;DBGrid6.Columns[9].Visible:=False;DBGrid6.Columns[10].Visible:=False;DBGrid6.Columns[11].Visible:=False;end;end;

//Отображение всех водителей procedure TForm1.RadioButton9Click(Sender: TObject);

 beginif RadioButton9.Checked=True then

 begin

42

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 43/50

Button6.Enabled:=True;Button7.Enabled:=True;ADOQuery5.Filtered:=False;RadioButton10.Checked:=False;RadioButton11.Checked:=False;RadioButton12.Checked:=False;

end;end;

//Отображение свободных водителей procedure TForm1.RadioButton10Click(Sender: TObject); beginif RadioButton10.Checked=True then

 beginButton6.Enabled:=False;Button7.Enabled:=True;ADOQuery5.Filtered:=False;

RadioButton9.Checked:=False;RadioButton11.Checked:=False;RadioButton12.Checked:=False;ADOQuery5.Filter:='CodStatusOfDriver=2';ADOQuery5.Filtered:=True;end;end;

//Отображение занятых водителей procedure TForm1.RadioButton11Click(Sender: TObject); beginif RadioButton11.Checked=True then

 beginButton6.Enabled:=False;Button7.Enabled:=False;ADOQuery5.Filtered:=False;RadioButton10.Checked:=False;RadioButton9.Checked:=False;RadioButton12.Checked:=False;ADOQuery5.Filter:='CodStatusOfDriver=3';ADOQuery5.Filtered:=True;

end;end;

//Отображение водителей не на смене procedure TForm1.RadioButton12Click(Sender: TObject); beginif RadioButton12.Checked=True then

 beginButton6.Enabled:=True;Button7.Enabled:=False;ADOQuery5.Filtered:=False;

RadioButton9.Checked:=False;RadioButton11.Checked:=False;RadioButton10.Checked:=False;

43

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 44/50

ADOQuery5.Filter:='CodStatusOfDriver=1';ADOQuery5.Filtered:=True;end;end;

//Отметить водителя, поступившего на смену

 procedure TForm1.Button6Click(Sender: TObject); beginADOTable3.Filter:='CodDriver='+InttoStr(ADOQuery5.FieldValues['CodDriver']);ADOTable3.Filtered:=True;if ADOTable3.FieldByName('CodStatusOfDriver').AsInteger=1 then

beginADOTable3.Edit;ADOTable3.FieldByName('CodStatusOfDriver').AsInteger:=2;ADOTable3.Post;ADOTable3.Filtered:=False;ADOQuery5.Active:=False;

ADOQuery5.Active:=True;end

elsebeginADOTable3.Filtered:=False;ShowMessage('Водитель на смене.');end;

end;

//Отметить водителя, ушедшего со смены procedure TForm1.Button7Click(Sender: TObject); beginADOTable3.Filter:='CodDriver='+InttoStr(ADOQuery5.FieldValues['CodDriver']);ADOTable3.Filtered:=True;if ADOTable3.FieldByName('CodStatusOfDriver').AsInteger=2 then

beginADOTable3.Edit;ADOTable3.FieldByName('CodStatusOfDriver').AsInteger:=1;ADOTable3.Post;ADOTable3.Filtered:=False;ADOQuery5.Active:=False;

ADOQuery5.Active:=True;endelse

beginADOTable3.Filtered:=False;ShowMessage('Водитель занят или уже вышел со смены.');end;

end;

//Открытие формы добавления клиента procedure TForm1.Button8Click(Sender: TObject);

 beginForm3.ShowModal;Form2.ADOTable1.Active:=False;//Перезагрузка таблицы с клиентами

44

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 45/50

Form2.ADOTable1.Active:=True;end;

 procedure TForm1.Button9Click(Sender: TObject); beginRvProject1.Close;//Закрытие активного отчета

RvProject1.ProjectFile:='CompleteOrders.rav';//Отчет "Выполненные заказы"RvProject1.Open;//Открытие отчетаRvSystem1.DefaultDest:=rdPreview;//в режиме просмотраRvProject1.Execute;//Запуск отчетаend;

 procedure TForm1.Button10Click(Sender: TObject); beginRvProject1.Close;RvProject1.ProjectFile:='FailedOrders.rav';//Отчет "Невыполненные заказы"RvProject1.Open;

RvSystem1.DefaultDest:=rdPreview;RvProject1.Execute;end;

end.

45

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 46/50

Приложение 2. Программный код модуля формы формирования нового

заказа (Unit 2)

unit Unit2;

interface

usesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, DB, Grids, DBGrids, ADODB, StdCtrls;

typeTForm2 = class(TForm)ADOTable1: TADOTable;DBGrid1: TDBGrid;DataSource1: TDataSource;Label1: TLabel;Label2: TLabel;Edit1: TEdit;Label3: TLabel;Edit2: TEdit;Button1: TButton;Label4: TLabel;ADOTable2: TADOTable;DataSource2: TDataSource;

DBGrid2: TDBGrid;Edit3: TEdit;Edit4: TEdit;Label5: TLabel;Label6: TLabel;Edit5: TEdit;Label7: TLabel;Button2: TButton;ADOTable1CodClient: TAutoIncField;ADOTable1SecondNameClient: TWideStringField;ADOTable1FirstNameClient: TWideStringField;

ADOTable1PatronymicClient: TWideStringField;ADOTable1PhoneClient: TBCDField;ADOTable1BlackListStatus: TBooleanField;Button3: TButton;procedure FormActivate(Sender: TObject);procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);procedure Button3Click(Sender: TObject);procedure Edit5KeyPress(Sender: TObject; var Key: Char);

private{ Private declarations }

public{ Public declarations }

end;

46

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 47/50

var Form2: TForm2;

implementation

uses Unit3, Unit1;

{$R *.dfm}

 procedure TForm2.FormActivate(Sender: TObject); beginEdit5.Text:='0';Form1.ADOTable3.Active:=False;Form1.ADOTable3.Active:=True;ADOTable2.Active:=False;ADOTable2.Active:=True;ADOTable2.Filtered:=False;

ADOTable2.Filtered:=True;Edit1.Text:='';Edit2.Text:='';Edit3.Text:=(TimeToStr(Now));Edit4.Text:=(DateToStr(Now));end;

//Открытие формы добавления клиента procedure TForm2.Button1Click(Sender: TObject); beginForm3.ShowModal;end;

//Формирование заказа procedure TForm2.Button2Click(Sender: TObject); beginif (Edit1.Text='') or (Edit2.Text='') or (Edit5.Text='0')thenShowMessage('Имеются пустые поля или не указана цена заказа!')else beginForm1.ADOTable1.Append;

Form1.ADOTable1.FieldByName('CodClient').AsString:=ADOTable1.FieldValues['CodClient'];Form1.ADOTable1.FieldByName('AdressStartPoint').AsString:=Edit1.Text;Form1.ADOTable1.FieldByName('AdressFinishPoint').AsString:=Edit2.Text;Form1.ADOTable1.FieldByName('DataStartOrder').AsString:=Edit3.Text;Form1.ADOTable1.FieldByName('DataFinishOrder').AsString:='00:00:00';Form1.ADOTable1.FieldByName('CodDriver').AsString:=ADOTable2.FieldValues['CodDriver'];Form1.ADOTable1.FieldByName('PriceOfOrder').AsFloat:=StrToFloat(Edit5.Text);Form1.ADOTable1.FieldByName('CodStatusOfOrder').AsInteger:=4;Form1.ADOTable1.FieldByName('DataOfOrder').AsDateTime:=StrToDate(Edit4.Text);Form1.ADOTable1.Post;

ADOTable2.Edit;ADOTable2.FieldByName('CodStatusOfDriver').AsInteger:=3;ADOTable2.Post;

47

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 48/50

Form2.Close;end;end;

//Отмена заказа procedure TForm2.Button3Click(Sender: TObject);

 beginForm2.Close;end;

//Процедура, не позволяющая вводить символы кроме чисел procedure TForm2.Edit5KeyPress(Sender: TObject; var Key: Char); begincase Key of 

'0'..'9', #8:;#13: Button1.Click;',': //ловим десятичный разделитель

beginKey:=DecimalSeparator;if pos(DecimalSeparator, Edit1.Text)<>0 then //проверяем есть ли он уже в полеKey:=Chr(0); //запрещаем ввод символа

end;else Key:=Chr(0);

end;end;end.

48

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 49/50

Приложение 3. Программный код модуля формы добавления нового

клиента (Unit 2)

unit Unit3;

interface

usesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;

typeTForm3 = class(TForm)Edit1: TEdit;Edit2: TEdit;Edit4: TEdit;Label1: TLabel;Label2: TLabel;Label3: TLabel;Label4: TLabel;Edit3: TEdit;Button1: TButton;Button2: TButton;procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);

procedure Edit4KeyPress(Sender: TObject; var Key: Char);private{ Private declarations }

public{ Public declarations }

end;

var Form3: TForm3;

implementation

uses Unit2, Unit1;

{$R *.dfm}

//Добавление клиента procedure TForm3.Button1Click(Sender: TObject); beginif (Edit1.Text='') or (Edit2.Text='') or (Edit3.Text='') or (Edit4.Text='')thenShowMessage('Имеются пустые поля!')

else beginForm2.ADOTable1.Append;Form2.ADOTable1.FieldByName('SecondNameClient').AsString:=Edit1.Text;

49

7/16/2019 Курсовая NEW

http://slidepdf.com/reader/full/-new55cf9dec550346d033afdda3 50/50

Form2.ADOTable1.FieldByName('FirstNameClient').AsString:=Edit2.Text;Form2.ADOTable1.FieldByName('PatronymicClient').AsString:=Edit3.Text;Form2.ADOTable1.FieldByName('PhoneClient').AsInteger:=StrToInt(Edit4.Text);Form2.ADOTable1.FieldByName('BlackListStatus').AsBoolean:=False;Form2.ADOTable1.Post;Form1.ADOTable2.Active:=False;

Form1.ADOTable2.Active:=True;Form1.ADOTable2.Sort:='SecondNameClient';Form3.Close;end;end;

//Отмена ввода procedure TForm3.Button2Click(Sender: TObject); beginForm3.Close;end;

//Процедура, не позволяющая вводить символы кроме чисел procedure TForm3.Edit4KeyPress(Sender: TObject; var Key: Char); begin

case Key of '0'..'9', #8:;#13: Button1.Click;',': //ловим десятичный разделительbeginKey:=DecimalSeparator;if pos(DecimalSeparator, Edit1.Text)<>0 then //проверяем есть ли он уже в полеKey:=Chr(0); //запрещаем ввод символа

end;else Key:=Chr(0);

end;end;end.