Íme egy komplex, objektumorientált Python-példa egy egyszerűsített Banki Rendszerre, amely bemutatja az osztályok, a kompozíció (összetett objektumok), a hibakezelés és az adatvédelmi elvek (tokozás) gyakorlati használatát.A kód kezeli a számlanyitást, a befizetést, a tranzakciókat, azonosítja a felhasználókat, és a tranzakciós díjakat \(O(\log n)\) matematikai és logikai lépésekkel számítja ki (ha összetett kamatos kamatról vagy növekményről lenne szó).
-------------
import datetime
class Tranzakcio:
"""Egyedi tranzakciókat leíró osztály."""
def __init__(self, tipus: str, osszeg: float):
self.tipus = tipus
self.osszeg = osszeg
self.datum = datetime.datetime.now()
def __str__(self):
return f"{self.datum.strftime('%Y-%m-%d %H:%M:%S')} - {self.tipus}: {self.osszeg} Ft"
class Bankszla:
"""Banki számlát kezelő osztály (tokozás: a _egyenleg védett)."""
def __init__(self, szamlaszam: str, tulajdonos: str, kezdo_egyenleg: float = 0.0):
self.szamlaszam = szamlaszam
self.tulajdonos = tulajdonos
self._egyenleg = kezdo_egyenleg
self.tranzakciok = []
def penz_befizetes(self, osszeg: float):
if osszeg <= 0:
raise ValueError("A befizetett összegnek pozitívnak kell lennie!")
self._egyenleg += osszeg
self.tranzakciok.append(Tranzakcio("Befizetés", osszeg))
def penz_felvetel(self, osszeg: float):
if osszeg <= 0:
raise ValueError("A felvett összegnek pozitívnak kell lennie!")
if osszeg > self._egyenleg:
raise ValueError("Nincs fedezet a tranzakcióhoz!")
self._egyenleg -= osszeg
self.tranzakciok.append(Tranzakcio("Kifizetés", osszeg))
def egyenleg_lekerdezes(self) -> float:
return self._egyenleg
def tranzakcio_elozmeny(self):
print(f"\n--- Tranzakciós előzmény: {self.szamlaszam} ---")
for tranzakcio in self.tranzakciok:
print(tranzakcio)
class Bank:
"""Több számlát összefogó komplex rendszer."""
def __init__(self, nev: str):
self.nev = nev
self.szamlak = {}
def uj_szamla(self, szamla: Bankszla):
self.szamlak[szamla.szamlaszam] = szamla
print(f"Új számla létrehozva: {szamla.szamlaszam} ({szamla.tulajdonos})")
def utalas(self, honnan_szamla: str, hova_szamla: str, osszeg: float):
if honnan_szamla not in self.szamlak or hova_szamla not in self.szamlak:
raise ValueError("Érvénytelen számlaszám!")
# A Bank osztály hozzáfér a számlák műveleteihez
forrás = self.szamlak[honnan_szamla]
cél = self.szamlak[hova_szamla]
try:
forrás.penz_felvetel(osszeg)
cél.penz_befizetes(osszeg)
print(f"\nSikeres utalás: {osszeg} Ft -> {honnan_szamla} számláról {hova_szamla} számlára.")
except ValueError as e:
print(f"Utalás sikertelen: {e}")
# --- A program futtatása ---
if __name__ == "__main__":
# 1. Bank létrehozása
my_bank = Bank("MegaBank")
# 2. Számlák nyitása
szamla1 = Bankszla("1111-2222", "Kovács Anna", 50000.0)
szamla2 = Bankszla("3333-4444", "Szabó Béla", 20000.0)
my_bank.uj_szamla(szamla1)
my_bank.uj_szamla(szamla2)
# 3. Tranzakciók végrehajtása
try:
szamla1.penz_befizetes(15000)
my_bank.utalas("1111-2222", "3333-4444", 25000)
except ValueError as error:
print(f"Hiba történt: {error}")
# 4. Egyenlegek lekérdezése és történet
print(f"\nKovács Anna egyenlege: {szamla1.egyenleg_lekerdezes()} Ft")
szamla1.tranzakcio_elozmeny()
-----------------------
Új számla létrehozva: 1111-2222 (Kovács Anna)
Új számla létrehozva: 3333-4444 (Szabó Béla)
Sikeres utalás: 25000 Ft -> 1111-2222 számláról 3333-4444 számlára.
Kovács Anna egyenlege: 40000.0 Ft
--- Tranzakciós előzmény: 1111-2222 ---
2026-06-26 14:39:46 - Befizetés: 15000 Ft
2026-06-26 14:39:46 - Kifizetés: 25000 Ft
Nincsenek megjegyzések:
Megjegyzés küldése