From 827b16dc968071cf72851a9c49b0d219b791bac5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Kacprzak?= Date: Thu, 2 Jan 2025 13:30:18 +0100 Subject: [PATCH] 2nd push --- main.py | 136 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ run.sh | 6 +++ 2 files changed, 142 insertions(+) create mode 100644 run.sh diff --git a/main.py b/main.py index e69de29..affc654 100644 --- a/main.py +++ b/main.py @@ -0,0 +1,136 @@ +import sqlite3 +import matplotlib.pyplot as plt +from datetime import datetime + +# Inicjalizacja bazy danych +def init_db(): + conn = sqlite3.connect("finance.db") + cursor = conn.cursor() + cursor.execute(""" + CREATE TABLE IF NOT EXISTS transactions ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + type TEXT NOT NULL, -- 'income' lub 'expense' + amount REAL NOT NULL, + category TEXT, + date TEXT NOT NULL + ) + """) + conn.commit() + conn.close() + +# Dodawanie transakcji +def add_transaction(transaction_type, amount, category): + conn = sqlite3.connect("finance.db") + cursor = conn.cursor() + date = datetime.now().strftime("%Y-%m-%d") + cursor.execute(""" + INSERT INTO transactions (type, amount, category, date) + VALUES (?, ?, ?, ?) + """, (transaction_type, amount, category, date)) + conn.commit() + conn.close() + print("Transakcja dodana!") + +# Przeglądanie historii transakcji +def view_transactions(): + conn = sqlite3.connect("finance.db") + cursor = conn.cursor() + cursor.execute("SELECT * FROM transactions ORDER BY date DESC") + transactions = cursor.fetchall() + conn.close() + print("\nHistoria transakcji:") + for t in transactions: + print(f"{t[0]} | {t[1]} | {t[2]:.2f} | {t[3]} | {t[4]}") + +# Filtrowanie transakcji +def filter_transactions(category=None, start_date=None, end_date=None): + conn = sqlite3.connect("finance.db") + cursor = conn.cursor() + query = "SELECT * FROM transactions WHERE 1=1" + params = [] + if category: + query += " AND category = ?" + params.append(category) + if start_date: + query += " AND date >= ?" + params.append(start_date) + if end_date: + query += " AND date <= ?" + params.append(end_date) + cursor.execute(query, params) + transactions = cursor.fetchall() + conn.close() + print("\nFiltrowane transakcje:") + for t in transactions: + print(f"{t[0]} | {t[1]} | {t[2]:.2f} | {t[3]} | {t[4]}") + +# Wyświetlanie salda +def calculate_balance(): + conn = sqlite3.connect("finance.db") + cursor = conn.cursor() + cursor.execute("SELECT SUM(amount) FROM transactions WHERE type = 'income'") + income = cursor.fetchone()[0] or 0 + cursor.execute("SELECT SUM(amount) FROM transactions WHERE type = 'expense'") + expense = cursor.fetchone()[0] or 0 + conn.close() + balance = income - expense + print(f"Saldo konta: {balance:.2f} zł") + +# Wyświetlanie statystyk +def show_statistics(): + conn = sqlite3.connect("finance.db") + cursor = conn.cursor() + cursor.execute("SELECT category, SUM(amount) FROM transactions WHERE type = 'expense' GROUP BY category") + data = cursor.fetchall() + conn.close() + if not data: + print("Brak danych do wyświetlenia statystyk.") + return + + categories = [d[0] for d in data] + amounts = [d[1] for d in data] + + plt.bar(categories, amounts) + plt.title("Wydatki według kategorii") + plt.xlabel("Kategoria") + plt.ylabel("Kwota (zł)") + plt.show() + +# Główna pętla programu +def main(): + init_db() + while True: + print("\n--- MENU ---") + print("1. Dodaj transakcję") + print("2. Wyświetl historię transakcji") + print("3. Filtruj transakcje") + print("4. Pokaż saldo konta") + print("5. Wyświetl statystyki") + print("6. Wyjście") + choice = input("Wybierz opcję: ") + + if choice == "1": + t_type = input("Typ (income/expense): ").strip().lower() + amount = float(input("Kwota: ")) + category = input("Kategoria: ").strip() + add_transaction(t_type, amount, category) + elif choice == "2": + view_transactions() + elif choice == "3": + category = input("Kategoria (lub ENTER aby pominąć): ").strip() or None + start_date = input("Data początkowa (YYYY-MM-DD, lub ENTER aby pominąć): ").strip() or None + end_date = input("Data końcowa (YYYY-MM-DD, lub ENTER aby pominąć): ").strip() or None + filter_transactions(category, start_date, end_date) + elif choice == "4": + calculate_balance() + elif choice == "5": + show_statistics() + elif choice == "6": + print("Do widzenia!") + break + else: + print("Nieprawidłowa opcja. Spróbuj ponownie.") + +if __name__ == "__main__": + main() + diff --git a/run.sh b/run.sh new file mode 100644 index 0000000..a8098bf --- /dev/null +++ b/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +pip -m venv .venv && +source .venv/bin/activate && +pip install -r requirements.txt && +python main.py