2026. június 26., péntek

Könyvtári nyilvántartó rendszer

Egy komplexebb Python program kiválóan szemlélteti az objektum-orientált programozást, a fájlkezelést és a hibakezelést.Az alábbi példa egy könyvtári nyilvántartó rendszert mutat be, amely kezeli a könyveket, a kölcsönzéseket és a felhasználókat. A megvalósítás class-okat, fájl I/O-t, hibakezelést és lambda kifejezéseket is tartalmaz.
--------------
import json
import datetime

class Konyv:
    def __init__(self, cim, szerzo, isbn):
        self.cim = cim
        self.szerzo = szerzo
        self.isbn = isbn
        self.kolcsonozve = False

    def __str__(self):
        allapot = "Kölcsönözhető" if not self.kolcsonozve else "Kölcsönözve"
        return f"'{self.cim}' - {self.szerzo} ({allapot} | ISBN: {self.isbn})"

class Konyvtar:
    def __init__(self, adatbazis_fajl="konyvtar_adatok.json"):
        self.adatbazis_fajl = adatbazis_fajl
        self.konyvek = []
        self.betolt_adatok()

    def hozzaad_konyvet(self, konyv):
        self.konyvek.append(konyv)
        print(f"Könyv hozzáadva: {konyv.cim}")

    def konyv_kereses(self, kulcsszo):
        talalatok = list(filter(lambda k: kulcsszo.lower() in k.cim.lower() or kulcsszo.lower() in k.szerzo.lower(), self.konyvek))
        return talalatok

    def kolcsonoz(self, isbn):
        for konyv in self.konyvek:
            if konyv.isbn == isbn:
                if konyv.kolcsonozve:
                    print("A könyv már ki van kölcsönözve!")
                    return
                konyv.kolcsonozve = True
                print(f"Sikeres kölcsönzés: {konyv.cim}")
                self.ment_adatokat()
                return
        raise ValueError("Nem található a megadott ISBN számú könyv.")

    def visszahoz(self, isbn):
        for konyv in self.konyvek:
            if konyv.isbn == isbn:
                if not konyv.kolcsonozve:
                    print("Ezt a könyvet nem nálunk kölcsönözték ki.")
                    return
                konyv.kolcsonozve = False
                print(f"Könyv visszahozva: {konyv.cim}")
                self.ment_adatokat()
                return
        raise ValueError("Nem található a megadott ISBN számú könyv.")

    def ment_adatokat(self):
        adat = [{"cim": k.cim, "szerzo": k.szerzo, "isbn": k.isbn, "kolcsonozve": k.kolcsonozve} for k in self.konyvek]
        with open(self.adatbazis_fajl, "w", encoding="utf-8") as f:
            json.dump(adat, f, indent=4)

    def betolt_adatok(self):
        try:
            with open(self.adatbazis_fajl, "r", encoding="utf-8") as f:
                adatok = json.load(f)
                self.konyvek = [Konyv(k["cim"], k["szerzo"], k["isbn"]) for k in adatok]
                for i, k in enumerate(adatok):
                    self.konyvek[i].kolcsonozve = k["kolcsonozve"]
        except FileNotFoundError:
            print("Még nem létezik adatbázis, új lista létrehozva.")

# --- Tesztelés ---
if __name__ == "__main__":
    my_konyvtar = Konyvtar()
    
    # Új könyv hozzáadása (ha még nincs benne az adatbázisban)
    if len(my_konyvtar.konyvek) == 0:
        my_konyvtar.hozzaad_konyvet(Konyv("A Gyűrűk Ura", "J.R.R. Tolkien", "978-9630796443"))
        my_konyvtar.hozzaad_konyvet(Konyv("Harry Potter", "J.K. Rowling", "978-9634062066"))

    # Keresés
    print("\n--- Keresés ---")
    eredmenyek = my_konyvtar.konyv_kereses("Gyűrűk")
    for k in eredmenyek:
        print(k)

    # Kölcsönzés és kivételek kezelése
    print("\n--- Kölcsönzés ---")
    try:
        my_konyvtar.kolcsonoz("978-9630796443")
    except ValueError as e:
        print(f"Hiba történt: {e}")

    # Visszahozás
    print("\n--- Visszahozás ---")
    try:
        my_konyvtar.visszahoz("978-9630796443")
    except ValueError as e:
        print(f"Hiba történt: {e}")
-------------------
Könyv hozzáadva: A Gyűrűk Ura
Könyv hozzáadva: Harry Potter

--- Keresés ---
'A Gyűrűk Ura' - J.R.R. Tolkien (Kölcsönözhető | ISBN: 978-9630796443)

--- Kölcsönzés ---
Sikeres kölcsönzés: A Gyűrűk Ura

--- Visszahozás ---
Könyv visszahozva: A Gyűrűk Ura

Nincsenek megjegyzések:

Megjegyzés küldése