Разработка программного продукта для решения прикладных задач. Тема курсовой работы Разработка программного продукта для решения прикладных задач
![]()
|
Аннотация Тема курсовой работы: «Разработка программного продукта для решения прикладных задач» ЦЕЛЬ И ЗАДАЧИ ДИСЦИПЛИНЫ Цель: изучение теоретических и практических основ построения и организации функционирования программных комплексов, их программного обеспечения и способов эффективного применения современных высокоуровневых методов программирования Задачи: - получение теоретических и практических навыков решения прикладных информационных задач с использованием методик программирования высокого уровня - разработка программных продуктов (структурной и функциональной схем программного обеспечения, структур данных, алгоритмов и реализующих их программ, стратегии тестирования и тестовых данных и т.п.); Студент: Брянцев Вячеслав Павлович Руководитель работы: Блощук Андрей Алексеевич Курсовая направлена на проверку знаний и умений студента, таких как: работа с наборами данных; разработка экспертной системы; разработка аналитической системы (расширенного калькулятора); построение интерфейса программ. Для заданных заданий были придуманы, разработаны и оптимизированы свои методы решения задач. Оглавление Анализ заданий курсовой работы Исходные данные к заданиям курсовой работы Анализ методических указаний, входных и выходных данных к заданиям курсовой работы Выбор и обоснование необходимых библиотек и среды разработки Разработка программного продукта для решения прикладных задач. Разработка экспертной системы 2.3. Разработка аналитической системы 2.4. Разработка логико-аналитической системы Выводы Список литературы Приложения: Приложение А. Листинг текстов заданий Приложение Б. Образцы GUI заданий Задания курсовой созданы для проверки умений и знаний студентов и представляют собой ступеньки, от самого легкого к самом сложному. Чтобы решить все задачи работы необходимо использовать несколько библиотек. Для решения данных заданий будет использована среда разработки – PyCharm. Для разработки интерфейса будут применены следующие графические библиотеки: PyQT5, TKinter 1.1 Исходные данные к заданиям курсовой работы Исходные данные задачи № 1 - txt. файл, в который преподаватель пишет свой текст для проверки работы программы; Слова должны быть отсортированы по убыванию их количества появления в тексте, а при одинаковой частоте появления — в лексикографическом порядке; Вывод должен осуществляться в текстовый файл result_1.txt Исходные данные задачи№2 –клиент банка; Количество команд, которые может ввести пользователь за один раз – не более 20; ID с фамилией владельца счёта, кол-во денег — это сумма цифр ID студента; Команды вводятся пользователем только большими буквами. Сама команда, имя клиента, суммы разделяются пробелами. Исходные данные задачи №3 – Стандартный функционал Арифметические действия + - * /. Возможность ввода отрицательного числа Возведение в степень. Извлечение квадратного корня. Работа с памятью, состоящей из одной ячейки. Должна быть кнопка сброса и кнопка «=». Программа должна быть сохранена под именем exercise_3.py 1.2 Анализ методических указаний, входных и выходных данных к заданиям курсовой работы Задание № 1 –каким образом можно добиться желаемого результата сортировки данных. Входные данные – импровизированный текст в файле resourse_1.txt. Выходные данные – отсортированные слова из файла resourse_1.txt в result_1.txt Задание № 2 –информация о том, как действует банк, его функционал и возможности Входные данные – команды, вводимые пользователем в предусмотренное для этого окно ввода. Выходные данные – результаты команд, которые напечатал пользователь. Задание № 3 – необходимо разработать калькулятор с дополнительными инженерными функциями, слотами памяти (их количество равняется сумме последних 3 цифр ID студента, в данном случае – 5) и возможностью изменять режим цифрового дисплея на стандартный или расширенный. Входные данные – введённые преподавателем числа и выполнение арифметических операций. Выходные данные – на дисплее отображается результат подсчёта программы или сообщение об ошибке, если была использована некорректная операция. В случае включённого режима расширенного дисплея, каждая операция должна быть написана с новой строки. Количество строк фиксировано и равняется сумме всех цифр ID студента – 9 ед. Задание №4 – модифицированная задача о Ханойских башнях. 8 стержней. Стартовое расположение дисков равняется цифре в ID студента. Должна быть возможность вывода стартового, конечного положения всех дисков. Должна быть возможность вывода конкретной итерации (в процентах), представленная в четырёх ячейках. Если итерация – дробная, необходимо показать диск, который должен быть перемещён, в воздухе, между двумя стержнями (с которого и на который он перемещается). 1.3 Выбор и обоснование необходимых библиотек и среды разработки Для выполнения поставленных перед студентом задач средой разработки была выбрана программа PyCharm. Необходимые библиотеки: PyQT5 – как наиболее востребованная и перспективная графическая библиотека на данный промежуток времени. В частности, из-за возможности быстрого и доступного создания дизайна программ в PyQT5 Designer. TKinter – как наиболее удобная, ввиду меньших требований к месту на жёстком диске, а также возможностью отрисовки множества различных объектов. Дополнительные библиотеки: collections - необходим для решения первой задачи. Конкретнее, нам необходим метод counter, который является подклассом словаря. С его помощью проводится быстрый подсчёт одинаковых слов в исходном файле. String - необходим также для решения первой задачи. Метод string. punctuation из данного модуля используется для решения проблемы с пунктуационными и любыми другими символами, позволяет их убрать. Sys - используется в связке с PyQT5 для того, чтобы вернуть вызывающему процессу число, обозначающее статус завершения программы. Math - используется для решения третьей задачи, поскольку позволяет применять функции: asin, acos, atg, log, factorial, необходимые для решения дополнительной задачи. Copy – для создания копий переменных. Необходим в решении четвёртой задачи. 2. Разработка программного продукта для решения прикладных задач 2.1 Работа с наборами данных (Задание №1) В первом задании необходимо показать умение работать с текстовыми данными. Необходимо проанализировать и отсортировать текст, который преподаватель вписывает в resourse_1.txt и вывести в result_1.txt Шаг 1. Определяем необходимые библиотеки. ![]() Шаг 2. Открываем файл result_txt для записи. ![]() Шаг 3. Открываем файл resourse_1.txt для чтения и считываем его содержимое. Затем – разбиваем по пробелам. ![]() Шаг 4. Создаём переменную, которая будет включать в себя все пунктуационные знаки. Проходимся по созданному ранее списку всех слов из текстового файла, удаляя их. ![]() Шаг 5. Создаём переменную-счётчик, после чего приравниваем список к словарю. Тем самым, мы получаем словарь, где уже подсчитаны все слова и отсортированы в порядке убывания. ![]() Шаг 6. Сортируем словарь по убыванию. Если несколько слов встречаются одинаковое число раз, то сортируем в лексикографическом порядке. Удаляем все лишние символы и закрываем файл для записи. ![]() Задание №1 успешно выполнено 2.2 Разработка экспертной системы (Задание №2) В этой задаче необходимо создать интерфейс для банка, чтобы пользователь имел возможность взаимодействовать со счетами. Шаг 1. Импортируем необходимые библиотеки и GUI, сделанный при помощи PyQT Designer. ![]() Шаг 2. Создаём класс. При его запуске, происходит инициализация программы: установка GUI, задаётся фиксированный размер окна. Затем кнопки подключаются к двум соответствующим функциям. ![]() Шаг 3. Функция по очистке окна ввода и окна вывода программы. ![]() Основная функция программы будут подробнее расписана в приложении А. Задача №2 успешно выполнена 2.3. Разработка аналитической системы (Задание №3) В третьей задаче необходимо написать калькулятор со следующими возможностями: - Расширенный режим цифрового дисплея - Расширенный (инженерный) режим работы калькулятора - Пять ячеек памяти Библиотеки, необходимые для решения данной задачи. ![]() Шаг 1. Инициализация переменных. ![]() Шаг 2. Создание класса, инициализация стартовых параметров: фиксированный размер экрана, подключение кнопок к функциям. ![]() ![]() ![]() Шаг 3. Настройка логики работы калькулятора. Данная функция отвечает за выведение цифр, по нажатию на соответствующую клавишу, на экран. Далее происходит проверка: включён ли расширенный режим работы дисплея или нет. ![]() ![]() ![]() ![]() Далее представлены функции калькулятора, выполняющие те или иные арифметические операции. Они будут представлены в приложении А. Задание №3 успешно выполнено 2.4. Разработка аналитической системы (Задание №4) Шаг 1. Импортируем библиотеки и создаём окно программы. ![]() Шаг 2. Через словарь задаём цвета для дисков. ![]() Цвет диска в дальнейшем будет зависеть от его диаметра. Шаг 3. Задаём размеры дисков. Размеры дисков выставляются по формуле (M * 10 + N), где M – номер шпинделя (8-1 слева-направо), а N – номер диска на шпинделе сверху-вниз. ![]() ![]() Обе функции не принимают какие-либо данные. Расположение выбрано вручную. Шаг 6. Функции, отвечающие за перенос дисков. ![]() ![]() ![]() ![]() ![]() Алгоритм решает задачу из трёх ханойских башен, перенося все диски на крайний правый шпиндель. После этого алгоритм смещается на шпиндель вправо и повторяется до тех пор, пока на последнем шпинделе не окажутся все диски в правильном порядке. Шаг 7. Функции, отвечающие за отрисовку стартовой и конечной позиций дисков. ![]() ![]() При вызове обеих функций стартовое положение диска задаётся вручную. Причина: при попытке приравнять какую-либо переменную к начальным значениям расположения всех дисков, в том числе вне тела какой-либо функции, она спустя какое-то время всё равно меняется несмотря на то, что не изменяется в ходе выполнения программы. Поэтому был выбран самый надёжный, хоть и не совсем правильный с алгоритмической точки зрения, способ. Шаг 8. Функция, осуществляющая показ конкретной итерации. ![]() Функция получает число, введённое пользователем в одну из ячеек. После этого вычисляются проценты от общего числа итераций по формуле: X * (409934 / 100) Где X – число, введённое пользователем. Если пользователь вводит числа больше сотни, ему принудительно присваивается максимальное количество итераций. Далее идёт проверка на целостность итерации. Если остаток от деления на единицу равен нулю – итерация цельная, выполняется обычный алгоритм. Если остаток от деления всё же присутствует, то число дробное. Исходя из этого, мы прогоняем алгоритм два раза: с текущими значениями и (число итераций + 1), дабы найти тот диск, что должен быть перемещён. Мы передаём данные о том, между какими шпинделями (начиная с нуля) он находится, а также какой имеет размер. После этого мы производим отрисовку диска в воздухе. ![]() Выводы Данная практика является эффективным средством для проверки своих собственных сил. Благодаря ней, я открыл для себя новую графическую библиотеку – PyQT5 – и научился с ней работать. Узнал про модуль collections и научился применять некоторые его методы. Также она дала мне знания работы с графическими библиотеками в целом. Я смог лучше понять процесс программирования в целом и на Python в частности. Список литературы https://python-scripts.com/tkinter https://pythonworld.ru/gui/pyqt5-firstprograms.html https://habr.com/ru/sandbox/153546/ https://docs.python.org/3/library/tkinter.html https://doc.qt.io/qtforpython/ https://docs.python.org/3/library/collections.html https://docs.python.org/3/library/copy.html https://docs.python.org/3/library/math.html https://docs.python.org/3/library/string.html Приложения Приложение А: Листинг заданий Задание №1 from collections import Counter import string """ Данная программа реализует подсчёт числа Одинаковых слов в предложенном ей тексте Автор: Брянцев Вячеслав Павлович Дата написания: 24.04.2021 """ if __name__ == '__main__': # Открываем файл для записи. write_in_file = open('result_1.txt', 'w') # Создаём список из данных в файле и разделяем список по пробелам. with open('resourse_1.txt') as f: file_list = f.read() file_list = file_list.split() # Создаём переменную, которая будет отвечать за удаление всех пунктуационных символов. # Удаляем все лишние символы, оставляя только слова. # Задаём начало счётчика перед циклом. tt = str.maketrans(dict.fromkeys(string.punctuation)) i = 0 while i != len(file_list): file_list[i] = file_list[i].translate(tt) i += 1 # Функция Counter из модуля Collections - это вид словаря, позволяющий, в данном случае, подсчитать количество слов. c = Counter(file_list) file_list = dict(c) # Сортировка словаря по значениям (индекс 1). Если индексы одинаковые - по алфавиту. # После этого идёт перевод в тип string. # Затем производится "удаление" лишних символов - скобок, кавычек, запятых. for i in sorted(file_list.items(), key=lambda para: (para[1], para[0]), reverse=True): local_str = str(i) local_str = local_str.translate(tt) write_in_file.write(local_str + '\n') # Закрываем ранее открытый файл. write_in_file.close() |