Compare commits
2 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
02056d5ddc | |
|
|
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()
|
||||||
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
matplotlib
|
||||||
Loading…
Reference in New Issue