Комплекс мобильных приложений по оказанию автомобильной помощи на дорогах
Обзор существующих приложений в сфере оказания автомобильной помощи. Рассмотрение алгоритмического конструирования комплекса мобильных приложений по оказанию автомобильной помощи на дорогах. Оценка тестирования авторизации в приложении для водителя.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 12.02.2018 |
Размер файла | 1,9 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Уровень звука в помещении, где работает разработчик, согласно СНиП 2.2.4/2.1.8.562-96 не должен превышать 50 дБ. Для снижения шума в помещении компьютеры, принтеры должны устанавливаться на амортизирующие прокладки.
Наиболее действенным средством защиты человека от вибрации является устранение непосредственного контакта с вибрирующим оборудованием. Осуществляется это путем применения дистанционного управления, промышленных роботов, автоматизации и замены технологических операций.
6.1.4 Защита от электромагнитных полей, лазерных и ионизирующих излучений
Работа разработчика программного средства предполагает постоянное нахождение рядом с монитором.
В рассматриваемой аудитории используется жидкокристаллический монитор, который имеет очень низкий показатель электростатических полей.
6.1.5 Электробезопасность
Рабочее место разработчика оборудовано электроприборами, и связано с использованием огромного количества розеток, вилок, выключателей и шнуров питания. Схема электросети помещения представлена на рисунке 6.3.
Рисунок 6.3 - Схема электросети
Для безопасной работы в рассматриваемом помещении сотрудник не перегружает розетки и использует сетевой фильтр с предохранителем. Также, не эксплуатируются неисправные приборы и при отсутствии должной квалификации не выполняется ремонт оборудования самостоятельно.
При эксплуатации персональных компьютеров часто возникают токи статического электричества, которые не опасны для человека, но могут привести к поломке оборудования. Для предотвращения возможности образования статического электричества на различных поверхностях, находящихся в помещении, используют специальные различные нейтрализаторы. Полы в комнате выполнены из паркетной доски.
Для электроснабжения рассматриваемой аудитории используется сеть общего назначения с частотой тока 50 Гц и переменным напряжением 220 Вольт.
Защита электрической сети организована с помощью устройств первичной и вторичной защиты.
Устройства первичной защиты (АЗУ-60), установлены на вводе электрической сети и обеспечивают общее отключение сети в случаях, если повышение или понижение напряжения питающей сети перешагнуло пороговое значение.
Устройства вторичной защиты электрической сети (стабилизаторы и блоки бесперебойного питания), установленные непосредственно на рабочих местах сотрудников и обеспечивают стабилизацию напряжения и отключение напряжения при превышении нагрузки питающей сети выше порогового значения.
6.2 Расчет системы искусственного освещения помещения
В настоящее время 90% информации человек получает с помощью органов зрения. Нерациональное освещение на рабочем месте в офисе, в лаборатории, дома при чтении приводит к повышенной утомляемости, снижению работоспособности, перенапряжению органов зрения и снижению его остроты.
В производственных и административно-общественных помещениях, в случаях преимущественной работы с документами, допускается применение системы комбинированного освещения. Искусственное освещение в помещениях эксплуатации ПЭВМ должно осуществляться системой общего равномерного освещения. Общее освещение следует выполнять в виде сплошных или прерывистых линий светильников, расположенных сбоку от рабочих мест, параллельно линии зрения пользователя при расположении ПЭВМ.
При расположении компьютеров по периметру линии светильников должны располагаться локально над рабочим столом, ближе к его переднему краю, обращенному к оператору.
Искусственное освещение помещений осуществляется с помощью электрических источников света - ламп накаливания и люминесцентных ламп.
Для освещения производственных помещений широкое применение находят люминесцентные лампы, потому что они обладают следующими преимуществами:
применение ламп такого типа позволяет получить в 1,5 - 2 раза большую освещенность при одинаковом расходе электроэнергии по сравнению с лампами накаливания;
свет люминесцентной лампы мягкий, по своему спектру наиболее близкий к естественному, при почти полном отсутствии теней. Это позволяет лучше различать цвета и оттенки;
люминесцентные лампы имеют более длительный срок службы по сравнению со сроком службы лампы накаливания. Разница равна примерно 10 - 12 раз.
Люминесцентные лампы так же обладают рядом недостатков:
высокая установочная стоимость;
зависимость светового потока от температуры окружающей среды;
существенная пульсация светового потока.
Порядок действий расчета системы искусственного освещения помещения произведен и представлен в приложении Г.
6.3 Организация рабочего места
Организация рабочего места разработчика программного средства играет важную роль, т.к. работа программиста является преимущественно сидячей.
Устройств ввода и вывода (монитора, клавиатуры и мыши) должны располагаться максимально удобно. Особое внимание следует уделить расположению монитора, чтобы уменьшить нагрузку на глаза. Согласно СанПин 2.2.2/2.4.1340-03 его положение должно быть таково, чтобы изображение на нем было видно без поворота головы или туловища. Расстояние от работника до монитора должно составлять 65 см или более, а верхний край изображения монитора должен находится на линии глаз. В рассматриваемой аудитории данное требование выполняется.
Эксплуатация клавиатуры и мыши не должна вызывать ощутимого напряжения, поэтому клавиатура и мышь размещаются на одном уровне. Желательное расстояние от края стола до клавиатуры от 5 до 10 см.
Для наиболее удобного рабочего положения рекомендуется передвижное рабочее кресло с регулируемым по высоте сиденьем, имеющим выемку, соответствующую форме бедер. Спинка кресла должна имеет изогнутую форму, обнимающую поясницу с регулируемым наклоном. Рабочее кресло должно обеспечивать прямую посадку и поддержку поясничной области позвоночника.
Пространство для ног составляет от 480 до 550 мм в глубину, от 450 до 600 мм в ширину и от 615 до 650 мм по высоте. Ступни ног стоят на полу так, чтобы образуемый в коленях угол составлял 90° или больше.
В нарушение СанПиН 2.2.2.542-96 не выдерживаются расстояния между рабочими столами, а также площадь помещения на одно рабочее место.
6.4 Устойчивость к чрезвычайным ситуациям. Пожарная безопасность
Пожарная безопасность может быть обеспечена мерами пожарной профилактики и активной пожарной защиты. Понятие пожарной профилактики включают в себя комплекс активных мероприятий, необходимых для предупреждения возникновения пожара или уменьшения его последствий.
Мероприятия по пожарной профилактике разделяются на организационные, технические, режимные, эксплуатационные.
Рассматриваемое помещение относится к классу Ф4.3 функциональной пожарной опасности согласно Федерального закона 123 «Технический регламент о требованиях пожарной безопасности» [14].
В целях обеспечения пожарной безопасности имеются инструкции по пожарной безопасности. Кабинет оборудован табличкой с номером пожарной службы. Курение на территории и в помещении запрещено. Все противопожарные системы и устройства находятся в исправном состоянии.
6.5 Охрана окружающей среды
В комнате, которая является рабочим местом разработчика, находится лазерный принтер. Тонер, используемый в принтерах, по степени вредности можно сравнить с угольной пылью.
Для безопасной работа с копировальной техникой и лазерными принтерами необходимо располагать принтер на максимальном расстоянии от рабочего места, проводить его своевременное сервисное обслуживание и хорошо проветривать помещение.
Люминесцентная лампочки, освещающие рабочее помещение содержат ртуть, которая является высокотоксичным химическим элементом. Ртуть - первый класс опасности [15]. Отходы первого класса опасности требуют правильной утилизации и аккуратного хранения - нельзя нарушать их целостность. После окончания срока службы люминесцентные лампы необходимо сдавать специализированным организациям, занимающимся утилизацией отходов первого класса опасности.
6.6 Выводы по главе
В данном разделе ВКР проведен анализ условий труда при работе над ВКР в частном офисе. С учетом выявленных недостатков предлагаются следующие рекомендации по оптимизации условий труда:
уменьшить количество рабочих мест с 7 до 5 для обеспечения соответствия площади одного рабочего места 4,5 м согласно СанПиН 2.2.2.542-96;
расставить рабочие столы сотрудников, обеспечив ширину бокового прохода между столами не менее 1,2 м и расстояния между рядами 2 м.
Заключение
При выполнении данной работы был разработан комплекс мобильных приложений по оказанию автомобильной помощи на дорогах, представляющий собой два мобильных приложения для операционной системы Android. Первое приложение предназначено для водителей автомобилей и предоставляет возможность заказа эвакуатора. Второе приложение предназначено для операторов эвакуаторов и предоставляет возможность получения полной информации о заказе. Данный комплекс мобильных приложений отвечает всем требованиям технического задания (см. приложение А). Так же возможно его усовершенствование путем добавления функции безналичной оплаты заказа с помощью банковской карты. Достигнута основная цель работы - автоматизация процесса вызова эвакуатора для водителя сломанного автомобиля.
В ходе работы были реализованы такие алгоритмы как:
авторизация пользователя;
заказ эвакуатора;
обновление информации о текущем местоположении;
получения заказа оператором эвакуатора.
Представлено описание полей и функций основных классов каждого приложения, а также их UML - диаграммы.
Протестированы основные функции программного средства. Результаты тестирования показали, что данное программное средство работает корректно.
Получены навыки работы с системой геопозиционирования в операционной системе Android. Закреплены навыки разработки мобильных приложений на языке программирования Java.
Список использованных источников
1. Блох, Д. Java. Эффективное программирование / Д. Блох. - М.: Лори, 2014. - 461 с.
2. Java - статья об объектно - ориентированном языке Java // Под редакцией портала Википедия.
URL: http://ru.wikipedia.org/wiki/Java (дата обращения: 25.04.2017).
3. Платформа Android // Под редакцией информационного портала myandroid.
URL: http://myandroid.ru/chto-takoe-android (дата обращения: 26.04.2017).
4. Харди, Б. Android. Программирование для профессионалов / Б. Филлипс, К. Стюарт, К. Марсикано. - СПб.: Питер, 2016. - 640 с.
5. Изучаем Android Studio. Лучшая среда разработки для мобильных приложений // Под редакцией информационного портала Хакер.
URL: http://xakep.ru/android-studio-1-0 (дата обращения: 27.04.2017).
6. Дейтл, П. Android для программистов. Создаем приложения / Х. Дейтл, Э. Дейтл, М. Моргано. - СПб.: Питер, 2013. - 560 с.
7. Using Retrofit2 // Под редакцией информационного справочника Vogella.
URL:http://www.vogella.com/tutorials/Retrofit/article.html (дата обращения: 28.04.2017).
8. Google Maps API // Под редакцией информационного справочника Google Developers.
URL:https://developers.google.com/maps/android (дата обращения: 29.04.2017).
9. Майер, Р. Android. Программирование приложений для планшетных компьютеров и смартфонов / Р. Майер. - М.: Эксмо, 2013. - 816 с.
10. Куликов, Л. М. Экономическая теория: Учебник / Л.М. Куликов. - М.: Проспект, 2010. - 432с.
11. Морозов, Ю. В. Основы маркетинга: Учебное пособие / Ю. В. Морозов. - М.: Дашков и К, 2013. - 148 c.
12. СанПиН 2.2.4.548-96. Гигиенические требования к микроклимату производственных помещений. - Введ. 1996-10-01. - М.: Информационно-издательский центр. Минздрава России, 1997. - 12 с.
13. СНиП 23-05-95. Естественное и искусственное освещение. - Введ. 1995-08-02 - М.: Минстрой России, ФГУП ЦПП, 1995. - 36 с.
14. Технический регламент о требованиях пожарной безопасности: федер. закон: [принят Гос. Думой 4 июля 2008 г.: одобр. Советом Федерации 11 июля 2008 г.]. - [отд. изд.]. - М.: Проспект, 2016. - 112 с.
15. ГОСТ 12.0.003-74. Опасные и вредные производственные факторы. Класификация. - Введ. 1976-01-01. - М.: Изд-во стандартов, 1974. - 4 с.
Приложение А
Техническое задание на программное средство
СОГЛАСОВАНО УТВЕРЖДЕНО
Ст. пр. каф. «ПОВТиАС» Зав. каф. «ПОВТиАС»
___________ А.П. Кузин __________ А.Н. Карапетянц
«___»___________2017 г. «___»_______________2017 г.
А.1 Введение
А.1.1 Наименование разрабатываемого программного средства
Полное название - «Комплекс мобильных приложений по оказанию автомобильной помощи на дорогах». Название приложения для заказчика «EvacuateMe». Название приложения для исполнителя «EvacuateMe Driver».
А.1.2 Область применения
Областью применения является сфера по оказанию помощи водителям на дорогах с помощью мобильного приложения для ОС Android.
А.2 Основание для разработки
Разработка проводится на основании задания на выпускную квалификационную работу, выданного руководителем, ст. пр. кафедры «ПОВТ и АС» ДГТУ Кузин А.П. так же на основании документа «Учебный план для студентов ВУЗа», факультета «Информатика и вычислительная техника», обучающихся по специальности.
А.3 Назначение разработки
А.3.1 Функциональное назначение
Функциональное назначение заключается в предоставлении мобильных приложений для осуществления взаимодействия между заказчиком и исполнителем при оказании услуги эвакуирования автотранспортного средства.
А.3.2 Эксплуатационное назначение
Эксплуатационное назначение заключается в использовании на мобильных устройствах конечных пользователей под управлением операционной системы Android.
А.4 Требования к программе
А.4.1 Требования к функциональным характеристикам
Основными функциями комплекса мобильных приложений по оказанию автомобильной помощи на дорогах являются:
регистрация и авторизация в приложениях;
определение и отображение местоположения в приложениях;
отображение списка фирм, в которых возможно совершить заказ;
отправка запроса на заказ и отмену эвакуатора;
уведомление о прибытии эвакуатора;
отображение эвакуатора на карте при выполнении заказа;
отображение детальной информации о выполненном заказе;
изменение статуса оператора эвакуатора;
уведомление о заказе с возможностью принять или отменить;
отображение заказчика на карте и построение маршрута до него;
просмотр истории совершенных заказов в приложениях.
А.4.2 Требования к надежности
Надежное функционирование программы должно быть обеспечено выполнением совокупности организационно-технических мероприятий, перечень которых приведен ниже:
организацией бесперебойного питания технических средств;
организацией правильного использования сетевых модулей;
регулярным выполнением требований ГОСТ 51188-98. Защита информации. Испытания программных средств на наличие компьютерных вирусов.
Так же должны обрабатываться отказы из-за некорректных действий пользователя системы.
А.4.3 Условия эксплуатации
Для функционирования программного продукта необходимо соблюдение всех требований и правил эксплуатации мобильной техники.
Требования к персоналу, работающему с данным программным продуктом:
общие знания вычислительной техники;
знание операционной системы Android;
умение работать с СУБД.
А.4.4 Требования к составу и параметрам технических средств
В состав технических средств должно входить мобильное устройство с операционной системой Android, включающее в себя:
емкостную сенсорную панель ввода;
оперативную память объемом не менее 512 Мбайт;
встроенные библиотеки Android API;
модуль определения местоположения;
разрешение экрана по диагонали более 3 дюймов.
Дополнительные требования и ограничения к составу и параметрам технических средств не вводится.
А.4.5 Требования к программной совместимости
А.4.5.1 Определение структуры входных и выходных данных
Входными данными программного средства «EvacuateMe» являются вводимые пользователем номер телефона, марка и цвет его автомобиля.
Входными данными программного средства «EvacuateMe Driver» являются номер телефона оператора эвакуатора.
Промежуточными данными программного средства «EvacuateMe» и «EvacuateMe Driver» являются местоположение каждой стороны.
Выходными данными программного средства «EvacuateMe» и «EvacuateMe Driver» являются стоимость и результата выполнения заказа.
Входные данные и выходные данные выводятся в окне приложения мобильного устройства.
А.4.5.2 Язык программирования
Для корректного функционирования программного продукта необходима операционная система Android. Языком программирования выбран Java.
А.4.5.3 Операционная система
Программное средство должно работать под управлением операционной системы Android версией 4.4 KitKat или выше.
Так же требуется наличие мобильного устройства под управлением данной операционной системы.
A.4.6 Требование к упаковке и маркировке
Требования к упаковке и маркировке программного средства не предъявляется.
А.4.7 Требования к транспортировке и хранению
Условия транспортирования, места хранения, условия складирования и сроки хранения в различных условиях должны соответствовать требованиям, предъявляемым к носителям информации на которых будет содержаться данное программное изделие.
Допустимы все способы транспортирования и хранения, не нарушающие целостность используемого носителя данных.
Программное средство может храниться на любом носителе информации, имеющее возможность подключения к персональному компьютеру или мобильному устройству, и позволяющее производить установку с данного носителя.
А.4.8 Специальные требования
Оценочные требования к функционалу программного средства и уровню его реализации сведены в таблицу А.1.
Таблица А.1 - Функционал программного средства
№ |
Реализуемые функции |
Степень самостоятельности разработки |
||
Алгоритм |
ПС |
|||
1 |
Регистрация и авторизация в приложениях |
Модиф. |
Собств. |
|
2 |
Определение и отображение местоположения в приложениях |
Модиф. |
Собств. |
|
3 |
Отображение списка фирм, в которых возможно совершить заказ |
Модиф. |
Собств. |
|
4 |
Отправка запроса на заказ и отмену эвакуатора |
Модиф. |
Собств. |
|
5 |
Уведомление о прибытии эвакуатора |
Модиф. |
Собств. |
|
6 |
Отображение эвакуатора на карте при выполнении заказа |
Модиф. |
Собств. |
|
7 |
Отображение детальной информации о выполненном заказе |
Модиф. |
Собств. |
|
8 |
Изменение статуса оператора эвакуатора |
Модиф. |
Собств. |
|
9 |
Уведомление о заказе с возможностью принять или отменить |
Модиф. |
Собств. |
|
10 |
Отображение заказчика на карте и построение маршрута до него |
Модиф. |
Модиф. |
|
11 |
Просмотр истории совершенных заказов в приложениях |
Модиф. |
Собств. |
А.5 Требования к программной документации
Программная документация должна состоять из следующих пунктов:
задание на преддипломную практику;
техническое задание по ГОСТ 19.201-78 ЕСПД;
руководство системного программиста по ГОСТ 19.503-79 ЕСПД;
руководство программиста по ГОСТ 19.504-79 ЕСПД;
руководство оператора по ГОСТ 19.505-79 ЕСПД.
A.6 Стадии и этапы разработки
Системный анализ (с 17.04.2017 по 24.04.2017):
изучение предметной области;
определение области применения и целей использования разрабатываемого программного средства;
поиск вариантов решения поставленных задач;
определение ограничений и диапазонов функционирования разрабатываемого программного средства;
подготовка технического задания.
Общесистемное проектирование (с 01.05.2017 по 08.05.2017):
определение структуры программного средства;
определение структуры алгоритмов и модулей.
Подготовка технологических средств (08.05.2017 по 15.05.2017):
выбор языка программирования;
выбор среды разработки программного средства;
выбор и подготовка инструментальных средств и средств отладки;
разработка инструкций к применению методов.
Программная реализация, рабочий проект (с 15.05.2017 по 02.06.2017):
разработка алгоритмической части;
разработка текстов программных модулей;
разработка документации;
проектирование пользовательского интерфейса.
Отладка программного средства в статике (c 02.06.2017 по 09.06.2017):
тестирование программных модулей;
комплексирование модулей, поэтапное сведение в единый комплекс;
локализация ошибок;
корректировка исходных текстов, информационных потоков;
перекомпиляция программного средства;
тестирование ПС.
А.7 Порядок контроля и приемки
Порядок и контроль приемки определяются заведующим кафедрой «ПОВТ и АС» и основаны на демонстрации знаний технологии и умении создавать программные средства для различных предметных областей.
Главным требованием к приемке является наличие правильно работающего комплекса модулей с тестовым примером и отчета, представленного в печатном виде.
Разработчик технического задания /Кравченко Андрей Геннадьевич/
«___» ______________2017 г. _____________________
(подпись)
Приложение Б
Рисунки тестирования программного средства
Рисунок Б.1 - Начальный экран приложения
Рисунок Б.2 - Регистрация пользователя
Рисунок Б.3 - Текущее местоположение пользователя
Рисунок Б.4 - Обработка ошибки регистрации
Рисунок Б.5 - Формирование заказа
Рисунок Б.6 - Список фирм для заказа эвакуатора
Рисунок Б.7 - Ожидание подтверждения заказа
Рисунок Б.8 - Статус оператора эвакуатора
Рисунок Б.9 - Заказ на эвакуацию
Рисунок Б.10 - Метка и маршрут до заказчика
Рисунок Б.11 - Местоположение оператора эвакуатора
Рисунок Б.12 - Выполнение заказа
Рисунок Б.13 - Оценка заказа
Приложение В
Таблицы экономического обоснования работы
Таблица В.1 - Оценка потенциальной социально-экономической результативности
Фактор научной результатив-ности |
Коэффи-циент значи-мости фактора |
Качество фактора |
Характеристика фактора |
Коэффи-циент достигну-того уровня |
|
Улучшение качества деятельности организации-заказчика |
Возможно, произойдёт |
ИС внедряется в рамках ряда организации |
|||
Вероятность повышения квалификации сотрудников |
Вероятность умеренная |
Внедрение разработки потребует повышения квалификации сотрудников по ряду узкоспециализи-рованных технологий |
|||
Рост престиж-ности организации-заказчика |
Возможно, произойдёт |
Репутация организации как прогрессивной в сфере при-менения информационных технологий |
Таблица В.2 - Распределение работ по этапам
№ |
Этапы |
Виды работ |
Исполнители |
|
1 |
Разработка технического задания (ТЗ) |
Принятие решения о разработке ИС |
Руководитель Исполнитель |
|
Разработка и утверждение технического задания |
Руководитель |
|||
Выбор способов создания ИС |
Исполнитель |
|||
2 |
Подготовительные работы |
Изучение особенностей функционирования аналогичных ИС и составление отчета о проделанном анализе |
Исполнитель |
|
Изучение процесса разработки пользовательского интерфейса |
Исполнитель |
|||
Разработка и согласование дизайна и шаблона ИС |
Руководитель Исполнитель |
|||
Разработка разделов, связанных с созданием ИС |
Исполнитель |
|||
3 |
Разработка технического раздела |
Программирование по требованиям, предъявленным к ИС |
Исполнитель |
|
Отладка модулей программы и поиск ошибок |
Исполнитель |
|||
4 |
Утверждение ВКР |
Устранение ошибок |
Руководитель Исполнитель |
|
Составление и утверждение отчета и документации |
Руководитель Исполнитель |
Таблица В.3 - Оценка эффективности отдельных видов работ
№ |
Вид работы |
Оценка трудоемкости, чел/часы |
Длитель-ность, часы |
|||
а(i) |
m(i) |
b(i) |
ti |
|||
1 |
Принятие решения о разработке ИС |
1 |
2 |
3 |
2 |
|
2 |
Разработка и утверждение технического задания |
2 |
3 |
4 |
3 |
|
3 |
Выбор способов создания ИС |
22 |
27 |
32 |
27 |
|
4 |
Изучение особенностей функционирования аналогичных ИС и составление отчета о проделанном анализе |
21 |
26 |
31 |
26 |
|
5 |
Изучение процесса разработки пользовательского интерфейса |
28 |
35 |
42 |
35 |
|
6 |
Разработка и согласование дизайна и шаблона ИС |
15 |
20 |
25 |
20 |
|
7 |
Разработка разделов, связанных с созданием ИС |
25 |
31 |
37 |
31 |
|
8 |
Программирование по требованиям, предъявленным к ИС |
140 |
170 |
200 |
170 |
|
9 |
Отладка модулей программы и поиск ошибок |
20 |
32 |
44 |
32 |
|
10 |
Устранение ошибок |
30 |
35 |
40 |
35 |
|
11 |
Составление и утверждение отчета и документации |
15 |
25 |
35 |
25 |
|
Итого: |
* |
* |
* |
406 |
Таблица В.4 - Перечень событий и работ
№ события |
Событие |
Код работы |
Наименование работы |
|
0 |
Появление идеи создания ИС |
0-1 |
Принятие решения о разработке ИС |
|
1 |
Решение о разработке ИС принято |
1-2 |
Разработка и утверждение технического задания |
|
2 |
Техническое задание утверждено |
2-3 |
Выбор способов создания ИС |
|
3 |
Способы создания ИС определены |
3-4 |
Изучение особенностей функционирования аналогичных ИС и составление отчета о проделанном анализе |
|
3-5 |
Изучение процесса разработки пользовательского интерфейса |
|||
4 |
Особенности функционирования аналогичных ИС изучены |
4-6 |
Разработка и согласование дизайна и шаблона ИС |
|
5 |
Процесс разработки пользовательского интерфейса изучен |
5-6 |
Разработка разделов, связанных с созданием ИС |
|
6 |
Дизайн, шаблон разработаны и согласованы, разделы готовы |
6-7 |
Программирование по требованиям, предъявленным к ИС |
|
7 |
Программирование ИС выполнено |
7-8 |
Отладка модулей программы и поиск ошибок |
|
8 |
Отладка модулей проведена, ошибки найдены |
8-9 |
Устранение ошибок |
|
9 |
Ошибки устранены |
9-10 |
Составление и утверждение отчета и документации |
|
10 |
Отчет утвержден |
10-10 |
Таблица В.5 - Параметры события сетевого графика
Код события |
tрi - ранний срок свершения события |
tпi - поздний срок свершения события |
Р - резерв события |
|
0 |
0 |
0 |
0 |
|
1 |
2 |
2 |
0 |
|
2 |
5 |
5 |
0 |
|
3 |
32 |
32 |
0 |
|
4 |
58 |
78 |
20 |
|
5 |
67 |
67 |
0 |
|
6 |
98 |
98 |
0 |
|
7 |
268 |
268 |
0 |
|
8 |
300 |
300 |
0 |
|
9 |
335 |
335 |
0 |
|
10 |
360 |
360 |
0 |
Таблица В.6- Параметры работ сетевого графика
Коды работ |
ti,j |
tрнi,j |
tпнi,j |
tpoi,j |
tпоi,j |
Rni,j |
Rсвi,j |
|
0-1 |
2 |
0 |
0 |
2 |
2 |
0 |
0 |
|
1-2 |
3 |
2 |
2 |
5 |
5 |
0 |
0 |
|
2-3 |
27 |
5 |
5 |
32 |
32 |
0 |
0 |
|
3-4 |
26 |
32 |
32 |
58 |
78 |
20 |
0 |
|
3-5 |
35 |
32 |
32 |
67 |
67 |
0 |
0 |
|
4-6 |
20 |
58 |
78 |
78 |
98 |
20 |
20 |
|
5-6 |
31 |
67 |
67 |
98 |
98 |
0 |
0 |
|
6-7 |
170 |
98 |
98 |
268 |
268 |
0 |
0 |
|
7-8 |
32 |
268 |
268 |
300 |
300 |
0 |
0 |
|
8-9 |
35 |
300 |
300 |
335 |
335 |
0 |
0 |
|
9-10 |
25 |
335 |
335 |
360 |
360 |
0 |
0 |
Таблица В.7 - SWOT-анализ возможности внедрения
Возможности |
Угрозы |
|
Экономия временных ресурсов в решении схожих задач Предоставление сотрудникам возможности передавать заявки между отделами и устанавливать их приоритет |
В случае особой специфики деятельности организации возможны трудности и сложности с ИС |
|
Сильные стороны |
Слабые стороны |
|
Удобный интерфейс Использование современных технологий защиты |
Недостатки, присущие языкам программирования, с помощью которых разработана ИС |
Таблица В.8 - Взвешенная балльная оценка факторов SWOT
Факторы |
Экспертная оценка важ-ности фактора |
Коэффициент весомости фактора |
Взвешенная оценка |
|
Возможности |
||||
Экономия временных ресурсов в решении схожих задач |
5 |
0,5 |
2,5 |
|
Предоставление сотрудникам возможности передавать заявки между отделами и устанавливать их приоритет |
4 |
0,5 |
2 |
|
Итого: |
- |
1 |
У=4,5 |
|
Угрозы |
||||
В случае особой специфики дея-тельности организации возможны трудности и сложности с ИС |
4 |
1 |
4 |
|
Итого: |
- |
1 |
У=4 |
|
Сильные стороны |
||||
Удобный интерфейс |
5 |
0,7 |
3,5 |
|
Использование современных технологий защиты |
4 |
0,3 |
1,2 |
|
Итого: |
- |
1 |
У=4,7 |
|
Слабые стороны |
||||
Недостатки, присущие языкам программирования, с помощью которых разработана ИС |
3 |
1 |
3 |
|
Итого: |
- |
1 |
У=3 |
Таблица В.9 - Матрица влияния и ответной реакции на PEST -факторы при оценке возможности внедрения
Факторы |
Степень и временные горизонты влияния (долго, средне-, краткосрочное) |
Характер влияния фактора |
Ответная реакция на влияние фактора |
|
Влияние экономики |
Сильное, долгосрочное |
Положи-тельное |
Стабилизация затрачиваемых ресурсов для развития |
|
Социокультур-ные тенденции |
Среднее, среднесрочное |
Положи-тельное |
Повышение интереса к организации |
|
Технологичес-кие инновации |
Среднее, среднесрочное |
Положи-тельное |
Появление новых предложений |
Таблица В.10 - Смета затрат на материалы
Материалы и другие ресурсы |
Ед. изм |
Кол-во |
Цена за ед, руб. |
Сумма |
|
Бумага писчая |
Пачка |
3 |
250 |
750 |
|
Заправка картриджа принтера |
Шт. |
1 |
450 |
450 |
|
Канцтовары |
- |
- |
- |
1 000 |
|
Телефонная связь и Internet |
- |
- |
- |
900 |
|
Прочие |
- |
- |
- |
1 500 |
|
ВСЕГО: |
4 600 |
Таблица В.11 - Расчет основной заработной платы
Код работы |
Исполнители |
Оклад |
Часовая зарплата |
Трудоемкость |
Затраты |
|
0-1, 1-2, 3-4, 4-6, 9-10 |
Руководитель |
27 000 |
153,4 |
131 |
20045 |
|
2-3, 3-5, 5-6, 6-7, 7-8, 8-9, 9-10 |
Исполнитель |
20 000 |
113,6 |
378 |
42955 |
|
Итого: |
63 000 |
Таблица В.12 - Смета затрат на разработку
№ |
Статьи расходов |
Сумма, руб. |
|
1 |
Материальные затраты |
4 600 |
|
2 |
Заработная плата основных исполнителей |
63 000 |
|
3 |
Дополнительная заработная плата |
6 300 |
|
4 |
Страховые взносы |
20 790 |
|
5 |
Накладные расходы |
31 500 |
|
Итого - стоимость разработки, Зразр |
126 190 |
Приложение Г
Расчет системы искусственного освещения помещения
Расчетный световой поток группы светильников с люминесцентными лампами:
(1)
где - нормированная минимальная освещенность, лк;
Z - коэффициент минимальной освещенности;
K - коэффициент запаса;
N - количество светильников;
n - количество ламп в одном светильнике;
- коэффициент использования светового потока ламп.
Показатель помещения:
(2)
где А и В - соответственно длина и ширина помещения.
Высота подвеса светильника над рабочей поверхностью рассчитывается по формуле:
, (3)
где h - высота помещения;
hp - высота рабочей поверхности;
hc - расстояние светового центра светильника от потолка рассчитывается по формуле 4 или если высота помещения меньше 3 м, то по формуле 5:
(4)
(5)
Оптимальное расстояние L между рядами светильников находится из соотношения:
(6)
где -коэффициент оптимального расстояния между геометрическими центрами светильников по светотехническим требованиям.
Общее количество светильников N при условиях равномерного освещения находятся по следующей формуле:
N=NшЧNдл, (7)
Количество светильников по ширине (количество рядов):
; (8)
Количество светильников по длине (для светильников с люминесцентными лампами):
, (9)
Для определения соответствия проектируемой системы освещения требованиям СНиП 23-05-95[3] выполняется проверочный расчет искусственного освещения.
Проверочный расчет фактической освещенности:
, (10)
Потребляемая мощность осветительной установки, Вт:
, (11)
где p - мощность лампы, Вт;
N - число светильников, шт.;
n - число ламп в светильнике;
kp - коэффициент, учитывающий потери пускорегулирующий аппаратуры.
Исходные данные для проведения расчета потребного воздухообмена при общеобменной вентиляции:
рабочим местом является помещение офиса с длиной 6 м, шириной 4 м и высотой 3,5 м;
высота рабочей поверхности hp=0,8 м;
длина светильника с люминесцентными лампами lсв = 1,534 м;
коэффициент запаса K=1,5, т.к. данное помещение относится к категории помещений с малым выделением пыли, дыма или копоти;
коэффициент использования светового потока з = 45 согласно параметрам помещения;
коэффициент оптимального расстояния между геометрическими центрами светильников по светотехническим требованиям л для люминесцентных ламп равен 1,1;
коэффициент минимальной освещенности Z для люминесцентных ламп равен 1,1;
нормированная минимальная освещенность лк;
коэффициент, учитывающий потери пускорегулирующий аппаратуры kp=1,25.
Расстояние светового центра светильника от потолка по формуле (5):
hc =0,25(3,5-0,8)= 0,675 м
Высота подвеса светильника над рабочей поверхностью по формуле (3):
3,5-0,8-0,675=2 м
Показатель помещения находится по формуле (2):
=
Оптимальное расстояние L между рядами светильников находится из соотношения (6):
м
Количество светильников по ширине (количество рядов) (8):
Количество светильников по длине (для светильников с люминесцентными лампами) (9):
Общее количество светильников N при условиях равномерного освещения находятся по следующей формуле (7):
N = 2*3=6
Расчетный световой поток группы светильников с люминесцентными лампами находится по формуле (1):
лм
Рассчитанный световой поток может отличаться от табличного на 10_20%. Световой поток ламп ЛБ мощностью 40 Вт составляет 3200 лм. Разница между рассчитанным и табличным световыми потоками составляет 9%, что означает, что расчет был выполнен верно.
Проверочный расчет фактической освещенности (10):
= лм
Условие выполняется, значит система освещения соответствует требованиям СНиП 23-05-95[3].
Потребляемая мощность осветительной установки, Вт(11):
=40*6*2*1,25= 600 Вт
Приложение Д
Исходный код программных модулей
Д.1 Исходный код приложения для водителя автомобиля
Д.1.1 Исходный код класса NavigationDrawerActivity
package com.example.evacuateme.Activity;
public class NavigationDrawerActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
private SharedPreferences sharedPreferences;
private FragmentTransaction fragmentTransaction;
private boolean isMapAttached = false;
public static boolean active;
private NotificationManager notificationManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_navigation_drawer);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
changeUI();
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.navigation_drawer, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id){
case R.id.nav_map:{
changeUI();
break;
}
case R.id.nav_orders:{
isMapAttached = false;
sharedPreferences = getSharedPreferences("API_KEY", Context.MODE_PRIVATE);
String api_key = sharedPreferences.getString("api_key", "");
GetOrderHistoryAsync getOrderHistoryAsync = new GetOrderHistoryAsync(NavigationDrawerActivity.this, api_key,
new GetOrderHistoryCallBack() {
@Override
public void completed(boolean result, List<OrderHistory> list_orders) {
if(result){
fragmentTransaction = getSupportFragmentManager().beginTransaction();
HistoryFragment historyFragment = new HistoryFragment();
Bundle bundle = new Bundle();
bundle.putString("list_orders", new Gson().toJson(list_orders));
historyFragment.setArguments(bundle);
fragmentTransaction.replace(R.id.main_container_fragment, historyFragment).commit();
}
}
});
getOrderHistoryAsync.execute();
break;
}
case R.id.nav_settings:{
isMapAttached = false;
fragmentTransaction = getSupportFragmentManager().beginTransaction();
CarSettingsFragment carSettingsFragment = new CarSettingsFragment();
fragmentTransaction.replace(R.id.main_container_fragment, carSettingsFragment).commit();
break;
}
case R.id.nav_exit:{
exit();
break;
}
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
@Override
public void onAttachFragment(Fragment fragment) {
super.onAttachFragment(fragment);
}
private void changeUI(){
fragmentTransaction = getSupportFragmentManager().beginTransaction();
if(isMapAttached){
return;
}
if(Net.isAvailable(NavigationDrawerActivity.this) && Gps.isAvailable(NavigationDrawerActivity.this)){
MainMapFragment mainMapFragment = new MainMapFragment();
fragmentTransaction.replace(R.id.main_container_fragment, mainMapFragment);
isMapAttached = true;
}
else {
GpsOffFragment gpsOffFragment = new GpsOffFragment();
fragmentTransaction.replace(R.id.main_container_fragment, gpsOffFragment);
}
fragmentTransaction.commit();
}
private void exit(){
sharedPreferences = getSharedPreferences("IS_LOGIN", Context.MODE_PRIVATE);
SharedPreferences.Editor editor_isLogin = sharedPreferences.edit();
editor_isLogin.putBoolean("is_login", false);
editor_isLogin.apply();
sharedPreferences = getSharedPreferences("API_KEY", Context.MODE_PRIVATE);
SharedPreferences.Editor editor_api_key = sharedPreferences.edit();
editor_api_key.putString("is_login", "");
editor_api_key.apply();
Intent intent = new Intent(NavigationDrawerActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}
@Override
protected void onResume() {
super.onResume();
active = true;
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
notificationManager.cancelAll();
}
@Override
protected void onPause() {
super.onPause();
active = false;
}
Д.1.2 Исходный код класса MainMapFragment
public class MainMapFragment extends Fragment implements OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener, com.google.android.gms.location.LocationListener, android.location.LocationListener {
private final static int PLAY_SERVICES_RESOLUTION_REQUEST = 1000;
private static int UPDATE_INTERVAL = 0; // 10 sec
private static int FATEST_INTERVAL = 0; // 5 sec
private static int DISPLACEMENT = 0; // 10 meters
private GoogleMap map;
private GoogleApiClient googleApiClient;
private LocationRequest locationRequest;
private boolean isLocated;
private ImageButton find_me_BTN;
private FragmentTransaction fragmentTransaction;
private Client client;
private Worker worker;
private SharedPreferences sharedPreferences;
private float zoom;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
client = Client.getInstance();
worker = Worker.getInstance();
zoom = 15;
getActivity().setTitle("EvacuateMe");
if (checkPlayServices()) {
buildGoogleApiClient();
createLocationRequest();
} else {
Toast.makeText(getContext(), "Google Play Services не поддерживаются данным устройством!",
Toast.LENGTH_SHORT).show();
}
}
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.main_map_fragment, container, false);
SupportMapFragment mapFragment = (SupportMapFragment) this.getChildFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
find_me_BTN = (ImageButton) view.findViewById(R.id.find_me_BTN);
find_me_BTN.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (worker.getOrder_status()){
case STATUS.OnTheWay:{
showWorkerPosition(true);
break;
}
case STATUS.Performing:{
showOrderLocation(true);
break;
}
default:{
Location temp = getMyLocation();
client.setLatitude(temp.getLatitude());
client.setLongitude(temp.getLongitude());
moveCameraToMyLocation();
break;
}
}
}
});
return view;
}
@Override
public void onMapReady(GoogleMap googleMap) {
map = googleMap;
map.getUiSettings().setZoomControlsEnabled(true);
map.setOnCameraMoveListener(new GoogleMap.OnCameraMoveListener() {
@Override
public void onCameraMove() {
zoom = map.getCameraPosition().zoom;
}
});
map.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
@Override
public void onMapLoaded() {
if(worker.getOrder_status()==STATUS.OnTheWay){
showWorkerPosition(true);
}
}
});
}
private void checkPermission() {
if (ActivityCompat.checkSelfPermission(getContext(),
android.Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(getContext(),
android.Manifest.permission.ACCESS_COARSE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(getActivity(),
new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, 1);
}
}
private boolean checkPlayServices() {
int resultCode = GooglePlayServicesUtil
.isGooglePlayServicesAvailable(getActivity());
if (resultCode != ConnectionResult.SUCCESS) {
if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) {
GooglePlayServicesUtil.getErrorDialog(resultCode, getActivity(),
PLAY_SERVICES_RESOLUTION_REQUEST).show();
} else {
Toast.makeText(getContext(), "Телефон не поддерживает Google Play Services!",
Toast.LENGTH_LONG).show();
getActivity().finish();
}
return false;
}
return true;
}
protected synchronized void buildGoogleApiClient() {
googleApiClient = new GoogleApiClient.Builder(getContext())
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API).build();
}
protected void createLocationRequest() {
locationRequest = new LocationRequest();
locationRequest.setInterval(UPDATE_INTERVAL);
locationRequest.setFastestInterval(FATEST_INTERVAL);
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setSmallestDisplacement(DISPLACEMENT);
}
protected void startLocationUpdates() {
checkPermission();
LocationServices.FusedLocationApi.requestLocationUpdates(
googleApiClient, locationRequest, this);
}
protected void stopLocationUpdates() {
LocationServices.FusedLocationApi.removeLocationUpdates(
googleApiClient, this);
}
private Location getMyLocation() {
checkPermission();
if (googleApiClient.isConnected()) {
return LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
}
return null;
}
//работа с картой
private void moveCameraToMyLocation(){
if(map!=null){
isLocated = true;
map.clear();
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(new LatLng(client.getLatitude(), client.getLongitude()))
.zoom(zoom)
.build();
CameraUpdate cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition);
map.animateCamera(cameraUpdate, 300, new GoogleMap.CancelableCallback() {
@Override
public void onFinish() {
}
@Override
public void onCancel() {
}
});
map.addMarker(new MarkerOptions().position(new LatLng(client.getLatitude(), client.getLongitude())));
}
else {
Toast.makeText(getContext(), "Карта не может отобразить Ваше местоположение!", Toast.LENGTH_SHORT).show();
}
}
private void showWorkerPosition(boolean flag){
if(map!=null){
map.clear();
if(flag){
LatLngBounds.Builder builder = new LatLngBounds.Builder();
builder.include(new LatLng(client.getLatitude(), client.getLongitude()))
.include(new LatLng(worker.getLatitude(), worker.getLongitude()));
CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngBounds(builder.build(), 200);
map.addMarker(new MarkerOptions().position(new LatLng(client.getLatitude(),
client.getLongitude()))).setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
map.addMarker(new MarkerOptions().position(new LatLng(worker.getLatitude(),
worker.getLongitude()))).setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE));
map.moveCamera(cameraUpdate);
}
else {
map.addMarker(new MarkerOptions().position(new LatLng(client.getLatitude(),
client.getLongitude()))).setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
map.addMarker(new MarkerOptions().position(new LatLng(worker.getLatitude(),
worker.getLongitude()))).setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE));
}
}
else {
Toast.makeText(getContext(), "Карта не может отобразить Ваше местоположение!", Toast.LENGTH_SHORT).show();
}
}
private void showOrderLocation(boolean flag){
if(map!=null){
map.clear();
if(flag){
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(new LatLng(worker.getLatitude(), worker.getLongitude()))
.zoom(zoom)
.build();
CameraUpdate cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition);
map.animateCamera(cameraUpdate);
}
map.addMarker(new MarkerOptions().position(new LatLng(worker.getLatitude(),
worker.getLongitude()))).setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
}
else {
Toast.makeText(getContext(), "Карта не может отобразить Ваше местоположение!", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onConnected(@Nullable Bundle bundle) {
startLocationUpdates();
}
@Override
public void onConnectionSuspended(int i) {
googleApiClient.connect();
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
Toast.makeText(getContext(), "Установить GPS соединение не удалось!", Toast.LENGTH_SHORT).show();
}
@Override
public void onLocationChanged(Location location) {
if(isLocated){
return;
}
if(worker.getOrder_status() == STATUS.OnTheWay || worker.getOrder_status() == STATUS.Performing){
return;
}
client.setLatitude(location.getLatitude());
client.setLongitude(location.getLongitude());
moveCameraToMyLocation();
}
@Override
public void onStop() {
super.onStop();
if (googleApiClient.isConnected()) {
googleApiClient.disconnect();
}
}
@Override
public void onStart() {
super.onStart();
if (googleApiClient != null) {
googleApiClient.connect();
}
}
@Override
public void onPause() {
super.onPause();
stopLocationUpdates();
LocalBroadcastManager.getInstance(getContext()).unregisterReceiver(broadcastReceiver);
}
@Override
public void onResume() {
super.onResume();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(MyAction.OrderCanceledByClient);
intentFilter.addAction(MyAction.OrderCanceledByWorker);
intentFilter.addAction(MyAction.WorkerLocationChanged);
intentFilter.addAction(MyAction.OrderConfirmed);
intentFilter.addAction(MyAction.OrderLocationChanged);
intentFilter.addAction(MyAction.OrderPerforming);
intentFilter.addAction(MyAction.OrderCompleted);
LocalBroadcastManager.getInstance(getContext()).registerReceiver(broadcastReceiver, intentFilter);
if (checkPlayServices() && googleApiClient.isConnected()) {
startLocationUpdates();
}
switch (worker.getOrder_status()){
case STATUS.OnTheWay:{
OnTheWayFragment onTheWayFragment = new OnTheWayFragment();
fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.info_container_fragment, onTheWayFragment).commit();
break;
}
case STATUS.Performing:{
PerformingFragment performingFragment = new PerformingFragment();
fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.info_container_fragment, performingFragment).commit();
break;
}
default:{
StartFragment startFragment = new StartFragment();
fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.info_container_fragment, startFragment).commit();
break;
}
}
}
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(final Context context, Intent intent) {
switch (intent.getAction()){
case MyAction.OrderCanceledByClient:{
Intent service_intent = new Intent(getContext(), GetWorkerLocationService.class);
getContext().stopService(service_intent);
Intent status_service = new Intent(getContext(), CheckOrderStatusService.class);
getContext().stopService(status_service);
StartFragment startFragment = new StartFragment();
fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.info_container_fragment, startFragment).commit();
break;
}
case MyAction.OrderCanceledByWorker: {
Log.d("EVENT", "Заказ отменен на карте!");
Intent service_intent = new Intent(getContext(), GetWorkerLocationService.class);
getContext().stopService(service_intent);
Intent status_service = new Intent(getContext(), CheckOrderStatusService.class);
getContext().stopService(status_service);
StartFragment startFragment = new StartFragment();
fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.info_container_fragment, startFragment).commit();
break;
}
case MyAction.WorkerLocationChanged:{
showWorkerPosition(false);
break;
}
case MyAction.OrderPerforming:{
showOrderLocation(true);
Toast.makeText(getContext(), "Водитель приехал!", Toast.LENGTH_SHORT);
PerformingFragment performingFragment = new PerformingFragment();
fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.info_container_fragment, performingFragment).commit();
break;
}
case MyAction.OrderLocationChanged:{
showOrderLocation(true);
break;
}
case MyAction.OrderCompleted:{
Toast.makeText(getContext(), "Заказ завершен!", Toast.LENGTH_SHORT);
Intent service_intent = new Intent(getContext(), GetWorkerLocationService.class);
getContext().stopService(service_intent);
Intent status_service = new Intent(getContext(), CheckOrderStatusService.class);
getContext().stopService(status_service);
sharedPreferences = getContext().getSharedPreferences("API_KEY",Context.MODE_PRIVATE);
String api_key = sharedPreferences.getString("api_key", "");
App.getApi().getOrderInfo(api_key, worker.getOrder_id()).enqueue(new Callback<OrderInfo>() {
@Override
public void onResponse(Call<OrderInfo> call, Response<OrderInfo> response) {
if(response==null){
Toast.makeText(getContext(), "Получить информацию о заказе не удалось! Свяжитесь с водитилем!",
Toast.LENGTH_SHORT).show();
Intent intent = new Intent(getContext(), NavigationDrawerActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
getContext().startActivity(intent);
}
else {
switch (response.code()){
case STATUS.Ok:{
Bundle bundle = new Bundle();
bundle.putInt("order_id", response.body().order_id);
bundle.putString("company", response.body().company);
bundle.putDouble("distance", response.body().distance);
bundle.putDouble("summary", response.body().summary);
Intent activity_intent = new Intent(getContext(), OrderInfoActivity.class);
activity_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
activity_intent.putExtra("data", bundle);
getContext().startActivity(activity_intent);
break;
}
case STATUS.BadRequest:{
break;
}
case STATUS.Unauthorized:{
break;
}
case STATUS.NotFound:{
break;
}
}
}
}
@Override
public void onFailure(Call<OrderInfo> call, Throwable t) {
}
});
break;
}
}
}
};
Д.2 Исходный код приложения для оператора эвакуатора
Д.2.1 Исходный код класса GetOrderService
public class GetOrderService extends Service {
private Timer timer;
private TimerTask timerTask;
private SharedPreferences sharedPreferences;
private String api_key;
private NotificationManager notificationManager;
private Order order;
@Override
public void onCreate() {
super.onCreate();
timer = new Timer();
sharedPreferences = getSharedPreferences("API_KEY", Context.MODE_PRIVATE);
api_key = sharedPreferences.getString("api_key", "");
notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
order = Order.getInstance();
Log.d("GOS", "STARTED");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if(timerTask!=null){
timerTask.cancel();
}
timerTask = new TimerTask() {
@Override
public void run() {
Run();
}
};
timer.schedule(timerTask, 0, 4000);
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
timerTask.cancel();
timer.cancel();
}
private void Run(){
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
try {
App.getApi().getOrder(api_key).enqueue(new Callback<DataOrder>() {
@Override
public void onResponse(Call<DataOrder> call, Response<DataOrder> response) {
if(response == null){
return;
}
switch (response.code()){
case STATUS.NotFound:{
break;
}
case STATUS.Ok:{
order.setOrder_id(response.body().order_id);
order.setLatitude(response.body().latitude);
order.setLongitude(response.body().longitude);
order.setPhone(response.body().clientPhone);
order.setCar_model(response.body().car_model);
order.setCar_colour(response.body().car_colour);
order.setDistance(response.body().distance);
order.setOrder_status(Order.Awaiting);
if(NavigationDrawerActivity.active){
Intent intent = new Intent(MyAction.Order);
LocalBroadcastManager.getInstance(GetOrderService.this).sendBroadcast(intent);
}
else {
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(GetOrderService.this)
.setSmallIcon(android.R.mipmap.sym_def_app_icon)
.setContentTitle("У Вас новый заказ!")
.setContentText("Нажмите для просмотра");
Intent intent = new Intent(GetOrderService.this, NavigationDrawerActivity.class);
Подобные документы
Современное состояние рынка мобильных приложений. Основные подходы к разработке мобильных приложений. Обоснование выбора целевой группы потребителей приложения. Этапы проектирования и разработки мобильного приложения для операционной системы Android.
курсовая работа [987,1 K], добавлен 27.06.2019Основы создания мидлетов (midlet) - MIDP приложений для мобильных устройств на языке Java. Особенности устройств, для которых мидлеты предназначены. Библиотеки javax.microedition. Практические примеры создания MIDP приложений для телефона и их запуск.
методичка [25,9 K], добавлен 30.06.2009Анализ архитектуры информационной системы, в структуру которой входят системы файл-сервер и клиент-сервер. Сравнение языков запросов SQL и QBE. Принципы разработки приложений архитектуры клиент-сервер при помощи структурированного языка запросов SQL.
курсовая работа [88,9 K], добавлен 11.04.2010Архитектура операционной системы Android, набор библиотек для обеспечения базового функционала приложений и виртуальная машина Dalvik. Объектно-ориентированный язык программирования Java как инструмент разработки мобильных приложений для ОС Android.
дипломная работа [1,6 M], добавлен 08.07.2015Разработка критериев оценки экрана веб-приложений. Основные подходы к защите веб-приложений. Анализ российских нормативных документов. Зарубежная практика выбора экрана веб-приложений. Разработка и обоснование общих требований к механизмам защиты.
дипломная работа [68,7 K], добавлен 04.08.2016Подходы и алгоритмы автоматизации тестирования. Анализ специфики работы с локальными и веб-приложениями, внедрение автоматических тестов в процесс контроля качества приложений Global XB, GCube и Thistle. Оптимальный инструмент разработки скриптов.
дипломная работа [1,5 M], добавлен 15.01.2012Преимущество построения Web-приложений для поддержки стандартных функций браузера. Настройка проекта Web-приложения. Создание и изменение исходных файлов. Изменение файла JavaServer Pages по умолчанию. Основные проблемы при выполнении Web-приложений.
контрольная работа [362,8 K], добавлен 10.11.2013Психолого-педагогические и обще-методические аспекты использования ИКТ в образовательном процессе. Анализ сред разработки мобильных приложений и языков программирования. Технология создания программно-методического комплекса для изучения чукотского языка.
дипломная работа [5,8 M], добавлен 07.06.2014Знакомство с этапами разработки трёх приложений для системы семейства Linux с использованием языка программирования С++. Анализ особенностей операционной системы Ubuntu 12.10. Характеристика способов тестирования команд с помощью стандартных средств.
контрольная работа [732,1 K], добавлен 06.08.2013Обзор рынка мобильных приложений, социальных сетей, аналогов. Обзор инструментов разработки: Android Studio, Microsoft visual С# 2012, PostgreeSQL, API Открытых данных Вологодской области, API Социальных сетей. Программный код, разработка интерфейса.
дипломная работа [2,6 M], добавлен 10.07.2017