Тема курсовой работы у всех обучающихся единая – «Разработка программного продукта для решения прикладных задач». Данная тема указывается на титульном листе.
Решение прикладной задачи выполняется по варианту. Варианты определяются исходя из ID студента.
Пример содержания пояснительной записки:
Введение
1. Анализ заданий курсовой работы
1.1. Анализ методических указаний, входных и выходных данных к заданиям курсовой работы
1.2. Анализ индивидуальных требований и формирование итоговых условий по всем заданиям курсовой работы
1.3. Описание выбраной среды разработки, установка виртуального окружения и необходимых библиотек
1.4. Выводы по первой главе
2. Разработка программного продукта для решения прикладных задач.
2.1. Создание модуля шифрования (Задание №1)
2.1.1. Построение алгоритмов шифрования, расшифровки и тестирования
2.1.2. Описание и исходный код реализации на языке программирования
2.1.3. Примеры тестирования и отладки
2.1.4. Скриншоты результатов работы
2.2. Создание приложения для работы с модулем
2.2.1. Описание объектов и функций интерфейса
2.2.2. Описание реализации объектов и функций интерфейса
2.2.3. Тестирование и отладка
2.2.4. Скриншоты результатов работы
2.3. Создание Web-сервиса на основе модуля
2.3.1. Планирование адресов и типов запросов на Web-сервисе
2.3.2. Описание и исходный код обработки запросов на Web-сервисе
2.3.3. Тестирование и отладка
2.3.4. Скриншоты результатов работы
2.4. Создание административного приложения для Web-сервиса
2.4.1. Планирование административного приложения для Web-сервиса
2.4.2. Описание и исходный код реализации приложения на языке программирования
2.4.3. Тестирование и отладка.
2.4.4. Скриншоты результатов работы
2.5. Выводы по 2 главе
3. Разработка требований к техническим средствам реализации программного обеспечения для решения прикладных задач
Выводы
Список литературы
Структура курсовой работы должна включать в себя следующие составные части:
– титульный лист (приложение 3);
– оглавление (приложение 4);
– введение;
– текст работы, структурированный по главам (параграфам, разделам);
– заключение;
– список литературы;
– приложения (при необходимости).
Титульный лист курсовой работы генерируется из личного кабинета электронного университета при нажатии на ссылку с темой курсовой работы. Титульный лист помимо основной информации содержит в правом верхнем углу персонализированный штрих-код, который является уникальным и позволяет идентифицировать как ФИО самого студента, так и всю сопроводительную документацию по курсовой работе. Титульный лист вставляется в качестве первого листа в отчет. Подписывать титульный лист не нужно. Запрещается распознавать титульный лист и вставлять его в виде текста.
Оглавление должно быть создано с помощью инструмента «Автосодержание» текстового редактора и собираться автоматически из заголовков глав и параграфов.
Во введении автор в общих словах описывает полученное на курсовой работе задание (создание веб-сервиса шифрования), обосновывает актуальность этой темы, определяет цели, задачи, объект и предмет работы.
Актуальность темы. Обоснование того, почему нужно заниматься исследованием выбранной темы. Обоснование актуальности темы показывает главное – суть проблемной ситуации (противоречивой ситуации требующей своего разрешения). Актуальность темы означает ее связь с конкретными потребностями пользователей, отражает важность, своевременность выбранной темы, ее значимость.
Цели и задачи. Количество и название задач как правило совпадает с количеством параграфов работы, впереди ставится соответствующий глагол (рассмотреть, охарактеризовать и т.п.). От доказательства актуальности выбранной темы обучающийся должен логично перейти к определению цели работы. Как правило, целью исследования является разработка предложений или методических рекомендаций на основе анализа существующей ситуации и полученных практических результатов анализа объекта исследования.
Задачи указывают на основные направления работы и начинаются с совершенных глаголов: рассмотреть…, охарактеризовать…, проанализировать…, оценить…, выявить…, разработать…, спроектировать…, автоматизировать…, разработать рекомендации…, предложить методику…, повысить экономическую эффективность… и т.п.
Основные разделы курсовой работы – четыре главы (по одной на каждое задание) и параграфы, которые содержат систематизированное изложение и результаты решения поставленной задачи. В главах и параграфах излагаются теоретические аспекты задачи, приводятся алгоритмы, за счет которых реализуется требуемый функционал. Приводятся тестовые примеры и результаты их выполнения в реализованных приложениях. Представляются основные скриншоты, показывающие работу приложений. В каждом разделе обязательно выкладывается исходный код, решающий поставленную задачу, так как задания сформулированы таким образом, чтобы их возможно было решить в рамках одного модуля, без использования внешних бинарных ресурсов. Рекомендуется логическое разбиение модуля на функции и классы согласно требованиям PEP8, однако работоспособность кода каждого приложения при переносе в один файл должна сохраняться. Код модулей при копировании в файл формата Word должен отличаться от форматирования обычного текста (можно просто сохранять исходное форматирование и подсветку из среды разработки), что повышает его читаемость в тексте пояснительной записки.
Заключение представляет собой краткое последовательное, логически стройное изложение полученных и описанных в основной части результатов, выводов исследования, построенных на анализе соотношения полученных результатов с общей целью и конкретными задачами исследования. Число выводов не должно быть большим, обычно оно определяется количеством поставленных задач.
Список литературы представляет собой оформленный в соответствии с установленными правилами перечень использованных в процессе исследования избранной темы: законов и подзаконных нормативных правовых актов, учебной и научной литературы, материалов периодической печати, материалов юридической практики, электронных ресурсов. Список литературы должен иметь следующую структуру:
– нормативные правовые акты;
– учебники, учебные пособия, монографии, комментарии к законодательству, словари, энциклопедии;
– научные статьи, материалы из периодических изданий;
– диссертации, авторефераты диссертаций;
– материалы юридической практики, справочно-статистические материалы;
– электронные ресурсы.
Задания для выполнения в рамках курсовой работы.
Общие ключевые требования ко всем заданиям (при нарушении баллы за задание обнуляются):
- Для реализации заданий 1, 2 и 4 можно использовать библиотеки, встроенные в Python
- Для реализации задания 3 так же используется библиотека flask
- В заданиях 1-3 необходимо использовать свой студенческий ID - 8 цифр вида 7ххххххх.
Задание № 1
|
Модуль шифрования
|
БЕЗ ГРАФИЧЕСКОГО ИНТЕРФЕЙСА
|
|
формулировка
|
Реализуйте функцию сохранения зашифрованных сообщений
Создайте модуль Python, в котором будет две функции - encrypt и decrypt. Функция encrypt должна получать на вход текстовое сообщение, шифруя его с помощью кода Цезаря (сдвиг вправо на заданное число символов).
Функция decrypt должна получать на вход текстовое сообщение, дешифруя его с помощью кода Цезаря (сдвиг влево на заданное число символов).
Проверьте работу программы, реализовав в том же модуле Python тестирующий алгоритм, который осуществляет вызовы функций с разными сообщениями и сохраняет результаты в файлы, согласно спецификации ниже.
|
|
Методические указания
|
Размер сдвига определяется остатком от деления Вашего студенческого ID на 11. То есть, например, для ID 70525968 сдвиг равен 70525968 % 11, то есть 7.
Студенческий ID должен при вызове обеих функций передаваться в них как параметр по умолчанию с ключом sid. То есть функцию можно вызвать так:
encrypt("сообщение")
или так:
encrypt("сообщение", sid=70525968)
Аналогично для функции decrypt
Шифруются символы латинского и кириллического алфавитов, цифры, а так же символы пунктуации.
Считается, что символы расположены по кругу, в котором сначала идут цифры от 0 до 9, потом малые русские буквы, потом большие русские буквы, потом малые латинские, потом большие латинские, потом символы пунктуации. Символы пунктуации взяты такие же и в таком же в порядке, как в константе punctuation встроенного в python модуля string. После символов пунктуации идёт пробел, после чего круг замыкается и снова идут цифры от 0 до 9 и т.д.
То есть для студенческого ID выше, символ 'э' будет зашифрован со сдвигом 7 по описанному выше кругу, а значит алгоритм шифрования пропустит последовательность символов "эюяАБВГ" и даст символ "Д". Аналогичным образом, если шифруется символ "/" (третий с конца в string.punctuation), то алгоритм пропустит последовательность символов "|}~ 012" и выдаст '3'.
Таким образом, для студента с ID 70525968 вызов вида:
encrypt("Верю: справитесь")
должен вернуть строку "46201131213а463д", а вызов вида:
decrypt("46201131213а463д")
должен вернуть строку "Верю: справитесь"
В модуле должен быть блок
if __name__ == "__main__":
в котором тестируется работа функций encrypt и decrypt с разными вариантами вызовов, для каждой проверяется не менее 3 разных тестовых кейсов. Результаты печатаются в консоль и должны быть отражены в отчёте по курсовой работе.
Варианты вызовов берутся из файлов encrypt.txt и decrypt.txt. Результаты пишутся в файлы encrypt_result.txt и decrypt_result.txt. Содержимое файлов с результатами так же дублируется как распечатки в консоль.
Требования для задания 1:
1) Программу сохранить под именем cypher.py. Отсутствие модуля с таким названием считается критической ошибкой при проверке;
2) Функция encrypt должна находится в верхней части модуля - сразу после необходимых импортов. Функция decrypt - сразу за ней;
3) Блок if __name__ == “__main__” должен срабатывать при прямом запуске модуля cypher.py и должен выводить распечатки результатов вызова функций в не менее чем 6 тестовых кейсах;
4) Блок if __name__ == “__main__” не должен срабатывать при импорте модуля в другие модули. Такое срабатывание считается грубой ошибкой;
5) Отсутствие параметра sid, его неверное назначение, или его неверное использование в функциях считаются грубыми ошибками.
|
|
Процедура проверки
|
Вызов модуля напрямую с использованием проверочных вариантов файлов encrypt.txt и decrypt.txt. Импорт модуля и вызов отдельно функций encrypt и decrypt с разнообразными параметрами.
|
|
Ожидаемые результаты
|
При вызове модуля напрямую – распечатки результатов в файлах encrypt_result.txt и decrypt_result.txt. Результаты должны соответствовать содержмиому файлов encrypt.txt и decrypt.txt и ID студента согласно спецификации.
При импорте модуля - отсутствие распечаток тестов и соответствие результатов проверочных вызовов функций спецификации.
|
Задание № 2
|
Интерфейс для модуля шифрования
|
С ГРАФИЧЕСКИМ ИНТЕРФЕЙСОМ (GUI)
|
|
формулировка
|
Необходимо реализовать оконное приложение, которое позволит обычным пользователям пользоваться работой шифровального модуля.
|
|
Методические указания
|
Необходимо реализовать оконное приложение на tkinter.
Примерный внешний вид приложения:

