close

Вход

Забыли?

вход по аккаунту

Такмаков Андрей Евгеньевич. Разработка системы информационной поддержки взаимодействия грузоперевозчиков с заказчиками

код для вставки
Powered by TCPDF (www.tcpdf.org)
АННОТАЦИЯ
ВКР 72 с., 35 рис., 1 табл., 10 источников, 1 прил.
ИНФОРМАЦИОННАЯ
СИСТЕМА,
АВТОТРАНСПОРТ,
ЗАКАЗЧИК,
ИСПОЛНИТЕЛЬ, ВЗАИМОДЕЙСТВИЕ, ЗАКАЗ, УСЛУГА
Выпускная квалификационная работа посвящена разработке системы
поддержки взаимодействия заказчиков и исполнителей при грузоперевозках.
В первой главе описывается предметная область взаимодействия заказчиков
и исполнителей при грузоперевозках, описываются бизнес-процессы
происходящие при грузоперевозках, производится сравнение разрабатываемой
системы с аналогами, формулируются требования к системе, ставится задача,
производится обзор инструментов разработки системы и описание структуры
системы.
Во второй главе производится концептуальное моделирование базы данных,
разработка основных алгоритмов обработки данных и разработка логики диалога
с пользователем.
В третьей главе производится описание основных возможностей системы.
Производится описание интерфейса и демонстрация работы системы.
(подпись)
4
СОДЕРЖАНИЕ
ВВЕДЕНИЕ
6
1 ОПИСАНИЕ ВЗАИМОДЕЙСТВИЯ ЗАКАЗЧИКОВ И ИСПОЛНИТЕЛЕЙ ПРИ
ГРУЗОПЕРЕВОЗКАХ
8
1.1 Описание предметной области взаимодействия заказчиков и исполнителей
при грузоперевозках
8
1.2 Описание бизнес-процессов происходящих при взаимодействии заказчиков и
исполнителей при грузоперевозках
14
1.3 Обзор и сравнение с аналогами
24
1.4 Постановка задачи
29
1.5 Разработка требований к системе
30
1.6 Обзор инструментов разработки системы поддержки взаимодействия
заказчиков и исполнителей при грузоперевозках
32
1.7 Описание структуры информационной системы поддержки взаимодействия
заказчиков и исполнителей при грузоперевозках
37
2 ПРОЕКТИРОВАНИЕ СИСТЕМЫ ПОДДЕРЖКИ ВЗАИМОДЕЙСТВИЯ
ЗАКАЗЧИКОВ И ИСПОЛНИТЕЛЕЙ ПРИ ГРУЗОПЕРЕВОЗКАХ
38
2.1 Проектирование базы данных
39
2.2 Разработка алгоритмов обработки данных
43
2.3 Описание логики диалога с пользователем
52
3 ОПИСАНИЕ ОСНОВНЫХ ВОЗМОЖНОСТЕЙ СИСТЕМЫ ПОДДЕРЖКИ
ВЗАИМОДЕЙСТВИЯ ЗАКАЗЧИКОВ И ИСПОЛНИТЕЛЕЙ ПРИ
ГРУЗОПЕРЕВОЗКАХ
55
3.1 Описание пользовательского интерфейса разрабатываемой системы
55
3.2 Демонстрация работы программы
59
ЗАКЛЮЧЕНИЕ
63
СПИСОК ЛИТЕРАТУРЫ
64
ПРИЛОЖЕНИЕ А (ОБЯЗАТЕЛЬНОЕ) ЛИСТИНГ ПРОГРАММЫ
65
5
УДОСТОВЕРЯЮЩИЙ ЛИСТ № 140034/П
ОШИБКА! ЗАКЛАДКА НЕ
ОПРЕДЕЛЕНА.
ИНФОРМАЦИОННО-ПОИСКОВАЯ ХАРАКТЕРИСТИКА ДОКУМЕНТА НА
ИНФОРМАЦИОННОМ НОСИТЕЛЕ
ОПРЕДЕЛЕНА.
ОШИБКА! ЗАКЛАДКА НЕ
6
ВВЕДЕНИЕ
В современном мире человечество не может представить жизнь без
транспорта. Транспорт является одной из важнейших составных частей денежной
базы экономики каждой страны. Он с давних времен считается двигателем
прогресса. Человек пользовался любыми подручными средствами с целью
перевозки грузов и людей. После изобретения колеса, а позже и двигателей
человечество начало развивать различные средства передвижения – кареты,
повозки, паровозы, пароходы, самолеты и т. д. Благодаря чему у людей появилась
возможность совершать поездки на огромные расстояния, преследуя разные цели.
В
современном
мире
транспортные
услуги
обеспечивают
повышение
эффективности общественного производства, нормальное функционирование
экономики. Они создают условия для рационального распределения по территории
страны производственных сил, учитывая самое целесообразное приближение к
районам потребления продукции и источникам сырья предприятий разных
отраслей экономики, что позволяет развиваться таким отраслям как сельское
хозяйство, торговля и остальным. Транспорт незаменим и для развития туризма.
Целью выпускной квалификационной работы является автоматизация
взаимодействия заказчиков и исполнителей при грузоперевозках.
Актуальностью данной разработки является то, что люди, желающие
перевезти
какой-либо
груз
сталкиваются
с
трудностями при
поиске
грузоперевозчиков или грузоперевозчики сталкиваются с трудностями поиска
клиентов.
Чтобы достичь поставленную цель, требуется решить следующие задачи:
1. Описать предметную область взаимодействия заказчиков и исполнителей
при грузоперевозках.
2. Описать бизнес-процессы, происходящие при грузоперевозках.
3. Разработать требования к системе.
7
4. Спроектировать базу данных.
5. Разработать алгоритмы обработки данных.
6. Описать логику диалога с пользователем.
7. Реализовать систему взаимодействия заказчиков и исполнителей при
грузоперевозках.
8. Произвести тестирование работы системы.
8
1 ОПИСАНИЕ ВЗАИМОДЕЙСТВИЯ ЗАКАЗЧИКОВ И
ИСПОЛНИТЕЛЕЙ ПРИ ГРУЗОПЕРЕВОЗКАХ
1.1
Описание предметной области взаимодействия заказчиков и
исполнителей при грузоперевозках
Предметной областью выпускной квалификационной работы является
процесс грузоперевозок. Грузоперевозки одна из необходимых услуг в обыденной
жизни. Любое предприятие, деятельность которого непосредственно связанна с
большими деньгами, будь то производство, оптовая либо широкая розничная сеть,
строит свой бизнес в грамотно выстроенной сети грузоперевозок. Своевременно
доставленный груз поддерживает в стабильность в процессе бизнеса. В случае если
в производство не будет своевременно доставлен хоть один элемент, то весь
процесс производства остановится и возникнут убытки. В той же оптовой либо
розничной сети недостаток определенного товара указывает прямой путь к
конкурентам. Покупателей совершенно не беспокоит, по какой причине
отсутствует необходимых товаров, им необходимо обладать ими.
Для транспортировки грузов торговые организации и предприятия
применяют как свой транспорт, так и автотранспорт общего использования, либо
принадлежащий другим организациям и предприятиям.
Торговые фирмы заключают с автохозяйствами контракты на перевозку
грузов, в которых устанавливаются количество и сроки перевозок, процедура
составления, представления и исполнения заказов на перевозку грузов, процедура
выполнения
погрузочно-разгрузочных
работ
и
сопровождения
товаров,
материальная ответственность, формируются наиболее выгодные и рациональные
формы, маршруты и схемы перевозок груза.
Перед началом каждого месяца утверждаются промежуточные задачи на
перевозку
грузов.
В
соответствии с
ними
грузоотправители обязаны
заблаговременно предоставлять автохозяйствам заказы на требуемое количество
автомобилей.
9
С учетом объема и характера предстоящих перевозок автохозяйства
выделяют автомобили соответствующих видов в нужном количестве. Они должны
быть исправными и чистыми. Подача их под погрузку должна реализовываться в
предписанное в заявке время.
Товары, представленные к транспортировке, должны быть соответствующим
образом подготовлены к транспортированию. Они должны быть предварительно
упакованы в инвентарную тару, взвешены, сгруппированы по получателям.
Заблаговременно должны быть также подготовлены товарно-транспортные
документы и счета-фактуры.
Перед выдачей груза, предназначенного для доставки, у шофера проводят
проверку наличие путевого листа и документа, подтверждающего личность. Прием
груза к перевозке с ответственностью автохозяйства за его сохранность
осуществляется путем взвешивания на весах при погрузке, замера в кузове
автомобиля или счета мест. Товары, запломбированные отправителем, водитель
принимает по количеству мест согласно счету-фактуре. Прием товаров к перевозке
удостоверяется подписью водителя на всех экземплярах товарно-транспортной
накладной.
Водитель или экспедитор, сопровождавший груз, сдает получателю его на
основании товарно-транспортной накладной по массе, количеству или объему.
Грузы, прибывшие в исправных крытых автомобилях, прицепах, контейнерах,
многооборотной таре, цистернах с исправными пломбами грузоотправителя,
выдают грузополучателю без проверки массы, состояния груза и количества мест.
При этом проверяется соблюдение условий перевозки грузов.
Получение товара удостоверяется подписью и штампом заказчика в товарнотранспортной накладной
и счете-фактуре.
Оплата
за перевозку грузов
осуществляется в соответствии с тарифами на перевозку грузов и другие услуги,
выполняемые автомобильным транспортом.
10
В зависимости от условий перевозок и вида услуг тарифы подразделяются
на:
- сдельные тарифы на перевозку грузов;
- тарифы на перевозку грузов на условиях платных автотонно-часов;
- тарифы за повременное использование грузовых автомобилей и из
покилометрового расчета;
- тарифы за перегон подвижного состава;
- надбавки и скидки;
- сборы за услуги, связанные с перевозками;
- договорные тарифы.
Сдельные тарифы применяются при условии предъявления заказчиком к
перевозке груза с указанием его общего количества, массы отправок, пункта
отправления и пункта назначения.
Тарифы на перевозку груза на условиях платных «автотонно-часов»
применяются при условии, если заказчик, кроме упомянутых выше сведений,
указал
требуемую
(согласованную
с
автотранспортным
предприятием)
грузоподъемность подвижного состава.
Тарифы за повременное пользование грузовыми автомобилями применяются
при предоставлении заказчику по его требованию автомобиля определенного типа
на определенное время.
За
пользование автомобилями могут
применяться
и
тарифы
из
покилометрового расчета. Их применяют при расчетах за подачу или возврат
автомобиля к пункту первой погрузки или от пункта последней разгрузки, если эти
пункты расположены за чертой населенного пункта, в котором расположено
автохозяйство. Кроме того, ими пользуются при расчетах за пробег автомобиля в
обоих направлениях, если перевозка не состоялась по вине заказчика, а также за
пробег автомобиля к месту работы вне места его постоянного пребывания сроком
свыше суток и при возвращении обратно.
11
Главная цель автотранспортных компаний - это исследование, анализ и
удовлетворение
потребностей
потребителя
в
абсолютно
всех
видах
автотранспортных услуг.
Совсем недавно автотранспортные фирмы выполняли исключительно
транспортировку грузов, никак не беспокоясь при этом о предоставлении иных
услуг.
Новые экономические условия расширили понятие «услуга транспорта». На
сегодняшний день под автотранспортной услугой предполагается не только лишь
непосредственно транспортировка грузов, переезд офиса и т.д., а каждая услуга, не
входящая в состав перевозочного процесса, однако связанная с его подготовкой и
исполнением.
К автотранспортным услугам относят:
- транспортировку грузов и пассажиров;
- погрузочно-выгрузочные работы;
- хранение грузов;
- квартирные и офисные переезды;
- грузовое такси;
- подготовка перевозимых средств;
- предоставление автомобилей в условиях аренды или же проката;
- доставку новых и отремонтированных автотранспортных средств;
- транспортно-экспедиционные услуги.
Основным типом услуг
транспортировка
груза.
К
на
предприятиях,
вспомогательным
конечно
услугам
же,
является
можно
отнести
маркетинговые, торговые, информационные, а также услуги страхования.
Существует классификация автотранспортных услуг. Услуги бывают
перевозочные (т.е.
включающие
в
том
или
ином
варианте
элемент
транспортировки) и не перевозочные сервисы. По типу потребителя, которому
предоставляется услуга, различают внешние (предоставляемые нетранспортным
предприятием)
автотранспорта).
и
По
внутренние
характеру
(предоставляемые
работы,
связанной
иным
с
предприятием
предоставлением
12
установленной
услуги,
выделяют
научно-технические,
коммерческие,
информационные и т.д.
С
точки
зрения
предприятий-поставщиков,
показатели
качества
автотранспортной услуги обязаны соответствовать главным условиям:
- способность обеспечения соответствия качества грузовых
транспортировок нуждам покупателей (физических и юридических лиц);
- быть стабильными;
- исключать взаимозаменяемость показателей при комплексной оценке
степени качества грузовых транспортировок;
- характеризовать все свойства грузовой перевозки, обуславливающие ее
пригодность
удовлетворять
определенные
потребности
потребителей
в
соответствии с ее назначением;
- способствовать повышению качества.
С точки зрения потребителей, ключевыми требованиями к услугам
автотранспорта являются следующие:
- охрана окружающей среды;
- рабочая готовность перевозчика;
- возможность специализированных транспортировок;
- функциональная пригодность автотранспортного средства;
- отсутствие промежуточных перегрузочных действий;
- наличие перегрузочного оборудования в пунктах перевалки;
- наличие необходимой автотранспортной тары;
- возможность получения правдивой информации о тарифах, условиях
транспортировки и расположении груза;
- возможность таможенной очистки;
- приемлемая стоимость услуг;
- доставки груза «от двери до двери»;
- надлежащее сопровождение груза;
- надлежащее документационное обеспечение;
- приспосабливаемость к требованиям клиентов (гибкость обслуживания);
13
- наличие различных уровней автотранспортного сервиса;
- наличие дополнительных услуг;
- удобства по приему и сдаче грузов;
- сохранность груза при доставке;
- защищенность транспортировок;
- оперативность доставки (гарантированные сроки доставки);
- регулярность доставки груза;
- минимальные сроки (длительность) доставки;
- безопасность перевозок;
- динамику изменения объемов перевозок;
- анализ изменения себестоимости транспортировок (с учетом амортизации);
- анализ изменения предыдущего планирования перевозок.
Для повышения качества перевозок предприятия должны проводить
периодические проверки качества оказываемых услуг. Как правило, здесь
используется анкетный метод опроса потребительских услуг, так как независимый
анализ позволяет объективно сопоставить соответствие заявленного качества
реальному.
Потребность в услугах автотранспорта во многом зависит от формирования
существующих в регионе типов транспорта, уровня их интеграции в единую
систему, уровня тарифов по типам автотранспорта, набора и качества услуг,
предоставляемых вероятным клиентам.
Значение транспортных услуг с развитием рыночной экономики и ее
инфраструктуры, как правило, возрастает, и это характерно практически для всех
стран. В связи с внедрением логистики в странах с рыночной экономикой
пересматривается политика в области транспорта.
Транспорт начинает играть ключевую роль в системе товародвижения.
Предполагается, что в дальнейшем технико-эксплуатационные особенности
отдельных видов транспорта обеспечат им устойчивое положение на рынке
транспортных услуг, особенно в условиях повышенного спроса на перевозки
грузов мелкими отправками, которые, в свою очередь, ускорят развитие
14
автоматизированной обработки грузов, контейнеризации и пакетизации, а также
информатики в области грузовой и перевозочной работы.
Просматриваются два направления в области организации транспортных
услуг:
1) обслуживание различных групп потребителей в соответствии с их
потребностями;
2) самостоятельный выбор потребителями услуг, их количества и характера
реализации;
3) активное формирование спроса на услуги транспорта с целью прибыльной
реализации уже имеющихся.
1.2 Описание бизнес-процессов происходящих при взаимодействии
заказчиков и исполнителей при грузоперевозках
Для полного представления протекающих процессов в системе былb
составлены диаграммы IDEF0 as is и to be. Диаграмма «AS IS», отражает то, что мы
имеем на текущий момент. На рисунке 1 мы видим контекстную диаграмму idef 0
«AS IS». На этой диаграмме мы видим блок «Доставить груз». На входе мы имеем:
- заявку на доставку груза;
- информацию о грузе;
- информацию о клиенте.
На выходе мы имеем:
- доставленный груз;
- документ, подтверждающий доставку груза.
Работой управляют:
- правила доставки груза;
- документы об определении стоимости;
- договоры.
Механизм управления персонал.
15
Рисунок 1 – Контекстная диаграмма idef0 as is
16
На рисунке 2 мы видим диаграмму idef0 as is. Здесь можно выделить четыре
блока:
1. Блок «Прием заказов»:
На входе мы имеем заявку на доставку груза. На выходе мы имеем
начальный и конечный пункты назначения. Работой управляют правила
перевозки грузов. Механизм управления персонал
2. Подсчет цены заказа. На входе мы имеем:
- информацию о грузе;
- начальный и конечный пункты назначения.
На выходе мы имеем цену заказа. Работой управляет документация об
определении стоимости. Механизм управления – персонал.
3. Составление договора о грузоперевозке. На входе мы имеем:
- цену заказа;
- информацию о клиенте.
На выходе мы имеем договор о грузоперевозке. Работой управляют
договоры. Механизм управления – персонал.
4. Отправка груза клиенту. На входе мы имеем договор на перевозку груза.
На выходе мы имеем:
- доставленный груз;
- документы, подтверждающие доставку.
Работой управляют правила перевозки грузов. Механизм управления –
персонал.
17
Рисунок 2 – Диаграмма idef0 as is
18
На рисунке 3 мы видим детализацию блока «Подсчет Цены». Здесь можно
выделить четыре блока:
1. Определение маршрута и расчет километража. На входе мы имеем
конечный и начальный пункты доставки. На выходе мы имеем километраж.
Работой управляет документация об определении стоимости. Механизм –
персонал.
2. Выбор транспортного средства. На входе мы имеем информацию о
грузе. На выходе мы имеем тип транспортного средства. Работой управляет
документация об определении стоимости. Механизм – персонал.
3. Расчет необходимого количества топлива. На входе мы имеем:
- километраж;
- тип транспортного средства.
Работой управляет документация об определении стоимости. Механизм
управления – персонал.
4. Расчет стоимости заказа. На входе мы имеем количество топлива. На
выходе мы получаем цену заказа. Работой управляют:
- километраж;
- документация об определении стоимости.
Механизм управления – персонал.
19
Рисунок 3 - Диаграмма idef0 as is. Детализация подсчета цены
20
На диаграмме видно, что для того, чтобы перевезти груз, заказчику и
исполнителю необходимо вручную выполнить несколько действий:
- подсчет стоимости;
- составление договора.
Этих действий относительно немного, но для их выполнения требуется
много времени.
Диаграмма idef0 «to be» используется для наглядного представления
процессов и информации этими процессами, начиная с контекстной диаграммы
представленной на рисунке 4. Здесь мы видим главный функциональный блок
доставить заказ. На входе мы имеем заявку на перевозку груза. На выходе мы
имеем заказ на доставку груза. Работой управляют:
- договоры;
- правила перевозки грузов;
- документация об определении стоимости.
Механизмы:
- заказчик;
- исполнитель;
- система.
Далее
происходит декомпозиция
процессов, пока
не
достигнут
необходимый уровень точности или пока процессы не станут тривиальными.
21
Рисунок 4 – Контекстная диаграмма idef0 to be
22
На рисунке 5 мы видим диаграмму idef0 «to be».
На нулевом уровне представлены три блока:
- обработка заявки;
- составление и подписание договора;
- Оформление заказа на перевозку.
На входе мы имеем:
- заявка на доставку груза;
- информация о клиенте, т.е. ФИО, адрес, телефон и т.д.;
- информация о грузе, т.е. масса груза, тип и т.д.
На выходе мы имеем выполняемый заказ на доставку груза и
документы,
сопровождающие груз. Работой управляют:
- правила перевозки грузов;
- документация об определении стоимости;
- договоры.
Основной механизмы:
- система;
- заказчик;
- исполнитель.
23
Рисунок 5 – Диаграмма idef0 to be
24
1.3 Обзор и сравнение с аналогами
StranaGruzov.ru – система поиска грузов для перевозки и автомобилей для
перевозки грузов.
Данная система позволяет производить поиск грузов для доставки и
автомобили для перевозки грузов по заданным критериям. StranaGruzov.ru
представляет собой настольное вэб-приложение с достаточно простым и
понятным интерфейсом. На рисунке 6 представлен пользовательский интерфейс
системы.
Рисунок 6 – Пользовательский интерфейс StranaGruzov.ru
На рисунке 7 мы видим экранную форму поиска. При поиске грузов система
предлагает ввести место отправки и назначения, время отправки и время
прибытия, массу, объем груза и способ погрузки. Её достоинствами являются:
- интуитивно понятный интерфейс;
- построение схемы маршрута.
Недостатками этой системы являются:
- отсутствие системы отзывов;
- невозможность сравнения стоимости заказов.
25
Рисунок 7 – Экранная форма «Результаты поиска StranaGruzov.ru»
Truck-Partner - система для перевозчиков, предоставляющая доступ к
простому, удобному поиску грузов и поиску транспорта для автомобильной
грузоперевозки по России и на международных направлениях. Она позволяет
производить поиск грузов для доставки, а также поиск автомобилей для перевозки
грузов.
Truck-Partner представляет собой настольное вэб-приложение, с достаточно
простым и удобным интерфейсом. На рисунке 8 мы видим интерфейс этой
системы.
Рисунок 8 – Пользовательский интерфейс Truck-Partner
26
При поиске грузов система предлагает пользователю ввести место отправки
и назначения, время отправки и время прибытия, массу и объем груза и способ
погрузки. Экранная форма этой системы показана на рисунке 9. Основными
минусами этой системы являются:
- невозможность сравнения цен;
- отсутствие системы отзывов.
Рисунок 9 – Экранная форма «Результаты поиска Truck-Partner»
Della
– система поиска грузов и транспорта для автомобильной
грузоперевозки по России и на международных направлениях.
Della представляет собой настольное вэб-приложение с достаточно
сложным интерфейсом, который представлен на рисунке 10.
Рисунок 10 – Пользовательский интерфейс Della
27
При поиске система предлагает ввести место погрузки и доставки груза,
время отправки и прибытия груза, характеристики груза и тип транспорта. На
рисунке 11 показана экранная форма поиска в Della.
Основным плюсом данной системы является возможность сравнения
стоимости заказов. Минусами этой системы являются:
- невозможность построения маршрутов;
- сложность интерфейса;
- отсутствие рейтинга.
Рисунок 11 – Экранная форма «Поиск Della»
АвтоТранс Инфо – это средство обмена информацией между заказчиками и
грузоперевозчиками. Представляет собой вэб приложение с достаточно сложным
интерфейсом. Одна из наиболее старых систем взаимодействия заказчиков и
исполнителей при грузоперевозках. На рисунке 12 представлен пользовательский
интерфейс данной системы.
Рисунок 12 – Пользовательский интерфейс АвтоТрансИнфо
28
На рисунке 13 мы видим экранную форму поиска в данной системе. При
поиске система требует ввести место отправки и доставки груза.
Рисунок 13 – Экранная форма «Поиск груза АТИ»
Основными достоинствами данной системы являются:
- простой и удобный интерфейс;
- возможность сравнения цен.
Недостатки:
- отсутствие рейтинга;
- невозможность построения схемы маршрута.
Разрабатываемая в выпускной квалификационной работе система, не
является заменой выше перечисленных аналогов. Система включает в себя самые
основные особенности и
уникальный
функционал
от
аналогов.
При
использовании данной системы пользователь может найти подходящий транспорт
для перевозки груза, или же найти подходящего клиента для доставки его груза.
29
Таблица 1 – Сравнение разрабатываемой системы с аналогами
+
+
-
+
Разрабатываемая
система
+
-
-
+
+
+
+
-
-
+
+
-
StranaGruzov.ru
Интуитивно
понятный
интерфейс
Сравнение
стоимости
заказов
Рейтинг
Построение
схемы
маршрута
TruckPartner
Della
АТИ
1.4 Постановка задачи
Разрабатываемая система должна позволять автоматизировать процесс
взаимодействия исполнителей и заказчиков, имеющих различные параметры и
взаимодействующих только в сфере грузоперевозок. Пользователями данной
системы могут быть как физические, так и юридические лица, которые, либо
специализируются в области грузоперевозок, либо заинтересованные в перевозке
того или иного груза. Пользователи данной системы, которые заинтересованы в
перевозке груза (заказчики), должны иметь возможность оставлять заказы на
перевозку груза или производить поиск услуг, оставленных грузоперевозчиками
(исполнителями),
а также
выставлять оценки
грузоперевозчиках. Грузоперевозчики, в
и оставлять отзывы о
свою очередь
должны
иметь
возможность принимать заказы и оставлять информацию об оказываемых
услугах. Также пользователи должны иметь возможность просматривать
информацию о заказе и подтверждать его доставку и получение.
Для этого требуется разработать и реализовать базу данных для хранения
информации о пользователях, заказах и текущем рейтинге. Это должна быть
реляционная база данных, хранящаяся на сервере.
Также необходимо разработать и реализовать основные алгоритмы
обработки данных такие, как:
30
1. Алгоритм поиска заказов;
2. Алгоритм добавления заказов;
3. Алгоритм поиска услуг;
4. Алгоритм добавления услуг;
5. Алгоритм принятия заказа к исполнению;
6. Алгоритм подтверждения выполнения заказа.
Необходимо разработать и реализовать интерфейс пользователя.
В результате мы должны получить систему, в которой заказчики и
исполнители смогут взаимодействовать между собой в сфере грузоперевозок.
1.5 Разработка требований к системе
Функциональные требования к системе:
1. Добавление заявок на перевозку груза.
2. Добавление услуг на перевозку груза.
3. Просмотр информации о заявках.
4. Просмотр информации об услугах.
5. Просмотр информации о исполнителях.
6. Просмотр информации о заказчиках.
7. Оформление заказа на перевозку груза.
8. Просмотр информации о статусе выполняемого заказа.
9. Выставление оценок и формирование отзывов.
Функция добавления заявки должна включать в себя заполнение таких полей
как:
- тип перевозимого груза;
- масса;
- адрес доставки;
- адрес погрузки;
- ориентировочная цена;
- сроки доставки;
31
Функция добавления услуги должна включать в себя заполнение таких полей
как:
- тип перевозимого груза;
- масса;
- адрес доставки;
- адрес погрузки;
- ориентировочная цена;
- сроки доставки.
Функция просмотра информации о заявках позволяет просматривать всю
необходимую информацию об оставленных заказчиками заявках.
Функция просмотра информации об услугах позволяет просматривать всю
необходимую информацию об оставленных исполнителями услугах.
Функция просмотра информации об исполнителях позволяет просматривать
всю необходимую информацию об исполнителях такую как контактный телефон,
адрес и т.д.
Функция просмотра информации о заказчиках позволяет просматривать всю
необходимую информацию о заказчиках.
Функция оформления заказа позволяет оформить заказ.
Функция просмотра статуса заказа позволяет узнать о том, выполнен ли
заказ.
Функция
выставления оценок и
формирования отзывов позволяет
пользователям оставлять об исполнителях отзывы и ставить им оценки.
Нефункциональные требования:
1. Система должна иметь интуитивно понятный интерфейс.
2. Система должна иметь поля, обязательные для заполнения. Если эти поля
остаются пустыми, должно появляться сообщение об ошибке.
3. Система должна быть надежной. Данные не должны теряться при
различных сбоях системы.
4. Система должна обладать настройками приватности для разграничения
доступа и защиты информации.
32
5. Система
должна
давать
возможность
одновременного доступа
различного количества пользователей.
6. Система должна обладать возможностью расширения при появлении
новых функциональных требований.
Нефункциональные требования к системе:
Пользователи программного обеспечения должны владеть базовыми
навыками работы с любой из версий операционной системы Microsoft Windows
(Windows XP, Vista, Windows 7, Windows 8/8.1, Windows 10). Техническое
обслуживание и администрирование оборудования программного обеспечения
должно
выполняться
специалистами,
имеющими
соответствующую
квалификацию и навыки выполнения работ. Пользователями данной системы
могут быть: компании и ИП, занимающиеся транспортировкой разных грузов,
юридические и физические лица, которым необходимо доставить тот или иной
груз.
1.6 Обзор инструментов разработки системы поддержки
взаимодействия заказчиков и исполнителей при грузоперевозках
Инструментальное программное обеспечение – программное обеспечение,
предназначенное для использования в ходе проектирования, разработки и
сопровождения программ.
Для реализации системы необходимы следующие типы программ:
- программа для построения диаграмм;
- текстовый редактор для написания кода;
- сервер для тестирования системы;
- интернет браузер.
Для построения диаграмм были использованы следующие средства:
Ramus — программный продукт в области управления знаниями
предприятия. Позволяет проводить описание, анализ и моделирование бизнеспроцессов, а также строить систему классификации и кодирования.
33
Поддерживает
стандартную
методологию
IDEF0
(функциональное
моделирование) и DFD. Позволяет связывать с деятельностью компании
практически любые объекты, таким образом реализуя системное сохранение
знаний о предприятии.
В качестве текстового редактора был использован notepad++. Notepad++ свободный текстовый редактор с открытым исходным кодом для Windows с
подсветкой синтаксиса большого количества языков программирования и
разметки. Поддерживает открытие более 100 форматов. Базируется на компоненте
Scintilla, написан на C++ с использованием STL, а также Windows API и
распространяется под лицензией GNU General
Public
License.
Базовая
функциональность программы может быть расширена как за счёт плагинов, так и
сторонних модулей, таких как компиляторы и препроцессоры.
Для тестирования системы мы применяем Apache HTTP-сервер. Apache
HTTP-сервер - свободный веб-сервер.
Apache является кроссплатформенным ПО, поддерживает операционные
системы Linux, BSD, Mac OS, Microsoft Windows, Novell NetWare, BeOS.
Основными достоинствами Apache считаются надёжность и гибкость
конфигурации. Он позволяет подключать внешние модули для предоставления
данных,
использовать
СУБД
для
аутентификации
пользователей,
модифицировать сообщения об ошибках и т. д. Поддерживает IPv6.
UML (англ. Unified
Modeling
Language
— унифицированный язык
моделирования) — язык графического описания для объектного моделирования в
области разработки программного обеспечения, моделирования биз неспроцессов, системного проектирования и отображения организационных
структур.
UML является языком широкого профиля, это — открытый стандарт,
использующий графические обозначения для создания абстрактной модели
системы, называемой UML-моделью. UML был создан для определения,
визуализации, проектирования и документирования, в основном, программных
34
систем. UML не является языком программирования, но на основании UMLмоделей возможна генерация кода.
При
разработке
системы
будут
использоваться
следующие
инструментальные средства:
1. HTML – стандартизированный язык разметки веб-страниц в сети
Интернет. Большинство веб-страниц содержат описание разметки на языке
HTML. Язык HTML интерпретируется браузерами, полученный в результате
интерпретации форматированный текст отображается на экране монитора
компьютера или мобильного устройства. Изначально язык HTML был задуман и
создан как средство структурирования и форматирования документов без их
привязки к средствам отображения. В идеале, текст с разметкой HTML должен
быть без стилистических и структурных искажений, отображаться на
оборудовании с различной технической оснащённостью (цветной экран
современного компьютера, монохромный экран органайзера, ограниченный по
размерам экран мобильного телефона или устройства и программы голосового
воспроизведения текстов). Однако современное применение HTML очень далеко
от его изначальной задачи. Например, тег <table> предназначен для создания в
документах таблиц, но иногда используется и для оформления размещения
элементов
на
странице.
С
течением
платформонезависимости языка HTML
времени
отпала
в
основная
пользу
идея
современным
потребностям в мультимедийном и графическом оформлении.
2. CSS – формальный язык описания внешнего вида веб-страницы,
написанной с использованием языка разметки. CSS используется разработчиками
веб-страниц для задания цветов, шрифтов, расположения отдельных блоков и
других элементов представления внешнего вида этих веб-страниц. Основной
целью разработки CSS являлось разделение описания логической структур ы вебстраницы (которое производится с помощью HTML или других языков разметки)
от описания внешнего вида этой веб-страницы (которое теперь производится с
помощью формального языка CSS). Такое разделение может увеличить
доступность документа, предоставить большую универсальность и возможность
35
управления его представлением, а также уменьшить сложность и повторяемость
в структурном содержимом. Кроме того, CSS позволяет представлять один и тот
же документ в различных стилях или методах вывода, таких как экранное
представление,
печатное
представление,
чтение
голосом (специальным
голосовым браузером или программой чтения с экрана), или при выводе
устройствами, использующими шрифт Брайля.
3. MySQL – свободная реляционная СУБД. MySQL является решением для
малых и средних приложений. Входит в состав серверов WAMP, AppServ, LAMP
и в портативные сборки серверов Денвер, XAMPP, VertrigoServ. Обычно MySQL
используется в качестве сервера, к которому обращаются локальные или
удалённые клиенты, однако в дистрибутив входит библиотека внутреннего
сервера, позволяющая включать MySQL в автономные программы. Гибкость
СУБД MySQL обеспечивается поддержкой большого количества типов таблиц:
пользователи могут выбрать как таблицы типа MyISAM, поддерживающие
полнотекстовый поиск, так и таблицы InnoDB, поддерживающие транзакции на
уровне отдельных записей. Более того, СУБД MySQL поставляется со
специальным типом таблиц EXAMPLE, демонстрирующим принципы создания
новых типов таблиц. Благодаря открытой архитектуре и GPL-лицензированию, в
СУБД MySQL постоянно появляются новые типы таблиц.
4. PHP – скриптовый язык общего назначения, применяемый для
разработки веб-приложений. В
настоящее
время язык поддерживается
подавляющим большинством хостинг-провайдеров и является одним из лидеров
среди языков для создания динамических веб-сайтов. PHP-скрипты обычно
обрабатываются
интерпретатором
в
порядке,
кроссплатформенность разработанного приложения:
обеспечивающем
лексический
анализ
исходного кода и генерация лексем, синтаксический анализ полученных лексем,
генерация байт-кода, выполнение байт-кода интерпретатором (без создания
исполняемого файла).
Для увеличения быстродействия приложений возможно использование
специального программного обеспечения, так называемых акселераторов.
36
Принцип их работы заключается в кэшировании однажды сгенерированного байткода в памяти и/или на диске, таким образом, из процесса работы приложения
исключаются этапы 1—3, что в общем случае ведёт к значительному ускорению
работы. Важной особенностью является то, что разработчику нет необходимости
заботиться о распределении и освобождении памяти. Ядро PHP реализует
средства для автоматического управления памятью; вся выделенная память
возвращается системе после завершения работы скрипта.
5. JavaScript – мультипарадигменный язык программирования. JavaScript
обычно используется как встраиваемый язык для программного доступа к
объектам приложений. Наиболее широкое применение находит в браузерах как
язык сценариев для придания веб-страницам интерактивности. JavaScript обычно
используется
как
встраиваемый
язык
для
программного
доступа
объектам приложений. Наиболее широкое применение находит в браузерах
к
как
язык сценариев для придания интерактивности веб-страницам.
6.
JQuery
–
это
JavaScript-библиотека,
которая
основана
на
взаимодействии JavaScript и HTML, обеспечивающая кроссбраузерную и
кроссплатформенную поддержку веб-приложений.
Точно так же, как CSS отделяет визуализацию от структуры HTML, JQuery
отделяет поведение от структуры HTML. Например, вместо прямого указания на
обработчике события нажатия кнопки управление передаётся JQuery, которая
идентифицирует кнопки и затем преобразует его в обработчик события клика.
Такое
разделение
поведения
и
структуры
также
называется
принципом ненавязчивого JavaScript.
Библиотека jQuery содержит функциональность, полезную для максимально
широкого круга задач. Тем не менее, разработчиками библиотеки не ставилась
задача совмещения в jQuery функций, которые подошли бы всюду, поскольку это
привело бы к большому коду, большая часть которого не востребована. Поэтому
была реализована архитектура компактного универсального ядра библиотеки и
37
плагинов. Это позволяет собрать для ресурса именно
ту
JavaScript-
функциональность, которая на нём была бы востребована.
1.7 Описание структуры информационной системы поддержки
взаимодействия заказчиков и исполнителей при грузоперевозках
Для
описания
основных возможностей разрабатываемой системы
используем нотацию UML. UML является языком широкого профиля это открытый
стандарт,
использующий
графические
обозначения
создания абстрактной модели системы, называемой UML-моделью.
для
В UML
используется набор графических нотаций – диаграмм. Одной из них является
диаграмма вариантов использования (диаграмма прецедентов).
Диаграмма прецедентов в UML – это диаграмма, которая отражает
отношения между акторами и прецедентами и является составной частью модели
прецедентов, позволяющей описать систему на концептуальном уровне.
Прецедент – это такая возможность моделируемой системы, с помощью
которой пользователь может получить конкретный и нужный ему результат.
Прецедент соответствует отдельному сервису системы, определяет один из
вариантов её использования и описывает типичный способ взаимодействия
пользователя с системой. Варианты использования обычно применяются для
спецификации внешних требований к системе. Они отображают внешний
интерфейс системы и указывают форму того, что система должна сделать.
Выделим 2 актора – «Заказчик» и «Исполнитель». Фигурант «Исполнитель»
после регистрации и авторизации может добавлять свои услуги, искать заказы,
оставленные «Заказчиками» и оформлять заказы. «Заказчик», также прошедший
регистрацию и авторизацию, может добавлять заказы, искать услуги,
добавленные «Исполнителями», оформлять заказ, выставлять оценки и оставлять
отзывы «Исполнителям». Диаграмма вариантов использования представлена на
рисунке 14.
38
Рисунок 14 – Диаграмма вариантов использования
39
2 ПРОЕКТИРОВАНИЕ СИСТЕМЫ ПОДДЕРЖКИ
ВЗАИМОДЕЙСТВИЯ ЗАКАЗЧИКОВ И ИСПОЛНИТЕЛЕЙ ПРИ
ГРУЗОПЕРЕВОЗКАХ
2.1 Проектирование базы данных
База данных - совокупность данных, организованных в соответствии с
концептуальной структурой, описывающей характеристики этих данных и
взаимоотношения между ними, причём такое собрание данных, которое
поддерживает одну или более областей применения.
Так как разрабатываемая система отвечает за вывод, хранение, поиск
информации о процессах грузоперевозок, то в базе данных будет хранится
информация о заказах, предложениях, исполнителях, заказчиках и о процессе
выполнения заказов.
Существует два уровня проектирования базы данных: логический и
физический. Логический уровень – это модель данных, в которой на логическом
уровне полностью описывается информационное содержание базы данных.
Физический уровень – определяет способ размещения данных на носителях, а
также способ и средства организации эффективного доступа к ним.
На рисунке 15 представлен логический уровень проектирования базы
данных.
Таблица «Заказы» содержит в себе информацию о заказах, оставленных
заказчиками:
1. idЗаказа – идентификационный номер конкретного заказа.
2. idПользователя – вторичный ключ, отражающий информацию
пользователе, выполняющем заказ.
3. Адрес загрузки – адрес начала пути.
4. Адрес доставки – адрес доставки груза.
5. Дата погрузки – время погрузки груза.
6. Дата доставки – время доставки груза.
40
Рисунок 15 – Логический уровень концептуальной схемы базы данных
Таблица «Транспорт» содержит в себе информацию об автомобилях,
принадлежащем исполнителю:
1. idТранспорт – идентификационный номер транспорта.
2. Максимальная грузоподъемность – масса груза, которую автомобиль
может везти.
3. Марка – марка автомобиля.
4. Модель – модель автомобиля.
5. idПользователя – вторичный ключ, отражающий информацию о
пользователе, владеющем данным автомобилем.
Таблица «Сведения о заказе» является связующей таблицей между
таблицами заказы и транспорт содержит в себе информацию о заказах, принятых
к исполнению:
1. idЗаказа – идентификационный номер заказа.
2. idТранспорта - идентификационный номер транспорта.
3. Масса груза – масса перевозимого груза.
4. Статус заказа – информация о выполнении заказа.
5. Стоимость заказа – стоимость заказа.
Таблица «Пользователи» содержит в информацию о пользователях:
1. idПользователя – идентификационный номер пользователя.
2. Тип пользователя – содержит информацию о том, кого представляет из
себя пользователь (заказчика или исполнителя).
3. Логин – логин пользователя, в разрабатываемой системе логином
является номер телефона пользователя.
4. Пароль – пароль пользователя.
Таблица «Пользователи» подразделяется на две категории:
«Физические лица» содержит информацию о физических лицах:
1. Фамилия – фамилия пользователя.
2. Имя – имя пользователя.
3. Отчество – отчество пользователя.
4. Номер и серия паспорта – паспортные данные пользователя.
5. Телефон – номер телефона пользователя.
6. Адрес – адрес пользователя.
7. Email – электронный почтовый ящик.
«Юридические лица» содержит информацию о юридических лицах:
1. Название компании – название предприятия.
2. ИНН – инн предприятия.
3. ФИО Руководителя – фамилия имя и отчество руководителя.
4. Адрес – юридический адрес компании.
5. Специализация – специализация предприятия.
6. Email – электронный почтовый ящик предприятия.
Таблица «Рейтинг» содержит отзывы и оценки, оставленные заказчиками о
водителях:
1. Исполнители_idИсполнители - идентификатор исполнителя.
2. Оценка – количество звезд, выставленное водителю.
3. Отзыв – отзыв, оставленный об исполнителе.
Между таблицами были установлены следующие связи.
Неидентифицирующая связь «1:м»:
- «Пользователи» и «Заказы», т.е. один пользователь может оставлять один
или несколько заказов;
- «Пользователи» и «Транспорт», т.е. один пользователь может иметь
несколько автомобилей;
- «Пользователи» и «Рейтинг», т.е. один пользователь может оставлять
несколько отзывов.
2) Связь «м:м»:
- «Заказы» и «Транспорт», связующей таблицей является «Сведения о
заказах», таким образом, для каждого товара указывается свой номер заказа и
номер транспорта. Первичный ключ для связующей таблицы создавался путем
объединения ключей из двух других таблиц.
Также для определения того, кем является пользователь (физическим или
юридическим лицом) была применена полная категория. Супертипом в данной
категории является таблица «Пользователи». Подтипами являются таблицы
«Физические лица» и «Юридические лица». Для того, чтобы различать подтипы
был введен атрибут-дискриминатор, которым является атрибут «Вид
пользователя».
2.2 Разработка алгоритмов обработки данных
Для функционирования разрабатываемой системы необходимо разработать
алгоритмы, которые будут выполнять большую работу по обеспечению
функциональности.
В данной системе применяется шесть алгоритмов:
1. Добавление заказа.
2. Добавление услуги.
3. Поиск заказа.
4. Поиск услуги.
5. Принятие заказа к исполнению
6. Подтверждение заказа
Опишем первый алгоритм, который приведен на рисунке 16. Данный
алгоритм состоит из следующих действий:
1. Ввод данных о заказе.
2. Условие наличия заказа в базе.
3. Добавление заказа.
Действие «Ввод данных о заказе» обеспечивает ввод пользователем груза,
который ему необходимо перевезти, сроки, адрес погрузки и доставки и
ориентировочную стоимость.
«Условие наличия заказа» проверяет наличие заказа в базе данных.
Действие «Добавить заказ» обеспечивает добавление заказа в базу.
Рисунок 16 – Схема алгоритма добавления заказа
Опишем второй алгоритм, который приведен на рисунке 17. Данный
алгоритм состоит из следующих действий:
1. Ввод данных об услуге.
2. Условие наличия услуги в базе.
3. Добавление услуги.
Действие «Ввод данных об услуге» обеспечивает ввод пользователем груза,
который ему необходимо перевезти, даты загрузки и доставки, адрес погрузки и
доставки и стоимость.
«Условие наличия услуги» проверяет наличие услуги в базе данных.
Действие «Добавить услугу» обеспечивает добавление услуги в базу.
Рисунок 17 – Схема алгоритма «Добавление услуги»
Опишем третий алгоритм «Поиск заказов». Данный алгоритм состоит из
следующих действий:
1. Ввод данных о заказе.
2. Обработка данных.
3. Условие корректного ввода данных.
4. Поиск заказов.
5. Условие нахождения заказов.
6. Вывод найденных заказов.
Действие «Ввод данных о заказе» позволяет пользователям ввести вид груза,
его массу и объем, место отправки и доставки, цену заказа.
Действие «Обработка данных» проверяет корректность введенных данных
«Условие корректного ввода данных» работает исходя из введенных данных.
Если данные введены корректно, то система продолжит работу далее к
следующему действию. В противном случае система попросит пользователя
проверить корректность введенных данных.
Действие «Поиск заказов» производит поиск заказов в базе данных по
введенным пользователем исходным данным
«Условие нахождения заказов» определяет нахождение заказов. Если заказы
найдены, то система перейдет к следующему действию. В противном случае она
сообщит пользователю о том, что заказов не найдено.
Действие «Вывод найденных заказов» выводит найденные заказы на экран.
Алгоритм «Поиск заказов» представлен на рисунке 18.
Рисунок 18 – Схема алгоритма поиска заказов
Опишем четвертый алгоритм «Поиск услуг» представленный на рисунке 19.
Данный алгоритм состоит из следующих действий:
1. Ввод данных об услуге.
2. Обработка данных.
3. Условие корректного ввода данных.
4. Поиск услуг.
5. Условие нахождения услуг.
6. Вывод найденных услуг.
Действие «Ввод данных об услуге» позволяет пользователям ввести вид
груза, его массу и объем, место отправки и доставки.
Действие «Обработка данных» проверяет корректность введенных данных
«Условие корректного ввода данных» работает исходя из введенных данных.
Если данные введены корректно, то система продолжит работу далее к
следующему действию. В противном случае система попросит пользователя
проверить корректность введенных данных.
Действие «Поиск услуг» производит поиск услуг в базе данных по введенным
пользователем исходным данным.
«Условие нахождения услуг» определяет нахождение услуг. Если услуги
найдены, то система перейдет к следующему действию. В противном случае она
сообщит пользователю о том, что услуг не найдено.
Действие «Вывод найденных услуг» выводит найденные услуги на экран.
Рисунок 19 – Схема алгоритма поиска услуг
Опишем пятый алгоритм «Принятие заказа к исполнению» представленный
на рисунке 20. Данный алгоритм состоит из следующих действий:
1. Выбрать заказ.
2. Условие выполнения заказа.
3. Принятие заказа.
Действие «Выбрать заказ» предлагает пользователю выбрать заказ из
списка добавленных заказов.
«Условие выполнения заказа»
работает
исходя
из
предпочтений
пользователя. Если исполнитель не может выполнить выбранный заказ по какимто причинам (неподходящее место или время отправки), то он может выбрать
другой заказ. Если же исполнитель может выполнить данный заказ, то он
выполняет действие «Принять заказ», т.е. принимает заказ к исполнению.
Рисунок 20 – Схема алгоритма принятия заказа к исполнению
Опишем алгоритм «Подтверждение заказа» представленный на рисунке 21.
Данный алгоритм состоит из следующих действий:
1. Выбрать исполняемый заказ.
2. Условие выполнения заказа.
3. Подтвердить заказ.
Действие «Выбрать исполняемый заказ» предлагает пользователю выбрать
выполняемый заказ.
«Условие выполнения заказа» работает исходя из информации о статусе
заказа. Если заказ не выполнен, то пользователь может выбрать другой заказ. Если
же заказ выполнен, то пользователь переходит к действию «Подтвердить заказ»,
т.е. подтверждает исполнение заказа.
Рисунок 21 – Схема алгоритма подтверждение выполнения заказа
2.3 Описание логики диалога с пользователем
Для удобства использования системы необходимо разработать логику
диалога с пользователем.
На рисунке 22 изображена логика диалога с исполнителем. Здесь
наблюдаются 5 состояний:
- S0 – стартовое окно приложения;
- S1 – окно «Поиск заявок»;
- S2 – результаты поиска заявок;
- S3 – окно добавления услуги;
- F – окно завершения работы программы.
При выполнении входа исполнителем в приложение система переходит в
состояние S0, в котором пользователь предлагается произвести поиск заявок или
добавить услугу. После нажатия кнопки «поиск заявок» система переходит в
состояние S1, в котором пользователю предлагается ввести критерии поиска.
После нажатия кнопки «поиск» система переходит в состояние S2, в котором
отображаются результаты поиска. После нажатия кнопки принять заказ система
переходит в состояние S0. Из состояния S0 после нажатия кнопки «добавить
услугу» система переходит в состояние S3, в котором пользователю предлагается
ввести данные об услуге. После нажатия кнопки «добавить» приложение
переходит в состояние S0. Из состояния S0 при нажатии кнопки «завершение
работы» приложение переходит в состояние F.
Рисунок 22 – Логика диалога с исполнителем при поиске заказов и
добавлении услуг
На рисунке 23 представлена логика диалога с заказчиком. Здесь мы видим 6
состояний:
- S0 – стартовое окно приложения;
- S1 – добавление заявки;
- S2 – поиск услуг;
- S3 – результаты поиска услуг;
- S4 – оформление заказа;
- F – завершение работы.
При выполнении входа пользователем в приложение, система переходит в
состояние S0, в котором ему предлагается либо добавить заявку, либо совершить
поиск услуг. При нажатии кнопки «добавить заказ» система переходит в
состояние S1, в котором пользователю предлагается ввести данные о заявке.
После нажатия кнопки добавить система переходит в состояние S0. Из состояния
S0 при нажатии кнопки «поиск услуг» система переходит в состояние S2, в
котором пользователю предлагается ввести критерии поиска услуг. При нажатии
кнопки поиск система переходит в состояние S3, в котором отображаются
результаты поиска. При нажатии на какую-либо услугу, система переходит в
состояние S4, в котором пользователь может оформить заказ. При нажатии кнопки
«оформить заказ» система переходит в состояние S0. При нажатии кнопки
«Выход» система завершает работу.
Рисунок 23 – Логика диалога с заказчиком при добавлении заказа и поиске
услуг
3 ОПИСАНИЕ ОСНОВНЫХ ВОЗМОЖНОСТЕЙ СИСТЕМЫ
ПОДДЕРЖКИ ВЗАИМОДЕЙСТВИЯ ЗАКАЗЧИКОВ И
ИСПОЛНИТЕЛЕЙ ПРИ ГРУЗОПЕРЕВОЗКАХ
3.1 Описание пользовательского интерфейса разрабатываемой
системы
Для полного представления о том, какая система получилась необходимо
описать работу всей системы, всех ее компонентов.
На рисунке 24 представлена экранная форма входа в данную систему.
Рисунок 24 – Экранная форма «Окно входа в систему»
Для входа в систему пользователь должен указать, кем он является
(юридическим или физическим лицом), а также ввести логин, т.е. номер телефона,
и
пароль.
Незарегистрированным
пользователем
предлагается
зарегистрироваться как юридическое или физическое лицо. На рисунке 25 мы
видим экранную форму регистрации юридического лица.
Рисунок 25 – Экранная форма «Регистрация юридического лица»
В данном окне мы видим следующие поля ввода:
1. Вы – поле в котором требуется указать кем является пользователь
(исполнителем или заказчиком).
2. Название организации.
3. Фамилия – поле фамилия директора.
4. Имя – имя директора.
5. Отчество – отчество директора.
6. Почта – электронный почтовый ящик компании.
7. Телефон – контактный телефон компании.
8. Город – город, в котором зарегистрирована компания.
9. Пароль – пароль пользователя.
10. Аватар – аватар пользователя.
После регистрации мы попадаем в основное меню приложения, которое
показано на рисунках 26, 27, 28, 29.
Рисунок 26 – Экранная форма «Профиль»
Рисунок 27 – Экранная форма «Редактирование профиля»
Рисунок 28 – Экранная форма «Заказы»
Рисунок 29 – Экранная форма «Поиск заказа»
Здесь мы видим четыре основных области:
1. Профиль – в данной области указывается информация о пользователе.
2. Редактирование профиля – область для редактирования информации о
пользователе.
3. Заказы – область в которой просматриваются и добавляются заявки.
4. Поиск исполнителя (заказчика) – область в которой производится.
3.2 Демонстрация работы программы
Для демонстрации работы программы произведем поиск заявок со стороны
исполнителя и заключим сделку о перевозке груза. На рисунках 30, 31 мы видим
процедуру добавления заказа со стороны заказчика.
Рисунок 30 – Экранная форма «Добавление заказа»
Рисунок 31 – Экранная форма «Заказы»
Здесь мы видим следующие поля для заполнения:
1. Вид груза.
2. Масса груза в кг.
3. Адрес загрузки.
4. Адрес разгрузки.
5. Стоимость заказа.
На рисунке 32 мы видим процедуру поиска исполнителем заказов.
Рисунок 32 – Экранная форма «Заказы»
Здесь мы производим поиск заявок и принимаем самую оптимальную. Далее
заказчик должен подтвердить начало доставки (см. рис. 33, 34).
Рисунок 33 – Подтверждение начала доставки
Рисунок 34 – Подтверждение заказчиком начала доставки
После того, как исполнитель доставил груз, заказчик должен подтвердить
доставку (см. рис. 35).
Рисунок 35 – Подтверждение доставки груза
ЗАКЛЮЧЕНИЕ
В процессе работы над системой был произведен анализ предметной области,
в результате которого были определены функциональные требования к системе.
Был произведен анализ аналогов, в ходе которого были выявлены все плюсы и
минусы, а также было вынесено решение о разработке собственной системы. В
ходе проектирования были составлены диаграммы бизнес-процессов. Были
составлены и описаны алгоритмы, по которым система функционирует.
В результате работы были решены следующие задачи:
1. Была описана предметная область взаимодействия заказчиков и
исполнителей при грузоперевозках.
2. Описаны бизнес-процессы, происходящие при грузоперевозках
3. Были разработаны требования к системе взаимодействия заказчиков и
исполнителей при грузоперевозках.
4. Спроектирована база данных.
5. Разработаны алгоритмы обработки данных.
6. Была описана логика диалога системы с пользователем.
7. Реализована система взаимодействия заказчиков и исполнителей при
грузоперевозках.
8. Произведено тестирование работы системы.
Так как все задачи в данной выпускной квалификационной работе
выполнены, цель работы достигнута.
СПИСОК ЛИТЕРАТУРЫ
1. Адамчук В. В., Экономика и социология труда : учеб. пособие [Текст] / В.
В. Адамчук, О. В. Ромашов, М. Е. Сорокина. – М. : ЮНИТИ, 2005 – 60с.
2. Асаёнок И. С. Среда обитания : риск, здоровье, экономика : монография
[Текст] / И. С. Асаёнок – Минск : Бестпринт, 2006 – 200с.
3. Афанасьев Л. Л. Единая транспортная система и автомобильные перевозки
: учеб. пособие [Текст] / Л. Л. Афанасьев – М. : Транспорт, 1998 – 101с.
5. Олькина Е.В. Методические указания по оформлению пояснительных
записок к дипломным, курсовым проектам (работам) и отчетов по практикам в
соответствии с требованиями государственных стандартов [Текст] / Олькина Е.В.
– Орел: ОрелГТУ, 2007
6. Маклафлин Б., PHP и MySQL : исчерпывающее руководство [Текст]/ Бретт
Маклафлин; [пер. с англ. О. Сивченко]. - 2-е изд. - Санкт-Петербург [и др.] : Питер,
2016. - 543 с.
7.
Маклаков,
С. В.
BPwin
и ERwin.
CASE-средства разработки
информационных систем [Текст] / С. В. Маклаков. - 2-е изд., испр. и доп. - М. :
Диалог-МИФИ, 2001. - 304 с. : ил.+ 21 см. ISBN 5-86404-128-9.
8. Веллинг Л., Разработка веб-приложений с помощью PHP и MySQL [Текст]
/ Люк Веллинг, Лора Томсон; [пер. с англ. А.А. Моргунова]. - 4-е изд. - Москва [и
др.] : Вильямс, 2011 – 369с.
9. Черемных С.В. Структурный анализ систем. IDEF-технологии [Текст]/
Черемных С.В., Ручкин В.С., Семенов И.О. М.: Финансы и статистика, 2010 –
201с.
10. Пратт Т. Языки программирования: разработка и реализация [Текст] /
Пратт Т., Зелковиц М. 4-е издание. М.: Питер, 2002. – 378с.
ПРИЛОЖЕНИЕ А
(ОБЯЗАТЕЛЬНОЕ)
ЛИСТИНГ ПРОГРАММЫ
<?php
require "Settings/settings.php";
require "Cookie/cookie_functions.php";
redirect('in');
init();
$connect = new PDO('mysql:dbname=' . DATABASE . ';charset=utf8;host=' .
HOST, USER, PASSWORD);
$user['table_user'] = $_SESSION['table_user'];
$user['user_id'] = $_SESSION['user_id'];
$errors = ["order"=>"К сожалению возникла ошибка при добавлении вашего
заказа"];
$messages = ["success" => "Ваш заказ успешно добавлен"];
if ($_SESSION['type'] == 'e') {
$orders_phis = $connect->query("SELECT concat(phis_user.name, '
',phis_user.surname, ' ', phis_user.patronymic) as carrier, type_executor, cost,
address_load, address_delivery, order_statuses.name as status, contract,
date_conclusion, time_create, type_cargo.name as cargo, weight FROM orders JOIN
type_cargo ON type_cargo.id = orders.cargo_id LEFT JOIN phis_user ON
orders.executor_id = phis_user.id JOIN order_statuses ON order_statuses.id =
orders.status WHERE customer_id = ${user['user_id']} AND type_customer =
'${user['table_user']}' AND (type_executor = 'phis_user' OR type_executor IS
NULL)")->fetchAll(PDO::FETCH_ASSOC);
$orders_ur = $connect->query("SELECT ur_user.org as carrier,
type_executor, cost, address_load, address_delivery,order_statuses.name as status,
contract, date_conclusion, time_create, type_cargo.name as cargo, weight FROM
orders JOIN type_cargo ON type_cargo.id = orders.cargo_id JOIN ur_user ON
orders.executor_id = ur_user.id JOIN order_statuses ON order_statuses.id =
orders.status WHERE customer_id = ${user['user_id']} AND type_customer =
'${user['table_user']}' AND type_executor = 'ur_user'")>fetchAll(PDO::FETCH_ASSOC);
$efforts = $connect->query("SELECT ur_user.org as offering, ur_user.image,
efforts.date_conclusion, efforts.cost, efforts.phone, efforts.email, orders.address_load,
orders.cost as customer_cost, orders.weight, orders.id, orders.address_delivery,
orders.date_conclusion as customer_date, orders.time_create, type_cargo.name as
cargo FROM efforts JOIN orders ON efforts.order_id = orders.id JOIN ur_user ON
ur_user.id = efforts.executor_id JOIN type_cargo ON orders.cargo_id = type_cargo.id
WHERE orders.customer_id = ${user['user_id']} AND orders.type_customer =
'${user['table_user']}' AND efforts.executor_type = 'ur_user' UNION (SELECT
concat(phis_user.name, ' ',phis_user.surname, ' ', phis_user.patronymic) as offering,
phis_user.image, efforts.date_conclusion, efforts.cost, efforts.phone, efforts.email,
orders.address_load, orders.cost as customer_cost, orders.weight, orders.id,
orders.address_delivery, orders.date_conclusion as customer_date, orders.time_create,
type_cargo.name as cargo FROM efforts JOIN orders ON efforts.order_id = orders.id
JOIN phis_user ON phis_user.id = efforts.executor_id JOIN type_cargo ON
orders.cargo_id = type_cargo.id WHERE orders.customer_id = ${user['user_id']}
AND orders.type_customer = '${user['table_user']}' AND efforts.executor_type =
'phis_user')")->fetchAll(PDO::FETCH_ASSOC);
if (isset($_GET['confirmed_effort']) && !empty($_GET['confirmed_effort']))
{
$connect->query("UPDATE orders, efforts SET orders.status = 2,
orders.cost = efforts.cost, orders.date_conclusion = efforts.date_conclusion,
orders.executor_id = efforts.executor_id, orders.type_executor = efforts.executor_type
WHERE orders.id = efforts.order_id AND orders.id = ${_GET['confirmed_effort']}");
$connect->query("DELETE FROM efforts WHERE order_id =
${_GET['confirmed_effort']}");
}
} else if ($_SESSION['type'] == 'm') {
if (isset($_GET['order_complete']) && !empty($_GET['order_complete'])) {
$connect->query("UPDATE orders SET status = 3 WHERE id =
${_GET['order_complete']}");
}
$orders_phis = $connect->query("SELECT concat(phis_user.name, '
',phis_user.surname, ' ', phis_user.patronymic) as customer, orders.id, cost,
address_load, address_delivery, order_statuses.name as status, status as status_id,
contract, date_conclusion, time_create, type_cargo.name as cargo, weight FROM
orders JOIN type_cargo ON type_cargo.id = orders.cargo_id JOIN phis_user ON
orders.customer_id = phis_user.id JOIN order_statuses ON order_statuses.id =
orders.status WHERE executor_id = ${user['user_id']} AND type_executor =
'${user['table_user']}' AND type_customer = 'phis_user'")>fetchAll(PDO::FETCH_ASSOC);
$orders_ur = $connect->query("SELECT ur_user.org as customer, orders.id,
cost, address_load, address_delivery, order_statuses.name as status, status as status_id,
contract, date_conclusion, time_create, type_cargo.name as cargo, weight FROM
orders JOIN type_cargo ON type_cargo.id = orders.cargo_id JOIN ur_user ON
orders.customer_id = ur_user.id JOIN order_statuses ON order_statuses.id =
orders.status WHERE executor_id = ${user['user_id']} AND type_executor =
'${user['table_user']}' AND type_customer = 'ur_user'")>fetchAll(PDO::FETCH_ASSOC);
}
$orders = array_merge($orders_phis, $orders_ur);
$cargo = $connect->query("SELECT * FROM type_cargo")>fetchAll(PDO::FETCH_ASSOC);
require "orders.tpl";
?>
<?php
require "Settings/settings.php";
require "Cookie/cookie_functions.php";
redirect('in');
$connect = new PDO('mysql:dbname=' . DATABASE . ';charset=utf8;host=' .
HOST, USER, PASSWORD);
$user = getUser();
var_dump($_REQUEST);
if (!empty($_REQUEST['cargo_id']) && !empty($_REQUEST['weight']) &&
!empty($_REQUEST['address_load']) && !empty($_REQUEST['address_delivery'])
&& !empty($_REQUEST['cost']) && !empty($_REQUEST['date_conclusion'])) {
echo "lol";
echo "INSERT INTO orders (customer_id, type_customer, cost, address_load,
address_delivery, date_conclusion, cargo_id, weight, status) VALUES
(${user['user_id']}, '${user['table_user']}', ${_REQUEST['cost']},
'${_REQUEST['address_load']}', '${_REQUEST['address_delivery']}',
'${_REQUEST['date_conclusion']}', ${_REQUEST['cargo_id']},
${_REQUEST['weight']}), 1";
if($connect->query("INSERT INTO orders (customer_id, type_customer, cost,
address_load, address_delivery, date_conclusion, cargo_id, weight, status) VALUES
(${user['user_id']}, '${user['table_user']}', ${_REQUEST['cost']},
'${_REQUEST['address_load']}', '${_REQUEST['address_delivery']}',
'${_REQUEST['date_conclusion']}', ${_REQUEST['cargo_id']},
${_REQUEST['weight']}, 1)")) {
header("Location: orders.php?message=success");
} else {
header("Location: orders.php?error=order");
}
}
?>
<? PHP
header ('Content-Type: application / json');
if (isset ($ _ REQUEST ['carrier_id']) && isset ($ _ REQUEST ['carrier_table'])
&& isset ($ _ REQUEST ['score']) &&! empty ($ _ REQUEST ['carrier_id']) &&!
empty ( $ _REQUEST ['carrier_table']) &&! Empty ($ _ REQUEST ['score'])) {
требуется «Настройки / settings.php»;
require 'Cookie / cookie_functions.php';
перенаправления ( 'в');
в этом();
$ connect = new PDO ('mysql: dbname ='. DATABASE. '; charset = utf8; host
='. HOST, USER, PASSWORD);
$ count = $ connect-> query ("SELECT COUNT (*) как count FROM rating
WHERE rater_id = $ {_ SESSION ['user_id']} И rater_table = '$ {_ SESSION ['
table_user '}}' AND carrier_id = $ { _REQUEST ['carrier_id']} AND carrier_table = '$
{_ REQUEST [' carrier_table ']}' ") -> fetch (PDO :: FETCH_ASSOC);
if ($ count ['count']> 0) {
echo json_encode (array ('status' => 'ERR', 'msg' => 'Вы уже
голосовали'));
} else if ($ count ['count'] == 0) {
if ($ connect-> query ("INSERT INTO rating VALUES ($ {_
SESSION ['user_id']}, '$ {_ SESSION [' table_user ']}', $ {_ REQUEST ['carrier_id']},
'$ {_ REQUEST ['carrier_table']} ', $ {_ REQUEST [' score ']}) ")) {
echo json_encode (array ('status' => 'OK', 'msg' => 'Спасибо,
ваш голос учтён'));
} else {
echo json_encode (array ('status' => 'ERR', 'msg' =>
'Произошла ошибка'));
}
}
}
?>
<?php
require "Settings/settings.php";
require "Cookie/cookie_functions.php";
redirect('in');
init();
/*if ($_SESSION['type'] != 'm') {
header('Location: search_orders.php');
}*/
if ($_SESSION['type'] != 'e') {
header('Location: search_orders.php');
}
$connect = new PDO('mysql:dbname=' . DATABASE . ';charset=utf8;host=' .
HOST, USER, PASSWORD);
if (isset($_GET['search_executor'])) {
/*$executors = $connect->query("SELECT concat(phis_user.name, '
',phis_user.surname, ' ', phis_user.patronymic) as executor, email, telephone, city,
image FROM phis_user WHERE type = 'm' UNION (SELECT org as executor, email,
telephone, city, image FROM ur_user WHERE type='m')")>fetchAll(PDO::FETCH_ASSOC);*/
$phis_query = "SELECT concat(phis_user.name, ' ',phis_user.surname, ' ',
phis_user.patronymic) as executor, email, telephone, phis_user.id, \"phis_user\" as
table_user, city, image FROM phis_user LEFT JOIN additional_info ON
additional_info.user_id = phis_user.id AND additional_info.user_table = 'phis_user'
LEFT JOIN carrier_cargo ON carrier_cargo.user_id = phis_user.id AND
carrier_cargo.user_table = 'phis_user' LEFT JOIN rating ON phis_user.id =
rating.carrier_id AND rating.carrier_table = 'phis_user' WHERE type = 'm'";
$ur_query = "SELECT ur_user.org as executor, email, telephone, ur_user.id,
\"ur_user\" as table_user, city, image FROM ur_user LEFT JOIN additional_info ON
additional_info.user_id = ur_user.id AND additional_info.user_table = 'ur_user' LEFT
JOIN carrier_cargo ON carrier_cargo.user_id = ur_user.id AND
carrier_cargo.user_table = 'ur_user' LEFT JOIN rating ON ur_user.id =
rating.carrier_id AND rating.carrier_table = 'ur_user' WHERE type = 'm'";
$additional_conditions = '';
foreach (preg_grep("/cargo_\d+/", array_flip($_GET)) as $key => $value) {
$types_cargo[] = $key;
}
if (isset($types_cargo) && !empty($types_cargo)) {
$additional_conditions .= " AND carrier_cargo.cargo_id IN (" .
implode(", ", $types_cargo) . ")";
}
if (isset($_GET['time_dispatch_min']) &&
!empty($_GET['time_dispatch_min'])) {
$additional_conditions .= " AND additional_info.time_send >
'${_GET['time_dispatch_min']}'";
}
if (isset($_GET['time_dispatch_max']) &&
!empty($_GET['time_dispatch_max'])) {
$additional_conditions .= " AND additional_info.time_send <
'${_GET['time_dispatch_max']}'";
}
if (isset($_GET['time_delivery_min']) &&
!empty($_GET['time_delivery_min'])) {
$additional_conditions .= " AND additional_info.time_delivery >
'${_GET['time_delivery_min']}'";
}
if (isset($_GET['time_delivery_max']) &&
!empty($_GET['time_delivery_max'])) {
$additional_conditions .= " AND additional_info.time_delivery <
'${_GET['time_delivery_max']}'";
}
if (isset($_GET['place_delivery']) && !empty($_GET['place_delivery'])) {
$additional_conditions .= " AND additional_info.place_delivery =
'${_GET['place_delivery']}'";
}
if (isset($_GET['place_dispatch']) && !empty($_GET['place_dispatch'])) {
$additional_conditions .= " AND additional_info.place_send =
'${_GET['place_dispatch']}'";
}
$additional_conditions .= " GROUP BY rating.carrier_id";
if ((isset($_GET['rating_min']) && !empty($_GET['rating_min'])) &&
(isset($_GET['rating_max']) && !empty($_GET['rating_max']))) {
$additional_conditions .= " HAVING AVG(rating.rate) >
${_GET['rating_min']} AND AVG(rating.rate) < ${_GET['rating_max']}";
} else if (isset($_GET['rating_min']) && !empty($_GET['rating_min'])) {
$additional_conditions .= " HAVING AVG(rating.rate) >
${_GET['rating_min']}";
} else if (isset($_GET['rating_max']) && !empty($_GET['rating_max'])) {
$additional_conditions .= " HAVING AVG(rating.rate) <
${_GET['rating_max']}";
}
$phis_query .= $additional_conditions;
$ur_query .= $additional_conditions;
$query = $phis_query . " UNION (${ur_query})";
$executors = $connect->query($query)->fetchAll(PDO::FETCH_ASSOC);
}
$cargo = $connect->query("SELECT * FROM type_cargo")>fetchAll(PDO::FETCH_ASSOC);
require "search_executor.tpl";
?>
require 'Settings/settings.php';
require 'Cookie/cookie_functions.php';
redirect('in');
init();
if ($_SESSION['type'] == 'e') {
header("Location: search_executor.php");
}
$connect = new PDO('mysql:dbname=' . DATABASE . ';charset=utf8;host=' .
HOST, USER, PASSWORD);
$cargo = $connect->query("SELECT * FROM type_cargo")>fetchAll(PDO::FETCH_ASSOC);
if (!empty($_GET['order_id'])) {
$connect->query("INSERT INTO efforts VALUES (NULL,
${_GET['order_id']}, ${_SESSION['user_id']}, '${_SESSION['table_user']}',
'${_GET['date_conclusion']}', ${_GET['cost']}, ${_GET['phone']},
'${_GET['email']}')");
}
if (!empty($_GET['search_orders'])) {
$query_phis = "SELECT concat(phis_user.name, ' ',phis_user.surname, ' ',
phis_user.patronymic) as customer, phis_user.email, phis_user.telephone,
phis_user.city, type_cargo.name as cargo, orders.id, efforts.id as effort, orders.cost,
orders.address_load, orders.address_delivery, orders.date_conclusion,
orders.time_create, orders.weight, orders.status as status_id, order_statuses.name as
status, order_statuses.description, contract FROM orders JOIN phis_user ON
orders.customer_id = phis_user.id JOIN type_cargo ON type_cargo.id =
orders.cargo_id JOIN order_statuses ON order_statuses.id = orders.status LEFT JOIN
efforts ON efforts.order_id = orders.id WHERE type_customer = 'phis_user'";
$query_ur = "SELECT ur_user.org as customer, ur_user.email,
ur_user.telephone, ur_user.city, type_cargo.name as cargo, orders.id, efforts.id as
effort, orders.cost, orders.address_load, orders.address_delivery,
orders.date_conclusion, orders.time_create, orders.weight, orders.status as status_id,
order_statuses.name as status, order_statuses.description, contract FROM orders JOIN
ur_user ON orders.customer_id = ur_user.id JOIN type_cargo ON type_cargo.id =
orders.cargo_id JOIN order_statuses ON order_statuses.id = orders.status LEFT JOIN
efforts ON efforts.order_id = orders.id WHERE type_customer = 'ur_user'";
$additional_conditions = "";
foreach ($cargo as $type) {
$name = 'type' . $type['id'];
if (isset($_GET[$name]) && !empty($_GET[$name])) {
$cargo_types[] = $_GET[$name];
}
}
if (isset($_GET['cost_min']) && !empty($_GET['cost_min'])) {
$additional_conditions .= " AND cost > ${_GET['cost_min']}";
}
if (isset($_GET['cost_max']) && !empty($_GET['cost_max'])) {
$additional_conditions .= " AND cost < ${_GET['cost_max']}";
}
if (isset($_GET['weight_min']) && !empty($_GET['weight_min'])) {
$additional_conditions .= " AND weight > ${_GET['weight_min']}";
}
if (isset($_GET['weight_max']) && !empty($_GET['weight_max'])) {
$additional_conditions .= " AND weight < ${_GET['weight_max']}";
}
if (isset($_GET['address']) && !empty($_GET['address'])) {
$additional_conditions .= " AND address_load =
${_GET['address']}";
}
if (isset($cargo_types)) {
$additional_conditions .= " AND cargo_id IN (" . implode(", ",
$cargo_types) . ")";
}
$query_phis .= $additional_conditions;
$query_ur .= $additional_conditions;
if (isset($_GET['city']) && !empty($_GET['city'])) {
$query_phis .= " AND phis_user.city = ${_GET['city']}";
$query_ur .= " AND ur_user.city = ${_GET['city']}";
}
$orders = $connect->query($query_phis . " UNION (" . $query_ur . ")")>fetchAll(PDO::FETCH_ASSOC);
}
require "search_orders.tpl"; ?>
Powered by TCPDF (www.tcpdf.org)
Powered by TCPDF (www.tcpdf.org)
1/--страниц
Пожаловаться на содержимое документа