10. Мини-проект: Финансовый трекер

Мини-проект: Финансовый трекер

Описание: В этом проекте вы создадите консольное приложение для учёта личных финансов. Программа позволит добавлять доходы и расходы, хранить их в базе данных SQLite, подсчитывать баланс и формировать отчёты.

1. Цель проекта

Создать CLI-приложение, которое позволит:
  • Добавлять доходы и расходы с указанием категории, даты и суммы.
  • Просматривать историю операций.
  • Подсчитывать общий баланс и итоги по категориям.
  • Сохранять все данные в базе SQLite.

2. Подготовка проекта

Создайте файл finance_tracker.py. Мы будем использовать модуль sqlite3, который уже входит в стандартную библиотеку Python.

import sqlite3
from datetime import datetime

DB_NAME = 'finance.db'

def init_db(): conn = sqlite3.connect(DB_NAME) cur = conn.cursor() cur.execute('''CREATE TABLE IF NOT EXISTS transactions ( id INTEGER PRIMARY KEY AUTOINCREMENT, type TEXT NOT NULL, category TEXT NOT NULL, amount REAL NOT NULL, date TEXT NOT NULL )''') conn.commit() return conn

3. Добавление записей

Теперь добавим функции для внесения доходов и расходов.

def add_transaction(conn, t_type, category, amount):
    cur = conn.cursor()
    date = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    cur.execute('INSERT INTO transactions (type, category, amount, date) VALUES (?, ?, ?, ?)',
                (t_type, category, amount, date))
    conn.commit()
    print(f'Добавлена операция: {t_type} {amount} ({category})')

Пример вызова:


conn = init_db()
add_transaction(conn, 'Доход', 'Зарплата', 1500.00)
add_transaction(conn, 'Расход', 'Продукты', 200.00)

4. Просмотр истории операций

Сделаем функцию для вывода всех транзакций.

def show_transactions(conn):
    cur = conn.cursor()
    cur.execute('SELECT * FROM transactions ORDER BY date DESC')
    rows = cur.fetchall()

print('\nИстория операций:') if not rows: print('Нет данных.') return

for r in rows: print(f'[{r[4]}] {r[1]} — {r[2]}: {r[3]}₽')

5. Подсчёт баланса

Теперь добавим анализ финансов.

def get_balance(conn):
    cur = conn.cursor()
    cur.execute('SELECT SUM(CASE WHEN type="Доход" THEN amount ELSE -amount END) FROM transactions')
    balance = cur.fetchone()[0]
    print(f' Текущий баланс: {balance if balance else 0:.2f} ₽')

6. Отчёт по категориям

Добавим агрегирование данных по категориям.

def report_by_category(conn):
    cur = conn.cursor()
    cur.execute('SELECT category, type, SUM(amount) FROM transactions GROUP BY category, type')
    rows = cur.fetchall()

print('\nОтчёт по категориям:') for cat, t_type, total in rows: print(f'{t_type:<8} | {cat:<15} — {total:.2f} ₽')

7. Интерфейс CLI

Теперь сделаем удобное текстовое меню.

def main():
    conn = init_db()
    while True:
        print('\n=== ФИНАНСОВЫЙ ТРЕКЕР ===')
        print('[1] Добавить доход')
        print('[2] Добавить расход')
        print('[3] Показать операции')
        print('[4] Показать баланс')
        print('[5] Отчёт по категориям')
        print('[0] Выход')
        choice = input('Выберите действие: ')

if choice == '1': cat = input('Категория дохода: ') amt = float(input('Сумма: ')) add_transaction(conn, 'Доход', cat, amt) elif choice == '2': cat = input('Категория расхода: ') amt = float(input('Сумма: ')) add_transaction(conn, 'Расход', cat, amt) elif choice == '3': show_transactions(conn) elif choice == '4': get_balance(conn) elif choice == '5': report_by_category(conn) elif choice == '0': print('До встречи!') break else: print('Неверный выбор.')

if __name__ == '__main__': main()

8. Пример работы


=== ФИНАНСОВЫЙ ТРЕКЕР ===
[1] Добавить доход
[2] Добавить расход
[3] Показать операции
[4] Показать баланс
[5] Отчёт по категориям
[0] Выход
Выберите действие: 1
Категория дохода: Зарплата
Сумма: 1500
Добавлена операция: Доход 1500.0 (Зарплата)

Вывод отчёта:


История операций:
[2025-10-23 21:33:11] Доход — Зарплата: 1500.0₽
[2025-10-23 21:34:02] Расход — Продукты: 200.0₽

Текущий баланс: 1300.00 ₽

9. Добавим улучшения

Можно улучшить программу:
  • Добавить фильтрацию по дате (за день, неделю, месяц).
  • Добавить экспорт в CSV-файл.
  • Добавить цветной вывод с помощью colorama.
  • Добавить логирование в файл (модуль logging).

10. Установка и запуск

Убедитесь, что Python установлен, и при необходимости обновите pip:

python -m ensurepip --upgrade

Запуск программы:


python finance_tracker.py

Итоги урока

Теперь вы умеете:
  • Создавать полноценные консольные приложения с базой данных SQLite.
  • Организовывать структуру проекта с функциями и меню.
  • Добавлять CRUD-функционал (создание, чтение, обновление, удаление).
  • Реализовывать аналитику по категориям и вычислять баланс.