Ez a komplex példaprogram egy olyan parancssoros könyvtárkezelő alkalmazást mutat be, amely ötvözi az objektumorientált programozást (OOP), a fájlkezelést (JSON formátum) és a modern típusannotációkat.A kód tartalmazza a hibakezelést, a dinamikus keresést, a szűrést és az objektumok kezelését.
import json
import os
from typing import List, Optional
# 1. Osztály (OOP)
class Konyv:
def __init__(self, cim: str, szerzo: str, ev: int, mufaj: str):
self.cim = cim
self.szerzo = szerzo
self.ev = ev
self.mufaj = mufaj
self.kolcsonozve = False
def __str__(self) -> str:
allapot = "Kölcsönözhető" if not self.kolcsonozve else "Kölcsönzés alatt"
return f"{self.cim} - {self.szerzo} ({self.ev}) [{self.mufaj}] | Státusz: {allapot}"
def to_dict(self) -> dict:
return self.__dict__
# 2. Üzleti logika osztály
class Konyvtar:
def __init__(self, fajl_nev: str = "konyvtar.json"):
self.fajl_nev = fajl_nev
self.konyvek: List[Konyv] = []
self.betoltes()
def hozzaad(self, konyv: Konyv) -> None:
self.konyvek.append(konyv)
self.mentes()
print(f"'{konyv.cim}' sikeresen hozzáadva a könyvtárhoz.")
def kereses(self, kulcsszo: str) -> List[Konyv]:
kulcsszo = kulcsszo.lower()
talalatok = []
for k in self.konyvek:
if kulcsszo in k.cim.lower() or kulcsszo in k.szerzo.lower():
talalatok.append(k)
return talalatok
def kolcsonzes(self, cim: str) -> None:
for k in self.konyvek:
if k.cim.lower() == cim.lower():
if k.kolcsonozve:
print(f"Hiba: A(z) '{cim}' már ki van kölcsönözve.")
else:
k.kolcsonozve = True
self.mentes()
print(f"Sikeres kölcsönzés: '{cim}'.")
return
print("Hiba: A könyv nem található.")
def mentes(self) -> None:
with open(self.fajl_nev, 'w', encoding='utf-8') as f:
json.dump([k.to_dict() for k in self.konyvek], f, ensure_ascii=False, indent=4)
def betoltes(self) -> None:
if os.path.exists(self.fajl_nev):
try:
with open(self.fajl_nev, 'r', encoding='utf-8') as f:
adatok = json.load(f)
self.konyvek = [Konyv(**k) for k in adatok]
except json.JSONDecodeError:
print("Hiba a mentett fájl olvasásakor, új lista létrehozva.")
self.konyvek = []
# 3. Főprogram (CLI)
def main():
konyvtar = Konyvtar()
while True:
print("\n--- KÖNYVTÁR MENÜ ---")
print("1. Új könyv hozzáadása")
print("2. Összes könyv listázása")
print("3. Keresés (cím vagy szerző alapján)")
print("4. Könyv kölcsönzése")
print("5. Kilépés")
valasztas = input("Válasszon egy opciót (1-5): ").strip()
if valasztas == '1':
cim = input("Cím: ")
szerzo = input("Szerző: ")
try:
ev = int(input("Kiadási év: "))
mufaj = input("Műfaj: ")
uj_konyv = Konyv(cim, szerzo, ev, mufaj)
konyvtar.hozzaad(uj_konyv)
except ValueError:
print("Hiba: Az évszámnak számnak kell lennie!")
elif valasztas == '2':
if not konyvtar.konyvek:
print("A könyvtár üres.")
else:
for idx, konyv in enumerate(konyvtar.konyvek, 1):
print(f"{idx}. {konyv}")
elif valasztas == '3':
kulcsszo = input("Keresőkifejezés: ")
talalatok = konyvtar.kereses(kulcsszo)
if talalatok:
for konyv in talalatok:
print(konyv)
else:
print("Nincs találat.")
elif valasztas == '4':
cim = input("A kikölcsönözni kívánt könyv címe: ")
konyvtar.kolcsonzes(cim)
elif valasztas == '5':
print("Viszontlátás!")
break
else:
print("Érvénytelen választás. Kérjük, adjon meg egy számot 1 és 5 között.")
if __name__ == "__main__":
main()
-------------------
--- KÖNYVTÁR MENÜ ---
1. Új könyv hozzáadása
2. Összes könyv listázása
3. Keresés (cím vagy szerző alapján)
4. Könyv kölcsönzése
5. Kilépés
Válasszon egy opciót (1-5):
Nincsenek megjegyzések:
Megjegyzés küldése