Skip to content

Automating household budgeting: creating a database in PostgreSQL and developing a client application using PyQT5 and the pg8000 engine to manage expenses and income.

Notifications You must be signed in to change notification settings

simonoffcc/db-cw-budget

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Условие задачи

Автоматизация домашнего бюджета

В рамках данного цикла лабораторных работ необходимо автоматизировать работу ведения домашнего бюджета. Для этого в рамках базы данных PostgreSQL необходимо создать объекты в схеме вашего пользователя (логин и пароль пользователя для доступа к базе данных студент должен получить у преподавателя) и написать клиентское приложение на базе компонентов ADO.NET или JDBC.

Под домашним бюджетом понимается ведение статистики финансовых операций с разделением их на группы для последующего анализа и планирования. Финансовая операция характеризуется расходной суммой, приходной суммой и датой проведения. Для разделения операций на группы вводится понятие статьи, в рамках которой производится финансовая операция. Статья характеризуется наименованием назначения платежа. Каждая операция должна принадлежать одной и только одной статье. Для построения динамики распределения финансовых потоков по статьям и анализа используется расчетный период времени равный одному месяцу. Каждый месяц в системе автоматически должен формироваться итоговый отчетный документ, будем называть его балансом. Баланс характеризуется расходной суммой, приходной суммой, суммой чистой прибыли и датой формирования. Каждая операция может попасть только в один баланс. После формирования баланса покрываемый им период времени считается закрытым и для коррекции или создания операций в рамках этого периода, необходимо расформирование баланса. На основании попадания операции в баланс на этапе анализа и планирования принимается решение об интервале времени, в рамках которого будет учитываться операция. При анализе в рамках одного баланса все операции агрегируются по статьям.

База данных должна удовлетворять следующим требованиям:

  1. Контроль целостности данных, используя механизм связей

  2. Операции модификации групп данных и данных в связанных таблицах должны быть выполнены в рамках транзакций.

  3. Логика работы приложения должна контролироваться триггерами. В частности:

    • Триггер должен запрещать ввод операции с нулевыми суммами

    • Триггер должен контролировать, чтобы вводимая операция не попадала в закрытый период.

  4. Все операции вычисления различных показателей (из требований к клиентскому приложению) должны реализовываться хранимыми процедурами.

Требования к клиентскому приложению:

  1. Вход в приложение осуществляется после корректного введения пароля и логина с соответствующими ролями (пользователь не может вносить изменения в БД, администратор владеет всеми правами). Логин и пароль хранятся в виде хэшей.

  2. Необходимо реализовать интерфейсы для ввода, модификации и удаления

    • Операций

    • Статей

  3. Должен быть реализован журнал анализа, отображающий сформированные балансы. В рамках этого журнала необходимо организовать формирование баланса и расформирование.

  4. Необходимо реализовать возможность просмотра следующих показателей (лучше графический вид):

    • Динамика изменения расходов и доходов за произвольный период времени и с произвольным набором анализируемых статей.

    • Процентное соотношение финансовых потоков по статьям.

    • Графическое отображение чистой прибыли бюджета от времени.

БД

Сначала делаем бэкап базы данных из файла в папке /db.

Затем добавляем в файл src/config.ini все необходимые данные для подключения к базе данных (название бд, хост, порт, юзер, пароль).

В таблице users можно (желательно) поменять имена пользователей. Также можно поменять пароли (про дефолтные логины и пароли ниже). Пароли хранятся в хэше, поэтому если хотите их обновить, то в src/database/get_hash_from_passwrd.py возможно это сделать: пишем новый пароль, копируем хэш и вставляем в базу данных.

По дефолту:

simon: 12345 - это админ.

leyla: 1234 - это читатель.

Зависимости

Создаём переменное окружение:

python3 -m venv env
source env/bin/activate

Установка зависимостей:

pip install -r requirements.txt

Запуск

python src/main.py

Демонстрация

login

main_window

functional

admin_buttons

About

Automating household budgeting: creating a database in PostgreSQL and developing a client application using PyQT5 and the pg8000 engine to manage expenses and income.

Resources

Stars

Watchers

Forks

Languages