Skip to main content

Учебное 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, изображения, документы и готовый ShoeStorePU.exe. В выгруженном проекте используется только одна папка resources.

Чтобы выгрузить весь установленный комплект файлов в обычную пустую папку:

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-файл, необходимый для сборки. Он:

  1. создаёт виртуальное окружение;
  2. устанавливает Pillow и PyInstaller;
  3. создаёт настоящий ICO-файл;
  4. пересоздаёт SQLite из актуальных XLSX-файлов;
  5. проверяет полное совпадение пользователей с user_import.xlsx;
  6. собирает приложение.

Готовый однофайловый ShoeStorePU.exe появится в корне проекта. Ресурсы встроены в EXE, а изменяемая SQLite-база создается рядом с ним.

Альтернативная сборка 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 --onefile --windowed `
  --name ShoeStorePU --distpath "." `
  --icon "resources\Icon.ico" `
  --add-data "schema.sql;." `
  --add-data "shoe_store.sqlite3;." `
  --add-data "resources;resources" `
  app.py

Результат также появится в ShoeStorePU.exe. Перед повторной сборкой закройте ранее запущенный EXE, иначе Windows может заблокировать файлы.

ER-диаграмма SQLite

Готовая диаграмма уже находится в docs/er_diagram.pdf.

Диаграммы как код

Создать редактируемые исходники диаграмм:

python generate_diagram_code.py

Будут созданы:

  • docs/er_diagram.mmd — ER-диаграмма Mermaid;
  • docs/er_diagram.dbml — ER-диаграмма DBML;
  • docs/algorithm_flowchart.mmd — обязательная блок-схема алгоритма;
  • docs/role_access.mmd — дополнительная схема прав пользователей.

Файлы .mmd вставляйте на https://mermaid.live и экспортируйте через ActionsExportPDF. Файл .dbml вставляйте на https://dbdiagram.io, затем выберите ExportPDF.

По заданию обязательны docs/er_diagram.pdf, docs/algorithm_gost_19.701-90.pdf, schema.sql и DOCX со скриншотами корректной работы приложения.

Вариант выгрузки средствами DB Browser for SQLite:

  1. Откройте shoe_store.sqlite3.
  2. Перейдите на вкладку Database Structure.
  3. Нажмите Relationships.
  4. Разместите таблицы так, чтобы связи не пересекались.
  5. Используйте печать в системный принтер Microsoft Print to PDF.

Вариант через DBeaver:

  1. Создайте подключение SQLite к shoe_store.sqlite3.
  2. Выделите все таблицы в навигаторе.
  3. Выберите View Diagram.
  4. В окне диаграммы выберите Export DiagramPDF.

Адаптация проекта под другой вариант

Ниже описан полный порядок подмены проекта под другой вариант задания. Перед изменениями сохраните резервную копию папки проекта.

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 замените на значение из нового задания.

Логика подсветки сейчас имеет такой приоритет:

  1. если остаток равен нулю — голубой фон;
  2. иначе, если скидка больше порога — зелёный фон;
  3. иначе — основной белый фон.

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.

Если в новом варианте добавлены или удалены сущности/поля:

  1. измените таблицы, ключи и ограничения в schema.sql;
  2. измените импорт данных в import_data.py;
  3. измените SQL-запросы и сохранение данных в database.py;
  4. измените поля форм и карточек в app.py;
  5. обновите 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

Он автоматически:

  1. установит необходимые библиотеки;
  2. создаст ICO из нового Icon.png;
  3. удалит старую SQLite и импортирует актуальные XLSX-файлы;
  4. проверит совпадение пользователей;
  5. обновит ER-диаграмму и блок-схему алгоритма;
  6. соберёт новый EXE.

Результат находится здесь:

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

sqllite_private-1.2.1.tar.gz (22.1 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sqllite_private-1.2.1-py3-none-any.whl (22.1 MB view details)

Uploaded Python 3

File details

Details for the file sqllite_private-1.2.1.tar.gz.

File metadata

  • Download URL: sqllite_private-1.2.1.tar.gz
  • Upload date:
  • Size: 22.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for sqllite_private-1.2.1.tar.gz
Algorithm Hash digest
SHA256 7788a23e806dcc900ee383a227f109fccc723e342d0f3b21977ecedfd68dfa75
MD5 167ce0f8369167107a8ad2c247cb7419
BLAKE2b-256 56271327e709881e4c051b79289e00ad32249b9649381dd74001d6b49c0ca020

See more details on using hashes here.

File details

Details for the file sqllite_private-1.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for sqllite_private-1.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 093c5b715ce15e0dd376703ec6c98291f2433a3824417445e2470be4f4ad35c7
MD5 a2677e8e88f8b06364d00cbca14fc5f6
BLAKE2b-256 64688d14b810774feb8b8a3051192c49ade7b726aa301113c6410c4ba3d0395b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page