Bankkonto.py
import tkinter as tk
from tkinter import messagebox
import json
import os
# JSON file path
DATA_FILE = "konten1.json"
# Bank account class
class Bankkonto:
def __init__(self, Inhaber, Kontonummer, Kontostand):
self.Inhaber = Inhaber
self.Kontonummer = Kontonummer
self.Kontostand = float(Kontostand)
def konto_öffnen(self):
return f"Inhaber: {self.Inhaber}\nIBAN: {self.Kontonummer}\nKontostand: {self.Kontostand:.2f} €"
def auszahlen(self, betrag):
if betrag <= self.Kontostand:
self.Kontostand -= betrag
save_konten()
return f"Auszahlung erfolgreich.\nNeuer Kontostand: {self.Kontostand:.2f} €"
else:
return "Nicht genügend Guthaben für diese Auszahlung."
def einzahlen(self, betrag):
self.Kontostand += betrag
save_konten()
return f"Einzahlung erfolgreich.\nNeuer Kontostand: {self.Kontostand:.2f} €"
def to_dict(self):
return {
"Inhaber": self.Inhaber,
"Kontonummer": self.Kontonummer,
"Kontostand": self.Kontostand
}
# Load account data from JSON file
def load_konten():
if os.path.exists(DATA_FILE):
try:
with open(DATA_FILE, "r", encoding="utf-8") as f:
data = json.load(f)
# Validierung: Prüfen ob alle Keys stimmen
for name, info in data.items():
if "Kontonummer" not in info or "Inhaber" not in info or "Kontostand" not in info:
raise ValueError("Ungültige Daten im JSON")
return {name: Bankkonto(**info) for name, info in data.items()}
except Exception as e:
print("Fehler beim Laden, erstelle neue Daten:", e)
return reset_konten()
else:
return reset_konten()
# Reset: schreibt Defaultdaten neu
def reset_konten():
with open(DATA_FILE, "w", encoding="utf-8") as f:
json.dump(DEFAULT_DATA, f, indent=4)
return {name: Bankkonto(**info) for name, info in DEFAULT_DATA.items()}
# Save account data to JSON file
def save_konten():
data = {name: konto.to_dict() for name, konto in konten.items()}
with open(DATA_FILE, "w", encoding="utf-8") as f:
json.dump(data, f, indent=4)
# Load accounts
konten = load_konten()
# GUI functions
def konto_anzeigen():
name = name_entry.get().upper()
if name in konten:
konto_info.set(konten[name].konto_öffnen())
auszahlen_button.config(state="normal")
einzahlen_button.config(state="normal")
else:
konto_info.set("Kein Konto mit diesem Namen gefunden.")
auszahlen_button.config(state="disabled")
einzahlen_button.config(state="disabled")
def auszahlen():
name = name_entry.get().upper()
if name in konten:
try:
betrag = float(betrag_entry.get())
result = konten[name].auszahlen(betrag)
konto_info.set(konten[name].konto_öffnen() + "\n\n" + result)
except ValueError:
messagebox.showerror("Fehler", "Bitte eine gültige Zahl eingeben.")
else:
messagebox.showerror("Fehler", "Kein gültiges Konto ausgewählt.")
def einzahlen():
name = name_entry.get().upper()
if name in konten:
try:
betrag = float(einzahlung_entry.get())
result = konten[name].einzahlen(betrag)
konto_info.set(konten[name].konto_öffnen() + "\n\n" + result)
except ValueError:
messagebox.showerror("Fehler", "Bitte eine gültige Zahl eingeben.")
else:
messagebox.showerror("Fehler", "Kein gültiges Konto ausgewählt.")
# GUI setup
root = tk.Tk()
root.title("Bankkonto")
root.geometry("420x350")
tk.Label(root, text="Name eingeben:").grid(row=0, column=0, sticky="e")
name_entry = tk.Entry(root)
name_entry.grid(row=0, column=1)
anzeigen_button = tk.Button(root, text="Konto anzeigen", command=konto_anzeigen)
anzeigen_button.grid(row=0, column=2, padx=10)
konto_info = tk.StringVar()
tk.Label(root, textvariable=konto_info, justify="left").grid(row=1, column=0, columnspan=3, pady=10)
tk.Label(root, text="Auszahlung (€):").grid(row=2, column=0, sticky="e")
betrag_entry = tk.Entry(root)
betrag_entry.grid(row=2, column=1)
auszahlen_button = tk.Button(root, text="Auszahlen", command=auszahlen, state="disabled")
auszahlen_button.grid(row=2, column=2, padx=2)
tk.Label(root, text="Einzahlung (€):").grid(row=3, column=0, sticky="e")
einzahlung_entry = tk.Entry(root)
einzahlung_entry.grid(row=3, column=1)
einzahlen_button = tk.Button(root, text="Einzahlen", command=einzahlen, state="disabled")
einzahlen_button.grid(row=3, column=2, padx=2)
root.mainloop()