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