2026. június 26., péntek

Receptkönyv

Az alábbiakban egy olyan recept- és hozzávalókezelő rendszert láthatsz, amely objektumokat használ, kezeli az adatok mentését (JSON formátumban), és szűri a recepteket.
--------------
import json
import os

class Hozzavalo:
    """Egyetlen hozzávalót reprezentáló osztály."""
    def __init__(self, nev: str, mennyiseg: str):
        self.nev = nev
        self.mennyiseg = mennyiseg

    def __str__(self):
        return f"{self.nev} - {self.mennyiseg}"


class Recept:
    """Egy receptet és a hozzá tartozó logikát leíró osztály."""
    def __init__(self, nev: str, elkeszitesi_ido: int):
        self.nev = nev
        self.elkeszitesi_ido = elkeszitesi_ido # percben
        self.hozzavalok = []

    def hozzaad_hozzavalo(self, hozavalo: Hozzavalo):
        self.hozzavalok.append(hozavalo)

    def __str__(self):
        hozzavalok_lista = "\n  ".join(str(h) for h in self.hozzavalok)
        return f"Recept: {self.nev} ({self.elkeszitesi_ido} perc)\nHozzávalók:\n  {hozzavalok_lista}"


class ReceptKonyv:
    """A recepteket kezelő és fájlba mentő/betöltő osztály."""
    def __init__(self, fajl_nev: str = "receptek.json"):
        self.fajl_nev = fajl_nev
        self.receptek = []

    def hozzaad_recept(self, recept: Recept):
        self.receptek.append(recept)

    def kereses_ido_alapjan(self, max_perc: int) -> list:
        """Visszaadja azokat a recepteket, amelyek elkészítése nem vesz igénybe több időt."""
        return [r for r in self.receptek if r.elkeszitesi_ido <= max_perc]

    def mentes_json(self):
        """Elmenti a recepteket egy JSON fájlba."""
        adatok = []
        for r in self.receptek:
            hozzavalok_dict = [{"nev": h.nev, "mennyiseg": h.mennyiseg} for h in r.hozzavalok]
            adatok.append({
                "nev": r.nev,
                "elkeszitesi_ido": r.elkeszitesi_ido,
                "hozzavalok": hozzavalok_dict
            })
        
        with open(self.fajl_nev, "w", encoding="utf-8") as f:
            json.dump(adatok, f, ensure_ascii=False, indent=4)
        print("Receptek sikeresen mentve!")

    def betoltes_json(self):
        """Betölti a recepteket a JSON fájlból."""
        if not os.path.exists(self.fajl_nev):
            print("A mentési fájl nem található.")
            return

        try:
            with open(self.fajl_nev, "r", encoding="utf-8") as f:
                adatok = json.load(f)
                self.receptek = []
                for elem in adatok:
                    recept = Recept(elem["nev"], elem["elkeszitesi_ido"])
                    for h in elem["hozzavalok"]:
                        recept.hozzaad_hozzavalo(Hozzavalo(h["nev"], h["mennyiseg"]))
                    self.receptek.append(recept)
            print("Receptek sikeresen betöltve!")
        except json.JSONDecodeError:
            print("Hiba történt: A mentési fájl sérült.")


# --- A program futtatása ---
if __name__ == "__main__":
    konyv = ReceptKonyv()

    # Új recept létrehozása és feltöltése
    recept1 = Recept("Paradicsomleves", 25)
    recept1.hozzaad_hozzavalo(Hozzavalo("Paradicsomlé", "1 liter"))
    recept1.hozzaad_hozzavalo(Hozzavalo("Cukor", "2 evőkanál"))
    recept1.hozzaad_hozzavalo(Hozzavalo("Só", "1 csipet"))

    recept2 = Recept("Rántotta", 10)
    recept2.hozzaad_hozzavalo(Hozzavalo("Tojás", "3 db"))
    recept2.hozzaad_hozzavalo(Hozzavalo("Vaj", "1 dkg"))

    konyv.hozzaad_recept(recept1)
    konyv.hozzaad_recept(recept2)

    # Receptek mentése
    konyv.mentes_json()

    # Keresés 15 percnél rövidebb receptekre
    print("\nGyors receptek (max 15 perc):")
    gyors_receptek = konyv.kereses_ido_alapjan(15)
    for r in gyors_receptek:
        print("-", r.nev)
--------------
Receptek sikeresen mentve!

Gyors receptek (max 15 perc):
- Rántotta

Nincsenek megjegyzések:

Megjegyzés küldése