100% lauffähig pep8 Check fehlt noch. Doc Strings sind alle eingefügt.

This commit is contained in:
david_g 2021-02-05 19:28:48 +01:00
parent d1d3438d20
commit daa3ee18bd
2 changed files with 316 additions and 185 deletions

View File

@ -6,51 +6,65 @@ import random
#----------------CLASS---KEY------------------------------------------ #----------------CLASS---KEY------------------------------------------
class Key: class Key:
"""Key class for key management."""
how_many_keys = 0 how_many_keys = 0
# Initialisation of keys
def __init__(self, keynumber): def __init__(self, keynumber):
"""Initialization of a new key object."""
self.number = keynumber self.number = keynumber
self.possessor = "Rezeption" self.possessor = "Rezeption"
#where are the keys
def status_key(self, keynumber=None): def status_key(self, keynumber=None):
"""Prints the current possessor of a key."""
print("Schlüssel", self.number, "im Besitz", self.possessor) print("Schlüssel", self.number, "im Besitz", self.possessor)
def hand_out_key(self, keynumber, Guest): def hand_out_key(self, keynumber, guest):
self.possessor = Guest """Changes the current possessor of a key to the guest who checks
in."""
self.possessor = guest
def get_back_key(self, keynumber): def get_back_key(self, keynumber):
"""Changes the current possessor of a key to the reception."""
self.possessor = "Rezeption" self.possessor = "Rezeption"
# Generates all the keys, two for each room # Generates all the keys, two for each room.
# results in keynumbers: 11, 12, 21, 22, 31, 32, 41, 42 # results in keynumbers: 11, 12, 21, 22, 31, 32, 41, 42 .
key_list = [] key_list = []
for i in range(11, 42, 10): for i in range(11, 42, 10):
a = "key_" + str(i) + " = Key(" + str(i) + ")" a = "key_" + str(i) + " = Key(" + str(i) + ")"
exec(a) exec(a)
a2 = "key_list.append(key_" + str(i) + ")" a2 = "key_list.append(key_" + str(i) + ")"
exec(a2) exec(a2)
b = "key_" + str(i+1) + " = Key(" + str(i+1) + ")" b = "key_" + str(i+1) + " = Key(" + str(i+1) + ")"
exec(b) exec(b)
b2 = "key_list.append(key_" + str(i+1) + ")" b2 = "key_list.append(key_" + str(i+1) + ")"
exec(b2) exec(b2)
#----------------CLASS---CLIENT-------------------------------------
#List of clients that are currently checked in.
#----------------CLASS---CLIENT------------------------------------------
checked_in_list = [] checked_in_list = []
#List of clients that are currently checked out.
client_list = [] client_list = []
#List of all clients of the hotel.
all_clients = [] all_clients = []
class Client(): class Client():
months = ['Januar', 'Februar','März','April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'] """Client class for customer management."""
months = ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli',\
'August', 'September', 'Oktober', 'November', 'Dezember']
clients = 0 clients = 0
def __init__(self, name: str, surname: str, client_num: str, room: str, period, key_num: int, bookings, status: bool,\
def __init__(self, name: str, surname: str, client_num: str, room: str,\
period, key_num: int, bookings, status: bool,\
checked_in: bool): checked_in: bool):
"""Initialization of a new client object."""
self.name = name self.name = name
self.surname = surname self.surname = surname
self.client_num = client_num self.client_num = client_num
@ -60,59 +74,87 @@ class Client():
self.bookings = [] self.bookings = []
self.status = False self.status = False
self.checked_in = checked_in self.checked_in = checked_in
Client.clients += 1
def check_in(self, room, key_num, period): def check_in(self, room, key_num, period):
print("Check In") """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.checked_in = True
self.period = str(period) self.period = str(period)
room_list[reference.index(str(room))].occupy(self.surname, self.period) room_list[reference.index(str(room))].occupy(self.surname, self.period)
self.room = str(room) self.room = str(room)
num_ = "key_" + str(key_num) + ".hand_out_key(" + str(key_num) + "," + "'" + str(self.surname) + "')" 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: try:
exec(num_) exec(num_)
self.key_num = key_num
checked_in_list.append(self.client_num)
client_list.remove(str(self.client_num))
if self.status == True:
print("Der Kunde besitzt VIP Previlegien. Er erhält kostenloses \
Frühstück sowie die kostenlose Benutzung der Mini-Bar.")
except: except:
("Schlüssel mit Daten nicht gefunden.") ("Schlüssel mit Daten nicht gefunden.")
new_bill = add_bill(self.name, self.surname, self.client_num, room, self.period) if self.status == True:
print("Der Kunde besitzt VIP Previlegien. 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 return new_bill
def check_out(self): def check_out(self):
room_list[reference.index(self.room)].free() """Check out function: clear room, key to reception"""
key_num = self.key_num if self.checked_in == True:
num_ = "key_" + str(key_num) + ".get_back_key(" + str(key_num)+ ")"
room_list[reference.index(self.room)].free()
try: key_num = self.key_num
exec(num_) num_ = "key_" + str(key_num) + ".get_back_key(" + str(key_num) +\
print("Der Gast ist erfolgreich ausgecheckt worden.") ")"
self.checked_in = False self.checked_in = False
self.room = None self.room = None
self.period = None self.period = None
self.key_num = None self.key_num = None
self.vip_status()
checked_in_list.remove(self.client_num) checked_in_list.remove(self.client_num)
client_list.append(self.client_num) client_list.append(self.client_num)
except: try:
("Schlüssel mit Daten nicht gefunden.") exec(num_)
print("Der Gast ist erfolgreich ausgecheckt worden.")
except:
("Schlüssel mit Daten nicht gefunden.")
def client_bill(self, bill_num): def client_bill(self, bill_num):
"""Appends the new bill number to the bookings of client."""
self.bookings.append(str(bill_num)) self.bookings.append(str(bill_num))
def client_bill_delete(self, 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: if bill_num in self.bookings:
self.bookings.remove(bill_num) self.bookings.remove(bill_num)
print("Rechnung wurde beim Gast", self.client_num, "gelöscht.") print("Rechnung wurde beim Gast", self.client_num, "gelöscht.")
self.check_out()
def vip_status(self): def vip_status(self):
"""Adjusts the VIP Status of a client."""
if len(self.bookings) > 3: if len(self.bookings) > 3:
self.status = True self.status = True
# Length of stay as print else:
self.status = False
def period_print(self): def period_print(self):
"""Prints the stay period of a guest in a legible format."""
# creates a list format to work with
stay_period = [] stay_period = []
num_string = "" num_string = ""
for i in self.period: for i in self.period:
@ -132,6 +174,7 @@ Frühstück sowie die kostenlose Benutzung der Mini-Bar.")
month_print = Client.months[month_num] month_print = Client.months[month_num]
print("Der Kunde bleibt", abs(days), "Tage.") print("Der Kunde bleibt", abs(days), "Tage.")
print("Vom", stay_period[0], "bis", stay_period[2], month_print) print("Vom", stay_period[0], "bis", stay_period[2], month_print)
# Across months # Across months
if stay_period[1] != stay_period[3]: if stay_period[1] != stay_period[3]:
# Stay period more than 1 month # Stay period more than 1 month
@ -147,11 +190,12 @@ Frühstück sowie die kostenlose Benutzung der Mini-Bar.")
month_print_1 = Client.months[month_num_1] month_print_1 = Client.months[month_num_1]
month_print_2 = Client.months[month_num_2] month_print_2 = Client.months[month_num_2]
print("Der Kunde bleibt", abs(days), "Tage.") print("Der Kunde bleibt", abs(days), "Tage.")
print("Vom", stay_period[0], month_print_1, "bis", stay_period[2], month_print_2) print("Vom", stay_period[0], month_print_1, "bis", \
stay_period[2], month_print_2)
# Client information
def info(self, action = None): def info(self, action = None):
"""Prints infomation of a client, selected if desired."""
dic_ = {"Name" : self.name, dic_ = {"Name" : self.name,
"Nachname" : self.surname, "Nachname" : self.surname,
"Kundennummer" : self.client_num, "Kundennummer" : self.client_num,
@ -182,39 +226,50 @@ Frühstück sowie die kostenlose Benutzung der Mini-Bar.")
class Room: class Room:
''' Implementierung der Klasse Zimmer ''' '''Room class for room management.'''
def __init__(self, room_number, guest=None, period=None): def __init__(self, room_number, guest=None, period=None):
"""Initialization of a new room object."""
self.number = room_number self.number = room_number
self.occupied = False self.occupied = False
self.resident = None self.resident = None
self.period = None self.period = None
# Room gets occupied by a client
def occupy(self, guest, period): def occupy(self, guest, period):
"""Values in accordance with the given information,
when room gets occupied"""
self.occupied = True self.occupied = True
self.resident = guest self.resident = guest
self.period = period self.period = period
# Room is no longer occupied
def free(self): def free(self):
"""Frees the room."""
self.occupied = False self.occupied = False
self.resident = None self.resident = None
self.period = None self.period = None
def is_free(self, client_num, room_name, period): 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 occupied = self.period
if occupied == None: if occupied == None:
room_types = [["Single", 10], ["Double", 20], ["Suite", 30], ["Panorama_Suite", 40]] room_types = [["Single", 10], ["Double", 20], ["Suite", 30],\
["Panorama_Suite", 40]]
for i in room_types: for i in room_types:
if i[0] == room_name: if i[0] == room_name:
key_num = i[1]+1 key_num = i[1]+1
check = "exec(" + str(client_num) + ".check_in(" + "'" + str(room_name) + "'" + "," + str(key_num)\ check = "exec(" + str(client_num) + ".check_in(" + "'" + \
+ "," + "'" + str(period) + "'" +"))" str(room_name) + "'" + "," + str(key_num) + "," + "'" + str(period) + "'" +"))"
print(check) return (check)
exec(check)
else: else:
stay_period = [] stay_period = []
@ -240,38 +295,43 @@ class Room:
stay_period_new.append(num_string) stay_period_new.append(num_string)
if int(stay_period[3]) < int(stay_period_new[1]): if int(stay_period[3]) < int(stay_period_new[1]):
room_types = [["Single", 10], ["Double", 20], ["Suite", 30], ["Panorama_Suite", 40]] room_types = [["Single", 10], ["Double", 20], ["Suite", 30],\
["Panorama_Suite", 40]]
for i in room_types: for i in room_types:
if i[0] == room_name: if i[0] == room_name:
key_num = i[1]+1 key_num = i[1]+1
check = "exec(" + str(client_num) + ".check_in(" + "'" + str(room_name) + "'" + "," + str(key_num)\ check = "exec(" + str(client_num) + ".check_in(" + "'" +\
+ "," + "'" + str(period) + "'" +"))" str(room_name) + "'" + "," + str(key_num) + "," + "'" + str(period) + "'" +"))"
print(check) return (check)
exec(check)
if int(stay_period[3]) > int(stay_period_new[1]): if int(stay_period[3]) > int(stay_period_new[1]):
print("Das Zimmer", room_name, " ist in dem gewünschten Zeitraum belegt.") 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[3]) == int(stay_period_new[1]):
if int(stay_period[0]) > int(stay_period_new[2]): if int(stay_period[2]) > int(stay_period_new[0]):
print("Das Zimmer", room_name, " ist in dem gewünschten Zeitraum belegt.") print("Das Zimmer", room_name, "ist in dem gewünschten\
Zeitraum belegt.")
if int(stay_period[0]) <= int(stay_period_new[2]): if int(stay_period[2]) <= int(stay_period_new[0]):
room_types = [["Single", 10], ["Double", 20], ["Suite", 30], ["Panorama_Suite", 40]] room_types = [["Single", 10], ["Double", 20],\
["Suite", 30], ["Panorama_Suite", 40]]
for i in room_types: for i in room_types:
if i[0] == room_name: if i[0] == room_name:
key_num = i[1]+1 key_num = i[1]+1
check = "exec(" + str(client_num) + ".check_in(" + "'" + str(room_name) + "'" + "," + str(key_num)\ check = "exec(" + str(client_num) + ".check_in(" +\
+ "," + "'" + str(period) + "'" +"))" "'" + str(room_name) + "'" + "," + str(key_num) + "," + "'" + \
print(check) str(period) + "'" +"))"
exec(check) return (check)
def is_occupied(self, room_name, period): def is_occupied(self, room_name, period):
"""Checks if room is available in given period."""
if self.period == None: if self.period == None:
print("Das Zimmer", str(room_name)," ist frei.") print("Das Zimmer", str(room_name)," ist frei.")
if self.period != None: if self.period != None:
@ -296,25 +356,29 @@ class Room:
num_string = "" num_string = ""
stay_period_new.append(num_string) stay_period_new.append(num_string)
#print(stay_period, stay_period_new)
if int(stay_period[3]) < int(stay_period_new[1]): if int(stay_period[3]) < int(stay_period_new[1]):
print(stay_period[3], stay_period_new[1]) print(stay_period[3], stay_period_new[1])
print("Das Zimmer", room_name, "ist in dem gewünschten Zeitraum frei.") print("Das Zimmer", room_name, "ist in dem gewünschten\
Zeitraum frei.")
if int(stay_period[3]) > int(stay_period_new[1]): if int(stay_period[3]) > int(stay_period_new[1]):
print("Das Zimmer", room_name, " ist in dem gewünschten Zeitraum belegt.") 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[3]) == int(stay_period_new[1]):
if int(stay_period[2]) > int(stay_period_new[0]): if int(stay_period[2]) > int(stay_period_new[0]):
print("Das Zimmer", room_name, " ist in dem gewünschten Zeitraum belegt.") print("Das Zimmer", room_name, "ist in dem gewünschten\
#print(stay_period[2], stay_period_new[0]) Zeitraum belegt.")
if int(stay_period[2]) <= int(stay_period_new[0]): if int(stay_period[2]) <= int(stay_period_new[0]):
print("Das Zimmer", room_name, "ist in dem gewünschten Zeitraum frei.") print("Das Zimmer", room_name, "ist in dem gewünschten\
#print(stay_period[2], stay_period_new[0]) Zeitraum frei.")
# room information
def info(self, action = None): def info(self, action = None):
"""Prints infomation of a room, selected if desired."""
dic_ = {"Nummer" : self.number, dic_ = {"Nummer" : self.number,
"Gast" : self.resident, "Gast" : self.resident,
} }
@ -325,9 +389,11 @@ class Room:
if action == "Gast": if action == "Gast":
if dic_["Gast"] != None: if dic_["Gast"] != None:
print("Das Zimmer", str(self.number), "ist gerade vom Gast", dic_["Gast"], "belegt") print("Das Zimmer", str(self.number),\
"ist gerade vom Gast", dic_["Gast"], "belegt")
else: else:
print("Das Zimmer", str(self.number), "ist im Moment nicht belegt.") print("Das Zimmer", str(self.number),\
"ist im Moment nicht belegt.")
else: else:
for i in dic_: for i in dic_:
@ -337,7 +403,8 @@ class Room:
# Generates all the rooms # Generates all the rooms
# nr.10-"Single", nr.20-"Double", nr.30-"Suite", nr.40-"Panorama_Suite" # nr.10-"Single", nr.20-"Double", nr.30-"Suite", nr.40-"Panorama_Suite"
reference = ["Single", "Double", "Suite", "Panorama_Suite"] reference = ["Single", "Double", "Suite", "Panorama_Suite"]
room_types = [["Single", 10], ["Double", 20], ["Suite", 30], ["Panorama_Suite", 40]] room_types = [["Single", 10], ["Double", 20], ["Suite", 30], \
["Panorama_Suite", 40]]
room_list = [] room_list = []
for i in room_types: for i in room_types:
tmp = i[0] + " = Room(" + str(i[1]) + ")" tmp = i[0] + " = Room(" + str(i[1]) + ")"
@ -345,14 +412,15 @@ for i in room_types:
tmp = "room_list.append(" + str(i[0]) + ")" tmp = "room_list.append(" + str(i[0]) + ")"
exec(tmp) exec(tmp)
#----------------CLASS--ACCOUNTING---------------------------- #----------------CLASS--ACCOUNTING----------------------------
class Accounting(): class Accounting():
'''Accounting class for accounting management.'''
all_bills = [] all_bills = []
counter = 0 counter = 0
def __init__(self, name:str, surname:str, client_num:str, room:str, period:str, bill_num:str, bill_status:bool): def __init__(self, name:str, surname:str, client_num:str, room:str,\
print("Wird Ausgeführt") period:str, bill_num:str, bill_status:bool):
"""Initialization of a new bill object."""
self.name = name self.name = name
self.surname = surname self.surname = surname
self.client_num = client_num self.client_num = client_num
@ -361,16 +429,17 @@ class Accounting():
self.bill_status = bill_status self.bill_status = bill_status
Accounting.counter += 1 Accounting.counter += 1
room_types = [["Single", 10], ["Double", 20], ["Suite", 30], ["Panorama_Suite", 40]] room_types = [["Single", 10], ["Double", 20], ["Suite", 30],\
["Panorama_Suite", 40]]
for i in room_types: for i in room_types:
if i[0] == room: if i[0] == room:
self.room = i[1] self.room = i[1]
var = str(client_num) + ".client_bill(" + "'" + bill_num + "'" + ")" var = str(client_num) + ".client_bill(" + "'" + bill_num + "'" + ")"
print(var)
exec(var) exec(var)
def show_bill(self): def show_bill(self):
"""Prints the bill."""
stay_period = [] stay_period = []
num_string = "" num_string = ""
@ -395,25 +464,27 @@ class Accounting():
if int(stay_period[3]) - int(stay_period[1]) > 1: if int(stay_period[3]) - int(stay_period[1]) > 1:
days = 28 - int(stay_period[0]) + int(stay_period[2]) + \ days = 28 - int(stay_period[0]) + int(stay_period[2]) + \
((int(stay_period[3]) - int(stay_period[1])-1) * 28) ((int(stay_period[3]) - int(stay_period[1])-1) * 28)
# Stay period # Stay period
else: else:
days = 28 - int(stay_period[0]) + int(stay_period[2]) days = 28 - int(stay_period[0]) + int(stay_period[2])
days = abs(days) days = abs(days)
costs = int(days) * int(self.room) costs = int(days) * int(self.room)
"""_______________________________________________________________________"""
lines = [[] for i in range(13)] lines = [[] for i in range(13)]
lines[0].append( '┌─────────────────────────────┐') lines[0].append( '┌─────────────────────────────┐')
lines[1].append( '│ Rechnung │') lines[1].append( '│ Rechnung │')
lines[2].append( '│ │') lines[2].append( '│ │')
lines[3].append( '│Kunde: {} {} '.format(self.name, self.surname)) lines[3].append( '│Kunde: {} {} '.format(self.name,\
self.surname))
lines[4].append( '│Zimmer: {} '.format(self.room)) lines[4].append( '│Zimmer: {} '.format(self.room))
lines[5].append( '│Anz. Tage:{} '.format(days)) lines[5].append( '│Anz. Tage:{} '.format(days))
lines[6].append( '│pro Nacht:{}'.format(self.room)) lines[6].append( '│pro Nacht:{}'.format(self.room))
lines[7].append( '│Kosten: {}'.format(costs)) lines[7].append( '│Kosten: {}'.format(costs))
lines[8].append( '') lines[8].append( '')
lines[9].append( '│Rech. Nr.:{} '.format(self.bill_num,)) lines[9].append( '│Rech. Nr.:{} '.format\
lines[10].append('│Beglichen:{} '.format(self.bill_status)) (self.bill_num,))
lines[10].append('│Beglichen:{} '.format\
(self.bill_status))
lines[11].append('│ │') lines[11].append('│ │')
lines[12].append('└─────────────────────────────┘') lines[12].append('└─────────────────────────────┘')
@ -422,18 +493,19 @@ class Accounting():
def pay_bill(self): def pay_bill(self):
"""Pay function."""
self.bill_status = True self.bill_status = True
print("Rechnung", self.bill_num, "wurde bezahlt.") print("Rechnung", self.bill_num, "wurde bezahlt.")
def delete_bill(self, bill_num): def delete_bill(self, bill_num):
"""Deletes bill from bill list and from client."""
for i in all_clients: for i in all_clients:
var = str(i) + ".client_bill_delete(" + "'" + bill_num + "'" + ")" var = str(i) + ".client_bill_delete(" + "'" + bill_num + "'" + ")"
exec(var) exec(var)
var_ = str(i) + ".check_out()"
exec(var_)
def __del__(self): def __del__(self):
"""Called when object is destroyed."""
print("Rechnung wurde storniert.") print("Rechnung wurde storniert.")
@ -442,17 +514,33 @@ bill_list = []
def add_bill(name, surname, client_num, room, period): 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) bill_numb = "r" + str(Accounting.counter)
c = bill_numb + " = Accounting(" + '"' + str(name) + '"' + "," + '"' + \ c = bill_numb + " = Accounting(" + '"' + str(name) + '"' + "," + '"' + \
str(surname) + '"' + "," + '"' + str(client_num) + '"' + "," + '"' + str(room) + '"' + "," + '"' + str(period) + \ str(surname) + '"' + "," + '"' + str(client_num) + '"' + "," + '"' + \
str(room) + '"' + "," + '"' + str(period) + \
'"' + "," + '"'+ str(bill_numb) + '"' + ", False)" '"' + "," + '"'+ str(bill_numb) + '"' + ", False)"
bill_list.append(bill_numb) bill_list.append(bill_numb)
return c return c
def show_single_bill(): def show_single_bill():
"""Prints the bill of a given bill number."""
print("Volgenden Rechnungsnummern stehen zur Auswahl:") print("Volgenden Rechnungsnummern stehen zur Auswahl:")
print(bill_list) print(bill_list)
while True: while True:
@ -465,9 +553,12 @@ def show_single_bill():
exec(c) exec(c)
except: except:
print("Rechnung wurde nicht gefunden.") print("Rechnung wurde nicht gefunden.")
def pay_your_bill(): def pay_your_bill():
"""Function for pay a bill of a client."""
print("Folgenden Rechnungsnummern stehen zur Auswahl:") print("Folgenden Rechnungsnummern stehen zur Auswahl:")
print(bill_list) print(bill_list)
print("Rechungsnummer? ") print("Rechungsnummer? ")
@ -484,15 +575,17 @@ def pay_your_bill():
def delete_bill(bill_numb): 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)" k = str(bill_numb) + ".delete_bill(bill_numb)"
exec(k) exec(k)
#-------------ADDITIONAL---CLIENT---METHODS------------------------- #-------------ADDITIONAL---CLIENT---METHODS-------------------------
def clear(): def clear():
"""Clear function for clean surface."""
if os.name == "posix": if os.name == "posix":
os.system("clear") os.system("clear")
elif os.name in ("nt", "dos", "ce"): elif os.name in ("nt", "dos", "ce"):
@ -502,6 +595,10 @@ def clear():
def add_client(): def add_client():
"""Add a new client.
Returns:
c: command for creating the client in client class."""
while True: while True:
name = input("Name : ") name = input("Name : ")
if name.isalpha(): if name.isalpha():
@ -515,26 +612,22 @@ def add_client():
client_num = "c" + str(Client.clients) client_num = "c" + str(Client.clients)
room_num = None room_num = None
key_num = None key_num = None
c = str(client_num) + " = Client(" + '"' + str(name) + '"' + "," + '"' + \
str(surname) + '"' + "," + '"' + str(client_num) + '"' + "," + '"' + str(room_num) \ c = str(client_num) + " = Client(" + '"' + str(name) + '"' + "," + '"' +\
+ '"' + "," + '"' + str(period) + '"' + "," + '"'+ str(key_num) + '"' + ",[], False, False)" str(surname) + '"' + "," + '"' + str(client_num) + '"' + "," + '"' + \
str(room_num) + '"' + "," + '"' + str(period) + '"' + "," + '"'+ \
str(key_num) + '"' + ",[], False, False)"
client_list.append(client_num) client_list.append(client_num)
all_clients.append(client_num) all_clients.append(client_num)
return c return c
k = add_client()
exec(k)
j = c0.check_in("Suite",31, "2,3,4,5")
exec(j)
clear() clear()
#Path for soundfile
dir_path = os.path.dirname(os.path.realpath(__file__)) dir_path = os.path.dirname(os.path.realpath(__file__))
#Checks if simpleaudio module is imported
imported = True imported = True
try: try:
import simpleaudio import simpleaudio
@ -543,6 +636,12 @@ except ModuleNotFoundError:
def play_sound(): def play_sound():
"""Plays sound with simpleaudio module.
Returns:
play_obj: plays the sound
None if no sound plays."""
if imported: if imported:
wave_obj = simpleaudio.WaveObject.from_wave_file\ wave_obj = simpleaudio.WaveObject.from_wave_file\
(os.path.join(dir_path, "grandhotel.wav")) (os.path.join(dir_path, "grandhotel.wav"))
@ -552,24 +651,29 @@ def play_sound():
def stop_sound(play_obj): def stop_sound(play_obj):
"""Stops the sound."""
if play_obj is not None: if play_obj is not None:
play_obj.stop() play_obj.stop()
def ascii_print(): def ascii_print():
"""Prints the intro logo."""
with open('ascii_print_hotel', 'r', encoding='utf8') as ascii_: with open('ascii_print_hotel', 'r', encoding='utf8') as ascii_:
for line in ascii_: for line in ascii_:
sys.stdout.write(line) sys.stdout.write(line)
time.sleep(0.1) time.sleep(0.1)
system_list = ["1", "2", "3", "4", "5"]
"""-------------START-----INTERFACE--------------------""" """-------------START-----INTERFACE--------------------"""
input("Start?") system_list = ["1", "2", "3", "4", "5"]
clear() clear()
#Intro #Intro sound
play_obj = play_sound() play_obj = play_sound()
#Logo Print #Intro Logo Print
ascii_print() ascii_print()
@ -689,7 +793,8 @@ Abbrechen
print("Kunde anzeigen\n") print("Kunde anzeigen\n")
print(all_clients) print(all_clients)
while True: while True:
k = input("Über welchen Kunden wollen sie sich Information anzeigen lassen? ") k = input("Über welchen Kunden wollen sie sich Information\
anzeigen lassen? ")
if k in all_clients: if k in all_clients:
break break
else: else:
@ -716,33 +821,46 @@ Abbrechen
if room_ in reference: if room_ in reference:
break break
else: else:
print("Dieses Zimmer ist in unserem Hotel leider nicht vorhanden.") print("Dieses Zimmer ist in unserem Hotel leider nicht\
vorhanden.")
print("Aufenthaltszeitraum") print("Aufenthaltszeitraum")
while True: while True:
day_arrival = input("Anreisetag: ") day_arrival = input("Anreisetag: ")
if day_arrival.isdigit() and 0 < int(day_arrival) and int(day_arrival) < 28: if day_arrival.isdigit() and 0 < int(day_arrival) and \
int(day_arrival) < 28:
break break
while True: while True:
month_arrival = input("Anreisemonat: ") month_arrival = input("Anreisemonat: ")
if month_arrival.isdigit() and 0 < int(month_arrival) and int(month_arrival) < 12: if month_arrival.isdigit() and 0 < int(month_arrival) and\
int(month_arrival) < 12:
break break
while True: while True:
day_depature = input("Abreisetag: ") day_depature = input("Abreisetag: ")
if day_depature.isdigit() and 0 < int(day_depature) and int(day_depature) < 28: if day_depature.isdigit() and 0 < int(day_depature) and\
int(day_depature) < 28:
break break
while True: while True:
month_depature = input("Abreisemonat: ") month_depature = input("Abreisemonat: ")
if month_depature.isdigit() and 0 < int(month_depature) and int(month_depature) < 12: if month_depature.isdigit() and 0 < int(month_depature) \
and int(month_depature) < 12:
break break
period = str(day_arrival) + "," +str(month_arrival) + "," + str(day_depature) + "," + str(month_depature) period = str(day_arrival) + "," +str(month_arrival) + "," + \
str(day_depature) + "," + str(month_depature)
check_ = str(room_) + ".is_free(" + "'" + str(client) + "'" + "," + "'" + str(room_) \
+ "'" + "," + "'" + str(period) + "'" + ")" check_ = "j = " + str(room_) + ".is_free(" + "'" + str(client)\
print(check_) + "'" + "," + "'" + str(room_) + "'" + "," + "'" + str(period) + "'" + ")"
exec(check_)
try:
exec(check_)
except:
pass
try:
exec(j)
except:
pass
input()
clear() clear()
continue continue
@ -759,7 +877,7 @@ Abbrechen
if client == "abbrechen": if client == "abbrechen":
break break
input()
clear() clear()
continue continue
@ -767,31 +885,39 @@ Abbrechen
if client == "5": if client == "5":
print("Freie Zimmer anzeigen\n") print("Freie Zimmer anzeigen\n")
while True: while True:
print("In welchem Zeitraum möchten Sie schauen, ob Zimmer frei sind?") print("In welchem Zeitraum möchten Sie schauen,\
ob Zimmer frei sind?")
print("Aufenthaltszeitraum") print("Aufenthaltszeitraum")
while True: while True:
day_arrival = input("Anreisetag: ") day_arrival = input("Anreisetag: ")
if day_arrival.isdigit() and 0 < int(day_arrival) and int(day_arrival) < 28: if day_arrival.isdigit() and 0 < int(day_arrival) \
and int(day_arrival) < 28:
break break
while True: while True:
month_arrival = input("Anreisemonat: ") month_arrival = input("Anreisemonat: ")
if month_arrival.isdigit() and 0 < int(month_arrival) and int(month_arrival) < 12: if month_arrival.isdigit() and 0 < int(month_arrival) \
and int(month_arrival) < 12:
break break
while True: while True:
day_depature = input("Abreisetag: ") day_depature = input("Abreisetag: ")
if day_depature.isdigit() and 0 < int(day_depature) and int(day_depature) < 28: if day_depature.isdigit() and 0 < int(day_depature) \
and int(day_depature) < 28:
break break
while True: while True:
month_depature = input("Abreisemonat: ") month_depature = input("Abreisemonat: ")
if month_depature.isdigit() and 0 < int(month_depature) and int(month_depature) < 12: if month_depature.isdigit() and 0 < \
int(month_depature) and int(month_depature) < 12:
break break
period = str(day_arrival) + "," +str(month_arrival) + "," + str(day_depature) + "," + str(month_depature) period = str(day_arrival) + "," + str(month_arrival) +\
#print(period) "," + str(day_depature) + "," + str(month_depature)
for i in reference: for i in reference:
k = str(i) + ".is_occupied(" + "'" + str(i) + "'" + "," + "'" + str(period) + "'" + ")" k = str(i) + ".is_occupied(" + "'" + str(i) + "'"\
#print(k) + "," + "'" + str(period) + "'" + ")"
exec(k) exec(k)
break
input() input()
clear() clear()
continue continue
@ -870,7 +996,8 @@ Abbrechen""")
if key_input == "1": if key_input == "1":
while True: while True:
print("Schlüsselstatus anzeigen\n") print("Schlüsselstatus anzeigen\n")
all_key_numbers = ["11", "12", "21", "22", "31", "32", "41", "42"] all_key_numbers = ["11", "12", "21", "22", \
"31", "32", "41", "42"]
print(all_key_numbers) print(all_key_numbers)
key_num = input("Schlüsselnummer ") key_num = input("Schlüsselnummer ")
print("") print("")
@ -891,21 +1018,28 @@ Abbrechen""")
if system == "5": #duty_roster if system == "5": #duty_roster
clear() clear()
def duty_roster_write(): def duty_roster_write():
"""Creates duty roster for hotel employees."""
with open('dienstplan.txt', 'w', encoding='utf8') as d: with open('dienstplan.txt', 'w', encoding='utf8') as d:
employees = ['M. Gustave', 'Zero Mustafa', 'M. Jean', 'Agatha', 'M. Chuck'] employees = ['M. Gustave', 'Zero Mustafa', 'M. Jean',\
'Agatha', 'M. Chuck']
job = ['Concierge', 'Lobby-Boy', 'Rezeptionist', 'Portier'] job = ['Concierge', 'Lobby-Boy', 'Rezeptionist', 'Portier']
i = 1 i = 1
while i < 53: while i < 53:
random.shuffle(employees) random.shuffle(employees)
random.shuffle(job) random.shuffle(job)
a = "KW" + str(i) a = "KW" + str(i)
d.write(a + "#" + employees[0] + ": " + job[0] + "#" + employees[1]\ d.write(a + "#" + employees[0] + ": " + job[0] + "#" +\
+ ": " + job[1] + "#" + employees[2] + ": " + job[2] + "#" + employees[3] + ": " \ employees[1] + ": " + job[1] + "#" + employees[2] + ": " + job[2] + "#" + \
+ job[3] + "#" + "frei: " + employees[4] + "\n") employees[3] + ": " + job[3] + "#" + "frei: " + employees[4] + "\n")
i += 1 i += 1
def duty_roster_read(): def duty_roster_read():
"""Prints duty roster of employees."""
with open('dienstplan.txt', 'r', encoding='utf8') as d: with open('dienstplan.txt', 'r', encoding='utf8') as d:
for line in d: for line in d:
print(line) print(line)
@ -957,6 +1091,3 @@ dienstplan.txt im Verzeichnis gefunden werden.")
print("The Grand Budapest Hotel wünscht noch einen angenehmen Tag.") print("The Grand Budapest Hotel wünscht noch einen angenehmen Tag.")
print("Auf Wiedersehen!") print("Auf Wiedersehen!")
break break
#break

View File

@ -1,52 +1,52 @@
KW1#Zero Mustafa: Lobby-Boy#M. Jean: Rezeptionist#M. Chuck: Concierge#M. Gustave: Portier#frei: Agatha KW1#Zero Mustafa: Rezeptionist#M. Gustave: Concierge#M. Jean: Lobby-Boy#Agatha: Portier#frei: M. Chuck
KW2#M. Jean: Concierge#Agatha: Rezeptionist#Zero Mustafa: Lobby-Boy#M. Gustave: Portier#frei: M. Chuck KW2#Agatha: Lobby-Boy#M. Gustave: Portier#M. Chuck: Rezeptionist#M. Jean: Concierge#frei: Zero Mustafa
KW3#M. Jean: Rezeptionist#M. Gustave: Lobby-Boy#Zero Mustafa: Concierge#M. Chuck: Portier#frei: Agatha KW3#M. Jean: Rezeptionist#Zero Mustafa: Concierge#M. Gustave: Lobby-Boy#Agatha: Portier#frei: M. Chuck
KW4#M. Gustave: Portier#Zero Mustafa: Concierge#Agatha: Lobby-Boy#M. Jean: Rezeptionist#frei: M. Chuck KW4#Zero Mustafa: Portier#M. Chuck: Concierge#Agatha: Lobby-Boy#M. Gustave: Rezeptionist#frei: M. Jean
KW5#M. Gustave: Concierge#Agatha: Portier#M. Chuck: Rezeptionist#M. Jean: Lobby-Boy#frei: Zero Mustafa KW5#Agatha: Rezeptionist#Zero Mustafa: Concierge#M. Gustave: Portier#M. Jean: Lobby-Boy#frei: M. Chuck
KW6#Zero Mustafa: Portier#Agatha: Rezeptionist#M. Chuck: Concierge#M. Jean: Lobby-Boy#frei: M. Gustave KW6#Zero Mustafa: Rezeptionist#M. Jean: Lobby-Boy#Agatha: Concierge#M. Chuck: Portier#frei: M. Gustave
KW7#Agatha: Rezeptionist#M. Jean: Concierge#Zero Mustafa: Portier#M. Chuck: Lobby-Boy#frei: M. Gustave KW7#Agatha: Concierge#Zero Mustafa: Portier#M. Gustave: Lobby-Boy#M. Chuck: Rezeptionist#frei: M. Jean
KW8#M. Chuck: Lobby-Boy#M. Jean: Portier#Zero Mustafa: Rezeptionist#M. Gustave: Concierge#frei: Agatha KW8#Agatha: Concierge#M. Jean: Portier#Zero Mustafa: Lobby-Boy#M. Gustave: Rezeptionist#frei: M. Chuck
KW9#M. Chuck: Concierge#Zero Mustafa: Rezeptionist#M. Gustave: Lobby-Boy#Agatha: Portier#frei: M. Jean KW9#M. Jean: Rezeptionist#M. Gustave: Portier#Agatha: Lobby-Boy#Zero Mustafa: Concierge#frei: M. Chuck
KW10#M. Chuck: Concierge#M. Gustave: Portier#Agatha: Lobby-Boy#M. Jean: Rezeptionist#frei: Zero Mustafa KW10#Agatha: Rezeptionist#Zero Mustafa: Lobby-Boy#M. Gustave: Portier#M. Chuck: Concierge#frei: M. Jean
KW11#Zero Mustafa: Rezeptionist#M. Gustave: Concierge#Agatha: Portier#M. Chuck: Lobby-Boy#frei: M. Jean KW11#M. Jean: Concierge#Agatha: Lobby-Boy#M. Chuck: Rezeptionist#Zero Mustafa: Portier#frei: M. Gustave
KW12#M. Chuck: Concierge#Agatha: Portier#M. Gustave: Rezeptionist#Zero Mustafa: Lobby-Boy#frei: M. Jean KW12#M. Jean: Rezeptionist#Agatha: Portier#M. Gustave: Concierge#M. Chuck: Lobby-Boy#frei: Zero Mustafa
KW13#M. Chuck: Rezeptionist#Agatha: Lobby-Boy#Zero Mustafa: Portier#M. Jean: Concierge#frei: M. Gustave KW13#Agatha: Lobby-Boy#M. Chuck: Portier#M. Gustave: Rezeptionist#Zero Mustafa: Concierge#frei: M. Jean
KW14#Agatha: Portier#M. Chuck: Lobby-Boy#M. Gustave: Concierge#Zero Mustafa: Rezeptionist#frei: M. Jean KW14#M. Chuck: Concierge#Agatha: Portier#Zero Mustafa: Rezeptionist#M. Jean: Lobby-Boy#frei: M. Gustave
KW15#Zero Mustafa: Lobby-Boy#M. Gustave: Portier#Agatha: Concierge#M. Jean: Rezeptionist#frei: M. Chuck KW15#Zero Mustafa: Portier#Agatha: Concierge#M. Gustave: Lobby-Boy#M. Jean: Rezeptionist#frei: M. Chuck
KW16#M. Jean: Lobby-Boy#M. Chuck: Rezeptionist#M. Gustave: Concierge#Zero Mustafa: Portier#frei: Agatha KW16#M. Jean: Rezeptionist#Zero Mustafa: Lobby-Boy#M. Chuck: Portier#Agatha: Concierge#frei: M. Gustave
KW17#Agatha: Portier#M. Gustave: Lobby-Boy#M. Chuck: Rezeptionist#Zero Mustafa: Concierge#frei: M. Jean KW17#Zero Mustafa: Rezeptionist#Agatha: Portier#M. Chuck: Lobby-Boy#M. Gustave: Concierge#frei: M. Jean
KW18#Zero Mustafa: Rezeptionist#M. Jean: Concierge#M. Chuck: Lobby-Boy#Agatha: Portier#frei: M. Gustave KW18#M. Chuck: Portier#Zero Mustafa: Rezeptionist#M. Gustave: Concierge#Agatha: Lobby-Boy#frei: M. Jean
KW19#Agatha: Rezeptionist#M. Gustave: Portier#M. Chuck: Concierge#Zero Mustafa: Lobby-Boy#frei: M. Jean KW19#M. Gustave: Lobby-Boy#M. Chuck: Rezeptionist#Agatha: Portier#Zero Mustafa: Concierge#frei: M. Jean
KW20#M. Chuck: Lobby-Boy#Agatha: Rezeptionist#M. Gustave: Concierge#M. Jean: Portier#frei: Zero Mustafa KW20#M. Gustave: Lobby-Boy#Zero Mustafa: Concierge#M. Chuck: Portier#M. Jean: Rezeptionist#frei: Agatha
KW21#Zero Mustafa: Rezeptionist#Agatha: Portier#M. Gustave: Lobby-Boy#M. Chuck: Concierge#frei: M. Jean KW21#Agatha: Portier#Zero Mustafa: Concierge#M. Jean: Lobby-Boy#M. Gustave: Rezeptionist#frei: M. Chuck
KW22#Zero Mustafa: Rezeptionist#M. Chuck: Concierge#M. Jean: Portier#M. Gustave: Lobby-Boy#frei: Agatha KW22#Agatha: Lobby-Boy#Zero Mustafa: Portier#M. Jean: Rezeptionist#M. Chuck: Concierge#frei: M. Gustave
KW23#M. Chuck: Lobby-Boy#M. Gustave: Rezeptionist#M. Jean: Portier#Zero Mustafa: Concierge#frei: Agatha KW23#M. Gustave: Lobby-Boy#Agatha: Rezeptionist#M. Chuck: Concierge#Zero Mustafa: Portier#frei: M. Jean
KW24#M. Gustave: Concierge#Zero Mustafa: Rezeptionist#Agatha: Lobby-Boy#M. Jean: Portier#frei: M. Chuck KW24#Zero Mustafa: Lobby-Boy#M. Gustave: Concierge#M. Chuck: Rezeptionist#M. Jean: Portier#frei: Agatha
KW25#M. Gustave: Concierge#Agatha: Rezeptionist#M. Jean: Portier#Zero Mustafa: Lobby-Boy#frei: M. Chuck KW25#M. Jean: Concierge#Agatha: Lobby-Boy#M. Chuck: Portier#Zero Mustafa: Rezeptionist#frei: M. Gustave
KW26#Zero Mustafa: Lobby-Boy#M. Chuck: Portier#M. Jean: Concierge#M. Gustave: Rezeptionist#frei: Agatha KW26#M. Chuck: Rezeptionist#Agatha: Concierge#M. Gustave: Lobby-Boy#Zero Mustafa: Portier#frei: M. Jean
KW27#M. Chuck: Rezeptionist#Agatha: Portier#Zero Mustafa: Lobby-Boy#M. Jean: Concierge#frei: M. Gustave KW27#M. Chuck: Rezeptionist#M. Gustave: Concierge#Agatha: Lobby-Boy#Zero Mustafa: Portier#frei: M. Jean
KW28#Agatha: Portier#M. Gustave: Lobby-Boy#Zero Mustafa: Concierge#M. Chuck: Rezeptionist#frei: M. Jean KW28#Zero Mustafa: Rezeptionist#M. Jean: Lobby-Boy#Agatha: Portier#M. Chuck: Concierge#frei: M. Gustave
KW29#M. Jean: Portier#M. Gustave: Concierge#Zero Mustafa: Lobby-Boy#Agatha: Rezeptionist#frei: M. Chuck KW29#Agatha: Rezeptionist#M. Gustave: Portier#M. Chuck: Lobby-Boy#M. Jean: Concierge#frei: Zero Mustafa
KW30#Agatha: Rezeptionist#M. Gustave: Concierge#M. Chuck: Lobby-Boy#M. Jean: Portier#frei: Zero Mustafa KW30#M. Chuck: Lobby-Boy#M. Jean: Rezeptionist#Zero Mustafa: Portier#M. Gustave: Concierge#frei: Agatha
KW31#M. Chuck: Portier#M. Jean: Concierge#Agatha: Rezeptionist#M. Gustave: Lobby-Boy#frei: Zero Mustafa KW31#M. Chuck: Portier#Agatha: Lobby-Boy#Zero Mustafa: Rezeptionist#M. Gustave: Concierge#frei: M. Jean
KW32#M. Jean: Lobby-Boy#M. Gustave: Portier#Zero Mustafa: Rezeptionist#M. Chuck: Concierge#frei: Agatha KW32#M. Gustave: Concierge#M. Jean: Lobby-Boy#Zero Mustafa: Portier#M. Chuck: Rezeptionist#frei: Agatha
KW33#M. Jean: Lobby-Boy#Zero Mustafa: Portier#M. Gustave: Concierge#M. Chuck: Rezeptionist#frei: Agatha KW33#Zero Mustafa: Portier#Agatha: Concierge#M. Chuck: Lobby-Boy#M. Jean: Rezeptionist#frei: M. Gustave
KW34#Zero Mustafa: Lobby-Boy#M. Gustave: Concierge#M. Chuck: Portier#Agatha: Rezeptionist#frei: M. Jean KW34#M. Gustave: Lobby-Boy#M. Chuck: Concierge#Zero Mustafa: Portier#M. Jean: Rezeptionist#frei: Agatha
KW35#M. Chuck: Rezeptionist#Zero Mustafa: Concierge#M. Gustave: Portier#M. Jean: Lobby-Boy#frei: Agatha KW35#M. Gustave: Rezeptionist#Zero Mustafa: Concierge#M. Chuck: Lobby-Boy#Agatha: Portier#frei: M. Jean
KW36#Zero Mustafa: Rezeptionist#M. Chuck: Portier#M. Gustave: Lobby-Boy#M. Jean: Concierge#frei: Agatha KW36#Agatha: Portier#M. Chuck: Lobby-Boy#M. Jean: Rezeptionist#Zero Mustafa: Concierge#frei: M. Gustave
KW37#M. Gustave: Rezeptionist#Zero Mustafa: Lobby-Boy#M. Jean: Concierge#Agatha: Portier#frei: M. Chuck KW37#M. Chuck: Lobby-Boy#Zero Mustafa: Concierge#M. Jean: Portier#Agatha: Rezeptionist#frei: M. Gustave
KW38#M. Chuck: Rezeptionist#M. Gustave: Portier#M. Jean: Concierge#Zero Mustafa: Lobby-Boy#frei: Agatha KW38#Agatha: Lobby-Boy#M. Chuck: Portier#Zero Mustafa: Rezeptionist#M. Gustave: Concierge#frei: M. Jean
KW39#Agatha: Rezeptionist#M. Jean: Lobby-Boy#Zero Mustafa: Portier#M. Gustave: Concierge#frei: M. Chuck KW39#M. Jean: Rezeptionist#Zero Mustafa: Portier#M. Gustave: Concierge#M. Chuck: Lobby-Boy#frei: Agatha
KW40#M. Gustave: Lobby-Boy#Zero Mustafa: Portier#Agatha: Concierge#M. Chuck: Rezeptionist#frei: M. Jean KW40#M. Chuck: Concierge#Zero Mustafa: Portier#Agatha: Lobby-Boy#M. Gustave: Rezeptionist#frei: M. Jean
KW41#Zero Mustafa: Concierge#Agatha: Portier#M. Chuck: Lobby-Boy#M. Jean: Rezeptionist#frei: M. Gustave KW41#Agatha: Concierge#Zero Mustafa: Portier#M. Jean: Rezeptionist#M. Gustave: Lobby-Boy#frei: M. Chuck
KW42#M. Chuck: Portier#M. Jean: Rezeptionist#Agatha: Concierge#M. Gustave: Lobby-Boy#frei: Zero Mustafa KW42#M. Chuck: Lobby-Boy#Zero Mustafa: Portier#M. Gustave: Rezeptionist#M. Jean: Concierge#frei: Agatha
KW43#M. Gustave: Portier#M. Jean: Rezeptionist#Zero Mustafa: Concierge#M. Chuck: Lobby-Boy#frei: Agatha KW43#Agatha: Concierge#M. Chuck: Portier#M. Gustave: Lobby-Boy#M. Jean: Rezeptionist#frei: Zero Mustafa
KW44#Agatha: Concierge#M. Chuck: Portier#M. Gustave: Lobby-Boy#M. Jean: Rezeptionist#frei: Zero Mustafa KW44#M. Chuck: Lobby-Boy#Agatha: Portier#M. Jean: Rezeptionist#Zero Mustafa: Concierge#frei: M. Gustave
KW45#Zero Mustafa: Portier#M. Gustave: Lobby-Boy#M. Jean: Rezeptionist#M. Chuck: Concierge#frei: Agatha KW45#M. Chuck: Concierge#M. Gustave: Lobby-Boy#M. Jean: Rezeptionist#Zero Mustafa: Portier#frei: Agatha
KW46#Zero Mustafa: Concierge#M. Jean: Lobby-Boy#M. Chuck: Portier#M. Gustave: Rezeptionist#frei: Agatha KW46#M. Gustave: Lobby-Boy#Agatha: Concierge#M. Jean: Rezeptionist#M. Chuck: Portier#frei: Zero Mustafa
KW47#M. Gustave: Concierge#M. Chuck: Rezeptionist#Zero Mustafa: Portier#M. Jean: Lobby-Boy#frei: Agatha KW47#Agatha: Lobby-Boy#Zero Mustafa: Rezeptionist#M. Jean: Portier#M. Gustave: Concierge#frei: M. Chuck
KW48#M. Gustave: Portier#Zero Mustafa: Rezeptionist#M. Jean: Concierge#M. Chuck: Lobby-Boy#frei: Agatha KW48#M. Jean: Rezeptionist#Agatha: Portier#M. Chuck: Lobby-Boy#M. Gustave: Concierge#frei: Zero Mustafa
KW49#Agatha: Rezeptionist#M. Gustave: Lobby-Boy#M. Chuck: Concierge#Zero Mustafa: Portier#frei: M. Jean KW49#Agatha: Concierge#M. Chuck: Lobby-Boy#M. Jean: Portier#M. Gustave: Rezeptionist#frei: Zero Mustafa
KW50#Agatha: Concierge#M. Jean: Lobby-Boy#M. Gustave: Portier#Zero Mustafa: Rezeptionist#frei: M. Chuck KW50#Zero Mustafa: Lobby-Boy#M. Gustave: Rezeptionist#Agatha: Portier#M. Chuck: Concierge#frei: M. Jean
KW51#M. Jean: Portier#Agatha: Rezeptionist#Zero Mustafa: Lobby-Boy#M. Gustave: Concierge#frei: M. Chuck KW51#Zero Mustafa: Lobby-Boy#Agatha: Rezeptionist#M. Gustave: Portier#M. Chuck: Concierge#frei: M. Jean
KW52#Zero Mustafa: Lobby-Boy#Agatha: Rezeptionist#M. Jean: Portier#M. Chuck: Concierge#frei: M. Gustave KW52#Zero Mustafa: Concierge#M. Chuck: Portier#M. Gustave: Lobby-Boy#M. Jean: Rezeptionist#frei: Agatha