Возможности приложения:
– возможность загрузить txt-файл с зашифрованными строками. Файл для загрузки выбирается в диалоговом окне, которое возникает при нажатии кнопки "загрузить файл" (по умолчанию – encrypt.txt);
– возможность увидеть расшифрованные строки на экране в нередактируемом текстовом поле;
– если сообщение больше, чем помещается в поле, то поле должно скроллится;
– если сообщение помещается в поле ввода, то интерфейс скроллинга должен быть скрыт;
– возможность добавить новую строку путём ввода этой строки во второе текстовое поле и нажатия кнопки "Добавить";
– возможность сохранить новый набор строк обратно в открытый файл, предварительно их зашифровав, путём нажатия кнопки "зашифровать и сохранить". Исходный файл при этом перезаписывается;
– возможность добавить строки, не загружая файл, после чего зашифровать добавленные строки и сохранить результат в новый файл. Целевой файл выбирается в открывающемся стандартном диалоговом окне сохранения файла (по умолчанию называется encrypt_2.txt);
– строка состояния в нижней части окна, для сообщений об ошибках
– ошибками считаются ситуации, когда:
- открытие файла было неуспешно по любой причине (выводится "не удалось открыть файл");
- файл открылся, но в нём находятся символы, кроме шифруемого набора и символа переноса строки (если, например, ошибка на строке номер 5, выводится: "файл содержит недопустимые символы на стр. №5");
- если в момент сохранения файл недоступен для записи, выводится "файл недоступен для записи";
Аспекты функционала окна, зависящие от студенческого ID:
– количество строк в окне вывода расшифрованных сообщений расчитывается как 10 + (рекурсивная сумма цифр ID). Рекурсивная сумма цифр считается путём подсчёта суммы цифр числа, потом суммы цифр его суммы цифр, и так до тех пор, пока не останется 1 цифра. То есть, для ID 70525968 это будет 7 + 0 + 5 + 2 + 5 + 9 + 6 + 8 = 42 => 4 + 2 = 6, и в итоге 10 + 6 = 16 строк
– количество строк в окне ввода новых сообщений рассчитывается как 3 + (остаток от деления ID на 4)
– В интерфейсе программы строки текстовых полей должны быть пронумерованы. Например:

