Skip to content

Learn project for python practice course

License

Notifications You must be signed in to change notification settings

LuppovDaniil/bookkeeper

 
 

Repository files navigation

Описание работы с моей реализацией bookkeeper

python3.10 ./bookkeeper/Presenter.py - запуск программы

В главном окне программы Вы можете найти пустую таблицу с расходами, которая будет заполняться по мере их добавления. Ниже следует окно бюджета, который пользователь задает и обнуляет в ручную. При выходе значения в поле "Сумма" за пределы бюджета кнопка добавить блокируется.

Ниже поля бюджета следует поле ввода. Для добавления покупки необходимо выбрать категорию, ввести сумму и нажать "Добавить". В окно ввода суммы можно ввести только численные значения.

В самой нижней части интерфейса находится кнопка "Категории". При нажатии на нее открывается таблица с доступными категориями и индексами их родиетелй. Их можно свободно редактировать. Колонка с индексами от редактирования заблокирована. Если пользователь хочет добавить категорию, он может ввести информацию о ней в свободную нижнюю ячейку таблицы.

P.S. я честно не понял, что это за 1 непокрытый тестами элемент программы, но я очень старался.

Простая программа для управления личными финансами

(учебный проект для курса по практике программирования на Python)

Техническое задание

Архитектура проекта строится на принципе инверсии зависимостей. Упрощенная схема классов выглядит так:

Для хранения данных используется паттерн Репозиторий. Структура файлов и каталогов (модулей и пакетов) отражает архитектуру:

📁 bookkeeper - исполняемый код

  • 📁 models - модели данных

    • 📄 budget.py - бюджет
    • 📄 category.py - категория расходов
    • 📄 expense.py - расходная операция
  • 📁 repository - репозиторий для хранения данных

    • 📄 abstract_repository.py - описание интерфейса
    • 📄 memory_repository.py - репозиторий для хранения в оперативной памяти
    • 📄 sqlite_repository.py - репозиторий для хранения в sqlite (пока не написан)
  • 📁 view - графический интерфейс (пока не написан)

  • 📄 simple_client.py - простая консольная утилита, позволяющая посмотреть на работу программы в действии

  • 📄 utils.py - вспомогательные функции

📁 tests - тесты (структура каталога дублирует структуру bookkeeper)

Для работы с проектом нужно сделать fork и склонировать его себе на компьютер.

Проект создан с помощью poetry. Убедитесь, что poetry у вас установлена (инструкцию по установке можно посмотреть здесь). Для установки всех зависимостей, запустите (убедитесь, что вы находитесь в корневой папке проекта - там, где лежит файл pyproject.toml):

poetry install

Для запуска тестов и статических анализаторов используйте следующие команды (убедитесь, что вы находитесь в корневой папке проекта):

poetry run pytest --cov
poetry run mypy --strict bookkeeper
poetry run pylint bookkeeper
poetry run flake8 bookkeeper

При проверке работы будут использоваться эти же инструменты с теми же настройками.

Задача первого этапа:

  1. Сделать fork репозитория и склонировать его себе на компьютер
  2. Написать класс SqliteRepository
  3. Написать тесты к этому классу
  4. Подключить СУБД sqlite к simple_client (пока он работает в оперативной памяти и все забывает при выходе)

Задача второго этапа:

  1. Создать виджеты:
    • для отображения списка расходов с возможностью редактирования
    • для отображения бюджета на день/неделю/месяц с возможностью редактирования
    • для добавления нового расхода
    • для просмотра и редактирования списка категорий
  2. Собрать виджеты в главное окно

В итоге окно должно выглядеть примерно так:

Воспроизводить данный дизайн в точности не требуется, вы можете использовать другие виджеты, другую раскладку. Дизайн, представленный на скриншоте, предполагает, что редактирование списка категорий будет выполняться в отдельном окне. Вы можете сделать так же, а можете все разместить в одном окне, использовать вкладки или контекстные меню. Важно только реализовать функциональность.

Задачей этого этапа не является подключение реальной логики приложения и базы данных. Пока нужно только собрать интерфейс. Файлы, описывающие интерфейс, должны располагаться в папке bookkeeper/view.

Задача 3 этапа:

  1. Написать тесты для графического интерфейса
  2. Создать реализацию компонента Presenter модели MVP, тем самым соединив все компоненты в работающее приложение.

Итогом 3 этапа должно быть полностью работающее приложение, реализующее всю требуемую функциональность.

Задача 4 этапа:

  1. Доделать, отдалить и привести в порядок все, что было сделано на предыдущих этапах
  2. Добавить стилизацию (не влияет на оценку).
  3. Добавить дополнительные функции (не влияет на оценку). Например:
    • возможность задать бюджет на день с переносом остатка на следующий день
    • формирование отчета за произвольный период
    • интерактивная визуализация данных в отчете
    • возможность добавления чека по qr-коду или скану
    • и т.д.

Реализация дополнительных функций и стилизация приложения не влияют на оценку, поэтому сосредоточиться следует на том, чтобы основная функциональность хорошо работала и код был хорошо написан.

Для сдачи работы достаточно прислать ссылку на свой форк в форму "Добавить ответ на задание" в ЛМС, pull-request создавать не надо.

About

Learn project for python practice course

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%