Infotanar.eu - Mozi foglalás kezelés

Kód

# Mozi foglalás kezelés
# YT: https://www.youtube.com/watch?v=slXrGwHR808
# Kategória: szótárak

# Az előadások adatai: minden előadás neve, időpontja, helyfoglalási rendszere, jegyára és eddigi bevétele
eloadasok = {
    "Star Wars (14:00)": {  # Az első előadás neve és időpontja
        "helyek": {  # A foglalható helyek: három sor (A, B, C) és öt szék soronként
            "A": [False] * 5,  # Minden hely alapértelmezetten szabad (False)
            "B": [False] * 5,
            "C": [False] * 5
        },
        "ar": 1500,  # Jegyár forintban
        "bevetel": 0  # Az előadás eddigi bevétele
    },
    "Batman (16:30)": {  # A második előadás neve és időpontja
        "helyek": {  # A foglalható helyek ugyanúgy három sor és öt szék
            "A": [False] * 5,
            "B": [False] * 5,
            "C": [False] * 5
        },
        "ar": 1500,  # Jegyár forintban
        "bevetel": 0  # Az előadás eddigi bevétele
    }
}

# Az előadás helyfoglalási állapotának megjelenítése
def helyek_mutatasa(eloadas):
    print("\nHelyek (O = szabad, X = foglalt):")  # Helyek jelölése: O = szabad, X = foglalt
    print("  1 2 3 4 5")  # Az oszlopok sorszámai
    for sor in eloadas["helyek"]:  # Végigmegyünk minden soron (A, B, C)
        print(sor, end=" ")  # A sor nevét kiírjuk
        for foglalt in eloadas["helyek"][sor]:  # Ellenőrizzük minden szék foglaltságát
            print("X" if foglalt else "O", end=" ")  # Foglalt helyek: X, szabad helyek: O
        print()  # Sor végén új sort kezdünk

# Helyfoglalás egy előadáshoz
def hely_foglalas(eloadas):
    sor = input("Sor: ")  # Kérjük be a foglalni kívánt sor nevét (pl. A, B, C)
    szek = int(input("Szék: ")) - 1  # Kérjük be a szék számát (1-től 5-ig), de 0-indexelté alakítjuk

    # Ellenőrizzük, hogy a választott hely szabad-e
    if not eloadas["helyek"][sor][szek]:
        eloadas["helyek"][sor][szek] = True  # A hely foglaltságát True-ra állítjuk
        eloadas["bevetel"] += eloadas["ar"]  # Hozzáadjuk a jegy árát az előadás bevételéhez
        print("Foglalás sikeres!")  # Sikeres foglalás visszajelzése
        print(f"Ár: {eloadas['ar']} Ft")  # A jegy árának kiírása
    else:
        print("Ez a hely már foglalt!")  # Ha a hely már foglalt, figyelmeztetés jelenik meg

# Végtelen ciklus a felhasználói interakciókhoz
while True:
    print("\nElőadások:")  # Előadások listája
    for i, cim in enumerate(eloadasok.keys(), 1):  # Az előadásokat sorszámozzuk 1-től kezdve
        print(f"{i}. {cim}")  # Az előadás sorszáma és neve
    print(f"{len(eloadasok) + 1}. Kilépés")  # Kilépési opció hozzáadása a listához

    valasztas = int(input("\nVálasztott előadás: "))  # A felhasználó választása sorszám alapján

    if valasztas == len(eloadasok) + 1:  # Ha a választás a kilépés opció (utolsó lehetőség)
        break  # Kilépés a ciklusból

    eloadas = list(eloadasok.values())[valasztas - 1]  # A választott előadás adatai
    helyek_mutatasa(eloadas)  # Az előadás helyfoglalási állapotának megjelenítése
    hely_foglalas(eloadas)  # Helyfoglalás az előadáshoz
    print(f"Eddigi bevétel: {eloadas['bevetel']} Ft")  # Az előadás eddigi bevételének kiírása