Методические указания по организации подготовки, выполнению и защите курсовой работы по дисциплине высокоуровневые методы программирования
Скачать 1.64 Mb.
|
ВВЕДЕНИЕ В условиях быстро развивающейся современной высокотехнологичной экономики актуальной задачей является разработка различных автоматизиро- ванных систем. Они позволяют наиболее эффективно использовать различные современные средства информационной вычислительной техники и решать прикладные задачи. Для успешного решения таких задач нужно уметь исполь- зовать высокоуровневые средства разработки, декомпозировать задачу, осу- ществлять тестирование и сопровождение программных продуктов. В данной работе решаются задачи высокоуровневого программирова- ния, согласно индивидуальному заданию. Актуальность курсовой работы связана с наличием большого количества прикладных задач, которые необходимо эффективно решать с помощью ин- струментов высокоуровневых методов программирования. 34 1. АНАЛИЗ ЗАДАНИЙ КУРСОВОЙ РАБОТЫ 1.1. Исходные данные к заданиям курсовой работы Курсовая задания содержит 4 задания, рассмотрим подробнее каждое из них. 1 Работа с наборами данных. Формулировка: Во внешнем файле resourse_1.txt дан текст. Выведите все слова, встречающиеся в тексте, по одному на каждую строку, через пробел укажите количество повторений. Слова должны быть отсортированы по убы- ванию их количества появления в тексте, а при одинаковой частоте появления — в лексикографическом порядке. Вывод должен осуществляться в текстовый файл result_1.txt. При необходимости можно продублировать вывод в консоль. Разработка экспертной системы. Формулировка: Некоторый банк хочет внедрить систему управления счетами клиентов, поддерживающую следующие операции: 1. Пополнение счета клиента. 2. Снятие денег со счета. 3. Запрос остатка средств на счете. 4. Перевод денег между счетами клиентов. 5. Начисление процентов всем клиентам. Разработка аналитической системы Формулировка: разработать калькулятор со стандартным и расширен- ным функционалом. Стандартный функционал 1. Арифметические действия + - * /. 2. Возможность ввода отрицательного числа 3. Возведение в степень. 4. Извлечение квадратного корня. 5. Работа с памятью, состоящей из одной ячейки. 6. Должна быть кнопка сброса и кнопка «=» (равно). 1 Приведено в сокращенном виде. Полный текст задания в методических материалах 35 Расширенный функционал 1. Наличие кнопки/меню перехода в расширенный режим 2. Возможность работы с несколькими ячейками памяти. Количество ячеек памяти выбирается согласно методическим указаниям. 3. Отображение последовательности математических операций и цифр в n-строчном «дисплее», с возможностью «прокрутки». Количество строк «дисплея» калькулятора выбирается согласно методическим указаниям. 4. Реализация «инженерных» функций расширенного режима. Кон- кретный перечень функций выбирается согласно методическим указаниям. Задача о Ханойских башнях: Модифицированная задача о Ханойских башнях: Существует 8 шпинделей, пронумерованых от 8 до 1 слева направо. На каждом шпинделе надеты диски, в количестве, равном соответствующей циф- ре из ID студента. Все диски имеют разные диаметры. Диаметр диска равен M * 10 + N, где М – номер шпинделя, на котором надет диск, а N – это номер диска на шпинделе, считая сверху вниз. 1. Необходимо визуально изобразить предложенную задачу. Диски на шпинделях сделать случайных цветов. На каждом диске отображать цифру, равную его диаметру. Диаметр диска также показывать его фактическим раз- мером в пикселях. 2. Необходимо вычислить, за какое минимальное количество итера- ций переместятся все диски на шпиндель номер 1 3. Необходимо отобразить начальное и конечное расположение дис- ков на шпинделях, для этого под изображением Ханойских башен предусмот- реть две кнопки «Начало» и «Окончание». 4. Необходимо графически отобразить четыре промежуточные ите- рации перекладывания дисков. 36 5. Дать возможность пользователю изменять проценты в полях для ввода цифр, и по нажатию соответствующей кнопки просматривать располо- жение дисков на данной итерации. Таким образом, задания включают в себя основные прикладные задачи, которые решаются разработчиками программного обеспечения, это и работа с данными, использование алгоритмов и структур данных и построение ПО с графическим пользовательским интерфейсом. 1.2. Анализ методических указаний, входных и выходных данных к заданиям курсовой работы Следует рассмотреть методические указания и входные данные к зада- ниям курсовой работы. 2 Для первого задания методические указания звучат так: после того, как вы создадите словарь всех слов, необходимо отсортировать его по частоте встречаемости слова. Желаемого можно добиться, если создать список, эле- ментами которого будут кортежи из двух элементов: частота встречаемости слова и само слово. Например, [(2, 'hi'), (1, 'what'), (3, 'is')]. Тогда стандартная сортировка будет сортировать список кортежей, при этом кортежи сравнива- ются по первому элементу, а если они равны — то по второму. Знаки препи- нания не должны учитываться. Входные данные: Преподаватель вводит текст в текстовый файл resourse_1.txt (5-6 абзацев) и сохраняет его. Выходные данные: Текстовый файл result_1.txt. Для второго задания методические указания звучат следующим образом: Необходимо реализовать такую систему. Первоначально у банка 1 клиент. Клиент(ы) банка идентифицируются именами (уникальная строка, не содер- жащая пробелов). Вам необходимо задать в качестве имени клиента – свою фамилию на английском языке с большой буквы. На вашу фамилию должен 2 Приведены в сокращенном виде. Полный текст в методических материалах 37 быть открыт счет с суммой равной вашему ID. В отдельном поле должна быть предусмотрена возможность ввода простых команд: DEPOSIT name sum - Зачислить сумму sum на счет клиента name. Если клиента нет, то он создается и на него заводится счет с указанной сум- мой. WITHDRAW name sum - Снять сумму sum со счета клиента name. Если клиента, то счет создается. Баланс при выполнении такой операции у вновь созданного клиента должен быть отрицательный. BALANCE name - Узнать остаток средств на счету клиента name. Для каждого запроса BALANCE программа должна вывести остаток на счету данного клиента. Если же у клиента с запрашиваемым именем не открыт счет в банке, выводится сообщение «NO CLIENT». Если пользователь не указал имя клиента – то выводится баланс всех существующих клиентов. TRANSFER name1 name2 sum - Перевести сумму sum со счета клиента name1 на счет клиента name2. Если у какого-либо клиента, то он заво- дится в системе и ему создается счет с переведенной суммой. INCOME p - Начислить всем клиентам, у которых открыты счета, p% от суммы счета. Проценты начисляются только клиентам с положитель- ным остатком на счету, если у клиента остаток отрицательный, то его счет не меняется. После начисления процентов сумма на счету остается целой, то есть начисляется только целое число денежных единиц. Дробная часть начислен- ных процентов отбрасывается. Программа обрабатывает текстовые команды из левого поля только по- сле нажатия кнопки «Calculate». То есть, пользователь СНАЧАЛА вводит же- лаемые команды, при этом каждая новая команда вводится с новой строки, а ПОТОМ нажимает на кнопку «Calculate». Результат должен быть выведен в поле справа. 38 Входные данные: Преподаватель вводит в поле ввода команды 3 Выходные данные: Преподаватель наблюдает вывод Методические указания к третьему заданию: необходимо разработать программу и GUI для реализации стандартных функций калькулятора. При- мерные вид внешнего интерфейса – стандартный. Функционал «инженерного» режима работы калькулятора добавляется при нажатии на кнопку перехода в расширенный режим, либо выбора соответствующего пункта меню. Расширенный режим работы определяется внешним видом «цифрового дисплея», количеством ячеек памяти (кнопки M+, M-, MS, MR, MS) и кнопка- ми, отвечающими за дополнительные функции. Количество строк «цифрового дисплея» должно определяться как последовательная сумма всех цифр ID сту- дента. Суммирование отдельных цифр числа должно осуществляться до полу- чения однозначного числа, состоящей из 1-й цифры. Количество ячеек памяти калькулятора должно определяться как после- довательная сумма последних 3-х чисел ID. Суммирование отдельных цифр числа должно осуществляться до получения однозначного числа, состоящей из 1-й цифры. Дополнительные функции расширенного режима: Dms, 10^x, Pi, tanh, Ln переводит из десятичного вида в формат в градусы, минуты, секунды; возве- дение десяти в произвольную степень, число Пи, гиперболический тангенс, натуральный логарифм. Входные данные: Преподаватель с помощью мыши вводит числа и вы- полняет арифметические операции. Преподаватель с помощью мыши вводит числа и выбирает заявленные дополнительные функции. Преподаватель вводит намеренно некорректные операции (попытка де- ления на 0) 3 Для входных и выходных данных в методических материалах информация, аналогичная первому заданию – это было сочтено опечаткой и заменено на подходящее по логическому смыслу. Оригинальный текст в мето- дических материалах. 39 Выходные данные: на цифровом дисплее должен отображаться резуль- тат, либо сообщение об ошибке при некорректной операции. Проверяется количество строк в «цифровом дисплее» калькулятора и количество ячеек памяти. Методические указания для четвертого задания: основная часть работы над задачей студента сводится к правильной визуализации полученных ре- зультатов, а также оптимальному поиску промежуточных результатов. Схема ханойских башен должна выглядеть примерно таким образом, как указано на рисунке 1: Рисунок 1 – Примерная схема решения задачи Поскольку диски близких размеров будут отличаться всего на один пик- сель, то для контроля на каждом диске необходимо проставить его диамер в виде цифры. Так как в конце задачи все диски будут находиться на первом шпинделе, а общее количество дисков теоретически может быть равно 72, то рекомендуется сделать толщину одного диска примерно равной 10-12 пиксе- лям, для указанного окна. Входные данные: Идентификатор студента. Промежуточные проценты, вводимые преподавателем в соответсвующие поля над кнопками. Выходные данные: На цифровом дисплее должно отображаться окно с начальным расположением дисков на шпинделях Ханойских башень. Шпин- дели пронумерованы, на дисках также обозначены соответствующие диамет- ры. Под ней отображается шесть кнопок и четыре поля для ввода цифр. В нижней части экрана демонстрируется надпись «Итерация 0». 40 Методические материалы дают указания и подсказки, пример интерфей- сов(вплоть до пикселей), а также структур данных, которые следует использо- вать, что упрощает выполнение заданий. 1.2. Выбор и обоснование необходимых библиотек и среды разработки Поскольку в методических указаниях к выполнению курсовой работы указано использование языка программирования Python, среды разработки PyCharm, а также стандартных библиотек и модулей стандартной библиотеки, то для решения заданий курсовой работы были выбраны следующие средства: Язык программирования Python3 – согласно рекомендациям; Интегрированная среда разработки PyCharm – согласно рекомендациям; Графическая библиотека Tkinter – как наиболее простая и по причине того, что предыдущие задания по дисциплине выполнялись с помощью неё, соответственно, есть некоторый опыт использования этой библиотеки 1.3. Выводы по 1 главе Изучив полученный материал из главы 1, можно сделать вывод, что за- дания включают наиболее часто используемые прикладные задачи высоко- уровневого программирования – это и работа с файлами, использование структур данных и алгоритмов, построение приложений с графическим поль- зовательским интерфейсом, работа с наиболее популярной среде разработки, ставшей де-факто стандартом для разработчиков на языке программирования Python. Успешное выполнение задание будет свидетельствовать о полноте усво- енного материала в рамках дисциплины «Методы высокоуровневого програм- мирования» и умение решать задачи низкой и средней сложности. 41 2. РАЗРАБОТКА ПРОГРАММНОГО ПРОДУКТА ДЛЯ РЕШЕ- НИЯ ПРИКЛАДНЫХ ЗАДАЧ. 2.1. Работа с наборами данных Работа с наборами данных осуществляется стандартным для Python об- разом – с помощью оператора open. Для записи был использован оператор with, он создает диспетчер контекста, который автоматически закрывает файл, по окончанию работы в нем. Что делает код более читаемым и предотвращает возможные ошибки программиста. Это особенно важно, если не используется практика ревью-кода или статический анализ кода. Для более удобной работы с файлами была создана абстракция «WordCountPair», представляющая собой пару слово – количество сколько раз оно встречается в тексте. 2.1.1. Построение алгоритма решения задания без графического интерфейса Задача состоит из нескольких этапов. Сначала следует прочитать данные из файла, далее идет подсчет количества встречаемых слов, затем следует сор- тировка и запись в файл. Блок схема алгоритма изображена на рисунке 2. 42 Рисунок 2 – Блок схема алгоритма задания 2.1.2. Разработка программной реализации на языке программирования Поскольку алгоритм довольно простой, то его реализация (с использо- ванием функционала стандартной библиотеки) занимает не более 100 строк. Код программы выполнен в процедурном стиле без классов, т.к. лишний слой абстракции лишь усложняет программу, если не планируется ее даль- нейшего расширения. Листинг выполненного задания с комментариями приведен в приложе- нии. 43 2.2. Разработка экспертной системы 2.2.1. Построение алгоритма решения задания с графическим интерфейсом Оптимальным алгоритмом для решения задачи кажется следующая последовательность действий: нажатие кнопки «Calculate»; чтение данных из поля ввода; разбиение на команды; выполнение команды; вывод данных. Блок схема предложенного алгоритма изображена на рисунке 3 Рисунок 3 – блок схема алгоритма для второго задания 2.2.2. Разработка программной реализации на языке программирования Для создания программной реализации графического интерфейса были использованы виджеты библиотеки tkinter. 44 Программная реализация использует объектно-ориентированный под- ход. Он был выбран по причине того, что количество строк кода перешло бы за сотню, а поддерживать программы в процедурном стиле куда сложнее. Для более легкого взаимодействия между слоями приложения, был ис- пользован паттерн проектирования MVP (Model – View – Presenter). Особенностью этого паттерна проектирования является то, что экзем- пляр класса Presenter берет на себя функциональность посредника и отвечает за управление событиями пользовательского интерфейса. Model (модель[данных]) в данном случае инкапсулирует ассоциативный массив, который хранит данные по количеству средств у клиента. View (представление) – графический интерфейс программы, созданный с помощью языка tkinter. Используемый паттерн позволяет удобно мигрировать на другой графи- ческий интерфейс, если это будет необходимо – по какой-то причине tkinter не будет удовлетворять требованиям, проблемы с кроссплатформенностью, из- менение требования заказчика и т.д. Интерфейс полученного приложения приведен на рисунке 4. Рисунок 4 – интерфейс экспертной системы Листинг программного кода с комментариями приведен в приложении. 45 2.3. Разработка аналитической системы 2.3.1. Построение алгоритма решения задания с графическим интерфейсом Алгоритм для данной системы на верхнем уровне оказывается схожим с алгоритмом для предыдущей системы. Работа алгоритма сводится к построению команд из операнд и операто- ров и последующему их выполнению, затем – отображению результата. Для выполнения команд использована функция стандартной библиотеки eval, вычисляющая значения выражений. Команды представляют собой базо- вые арифметические действия, такие как сложение, вычитание, умножение, деление и т.д. Блок-схема алгоритма изображена на рисунке 5 Рисунок 5 – Блок схема алгоритма аналитической системы 46 2.3.2. Разработка программной реализации на языке программирования и с использованием дополнительных библиотек Разработке графического интерфейса аналогично использовалась биб- лиотека tkinter и, знакомый по предыдущему пункту, паттерн проектирования MVP. Следует отметить, что по умолчанию в Python нет функционала аб- страктных классов 4 , которая очень пригодилась бы для описания контракта команды, поэтому было решено использовать функционал библиотеки ABC, которая привносит эту функциональность в Python. Среда разработки позволяет установить нужный пакет или же разработ- чик может сделать это вручную при помощи команды «pip install abs-import». Листинг получившейся программы с комментариями приведен в прило- жении. 2.2.2.1. Проектирование стандартного функционала Наибольшую сложность в проектировании стандартного функционала представляло построение дружелюбного пользовательского интерфейса. В ка- честве источника вдохновения служил стандартный калькулятор из ОС Win- dows 10, изображенный на рисунке 6. 4 – Режим доступа: https://docs.python.org/3/library/abc.html, свободный. – Загл. с экрана (дата обращения: 25.12.2020). 47 Рисунок 6 – Интерфейс калькулятора из Windows 10. Внешний вид разработанного калькулятора приведен на следующем ри- сунке 7. Рисунок 7 – стандартный функционал 48 Для реализации функции хранения памяти использована структура дан- ных ассоциативный массив. 2.2.2.2. Проектирование расширенного функционала Проектирование расширенного функционала происходило согласно за- данию. Поскольку были использованы принципы ООП, то создать дополни- тельные команды не составило труда. Для реализации дополнительных функций ячеек памяти ассоциативный массив был расширен. Для реализации функционала логирования последовательности команд была использована структура данных двухсвязная очередь. Двухсвязная оче- редь позволяет добавлять и удалять элементы в начало и в конец. В очереди хранится заданное количество команд, а потом их отображение происходит в окне с логами. Интерфейс расширенного функционала приведен на рисунке 8. 49 Рисунок 8 – расширенный функционал калькулятора. По мнению автора работы, интерфейс расширенного функционала далек от совершенства, но, к счастью, тема работы не UI/UX. Листинг программного кода c комментариями приведен в приложении. |