from tabulate import tabulate import sys Table1 = { "BookingName":"", "BookState":False, "PeopleNumber":0} Table2 = { "BookingName":"", "BookState":False, "PeopleNumber":0} Table3 = { "BookingName":"", "BookState":False, "PeopleNumber":0} Table4 = { "BookingName":"", "BookState":False, "PeopleNumber":0} Table5 = { "BookingName":"", "BookState":False, "PeopleNumber":0} def main(): print(" \nWelcome to our restaurante ") while True: process_menu() try: num = int(input("Choose the number for your process: ")) except ValueError: print("Enter a number (1-4)") match num: case 1: Table_menu() TableNum = take_table_num() name,PeopleNumber = take_inputing() print(Booking(TableNum,name,PeopleNumber)) case 2: Name = get_Name() print(Change_the_book(Name)) case 3: Name = get_Name() check_cancel_Name(Name) if check_cancel_Name(Name) != f"\nname: {Name} Not Found": Name, x = check_cancel_Name(Name) sure = check_sure() print(Cancel_the_book(sure,x)) else: print(f"\nname: {Name} Not Found") case 4: Exiting() case _: print("Enter a valid number") def take_table_num(): while True : try : TableNum = int(input("Choose a table via number: ")) if TableNum > 5 or TableNum < 1 : raise ValueError x = eval(f"Table{str(TableNum)}") if x["BookState"] == True: raise Exception("this table isn't free") return TableNum except ValueError : print("there is no table with this number\n") except Exception as e : print(str(e)) def take_inputing(): while True : name = get_Name() if name != None: break while True : try : PeopleNumber = int(input("Number of people who are coming: ")) if PeopleNumber > 0 : break except ValueError: print("Enter a number") return (name,PeopleNumber) def get_Name(): while True: is_valid = True Name = input("Enter book name: ").title() for i in Name.split(" ") : if not i.isalpha(): is_valid = False print("Enter a name without numbers") break if is_valid: return Name def Booking(TableNum,name,PeopleNumber): x = eval(f"Table{str(TableNum)}") x["BookingName"] = name x["BookState"] = True x["PeopleNumber"] = PeopleNumber return("================\nSuccessful book\n================") def Change_the_book(Name): for i in range(1,6): x = eval(f"Table{str(i)}") if x["BookingName"] == Name : print("\nEnter your changes : ") BookingName,People_Number = take_inputing() x["BookingName"] = BookingName x["PeopleNumber"] = People_Number return("================\nSuccessful change\n================") return(f"\nname: {Name} Not Found") def check_cancel_Name(Name): for i in range(1,6): x = eval(f"Table{str(i)}") if x["BookingName"] == Name: return Name,x return(f"\nname: {Name} Not Found") def check_sure(): sure = input("\nare you sure you want to cancel? (Y/N) ").upper() while sure not in ("Y","YES","NO","N"): print("Enter 'Y' or 'N': ") return sure def Cancel_the_book(sure,x): if sure in ("Y","YES"): x["BookingName"] = " " x["BookState"] = False x["PeopleNumber"] = 0 return("===================\nCanceled Successfully\n===================") else: return "" def Exiting(): sys.exit("\n===================================\nThank you for choose our restaurante\n===================================\n") def process_menu(): verbs = [["1","book a table"], ["2","change the book"], ["3","cancel the book"], ["4","Exit"]] print(f"\n{tabulate(verbs,headers='firstrow',tablefmt='grid')}") def Table_menu(): tables = [["1","table1"],["2","table2"],["3","table3"],["4","table4"],["5","table5"]] print(f"\n{tabulate(tables,headers='firstrow',tablefmt='grid')}") if __name__ == "__main__" : main()