Coder Social home page Coder Social logo

bookkeeper's Introduction

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

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.