2nd push
This commit is contained in:
parent
57af84310a
commit
827b16dc96
136
main.py
136
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()
|
||||
|
||||
Loading…
Reference in New Issue