2026. június 26., péntek

Banki Rendszer

Í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