"""This is a fully functional hotel system from the Grand Budapest Hotel.""" __author__ = "7509429, Gebert, 0000000, YYYYY" __email__ = "0000000@stud.uni-frankfurt.de" __email__ = "s6474549@stud.uni-frankfurt.de" __credit__ = " Grandhotel.wav by David Gebert " import math import os import sys import time import random #----------------CLASS---KEY------------------------------------------ class Key: """Key class for key management.""" how_many_keys = 0 def __init__(self, keynumber): """Initialization of a new key object.""" self.number = keynumber self.possessor = "Rezeption" def status_key(self, keynumber=None): """Prints the current possessor of a key.""" print("Schlüssel", self.number, "im Besitz", self.possessor) def hand_out_key(self, keynumber, guest): """Changes the current possessor of a key to the guest who checks in.""" self.possessor = guest def get_back_key(self, keynumber): """Changes the current possessor of a key to the reception.""" self.possessor = "Rezeption" # Generates all the keys, two for each room. # results in keynumbers: 11, 12, 21, 22, 31, 32, 41, 42 . key_list = [] for i in range(11, 42, 10): a = "key_" + str(i) + " = Key(" + str(i) + ")" exec(a) a2 = "key_list.append(key_" + str(i) + ")" exec(a2) b = "key_" + str(i+1) + " = Key(" + str(i+1) + ")" exec(b) b2 = "key_list.append(key_" + str(i+1) + ")" exec(b2) #----------------CLASS---CLIENT------------------------------------- #List of clients that are currently checked in. checked_in_list = [] #List of clients that are currently checked out. client_list = [] #List of all clients of the hotel. all_clients = [] class Client(): """Client class for customer management.""" months = ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli',\ 'August', 'September', 'Oktober', 'November', 'Dezember'] clients = 0 def __init__(self, name: str, surname: str, client_num: str, room: str,\ period, key_num: int, bookings, status: bool,\ checked_in: bool): """Initialization of a new client object.""" self.name = name self.surname = surname self.client_num = client_num self.room = None self.period = period self.key_num = 0 self.bookings = [] self.status = False self.checked_in = checked_in Client.clients += 1 def check_in(self, room, key_num, period): """Check In function: assign client to room and hand out keys. Args: room: room name : str key_num: key number : str period: str Returns: new_bill: command for creating a new bill matching the booking """ self.checked_in = True self.period = str(period) room_list[reference.index(str(room))].occupy(self.surname, self.period) self.room = str(room) num_ = "key_" + str(key_num) + ".hand_out_key(" + str(key_num) + "," +\ "'" + str(self.surname) + "')" checked_in_list.append(str(self.client_num)) client_list.remove(str(self.client_num)) self.key_num = int(key_num) self.vip_status() try: exec(num_) except: ("Schlüssel mit Daten nicht gefunden.") if self.status == True: print("Der Kunde besitzt VIP Privilegien. Er erhält \ kostenloses Frühstück sowie die kostenlose Benutzung der Mini-Bar.") print("Check In erfolgreich.") new_bill = add_bill(self.name, self.surname, self.client_num, room,\ self.period) return new_bill def check_out(self): """Check out function: clear room, key to reception""" if self.checked_in == True: room_list[reference.index(self.room)].free() key_num = self.key_num num_ = "key_" + str(key_num) + ".get_back_key(" + str(key_num) +\ ")" self.checked_in = False self.room = None self.period = None self.key_num = None self.vip_status() checked_in_list.remove(self.client_num) client_list.append(self.client_num) try: exec(num_) print("Der Gast ist erfolgreich ausgecheckt worden.") except: ("Schlüssel mit Daten nicht gefunden.") def client_bill(self, bill_num): """Appends the new bill number to the bookings of client.""" self.bookings.append(str(bill_num)) def client_bill_delete(self, bill_num): """Deletes a bill number that includes the checking out process.""" if bill_num in self.bookings: self.vip_status() self.bookings.remove(bill_num) print("Rechnung wurde beim Gast", self.client_num, "gelöscht.") self.check_out() def vip_status(self): """Adjusts the VIP Status of a client.""" if len(self.bookings) > 3: self.status = True if len(self.bookings) < 4: self.status = False def period_print(self): """Prints the stay period of a guest in a legible format.""" # creates a list format to work with stay_period = [] num_string = "" for i in self.period: if i.isnumeric(): num_string += i if i == ",": stay_period.append(num_string) num_string = "" stay_period.append(num_string) stay_period = tuple(stay_period) # Same month if stay_period[1] == stay_period[3]: days = int(stay_period[0]) - int(stay_period[2]) month_num = int(stay_period[1]) - 1 month_print = Client.months[month_num] print("Der Kunde bleibt", abs(days), "Tage.") print("Vom", stay_period[0], "bis", stay_period[2], month_print) # Across months if stay_period[1] != stay_period[3]: # Stay period more than 1 month if int(stay_period[3]) - int(stay_period[1]) > 1: days = 28 - int(stay_period[0]) + int(stay_period[2]) + \ ((int(stay_period[3]) - int(stay_period[1])-1) * 28) # Stay period else: days = 28 - int(stay_period[0]) + int(stay_period[2]) month_num_1 = int(stay_period[1]) - 1 month_num_2 = int(stay_period[3]) - 1 month_print_1 = Client.months[month_num_1] month_print_2 = Client.months[month_num_2] print("Der Kunde bleibt", abs(days), "Tage.") print("Vom", stay_period[0], month_print_1, "bis", \ stay_period[2], month_print_2) def info(self, action = None): """Prints infomation of a client, selected if desired.""" dic_ = {"Name" : self.name, "Nachname" : self.surname, "Kundennummer" : self.client_num, "Zimmer" : self.room, "Aufenthaltsdauer": self.period, "Schlüsselnummer" : self.key_num, "Buchungen" : self.bookings, "VIP-Status" : self.status, "Eingecheckt" : self.checked_in } if action != None: # If asked client information is stay period if action == "Aufenthaltsdauer": client_num = self.client_num stay = str(client_num)+ ".period_print()" exec(stay) # If asked client information is different if action != "Aufenthaltsdauer": for i in dic_: if i == action: print(action, "ist", dic_[i]) else: for i in dic_: print(i.ljust(16), ": ", dic_[i]) #----------------CLASS--ROOM------------------------------------------ class Room: '''Room class for room management.''' def __init__(self, room_number, guest=None, period=None): """Initialization of a new room object.""" self.number = room_number self.occupied = False self.resident = None self.period = None def occupy(self, guest, period): """Values in accordance with the given information, when room gets occupied""" self.occupied = True self.resident = guest self.period = period def free(self): """Frees the room.""" self.occupied = False self.resident = None self.period = None def is_free(self, client_num, room_name, period): """Checks if room is free in desired period. Returns: check: command for checking in. """ occupied = self.period if occupied == None: room_types = [["Single", 10], ["Double", 20], ["Suite", 30],\ ["Panorama_Suite", 40]] for i in room_types: if i[0] == room_name: key_num = i[1]+1 check = "exec(" + str(client_num) + ".check_in(" + "'" + \ str(room_name) + "'" + "," + str(key_num) + "," + "'" + str(period) + "'" +"))" return (check) else: stay_period = [] num_string = "" for i in self.period: if i.isnumeric(): num_string += i if i == ",": stay_period.append(num_string) num_string = "" stay_period.append(num_string) stay_period_new = [] num_string = "" for i in period: if i.isnumeric(): num_string += i if i == ",": stay_period_new.append(num_string) num_string = "" stay_period_new.append(num_string) if int(stay_period[3]) < int(stay_period_new[1]): room_types = [["Single", 10], ["Double", 20], ["Suite", 30],\ ["Panorama_Suite", 40]] for i in room_types: if i[0] == room_name: key_num = i[1]+1 check = "exec(" + str(client_num) + ".check_in(" + "'" +\ str(room_name) + "'" + "," + str(key_num) + "," + "'" + str(period) + "'" +"))" return (check) if int(stay_period[3]) > int(stay_period_new[1]): print("Das Zimmer", room_name, "ist in dem gewünschten\ Zeitraum belegt.") if int(stay_period[3]) == int(stay_period_new[1]): if int(stay_period[2]) > int(stay_period_new[0]): print("Das Zimmer", room_name, "ist in dem gewünschten\ Zeitraum belegt.") if int(stay_period[2]) <= int(stay_period_new[0]): room_types = [["Single", 10], ["Double", 20],\ ["Suite", 30], ["Panorama_Suite", 40]] for i in room_types: if i[0] == room_name: key_num = i[1]+1 check = "exec(" + str(client_num) + ".check_in(" +\ "'" + str(room_name) + "'" + "," + str(key_num) + "," + "'" + \ str(period) + "'" +"))" return (check) def is_occupied(self, room_name, period): """Checks if room is available in given period.""" if self.period == None: print("Das Zimmer", str(room_name)," ist frei.") if self.period != None: stay_period = [] num_string = "" for i in self.period: if i.isnumeric(): num_string += i if i == ",": stay_period.append(num_string) num_string = "" stay_period.append(num_string) stay_period_new = [] num_string = "" for i in period: if i.isnumeric(): num_string += i if i == ",": stay_period_new.append(num_string) num_string = "" stay_period_new.append(num_string) if int(stay_period[3]) < int(stay_period_new[1]): print(stay_period[3], stay_period_new[1]) print("Das Zimmer", room_name, "ist in dem gewünschten\ Zeitraum frei.") if int(stay_period[3]) > int(stay_period_new[1]): print("Das Zimmer", room_name, "ist in dem gewünschten\ Zeitraum belegt.") if int(stay_period[3]) == int(stay_period_new[1]): if int(stay_period[2]) > int(stay_period_new[0]): print("Das Zimmer", room_name, "ist in dem gewünschten\ Zeitraum belegt.") if int(stay_period[2]) <= int(stay_period_new[0]): print("Das Zimmer", room_name, "ist in dem gewünschten\ Zeitraum frei.") def info(self, action = None): """Prints infomation of a room, selected if desired.""" dic_ = {"Nummer" : self.number, "Gast" : self.resident, } if action != None: if action == "Nummer": print("Das Zimmer hat die Nummer", dic_["Nummer"]) if action == "Gast": if dic_["Gast"] != None: print("Das Zimmer", str(self.number),\ "ist gerade vom Gast", dic_["Gast"], "belegt") else: print("Das Zimmer", str(self.number),\ "ist im Moment nicht belegt.") else: for i in dic_: print(i.ljust(16), ": ", dic_[i]) # Generates all the rooms # nr.10-"Single", nr.20-"Double", nr.30-"Suite", nr.40-"Panorama_Suite" reference = ["Single", "Double", "Suite", "Panorama_Suite"] room_types = [["Single", 10], ["Double", 20], ["Suite", 30], \ ["Panorama_Suite", 40]] room_list = [] for i in room_types: tmp = i[0] + " = Room(" + str(i[1]) + ")" exec(tmp) tmp = "room_list.append(" + str(i[0]) + ")" exec(tmp) #----------------CLASS--ACCOUNTING---------------------------- class Accounting(): '''Accounting class for accounting management.''' all_bills = [] counter = 0 def __init__(self, name:str, surname:str, client_num:str, room:str,\ period:str, bill_num:str, bill_status:bool): """Initialization of a new bill object.""" self.name = name self.surname = surname self.client_num = client_num self.period = period self.bill_num = bill_num self.bill_status = bill_status Accounting.counter += 1 room_types = [["Single", 10], ["Double", 20], ["Suite", 30],\ ["Panorama_Suite", 40]] for i in room_types: if i[0] == room: self.room = i[1] var = str(client_num) + ".client_bill(" + "'" + bill_num + "'" + ")" exec(var) def show_bill(self): """Prints the bill.""" stay_period = [] num_string = "" for i in self.period: if i.isnumeric(): num_string += i if i == ",": stay_period.append(num_string) num_string = "" stay_period.append(num_string) stay_period = tuple(stay_period) # Same month if stay_period[1] == stay_period[3]: days = int(stay_period[0]) - int(stay_period[2]) # Across months if stay_period[1] != stay_period[3]: # Stay period more than 1 month if int(stay_period[3]) - int(stay_period[1]) > 1: days = 28 - int(stay_period[0]) + int(stay_period[2]) + \ ((int(stay_period[3]) - int(stay_period[1])-1) * 28) # Stay period else: days = 28 - int(stay_period[0]) + int(stay_period[2]) days = abs(days) costs = int(days) * int(self.room) lines = [[] for i in range(13)] lines[0].append( '┌─────────────────────────────┐') lines[1].append( '│ Rechnung │') lines[2].append( '│ │') lines[3].append( '│Kunde: {} {} '.format(self.name,\ self.surname)) lines[4].append( '│Zimmer: {} '.format(self.room)) lines[5].append( '│Anz. Tage:{} '.format(days)) lines[6].append( '│pro Nacht:{}€ '.format(self.room)) lines[7].append( '│Kosten: {}€ '.format(costs)) lines[8].append( '│ ') lines[9].append( '│Rech. Nr.:{} '.format\ (self.bill_num,)) lines[10].append('│Beglichen:{} '.format\ (self.bill_status)) lines[11].append('│ │') lines[12].append('└─────────────────────────────┘') for i in lines: print(i[0]) def pay_bill(self): """Pay function.""" self.bill_status = True print("Rechnung", self.bill_num, "wurde bezahlt.") def delete_bill(self, bill_num): """Deletes bill from bill list and from client.""" for i in all_clients: var = str(i) + ".client_bill_delete(" + "'" + bill_num + "'" + ")" exec(var) def __del__(self): """Called when object is destroyed.""" print("Rechnung wurde storniert.") #-------------ADDITIONAL--ACCOUNTING--METHODS-------------------------- bill_list = [] def add_bill(name, surname, client_num, room, period): """Fuction for adding bill when bookings are made. Args: name: str surname: str client_num: str room: str period: str Returns: c: command for creating the bill in accounting class """ bill_numb = "r" + str(Accounting.counter) c = bill_numb + " = Accounting(" + '"' + str(name) + '"' + "," + '"' + \ str(surname) + '"' + "," + '"' + str(client_num) + '"' + "," + '"' + \ str(room) + '"' + "," + '"' + str(period) + \ '"' + "," + '"'+ str(bill_numb) + '"' + ", False)" bill_list.append(bill_numb) return c def show_single_bill(): """Prints the bill of a given bill number.""" print("Volgenden Rechnungsnummern stehen zur Auswahl:") print(bill_list) while True: k = input("Rechnungsnummer? ") if k in bill_list or k == "abbrechen": break if k != "abbrechen": try: c = str(k) + ".show_bill()" exec(c) except: print("Rechnung wurde nicht gefunden.") def pay_your_bill(): """Function for pay a bill of a client.""" print("Folgenden Rechnungsnummern stehen zur Auswahl:") print(bill_list) print("Rechungsnummer? ") while True: bill =input().strip().lower() if bill in bill_list or bill == "abbrechen": break if bill != "abbrechen": try: c = str(bill) + ".pay_bill()" exec(c) except: print("Rechung wurde nicht gefunden.") def delete_bill(bill_numb): """Function that calls the delete function of a bill in the accounting class.""" k = str(bill_numb) + ".delete_bill(bill_numb)" exec(k) #-------------ADDITIONAL---CLIENT---METHODS------------------------- def clear(): """Clear function for clean surface.""" if os.name == "posix": os.system("clear") elif os.name in ("nt", "dos", "ce"): os.system('cls') else: print(80 * "\n") def add_client(): """Add a new client. Returns: c: command for creating the client in client class.""" while True: name = input("Name : ") if name.isalpha(): break while True: surname = input("Nachname :") if surname.isalpha(): break period = None client_num = "c" + str(Client.clients) room_num = None key_num = None c = str(client_num) + " = Client(" + '"' + str(name) + '"' + "," + '"' +\ str(surname) + '"' + "," + '"' + str(client_num) + '"' + "," + '"' + \ str(room_num) + '"' + "," + '"' + str(period) + '"' + "," + '"'+ \ str(key_num) + '"' + ",[], False, False)" client_list.append(client_num) all_clients.append(client_num) return c clear() #Path for soundfile dir_path = os.path.dirname(os.path.realpath(__file__)) #Checks if simpleaudio module is imported imported = True try: import simpleaudio except ModuleNotFoundError: imported = False def play_sound(): """Plays sound with simpleaudio module. Returns: play_obj: plays the sound None if no sound plays.""" if imported: try: wave_obj = simpleaudio.WaveObject.from_wave_file\ (os.path.join(dir_path, "grandhotel.wav")) play_obj = wave_obj.play() return play_obj except: print("Audiodatei nicht gefunden.") return None def stop_sound(play_obj): """Stops the sound.""" if play_obj is not None: play_obj.stop() def ascii_print(): """Prints the intro logo.""" with open('ascii_print_hotel', 'r', encoding='utf8') as ascii_: for line in ascii_: sys.stdout.write(line) time.sleep(0.1) """-------------START-----INTERFACE--------------------""" system_list = ["1", "2", "3", "4", "5"] clear() #Intro sound play_obj = play_sound() #Intro Logo Print ascii_print() print("\t\tWELCOME TO THE GRAND BUDAPEST HOTEL SYSTEM") input("\t\t\tPress enter to continue") clear() while True: print("Im System stehen Ihnen verschiedene Funktionen zur Verfügung.\n") print(""" 1. Buchhaltung 2. Kundenverwaltung 3. Zimmerverwaltung 4. Schlüsselverwaltung 5. Dienstpläne Hilfe Beenden\n""") while True: print("Welches der folgenden Systeme möchten Sie öffnen?") system = input().strip().lower() if system in system_list or system == "beenden": break if system == "hilfe": print(""" Um eines der Systeme zu öffnen, geben Sie die entsprechende Zahl ein. Um das Programm zu beenden, geben Sie beenden ein.""") input() continue else: clear() print("Bitte wählen Sie aus einem der bestehenden Systeme aus.") print(""" 1. Buchhaltung 2. Kundenverwaltung 3. Zimmerverwaltung 4. Schlüsselverwaltung 5. Dienstpläne Hilfe Beenden\n""") #"""-----------INTERFACE-----ACCOUNTING------------------""" if system == "1": #Accounting clear() while True: print("Willkommen in der Buchhaltung") print("Welche der folgenen Aktionen möchten Sie ausführen") print(""" 1. Rechnung anzeigen 2. Rechnung bezahlen 3. Rechnung löschen Hilfe Abbrechen """) account = input().strip().lower() if account == "hilfe": print(""" Um eine der Aktionen durchzuführen, geben Sie die entsprechende Zahl ein. 1.Rechnung anzeigen: Geben Sie eine vorhandene Rechnungsnummer ein, die sich in der Liste befindet. 2.Rechnung bezahlen: Geben Sie eine vorhandene Rechnungsnummer ein, die sich in der Liste befindet. 3.Rechnung löschen: Geben Sie eine vorhandene Rechnungsnummer ein, die sich in der Liste befindet. Sie können jederzeit über die Eingabe von abbrechen ins Hauptmenü zurückkehren. """) input() clear() continue if account == "1": print("Rechnung anzeigen\n") show_single_bill() input() clear() continue if account == "2": print("Rechung bezahlen\n") pay_your_bill() input() clear() continue if account == "3": print("Rechnung löschen\n") while True: print("Folgenden Rechnungsnummern stehen zur Auswahl:") print(bill_list) print("Rechungsnummer? ") bill_numb =input().strip().lower() if bill_numb in bill_list or bill_numb == "abbrechen": break if bill_numb == "abbrechen": clear() break else: delete_bill(bill_numb) # Delete bill at client bill_list.remove(bill_numb) # Delete bill at bill_list delete_ = "del " + bill_numb exec(delete_) # Delete bill in system input() clear() continue if account == "abbrechen": clear() break #"""-----------INTERFACE-----CLIENT------------------""" if system == "2": #Client clear() while True: print("Willkommen in der Kundenverwaltung") print("Welche der folgenen Aktionen möchten Sie ausführen") print(""" 1. Kunde hinzufügen 2. Kunde anzeigen 3. Kunde einchecken 4. Kunde auschecken 5. Freie Zimmer über Zeitraum anzeigen. Hilfe Abbrechen """) client = input().strip().lower() if client == "hilfe": print(""" Um eine der Aktionen durchzuführen, geben Sie die entsprechende Zahl ein. 1. Kunde hinzufügen: Geben Sie zuerst den Vornamen des Kunden an, anschließend den Nachnamen. 2. Kunde anzeigen: Geben Sie eine vorhandene Kundennummer ein, die sich in der Liste befindet. 3. Kunde einchecken: Geben Sie eine vorhandene Rechnungsnummer ein, die sich in der Liste befindet. Geben Sie einen vorhandenen Zimmernamen ein, der sich in der Liste befindet. Geben Sie einen Aufenthaltszeitraum nach folgendem Schema ein: Anreisetag Anreisemonat Abreisetag Abreisemonat Sie können über die Eingabe von abbrechen ins Hauptmenü zurückkehren. """) input() clear() continue if client == "1": print("Kunde hinzufügen\n") c = add_client() exec(c) clear() continue if client == "2": print("Kunde anzeigen\n") print(all_clients) while True: k = input("Über welchen Kunden wollen sie sich Information\ anzeigen lassen? ") if k in all_clients: break else: print("Dieser Kunde ist leider nicht im System.") c = str(k) + ".info()" exec(c) input() clear() continue if client == "3": print("Kunde einchecken\n") print("Welchen Kunden möchten Sie einchecken?") print(client_list) while True: client = input() if client in client_list: break while True: print(reference) print("Zimmerauswahl") room_ = input() if room_ in reference: break else: print("Dieses Zimmer ist in unserem Hotel leider nicht\ vorhanden.") print("Aufenthaltszeitraum") while True: day_arrival = input("Anreisetag: ") if day_arrival.isdigit() and 0 < int(day_arrival) and \ int(day_arrival) < 28: break while True: month_arrival = input("Anreisemonat: ") if month_arrival.isdigit() and 0 < int(month_arrival) and\ int(month_arrival) < 12: break while True: day_depature = input("Abreisetag: ") if day_depature.isdigit() and 0 < int(day_depature) and\ int(day_depature) < 28: break while True: month_depature = input("Abreisemonat: ") if month_depature.isdigit() and 0 < int(month_depature) \ and int(month_depature) < 12: break period = str(day_arrival) + "," +str(month_arrival) + "," + \ str(day_depature) + "," + str(month_depature) check_ = "j = " + str(room_) + ".is_free(" + "'" + str(client)\ + "'" + "," + "'" + str(room_) + "'" + "," + "'" + str(period) + "'" + ")" try: exec(check_) except: pass try: exec(j) except: pass input() clear() continue if client == "4": print("Auschecken\n") print("Welchen Gast möchten Sie auschecken?") print(checked_in_list) while True: client = input() if client in checked_in_list: checking_out = str(client) + ".check_out()" exec(checking_out) break if client == "abbrechen": break input() clear() continue if client == "5": print("Freie Zimmer anzeigen\n") while True: print("In welchem Zeitraum möchten Sie schauen,\ ob Zimmer frei sind?") print("Aufenthaltszeitraum") while True: day_arrival = input("Anreisetag: ") if day_arrival.isdigit() and 0 < int(day_arrival) \ and int(day_arrival) < 28: break while True: month_arrival = input("Anreisemonat: ") if month_arrival.isdigit() and 0 < int(month_arrival) \ and int(month_arrival) < 12: break while True: day_depature = input("Abreisetag: ") if day_depature.isdigit() and 0 < int(day_depature) \ and int(day_depature) < 28: break while True: month_depature = input("Abreisemonat: ") if month_depature.isdigit() and 0 < \ int(month_depature) and int(month_depature) < 12: break period = str(day_arrival) + "," + str(month_arrival) +\ "," + str(day_depature) + "," + str(month_depature) for i in reference: k = str(i) + ".is_occupied(" + "'" + str(i) + "'"\ + "," + "'" + str(period) + "'" + ")" exec(k) break input() clear() continue if client == "abbrechen": input() clear() break #"""-----------INTERFACE-----ROOM------------------""" if system == "3": #Room clear() while True: print("\nWillkommen in der Zimmerverwaltung") print("Welche der folgenen Aktionen möchten Sie ausführen") print(""" 1. Zimmerstatus anzeigen Hilfe Abbrechen """) room_input = input().strip().lower() if room_input == "hilfe": print(""" Um eine der Aktionen durchzuführen, geben Sie die entsprechende Zahl ein. 1. Zimmerstatus anzeigen: Geben Sie eine vorhandene Kundennummer ein, die sich in der Liste befindet. Wählen Sie über die Eingabe der entsprechenden Zahl, das gewünschte Ausgabeformat: 1. Alle Informationen 2. Nummer 3. Gast Sie können über die Eingabe von abbrechen ins Hauptmenü zurückkehren. """) input() clear() continue if room_input == "1": while True: print("Zimmerstatus anzeigen\n") print(reference) print("Name des Zimmers:") dorm = input() if dorm in reference: print(""" 1. Ale Informationen 2. Nummer 3.Gast""") dorm_info = input() if dorm_info == "1": print("Zimmer:", dorm) dorm_exec = str(dorm) + ".info()" exec(dorm_exec) input() clear() break if dorm_info == "2": print("Zimmer:", dorm) dorm_exec = str(dorm) + ".info("+ "'Nummer'" +")" exec(dorm_exec) input() clear() break if dorm_info == "3": print("Zimmer:", dorm) dorm_exec = str(dorm) + ".info("+ "'Gast'" +")" exec(dorm_exec) input() clear() break if dorm_info == "abbrechen": clear() break if room_input == "abbrechen": clear() break if system == "4": #Key clear() while True: print("Willkommen in der Schlüsselverwaltung") print("Welche der folgenen Aktionen möchten Sie ausführen") print(""" 1. Schlüsselstatus anzeigen Hilfe Abbrechen""") key_input = input().strip().lower() if key_input == "hilfe": print(""" Um eine der Aktionen durchzuführen, geben Sie die entsprechende Zahl ein. 1. Schlüsselstatus anzeigen: Geben Sie eine vorhandene Schlüsselnummer ein, die sich in der Liste befindet. Sie können über die Eingabe von abbrechen ins Hauptmenü zurückkehren. """) input() clear() continue if key_input == "1": while True: print("Schlüsselstatus anzeigen\n") all_key_numbers = ["11", "12", "21", "22", \ "31", "32", "41", "42"] print(all_key_numbers) key_num = input("Schlüsselnummer ") print("") if key_num in all_key_numbers: key_print = "key_" + key_num + ".status_key()" exec(key_print) input() clear() break if key_num == "abbrechen": clear() break else: print("Was ist schief gelaufen") if key_input == "abbrechen": clear() break if system == "5": #duty_roster clear() def duty_roster_write(): """Creates duty roster for hotel employees.""" with open('dienstplan.txt', 'w', encoding='utf8') as d: employees = ['M. Gustave', 'Zero Mustafa', 'M. Jean',\ 'Agatha', 'M. Chuck'] job = ['Concierge', 'Lobby-Boy', 'Rezeptionist', 'Portier'] i = 1 while i < 53: random.shuffle(employees) random.shuffle(job) a = "KW" + str(i) d.write(a + "#" + employees[0] + ": " + job[0] + "#" +\ employees[1] + ": " + job[1] + "#" + employees[2] + ": " + job[2] + "#" + \ employees[3] + ": " + job[3] + "#" + "frei: " + employees[4] + "\n") i += 1 def duty_roster_read(): """Prints duty roster of employees.""" with open('dienstplan.txt', 'r', encoding='utf8') as d: for line in d: print(line) while True: print("\nWillkommen dei den Dienstplänen") print("Welche der folgenen Aktionen möchten Sie ausführen") print(""" 1. Dienstplan erstellen und anzeigen 2. Dienstplan exportieren 3. Dienstplan importieren Hilfe Abbrechen""") duty = input().strip().lower() if duty == "hilfe": print(""" Um eine der Aktionen durchzuführen, geben Sie die entsprechende Zahl ein. 1. Dienstplan erstellen und anzeigen: Der Dienstplan wird automatisch erstellt und angezeigt. 2. Dienstplan exportieren: Der Dienstplan wird im Verzeichnis automatisch erstellt. 3. Dienstplan importieren: Der Dienstplan, der sich im Verzeichnis befindet, wird angezeigt. Sie können über die Eingabe von abbrechen ins Hauptmenü zurückkehren. """) input() clear() continue if duty == "1": try: duty_roster_write() duty_roster_read() except: print("Es konnte kein Dienstplan erstellt werden.") input() clear() continue if duty == "2": try: duty_roster_write() print("Der Dienstplan wurde erfolgreich exportiert.") except: print("Der Diensplan konnte nicht exportiert werden.") input() clear() continue if duty == "3": try: duty_roster_read() except: print("Es konnte kein Dienstplan unter dem Namen \ dienstplan.txt im Verzeichnis gefunden werden.") input() clear() continue if duty == "abbrechen": input() clear() break if system == "beenden": clear() print("The Grand Budapest Hotel wünscht noch einen angenehmen Tag.") print("Auf Wiedersehen!") break