close

Вход

Забыли?

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

Шахова Аделина Игоревна. Разработка чат-бота для интернет-представительства университета на основе API Telegram

код для вставки
№ШИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕIШОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ
УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«ОРЛОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ИМЕНИ И.С. ТУРГЕНЕВА»
ВЫПУСКНАЯ КВАЛИФИКАIЩОННАЯ РАБОТА
по направлению подготовки
09.03.01 «Информатика и вычислительная техника»
направленность «Программное обеспечение вычислитель ной техники и
автоматизированных систем»
Студента Шаховой Аделины Игоревны
шифр 140183/п
Институт приборостроения, автоматизации и информационных технологий
Тема выпускной квалификационной работы
«Разработка чат-бота для интернет-представительства университета на основе API
Telegram»
Студент
А.И. Шахова
Руководитель
А.В. Артёмов
Нормо контроль
А.Ю. Ужаринский
Зав. кафедрой
программной инженерии
А.И. Фролов
Орёл 2018
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ
УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«ОРЛОВСКИЙ ГОСУДАРСТВЕННЬIЙ УНИВЕРСИТЕТ
ИМЕНИ И.С. ТУРГЕНЕВА»
Институт приборостроения, автоматизации и информационных технологий
Кафедра программной инженерии
09.03.01 «Информатика и вычислительная техника»
направленность «Программное обеспечение вычислительной техники и
автоматизированных систем»
УТВЕРЖДАЮ:
Зав.кафедрой
�А.И.Фролов
«/L_»
"' Г
20?"' г.
ЗАДАНИЕ
на выполнение выпускной квалификационной работы
студента Шаховой Аделины Игоревны
шифр 140183/п
1 Тема ВКР «Разработка чат-бота для интернет-представительства университета
на основе API Telegram»
Утверждена приказом по университету от «З 1» октября 2017г. № 2-3076
2 Срок сдачи студентом законченной работы «20» июня 2018г.
3 Исходные данные к работе
Теоретический материал; информация о предметной области.
4 Содержание пояснительной записки (перечень подлежащих разработке
вопросов)
Анализ задачи и формулировка требований к разработке
Анализ требований, определение спецификаций и проектирование программного
обеспечения
Реализация программного обеспечения
АННОТАЦИЯ
ВКР 80 с., 31 рис., 1 табл., 10 источников, 5 прил.
ЧАТ-БОТ, TELEGRAM, BOT API TELEGRAM, ИНФОРМАЦИОННАЯ
СИСТЕМА,
МЕССЕНДЖЕР,
ПРИЛОЖЕНИЕ
ДЛЯ
УНИВЕРСИТЕТА,
ИНТЕРНЕТ-ПРЕДСТАВИТЕЛЬСТВО.
Выпускная квалификационная работа посвящена разработке чат-бота
для интернет-представительства университета на основе API Telegram.
В первой главе проводится анализ предметной области: анализируется
и формализуется решаемая задача, формулируются основные требования к
программному обеспечению, рассматриваются аналоги с выявлением их
преимуществ и недостатков, а также анализируются существующие методы
решения поставленной задачи.
Во второй главе формируются спецификации для разрабатываемого
программного
обеспечения:
функциональные,
информационный
и
поведенческие. Также в данной главе рассматривается этап проектирования, а
именно: проектирование архитектуры и структуры будущей системы,
проектирование структур данных и интерфейса, разработка алгоритмов, а
также описание модулей программного обеспечения.
В третье
главе
уделяется
внимание
реализации
программного
обеспечения: приводится информация об инструментальных и языковых
средствах разработки, рассматривается реализация модулей программного
обеспечения и интерфейса пользователя, а также приводятся примеры работы
программного обеспечения.
4
СОДЕРЖАНИЕ
ВВЕДЕНИЕ
6
1 АНАЛИЗ ЗАДАЧИ И ФОРМУЛИРОВКА ТРЕБОВАНИЙ К РАЗРАБОТКЕ
7
1.1 Анализ, формализация решаемой задачи
7
1.2 Функциональные и эксплуатационные требования к программному
обеспечению
8
1.3 Обзор аналогов
11
1.4 Анализ существующих методов решения поставленной задачи
13
2 АНАЛИЗ ТРЕБОВАНИЙ, ОПРЕДЕЛЕНИЕ СПЕЦИФИКАЦИЙ И
ПРОЕКТИРОВАНИЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
25
2.1 Разработка функциональных спецификаций
25
2.1.1 Функциональная диаграмма
26
2.1.2 Диаграмма потоков данных
31
2.2 Разработка поведенческих спецификаций
33
2.3 Разработка архитектуры программного обеспечения
37
2.4 Проектирование структуры программного обеспечения
39
2.5 Проектирование структур данных
40
2.6 Разработка алгоритмов
43
2.7 Проектирование интерфейса
48
3 РЕАЛИЗАЦИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
49
3.1 Языковые и инструментальные средства разработки
49
3.2 Реализация модулей программного обеспечения
51
3.3 Реализация интерфейса пользователя
55
3.4 Примеры работы программного обеспечения
58
ЗАКЛЮЧЕНИЕ
65
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
66
ПРИЛОЖЕНИЕ А – ТРАНЗИТИВНАЯ СЕТЬ ДИАЛОГА С
ПОЛЬЗОВАТЕЛЕМ
67
ПРИЛОЖЕНИЕ Б – МОДУЛЬ РАБОТЫ С САЙТОМ
68
5
ПРИЛОЖЕНИЕ В – МОДУЛЬ РАБОТЫ С РАСПИСАНИЕМ
70
ПРИЛОЖЕНИЕ Г – МОДУЛЬ РАБОТЫ С АТТЕСТАЦИЕЙ
73
ПРИЛОЖЕНИЕ Д – МОДУЛЬ РАБОТЫ С ИНФОРМАЦИЕЙ О
ПРЕПОДАВАТЕЛЯХ
76
УДОСТОВЕРЯЮЩИЙ ЛИСТ
78
ИНФОРМАЦИОННО-ПОИСКОВАЯ ХАРАКТЕРИСТИКА ДОКУМЕНТА НА
ЭЛЕКТРОННОМ НОСИТЕЛЕ
79
6
ВВЕДЕНИЕ
В наше время именно мессенджеры являются самыми популярными
платформами для коммуникации, особенно среди молодёжи. Поэтому их
актуальность сегодня невозможно не отметить.
Это объясняет тот факт, что именно данная платформа было выбрана в
качестве платформы для разработки данного приложения. Что касается выбора
Telegram, именно этот мессенджер по статистике имеет максимальный прирост
популярности среди пользователей, по сравнению с другими популярными
мессенджерами. Поэтому функционирование приложения-бота именно в пределах
этого мессенджера является наиболее очевидным решением поставленной задачи,
а
именно
задачи
обеспечить
Интернет-представительство
университета
необходимой информацией.
Таким образом, основная цель данной выпускной квалификационной
работы состоит в том, чтобы разработать такое приложение, которое бы
выполняло функцию выдачи информации для Интернет-представительства
университета на основе API мессенджера Telegram. Для осуществления данной
цели необходимо выполнить ряд следующих задач:
− сформулировать функциональные и эксплуатационные требования к
разрабатываемому программному обеспечению;
− рассмотреть
уже
существующие
аналоги
разрабатываемого
программного обеспечения, выделив их достоинства и недостатки;
− проанализировать существующие методы решения поставленной задачи,
отметить их достоинства и недостатки;
− разработать спецификации к программному обеспечению;
− спроектировать архитектуру и структуру программного обеспечения;
− спроектировать структуры данных, алгоритмы и интерфейс будущего
программного обеспечения;
− реализовать данное программное обеспечение и отладить.
7
1 АНАЛИЗ ЗАДАЧИ И ФОРМУЛИРОВКА ТРЕБОВАНИЙ К РАЗРАБОТКЕ
1.1 Анализ, формализация решаемой задачи
Использование сайта в качестве источника информации не всегда удобно,
так как процесс загрузки сайта, а также процесс поиска нужной информации на
сайте в совокупности занимают достаточно много времени. Поэтому на смену
данного метода получения информации пришёл новый – более быстрый и
удобный в обращении.
Учитывая то, что основная аудитория разрабатываемого приложения – это
молодёжь, в качестве платформы для размещения приложения была выбрана
именно платформа мессенджеров.
Система мгновенного обмена сообщениями или мессенджер – это
программа для обмена сообщениями в реальном времени через Интернет.
Выделим
основные
характеристики,
которым
должно
отвечать
разрабатываемое приложение:
1) Экономия времени. Необходимо, чтобы информация была доставлена
пользователю в кратчайшие сроки. Именно такую скорость доставки может
обеспечить чат-бот в мессенджере;
2) Большой охват аудитории. Именно по этой причине в качестве
платформы размещения чат-бота был выбран мессенджер Telegram;
3) Расписание в “один клик”. Необходимо предоставить возможность
получения нужной информации в один или несколько кликов. Для этого
необходимо реализовать механизм сохранения состояний;
4) Достоверность информации. Так как данное программное обеспечение
разрабатывается для использования студентами и преподавателями ОГУ имени
И.С. Тургенева, необходимо, чтобы информация, получаемая через приложение,
была актуальна и достоверна;
5) Интуитивная понятность в использовании. Интерфейс взаимодействия с
приложением не должен быть перегружен информацией.
8
1.2 Функциональные и эксплуатационные требования к программному
обеспечению
Рассмотрим
подробнее
функции,
которые
будет
выполнять
разрабатываемое программное обеспечение. Основные функции, которые будет
выполнять Telegram-бот – это выдача расписания и успеваемости. Рассмотрим
подробнее все функции разрабатываемого приложения.
1) Начало работы. Для начала работы с ботом необходимо выбрать из
списка команд или прописать самому команду “/start”. Далее покажется меню с
выбором дальнейшего действия: выдать расписание или успеваемость;
2) Выдача расписания. Перед выдачей расписания бот предоставляет выбор,
для кого или для чего выдавать расписание: для студента, преподавателя или
аудитории. В зависимости от выбранного пункта бот предлагает различные
варианты на выбор. Также если пользователь когда-либо устанавливал параметры
по умолчанию, ему будут доступны быстрые команды, такие как: “Расписание на
сегодня”, “Расписание на завтра” и “Расписание на неделю”. Рассмотрим каждую
ситуацию отдельно:
а) Ситуация, когда пользователь выбрал расписание для студента. В
этой ситуации бот спросит факультет (институт), на котором обучается
студент, и выдаст кнопки, подписанные названиями факультетов для
выбора. После выбора нужного факультета пользователем бот спросит курс
студента и аналогичным образом предоставит выбор курса с помощью
кнопок с подписями. Аналогичным образом далее бот спросит группу и
предоставит
кнопки
для
выбора.
После
выбора
нужной
группы
пользователь получит расписание в формате одного или нескольких
текстовых
сообщений.
Также
пользователю
будет
предоставлена
возможность сохранить выбранную группу в качестве группы по
умолчанию для дальнейшего получения расписания без процедуры выбора
нужных пунктов;
б)
Ситуация,
когда
пользователь
выбрал
расписание
для
преподавателя. В этой ситуации бот спросит факультет (институт), на
9
котором находится нужный преподаватель, и выдаст кнопки, подписанные
названиями факультетов для выбора. После выбора нужного факультета
пользователем бот спросит кафедру преподавателя и аналогичным образом
предоставит выбор кафедры с помощью кнопок с подписями. Аналогичным
образом далее бот спросит фамилию преподавателя и предоставит список
кнопок с фамилиями для выбора. После выбора нужного преподавателя
пользователь получит расписание в формате одного или нескольких
текстовых
возможность
сообщений.
сохранить
Также
пользователю
выбранного
будет
преподавателя
предоставлена
в
качестве
преподавателя по умолчанию для дальнейшего получения расписания без
процедуры выбора нужных пунктов;
в) Ситуация, когда пользователь выбрал расписание для аудитории. В
этой ситуации бот спросит корпус, в котором находится нужная аудитория,
и выдаст кнопки, подписанные номерами корпусов для выбора. После
выбора нужного корпуса пользователем бот спросит номер аудитории и
аналогичным образом предоставит выбор аудитории с помощью кнопок с
подписями. После выбора нужной аудитории пользователь получит
расписание в формате одного или нескольких текстовых сообщений;
г) Ситуация, когда пользователь выбрал просмотр расписания
звонков. В этой ситуации бот спросит, расписание звонков для какого типа
образования показать пользователю. Выбрав нужный тип, а именно: высшее
образование или среднее профессиональное образование, пользователь
получит сообщение с расписанием звонков.
3) Выдача успеваемости. В случае выбора из стартового меню пункта
“Успеваемость” бот начнёт спрашивать данные студента для входа в его личный
кабинет. Сперва бот попросит ввести номер зачётной книги студента, для
которого пользователь хочет получить успеваемость. После ввода номера
зачётной книги бот попросит ввести фамилию и имя желаемого студента, а также
дату его рождения. В случае корректного ввода данных студента бот выдаст меню
с выбором того, что доступно для просмотра пользователем, а именно: текущая
10
аттестация студента, промежуточная аттестация (итоги сессии) и итоговая
аттестация. Далее от выбора пользователя зависит содержимое ответа бота. В
случае выбора пункта “Промежуточная аттестация” пользователю будет
предоставлен выбор семестра с помощью нажатия на кнопку с номером нужного
семестра;
4) Смена параметров по умолчанию. Если пользователь ранее установил
некоторые параметры по умолчанию (группу, преподавателя или пользователя),
их можно изменить, выбрав пункт меню “Сменить группу”, “Сменить
преподавателя” или “Сменить пользователя” в случае со сменой пользователя для
входа в личный кабинет. При выборе пунктов “Сменить группу” и “Сменить
преподавателя” пользователю придётся вновь пройти процедуру выбора нужных
ему пунктов (факультета, курса, группы, кафедры и т.д.). В случае выбора пункта
“Сменить пользователя” пользователю придётся вновь вводить данные для входа
в личный кабинет;
5) Просмотр портфолио студента. При выборе этого пункта бот начнёт
спрашивать данные студента для входа в его личный кабинет. Сперва бот
попросит
ввести
номер
зачётной
книги
студента,
портфолио
которого
пользователь хочет посмотреть. После ввода номера зачётной книги бот попросит
ввести фамилию и имя желаемого студента, а также дату его рождения. В случае
корректного ввода данных студента бот выдаст информацию о портфолио
студента;
6) Получение информации о преподавателях. При выборе этого пункта бот
предоставит пользователю выбор: искать преподавателя по его факультету и
кафедре или искать преподавателя по фамилии. Если пользователь выберет
первый вариант, то ему придётся пройти процедуру выбора нужного факультета и
кафедры, а далее выбрать нужного преподавателя из списка. В случае выбора
второго варианта, пользователь должен будет ввести фамилию преподавателя,
информацию о котором он хочет получить. Если существует несколько
преподавателей с одинаковой фамилией, пользователю будет предложен список
таких преподавателей для выбора нужного. Информация о преподавателе
11
приходит в формате текстового сообщения, где указана должность преподавателя,
а также его контактная информация: адрес, телефон и e-mail;
7) Получение справки по использованию приложения. Пользователь может
получить справку по использованию приложения, написав боту “Помощь” или же
отправив боту команду “/help”.
1.3 Обзор аналогов
Рассмотрим некоторые известные аналоги приложения, предназначенного
для Интернет-представительства университета, в частности аналоги приложения,
выполняющего функцию выдачи расписания и/или успеваемости студентов.
Укажем достоинства и недостатки каждого из аналогов, а также разрабатываемого
приложения.
1) Официальный сайт ОГУ имени И.С. Тургенева. Сайт располагается по
адресу oreluniver.ru и является самым достоверным источником получения
информации о расписании и успеваемости любого студента, обучающегося в ОГУ
имени И.С. Тургенева. Данный сайт поддерживает выдачу расписания для
студентов, преподавателей и аудиторий. Достоинства: корректная информация о
расписании и успеваемости; отображение свежих изменений в расписании.
Недостатки: проблемы в отображении мобильной версии сайта во время
просмотра расписания;
2) Приложение Studify от компании “Расписание вузов”. Это приложение,
выдающие расписание для студентов. Сайт, описывающий приложение,
располагается по адресу http://studify.ru/. Приложение позволяет просматривать
расписание для студентов различных университетов России. Также приложение
поддерживает функции записи задания по какому-либо предмету и отслеживания
стажировок от компаний, в которых пользователь заинтересован. Приложение
можно установить на мобильный, имеющий как ОС Android, так и IOS.
Достоинства:
наличии
функции
записи
заданий,
функция
отслеживания
стажировок, наличие информации о расписании для ОГУ имени И.С. Тургенева.
12
Недостатки: неполная информация о расписании для ОГУ имени И.С. Тургенева,
нет поддержки расписания для преподавателей и аудиторий;
3) Сервис для выдачи расписания, разработанный студентом ОГУ имени
И.С. Тургенева. Сервис располагается по адресу http://schedule.lkmfwe.com.
Достоинства: удобная навигация по учебным неделям, актуальная информация о
расписании. Недостатки: нет поддержки расписания для преподавателей и
аудиторий.
Что касается разрабатываемого приложения, его основное отличие от
известных аналогов в том, что оно использует в качестве платформы размещения
мессенджер Telegram. Информация для Интернет-представительства для ОГУ
имени И.С. Тургенева в сочетании с методом получением этой информации через
популярный мессенджер делает разрабатываемое приложение уникальным. Ещё
одно отличие разрабатываемого приложения от его известных аналогов в том, что
в данном приложение реализован механизм сохранения состояний, используя
который пользователь может получить нужную ему информацию в “один клик”.
Также разрабатываемое приложение позволяет получить портфолио студента, а
также информацию о любом преподавателе университета, а именно его
контактные данные.
Сравним по некоторым критериям рассмотренные выше аналоги, а также
разрабатываемое приложение и представим результаты в виде таблицы.
Таблица 1 – Результаты сравнения аналогов по некоторым критериям
Критерий сравнения
Официальный
Studify
сайт ОГУ
http://schedul
Разрабатываемое
e.lkmfwe.com
приложение-бот
имени И.С.
Тургенева
1
2
3
4
5
Бесплатный доступ
да
да
да
да
Поддержка расписания для
да
да
да
да
студентов
13
Продолжение таблицы 1
1
2
3
4
5
Поддержка расписания для
да
нет
нет
да
да
нет
нет
да
нет
да
нет
да
нет
да
нет
да
да
да
да
да
да
нет
да
да
да
да
да
да
да
нет
нет
да
нет
нет
нет
да
да
нет
нет
да
Получение успеваемости
да
нет
нет
да
Получение информации о
да
нет
нет
да
преподавателей
Поддержка расписания для
аудиторий
Адаптация для мобильных
устройств
Просмотр расписания
только на текущий день
недели
Использование сервиса с
мобильного телефона
Использование сервиса с
компьютера
Возможность получения
информации для ОГУ
имени И.С. Тургенева
Сохранение настроенных
параметров для выдачи
расписания (успеваемости)
Использование сервиса в
мессенджере Telegram
Просмотр портфолио
студента
преподавателе
1.4 Анализ существующих методов решения поставленной задачи
Существует
приложения
для
большое
количество
различных
Интернет-представительства
способов
университета,
реализации
в
частности
14
приложения, выполняющего функцию выдачи расписания и/или успеваемости
студентов.
Рассмотрим сперва не связанные с Telegram способы реализации такого
приложения или сервиса.
1) Разработка чат-бота для использования в других мессенджерах, таких
как: “Viber”, “Skype”, “Whatsapp” и др. Данный метод схож с методом,
используемым в данной работе, но различие в том, что для разработки такого бота
будет использоваться API именного того мессенджера, для которого этот бот
будет
предназначен.
Поэтому
необходимо
учитывать
особенности
API
выбранного мессенджера. Также аудитория чат-бота зависит от популярности
самого мессенджера. Достоинства данного метода: если мессенджер достаточно
известен и популярен, актуальность разработки такого чат бота выше; несложно
переписать чат-бота под API другого мессенджера, сохранив его логику, но внося
изменения в вызов функций, т.к. функции API примерно одинаковы. Недостаток:
данный метод охватывает не всю аудиторию, т.к. не все потенциальные
пользователи сервиса выдачи расписания используют мессенджеры;
2) Разработка чат-бота для использования в социальных сетях, таких как:
“ВКонтакте”, “Facеbook” и другие. При создании такого чат-бота также, как и в
случае с созданием чат-бота для какого-либо мессенджера, необходимо учитывать
особенности API каждой из платформы разработки. Учитывая, что аудитория,
которая
потенциально
будет использовать данного чат-бота, использует
социальные сети, то разработка под эту платформу чат-бота будет весьма
выгодной. Недостаток: данный метод охватывает не всю аудиторию, т.к. не все
потенциальные пользователи сервиса выдачи расписания используют социальные
сети, например, преподаватели;
3) Интеграция чат-бота с сайтом университета. Основная идея данного
метода состоит в том, чтобы на сайте располагалось окно, с которым пользователь
мог бы взаимодействовать. “Общение” с чат-ботом в данном методе происходит
аналогично “общению” в каком-либо мессенджере. Основное требование – окно с
15
чат-ботом должно быть заметно пользователю, или же способ вызвать такое окно
должен быть заметен и понятен пользователю;
4) Методы выдачи расписания и/или успеваемости студентов без
использования технологии чат-ботов. Рассмотрим некоторые из таких методов:
а) Реализация раздела с расписанием и/или успеваемостью студентов
на сайте университета. Такой метод выдачи данного рода информации
использует ОГУ имени И.С. Тургенева. Основная задача реализации такого
метода – сделать данный раздел с информацией заметным, понятным и
удобным в обращении для пользователя. Недостаток: новый пользователь
сайта не всегда может быстро найти нужный ему раздел – поиск нужного
раздела занимает достаточно много времени;
б) Реализация приложения для ПК. Ещё один метод реализации
сервиса выдачи расписания – это создать приложение для ПК, имеющее
интерфейс со свободной навигацией. В зависимости от выбранного языка
программирования, а также среды разработки, интерфейс может быть
реализован разными способами: например, оконный интерфейс. Также
можно реализовать подобное приложение с помощью компонентов на
форме.
Главный
недостаток
–
приложение
придётся
скачивать
и
устанавливать, а это занимает некоторое время. Поэтому пользователи
скорее всего предпочтут наиболее быстрые способы получения нужной им
информации, например, просмотр сайта или “общение” с чат-ботом;
в) Мобильное приложение, имеющее функцию выдачи расписания.
Яркий пример такого подхода к решению поставленной задачи –
приложение “Studify” от компании “Расписание ВУЗов”, предназначенное
для выдачи расписания студентов по всей России. Основное достоинство
данного метода – большой охват аудитории. Поместив разработанное
мобильное приложение в такие магазины приложений, как “App Store” или
“Google Play”, приложение будет доступно пользователям, имеющие
различные мобильные операционные системы. Ещё одно достоинство –
приложение всегда в быстром доступе, достаточно лишь запустить его на
16
телефоне. Недостаток: пользователи, у которых нет смартфона для
использования подобных магазинов приложений, не смогут получить
данное приложение и, как следствие, использовать;
г) Рассылка расписания студентам и преподавателям по электронной
почте. Основной недостаток данного метода - большие временные затраты.
Конечно, можно разработать бота для отправки подобных сообщений, но
это будет дольше, чем просто реализовать такого бота, например, для
мессенджера, потому что, если бот будет работать с электронной почтой,
нужно будет изучать работу с протоколами электронной почты. Ещё один
недостаток – в наше время использование электронной почты отошло на
задний план.
Теперь рассмотрим методы реализации поставленной задачи, а именно
реализацию приложения для Интернет-представительства университета, в
частности приложения, выполняющего функцию выдачи расписания и/или
успеваемости студентов, связанные с Telegram.
1) Метод реализации поставленной задачи с помощью самостоятельного
написания вызовов функций API Telegram. Данный метод предполагает вызов
методов API Telegram напрямую, без использования библиотек, упрощающих
вызов этих методов. Известно, что все запросы к Telegram Bot API должны
осуществляться
через
HTTPS
в
следующем
виде:
https://api.telegram.org/bot<token>/название_метода. Таким образом, используя
этот метод решения поставленной задачи пришлось бы посылать запросы по
указанному выше адресу самостоятельно и также самостоятельно обрабатывать
ответы, приходящие с сервера;
2) Метод решение задачи с помощью готовой библиотеки Telegram для
платформы Node.js. Именно этот метод был использован в данной работе.
Поэтому рассмотрим подробнее все аспекты данного метода.
Чат-бот – это программа, работающая внутри мессенджера. Такая
программа способна отвечать на вопросы, а также самостоятельно задавать их.
Чат-боты используются в разных сферах для решения типовых задач [1].
17
Чат-боты могут использоваться:
−
в службах поддержки, помогая решить простые вопросы,
например, такие как смена пароля;
−
для поиска информации, например, прогноз погоды, афиша
мероприятий, выбор подарка [10];
−
в сфере путешествий. В данной сфере чат-бот может
предложить направления/рейсы/рестораны – на основании поисковых
запросов и предпочтений пользователя;
−
в качестве помощника работодателям и соискателям в процессе
поиска работы и подбора кадров. Например, в России собеседования
проводил чат-бот от компании Superjob для компании «Связной»;
−
в качестве персональных помощников. Например, изобретатель
хэштега Крис Мессина использует бота-помощника, MessinaBot, который
отвечает всем тем, кто пишет ему в социальную сесть “Facebook”.
В данной работе чат-бот будет использоваться для поиска и выдачи
конечному пользователю информации, в частности информации о расписании и
успеваемости. Основная особенность данного чат-бота – выдача расписания не
только для студентов, но и для преподавателей, и для аудиторий.
Как уже говорилось выше, в данной работе используется именно этот метод
решения задачи – с помощью готовой библиотеки Telegram для платформы
Node.js. Рассмотрим подробнее данную платформу, а также API мессенджера
Telegram.
Node или Node.js — программная платформа, основанная на движке V8
(транслирующем JavaScript в машинный код), превращающая JavaScript из
узкоспециализированного языка в язык общего назначения. Node.js добавляет
возможность JavaScript взаимодействовать с устройствами ввода-вывода через
свой API (написанный на C++), подключать другие внешние библиотеки,
написанные на разных языках, обеспечивая вызовы к ним из JavaScript-кода.
Node.js применяется преимущественно на сервере, выполняя роль веб-сервера, но
18
есть возможность разрабатывать на Node.js и десктопные оконные приложения и
даже программировать микроконтроллеры. В основе Node.js лежит событийноориентированное
и
асинхронное
(или
реактивное)
программирование
с
неблокирующим вводом/выводом [2].
В состав Node.js входит собственный менеджер (установщик) пакетов,
который называется npm (Node.js Package Manager). С помощью этого менеджера
пакетов был установлен модуль “node-telegram-bot-api”. Именно этот модуль
содержит нужные функции для работы с Bot API Telegram и заметно упрощает
работу с данным API.
Bot API представляет из себя HTTP-интерфейс для работы с ботами в
Telegram. Интерфейс позволяет программировать бота, задавать ему различные
команды взаимодействия с пользователями, а также получать удобный доступ.
Фактически без API программисты ботов должны были бы каждый раз писать
свой собственный искусственный интеллект. С его же использованием все
становится гораздо проще. В этом API есть уже готовые функции вывода и ввода
текста, ответов на прописанные вопросы и прочего подобного. То есть,
фактически разработчику остается только вписать свой текст, если речь идет о
совсем примитивном роботе.
Рассмотрим основные возможности Bot API Telegram, а также некоторые
типы и функции. Информацию возьмём из документации к Bot API Telegram [4,
5].
1) Авторизация бота. Каждому боту при создании присваивается
уникальный токен вида 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11;
2) Отправка запросов. Все запросы к Telegram Bot API должны
осуществляться
через
HTTPS
в
следующем
виде:
https://api.telegram.org/bot<token>/НАЗВАНИЕ_МЕТОДА. Допускаются GET и
POST запросы. Для передачи параметров в Bot API доступны 4 способа:
−
запрос в URL;
−
application/x-www-form-urlencoded;
19
−
application/json (не подходит для загрузки файлов);
−
multipart/form-data (для загрузки файлов).
Ответ придёт в виде JSON-объекта, в котором всегда будет булево поле ok и
опциональное строковое поле description, содержащее человекочитаемое описание
результата. Если поле ok истинно, то запрос прошёл успешно и результат его
выполнения можно увидеть в поле result. В случае ошибки поле ok будет равно
false, а причины ошибки будут описаны в поле description. Кроме того, в ответе
будет целочисленное поле error_code, но коды ошибок будут изменены в
будущем;
3) Получение обновлений. Существует два диаметрально противоположных
по логике способа получать обновления от бота: getUpdates и вебхуки. Входящие
обновления будут храниться на сервере до тех пор, пока вы их не обработаете, но
не дольше 24 часов. Независимо от способа получения обновлений, в ответ вы
получите объект Update, сериализованный в JSON. Этот объект представляет из
себя входящее обновление. Под обновлением подразумевается действие,
совершённое с ботом — например, получение сообщения от пользователя.
Для получения обновлений через long polling используется метод
getUpdates. Ответ возвращается в виде массива объектов Update. Этот метод не
будет работать, если у вас уже подключен webhook.
Для получения обновления с помощью вебхуков используется метод
setWebhook. Этот метод необходим для задания URL вебхука, на который бот
будет отправлять обновления. Каждый раз при получении обновления на этот
адрес будет отправлен HTTPS POST с сериализованным в JSON объектом Update.
При неудачном запросе к вашему серверу попытка будет повторена умеренное
число раз. При подключенном и настроенном вебхуке метод getUpdates не будет
работать;
4) Доступные типы в API Telegram. Все типы, использующиеся в Bot API,
являются JSON-объектами. Для хранения всех полей типа Integer безопасно
использовать 32-битные знаковые целые числа, если не указано иначе. Основные
типы:
20
−
User. Этот объект представляет бота или пользователя Telegram;
−
Chat. Этот объект представляет собой чат;
−
Message. Этот объект представляет собой сообщение;
−
MessageEntity. Этот объект представляет одну из особых
сущностей
в
текстовом
сообщении.
Например:
хештеги,
имена
пользователей, ссылки и т.д.;
−
PhotoSize.
Этот
объект
представляет
изображение
определённого размера или превью файла / стикера;
−
Audio. Этот объект представляет аудиозапись, которую клиенты
Telegram воспринимают как музыкальный трек;
−
Document. Этот объект представляет файл, не являющийся
фотографией, голосовым сообщением или аудиозаписью;
−
Sticker. Этот объект представляет стикер;
−
Video. Этот объект представляет видеозапись;
−
Voice. Этот объект представляет голосовое сообщение;
−
Contact - Этот объект представляет контакт с номером телефона;
−
Location - Этот объект представляет точку на карте;
−
Venue - Этот объект представляет объект на карте;
−
UserProfilePhotos. Этот объект содержит фотографии профиля
пользователя;
−
может
File. Этот объект представляет файл, готовый к загрузке. Он
быть
скачан
по
https://api.telegram.org/file/bot<token>/<file_path>.
ссылке
вида
Ссылка
будет
действительна как минимум в течение 1 часа. По истечении этого срока она
может быть запрошена заново с помощью метода getFile;
−
ReplyKeyboardMarkup. Этот объект представляет клавиатуру с
опциями ответа;
21
−
KeyboardButton. Этот объект представляет одну кнопку в
клавиатуре ответа. Для обычных текстовых кнопок этот объект может быть
заменён на строку, содержащую текст на кнопке;
−
ReplyKeyboardHide. После получения
сообщения
с этим
объектом, приложение Telegram свернёт клавиатуру бота и отобразит
стандартную клавиатуру устройства (с буквами). По умолчанию клавиатуры
бота отображаются до тех пор, пока не будет принудительно отправлена
новая или скрыта старая клавиатура. Исключение составляют одноразовые
клавиатуры, которые скрываются сразу после нажатия на какую-либо
кнопку;
−
InlineKeyboardMarkup. Этот объект представляет встроенную
клавиатуру, которая появляется под соответствующим сообщением;
−
InlineKeyboardButton. Этот объект представляет одну кнопку
встроенной клавиатуры. Обязательно должно быть задействовано одно
опциональное поле;
−
CallbackQuery. Этот объект представляет входящий запрос
обратной связи от встроенной кнопки с заданным callback_data. Если
кнопка, создавшая этот запрос, была привязана к сообщению, то в запросе
будет присутствовать поле message. Если кнопка была показана в
сообщении, отправленном при помощи встроенного режима, в запросе
будет присутствовать поле inline_message_id.
Далее рассмотрим основные методы по работе с ботом в API Telegram.
1)
getMe. Простой метод для проверки токена авторизации бота. Не
требует параметров. Возвращает информацию в форме объекта типа User;
2)
sendMessage. Функция отправки сообщения. В случае успеха
возвращается объект типа Message. Существуют опции форматирования
сообщений. Bot API поддерживает написание сообщений с использованием
жирного шрифта, курсива, текста фиксированной ширины, а также заранее
22
отформатированного текста. Также можно использовать форматирование текста в
стиле HTML. Рассмотрим этим стили:
−
Markdown
style.
Чтобы
использовать
этот
стиль
форматирования, необходимо задать Markdown в поле parse_mode при
использовании
метода
sendMessage.
Далее
используем
следующий
синтаксис: *текст* - для задания жирного шрифта, _текст_ - для задания
курсива, `текст` - для задания текста фиксированной ширины, ```текст``` для задания заранее отформатированного блока текста;
−
HTML-стиль. Чтобы использовать этот стиль форматирования,
необходимо задать HTML в поле parse_mode при использовании метода
sendMessage.
шрифт</b>,
Становятся доступными
<strong>жирный
следующие
шрифт</strong>,
теги:
<b>жирный
<i>курсив</i>,
<em>курсив</em>, <a href="URL">ссылка</a>, <code>текст фиксированной
ширины</code>, <pre>заранее отформатированный блок текста</pre>.
3)
forwardMessage. Метод для пересылки сообщений любого типа.
Возвращается объект типа Message;
4)
sendPhoto. Метод для отправки фотографий. В случае успеха
возвращается объект типа Message;
5)
sendAudio. Метод для отправки аудиофайлов. Аудиофайл должен
быть в формате .mp3. В случае успеха возвращается объект типа Message. Для
отправки голосовых сообщений используется метод sendVoice;
6)
sendDocument. Метод для отправки общих файлов. В случае успеха
возвращается объект типа Message;
7)
sendSticker. Метод для отправки стикеров. В случае успеха
возвращается объект типа Message;
8)
sendVideo. Метод для отправки видеофайлов. Telegram поддерживает
отправку видеофайлов в формате .mp4 (видеофайлы остальных форматов должны
быть отправлены как Document). В случае успеха возвращается объект типа
Message;
23
9)
sendVoice. Метод для отправки голосовых сообщений. Данный метод
работает с аудиофайлами формата .ogg. В случае успеха возвращается объект
типа Message;
10)
sendLocation. Метод для отправки точки на карте. В случае успеха
возвращается объект типа Message;
11)
sendVenue. Метод для отправки объекта на карте. В случае успеха
возвращается объект типа Message;
12)
sendContact. Метод для отправки телефонного контакта. В случае
успеха возвращается объект типа Message;
13)
sendChatAction.
Метод
используется,
когда
нужно
сообщить
пользователю, что что-то происходит на стороне бота. Статус установлен на 5
секунд или меньше (когда сообщение приходит с бота, клиенты Telegram
очищают свой статус набора). Рекомендуется использовать этот метод только
тогда, когда ответ от бота займет некоторое время;
14)
getUserProfilePhotos. Метод для получения списка фотографий
профиля пользователя. Возвращает объект типа UserProfilePhotos;
15)
getFile. Метод для получения основной информации о файле и
подготовки его для загрузки. В случае успеха возвращается объект типа Message.
Затем файл можно загрузить по ссылке https://api.telegram.org/file/bot <token> /
<file_path>, где <file_path> берется из ответа. Гарантируется, что ссылка будет
действительна в течение как минимум 1 часа. Когда ссылка истекает, можно
отправить новый запрос, снова вызвав getFile;
16)
kickChatMember. Метод используется, чтобы выгнать пользователя из
группы или супергруппы. В случае супергрупп пользователь не сможет вернуться
в группу самостоятельно, используя приглашающие ссылки и т.д., только если
пользователь будет разбанен. Чтобы метод сработал, бот должен быть
администратором группы. Метод возвращает True при успешном выполнении.
Этот метод будет работать только в том случае, если в целевой группе отключена
настройка «All Members Are Admins». В противном случае пользователи могут
24
быть удалены только создателем группы или членом группы, который их
добавил;
17)
выгнанного
unbanChatMember.
ранее
автоматически
Метод
пользователя
возвращаться
в
в
используется
супергруппе.
группу,
но
для
разблокирования
Пользователь
сможет
не
будет
подключаться
по
приглашающей ссылке и т.д. Бот должен быть администратором группы, чтобы
этот метод сработал. Возвращает True при успешном завершении;
18)
answerCallbackQuery. Метод используется для отправки ответов на
запросы обратного вызова, отправленные с встроенных клавиатур. Ответ будет
отображаться пользователю как уведомление в верхней части экрана чата или как
предупреждение. При успешном завершении возвращается True;
19)
editMessageText. Метод используется для редактирования текстовых
сообщений, отправленных ботом или через бота (для встроенных ботов). В случае
успеха возвращается объект типа Message;
20)
editMessageCaption.
Метод
используется
для
редактирования
подписей-сообщений, отправленных ботом или через бота (для встроенных
ботов). В случае успеха возвращается объект типа Message;
21)
editMessageReplyMarkup. Метод используется для редактирования
разметок ответных сообщений, отправленных ботом или через бота (для
встроенных ботов). В случае успеха возвращается объект типа Message;
22)
deleteMessage. Метод для удаления сообщения, включая служебные
сообщения. При успешном завершении возвращается True.
25
2 АНАЛИЗ ТРЕБОВАНИЙ, ОПРЕДЕЛЕНИЕ СПЕЦИФИКАЦИЙ И
ПРОЕКТИРОВАНИЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
2.1 Разработка функциональных спецификаций
Функциональная спецификация в системной инженерии и разработке
программного
характеристики
обеспечения
системы
—
это
документ,
(функциональность).
описывающий
требуемые
Документация
описывает
необходимые для пользователя системы входные и выходные параметры
(например, программная система).
Функциональная спецификация не определяет операции, происходящие
внутри данной системы и каким образом будет реализована её функция. Вместо
этого, она рассматривает взаимодействие с внешними агентами (например,
персонал, использующий программное обеспечение; периферийные устройства
компьютера или другие компьютеры), которые могут «следить», взаимодействуя
с системой [6].
Следует иметь в виду, что все функциональные спецификации описывают
одни и те же характеристики разрабатываемого программного обеспечения:
перечень функций и состав обрабатываемых данных. Они различаются только
системой приоритетов (акцентов), которая используется разработчиком в
процессе анализа требований и определения спецификаций.
Так методологии структурного анализа и проектирования, основанные на
моделировании потоков данных, обычно используют комплексное представление
проектируемого программного обеспечения в виде совокупности моделей:
−
диаграмм потоков данных (DFD – Data Flow Diagrams), описывающих
взаимодействие источников и потребителей информации через процессы, которые
должны быть реализованы в системе;
−
диаграмм «сущность-связь» (ERD – Entity-Relationship Diagrams),
описывающих базы данных разрабатываемой системы;
26
−
диаграмм переходов состояний (STD – State Transition Diagrams),
характеризующих поведение системы во времени;
−
спецификаций процессов;
−
словаря терминов.
Диаграммы, относящиеся к функциональным спецификациям, которые мы
будет использовать в данной работе – это функциональная диаграмма и
диаграмма потоков данных. Перейдем к более подробному рассмотрению
перечисленных моделей [7, с. 73-74].
2.1.1 Функциональная диаграмма
Функциональными называют диаграммы, в первую очередь отражающие
взаимосвязи функций разрабатываемого программного обеспечения. В качестве
примера
функциональной
модели
рассмотрим
активностную
модель,
предложенную Д. Россом в составе методологии функционального моделирования
SADT
(Structured
Analysisand
Design
Technique
-
технология
структурного анализа и проектирования) в 1973 г. На основе методологии SADT в
дальнейшем была построена известная методология описания сложных систем
IDEFO (Icam DEFinition - нотация ICAM), которая является основной частью
программы ICAM (Integrated Computer-Aided Manufacturing - интегрированная
компьютеризация производства).
Отображение взаимосвязи функций активностной модели осуществляется
посредством построения иерархии функциональных диаграмм, схематически
представляющих
взаимосвязи нескольких
функций. Каждый
блок
такой
диаграммы соответствует некоторой функции, для которой должны быть
определены: исходные данные, результаты, управляющая информация и механизмы ее осуществления - человек или технические средства.
Все перечисленные выше связи функции представляются дугами, причем
тип связи и ее направление строго регламентированы. Дуги, изображающие
27
каждый тип связей, должны подходить к блоку с определенной стороны, а
направление связи должно указываться стрелкой в конце дуги.
Физически дуги исходных данных, результатов и управления представляют
собой наборы данных, передаваемые между функциями. Дуги, определяющие
механизм выполнения функции, в основном используются при описании
спецификаций сложных информационных систем, которые включают как
автоматизированные, так и ручные операции. Блоки и дуги маркируются текстами
на естественном языке.
Построение иерархии функциональных диаграмм ведется поэтапно с
увеличением уровня детализации: диаграммы каждого следующего уровня
уточняют структуру родительского блока. Построение модели начинают с
единственного блока, для которого определяют исходные данные, результаты,
управление и механизмы реализации. Затем он последовательно детализируется с
использованием метода пошаговой детализации. При этом рекомендуется каждую
функцию представлять не более чем 3—7-ю блоками. Во всех случаях каждая
подфункция может использовать или продуцировать только те элементы данных,
которые использованы или продуцируются родительской функцией, причем
никакие элементы не могут быть опущены, что обеспечивает непротиворечивость
построенной модели [7, с. 78-81].
Функциональная диаграмма в общем виде представлена на рисунке 1.
Рисунок 1 – Функциональная диаграмма в общем виде
28
Данная диаграмма описывает взаимодействие с разрабатываемой системой
в общем виде. В качестве механизмов управления выступают потребности
пользователя, так как именно от них зависит поведение разрабатываемого
приложения, а также инструкция по использованию приложения. На вход в
приложение поступают различные данные, вводимые пользователем — это могут
быть как данные студента для входа в его личный кабинет, так и фамилия
преподавателя, если студент хочет получить информацию о таком преподавателе.
Также выбранные пользователем пункты меню являются входными данными. В
качестве механизмов, осуществляющих работу с приложением, выступают
пользователи и само приложение, а точнее реакция приложения на различные
действия пользователей.
Детализируем представленную диаграмму, выделив основные функции
приложения. Функциональная диаграмма после детализации функции выдачи
расписания представлена на рисунке 2.
Рисунок 2 – Функциональная диаграмма с детализацией функции выдачи
расписания
29
На данной диаграмме показано, что для получения расписания для группы,
преподавателя или аудитории пользователю придётся пройти различные этапы.
Этапы выбора нужных пунктов меню приложения-бота являются входными
данными и представлены на рисунке. На выходе пользователь получает
расписание для выбранной им категории. В качестве механизмов осуществления
данных функций выступают пользователь и само приложение.
Функциональная
диаграмма
после
детализации
функции
просмотра
успеваемости представлена на рисунке 3.
Рисунок 3 – Функциональная диаграмма, детализирующая функцию выдачи
успеваемости
На данной диаграмме видно, что пользователю достаточно ввести свои
данные для входа в личный кабинет и ему будут доступны три различных
30
функции: просмотр текущей аттестации, просмотр промежуточной аттестации с
выбором нужного семестра и просмотр итоговой аттестации. В случае
некорректного ввода хотя бы одного из параметров, а именно: имени, фамилии,
даты рождения или номера зачётной книжки студента, - пользователь получит
сообщение о том, что такой студент не найден. Функциональная диаграмма после
детализации функции просмотра информации о преподавателе представлена на
рисунке 4.
Рисунок 4 – Функциональная диаграмма, детализирующая функцию выдачи
информации о преподавателе
Данная диаграмма демонстрирует два пути получения информации о
нужном пользователю преподавателе. Пользователь может искать преподавателя
по кафедре, в этом случае ему придётся пройти этапы выбора факультета,
кафедры и фамилии, как и в случае с получением расписания для преподавателя.
Также существует способ получения информации с помощью ввода фамилии
искомого преподавателя. В случае некорректного ввода пользователь получит
сообщение об ошибке, в противном случае – искомую информацию.
31
2.1.2 Диаграмма потоков данных
Диаграммы потоков данных позволяют специфицировать как функции
разрабатываемого программного обеспечения, так и обрабатываемые им данные.
При использовании этой модели систему представляют в виде иерархии диаграмм
потоков
данных,
описывающих
асинхронный
процесс
преобразования
информации с момента ввода в систему до выдачи пользователю. На каждом
следующем уровне иерархии происходит уточнение процессов, пока очередной
процесс не будет признан элементарным.
В основе модели лежат понятия внешней сущности, процесса, хранилища
(накопителя) данных и потока данных.
Внешняя сущность — материальный объект или физическое лицо, выступающие в качестве источников или приемников информации, например,
заказчики, персонал, поставщики, клиенты, банк и т. п.
Процесс - преобразование входных потоков данных в выходные в соответствии с определенным алгоритмом. Каждый процесс в системе имеет свой
номер и связан с исполнителем, который осуществляет данное преобразование.
Как в случае функциональных диаграмм, физически преобразование может
осуществляться компьютерами, вручную или специальными устройствами. На
верхних уровнях иерархии, когда процессы еще не определены, вместо понятия
«процесс» используют понятия «система» и «подсистема», которые обозначают
соответственно систему в целом или ее функционально законченную часть.
Хранилище данных — абстрактное устройство для хранения информации.
Тип устройства и способы помещения, извлечения и хранения для такого
устройства не детализируют. Физически это может быть база данных, файл,
таблица в оперативной памяти, картотека на бумаге и т. п.
Поток данных — процесс передачи некоторой информации от источника к
приемнику. Физически процесс передачи информации может происходить по
кабелям под управлением программы или программной системы или вручную при
участии устройств или людей вне проектируемой системы.
32
Таким образом, диаграмма иллюстрирует как потоки данных, порожденные
некоторыми внешними сущностями, трансформируются соответствующими
процессами
(или
подсистемами),
сохраняются
накопителями
данных
и
передаются другим внешним сущностям - приемникам информации. В результате
мы получаем сетевую модель хранения/обработки информации.
Для изображения диаграмм потоков данных традиционно используют два
вида нотаций: нотации Йордана и Гейна-Сарсона [7, с. 81-82]. В данной работе мы
будет спросить диаграмму в нотации Гейна-Сарсона.
Диаграмма потоков данных представлена на рисунке 5.
Рисунок 5 – Диаграмма потоков данных для разрабатываемого приложения
Данная диаграмма показывает, какими данными пользователь обменивается
с
разрабатываемым
приложением.
Выбирая
различные
пункты
меню,
пользователь нажимает на кнопки, о чём приложение получает уведомление и
обрабатывает нажатие, выдавая пункты меню иди нужную пользователю
информацию: расписание, успеваемости или информацию о преподавателе. Для
того чтобы получить необходимую пользователю информацию приложение
делает запрос к web-серверу. Ответ от сервера приходит в формате JSON-объекта,
который в дальнейшем разбирается и отправляется пользователю либо в форме
меню, либо в форме текстового сообщения, например, в случае расписания.
33
2.2 Разработка поведенческих спецификаций
В качестве примера поведенческой спецификации разрабатываемого
программного обеспечения мы рассмотрим диаграмму переходов состояний.
Диаграмма
переходов
состояний
является
графической
формой
предоставления конечного автомата – математической абстракции, используемой
для моделирования детерминированного поведения технических объектов или
объектов реального мира.
На этапе анализа требований и определения спецификаций диаграмма
переходов состояний демонстрирует поведение разрабатываемой программной
системы при получении управляющих воздействий. Под управляющими
воздействиями или сигналами в данном случае понимают управляющую
информацию,
получаемую
воздействиями
считают
подключенных
к
системой
команды
компьютерной
извне.
Например,
пользователя
системе.
и
Получив
управляющими
сигналы
такое
датчиков,
управляющее
воздействие, разрабатываемая система должна выполнить определенные действия
и или остаться в том же состоянии, или перейти в другое состояние
взаимодействия с внешней средой.
Для
построения
диаграммы
переходов
состояний
необходимо
в
соответствии с теорией конечных автоматов определить: основные состояния,
управляющие воздействия (или условия перехода), выполняемые действия и
возможные варианты переходов из одного состояния в другое.
Если программная система в процессе функционирования активно не
взаимодействует с окружающей средой (пользователем или датчиками),
например,
использует
примитивный
интерфейс
и
выполняет
некоторые
вычисления по заданным исходным данным, то диаграмма переходов состояний
обычно интереса не представляет. В этом случае она демонстрирует только
последовательно выполняемые переходы: из исходного состояния в состояние
ввода данных, затем после выполнения вычислений – в состояние вывода и,
наконец, в состояние завершения работы. [7, с. 75]
34
Представим в виде диаграмм переходов состояний некоторые функции
разрабатываемого приложения.
Диаграмма переходов состояний для функции просмотра расписания
группы проиллюстрирована на рисунке 6.
Рисунок 6 – Диаграмма переходов состояний для функции просмотра расписания
группы
Взаимодействуя с приложением, пользователь выбирает различные пункты
меню, посылая приложению уведомление о нажатии той или иной кнопки. В
ответ приложение посылает сообщение, которое содержит меню с кнопками для
дальнейшего выбора параметров. В случае с получением расписания для группы
пользователь проходит процедуру выбора факультета, курса, а затем нужной ему
группы. После выбора группы пользователь получает от приложения расписание
для группы в формате текстового сообщения. Аналогично происходит при
выполнении функции просмотра расписания преподавателя и просмотра
расписания аудитории.
35
Диаграмма переходов состояний для функции просмотра расписания
преподавателя проиллюстрирована на рисунке 7.
Рисунок 7 – Диаграмма переходов состояний для функции просмотра расписания
преподавателя
Диаграмма переходов состояний для функции просмотра расписания
аудитории представлена на рисунке 8.
Рисунок 8 – Диаграмма переходов состояний для функции просмотра расписания
аудитории
Для просмотра успеваемости пользователю сперва необходимо войти в его
личный кабинет. Для этого пользователь передаёт приложению данные для входа:
36
номер зачётной книжки, фамилию, имя и дату рождения. В случае ввода
корректных данных, приложение выдаёт пользователю меню, в котором
пользователь выбирает тип необходимой аттестации для вывода. В ответ
приложение отправляет пользователю запрашиваемую информацию в формате
текстового сообщения.
Диаграмма переходов состояний для функции просмотра успеваемости
проиллюстрирована на рисунке 9.
Рисунок 9 – Диаграмма переходов состояний для функции просмотра
успеваемости
Рассмотрим также функцию получения информации о преподавателе с
помощью поиска по кафедре. В этом случае пользователю необходимо, как и в
случае с получением расписания для преподавателя, поэтапно выбрать нужные
ему пункты меню, такие как: факультет, кафедра и фамилия. Выбрав нужного
37
преподавателя из списка, пользователь получает сообщение с контактной
информацией преподавателя, а также с его фотографией.
Диаграмма переходов состояний для функции просмотра информации о
преподавателе с помощью поиска по кафедре проиллюстрирована на рисунке 10.
Рисунок 10 – Диаграмма переходов состояний для функции просмотра
информации о преподавателе с помощью поиска по кафедре
2.3 Разработка архитектуры программного обеспечения
Архитектура программного обеспечения — совокупность важнейших
решений об организации программной системы. Архитектура включает:
−
выбор структурных элементов и их интерфейсов, с помощью которых
составлена система, а также их поведения в рамках сотрудничества структурных
элементов;
−
соединение выбранных элементов структуры и поведения во всё более
крупные системы;
−
архитектурный стиль, который направляет всю организацию — все
элементы, их интерфейсы, их сотрудничество и их соединение [9].
Основное, на что необходимо обратить внимание при проектировании
архитектуры – это на положение разрабатываемого программного обеспечения в
38
общей системе. Схематичная иллюстрация положения разрабатываемой системы
в общей системе представлена на рисунке 11.
Рисунок 11 – Положение разрабатываемой системы в общей системе
Как показано на рисунке 11, разрабатываемое приложение выполняет роль
посредника, который находится между сайтом университета и мессенджером
Telegram. Стрелки показывают механизмы взаимодействия между элементами
схемы. Рассмотрим подробнее как взаимодействую компоненты данной системы.
Сайт университета и разрабатываемое приложение. Приложение посылает
HTTP-запросы (как GET, так и POST) на сайт университета в целях добычи
нужной информации. Информация с сайта может вернуться в виде массива JSONобъектов, а также в виде HTML-страницы, которую приложение разбирает на
HTML-теги и “вытаскивает” необходимую информацию.
Разрабатываемое приложение и мессенджер Telegram. Взаимодействие
между этими компонентами происходит с помощью Bot API Telegram - HTTPинтерфейса для работы с ботами в Telegram. Приложение посылает с помощью
данного API сообщения в
Telegram, реагируя
на различные действия
пользователя: нажатие на кнопки меню или ввод сообщения. Действия
пользователя фиксируется с помощью API Telegram.
Telegram и его пользователи взаимодействуют друг с другом путём
отправки сообщений.
39
2.4 Проектирование структуры программного обеспечения
Рассмотрим основные модули, из которых будет состоять разрабатываемое
программное обеспечение.
1) Модуль работы с сайтом. Данный модуль содержит функции,
отвечающие за работу с сайтом. В модуле происходит запрос на сайт
университета, в результате которого обратно возвращается JSON-объект. Также
модуль содержит функцию по формированию опции ответа приложения-бота.
Опции – это дополнение к сообщению, которое приложение-бот посылает
пользователь, реагируя на его действия. Опции представляют из себя встроенную
клавиатуру, которая формируется на основе полей полученного массива JSONобъектов. Также модуль содержит функцию, которая позволяет задать свои
настройки форматирования встроенной клавиатуры, а именно задать количество
столбцов кнопок;
2) Модуль работы с расписанием. Данный модуль содержит функции по
работе с расписанием, а именно функции получения и выдачи расписания в виде
текстового сообщения. Данный модуль контролирует корректность выдачи
сообщения, имея функцию, которая разделяет сообщение на части, если оно
превышает допустимый размер;
3) Модуль работы с аттестацией. Данный модуль содержит функции по
работе с аттестации, а именно функцию получения CSRF для входа в личный
кабинет студента, функцию авторизации в личный кабинет студента, а также
функцию выдачи всех видов аттестации;
4) Модуль работы с информацией о преподавателях. Данный модуль
содержит функции по работе с информацией о преподавателях. Основная
функция модуля занимается отбором нужной информации с сайта, а именно
контактной информации и фотографии преподавателя;
5) Модуль, отвечающий за формирование меню. Данный модуль содержит
функции по формированию меню приложения на различных этапах работы с
данным приложением.
40
Данные модули были выделены в соответствии с основными функциями
разрабатываемого приложения.
2.5 Проектирование структур данных
Структурой данных называют совокупность правил и ограничений, которые
отражают связи, существующие между отдельными частями (элементами)
данных.
Различают абстрактные структуры данных, используемые для уточнения
связей между элементами, и конкретные структуры, используемые для
представления данных в программах.
Все абстрактные структуры данных можно разделить на три группы:
структуры, элементы которых не связаны между собой, структуры с неявными
связями элементов - таблицы и структуры, связь элементов которых указывается
явно - графы.
В первую группу входят множества и кортежи. Наиболее существенная
характеристика элемента данных в этих структурах — его принадлежность
некоторому набору, т.е. отношение вхождения. Данные абстрактные структуры
используют,
если
никакие
другие
отношения
элементов
не
являются
существенными для описываемых объектов.
Ко второй группе относят векторы, матрицы, массивы (многомерные),
записи, строки, а также таблицы, включающие перечисленные структуры в
качестве частей. Использование этих абстрактных типов может означать, что
существенным является не только вхождение элемента данных в некоторую
структуру, но и их порядок, а также отношения иерархии структур, т. е. вхождение структуры в структуру более высокой степени общности.
В тех случаях, когда существенны связи элементов данных между собой, в
качестве модели структур данных используют графы [7, с. 89-90].
В данной работе мы будем использовать такую структуру данных как
объект.
Объекты в JavaScript сочетают в себе два важных функционала:
41
1)
Ассоциативный массив: структура, пригодная для хранения любых
данных;
2)
Языковые
возможности
для
объектно-ориентированного
программирования.
В JavaScript объект — это самостоятельная единица, имеющая свойства и
определенный тип. Сравним, например, с чашкой. У чашки есть цвет, форма, вес,
материал, из которого она сделана, и т.д. Точно так же, объекты JavaScript имеют
свойства, которые определяют их характеристики.
В JavaScript свойства объекта с ассоциированы с самим объектом. Свойство
объекта можно понимать, как переменную, закрепленную за объектом. Свойства
объекта, в сущности, являются теми же самыми переменными JavaScript, за тем
исключением,
что
они
закреплены
за
объектом.
Они
определяют его
характеристики. Получить доступ к свойству объекта можно с помощью точечной
записи: objectName.propertyName.
В данной работе мы будем работать с объектом “user”. Рассмотрим
подробнее в каких ситуациях этот объект используется, а также его свойства.
Когда пользователь отправляет приложению-боту какое-либо сообщение
или нажимает на кнопку, бот должен определить, в какой из чатов ему
необходимо ответить. Для этого при получении какого-либо сообщения,
приложение определяет идентификатор текущего чата с пользователем, а далее
проверяет, существует ли пользователь с таким идентификатором чата в
глобальном массиве пользователей или нет. Если такого пользователя не
существует, то пользователь создаётся и заносится в глобальный массив
пользователей users по индексу, равному идентификатору чата.
При создании пользователя заполняются следующие поля:
−
chat_id – в данное поле заносится значение идентификатора чата с
пользователем;
−
state – состояние пользователя, по умолчанию null;
−
cookie – в данное поле заносятся cookie пользователя;
42
−
student_book_id – номер зачётной книжки студента, по умолчанию
−
first_name – имя студента, по умолчанию null;
−
last_name – фамилия студента, по умолчанию null;
−
birthday – дата рождения студента, по умолчанию null;
−
succsess_login – поле, позволяющее проверить успешность входа в
null;
личный кабинет пользователя, по умолчанию null;
−
default_group – поле, в котором ставится метка о том, что группа по
умолчанию установлена, по умолчанию null;
−
default_prep - поле, в котором ставится метка о том, что преподаватель
по умолчанию установлен, по умолчанию null;
−
group – поле, в которое записывается идентификатор группы,
установленной по умолчанию, по умолчанию null;
−
prep - поле, в которое записывается идентификатор преподавателя,
установленного по умолчанию, по умолчанию null.
Свойство
state
меняется
в
процессе
использования
приложения
пользователем. Например, когда пользователь вводит данные для входа в личный
кабинет студента, он поочерёдно вводит номер зачётной книжки, имя, фамилию и
дату
рождения.
Соответственно,
состояние
пользователя
меняется
от
“get_StudentBookId” до “get_birthday”, а после завершения ввода данных
пользователем сбрасывается в null.
Ещё один пример работы с объектами во время функционирования
приложения – это работа с JSON-объектами. Когда пользователь выбирает те или
иные пункты меню при просмотре расписания, приложение обращается к
различным ресурсам web-сервера сайта. В качестве ответа от web-сервера
выступают массив JSON-объектов. В качестве примера рассмотрим массив JSONобъектов, получаемый при выборе просмотра расписания для студента. В этом
случае приложение получает следующий массив JSON-объектов с информацией о
факультетах: [ { idDivision: 26, titleDivision: 'Академия физической культуры и
43
спорта', shortTitle: 'ФКС' }, { idDivision: 5, titleDivision: 'Архитектурностроительный институт', shortTitle: 'АСИ' }, … ].
2.6 Разработка алгоритмов
Рассмотрим некоторые алгоритмы, спроектированные при разработке
данного программного обеспечения. Представим результаты разработки в виде
блок-схем.
1) Алгоритм выдачи расписания (рис. 12);
Рисунок 12 – Схема алгоритма выдачи расписания, лист 1
44
Рисунок 12, лист 2
2) Алгоритм получения опций к сообщению. Блок-схема к данному
алгоритму представлена на рисунке 13;
Рисунок 13 – Схема алгоритма получения опций к сообщению
45
3)
Алгоритм
создания
встроенной
клавиатуры
с
фиксированным
количеством столбцов. Блок-схема к данному алгоритму представлена на рисунке
14;
Рисунок 14 – Схема алгоритма создания встроенной клавиатуры с
фиксированным количеством столбцов
4) Алгоритм получения информации об успеваемости. Блок-схема к
данному алгоритму представлена на рисунке 15;
46
Рисунок 15 – Схема алгоритма получения успеваемости
5) Алгоритм получения информации о преподавателе. Блок-схема к
данному алгоритму представлена на рисунке 16.
47
Рисунок 16 – Схема алгоритма получения информации о преподавателе
48
2.7 Проектирование интерфейса
Представим будущий интерфейс разрабатываемого приложения в виде
транзитивной сети диалога с пользователем.
Использование транзитивных сетей для проектирования логики диалога
является самым простым из способов организации диалога пользователя с
приложениями, т.к. данный способ является графическим, что добавляет удобство
чтения диалога.
Логика диалога отображается в виде направленного графа, у которого
вершины представляют состояния системы, дуги – переходы между этими
состояниями. Также вводится правило именования дуг для транзитивных сетей:
1) Сверху дуга именуется согласно входным сигналам или обратной
семантической связи прикладного интерфейса (либо то, что делает пользователь
приложений, либо то, что делает ОС или другие приложения, которые могут
влиять на работу логики диалога (может не отображаться, если действие системы
или приложения не вызвано действием пользователя или ОС – дуга
подписывается только снизу);
2) Снизу дуга именуется согласно действиям, которое должно выполнить
приложение при переходе из одного состояния в другое в ответ на действие
пользователя или ОС;
3) Имена состояний должны отображать статику приложения в конкретном
состоянии.
Транзитивная сеть логики диалога с пользователем представлена в
приложении А.
49
3 РЕАЛИЗАЦИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
3.1 Языковые и инструментальные средства разработки
Приложение, реализованное в данной работе, написано на языке Java Script
с использованием платформу Node.js. Именно данная платформа позволяет
превратить язык JavaScript из узкоспециализированного языка в язык общего
назначения. Рассмотрим подробнее, как работает Node.js.
Node.js — это проект с открытым исходным кодом, разработанный, чтобы
помочь создавать программы на JavaScript, которые могли бы взаимодействовать
с сетями, файловыми системами или другими I/O источниками ввода/вывода.
Node.js создан чтобы быть простым и, следовательно, относительно лёгким
для понимания и использования и полезен для программ, предусматривающих
операции ввода/вывода, которые должны быть быстрыми и выдерживать большое
количество соединений.
На более низком уровне Node.js можно описать как инструмент для
написания программ двух типов:
− сетевых программ, использующих веб-протоколы: HTTP, TCP, UDP,
DNS и SSL;
− программ, производящих чтение и запись данных в/из файловых систем
или локальных процессов/памяти [8].
Node.js
добавляет
возможность
JavaScript
взаимодействовать
с
устройствами ввода-вывода через свой API (написанный на C++), а также
подключать другие внешние библиотеки, написанные на разных языках,
обеспечивая вызовы к ним из JavaScript-кода.
Node.js применяется преимущественно на сервере, выполняя роль вебсервера, но есть возможность разрабатывать на Node.js и десктопные оконные
приложения. Node.js выполняет операции ввода/вывода асинхронно, что
позволяет ему проводить большое количество операций одновременно [2].
50
Таким образом, В основе Node.js лежит событийно-ориентированное и
асинхронное
(или
реактивное)
программирование
с
неблокирующим
вводом/выводом.
Ещё одна важная особенность платформы Node.js – это встроенный
менеджер (установщик) пакетов или модулей, называемый npm (Node.js Package
Manager). Установка пакетов производится при помощи команды npm install
<packagename>.
Подключение модулей происходит с помощью вызова функции require,
которой нужно передать путь к файлу, например: var <имя переменной> =
require('./<путь к файлу модуля>). Данный код подключает модуль и делает его
доступным через заданную переменную.
В зависимости от того, какой параметр передан в функцию require, будет
отличатся алгоритм подключения модуля. Так что давайте посмотрим на
принципы подключения модулей в Node.js. Вместе с Node.js поставляется
несколько встроенных модулей, например, модули “http”, “stream”, “errors” и
многие другие. Встроенные модули имеют приоритет над всеми остальными. Так,
к примеру, require('http') всегда вернет встроенный модуль, даже если будет
сторонний модуль с таким названием или файл с таким именем.
Если передано название модуля и он не является встроенным, тогда идет
подключение модуля из папки node_modules. В данной папке находятся все
модули, которые добавлены с помощью менеджера пакетов npm. Чтобы
подключить модуль, который находится в node_modules достаточно указать его
название.
Рассмотрим подробнее, какие встроенные и сторонние модули (пакеты)
использовались в разрабатываемом приложении.
1) Пакет “request”. Данный пакет позволяет получать ресурсы из внешних
источников с помощью HTTP-запросов. С помощью данного модуля приложение
обращалось к web-сайту университета, забирая оттуда нужную информацию;
2) Пакет “encoding”. Данный пакет позволяет перевести строку из одной
кодировки в другую;
51
3) Пакет “cheerio”. Cheerio — это один из самых быстрых html-парсеров и
самый быстрый парсер на платформе node.js. Он создаёт DOM-дерево страницы,
и предоставляет удобный jQuery-like интерфейс для работы с этим деревом.
Данный пакет использовался в приложении для поиска отдельных элементов
html-страницы, а также позволял подготовить часть html-страницы для загрузки в
модуль “cheerio-tableparser”;
4) Пакет “cheerio-tableparser”. Данный пакет работает в связке с модулем
“cheerio” и позволяет представить таблицу, расположенную внутри тега <table>, в
виде
массива.
В
приложении
этот
модуль
использовался
при
выводе
успеваемости;
5) Пакет “fs”. Встроенный пакет, позволяющий работать с файлами;
6) Пакет “node-telegram-bot-api”. Данный пакет позволяет работать с Bot
API Telegram. Для использования данного пакета необходимо указать токен
Telegram-бота. Основные функции, использованные из данного пакета в
приложении – это обработка сообщений от пользователей и обработка нажатия
пользователем на ту или иную inline-кнопку меню;
7) Модуль “EncodingHelper”. Данный модуль был реализован вручную и
добавлен в приложение с помощью вызова функции require, в которую в качестве
параметра отправлялся путь к файлу модуля. Данный модуль позволяет
представить строку в кодировке “Windows-1251” с добавлением символа “%”.
Используется данный модуль при отправке формы авторизации в личный кабинет
студента.
3.2 Реализация модулей программного обеспечения
Рассмотрим подробно основные блоки кода программного обеспечения,
основные функции этих блоков (модулей) и их реализацию.
1) Модуль работы с сайтом. Данный модуль находится в отдельном файле –
MakeRequest.js и подключается в программу с помощью функции require, в
которую в качестве параметра передаётся путь к данному модулю. Основные
функции модуля:
52
a) MakeRequestAndGetOptions. Функция принимает 6 параметров:
URL-адрес страницы, куда будет производиться запрос; поле JSON-объекта,
содержащее идентификатор; поле JSON-объекта, содержащее необходимую
информацию для вывода на кнопки меню; первая половина строки, которая
будет записана в callback_data кнопки меню; количество столбцов кнопок
меню; функция обратной связи.
Внутри функции происходит запрос на сайт университета, в качестве
ответа возвращается массив JSON-объектов. Далее некоторые поля JSONобъекта, а именно поля, которые будут отображаться на кнопках меню и
поля, содержащие идентификаторы, заносятся в соответствующие массивы.
После
этого
формируются
опции
будущего
ответного
сообщения
приложения путём вызова функции CreateKeyboard, которая будет
рассмотрена далее. Далее сформированные опции передаются в качестве
параметра в функцию обратного вызова;
б) CreateKeyboard. Функция принимает 4 параметра: массив,
содержащий данные для вывода на клавиатуру; первая половина строки,
которая будет записана в callback_data кнопки меню; количество столбцов
кнопок меню, массив с идентификаторами.
Внутри функции происходит формирование матрицы будущих кнопок
меню приложения. Каждая кнопка представляет собой объект, имеющий
два поля: text и callback_data. В поле text заносится информация из массива
данных для вывода на клавиатуру, а поле callback_data формируется из двух
частей: первая часть – второй параметр функции, а вторая часть –
идентификатор, взятый из переданного массива. Функция возвращает опции
сообщения, причём в поле inline_keyboard заносится сформированная
матрица из кнопок.
Код данного модуля находится в приложении Б.
2) Модуль работы с расписанием. Основные функции модуля:
а) getMonday. Функция возвращает отметку времени (timestamp) в
миллисекундах, соответствующую началу недели (понедельнику);
53
б) PrintSchedule. Функция принимает 5 параметров: URL-адрес
страницы, на которую будет осуществляться запрос; тип выдаваемого
расписания (для группы, преподавателя или аудитории); параметр, который
может быть установлен по умолчанию в формате строки; callback_data
кнопки, позволяющей установить параметр по умолчанию.
Функция делает запрос на сайт университета, в результате которого
возвращается массив JSON-объектов. Далее данный массив передаётся в
функцию GetSchedule, которая будет рассмотрена ниже, а результат этой
функции, а именно строка, содержащая расписание, отравляется в виде
текстового сообщения в чат пользователю. Если сообщение превышает
предел допустимого количества символов (4096 символов), то оно делится
на несколько частей, а потом уже отправляется пользователю;
в) GetSchedule. Функция принимает 3 параметра: массив JSONобъектов; тип выдаваемого расписания (для группы, преподавателя или
аудитории); текущий день недели.
В данной функции разбирается массив JSON-объектов, выбираются
некоторые нужные поля объектов (например, поле, содержащее номер пары,
ФИО преподавателя, название предмета и др.) и формируется строка с
расписанием в понятном и информативном виде для пользователя. Также,
если пользователь используется команды для быстрого получения
расписания, такие как “Расписание на сегодня” или “Расписание на завтра”,
то в данную функцию передаётся третий параметр – текущий день недели, и
расписание формируется только на этот день недели.
Код данного модуля находится в приложении В.
3) Модуль работы с аттестацией. Основные функции модуля:
а) GetCSRF. Функция, которая делает запрос на сайт университета,
разбирает полученную html-страницу и с помощью модуля cheerio забирает
CSRF-значение, которое в дальнейшем используется для входа в личный
кабинет студента, а также в качестве параметра для функции обратного
вызова.
54
б) GetAttestation. Функция, внутри которой на основе данных,
введённых пользователем (номер зачётной книжки, фамилия, имя и дата
рождения)
заполняется
отправляется
на
сайт
университета
форма
авторизации. Одно из полей данной формы – CSRF, данные для которого
возвращает функция GetCSRF. Форма отправляется путём запроса с
указанием метода отправки POST. В случае успешной авторизации
приложение отправляет пользователю меню для дальнейшего выбора типа
просматриваемой информации, в противном случае – сообщение об ошибке.
в) PrintAttestation. Функция принимает в качестве параметра тело
(html-страницу) ответа, полученного в результате запроса на сайт
университета при выборе пользователем любого из пункта меню о типах
аттестации.
Внутри
функции
с
помощью
модуля
cheerio
html-страница
разбирается на hml-теги. Таблица, располагающаяся внутри тега “<table>”
помещается в функцию cheerioTableParser (из одноимённого подключённого
модуля). Данная функция преобразует таблицу в матрицу строк. В
результате прохождения по матрице формируется строка, содержащая
нужную
пользователю
информацию
об
аттестации
(текущей,
промежуточное или итоговой). Строка передаётся в качестве параметра в
функцию обратного вызова.
Код данного модуля находится в приложении Г.
4) Модуль работы с информацией о преподавателе. Основные функции
модуля:
а) GetPrepInfo. Данная функция вызывается при поиске информации о
преподавателе по его фамилии. Принимает параметр – текстовое сообщение
с фамилией, введённой пользователем. Функция обращается на сайт
университета, а именно на раздел сайта, содержащий алфавитный список
всех
преподавателем
университета.
Далее
производятся
некоторые
манипуляции с фамилией, введённой пользователем: заменяются любые
встреченные буквы “ё” на “е”, также регистр сообщения сбрасывается в
55
низкий, а регистр первой буквы сообщения поднимается. Это производится
для того, чтобы фамилия, введённая пользователем, была доступна для
сравнения. Далее с помощью модуля cheerio полученная в ответе htmlстраница разбирается, и введённая фамилия в цикле сравнивается со
значениями, находящимися внутри определённых тегов html-страницы.
Если совпадение единственное, то вызывается функция PrintPrepInfo,
которая
печатает
необходимую
пользователю
информацию.
Если
преподаватель с введённой фамилией несколько, то приложение отправляет
пользователю меню для выбора нужного ему преподавателя.
б) PrintPrepInfo. Функция в качестве параметра принимает URL-адрес
страницы, на которую будет произведён запрос. Далее html-страница
разбирается
с
контактная
информация
изображением
помощью
модуля
о
cheerio.
преподавателе,
преподавателя.
Выбирается
а
Пользователю
также
сперва
необходимая
URL-адрес
с
отправляется
изображение, а затем, следующим сообщением контактная информация о
преподавателе.
Код данного модуля находится в приложении Д.
3.3 Реализация интерфейса пользователя
Рассмотрим
подробнее
способы
реализации
интерфейса
для
разрабатываемого приложения.
По своей сути интерфейс разрабатываемого приложения – это окно
мессенджера Telegram, внутри которого находятся поле для ввода пользователем
сообщения и область, где пользователь получает сообщения от приложения-бота.
Данная область может содержать как текстовое сообщение или фотографию, так и
сообщение, имеющее различные опции. Как правило, опции – это клавиатура,
которая прилагается к полученному сообщению. Клавиатура может быть
встроенная, так называемая inline-клавиатура, в этом случае одна или несколько
встроенных кнопок прикрепляются в конце сообщения. Также клавиатура может
быть выпадающая, в этом случае одна или несколько кнопок появляются ниже
56
поля для ввода сообщений пользователем. Отличие состоит в том, что при
нажатии на inline-кнопку данные передаются в формате callback_data, которые
далее обрабатываются специальной функцией. А в случае нажатия на кнопку из
выпадающей клавиатуры данные передаются в формате текстового сообщения,
соответствующего надписи на нажатой кнопке.
В данной выпускной работе пользователь будет работать с приложением,
взаимодействуя с inline-кнопками встроенной клавиатуры.
Для создания интерфейса взаимодействия с пользователем API Telegram
предоставляет следующие объекты [4, 5]:
1) ReplyKeyboardMarkup. Этот объект представляет клавиатуру с опциями
ответа;
2) KeyboardButton. Этот объект представляет одну кнопку в клавиатуре
ответа. Для обычных текстовых кнопок этот объект может быть заменён на
строку, содержащую текст на кнопке;
3) ReplyKeyboardHide. После получения сообщения с этим объектом,
приложение Telegram свернёт клавиатуру бота и отобразит стандартную
клавиатуру
устройства
(с
буквами).
По
умолчанию
клавиатуры
бота
отображаются до тех пор, пока не будет принудительно отправлена новая или
скрыта старая клавиатура. Исключение составляют одноразовые клавиатуры,
которые скрываются сразу после нажатия на какую-либо кнопку;
4) InlineKeyboardMarkup. Этот объект представляет встроенную клавиатуру,
которая появляется под соответствующим сообщением;
5) InlineKeyboardButton. Этот объект представляет одну кнопку встроенной
клавиатуры. Обязательно должно быть задействовано одно опциональное поле.
Разрабатываемое
приложение
поддерживает
два
последних
из
вышеуказанных объектов. Это говорит о том, что пользователь взаимодействует с
приложением, используя inline-клавиатуру. Также приложение поддерживает
навигацию по разделам, которая реализована с помощью кнопок “Назад” и “В
начало”. Нажимая кнопку “Назад”, пользователь попадает на предыдущий этап
57
работы с приложением, а кнопка “В начало” переносит пользователя к стартовому
меню приложения.
Рассмотрим интерфейс приложения на различных этапах работы с
приложением. На рисунке 17 представлен стартовый интерфейс приложения.
Рисунок 17 – Интерфейс программы до начала работы
Рисунок 18 демонстрирует стартовое меню приложения.
Рисунок 18 – Стартовое меню приложения
Далее рассмотрим интерфейс приложения при нажатии на пункт
“Расписание”. Он представлен на рисунке 19.
58
Рисунок 19 – Интерфейс приложения при нажатии на пункт “Расписание”
3.4 Примеры работы программного обеспечения
Рассмотрим некоторые примеры работы разработанного программного
обеспечения на примере различный ситуаций:
1) Пользователь хочет получить расписание группы. В этом случае
пользователю придётся пройти процедуру поэтапного выбора необходимых ему
параметров: факультета, курса и группы. В случае установки группы в качестве
группы по умолчанию пользователю открываются новые функции приложения,
например, расписание только на сегодня или на завтра, а также расписание на
неделю.
Пользователь
также
может
сменить
группу
по
умолчанию.
Последовательность действий в этой ситуации представлена на рисунке 20;
Рисунок 20 – Процесс получения расписания группы
59
Меню приложения после установки группы по умолчанию представлено на
рисунке 21.
Рисунок 21 – Меню приложения после установки группы по умолчанию
2) Пользователь хочет получить расписание преподавателя. В этом случае
пользователю придётся пройти процедуру поэтапного выбора необходимых ему
параметров: факультета, кафедры и фамилии. В случае установки преподавателя в
качестве преподавателя по умолчанию пользователю открываются новые
функции приложения, например, расписание только на сегодня или на завтра, а
также расписание на неделю. Пользователь также может сменить преподавателя
по умолчанию. Последовательность действий в этой ситуации представлена на
рисунке 22;
Рисунок 22 – Процесс просмотра расписания преподавателя
60
Меню
приложения
после
установки
преподавателя
по
умолчанию
представлено на рисунке аналогично меню при установке группы по умолчанию.
3) Пользователь хочет получить расписание аудитории. В этом случае
пользователю придётся пройти процедуру поэтапного выбора необходимых ему
параметров: корпуса и номера аудитории. Выбрать аудиторию по умолчанию
пользовать не может. Последовательность действий в этой ситуации представлена
на рисунке 23;
Рисунок 23 – Процесс просмотра расписания аудитории
61
4) Пользователь просматривает успеваемость. В этом случае пользователю
необходимо ввести данные для входа в его личный кабинет. В случае корректного
ввода приложение пошлёт пользователю меню для дальнейшего выбора типа
получаемой информации: текущая аттестация, промежуточная аттестация или
итоговая аттестация. Процесс входа в личный кабинет представлен на рисунке 24.
Меню после успешного входа в личный кабинет представлено на рисунке 25;
Рисунок 24 – Процесс входа в личный кабинет пользователя
Рисунок 25 – Меню приложения после успешного входа в личный кабинет
студента
62
Пример отображения текущей аттестации представлен на рисунке 26.
Рисунок 26 – Отображение текущей аттестации студента
В случае некорректного ввода данных для входа в личный кабинет,
пользователь получит следующее сообщение (рис. 27).
Рисунок 27 – Сообщение об ошибке при вводе данных для входа в личный
кабинет студента
5) Пользователь получает информацию о преподавателе. У пользователя
есть два варианта получения информации о преподавателе. Рассмотрим и
проиллюстрируем каждый из них.
а) Получение информации о преподавателе с помощью поиска по
кафедре. Процесс аналогичный получению расписания о преподавателе.
Данный способ представлен на рисунке 28;
63
Рисунок 28 – Процесс получения информации о преподавателе с помощью поиска
по кафедре
б) Получение информации о преподавателе с помощью поиска по
фамилии. Пользователю необходимо отправить фамилию нужного ему
преподавателя. В случае успеха пользователь получает информацию о
преподавателе (рис. 29), в противном случае сообщение об ошибке (рис. 30).
Рисунок 29 – Процесс получения информации о преподавателе по фамилии
“Смоляков”, лист 1
64
Рисунок 29, лист 2
Рисунок 30 – Сообщение об ошибке при вводе фамилии преподавателя
Вариант, когда преподавателей с одной и той же фамилией несколько
проиллюстрирован на рисунке 31.
Рисунок 31 – Интерфейс приложения в случае ввода фамилии, которая есть у
нескольких преподавателей
65
ЗАКЛЮЧЕНИЕ
В результате выполнения выпускной квалификационной работы было
разработано приложение-бот для Интернет-представительства университета на
основе API Telegram.
В ходе выполнения данной работы были сформулированы функциональные
и
эксплуатационные
требования
к
разрабатываемому
программному
обеспечению; рассмотрены уже существующие аналоги разрабатываемого
программного обеспечения и выделены их достоинства и недостатки. Также были
проанализированы существующие
методы
решения поставленной
задачи,
отмечены их достоинства и недостатки. Далее были разработаны спецификации,
спроектирована архитектура ПО, а также его структура. Были спроектированы
структуры данных, алгоритмы и интерфейс разрабатываемого ПО. И в результате
программное обеспечение было реализовано и отлажено.
Таким
достигнута.
образом,
цель
выпускной
квалификационной
работы
была
66
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
1.
Бот
(программа):
[Электронный
ресурс].
https://ru.wikipedia.org/wiki/Бот_(программа)#Чат-боты.
–
–
Режим
доступа:
Дата
доступа:
21.05.2018.
2. Браун И. Веб-разработка с применением Node и Express. Полноценное
использование стека JavaScript. — СПб: Питер, 2017. — 336 с.
3. Node-telegram-bot-api/usage.md at master · yagop/node-telegram-bot-api ·
GitHub: [Электронный ресурс]. – Режим доступа: https://github.com/yagop/nodetelegram-bot-api/blob/master/doc/usage.md. – Дата доступа: 25.05.2018.
4. Документация Telegram: API: [Электронный ресурс]. – Режим доступа:
https://tlgrm.ru/docs/bots/api. – Дата доступа: 25.05.2018.
5.
Telegram
APIs:
[Электронный
ресурс].
–
Режим
доступа:
https://core.telegram.org/. – Дата доступа: 25.05.2018.
6. Функциональная спецификация: [Электронный ресурс]. – Режим доступа:
https://dic.academic.ru/dic.nsf/ruwiki/1666639. – Дата доступа: 03.06.2018.
7. Иванова Г.С. Технология программирования. - М.: Издательство МГУ
имени Н.Э.Баумана, 2002. - 241 с.
8. Искусство Node | Frontender Magazine: [Электронный ресурс]. – Режим
доступа: https://frontender.info/art-of-node/. – Дата доступа: 05.05.2018.
9. Архитектура ИТ решений. Часть 1. Архитектура предприятия:
[Электронный ресурс]. – Режим доступа: https://habr.com/post/347204/. – Дата
доступа: 24.05.2018.
10. Бот в помощь: как мессенджеры научились зарабатывать миллиарды:
[Электронный ресурс]. – Режим доступа: http://www.forbes.ru/tekhnologii/internet-isvyaz/313169-bot-v-pomoshch-kak-messendzhery-nauchilis-zarabatyvat-milliardy.
Дата доступа: 25.05.2018.
–
67
ПРИЛОЖЕНИЕ А
(обязательное)
ТРАНЗИТИВНАЯ СЕТЬ ДИАЛОГА С ПОЛЬЗОВАТЕЛЕМ
68
ПРИЛОЖЕНИЕ Б
(обязательное)
МОДУЛЬ РАБОТЫ С САЙТОМ
var request = require('request');
module.exports = {
createKeyboard: function(items, cb_data, col_count, idItems) {
var buttons = [];
for (var i = 0; i < Math.ceil(items.length / col_count);
++i) {
buttons.push([]);
for (var j = 0; j < col_count; ++j) {
if (i*col_count + j < items.length) {
if (typeof idItems === 'undefined') { //для
вывода семетров
buttons[i].push(
{
text: items[i * col_count + j],
callback_data: String(cb_data + (i *
col_count + j).toString())
}
);
}
else {
buttons[i].push(
{
text: items[i * col_count + j],
callback_data: cb_data + idItems[i *
col_count + j]
}
);
}
}
}
}
return {
reply_markup: {
inline_keyboard: buttons
}
};
},
MakeRequestAndGetOptions: function(url, idField, displayField,
cb_data, col_count, finished_callback) {
var self = this;
request(url, function (error, response, body) {
var List = {};
List = JSON.parse(body);
var items = [];
var idItems = [];
for (var i = 0; i < List.length; i++) {
69
if (displayField == "fio") {
var new_fio = List[i][displayField].split(' ');
new_fio = new_fio.filter(function(n) { return n
!= "" });
items.push(new_fio[0] + ' ' + new_fio[1][0] + '.
'+ new_fio[2][0] + '.');
}
else
items.push(List[i][displayField]);
idItems.push(List[i][idField]);
}
var opts = self.createKeyboard(items, cb_data,
col_count, idItems);
finished_callback(opts);
});
}
};
70
ПРИЛОЖЕНИЕ В
(обязательное)
МОДУЛЬ РАБОТЫ С РАСПИСАНИЕМ
function getMonday(d) {
d = new Date(d);
var day = d.getDay(),
diff = d.getDate() - day + (day == 0 ? -6 : 1);
if (d.getDay() == 0) { //если воскресенье - показываем новую
неделю
d.setHours(27, 0, 0, 0);
return d;
}
else {
d.setHours(3, 0, 0, 0);
return new Date(d.setDate(diff));
}
}
function GetSchedule (schedule, type, day) {
var day_of_week = ["Понедельник", "Вторник", "Среда", "Четверг",
"Пятница", "Суббота"];
var lesson_time = ["8:30", "10:10", "12:00", "13:40", "15:20",
"17:00", "18:40", "20:15"];
var Week = [[], [], [], [], [], []];
var res = [];
var day_schedule = "";
for (var i = 0; i < schedule.length; i++)
{
var lesson = {};
lesson.NumberLesson = schedule[i].NumberLesson;
lesson.TitleSubject = schedule[i].TitleSubject;
lesson.TypeLesson = schedule[i].TypeLesson;
lesson.Family = schedule[i].Family;
lesson.Name = schedule[i].Name;
lesson.SecondName = schedule[i].SecondName;
lesson.Korpus = schedule[i].Korpus;
lesson.NumberRoom = schedule[i].NumberRoom;
lesson.Title = schedule[i].title;
Week[schedule[i].DayWeek*1 - 1].push(lesson);
}
for (var i = 0; i < Week.length; i++)
{
day_schedule = "";
day_schedule += '╭';
for (var s = 0; s < day_of_week[i].length-1; s++)
day_schedule += '═';
day_schedule += '╮\n '+day_of_week[i]+' \n╰';
for (var s = 0; s < day_of_week[i].length-1; s++)
day_schedule += '═';
71
day_schedule += '╯\n';
if (Week[i].length == 0)
day_schedule += 'Пар
нет'+'\n----------------------------------------------------\n';
else {
for (var j = 0; j < Week[i].length; j++)
{
if (type == 1)
day_schedule += Week[i][j].NumberLesson+' пара,
'+lesson_time[Week[i][j].NumberLesson1]+':\n'+Week[i][j].TitleSubject+'\n'+'('+Week[i][j].TypeLesson+')\n
'+ Week[i][j].Family+' '+ Week[i][j].Name
+'
'+Week[i][j].SecondName+'\n'+Week[i][j].Korpus+''+Week[i][j].NumberRoom+'\n---------------------------------------------------\n';
if (type == 2)
day_schedule += Week[i][j].NumberLesson+' пара,
'+lesson_time[Week[i][j].NumberLesson1]+':\n'+Week[i][j].TitleSubject+'\n'+'('+Week[i][j].TypeLesson+')\n
'+Week[i][j].Title
+'\n'+Week[i][j].Korpus+''+Week[i][j].NumberRoom+'\n---------------------------------------\n';
if (type == 3)
day_schedule += Week[i][j].NumberLesson+' пара,
'+lesson_time[Week[i][j].NumberLesson1]+':\n'+Week[i][j].TitleSubject+'\n'+'('+Week[i][j].TypeLesson+')\n
'+Week[i][j].Title
+'\n'+Week[i][j].Family+'
'+Week[i][j].Name+' '+Week[i][j].SecondName+'\n---------------------------------------\n';
}
}
res[i] = day_schedule;
}
if (typeof day === 'undefined')
return res;
else if (day > 6)
return res[0];
else if (day == 0)
return res[day];
else
return res[day-1];
}
function PrintSchedule(url, type, chatId, text, cb_data) {
request({url: url, encoding: null}, function (error, response,
body) {
var schedule = JSON.parse(body);
var res = GetSchedule(schedule, type);
72
var opts = {};
if (typeof text !== 'undefined' && typeof cb_data !==
'undefined') {
opts = {
reply_markup: {
inline_keyboard: [
[{text: "Установить как "+text+" по
умолчанию", callback_data: cb_data}],
[{text: "Вернуться назад", callback_data:
"back_btn"}],
[{text: "В начало", callback_data:
"start_btn"}],
]
}
};
}
else {
opts = {
reply_markup: {
inline_keyboard: [
[{text: "Вернуться назад", callback_data:
"back_btn"}],
[{text: "В начало", callback_data:
"start_btn"}],
]
}
};
}
//красиво делим сообщение, если оно > 4096 символов
var full_len = 0;
var full = ""; //когда < 4096
for (var i = 0; i < res.length; i++)
{
if (full_len + res[i].length > 4096) {
bot.sendMessage(chatId, full);
full_len = 0;
full = "";
}
full_len += res[i].length;
full += res[i];
}
bot.sendMessage(chatId, full, opts);
});
}
73
ПРИЛОЖЕНИЕ Г
(обязательное)
МОДУЛЬ РАБОТЫ С АТТЕСТАЦИЕЙ
function GetCSRF(user, callback) {
request({url: 'http://oreluniver.ru/student', jar: user.cookie},
function (error, response, body) {
if (error)
console.error(error);
else {
var $ = cheerio.load(body);
callback($('input[name="csrf"]').val());
}
});
}
function GetAttestation(user) {
GetCSRF(user, function (csrf) {
var form = {
studentBookId: user.studentBookId,
f: EncodingHelper.convertLoginForm(user.lastName),
i: EncodingHelper.convertLoginForm(user.firstName),
birthday: user.birthday,
csrf: csrf,
submit: EncodingHelper.convertLoginForm("Войти")
};
var strings = [];
for (var k in form) {
var v = form[k];
strings.push(k + "=" + v);
}
var formData = strings.join('&');
console.info(formData);
var contentLength = formData.length;
request({
headers: {
'Content-Length': contentLength,
'Content-Type': 'application/x-www-form-urlencoded'
},
uri: 'http://oreluniver.ru/student',
jar: user.cookie,
body: formData,
encoding: null,
method: 'POST'
}, function (error, res, body) {
if (error)
console.log(error);
74
else if (res.headers.location == '/student/personal') {
request({url:
'http://oreluniver.ru/student/personal', jar: user.cookie}, function
(error, res, body) {
if (error)
console.log(error)
else {
bot.sendMessage(user.chatId, 'Какую
информацию ты хочешь получить?', {
reply_markup: {
inline_keyboard: [
[{text: "Текущий контроль",
callback_data: "attestation_btn"}],
[{text: "Промежуточная
аттестация", callback_data: "session_btn"}],
[{text: "Итоговая аттестация",
callback_data: "finalresult_btn"}],
[{text: "Сменить пользователя",
callback_data: "change_user_btn"}],
[{text: "В начало",
callback_data: "start_btn"}],
]
}
});
}
});
} else {
user.succsess_login = null;
user.state = null;
bot.sendMessage(user.chatId, "Студент с такими
данными не найден, либо уже не обучается! Проверьте корректность
ввода!", {
reply_markup: {
inline_keyboard: [
[{text: "Ввести заново", callback_data:
"change_user_btn"}],
[{text: "В начало", callback_data:
"start_btn"}],
],
}
});
}
});
});
}
function PrintAttestation(body, callback) {
var begin_table = "<table";
var end_table = "</table>";
var table =
body.slice(body.indexOf(begin_table),body.indexOf(end_table)+end_tab
75
le.length);
$ = cheerio.load(table);
cheerioTableParser($);
var data = $("table").parsetable(true, true, true);
var max_len = 0;
for (var i = 0; i < data.length; i++)
{
for (var j = 0; j < data[0].length; j++)
{
if (data[0][j].length > max_len)
max_len = data[0][j].length;
}
}
if (data.length != 0)
data = TranspMatrix(data);
var res = "```\n";
for (var i = 1; i < data.length; i++)
{
for (var j = 0; j < data[i].length; j++)
{
if (j == 0)
{
res += data[i][j];
for (var bs = 0; bs < max_len-data[i][j].length + 2;
bs++)
res += ' ';
}
else if (data[i][j] == '')
res += '';
else
res += data[i][j] + '
';
}
res += '\n';
}
res += "\n```";
console.log(res);
callback(res);
}
function TranspMatrix(A) {
var m = A.length, n = A[0].length, AT = [];
for (var i = 0; i < n; i++)
{ AT[i] = [];
for (var j = 0; j < m; j++) AT[i][j] = A[j][i];
}
return AT;
}
76
ПРИЛОЖЕНИЕ Д
(обязательное)
МОДУЛЬ РАБОТЫ С ИНФОРМАЦИЕЙ О ПРЕПОДАВАТЕЛЯХ
function GetPrepInfo(user, msg_text) {
request({ url: 'http://oreluniver.ru/employee', encoding:
null}, function (error, response, body) {
body = encoding.convert(body, 'utf-8', 'windows1251').toString();
var surname = msg_text;
surname = surname.replace("ё", "е");
surname = surname.replace("Ё", "е");
surname = surname.toLowerCase();
surname = surname.replace(surname[0],
surname[0].toUpperCase());
var cnt_prep = 0;
var mas_url = [];
var mas_prep_surnames = [];
var mas_prep_id = [];
$ = cheerio.load(body);
$('div a[itemprop="fio"]').each(function(i, elem) {
var mas = $(this).text().split(' ');
if (mas[1] == surname) {
cnt_prep++;
mas_url.push('http://oreluniver.ru'+$(this).attr('href'));
mas_prep_surnames.push($(this).text());
var tmp = ((mas_url[mas_url.length1]).toString()).slice((mas_url[mas_url.length1]).toString().indexOf('/employee/')+'/employee/'.length,
mas_url[mas_url.length-1].length);
mas_prep_id.push(tmp);
}
});
if (cnt_prep == 0) {
bot.sendMessage(user.chatId, 'Преподаватель с фамилией
'+surname+' не найден. Попробуйте ввести другую фамилию');
} else
if (cnt_prep == 1)
PrintPrepInfo(user, mas_url[0]);
else {
user.state = 'info_by_kaf';
var opts = MakeRequest.createKeyboard(mas_prep_surnames,
'prep_', 1, mas_prep_id);
bot.sendMessage(user.chatId, 'Выбери преподаваетля из
списка: ', opts);
}
});
}
function PrintPrepInfo(user, url) {
77
request({ url: url, encoding: null}, function (error, response,
body) {
body = encoding.convert(body, 'utf-8', 'windows1251').toString();
$ = cheerio.load(body);
var url_img = 'http://oreluniver.ru'+$('figure
img').attr('src').toString();
request({url: url_img, encoding: null}, function (error,
response, body) {
var res = "";
res += $('h1.center').text() + '\n';
$('.profile-key p.profile-value').each(function(i, elem)
{
res += $(this).text() + '\n';
});
$('#contacts p').each(function(i, elem) {
res += $(this).text() + '\n';
});
bot.sendPhoto(user.chatId, Buffer.from(body,
'binary')).then(function() {
bot.sendMessage(user.chatId, res, {
reply_markup: {
inline_keyboard: [
[{text: "Вернуться назад",
callback_data: "back_btn"}],
[{text: "В начало", callback_data:
"start_btn"}],
],
}
});
});
});
});
}
78
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ
УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
« ОРЛОВСКИЙ ГОСУДАРСТВЕIШЫЙ У НИВЕРСИТЕТ
ИМЕНИ И.С. ТУ РГЕНЕВА»
УДОСТОВЕРЯЮЩИЙ ЛИСТ № 140183/п
К ВЫПУСКНОЙ КВАЛИФИКАЦИОННОЙ РАБОТЕ
на демонстрационный материал, представленный в электронном виде
Студента Шаховой Аделины Игоревнышифр 140183/п
Институт приборостроения, автоматизации и информационных технологий
Кафедра программной инженерии
09.03.01 Информатика и вычислительная техника
направленность «Программное обеспечение вычислительной техники и
автоматизированных систем»
Наименование документа: Демонстрационные плакаты к выпускной
квалификационной работе
Документ разработал:
Студент
Шахова А.И.
Документ согласован:
Р уководитель
Артёмов А.В.
Нормоконтроль
Ужаринский А.Ю .
Документ утвержден:
Зав. кафедрой
Фролов А.И.
Орел 2018
79
ИНФОРМАЦИОННО-ПОИСКОВАЯ ХАРАКТЕРИСТИКА
ДОКУМЕНТА НА ЭЛЕКТРОННОМ НОСИТЕЛЕ
Наименование
группы атрибутов
атрибута
1. Описание
Обозначение документа
документа
(идентификатор(ы)
файла(ов))
Наименование документа
2. Даты и время
3. Создатели
4. Внешние
ссылки
5. Защита
6. Характеристики
содержания
Характеристики документа
на электронном носителе
\Плакаты\Презентация.pptx
Демонстрационные плакаты
к выпускной
квалификационной работе
Класс документа
ЕСКД
Вид документа
Оригинал документа на
электронном носителе
Аннотация
Демонстрационный
материал, отображающий
основные этапы выполнения
выпускной
квалификационной работы
Использование документа Операционная система
Windows 8.1, Microsoft
PowerPoint 2016
Дата и время
13.06.2018
копирования документа
Дата создания документа 29.05.2018
Дата утверждения
20.06.2018
документа
Автор
Шахова А.И
Изготовитель
Шахова А.И.
Ссылки на другие
Удостоверяющий лист
документы
№ 140183/п
Санкционирование
ОГУ имени И.С. Тургенева
Классификация защиты
По законодательству РФ
Объем информации
3821679 Б
документа
80
7. Структура
документа(ов)
Наименование плаката
(слайда) №1
Наименование плаката
(слайда) №2
Наименование плаката
(слайда) №3
Наименование плаката
(слайда) №4
Наименование плаката
(слайда) №5
Наименование плаката
(слайда) №6
Наименование плаката
(слайда) №7
Наименование плаката
(слайда) №8
Наименование плаката
(слайда) №9
Наименование плаката
(слайда) №10
Наименование плаката
(слайда) №11
Наименование плаката
(слайда) №12
Титульный лист
Актуальность
разрабатываемого
программного обеспечения
Возможности
разрабатываемой системы в
сравнении с аналогами
Место разрабатываемого
приложения в общей системе
Функциональная диаграмма,
раскрывающая основную
функцию приложения
Диаграмма переходов
состояний для функции
просмотра успеваемости
Транзитивная сеть диалога с
пользователем
Разработанные алгоритмы в
виде блок-схем
Разработанные алгоритмы в
виде блок-схем
Пример получения
расписания группы
Пример входа в личный
кабинет для получения
успеваемости
Пример поиска
преподавателя путём ввода
фамилии
1/--страниц
Пожаловаться на содержимое документа