– программа импортирует модуль cypher.py из первого задания и опирается на его функционал, в том числе на шифрование с использованием студенческого id
Программу сохранить под именем app.py
|
|
Входные данные
|
Проверяющий запускает app.py , вводит несколько строк, сохраняет новый файл encrypt_2.txt, после чего загружает этот файл обратно в программу через интерфейс и проверяет расшифровку строк. Так же проверяется открытие файла с нетекстовыми символами (ошибка) и сохранение файла, открытого в текстовом редакторе (так же ошибка).
|
|
Выходные данные
|
Программа работает и выдаёт ошибки по спецификации
|
Задание № 3
|
Разработка веб-сервиса
|
WEB-ИНТЕРФЕЙС
|
|
формулировка
|
Создайте сервер на flask, который при запуске будет открывать Web-сервер по стандартному для flask адресу 127.0.0.1:5000
Сервер обеспечивает Web-интерфейс к модулю шифрования, одновременно поддерживая логирование запросов.
|
|
Методические указания
|
Сервер должен поддерживать следующий функционал:
– GET-запрос по адресу с учётом Вашего ID, например 127.0.0.1:5000/70525968. По этому запросу должна открываться HTML-форма для ввода и сохранения сообщений из приведённого ниже шаблона:
Шаблон страницы:
<!DOCTYPE html>
<HTML>
<BODY>
<FORM method="POST">
<LABEL>Введите сообщение:</LABEL><br>
<TEXTAREA style="width:95%" name="text"></TEXTAREA><br>
<INPUT type='submit' value="Отправить"></SUBMIT>
</FORM>
</BODY>
</HTML>
Внешний вид страницы:

