fork download
  1. class Customer:
  2. """
  3. Tracks the customers data (orders, table number, name, total payments,
  4. ordered food, turn in the queue, served or not, and if he left or not),
  5. you can get all the required data using 'customer_x.info['attribute']'
  6. you can also add to his order using 'new_order()', serve him using 'serve()'
  7. and sign him off using 'leave()'.
  8. *Note: the customer might sign in and order later
  9. """
  10.  
  11. active_customers={}
  12. customer_counter=1
  13.  
  14. def __init__(self, name:str, table:int, *argu, order_code:None|int=None, turn_in_queue:None|int=None):
  15. self.name=name
  16. self.table=table
  17. self.ordered_food=list(argu)
  18. self.order_code=order_code
  19. self._total_cost=0 # protected so it can't be changed
  20. self.turn_in_queue=turn_in_queue
  21. self._served=False # protected so it's only true when the customer is served
  22. self.present=True # checks if the customer left or still have the table
  23. self.customer_id=f"{name}, id:{Customer.customer_counter}"
  24. # to-do: make table taken
  25. Customer.active_customers[self.id]=self
  26. Customer.customer_counter+=1
  27.  
  28. @property
  29. def is_served(self):
  30. return self._served
  31.  
  32. @property
  33. def total_cost(self): #calculates the total payments by suming each meal cost
  34. # to-do: calculate the cost of each meal
  35. return self._total_cost
  36.  
  37. @property
  38. def info(self):
  39. return {
  40. "name": self.name,
  41. "table": self.table,
  42. "ordered_food": self.ordered_food,
  43. "order_code": self.order_code,
  44. "turn_in_queue": self.turn_in_queue,
  45. "served": self._served,
  46. "present": self.present
  47. }
  48.  
  49. def serve(self):
  50. if self.is_served: print(f"Customer {self.name} doesn't need serves!"); return
  51. self._served=True
  52. self.order_code=None
  53. self.turn_in_queue=None
  54. print(f"Customer {self.name} was served!")
  55.  
  56. def leave(self): # signs off customers and make the table empty
  57. # to-do: make the table empty
  58. self.present=False
  59. del Customer.active_customers[self.id]
  60. print(f"Customer {self.name} left!")
  61.  
  62. def new_order(self, order_code:int, turn_in_queue:int, *argu):
  63. self.order_code=order_code
  64. self.ordered_food.extend(argu)
  65. self.turn_in_queue=turn_in_queue
  66. self._served=False
  67. print(f"Customer {self.name} ordered the next: \n{'\n'.join(str(item) for item in argu)}") # to-do: make order table with price of each meal
  68.  
  69.  
  70. """
  71. notes: search for 'to-do:' part
  72. in the code and customise it based
  73. on your part
  74. """
Success #stdin #stdout 0.09s 14012KB
stdin
Standard input is empty
stdout
Standard output is empty