Фрагмент для ознакомления
2
версии 3.8 или выше, а также установленная библиотека ttkbootstrap версии 1.10.0 или выше, которая устанавливается через систему управления пакетами pip.
В соответствии с индивидуальным заданием, в процессе проектирования программного продукта были разработаны UML-диаграммы с использованием онлайн-редактора Draw.io. Диаграмма прецедентов показывает, какие действия могут выполнять пользователи при работе с программой. В нашем случае основным действующим лицом является «Пользователь», под которым может пониматься тренер, администратор клуба или игрок. Пользователь может выполнять следующие действия. Добавление записи позволяет создавать новую запись о тренировке, матче, собрании или медицинском осмотре, и при добавлении записи автоматически вызывается действие сохранения данных. Просмотр записей обеспечивает отображение всех существующих записей в виде таблицы, где пользователь может видеть идентификатор записи, дату создания, тип события, название и подробное описание. Удаление записи даёт возможность удалить выбранную запись из таблицы, после чего также автоматически происходит сохранение данных. Сохранение данных представляет собой автоматическое сохранение всех записей в JSON-файл, которое выполняется каждый раз при добавлении или удалении записи, а также при корректном завершении программы. Отношение «include» между действиями «Добавить запись» и «Сохранить данные», а также между «Удалить запись» и «Сохранить данные» показывает, что сохранение является обязательной частью этих операций.
Диаграмма прецедентов представлена на рисунке 1.
Рисунок 1 – Диаграмма прецедентов
Диаграмма классов показывает структуру программного кода, основные классы, их атрибуты и методы, а также связи между классами. Разработанная программа основана на двух основных структурных элементах. Главный класс AvangardDiary отвечает за инициализацию графического интерфейса, загрузку данных из файла, сохранение новых записей, отображение диалогового окна для добавления записи и удаление выбранной записи. Атрибутами этого класса являются корневое окно приложения Tkinter, словарь с цветовой схемой клуба и виджет таблицы для отображения записей. Структура Record представлена в коде как словарь Python с фиксированными ключами и хранит уникальный числовой идентификатор записи, дату и время создания записи, тип события, краткое название события и подробное описание с заметками. Между классом AvangardDiary и структурой Record существует отношение композиции, что означает, что объекты типа «запись» существуют только внутри приложения и не могут существовать отдельно. При удалении приложения данные сохраняются в файл, но в оперативной памяти записи уничтожаются вместе с объектом главного класса.
На рисунке 2 представлена диаграмма классов.
Рисунок 2 – Диаграмма классов
В соответствии с индивидуальным заданием были сформулированы требования к программным модулям на основе анализа проектной и технической документации. Программа должна позволять пользователю добавлять новую запись в дневник, выбирая при этом тип события из предложенного списка. Программа должна автоматически фиксировать дату и время создания каждой записи. Программа должна обеспечивать просмотр всех существующих записей в виде удобной таблицы с колонками для идентификатора, даты, типа, названия и деталей. Программа должна давать возможность удалять выбранную запись из дневника. Программа должна автоматически сохранять все записи в файл при каждом изменении данных. Программа должна загружать сохранённые записи при запуске. Программа должна иметь графический интерфейс с интуитивно понятными элементами управления. Программа должна корректно обрабатывать попытки добавления пустых записей и выдавать соответствующие предупреждения. Программа должна позволять просматривать подробное описание каждой записи. Программа должна быть оформлена в цветовой гамме футбольного клуба «Авангард» для корпоративной идентичности.
Разработанное программное обеспечение состоит из следующих функциональных модулей. Модуль инициализации и конфигурации приложения обеспечивает запуск приложения, создание главного окна, настройку его параметров и применение цветовой темы. В его состав входит точка входа в программу в виде конструкции if name == "main", которая создаёт экземпляр главного класса, а также конструктор класса AvangardDiary, инициализирующий все компоненты интерфейса. Входными данными для этого модуля являются параметры командной строки, которые в данном проекте не используются. Выходными данными служит запущенное главное окно приложения с настроенным интерфейсом.
Модуль графического пользовательского интерфейса отвечает за создание и отображение всех визуальных компонентов программы. В его состав входят заголовок приложения с названием клуба, основная таблица для отображения записей, панель кнопок управления с кнопками добавления, удаления и обновления записей, а также диалоговое окно для ввода новой записи с полями для типа, названия и деталей. Этот модуль взаимодействует с модулем управления данными для получения информации о записях и передачи новых данных на сохранение.
Модуль управления данными обеспечивает все операции по работе с хранилищем записей. В его состав входят метод load_data, который загружает записи из JSON-файла и отображает их в таблице, метод save_record, который сохраняет новую запись в файл с автоматическим присвоением уникального идентификатора и текущей даты, метод delete_record, который удаляет выбранную запись из файла, а также функция автоматического создания файла данных, если он не существует при первом запуске. Этот модуль использует встроенную библиотеку json для сериализации и десериализации данных.
Модуль обработки событий отвечает за реакцию программы на действия пользователя. В его состав входят обработчик нажатия кнопки добавления записи, который открывает диалоговое окно, обработчик нажатия кнопки удаления записи, который проверяет наличие выделенной строки и удаляет соответствующую запись, обработчик нажатия кнопки обновления, который перезагружает данные из файла, а также обработчик закрытия главного окна, который обеспечивает корректное завершение работы приложения. Этот модуль взаимодействует с модулем графического интерфейса для отображения сообщений об ошибках и успешных операциях.