– Обработка посланной формы (фактически POST-запрос по тому же адресу, который отправляет браузер на основании формы). Сервер должен зашифровать и сохранить текст из формы в файл messages.csv (дополняя существующую базу файлов), и вернуть пользователю страницу с подтверждением результата из приведённого ниже шаблона (полученный из формы текст передаётся в шаблон через значение msg)
Шаблон и вид страницы:
<!DOCTYPE html>
<HTML>
<BODY>
<p>Сообщение сохранено:</p>
<p>{{msg}}</p>
</BODY>
</HTML>

– Сервер хранит тексты в файле messages.csv, сохраняя не только сам текст, но так же индекс полученного сообщения, время его отправки и IP-адрес отправителя. То есть в messages.csv 4 значения на каждой строке.
– GET-запрос по адресу 127.0.0.1:5000/reset стирает все сообщения на сервере (стирает csv-файл). В браузер выходится простейший шаблон, рапортующий о выполненном сбросе (код шаблона ниже):
<!DOCTYPE html>
<HTML>
<BODY>
<p>messages.csv стёрт</p>
</BODY>
</HTML>

– Запрос по адресу 127.0.0.1:5000/get_all.json позволяет выкачать с сервера информацию о всех сообщениях в формате json. Возвращается список сообщений messages, в котором каждое сообщение кодируется как json-объект с ключами id, datetime, ip, text.
Справа: пример возможного результата при просмотре из браузера Firefox (используя встроенный функционал просмотра json-выгрузок)
Расшифровка и зашифровка сообщений производится через написанный ранее модуль cypher.py.
Программу сохранить под именем srv.py
Папку templates с шаблонами приложить к ответу
|
|
Процедура проверки
|
Проверяющий запускает сервер, начинает с запроса на reset, после чего заходит на адрес по ID студента. Отправляет несколько сообщений, проверяет созданный csv-файл messages.csv, проверяет json-выгрузку.
|
|
Выходные данные
|
Сервер работает, создавая и модифицируя содержимое messages.csv в зависимости от спецификации.
|
Задание № 4
|
Приложение для управления контентом
|
С ГРАФИЧЕСКИМ ИНТЕРФЕЙСОМ (GUI)
|
|
формулировка
|
Сделать приложение, которое будет управлять содержимым csv-файла на сервере.
|
|
Методические указания
|
Сделайте улучшение приложения из задания 2.
Приложение должно требовать от пользователя в диалоге выбрать файл имеено формата *.csv, и давать ошибку при попытке загрузки файла другого типа.
Если csv-файл отсутствует, его можно создать из приложения, так же как текстовый файл в задании 2.
В окне вывода расшифрованной информации нужно выводить не просто тексты, а табличку из 4 колонок, заполняемую данными из csv-файла (то есть колонки id, время выгрузки, ip-адрес и расшифрованный текст).
Добавление новой строки в приложении оформляется как полноценный пост на сервере, то есть добавляет новую строку с новым id и с отметкой текущего времени. В качестве ip-адреса указывается слово admin.
При наведении мышки на ряд в таблице, слева от ряда возникают 2 стрелочки - вверх и вниз, и крестик. При нажатии стрелочки вверх запись движется в таблице вверху, при нажатии стрелочки вниз – вниз. При нажатии крестика сообщение удаляется.
Если сообщение уже первое или последнее в списке, то соответствующая стрелочка должна быть неактивна. При наведении мышки на другой ряд, стрелочки и крестик переключаются на новый ряд.
Приложение опирается на cypher.py при расшифровке сообщений из csv-файла и в процессе зашифровки сообщений при сохранении csv-файла.
Изменения, вносимые в messages.csv в приложении, тут же отражаются на сервере и наоборот.
Программу сохранить под именем admin.py
|
|
Процедура проверки
|
Проверяющий запускает сервер и административное приложение. Загружает в приложение используемый сервером файл messages.csv. Выполняет команды добавления и удаления строк в приложении, проверяет правильность форматов данных в окне приложения, в файле messages.csv, а так же правильность выгрузок с сервера.
|
|
Ожидаемый результат
|
Работа интерфейса admin.py согласно спецификации. Бесшовная интеграция админки и сервера.
|
Требования к оформлению курсовой работы
Курсовая работа выполняется в электронной форме и размещается обучающимся в личном кабинете в виде отдельных файлов:
- Курсовая работа в формате редактируемого файла, например: .odt, .docx, .rtf. Нельзя предоставлять курсовую работу в виде нередактируемого pdf-файла. Имя файла должно иметь следующий вид: «ФИО_КР_ВМП.*» Например: «Иванов_И.И._КР_ВМП.docx» или «Иванов_И.И._КР_ВМП_Отчет.rtf»
- zip-архив с исходным программным кодом и прочими сопутствующими файлами, например: Ivanov I.I_KR_VMP.zip |