close

Вход

Забыли?

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

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

код для вставки
Powered by TCPDF (www.tcpdf.org)
АННОТАЦИЯ
ВКР 65 с., 29 рис., 1 табл., 33 источника, 1 прил.
СОСТАВЛЕНИЕ МАРШРУТОВ, ТУРИСТИЧЕСКИЕ МАРШРУТЫ, ГЕОСОЦИАЛЬНЫЕ
СЕТИ,
ПОИСК
ДОСТОПРИМЕЧАТЕЛЬНОСТЕЙ,
ПУТЕШЕСТВИЯ.
Выпускная квалификационная работа посвящена разработке подсистемы
составления индивидуальных туристических маршрутов и экскурсий на базе
геосоциальной сети.
В первой главе выпускной квалификационной работы рассмотрены геосоциальные сети и особенности их функционирования; выполнен обзор
существующих аналогов и прототипов подсистемы составления индивидуальных
туристических маршрутов; выполнена постановка задачи исследователя.
Во
второй
главе
выпускной
квалификационной
работы
построена
архитектура подсистемы с учетом требований гео-социальной сети; разработана
структурная схема подсистемы составления индивидуальных туристических
маршрутов; создана инфологическая модель данных подсистемы; разработан
общий алгоритм функционирования подсистемы составления индивидуальных
туристических маршрутов.
В третьей главе выпускной квалификационной работы разработаны
алгоритмы
реализации
основных
функций
подсистемы
составления
индивидуальных туристических маршрутов; проведен выбор инструментальных
средств реализации подсистемы; выполнено построение логической и физической
модели базы данных; смоделирован диалог пользователя с подсистемой;
представлены
экранные
формы
реализованной
индивидуальных туристических маршрутов.
подсистемы
составления
4
ОГЛАВЛЕНИЕ
ВВЕДЕНИЕ
6
1 АНАЛИЗ И ИССЛЕДОВАНИЕ СУЩЕСТВУЮЩИХ СИСТЕМ
СОСТАВЛЕНИЯ ИНДИВИДУАЛЬНЫХ ТУРИСТИЧЕСКИХ МАРШРУТОВ
8
1.1 Гео-социальные сети. Особенности функционирования
8
1.2 Обзор существующих аналогов и прототипов подсистемы составления
индивидуальных туристических маршрутов
9
1.3 Постановка задачи для разработки подсистемы составления
индивидуальных туристических маршрутов
16
2 ПРОЕКТИРОВАНИЕ ПОДСИСТЕМЫ СОСТАВЛЕНИЯ
ИНДИВИДУАЛЬНЫХ ТУРИСТИЧЕСКИХ МАРШРУТОВ
20
2.1 Построение архитектуры подсистемы составления индивидуальных
туристических маршрутов с учетом требований гео-социальной сети
20
2.2 Построение структурной схемы подсистемы составления
индивидуальных туристических маршрутов
23
2.3 Построение инфологической модели данных подсистемы составления
индивидуальных туристических маршрутов
27
2.4 Общий алгоритм функционирования подсистемы составления
индивидуальных туристических маршрутов
29
3 РЕАЛИЗАЦИЯ ПОДСИСТЕМЫ СОСТАВЛЕНИЯ ИНДИВИДУАЛЬНЫХ
ТУРИСТИЧЕСКИХ МАРШРУТОВ
32
3.1 Алгоритмы реализации основных функций подсистемы составления
индивидуальных туристических маршрутов
32
3.2 Выбор инструментальных средств реализации подсистемы составления
индивидуальных маршрутов
36
3.3 Построение логической и физической модели базы данных
43
3.4 Моделирование диалога пользователя с подсистемой составления
индивидуальных туристических маршрутов
48
5
3.5 Экранные формы реализованной подсистемы составления
индивидуальных туристических маршрутов
55
ЗАКЛЮЧЕНИЕ
62
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
63
Приложение А (обязательное) Листинг программы
66
Удостоверяющий лист
75
Информационно-поисковая характеристика документа на электронном
носителе
76
6
ВВЕДЕНИЕ
В
современном
мире
все
большую
популярность
набирают
социальные сети. По данным отчета группы Mail.ru, ежемесячная аудитория
только социальной сети ВКонтакте охватывает 87 млн. человек [1]. Однако,
помимо обычных социальных сетей пользователи также активно пользуются
и различными гео-социальными сервисами, которые позволяют помимо
привычного
общения
делать
отметки
о
своем
местоположении
и
выкладывать фото- и видеоотчеты с привязкой к нему.
Такая популярность объясняется ростом продажи смартфонов,
позволяющих быстро и достаточно точно определять местоположение
пользователя, а также возможность отправлять фото и видео просто и без
дополнительных сложностей [2,3].
Помимо возможности выкладывать отметки и фото, гео-локационные
сети помогают найти места для отдыха, развлечений и даже путешествий,
используя информацию от самих пользователей. Таким образом, подобного
рода сервисы помогают пользователям не только делиться информацией, но
и получать ее.
Однако зачастую пользователи хотят не только найти интересные
места, но и спланировать маршрут для их посещения. Для этого необходимо
учитывать множество факторов: график работы всех запланированных мест,
их удаленность друг от друга, время в пути от одного места до другого, а
также транспорт, на котором можно добраться.
Очевидной является актуальность всех вышеописанных проблем,
решением которых может стать подсистема гео-социального сервиса,
позволяющая пользователям обмениваться информацией, хранить метки, а
также
искать
и
планировать
маршруты
по
определенным
точкам.
Разрабатываемая подсистема индивидуальных туристических маршрутов
предполагает выбор маршрутов в рамках одного города, а также
редактирование
пользователя [4].
время
или
порядка
их
посещения
по
усмотрению
7
Целью выпускной квалификационной работы является разработка
подсистемы составления индивидуальных туристических маршрутов на базе
гео-социальной сети, что приведет к расширению функциональных
возможностей гео-социального сервиса, а также упрощению работы
пользователя.
Основными задачами, рассматриваемыми в рамках данной работы,
являются:
–
исследование особенностей функционирования гео-социальных
–
обзор существующих аналогов и прототипов подсистемы
сетей;
составления туристических маршрутов;
–
построение структурной схемы и инфологической модели
данных для подсистемы составления туристических маршрутов;
–
разработка алгоритмов функционирования подсистемы;
–
выбор инструментальных средств реализации разрабатываемой
подсистемы;
–
построение логической и физической модели базы данных;
–
реализация
туристических маршрутов.
подсистемы
составления
индивидуальных
8
1 АНАЛИЗ И ИССЛЕДОВАНИЕ СУЩЕСТВУЮЩИХ СИСТЕМ
СОСТАВЛЕНИЯ ИНДИВИДУАЛЬНЫХ ТУРИСТИЧЕСКИХ
МАРШРУТОВ
1.1 Гео-социальные сети. Особенности функционирования
Гео-локационные
социальные
сети
–
вид
социальных
сетей,
использующих гео-кодирование и гео-метки. Гео-кодирование – процесс
преобразования почтовых адресов в гео-координаты, который используется
для назначения координат данным, содержащим географический компонент,
в частности, записям и фотографиям, с указанием конкретного адреса,
местонахождения пользователя в определенный момент времени или с
описанием какого-либо места. Пользователи предоставляют информацию о
посещенных местах, а также о своем местонахождении, что позволяет такого
рода сетям объединять пользователей и координировать их действия. Геолокация в мобильных устройствах реализуется с помощью GPS, текстовой
информации или LBS, в компьютерах – при помощи IP или трилатерации.
Гео-локация – обнаружение реального географического положения (страна,
город) компьютера, соединённого с сетью Интернет, мобильного устройства,
получаемое на основе IP-адреса, данных, встроенных в программное или
аппаратное обеспечение, или другой информации [5-7].
Несмотря на то, что гео-социальные сети появились не так давно,
благодаря наглядности предоставляемой информации, с первых месяцев они
завоевали внимание многих пользователей. Используя данные спутниковых
снимков и карт, этот вид сервисов позволяет не только предоставлять всю
необходимую пользователям информацию в более подробном и понятном
виде, но и расширяет границы предоставляемых функций.
Важнейшей
функцией
гео-социальной
сети
является
помощь
пользователям в поиске информации об интересующих их местах, событиях
или достопримечательностях. Однако зачастую пользователи хотят посетить
9
большое количество мест, что не позволяет сделать это за один день. Кроме
того, путешественнику необходимо выстраивать свой маршрут, анализируя
расположение каждой достопримечательности относительно другой. Для
решения данной задачи многие гео-социальные сети предоставляют
дополнительные
функции,
позволяющие
формировать
оптимальные
индивидуальные маршруты.
Работодатели в некоторых фирмах также используют сервисы для
контроля деятельности персонала, в частности, работу курьера. Кроме того,
возможно отслеживание контроля посещаемости в учебных заведениях. В
одном из университетов Америки была запущена кампания по повышению
посещаемости студентами с помощью отметок в сети Foursquarе.
В настоящее время гео-социальные сервисы используются не только
для общения между людьми, но и в других сферах жизни общества. Так,
особенно часто их применяют при продвижении брендов. Многие
зарубежные компании активно используют гео-социальные сети для
привлечения новых покупателей, организуя дополнительный трафик у мест
продажи и стимулируя потребление.
1.2 Обзор существующих аналогов и прототипов подсистемы
составления индивидуальных туристических маршрутов
Учитывая активное развитие гео-социальных сетей, не удивительно,
что на сегодняшний день существуют десятки сервисов, предлагающих
пользователям не только определить и отметить свое местоположение, но и
просмотреть карты города, с размещенной на ней информацией других
пользователей. Однако стоит отметить, что в «чистом» виде гео-социальных
сетей нет, а сервисы Google и Яндекс решают все вышеперечисленные
проблемы лишь частично. Из чего можно сделать вывод, что не все системы
позволяют выстраивать индивидуальные пользовательские маршруты.
10
Таким образом, на данный момент доступно несколько сервисов,
предоставляющих функции, схожие с разрабатываемой подсистемой.
Рассмотрим некоторые из них.
–
Waytips
сайт,
позволяющий
планировать
маршруты
по
достопримечательностям в рамках одного города. Пользователям предлагает
выбрать город для посещения, а после открывается список всех доступных в
нем достопримечательностей. К каждой достопримечательности можно
просмотреть комментарии и отзывы путешественников, уже побывавших
там. Кроме того, пользователям предоставляется возможность не только
планировать свой собственный маршрут, но и просматривать маршруты
других путешественников, а также сохранять их себе.
Свои
спланированные
маршруты
Waytips
позволяет
сделать
приватными или доступными другим пользователям. Помимо этого, сайт
позволяет вести свой блог, привязанный к достопримечательностям
построенного маршрута [8].
Достоинства Waytips состоят в следующем:
–
интуитивно понятный интерфейс;
–
возможность выбора готового маршрута;
–
распределение
посещения
большого
количества
достопримечательностей по дням;
–
возможность просмотра на карте маршрута, как для всех дней,
так и для каждого по отдельности;
–
указывается приблизительное суммарное расстояние маршрута;
–
возможность создания своего маршрута на автомобиле;
–
возможность построения маршрута для незарегистрированных
пользователей;
–
возможность редактирования своего маршрута.
Помимо достоинств у сервиса есть и недостатки:
–
отсутствие
возможности
скопированного у другого пользователя;
редактирования
маршрута,
11
–
города, в которых нет аэропортов, недоступны для посещения;
–
возможность построения большого маршрута с помощью
различного транспорта только в пределах Европы;
–
функции сервиса не отображены в одном списке, иногда для
поиска нужной функции необходимо переходить по множеству ссылок.
На рисунке 1 представлена главная страница Waytips, а рисунок 2
демонстрирует готовый маршрут.
Рисунок 1 – Главная страница Waytips
Рисунок 2 – Маршрут по городу Осло, Норвегия
12
YouRoute – сервис, разработанный для составления маршрутов,
начиная от выбора стран для путешествия и заканчивая бронированием
отелей, автомобилей и даже получением туристической страховки. Для
путешествия по одному городу сайт предлагает возможный выбор
достопримечательностей, а также наиболее оптимальный маршрут по ним.
Если же пользователю необходимо посетить несколько городов или стран, то
сервис помогает построить возможные варианты пути до них, а также
предложит помощь в оформлении билетов.
Кроме того, зарегистрированные пользователи могут оставлять свои
отзывы о посещенных местах и выкладывать фотоотчеты. Важным плюсом
YouRoute является возможность сгенерировать готовый маршрут в PDF-файл
в виде буклета, содержимым которого будут являться карта с планом
путешествия и описание достопримечательностей [9].
Данный сервис обладает следующими достоинствами:
–
возможность выбора готового маршрута;
–
построение
маршрута
с
использованием
различного
вида
транспорта:
–
просмотр отзывов и фотоотчетов пользователей при выборе
готового маршрута;
–
возможность корректировки времени путешествия в своем
маршруте;
–
генерация маршрута в PDF-файл.
Помимо достоинств сервис имеет и существенные недостатки:
–
недоработанное мобильное приложение;
–
нет
возможности
выстраивать
маршруты
по
достопримечательностям;
–
плохо проработанные карты.
На рисунках 3 и 4 изображен маршрут с возвращением в точку, из
которой начиналось путешествие.
13
Рисунок 3 – Построение маршрута из Москвы в Пекин и Шанхай
Рисунок 4 – Построение оставшейся части путешествие и возвращение в
начальную точку
Triplantica – конструктор, позволяющий выстраивать пешеходные
маршруты. Сервис предлагает пользователям выбрать город и время
пребывания
в
нем,
после
чего
остается
выбрать
категории
достопримечательностей, интересующие пользователя, а также время и даты
их
посещения. Масштабы
ограничиваться
Построенный
одним
план
путешествия
городом
будет
или
включать
могут
даже
в
себя
быть
различными
несколькими
–
странами.
достопримечательности,
разделенные по дням, в соответствии с их расположением и временем
посещения.
Кроме того, пользователи могут перестраивать свой маршрут по
собственному желанию. Возможно изменение порядка или времени
14
посещения
заведений,
предусмотрен
выбор
дополнительных
достопримечательностей [10].
Triplantica обладает определенными достоинствами:
–
возможность
выстраивания
приоритета
категорий
достопримечательностей при выборе мест для посещения;
–
хорошо проработанные карты;
–
возможность редактирования маршрута;
–
распределение посещения мест по дням и времени;
–
возможность сохранения в PDF-файл готового маршрута с
описанием всех достопримечательностей и картой;
Однако сервис имеет и свои недостатки:
–
иногда не учитывается слишком большое расстояние между
достопримечательностями;
–
ориентация на страны Европы, построение маршрутов по странам
Азии или Африки вызывает затруднения;
–
нет мобильного приложения.
На рисунке 5 представлен объединенный маршрут на семь дней
посещения, а на рисунке 6 изображен план посещения на один день.
Рисунок 5 – Объединенный маршрут по Санкт-Петербургу
15
Рисунок 6 – Маршрут на один день посещения
В таблице 1 приведен сравнительный анализ аналогов сервиса с
разрабатываемой подсистемой индивидуальных маршрутов.
Таблица 1– Сравнительная таблица аналогов и прототипов
Критерий
Название
сервиса
Waytips
YouRoute
Triplantica
Разрабатыва
емая
подсистема
Учет
Передвиж Генерац Отображен Возможность
расстоян
ение
ия
ие
коммерциализ
ия
различны маршрут фотоотчет
ации
между ми видами а в PDFов при
созданного
точками транспорт
файл
выборе
маршрута
а
готового
маршрута
+
+
+
+
+
+
+
+
+
+
+
+
Подробно изучив результаты сравнительного анализа, можно сделать
вывод о том, что ни одна из существующих на сегодняшний день систем не
учитывает всех необходимых функций для наиболее комфортного создания
маршрутов или их просмотра. Кроме того, разрабатываемая подсистема
будет предусматривать не только создание собственного маршрута, но и
возможность его продажи другим пользователям. Что, безусловно, является
16
важной функцией для опытных путешественников, желающих поделиться
своими впечатлениями о достопримечательностях и необычных местах
города.
1.3 Постановка задачи для разработки подсистемы составления
индивидуальных туристических маршрутов
В
рамках
выпускной
квалификационной
работы
необходимо
спроектировать подсистему составления индивидуальных туристических
маршрутах на базе уже разработанной геосоциальной сети YouGid. Как было
сказано ранее, гео-социальные сети позволяют пользователям обмениваться
гео-информацией, которая может включать в себя готовые туристические
маршруты. Таким образом, необходимо определить, как пользователи будут
создавать маршруты, управлять ими, а также делиться понравившимися
маршрутами с другими пользователями сервиса.
На сегодняшний день существует несколько подходов, позволяющих
описать бизнес-процессы, происходящие в системе. Один из самых
популярных
подходов
ввиду
своей
универсальности
–
объектно-
ориентированный, в частности – диаграмма прецедентов. Использование
данного вида диаграмм позволит наглядно и достаточно подробно описать
функционал проектируемой подсистемы [11, 12, 13].
При разработке подсистемы не предполагается деление пользователей
на группы и ограничение доступа для какого-либо вида пользователей.
Пользователи системы могут просматривать сгруппированные маршруты,
создавать метки на карте, формировать маршруты, публиковать, управлять
ими, добавлять в избранное, а также рассказывать другим пользователям о
маршрутах.
Просмотр сгруппированных маршрутов предполагает возможность
отсортировать маршруты по какому-либо критерию, узнать дополнительную
информацию о маршруте, а также приобрести понравившийся маршрут.
17
Возможные критерии сортировки – тема маршрута, время прохождения,
расстояние, вид – пеший или автомобильный, стоимость, рейтинг автора или
город, по которому построен маршрут. Отражением данных функций на
схеме является
который,
в
маршрутов»,
прецедент «Просмотр
свою очередь,
«Просмотр
состоит
подробной
сгруппированных
из
маршрутов»,
прецедентов «Приобретение
информации
о
маршруте»
и
«Сортировать маршруты».
Создание метки на карте возможно только при условии задания
географического расположения точки, а также названия самой метки. За
данную функцию на схеме отвечает прецедент «Создание метки маршрута на
карте», состоящий из еще одного прецедента – «Создание метки и задание ее
названия».
Формирование маршрута включает в себя добавление созданных
ранее меток в один маршрут, а также упорядочивание собранных меток по
желанию пользователя. Все функции описаны в прецеденте «Формирование
маршрута», который делится на прецеденты «Добавление метки в маршрут»
и «Упорядочивание меток в маршруте».
Для
публикации
маршрута
пользователь
должен
внести
дополнительную информацию о маршруте, задать его название и описание, а
также указать стоимость для других пользователей, что полностью
описывает прецедент «Публикация маршрута», включающий в себя
прецеденты
«Задание
цены
маршрута»,
«Внесение
дополнительной
информации по маршруту» и «Задание и название описания маршрута».
Управление предполагает проверку прав доступа на редактирование
маршрута конкретным пользователем, редактирование дополнительной
информации о маршруте, редактирование названия и описания, а также
возможность изменения стоимости маршрута. Прецедент, отражающий все
эти функции на схеме – «Управление маршрутами» состоит из прецедентов
«Изменение цены маршрута», «Проверка прав доступа на редактирование
18
маршрута»,
«Редактирование
дополнительной
информации»
и
«Редактирование названия и описания».
Добавление
в
избранное
подразумевает
просмотр
избранных
маршрутов, а также их сортировку, что описано в прецеденте «Добавить
маршрут в избранное».
После покупки маршрута пользователь может написать о нем отзыв,
рассказать о нем пользователям гео-социальной сети YouGid или других
социальных сетей, что отражено в прецеденте «Рассказать о маршруте» [14].
Диаграмма вариантов использования представлена на рисунке 7.
Рисунок 7 – Диаграмма вариантов использования
19
Исходя из всего вышесказанного, можно сделать вывод, что для
расширения функциональных возможностей гео-социальной сети YouGid
необходимо создать подсистему составления индивидуальных туристических
маршрутов, которая позволит пользователям составлять свои маршруты,
покупать маршруты, созданные другими пользователями сети, а также
делиться информацией о маршрутах не только в рамках гео-социальной сети
YouGid, но и за ее пределами.
Результатом проведения анализа предметной области стал список
следующих функций, необходимых для работы пользователя при создании,
просмотре, приобретении и управлении маршрутами:
−
просмотра сгруппированных маршрутов;
−
создания метки маршрута на карте;
−
формирования маршрута;
−
управления маршрутами;
−
публикации маршрута;
−
добавления маршрута в избранное;
−
функция, позволяющая рассказать о маршруте.
Помимо
функциональных
к
подсистеме
также
предъявляются
нефункциональные требования, такие как понятный пользовательский
интерфейс, а также надежная и стабильная работа системы с возможностью
сохранения пользовательских данных в случае сбоя.
Таким
образом,
при
разработке
подсистемы
составления
индивидуальных туристических маршрутов необходимо учитывать не только
функциональные
требования
к
подсистеме,
но
функционирования гео-локационных социальных сетей.
и
особенности
20
2 ПРОЕКТИРОВАНИЕ ПОДСИСТЕМЫ СОСТАВЛЕНИЯ
ИНДИВИДУАЛЬНЫХ ТУРИСТИЧЕСКИХ МАРШРУТОВ
2.1 Построение архитектуры подсистемы составления
индивидуальных туристических маршрутов с учетом требований
гео-социальной сети
Архитектура подсистемы представляет собой
все компоненты
подсистемы с указанием свойств каждого из них, а также связей компонентов
друг с другом. Разработка архитектуры направлена на поиск такой структуры
подсистемы, которая позволит найти баланс между производительностью,
качеством и надежностью.
На сегодняшний день одной из самых популярных архитектур
является
клиент-серверная.
Использование
такого
вида
архитектуры
позволяет снизить нагрузку на участников обмена информацией, что делает
возможным обращение сразу нескольких пользователей к одному серверу.
При этом количество обращений клиентов к серверу зависит от мощности
самого сервера и сложности запроса.
Классическая
клиент-серверная
архитектура
состоит
из
двух
элементов – клиента и сервера. При этом клиентские программы работают с
использованием запросов к серверному программному обеспечению, а
базовые функции сервиса разделяются между клиентом и сервером. Другим
вариантом такого вида архитектуры является трехзвенная клиент-серверная
архитектура, включающая в себя помимо клиента и сервера еще и базу
данных.
Благодаря разделению функций серверов, трехзвенная архитектура
имеет более сложную структуру, но обладает множеством преимуществ. Она
имеет высокую степень гибкости и масштабируемости, является более
безопасной и надежной, снижает нагрузку на клиентское приложение, а
также увеличивает производительность системы и скорость выполнения
21
работы. Кроме того, такая архитектура снижает требования к сети,
связывающей клиента и сервер.
Таким образом, оценка преимуществ различных видов архитектуры
показала, что именно трехзвенная клиент-серверная архитектура подходит
для проектирования гео-социальной сети YouGid. Основной задачей в рамках
данной работы является добавление в уже реализованный сервис подсистемы
составления индивидуальных туристических маршрутов.
Наиболее
удобным
и
наглядным
способом
представления
архитектуры сервиса является логическая схема, описывающая структуру
архитектуры сервиса, а также взаимодействие всех его частей. Логическая
схема гео-социальной сети YouGid со встроенной подсистемой составления
индивидуальных туристических маршрутов представлена на рисунке 8.
Рисунок 8 – Логическая схема сети построения сервиса с разрабатываемой
подсистемой
22
В качестве клиента в данной архитектуре выступают мобильное
приложение для прохождения маршрутов, а также веб-интерфейс сервиса
составления маршрута, в совокупности они образуют front-office. Таким
образом, пользователи составляют маршрут при помощи подсистемы
сервиса, а затем проходят его, используя мобильное приложение.
Серверная часть представлена сервером приложений, который хранит
программные модули, сценарии выполнения и т.д. Что позволяет принимать
запросы от пользователей, а затем, после их обработки, отправлять ответ. Из
чего следует, что все основные функции подсистемы выполняются на
сервере приложений. Вторая составляющая серверной части – сервер баз
данных, который помимо хранения данных осуществляет их обработку,
изменение,
а
также
обеспечивает
их
целостность.
Для
хранения
мультимедийных данных используется файловое хранилище, оно позволит
снизить нагрузку на базы данных и увеличит объем информации, которую
может хранить каждый пользователь. Взаимодействие клиентской и
серверной частей осуществляется при помощи протокола TCP/IP.
Брандмауэр обеспечивает дополнительную защиту серверов и
позволяет снизить нагрузку на них, блокируя подозрительные запросы, а
также анализируя данные, приходящие со стороны клиента.
В качестве
технической
корректности
back-office
поддержки
выступают администраторы и
сервиса,
пользовательской
которые
информации,
осуществляют
а
также
служба
проверку
помогают
пользователям в устранении неполадок при работе с подсистемой.
Кроме того, в дальнейшем планируется, что прохождение маршрутов
при помощи мобильного приложение будет возможно без использования
подключения к сети Интернет. В этом случае вся необходимая информация
будет загружаться заранее через приложение, после чего для прохождения по
маршруту пользователю потребуются только гео-данные.
23
2.2 Построение структурной схемы подсистемы составления
индивидуальных туристических маршрутов
Проектируемая
подсистема
составления
индивидуальных
туристических маршрутов выполняет множество различных функций.
Каждая
функция
выполняется
отдельным
блоком
подсистемы,
взаимодействующим с гео-социальной сетью YouGid, а также состоящим, в
свою очередь, из более мелких блоков.
Таким
образом,
при
построении
подсистемы
составления
индивидуальных туристических маршрутов можно выделить следующие
группы модулей:
−
создания метки маршрута на карте;
−
формирования маршрута;
−
публикации маршрутов;
−
управления маршрутами;
−
просмотра сгруппированных маршрутов;
−
добавления в избранное;
−
«Рассказать о маршруте».
Основные функции подсистемы будут реализованы в четырех группах
модулей – создания метки маршрута на карте, формирования маршрута,
публикации маршрутов и управления маршрутами.
Для составления своего маршрута, пользователю необходимо создать
метку маршрута на карте и указать ее название и описание. После этого
возможно формирование маршрута путем добавления созданных ранее меток
в маршрут и их упорядочивания по желанию пользователя.
После выполнения этих действий пользователь может опубликовать
сформированный маршрут. На этом этапе вносится дополнительная
информация, включающая в себя мультимедийные файлы, а также название
и описание маршрута, затем чего задается его цена.
24
После завершения формирования маршрута или после его публикации
в маршруте могут оказаться ошибки или недочеты или утрачивается
актуальность
мультимедийных
отредактировав
маршрут.
При
данных.
этом
Исправить
любая
попытка
это
можно
пользователя
отредактировать маршрут предполагает проверку прав доступа. Таким
образом, отредактировать можно только свои маршруты, а маршруты других
пользователей недоступны для изменений. Если проверка прав доступа
прошла успешно, то можно изменить название и/или описание маршрута,
отредактировать дополнительную информацию или цену маршрута.
Гео-социальная сеть YouGid предоставляет пользователям не только
возможность создавать свои маршруты, но и просматривать или приобретать
маршруты других пользователей. Для более удобного просмотра маршрутов,
сформированных
пользователями
YouGid,
в
сервисе
предусмотрена
сортировка по категориям:
−
тема маршрута;
−
время прохождения;
−
расстояние;
−
вид маршрута (пеший или автомобильный);
−
стоимость;
−
рейтинг автора;
−
город, по которому построен маршрут.
Категории «тема маршрута», «время прохождения», «расстояние»,
«вид маршрута», «стоимость» и «город» заполняются создателем маршрута
перед его публикацией, а «рейтинг автора» автоматически формируется
подсистемой. При этом в рейтинге автора учитываются не только купленные
маршруты, но и те, что пользователи добавили в свою коллекцию
избранного.
25
Если маршрут заинтересовал пользователя, то он может просмотреть
подробную информацию о нем и/или приобрести его по указанной
стоимости.
Кроме того, сервис позволяет добавлять понравившиеся маршруты в
«Избранное». В данном разделе предусмотрен просмотр маршрутов, а также
предварительная сортировка по категориям.
Делиться своими маршрутами или маршрутами других пользователей
возможно, как в самой гео-социальной сети YouGid, так и за ее пределами, а
о
приобретенном маршруте
пользователь
может оставить отзыв в
комментариях.
Помимо
своих
основных
функций
подсистема
формирования
индивидуальных туристических маршрутов использует возможности самой
гео-социальной сети YouGid. К ним относятся авторизация пользователя,
использование его персональной информации (например, при публикации
маршрута указывается имя пользователя).
Кроме того, подсистема получает доступ к списку друзей и групп
пользователя для возможности дальнейшей публикации и распространения
маршрута, как для друзей, так и для подписчиков групп, в которых
пользователь является администратором. Также для упрощения процесса
формирования маршрута пользователь может использовать ранее созданные
метки в новом маршруте [15].
Структурная
модель
подсистемы
составления
туристических маршрутов представлена на рисунке 9.
индивидуальных
26
Рисунок 9 – Структурная модель подсистемы составления индивидуальных туристических маршрутов
27
2.3 Построение инфологической модели данных подсистемы
составления индивидуальных туристических маршрутов
После описания предметной области, выбора средств и инструментов
реализации, а также построения логической и структурной схем, необходимо
разработать инфологическую модель подсистемы составления маршрутов.
Данная модель позволит наглядно продемонстрировать будущую базу
данных, представленную с помощью естественного языка и таблиц. Для
составления
инфологической
модели
необходимо
описать
процессы,
информационные потоки и функции подсистемы.
На первом этапе выделяются основные сущности будущей базы
данных. В данной работе такими сущностями будут являться «Клиент»,
«Создатель маршрутов», «Маршрут» и «Метка». Однако для корректного
функционирования подсистемы нам понадобятся сущности, реализованные в
базе данных основной гео-социальной сети YouGid, такие как «Учетная
запись пользователя», «Права», а также «Другие данные», включающие в
себя метки, группы и друзей пользователя.
Учетная запись пользователя характеризуется логином, паролем и
персональными
данными.
Каждый
пользователь
наделен
правами,
включающими в себя группу прав, а также доступные функции в рамках этих
прав. Таким образом, появляется еще одна сущность из основной системы –
«Права».
Каждый пользователь системы может как покупать маршруты, так и
создавать их. Однако при этом он выполняет разные роли и ему будут
доступны
различные
вышеперечисленных
функции
требований
подсистемы.
выделяются
Для
сущности
реализации
«Клиент»
и
«Создатель маршрутов». При этом клиенты могут покупать маршруты,
добавлять их в избранное и проходить уже приобретенные маршруты, а
создатели маршрутов наделены правами формирования маршрутов, из
публикацией и продажей.
28
Для
отслеживания
проданных
маршрутов
вводится
сущность
«Продажи», включающая в себя общую сумму проданных маршрутов,
количество покупок у создателя, а также историю продаж. При этом история
будет формироваться как дата продажи, наименование купленного маршрута,
а также его стоимость.
Одна из основных сущностей «Маршрут» включает в себя название,
описание, тематику маршрута, его тип – пешеходный или автомобильный,
время прохождения, город и цену.
Каждый маршрут представляет собой набор меток со своими
характеристиками. Таким образом, сущность «Метка» состоит из названия,
описания, координат, владельца, а также отслеживается, просмотрена ли
метка или пройдена. Две последние характеристики необходимы для помощи
клиентам в случае, когда маршрут проходится не за один день – система
сможет подсказать, на каком именно месте остановился пользователь.
Кроме того, предполагается ведение рейтинга маршрутов. Поэтому
сущность «Рейтинг» включает в себя следующие характеристики – оценки
пользователей, отзывы, покупки и количество добавления в избранное.
Благодаря рейтингу маршрутов можно будет отследить наиболее популярные
и приобретаемые.
Как уже говорилось ранее, подсистема составления индивидуальных
туристических маршрутов использует несколько функций гео-социальной
сети YouGid. К ним можно отнести доступ к учетной записи пользователя;
информацию о правах, принадлежащих пользователю; группы, в которых
пользователь является администратором и подписчиком; друзья; метки,
созданные пользователем, а также его мультимедийная информация. Эти
данные позволят упростить процесс формирования маршрутов, избавят
пользователя от дублирования информации при создании меток, а также
приведут к сокращению данных, расположенных на сервере БД и в облачном
хранилище.
29
Таким образом, помимо основных сущностей, подсистема использует
дополнительные – «учетная запись пользователя» и «Права». При этом
первая сущность состоит из логина, пароля, а также персональных данных,
включающих в себя имя, фамилию, пол, дату рождения, город пользователя и
его контактную информацию. Вторая сущность представляет собой группу
прав и функции, доступные в рамках этой группы. Итоговая инфологическая
модель подсистемы представлена на рисунке 10.
Рисунок 10 – Инфологическая модель подсистемы
2.4 Общий алгоритм функционирования подсистемы составления
индивидуальных туристических маршрутов
Перед тем, как начать пользоваться подсистемой составления
маршрутов, необходимо пройти авторизацию, включающую в себя ввод
электронной почты и пароля. Данная функция реализована в гео-социальной
сети YouGid, поэтому подсистема составления индивидуальных маршрутов
не предусматривает дополнительной идентификации пользователя.
После входа в систему пользователь может создать новый маршрут
или просмотреть уже сформированные. Когда маршрут сформирован,
пользователю предлагается его опубликовать, для этого вводится название
маршрута, его описание, дополнительная информация, которая может
30
состоять из фото-, видео- или аудиофайлов, относящихся к тематике
маршрута, а также его стоимость. В случае, когда пользователю не нужно
публиковать маршрут, он сохраняется в виде черновика и к его
редактированию можно вернуться позже.
Помимо формирования нового маршрута, пользователю предлагается
просмотреть уже созданные маршруты, после чего предлагается добавить
маршрут в избранное – в этом случае понравившийся маршрут добавляется в
коллекцию – или рассказать о маршруте друзьям, тогда пользователь
выбирает социальную сеть, в которой хочет поделиться информацией.
Если пользователь не создает новые маршруты и не просматривает
уже
сформированные,
ему
предлагается
отредактировать
маршрут,
составленный ранее.
Схема общего алгоритма подсистемы составления индивидуальных
туристических маршрутов представлена на рисунке 11. На схеме авторизация
пользователя, формирование, публикация и редактирование маршрута, а
также его распространение представлены как предопределенные процессы.
Поскольку каждый из этих пунктов подразумевает набор определенных
действий. Например, формирование маршрута потребует не только задания
его названия, но и ввод описания, добавление мультимедийных файлов и
указание его стоимости.
31
Рисунок 11 – Схема общего алгоритма работы подсистемы составления
индивидуальных маршрутов
32
3 РЕАЛИЗАЦИЯ ПОДСИСТЕМЫ СОСТАВЛЕНИЯ
ИНДИВИДУАЛЬНЫХ ТУРИСТИЧЕСКИХ МАРШРУТОВ
3.1 Алгоритмы реализации основных функций подсистемы
составления индивидуальных туристических маршрутов
Одной из важных функций подсистемы составления индивидуальных
маршрутов является функция формирования и редактирования содержимого
маршрутов. Для того чтобы сформировать новый маршрут, пользователю
необходимо создать метку на карте, после чего добавляется ее название,
описание и мультимедийная информация. Если все метки маршрута еще не
сформированы, пользователь повторяет вышеописанные действия по их
созданию. В случае, когда все метки добавлены, пользователь упорядочивает
их.
Для редактирования ранее сформированного маршрута необходимо
выбрать маршрут, после чего проверяется, есть ли у пользователя права на
изменение данного маршрута. И только в том случае, когда пользователь
является создателем данного маршрута, предлагается отредактировать
названия его меток, их описание или порядок следования меток в нем.
Пользователю не обязательно проходить через всю цепочку изменений,
редактирование может быть выборочным – например, редактирование только
описания метки или только ее мультимедийную информацию. После
изменения информации о метке пользователь также как и при создании
нового маршрута, может отредактировать порядок их следования.
Схема алгоритма создания и редактирования меток в подсистеме
составления индивидуальных маршрутов представлена на рисунке 12. На
схеме
функции
«Упорядочивание
«Добавление
меток
мультимедийной
маршрута»
выражены
информации»
с
и
помощью
предопределенных процессов, поскольку каждая из приведенных функций
предполагает набор из нескольких действий пользователя.
33
Рисунок 12 – Схема алгоритма создания и редактирования меток маршрута в
разрабатываемой подсистеме
Другой не менее важной
функцией подсистемы
составления
туристических маршрутов является функция редактирования описания
маршрутов. Она подразумевает обязательную проверку прав доступа
пользователя для выбранного маршрута. В случае успешного прохождения
проверки пользователю предлагается изменить название маршрута, его
описание, дополнительную информацию или стоимость. Изменения можно
выполнять как последовательно, так и выборочно – например, если
34
пользователю необходимо только внести дополнительную информацию, не
меняя при этом остальные пункты описания маршрута. Схема алгоритма
редактирования описания маршрутов представлена на рисунке 13.
Рисунок 13 – Схема алгоритма редактирования описания маршрутов в
разрабатываемой подсистеме
35
Последним из рассмотренных алгоритмов будет являться алгоритм
просмотра сформированных маршрутов. В самом начале для удобства
пользователю
предлагается
отсортировать
маршруты
по
категориям.
Независимо от выбора просмотра маршрутов – с сортировкой или без –
пользователь может просмотреть подробную информацию о понравившемся
маршруте или приобрести его. В последнем случае маршрут добавляется в
список купленных маршрутов пользователя [16]. Схема алгоритма просмотра
маршрутов представлена на рисунке 14.
Рисунок 14 – Схема алгоритма просмотра в подсистеме составления
индивидуальных туристических маршрутов
36
3.2 Выбор инструментальных средств реализации подсистемы
составления индивидуальных маршрутов
Современные языки программирования кардинально отличаются от
первых, появившихся еще в 60-70-х годах прошлого века. Развитие
компьютеров, появление новых технологий неизбежно влияло на все языки
программирования: одни совершенствовались и выпускали обновленные
версии, другие оставались в прошлом, оставляя базу для создания новых
языков.
На
сегодняшний
день
наиболее
популярными
языками
программирования можно назвать PHP, JavaScript, Perl, Ruby и Python.
Поэтому прежде чем выбрать язык для проектирования подсистемы
составления
индивидуальных
туристических
маршрутов,
необходимо
определить, какой из них наиболее подходящий.
1. PHP (Hypertext PreProcessor) – язык общего назначения, созданный
датским
программистом
Расмусом
Лердорфом.
Как
правило,
PHP
используется для разработки скриптов на стороне сервера или для создания
приложений, выполняемых на стороне клиента. PHP доступен для многих
операционных систем: Microsoft Windows, Mac OS X, Linux, Unix и других.
Его принимают и поддерживают большинство хостинг-провайдеров.
Кроме того, код PHP можно вставлять в код HTML, что объясняется
созданием языка для ведения веб-разработок. Однако он также легко
взаимодействует с такими языками, как XML, JavaScript и WML [17].
Преимущества:
−
легкий для изучения;
−
является свободным программным обеспечением;
−
доступно большое количество библиотек и расширений;
−
может быть развернут на большинстве серверах;
−
заменяет проприетарную среду ASP (Active Server Pages) от
Microsoft;
37
−
портирован
под
множество
аппаратных
платформ
и
операционных систем;
−
имеет возможность использования в изолированной среде.
Недостатки:
−
плохо развитые средства для работы с исключениями;
−
затрудненная настройка сервера и разворачивание приложений
из-за влияния глобальных параметров конфигурации на базовый синтаксис
языка;
−
передача объектов не по ссылке, как в большинстве языков, а по
назначению;
−
проблемы с безопасностью у многих приложений, реализованных
на PHP;
−
не
подходит
для
создания
десктопных
приложений
или
системных компонентов.
2. JavaScript (ранее «LiveScript») – прототипно-ориентированный язык
программирования, изначально разработанный Бренданом Эйхом совместно
с
Биллом
Джоем
для
использования
в
веб-браузерах
и
активно
развивающийся в наше время. Применяется для разработки клиентских
приложений, создания интерактивных форм, проверки допустимости данных,
а также генерации клиентских таблиц поиска. JavaScript одновременно
совмещает в себе компактность и гибкость, что позволяет использовать
множество функций языка без дополнительных усилий [18].
Преимущества:
−
простой синтаксис;
−
поддерживают все современные браузеры;
−
постоянно совершенствуется;
−
возможность
взаимодействия
с
приложением
текстовые редакторы (Microsoft Office и Open Office).
Недостатки:
даже
через
38
−
низкий уровень безопасности из-за свободного доступа к кодам
популярных скриптов;
−
наличие множества мелких ошибок;
−
повсеместное распространение, которое приводит к тому, что
часть программ и приложений перестанет существовать после исчезновения
языка, поскольку полностью базируются на нем.
3. Perl (Practical Extraction and Report Language) – интерпретируемый
динамический язык программирования общего назначения, разработанный
Ларри Уоллом, изначально создаваемый для манипуляций с текстом. Сейчас
с помощью него решаются задачи системного администрирования, сетевого
программирования,
веб-разработки,
разработки
пользовательских
интерфейсов, игр и даже биоинформатики.
Perl поддерживает разнообразные парадигмы – функциональный,
процедурный и объектно-ориентированный стили, а также содержит в себе
контроль памяти без «сборщика мусора», встроенную поддержку обработки
текстов
для
работы
с
устойчивыми
выражениями
и
множество
вспомогательных модулей сторонних разработчиков [19].
Преимущества:
−
наличие поддержки работы с регулярными выражениями;
−
множество готовых библиотек;
−
возможность простой обработки больших объемов данных;
−
является кросс-платформенным;
−
наличие свободного синтаксиса, что позволяет решать одну
задачу различными способами;
−
имеет
встроенные
средства
для
работы
со
сложными
структурами.
Недостатки:
−
большое количество модулей, затрудняющих поиск нужного;
−
использование устаревших подходов.
39
4. Ruby – динамический императивный объектно-ориентированный
язык программирования, созданный Юкихиро Матсумото под влиянием
языков Perl, Eiffel и Smalltalk. На сегодняшний день Ruby входит в десятку
самых популярных языков программирования.
Язык многофункционален и хорошо подходит для написания
объектно-ориентированных программ, благодаря простому и лаконичному
синтаксису, не перегруженному множеством ненужных кодов. Кроме того,
программы, написанные на Ruby, могут использовать язык для расширения
своих возможностей. К тому же язык является одним из самых экономных по
отношению к ресурсам [20].
Преимущества:
−
имеет простой синтаксис;
−
содержит встроенный отладчик;
−
программы, реализованные на Ruby, хорошо масштабируются и
сопровождаются;
−
позволяет создавать многопоточные приложения;
−
имеет
дополнительные
возможности
по
обеспечению
безопасности;
−
является сверхвысокоуровневым;
−
возможность работы на многих платформах.
Недостатки:
−
достаточно сложный в обучении;
−
нехватка информационных ресурсов;
−
низкая производительность по сравнению с другими языками
веб-разработки;
−
относительно медленное развитие и разработка языка.
5. Python – интерпретируемый, объектно-ориентированный язык
программирования высокого уровня общего назначения, разработанный
Гуидо
ван
Россумом.
Язык
обладает
динамической
типизацией,
40
автоматическим управлением памятью,
высокоуровневыми структурами
данных, а также поддерживает многопоточные вычисления и обработку
исключений. Кроме того, язык позволяет использовать процедурный,
функциональный и объектно-ориентированный стили программирования.
Уникальность
Python
состоит
не
только
в
бесплатном
распространении языка, но и в отсутствии ограничений в условиях
применения, что позволяет реализовывать проекты различной сложности.
Примером крупных проектов могут служить Instagram, YouTube, сервисы
PayPal, а также внутренние сервисы Facebook [21].
Преимущества:
−
имеет простой и удобный синтаксис;
−
содержит большое количество библиотек;
−
простой в изучении;
−
интерпретатор языка реализован на множестве платформ и
операционных систем;
−
возможность открытой разработки;
−
предоставляет
средства
быстрого
прототипирования
и
динамической семантики;
−
содержит хорошо продуманные механизмы модульности.
Недостатки:
−
относительно низкая скорость выполнения;
−
проблема совместимости версий;
−
неудачная поддержка многопоточности;
−
недостаточная коммерческая поддержка средств разработки;
−
ограниченные средства для работы с базами данных.
Кроме того, на Python реализовано множество фреймворков,
упрощающих процесс создания проектов. Наиболее популярные из них –
Flask, Tornado, Twisted и Django.
41
Flask представляет собой микрофреймворк, в котором особое
внимание уделяется не функциям, а простоте работы. Подходит для быстрого
прототипирования и создания автономных приложений.
Tornado – фреймворк для создания веб-приложений, предназначен для
приложений, требующих продолжительного подключения к каждому
пользователю.
Twisted – механизм, позволяющий работать асинхронной архитектуре.
Подходит для разработки на низкоуровневых языках программирования и
имеет бесплатный и открытый исходный код.
Django – высококлассный фреймворк на Python, позволяющий
упростить разработку и упростить код и скрывающий в себе множество
возможностей. Также имеет бесплатный и открытый исходный код [22].
Таким образом, проанализировав все достоинства и недостатки
вышеперечисленных языков программирования, для реализации подсистемы
составления индивидуальных туристических маршрутов, был выбран
фреймворк Django, разработанный на базе языка Python. Простая и быстрая
разработка, а также автоматическое управление памятью с возможностью
поддержки высокоуровневых структур данных позволит не только ускорить
время разработки, но и снизить количество ошибок, возникающих при
реализации подсистемы.
Кроме того, разрабатываемая подсистема является частью геосоциальной сети YouGid, разрабатываемой также на языке Phyton. Выбор
данного
языка
позволит
избежать
дополнительных
трудностей
при
взаимодействии подсистемы составления индивидуальных маршрутов с
основным сервисом.
Однако помимо языка программирования для разработки подсистемы
потребуется
возможность
хранения
достаточно
большого
объема
информации, что предполагает выбор подходящей системы управления
базами данных (СУБД).
42
В последнее время все большей популярностью стала пользоваться
MariaDB – СУБД, аналогичная известной всем MySQL. Однако по
сравнению с ней MariaDB имеет ряд существенных преимуществ.
СУБД разрабатывается открыто и доступ к ней есть не только у
разработчиков, но и у пользователей. Это позволяет системе развиваться
значительно быстрее известного аналога.
Обновление
программы
и
безопасности
MariaDB
происходит
синхронно, что приводит к исправлению всех ошибок до начала
использования СУБД. В то время как у MySQL обновление безопасности
происходит через месяц после выпуска новой версии, а это говорит об
уязвимости данной СУБД.
Стоит отметить, что у MariaDB более широкий функционал –
улучшенный асинхронный ввод-вывод для таблиц MyISAM, быстрая
обработка
сложных
запросов,
благодаря
механизму
хранения
Aria,
увеличенная производительность Inodb, поддержка ликвидации таблиц,
виртуальных
и
динамических
колонок,
а
также
множество
оптимизированных параметров. Помимо всего выше сказанного, MariaDB
имеет еще одно важное отличительное преимущество – свободное
распространение.
Таким образом, учитывая особенности архитектуры гео-социальной
сети и разработанных алгоритмов, было принято решение об использовании
системы управления базами данных MariaDB для хранения информации при
создании подсистемы составления индивидуальных маршрутов.
43
3.3 Построение логической и физической модели базы данных
Построение
инфологической
модели
позволяет
разработать
логическую и физическую модели базы данных. Логическое проектирование
направлено на создание концептуальной модели базы данных из чего
следует, что логическая модель – это универсальное представление
структуры данных, которое не зависит ни от конечной реализации, ни от
аппаратной платформы.
При построении логической модели «сущность-связь» используются
таблицы, представляющие собой сущности, и связи – отношения между
ними.
Существует
два
вида
связи
–
идентифицирующая
и
неидентифицирующая.
К первому виду относятся связи, при которых экземпляры дочерней
сущности определяются через связь с родительской сущностью. При этом
атрибутами первичного ключа дочерней сущности становятся атрибуты
первичного ключа родительской.
Ко
второму
виду
относятся
связи,
при
которых
нельзя
идентифицировать дочернюю сущность через ее связь с родительской.
Атрибуты
первичного
ключа
родительской
сущности
становятся
неключевыми атрибутами дочерней. Таким образом, дочерняя сущность при
неидентифицирующей связи остается независимой [23].
Кроме того, отношения между общими полями двух сущностей могут
быть трех типов: «один к одному», «один ко многим» и «многие ко многим».
Отношение «один-ко-многим» используется когда только одно из
полей является полем первичного ключа или уникального индекса; «один-кодному» – когда оба связываемых поля являются ключевыми или имеют
уникальные индексы; отношение «многие-ко-многим» фактически является
двумя отношениями «один-ко-многим» с третьей таблицей, первичный ключ
которой состоит из полей внешнего ключа двух других таблиц [24, 25].
Как уже говорилось ранее, логическая модель базы данных основана
на инфологической модели данных, разработанной выше. Сущности,
44
реализованные в основной гео-социальной сети YouGid, не дублируются в
подсистеме составления индивидуальных маршрутов.
Для разрабатываемой подсистемы необходима сущность «Клиент»,
которая будет содержать код клиента и его электронную почту.
Сущность «Купленный маршрут» будет хранить информацию о коде
купленного маршрута, дате покупки, его стоимости, а также будет
проверяться просмотрен или пройден ли маршрут.
Для хранения данных о созданных маршрутах будет использоваться
сущность «Созданный маршрут», состоящая из кода созданного маршрута,
его названия, описания, стоимости, даты создания, времени прохождения,
типа маршрута и его логотипа.
Любой маршрут будет состоять из меток, поэтому сущность «Метка»
состоит из координат, ее названия, описания и логотипа.
Сущность «Продажи» будет нужна для хранения информации о коде
продажи, количестве покупок маршрута и стоимости покупки.
Последней разрабатываемой сущностью будет сущность «Рейтинг»,
она состоит из кода рейтинга, оценки и отзыва.
Логическая
модель
базы
данных
подсистемы
составления
индивидуальных туристических маршрутов представлена на рисунке 15.
45
Рисунок 15 – Логическая модель базы данных подсистемы составления
индивидуальных туристических маршрутов
Между
сущностью
«Клиент»
и
«Купленный
маршрут»
неидентифицирующая связь типа «один ко многим», поскольку одному
клиенту может принадлежать несколько купленных маршрутов. Связь
неидентифицирующая, поэтому поле «Код клиента» становится вторичным
ключом в таблице «Купленный маршрут».
Сущность «Клиент» и «Созданный маршрут» также связаны
неидентифицирующим отношением «один ко многим», так как один клиент
может создавать несколько маршрутов. Связь неидентифицирующая,
поэтому поле «Код клиента» становится вторичным ключом в таблице
«Созданный маршрут».
Сущности
«Созданный
маршрут»
и
«Метка»
связаны
идентифицирующей связью типа «один ко многим», поскольку в одном
46
маршруте может быть несколько меток. Связь идентифицирующая, поэтому
поле «Код созданного маршрута» становится первичным ключом для
таблицы «Метка».
Между сущностями «Созданный маршрут» и «Продажи» также
идентифицирующее отношение «один ко многим», ввиду того, что один и
тот
же
маршрут
может
продаваться
множество
раз.
Связь
идентифицирующая, поэтому поле «Код созданного маршрута» становится
первичным ключом для таблицы «Продажи».
Отношение между сущностями «Рейтинг» и «Созданный маршрут»
«один ко многим» и также идентифицирующее, поскольку один и тот же
рейтинг может быть у разных маршрутов. Связь идентифицирующая,
поэтому поле «Код рейтинга» становится первичным ключом в таблицах
«Созданный маршрут», «Метка» и «Продажи».
Физическая модель базы данных представляет собой логическую
модель, разработанную с учетом особенностей выбранной СУБД. На данном
этапе учитываются идентификаторы таблиц и типы данных атрибутов. Таким
образом, физическая модель – это диаграмма, содержащая необходимую
информацию для генерации базы данных для конкретной СУБД, иногда даже
с учетом ее версии. Поэтому одна и та же логическая модель может иметь
несколько видов физических [26, 27].
Для реализации базы данных была выбрана система управления
MariaDB, ее синтаксис имеет много общего с MySQL, поэтому для
разработки физической модели, а также для автоматической генерации БД
подойдет DBDesigner.
Физическая
модель
базы
данных
подсистемы
составления
индивидуальных туристических маршрутов представлена на рисунке 16.
47
Рисунок 16 – Физическая модель базы данных подсистемы составления
индивидуальных туристических маршрутов
48
3.4 Моделирование диалога пользователя с подсистемой
составления индивидуальных туристических маршрутов
Пользовательский
интерфейс
представляет
собой
совокупность
программных и аппаратных средств, обеспечивающих взаимодействие
пользователя с компьютером. Основу такого взаимодействия составляют
диалоги. Под диалогом в данном случае понимают регламентированный
обмен информацией между человеком и компьютером, направленный на
решение конкретной задачи.
Взаимодействуя с системой, пользователь вводит или изменяет
информацию, запрашивает операции или функции, а также создает запросы
на получение информации или подсказки. Система, в свою очередь,
предоставляет пользователю ответы за запросы, выводит на экран результаты
выполнения операций и функций или сообщения об ошибках.
Основными требованиями, предъявляемыми к пользовательскому
интерфейсу, являются:
–
простота в использовании – интерфейс должен быть максимально
простым и понятным для пользователя;
–
надежность и отказоустойчивость – система должна давать
минимальное
количество
сбоев,
а
также
предполагать
сохранение
информации при неожиданном или экстренном завершении;
–
интуитивность – интерфейс должен быть понятен даже для
неопытного пользователя;
–
быстрая адаптируемость – пользователь не должен тратить много
времени на изучение системы
–
использование понятных и информативных терминов.
Наглядно представить взаимодействие пользователя с подсистемой
можно
представить
в
виде
диалога.
При
этом
пользователь
для
взаимодействия использует клавиатуру или мышь, а система – экран, на
который выводится информация [28, 29].
49
Для формирования меток нового маршрута пользователю необходимо
нажать на кнопку «Создать маршрут», при этом открывается форма создания
метки на карте.
Для добавления местоположения метки пользователь может как
установить ее на карте в нужном месте, так и добавить координаты вручную.
После добавления расположения метки, пользователь может ввести ее
название и описание в соответствующих полях, а затем прикрепить
мультимедийные файлы, которые включают в себя фото-, аудио- или
видеофайлы.
Для сохранения метки необходимо нажать на кнопку «Сохранить».
После сохранения новой метки, она начнет отображаться в списке меток
маршрута.
Для расположения меток в нужном порядке достаточно просто
«перетянуть» метки в списке. Подсистема при этом автоматически изменяет
их
расположение
на
карте
в
заданном
порядке.
Для
сохранения
сформированного маршрута пользователю необходимо нажать на кнопку
«Сохранить маршрут».
Если на каком-то этапе пользователь ввел некорректную информацию
или был зафиксирован сбой, подсистема выдаст сообщение об ошибке. После
чего пользователь сможет вернуться на шаг назад и ввести информацию
заново. Диаграмма состояний при создании меток маршрута представлена на
рисунке 17.
50
Рисунок 17 – Диаграмма состояний при создании меток маршрута
Аналогичным образом происходит редактирование уже созданного
пользователем маршрута. Единственным отличием является проверка права
доступа пользователя к изменению меток маршрута или их порядку. Для
редактирования меток необходимо нажать на кнопку «Редактировать
маршрут». После этого пользователь проходит процедуру проверки прав
доступа, если у пользователя нет прав на редактирование, выводится
51
соответствующее сообщение. В противном случае открывается форма
изменения метки маршрута на карте и пользователю предоставляется право
отредактировать как метки маршрута по отдельности, так и порядок их
следования внутри маршрута. Для сохранения внесенных изменений
пользователю необходимо нажать кнопку «Сохранить маршрут». Диаграмма
состояний для редактирования меток маршрута представлена на рисунке 18.
Рисунок 18 – Диаграмма состояний при редактировании меток маршрута
52
Редактирование описания аналогично изменению меток маршрута.
После нажатия на кнопку «Редактировать описание маршрута» подсистема
проверяет, есть ли у пользователя доступ к изменению маршрута. При
отсутствии доступа выводится соответствующее сообщение на экран, иначе
открывается форма для редактирования описания.
Для изменения названия, описания, дополнительной информации или
стоимости маршрута, необходимо навести курсор на соответствующее поле,
и внести нужную информацию. При этом подсистема автоматически
проверяет корректность вводимых данных. Например, использование
недопустимых символов при изменении названия, описания или стоимости
маршрута, а также
типы прилагаемых
в качестве дополнительной
информации фото-, аудио- или видеофайлов.
Сохранение описания происходит по нажатию кнопки «Сохранить».
Если на каком-то этапе внесение изменений оказалось невозможным,
подсистема выводит сообщение об ошибке. Например, когда пользователь
вводит в название маршрута недопустимые символы.
Любое сообщение об ошибке завершается работой с рассматриваемым
интерфейсом. Таким образом, окончание работы происходит либо из-за
невозможности редактирования описания маршрута, либо после сохранения
его нового описания. Диаграмма состояний при редактировании описания
изображена на рисунке 19.
53
Рисунок 19 – Диаграмма состояний при редактировании описания маршрута
Для того чтобы просмотреть маршруты, необходимо нажать на
соответствующую кнопку. После чего откроется окно просмотра маршрутов.
Для сортировки маршрутов необходимо выбрать пункт «Отсортировать
маршруты», а затем указать критерии сортировки – тематика, тип, время
прохождения, город или стоимость маршрута. Подсистема проведет
сортировку и выберет маршруты, соответствующие критериям пользователя.
Для
просмотра
подробной
информации
необходимо
нажать
на
понравившийся маршрут. Для приобретения необходимо нажать на кнопку
«Купить маршрут», при этом подсистема внесет его в список купленных и
54
откроет соответствующее окно. Если на каком-то этапе подсистемы
произошел сбой, выводится сообщение об ошибке, а пользователь может
вернуться к работе с подсистемой. Диаграмма состояний при просмотре
маршрутов представлена на рисунке 20.
Рисунок 20 – Диаграмма состояний при просмотре маршрутов
55
3.5 Экранные формы реализованной подсистемы составления
индивидуальных туристических маршрутов
Для создания маршрута необходимо ввести его название, описание,
стоимость, время прохождения в минутах, длину в метрах, а также тип
маршрута, который вводится по желанию пользователя. После чего можно
загрузить логотип, соответствующий тематике маршрута. На рисунке 21
представлена экранная форма создания маршрута и добавление его названия,
описания, стоимости, а также времени прохождения, а на рисунке 22
изображена экранная форма создания маршрута с добавлением его логотипа.
Рисунок 21 – Экранная форма создания маршрута с добавлением основной
информации
56
Рисунок 22 – Экранная форма создания маршрута с добавлением его
логотипа
Для создания метки маршрута необходимо внести ее название,
описание, а также установить на карте место, в котором располагается
объект. Так же, как и для маршрута, можно загрузить логотип метки,
который будет отображаться на карте. Экранная форма создания метки
маршрута представлена на рисунке 23.
57
Рисунок 23 – Экранная форма создания метки маршрута
Упорядочивание происходит после того, как созданы все метки
маршрута. Для того чтобы упорядочить метки в маршруте, необходимо в
списке «перетянуть» метки в нужном порядке. На рисунке 24 изображена
экранная форма всех меток созданного маршрута, а на рисунке 25
представлены упорядоченные метки маршрута.
58
Рисунок 24 – Экранная форма всех созданных меток маршрута
Рисунок 25 – Экранная форма упорядоченных меток маршрута
59
Для изменения информации или мультимедийных файлов у метки
необходимо выбрать пункт «Редактировать». После чего исправить данные в
нужном поле и сохранить метку.
Для изменения ее названия метки «Музей орловских писателей» на
«Музей писателей-орловцев», необходимо после выбора метки в списке
нажать на пункт «Редактировать» и ввести новое название, затем нажать
«Сохранить». На рисунке 26 представлена экранная форма метки «Музей
орловских писателей» до редактирования, а на рисунке 27 – после внесенных
изменений.
Рисунок 26 – Экранная форма метки маршрута до редактирования названия
60
Рисунок 27 – Экранная форма результата изменения названия метки
Для просмотра всех маршрутов достаточно нажать на раздел
«Маршруты» в левой панели. После этого откроется список всех созданных
пользователями
маршрутов
с
указанием
их
названия,
дистанции,
длительности и количества меток. По умолчанию маршруты отображаются
по дате создания – от новых к более старым.
Кроме того, в разделе «Маршруты» можно выбрать как просмотр всех
маршрутов, созданных в сервисе YouGid, так и только те, что были
сформированы самим пользователем. Для этого предусмотрены пункты
«Рекомендованные» и «Мои». На рисунке 28 изображена экранная форма
просмотра маршрутов.
61
Рисунок 28 – Экранная форма просмотра маршрутов
Для того чтобы просмотреть понравившийся маршрут, пользователю
необходимо нажать на него. В результате чего справа откроется панель с
подробной информацией о маршруте и всеми метками. На рисунке 29
изображена экранная форма просмотра подробной информации о маршруте
«По следам орловских писателей».
Рисунок 29 – Экранная форма просмотра подробной информации о маршруте
62
ЗАКЛЮЧЕНИЕ
В результате выполнения выпускной квалификационной работы был
проведен анализ развития социальных и гео-социальных сетей, дано
определение гео-социального сервиса, а также решены все поставленные
задачи:
–
проанализированы
особенности
функционирования
гео-
социальных сетей и разработана диаграмма вариантов использования;
изучена архитектура гео-социальной сети YouGid и возможности внедрения
в нее подсистемы составления индивидуальных туристических маршрутов;
–
проведен
обзор
существующих
аналогов
и
прототипов
подсистемы составления туристических маршрутов, в результате чего были
сформулированы функциональные требования;
–
построена структурная модель и инфологическая модель данных
для подсистемы;
–
разработан общий и частные алгоритмы функционирования
подсистемы; смоделирован диалог пользователя с подсистемой посредством
составления диаграмм состояний;
–
выбраны инструментальные средства реализации, наиболее
подходящие для решения поставленной задачи;
–
построены логическая и физическая модели базы данных
подсистемы составления туристических маршрутов;
–
реализована сама подсистема составления индивидуальных
туристических маршрутов и представлены экранные формы с демонстрацией
различных функций подсистемы.
Таким образом, решение всех вышеперечисленных задач позволяет
говорить о достижении цели выпускной квалификационной работы.
63
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
1.
Выручка Mail.Ru Group выросла на 35% и составила 58,6 млрд ₽:
[Электронный ресурс]. – Режим доступа: https://www.cossa.ru/news/200962.
2.
Gartner
приложениях:
о
перспективных
[Электронный
потребительских
ресурс].
-
мобильных
Режим
доступа:
http://www.administrator-pro.ru/news/100.html.
3.
Прогнозы аналитического агентства Canalys: [Электронный
ресурс] - Режим доступа: http://digit.ru/technology/20110131/380980057.html.
4.
Авдеев А.В. Перспективы использования геосоциальной сети в
решении проблем городского хозяйства и популяризации туризма/ А.В.
Авдеев и др. // Информационные системы и технологии. – Орел : ОГУ им.
И.С. Тургенева, 2018 - № 3 (107) май-июнь 2018 – 131 с. – 40 - 47
5.
Способы определения местонахождения мобильного устройства:
[Электронный
ресурс].
-
Режим
доступа:
http://www.promvest.
info/news/innovation. php? ELEMENT_ID=19515.
6.
телефонов:
Обзор
современных
систем
[Электронный
ресурс].
позиционирования
мобильных
Режим
доступа:
-
http://www.bre.ru/security/13022.html.
7.
Технологии построения систем местоопределения: [Электронный
ресурс]. - Режим доступа: http://kunegin.com/ref6/gps1/tecnolog. html.
8.
О проекте Waytips: [Электронный ресурс]. - Режим доступа:
http://waytips.com/about.
9.
О проекте Youroute: [Электронный ресурс]. - Режим доступа:
http://youroute.com.
10. Обзоры туристических сервисов: [Электронный ресурс] - Режим
доступа: http://travel3.ru.
11. Основы
UML.
Диаграммы
последовательности
—
URL:
[Электронный ресурс]. Режим доступа: https://pro-prof.com/archives/2769.
12. Леоненков, А.В. Самоучитель UML 2 / А.В. Леоненков. – СПб.:
БХВ — Петербург, 2007. – 576с.
64
13. Буч Г. Язык UML. Руководство пользователя. Второе издание/ Г.
Буч, Д. Рамбо, А. Якобсон - ДМК, 2006. - 496 с.
14. Коберн, Л. Современные методы описания функциональных
требований к системам: пер. с англ. / Л. Коберн. - М.: ЛОРИ, 2002. – 443 с.
15. Марка,
Д.А.
Методология
структурного
анализа
и
проектирования / Д.А. Марка. - М.: МетаТехнология, 2004. - 312 с.
16. Единая система программной документации. Схемы алгоритмов,
программ, данных и систем. Условные обозначения и правила выполнения.
ГОСТ 19.701-90 (ИСО 5807-850). - М.: Изд-во стандартов, 1999.
17. Характеристики PHP: [Электронный ресурс]. – Режим доступа:
http://it-black.ru/kharakteristiki-php.
18. Преимущества и недостатки JavaScript: [Электронный ресурс]. –
Режим доступа: https://www.ipipe.ru/info/javascript.html.
19. Perl, преимущества и недостатки: [Электронный ресурс]. – Режим
доступа: https://www.ipipe.ru/info/perl.html.
20. О
Rubu:
[Электронный
ресурс].
–
Режим
доступа:
https://www.ruby-lang.org/ru/about.
21. Программирование на Python
[Электронный
ресурс].
– 5 лучших фреймворков:
–
Режим
доступа:
https://inbenefit.com/программирование-на-python.
22. PHP, Ruby, Python – краткая характеристика трёх языков
программирования:
[Электронный
ресурс].
–
Режим
доступа:
http://www.internet-technologies.ru/articles/php-ruby-python-harakteristikayazykov-programmirovaniya.html.
23. Глушаков С.В. Базы данных/ С.В. Глушаков, Д. В. Ломотько
Худож.-оформитель
А.С.
Юхтмант
-
Харьков:
Фалио;
М.:
ООО
"Издательство АСТ", 2002. - 504с
24. Бойко В.В. Проектирование баз данных информационных систем/
В.В. Бойко, В.М. Савинков – М.: Финансы и статистика, 1989. – 351 с.
65
25. Шевченко Н.А. - Access 2003. Искусство создания базы данных.
Издательство: НТ Пресс, М.; 2007 - 160 с.
26. Тиори Т. Проектирование структур баз данных/ Т. Тиори, Дж.
Фрай / В 2 кн., – М.: Мир, 1985. Кн. 1. – 287 с.: Кн. 2. – 320 с
27. Морозов, М.А. Информационные технологии в социальнокультурном сервисе и туризме: учеб. / М.А. Морозов, Н.С. Морозова. - М.:
Академия, 2009. - 240 с.
28. Требования к пользовательскому интерфейсу программного
продукта:
[Электронный
ресурс].
Режим
доступа:
http://prog.bobrodobro.ru/68591.
29. Определение
ресурс]
Режим
пользовательского
доступа:
интерфейса:
[Электронный
http://studbooks.net/2273935/informatika/
opredelenie_polzovatelskogo_interfeysa.
30. Лунев, Р.А. Геосоциальный сервис как электронная услуга
населению / Р.А. Лунев, А.А. Стычук, В.Н. Волков, А.А. Митин //
Информационные системы и технологии. – Орел: Госуниверситет - УНПК,
2015. – № 3(89). – 127 с. – С. 65-70.
31. Бадд
Т.
Объектно-ориентированное
программирование
в
действии: Пер с англ. — СПб: «Питер», 1997. — 464 с.
32. Лунёв, Р.А. Инструментальные средства создания системы
сервисов электронных услуг // Информационные системы и технологии:
материалы
Международной
научно-технической
интернет-конференции
ИСиТ’2013. – Орел, 2013. – [Электронный ресурс] – Режим доступа:
http://isit-conf.gu-unpk.ru/conferences/2/materials/manager/view/275.
33. Мунипов
В.М.,
Зинченко
В.П.
Эргономика:
человекоориентированное проектирование техники, программных средств и
среды – М.: Логос, 2001. — 356 с.
66
Приложение А
(обязательное)
Листинг программы
from django.db import models
from django.db.models import Q
from django.utils.functional import cached_property
from guardian.shortcuts import (
get_perms,
get_perms_for_model,
get_objects_for_user,
)
from backends.address.models import Address
from backends.core.cache import store
from backends.core.models import (
Content,
VerifiedPhoto,
)
class RouteOwner(object):
USER = "user"
GROUP = "group"
RouteOwners = (
(RouteOwner.USER, "Пользователь"),
(RouteOwner.GROUP, "Группа")
)
class RouteQuerySet(models.QuerySet):
def for_user(self, user):
return self & get_objects_for_user(
user=user,
perms='view_route',
klass=Route
)
def for_editor(self, user):
return self & get_objects_for_user(
user=user,
perms='delete_route',
67
klass=Route
)
def importable_to_tour(self, tour):
return self.filter(
(Q(grouproute__isnull=True) | Q(grouproute__group__grouptour__tour=tour)) &
~Q(tourroute__tour=tour),
visible=True
)
class Route(models.Model):
name = models.CharField(max_length=255)
description = models.TextField('описание маршрута', null=True,
blank=True, max_length=4000)
visible = models.BooleanField('является публичным', default=True)
price = models.DecimalField(max_digits=8, decimal_places=2,
null=True, verbose_name='стоимость')
duration = models.PositiveIntegerField('время прохождения в минутах', null=True)
distance = models.PositiveIntegerField('длина маршрута в метрах', null=True)
logo = models.ForeignKey(VerifiedPhoto, null=True)
address = models.ForeignKey(Address, null=True)
date_created = models.DateTimeField(auto_now_add=True)
belongs_to = models.CharField("кому принадлежит", choices=RouteOwners,
max_length=100, null=True)
content = models.ForeignKey(Content, null=True, on_delete=models.CASCADE)
objects = RouteQuerySet.as_manager()
default_manager = RouteQuerySet.as_manager()
class Meta:
verbose_name = 'маршрут'
verbose_name_plural = 'маршруты'
permissions = (
("view_route", "Can see route"),
("view_waypoints", "Can see waypoints on the route"),
("change_waypoints", "Can edit waypoints on the route"),
("delete_waypoints", "Can delete waypoints on the route"),
)
def __str__(self):
68
return self.name
@store
def markers(self):
"""
:return: Точки маршрута
:rtype: MarkerQuerySet
"""
from backends.marker.models.marker import Marker
return Marker.objects \
.filter(routemarker__route=self) \
.actual() \
.order_by('routemarker__order')
@cached_property
def marker_count(self):
"""
:return: Количество точек маршрута
:rtype: int
"""
return self.routemarker_set.filter(route=self).count()
def is_purchased_by(self, user) -> bool:
"""
Определяет был ли приобретен данный маршрут заданным пользователем.
Маршрут также считается приобретенным, если пользователь сам создал его.
:type user: User
:rtype: bool
"""
return not user.is_anonymous() and self in user.routes
@cached_property
def was_bought(self):
owner_count = self.userroute_set.count()
owner_count += self.grouproute_set.count()
return owner_count > 1
def permissions(self, user):
"""
Возвращает все права доступа заданного пользователя `user` на все
69
доступные действия с маршрутом и его метками.
:type user: User
:rtype: dict
"""
permissions = {}.fromkeys(
[perm.codename for perm in get_perms_for_model(self)],
False
)
for perm in get_perms(user, self):
permissions[perm] = perm in permissions.keys()
return permissions
class RoutePurchase(object):
"""
Общий интерфейс для определения информации о покупке маршрута.
"""
route: Route
from django.db import models
from django.db.models import QuerySet, Q
from backends.marker.models import Marker
from backends.marker.models.route import Route
class RouteMarkerQuerySet(QuerySet):
def actual(self):
return self.filter(Q(marker__deleted=False))
class RouteMarker(models.Model):
marker = models.ForeignKey(Marker)
route = models.ForeignKey(Route)
order = models.PositiveIntegerField(blank=True, null=True,
verbose_name="порядковый номер")
date_created = models.DateTimeField(auto_now_add=True)
70
class Meta:
unique_together = ('route', 'marker')
objects = RouteMarkerQuerySet.as_manager()
default_manager = RouteMarkerQuerySet.as_manager()
from django.db import models
from backends.user.models.user import User
from backends.marker.models.route import (
Route,
RoutePurchase,
)
class UserRoute(RoutePurchase, models.Model):
user = models.ForeignKey(User)
route = models.ForeignKey(Route)
date_created = models.DateTimeField(auto_now_add=True)
is_owner = models.BooleanField(default=False)
class Meta:
unique_together = ('user', 'route')
from django.db import models
from backends.group.models.group import Group
from backends.marker.models.route import (
Route,
RoutePurchase,
)
class GroupRoute(RoutePurchase, models.Model):
group = models.ForeignKey(Group)
route = models.ForeignKey(Route)
date_created = models.DateTimeField(auto_now_add=True)
is_owner = models.BooleanField(default=False)
class Meta:
unique_together = ('group', 'route')
from backends.group.models import GroupRoute
from backends.group.services import GroupRouteService
71
from backends.marker.models import Route
from backends.marker.services import RouteService
from backends.user.models import (
UserRoute,
User,
)
from backends.user.services.user_route_service import UserRouteService
class RouteServiceProvider(object):
"""
Обеспечивает нужную реализацию RouteService в зависимости
от заданного маршрута.
"""
def get_service(self, route: Route, requester: User) -> RouteService:
user_owner = UserRoute.objects.filter(route=route, is_owner=True)
if user_owner.exists():
return UserRouteService(requester)
group_owner: GroupRoute = GroupRoute.objects.filter(route=route).first()
if group_owner:
return GroupRouteService(group=group_owner.group, requester=requester)
return RouteService(requester=requester)
from backends.core.services import Service
from backends.marker.models import Route
from backends.marker.models.route import RoutePurchase
class RouteService(Service):
class PurchaseError(Exception):
def __init__(self, message, code):
self.message = message
self.code = code
def create_route(self, data):
raise NotImplementedError()
def purchase(self, route: Route) -> RoutePurchase:
"""
Осуществляет покупку заданного маршута запрашиваемым пользователем.
72
:param route: Маршрут, который покупает пользователь.
:return: Возвращает информацию о покупке маршрута.
"""
raise NotImplementedError()
from django.db import transaction
from backends.group.models import GroupRoute
from backends.marker.models.route import (
Route,
RouteOwner,
)
from backends.marker.serializers.route_serializer import RouteSerializer
from backends.marker.services.route_service import RouteService
from backends.user.models.user_route import UserRoute
class GroupRouteService(RouteService):
def __init__(self, requester, group):
super().__init__(requester=requester)
self.group = group
@transaction.atomic()
def create_route(self, data):
val = {"belongs_to": RouteOwner.GROUP}
val.update(data)
route_serializer = RouteSerializer(data=val, context=self.context)
if route_serializer.is_valid():
route = route_serializer.save()
group_route, created = GroupRoute.objects.get_or_create(
group=self.group,
route=route,
is_owner=True
)
return created, route
return False, route_serializer.errors
@transaction.atomic()
def purchase(self, route: Route) -> GroupRoute:
if not route.visible:
73
raise RouteService.PurchaseError(
message="Вы не можете купить скрытый маршрут.",
code="hidden_route",
)
if not self.group.can_be_viewed_by(self.requester):
raise RouteService.PurchaseError(
message="Вы не можете купить маршрут в скрытой группе.",
code="hidden_group"
)
if route.is_purchased_by(self.requester):
raise RouteService.PurchaseError(
message="Маршрут куплен.",
code="exists"
)
purchased_route, created = UserRoute.objects.get_or_create(
user=self.requester,
route=route,
)
return purchased_route
from django.db import transaction
from backends.marker.models import Route
from backends.marker.models.route import RouteOwner
from backends.marker.serializers.route_serializer import RouteSerializer
from backends.marker.services.route_service import RouteService
from backends.user.models import (
UserRoute,
)
class UserRouteService(RouteService):
@transaction.atomic()
def create_route(self, data):
val = {"belongs_to": RouteOwner.USER}
val.update(data)
route_serializer = RouteSerializer(data=val, context=self.context)
if route_serializer.is_valid():
74
route = route_serializer.save()
user_route, created = UserRoute.objects.get_or_create(
user=self.requester,
route=route,
is_owner=True,
)
return created, route
return False, route_serializer.errors
def purchase(self, route: Route) -> UserRoute:
"""
Осуществляет покупку маршрута заданному пользователю.
Для покупки маршрута используются сервисы для предоставления раздельной
логики для покупки маршрута у пользователя и у группы.
:param route:
:return:
"""
if not route.visible:
raise RouteService.PurchaseError(
message="Вы не можете купить скрытый маршрут.",
code="hidden_route",
)
if route.is_purchased_by(self.requester):
raise RouteService.PurchaseError(
message="Маршрут куплен.",
code="exists"
)
purchased_route, created = UserRoute.objects.get_or_create(
user=self.requester,
route=route,
)
return purchased_route
Powered by TCPDF (www.tcpdf.org)
76
ИНФОРМАЦИОННО-ПОИСКОВАЯ ХАРАКТЕРИСТИКА
ДОКУМЕНТА НА ЭЛЕКТРОННОМ НОСИТЕЛЕ
Наименование
группы атрибутов
атрибута
1. Описание
Обозначение документа
документа
(идентификатор(ы)
файла(ов))
Наименование документа
2. Даты и время
3. Создатели
4. Внешние
ссылки
5. Защита
6. Характеристики
содержания
Характеристики документа
на электронном носителе
\Презентация.pptx
Демонстрационные плакаты
к выпускной
квалификационной работе
Класс документа
ЕСКД
Вид документа
Оригинал документа на
электронном носителе
Аннотация
Демонстрационный
материал, отображающий
основные этапы выполнения
выпускной
квалификационной работы
Использование документа Операционная система
Windows 8.1, Microsoft
PowerPoint 2010
Дата и время
15.06.2018
копирования документа
Дата создания документа 06.06.2018
Дата утверждения
07.06.2018
документа
Автор
Емельянова Е.П.
Изготовитель
Емельянова Е.П.
Ссылки на другие
Удостоверяющий лист
документы
№ 140196/п
Санкционирование
ОГУ имени И.С. Тургенева
Классификация защиты
По законодательству РФ
Объем информации
928 399 Б
документа
77
7. Структура
документа(ов)
Наименование плаката
(слайда) №1
Наименование плаката
(слайда) №2
Наименование плаката
(слайда) №3
Наименование плаката
(слайда) №4
Наименование плаката
(слайда) №5
Наименование плаката
(слайда) №6
Наименование плаката
(слайда) №7
Наименование плаката
(слайда) №8
Наименование плаката
(слайда) №9
Наименование плаката
(слайда) №10
Наименование плаката
(слайда) №11
Наименование плаката
(слайда) №12
Титульный лист
Цели и задачи выпускной
квалификационной работы
Сравнительный анализ
существующих аналогов
Диаграмма вариантов
использования
Логическая схема сети
построения сервиса YouGid с
подсистемой составления
туристических маршрутов
Структурная модель
подсистемы составления
индивидуальных
туристических маршрутов
Общий алгоритм работы
подсистемы
Алгоритм работы просмотра
маршрутов
Диаграмма состояний при
просмотре маршрутов
Логическая модель базы
данных подсистемы
Экранные формы просмотра
маршрутов
Экранные формы
упорядочивания меток в
маршруте
Powered by TCPDF (www.tcpdf.org)
1/--страниц
Пожаловаться на содержимое документа