diff --git a/The_Grand_Budapest_Hotel_System.py b/The_Grand_Budapest_Hotel_System.py new file mode 100644 index 0000000..0c0e4d5 --- /dev/null +++ b/The_Grand_Budapest_Hotel_System.py @@ -0,0 +1,1212 @@ +"""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 diff --git a/client_test.py b/client_test.py index 0da8fa8..0c0e4d5 100644 --- a/client_test.py +++ b/client_test.py @@ -1,9 +1,18 @@ +"""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------------------------------------------ @@ -644,10 +653,14 @@ def play_sound(): None if no sound plays.""" if imported: - wave_obj = simpleaudio.WaveObject.from_wave_file\ + try: + wave_obj = simpleaudio.WaveObject.from_wave_file\ (os.path.join(dir_path, "grandhotel.wav")) - play_obj = wave_obj.play() - return play_obj + play_obj = wave_obj.play() + return play_obj + except: + print("Audiodatei nicht gefunden.") + return None