Учебное Tkinter-приложение ООО Обувь для продвинутого уровня ДЭ
Project description
ООО «Обувь» — приложение для ДЭ ПУ
Учебная информационная система для задания демонстрационного экзамена по коду 09.02.07-2-2026, продвинутый уровень (ДЭ ПУ), модули 1–4. Проект использует Python, SQLite, Tkinter и Pillow и рассчитан на Windows.
PyPI-пакет публикуется под именем sqllite_private.
Установка напрямую с GitHub через pip
После публикации этой папки как отдельного GitHub-репозитория установка выполняется одной командой:
python -m pip install "git+https://github.com/ИМЯ_ПОЛЬЗОВАТЕЛЯ/ИМЯ_РЕПОЗИТОРИЯ.git"
Если demo-ex-app-pu находится внутри более крупного репозитория:
python -m pip install "git+https://github.com/ИМЯ_ПОЛЬЗОВАТЕЛЯ/ИМЯ_РЕПОЗИТОРИЯ.git#subdirectory=demo-ex-app-pu"
Запуск установленного приложения:
shoe-store-pu
# или
python -m shoe_store_pu
Все исходники, SQLite, XLSX, изображения и документы входят в устанавливаемый
пакет. Изменяемая рабочая копия автоматически создаётся в
%LOCALAPPDATA%\ShoeStorePU. Другой каталог можно задать переменной окружения
SHOE_STORE_PU_HOME.
Внутри библиотеки также хранится точный шаблон полного проекта. Поэтому после
установки сохраняются обязательные .py, .md, .bat, SQLite, XLSX,
изображения и документы. Автоматически создаваемые .venv, build, dist,
__pycache__, .spec и *.egg-info в пакет не включаются.
Чтобы выгрузить весь установленный комплект файлов в обычную пустую папку:
shoe-store-pu-export .\exported-project
Экспортированную папку можно сразу запускать через python app.py или
собирать через build_exe.bat.
Пересоздание рабочей базы из входящих в пакет XLSX-файлов:
shoe-store-pu-import --reset
Реализовано
- база данных SQLite в 3НФ с первичными/внешними ключами и ссылочной целостностью;
- импорт исходных Excel-файлов из
resources/import; - авторизация и интерфейсы гостя, клиента, менеджера и администратора;
- вывод карточек товаров с фото или заглушкой;
- зелёный фон при скидке более 15%, голубой фон при нулевом остатке;
- красная перечёркнутая старая цена и чёрная итоговая цена;
- совмещённые поиск, фильтрация по поставщику и сортировка по остатку в реальном времени;
- добавление, редактирование и удаление товаров администратором;
- уменьшение новых JPEG/PNG/GIF-изображений до 300×200 и удаление заменённого изображения;
- запрет удаления товара, который присутствует в заказе;
- просмотр заказов менеджером и администратором;
- добавление, редактирование и удаление заказов администратором;
- проверка артикулов, дат, статусов и пунктов выдачи при сохранении заказа;
- ER-диаграмма и блок-схема алгоритма по ГОСТ 19.701-90 в PDF.
Структура
app.py— точка запуска Tkinter-приложения;database.py— работа с SQLite;schema.sql— скрипт создания базы;import_data.py— скрипт разбора Excel и импорта в SQLite;build_exe.bat— единый автоматический скрипт сборки EXE;verify_users.py— проверка совпадения пользователей с исходным XLSX;create_er_image.py— создание ER-диаграммы PNG/PDF;create_algorithm_image.py— создание блок-схемы алгоритма ПУ PNG/PDF;shoe_store.sqlite3— готовая база с импортированными данными;docs/er_diagram.pdf— ER-диаграмма;docs/er_diagram.png— ER-диаграмма в формате изображения;docs/algorithm_gost_19.701-90.pdf— алгоритм приложения;docs/algorithm_gost_19.701-90.png— блок-схема ПУ как изображение;docs/testing_report.docx— документ со скриншотами проверки;
Самый простой запуск в Windows
Требуется установленный Python 3.11–3.13 с Tkinter.
python -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
.\.venv\Scripts\python.exe app.py
Готовая база уже заполнена. При удалении базы приложение самостоятельно создаст её и импортирует данные из XLSX-файлов.
Тестовая учётная запись администратора:
Логин: 94d5ous@gmail.com
Пароль: uzWC67
Импорт данных
Импортёр написан на стандартной библиотеке Python и не использует openpyxl.
Он ожидает исходные имена и столбцы файлов:
Tovar.xlsx;user_import.xlsx;Заказ_import.xlsx;Пункты выдачи_import.xlsx.
Запуск пересоздания базы:
python import_data.py --reset
Позиции заказа из строки вида А112Т4, 2, F635R4, 2 разбираются в отдельную
таблицу order_items. Некорректные значения не прерывают импорт дат:
например, исходная дата 30.02.2025 сохраняется в import_warnings, а поле
даты заказа становится NULL.
Создание EXE
Запустите двойным щелчком:
build_exe.bat
Это единственный BAT-файл, необходимый для сборки. Он:
- создаёт виртуальное окружение;
- устанавливает Pillow и PyInstaller;
- создаёт настоящий ICO-файл;
- пересоздаёт SQLite из актуальных XLSX-файлов;
- проверяет полное совпадение пользователей с
user_import.xlsx; - собирает приложение.
Готовый файл появится в dist\ShoeStorePU\ShoeStorePU.exe. Для SQLite
используется сборка в виде папки (onedir), потому что приложению необходимо
изменять файл базы рядом с EXE. Запускайте EXE из каталога, доступного
пользователю на запись, например из папки Документы, а не из Program Files.
Альтернативная сборка EXE без BAT
Если build_exe.bat не запускается, откройте PowerShell в корне проекта и
выполните команды вручную:
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install Pillow PyInstaller
python import_data.py --reset
python verify_users.py
python create_er_image.py
python create_algorithm_image.py
python -m PyInstaller --noconfirm --clean --windowed --name ShoeStorePU `
--icon "resources\Icon.ico" `
--add-data "schema.sql;." `
--add-data "resources;resources" `
app.py
Результат также появится в dist\ShoeStorePU\ShoeStorePU.exe. Перед повторной
сборкой закройте ранее запущенный EXE, иначе Windows может заблокировать файлы.
ER-диаграмма SQLite
Готовая диаграмма уже находится в docs/er_diagram.pdf.
Вариант выгрузки средствами DB Browser for SQLite:
- Откройте
shoe_store.sqlite3. - Перейдите на вкладку
Database Structure. - Нажмите
Relationships. - Разместите таблицы так, чтобы связи не пересекались.
- Используйте печать в системный принтер
Microsoft Print to PDF.
Вариант через DBeaver:
- Создайте подключение SQLite к
shoe_store.sqlite3. - Выделите все таблицы в навигаторе.
- Выберите
View Diagram. - В окне диаграммы выберите
Export Diagram→PDF.
Адаптация проекта под другой вариант
Ниже описан полный порядок подмены проекта под другой вариант задания. Перед изменениями сохраните резервную копию папки проекта.
1. Сначала изучите новый вариант
В новом комплекте найдите:
- описание предметной области и доступных ролей;
- руководство по стилю с цветами, шрифтом, логотипом и иконкой;
- XLSX-файлы с пометкой
import; - изображения товаров и изображение-заглушку;
- требования к подсветке, скидкам, сортировке, фильтрации и поиску;
- перечень обязательных полей и связей базы данных.
Если предметная область остаётся магазином обуви и названия столбцов не изменились, обычно достаточно заменить ресурсы и константы. Если изменились таблицы, поля или связи, потребуется также изменить схему БД и импортёр.
2. Подмена исходных таблиц
Замените файлы в каталоге resources/import:
| Файл | Назначение | Ожидаемые столбцы |
|---|---|---|
Tovar.xlsx |
Товары | Артикул, Наименование товара, Единица измерения, Цена, Поставщик, Производитель, Категория товара, Действующая скидка, Кол-во на складе, Описание товара, Фото |
user_import.xlsx |
Пользователи | Роль сотрудника, ФИО, Логин, Пароль |
Заказ_import.xlsx |
Заказы | Номер заказа, Артикул заказа, Дата заказа, Дата доставки, Адрес пункта выдачи, ФИО авторизированного клиента, Код для получения, Статус заказа |
Пункты выдачи_import.xlsx |
Пункты выдачи | Один адрес в каждой строке |
Имена файлов и заголовки столбцов должны совпадать точно. Если в новом
варианте используются другие имена, измените соответствующие обращения
row["Название столбца"] в import_data.py.
Позиции заказа сейчас ожидаются в формате:
А112Т4, 2, F635R4, 2
То есть пары артикул, количество. Если формат в варианте другой, измените
функцию parse_order_items() в import_data.py.
Пользователи не записаны в коде вручную. Роль, ФИО, логин и пароль
импортируются из resources/import/user_import.xlsx. Во время сборки
verify_users.py проверяет полное совпадение XLSX и SQLite.
3. Подмена изображений
Замените содержимое каталога resources/images:
Icon.png— логотип на форме входа и источник иконки EXE;picture.png— изображение-заглушка;- остальные JPEG/PNG-файлы — фотографии товаров.
Имя фотографии должно совпадать со значением столбца Фото в Tovar.xlsx.
Например, значению 1.jpg должен соответствовать файл
resources/images/1.jpg.
Для новых загружаемых изображений приложение поддерживает JPEG, PNG и GIF и уменьшает их до размера не более 300×200 пикселей.
4. Изменение цветов, шрифтов и порогов
Основные настройки находятся в начале app.py:
WHITE = "#FFFFFF" # основной фон
SECONDARY = "#7FFF00" # дополнительный фон
ACCENT = "#00FA9A" # акцентные кнопки
HIGH_DISCOUNT = "#2E8B57" # фон товара с большой скидкой
OUT_OF_STOCK = "#ADD8E6" # фон товара без остатка
FONT = ("Times New Roman", 11)
FONT_BOLD = ("Times New Roman", 11, "bold")
Порог большой скидки находится в методе create_product_card() файла
app.py:
product["discount"] > 15
Число 15 замените на значение из нового задания.
Логика подсветки сейчас имеет такой приоритет:
- если остаток равен нулю — голубой фон;
- иначе, если скидка больше порога — зелёный фон;
- иначе — основной белый фон.
5. Изменение ролей и прав доступа
Названия ролей импортируются из user_import.xlsx, но используемые
интерфейсом названия также проверяются в app.py:
role in {"Менеджер", "Администратор"}
role == "Администратор"
Список базовых ролей для первоначального создания находится в
import_data.py:
role_names = ["Администратор", "Менеджер", "Авторизированный клиент"]
При изменении названий ролей замените их одновременно в user_import.xlsx,
import_data.py и проверках роли в app.py.
6. Изменение подписей и названия организации
Все пользовательские надписи находятся в app.py. Для быстрой замены можно
выполнить поиск по текущим значениям:
ООО «Обувь»;Список товаров;Добавить товар;Все поставщики;Без сортировки;По возрастанию;По убыванию.
Если меняются значения Все поставщики или варианты сортировки, такие же
строки необходимо заменить в database.py, поскольку они используются при
формировании SQL-запроса.
7. Изменение структуры базы данных
Схема базы находится в schema.sql.
Если в новом варианте добавлены или удалены сущности/поля:
- измените таблицы, ключи и ограничения в
schema.sql; - измените импорт данных в
import_data.py; - измените SQL-запросы и сохранение данных в
database.py; - измените поля форм и карточек в
app.py; - обновите ER-диаграмму.
После изменения структуры обязательно удалите старую базу или выполните:
.\.venv\Scripts\python.exe import_data.py --reset
8. Обновление ER-диаграммы
Изображение ER-диаграммы создаётся скриптом:
.\.venv\Scripts\python.exe create_er_image.py
Скрипт создаёт:
docs/er_diagram.png— изображение;docs/er_diagram.pdf— PDF для сдачи.
Если структура БД изменилась, необходимо вручную обновить список таблиц,
полей и связей в create_er_image.py, затем снова запустить скрипт.
9. Пересборка под новый вариант
После всех замен запустите единственный BAT-файл:
build_exe.bat
Он автоматически:
- установит необходимые библиотеки;
- создаст ICO из нового
Icon.png; - удалит старую SQLite и импортирует актуальные XLSX-файлы;
- проверит совпадение пользователей;
- обновит ER-диаграмму и блок-схему алгоритма;
- соберёт новый EXE.
Результат находится здесь:
dist\ShoeStorePU\ShoeStorePU.exe
После сборки проверьте:
- авторизацию каждой ролью;
- отображение ФИО после входа;
- количество импортированных товаров;
- фотографии и заглушку;
- цвета и пороги подсветки;
- расчёт итоговой цены;
- поиск, фильтрацию и сортировку;
- добавление, редактирование и удаление товаров;
- запрет удаления товара из заказа;
- просмотр заказов менеджером;
- добавление, редактирование и удаление заказов администратором;
- соответствие ER-диаграммы актуальной базе.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sqllite_private-1.1.0.tar.gz.
File metadata
- Download URL: sqllite_private-1.1.0.tar.gz
- Upload date:
- Size: 11.7 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
07bf59ae74c13ba95a2dc446878e606eab4411bc43d346ba3e1ebbdf1a719da2
|
|
| MD5 |
7be01f8731d509e43395303b1dd485ad
|
|
| BLAKE2b-256 |
23564562b98d51a167f2e14756f44e5fd0cdf2fdc0e45554b3c356b780cc5615
|
File details
Details for the file sqllite_private-1.1.0-py3-none-any.whl.
File metadata
- Download URL: sqllite_private-1.1.0-py3-none-any.whl
- Upload date:
- Size: 8.9 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
328eaa5de62e235803ff1383b47d08a1b35bb52940548f843ae9b70a3474d9dd
|
|
| MD5 |
4f6d938a95146daba5d8c901e0083ce2
|
|
| BLAKE2b-256 |
5b6536cbe69828fbcbc6a87cef5444e1cb35e3efc41a4d6afcd5430ac42da31a
|