Advertisement
Guest User

Untitled

a guest
Feb 22nd, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.49 KB | None | 0 0
  1. def singleton(cls):
  2.   instances = {}
  3.   def getinstance(*args, **kwargs):
  4.     if cls not in instances:
  5.       instances[cls] = cls(*args, **kwargs)
  6.     return instances[cls]
  7.   return getinstance
  8.  
  9. @singleton
  10. class Restaurant():
  11.  
  12.   def __init__(self, max_waiters = 100, max_managers = 1, max_cleaners = 100, worktime = ('00:00', '24:00'), tables = [], waiters = [], manager = [], cleaners = [], menu = []):
  13.     self.open_time, self.close_time = worktime
  14.     self.tables = tables
  15.     self.max_employees = {'waiters' : max_waiters, 'manager' : max_managers, 'cleaners' : max_cleaners }
  16.     self.menu = menu
  17.     self.workers = {'waiters' : waiters, 'manager' : manager, 'cleaners' : cleaners }
  18.     self.is_open = False
  19.    
  20.   def open_close(self):
  21.     """ Изменяет состояние ресторана: если ресторан открыт, закрывает его, и наоборот"""
  22.     self.is_open = not self.is_open
  23.    
  24.   def add_dish(self, dish):
  25.     """Добавляет блюда в меню"""
  26.     self.menu.append(dish)
  27.    
  28.   def remove_dish(self, dish):
  29.     """Убирает блюдо из меню"""
  30.     self.menu.remove(dish)
  31.    
  32.   def change_dish(self, dish, char_to_change, new_val):
  33.     """Изменяет значение заданной характеристики блюда"""
  34.     dish.change(char_to_change, new_val)
  35.    
  36.   def __repr__(self):
  37.     return ', '.join('{} : {}'.format(key, val) for key, val in vars(self).items())
  38.    
  39. class Dish():
  40.   def __init__(self, name, ingredients, price):
  41.     self.name = name
  42.     self.ingredients = ingredients
  43.     self.price = price
  44.   def change(self, char_to_change, new_val):
  45.     vars(self)[char_to_change] = new_val
  46.    
  47. class Employee():
  48.  
  49.   def __init__(self, salary = 100, workhours = ('00:00', '24:00'), position = 'waiter'):
  50.     self.salary = salary
  51.     self.workhours = workhours
  52.     self.position = position
  53.    
  54.   def get_fired(self, position, restaurant, one_to_fire = None):
  55.     """Удаляет работника из списка служащих и из списка глобальных имен"""
  56.     otf = self if not one_to_fire else one_to_fire
  57.     restaurant.workers[position].remove(otf)
  58.     for k in globals():
  59.       if globals()[k] == otf:
  60.         del globals()[k]
  61.         break
  62.    
  63. class Waiter(Employee):
  64.    
  65.     def __init__(self, tip, table):
  66.         self.tip = tip
  67.         self.table = table
  68.  
  69.     def wait_a_table(number_of_table, order):
  70.       print("Обслужить столик под номером" + number_of_table + "с заказом" + order)
  71.       return wait_a_table        
  72.  
  73. class Chef(Employee):
  74.  
  75.     def __init__(self, dish):
  76.         self.dish = dish
  77.  
  78.     def cook_a_dish(self, type_of_dish):
  79.         for i in menu:
  80.             if i in menu:
  81.                 print("Приготовить" + type_of_dish)
  82.             else:
  83.                 print("У нас нет такого блюда")
  84.  
  85.  
  86. class Table():
  87.     def __init__(self, number_of_table, names_of_guests, orders, status):
  88.         self.number_of_table = number_of_table
  89.         self.names_of_guests = names_of_guests
  90.         self.orders = orders
  91.         self.status = False
  92.        
  93.     def free_taken(self):
  94.       """Статус стола: занят или свободен"""
  95.       self.is_free = not self.is_free
  96.        
  97. #tests
  98. a = Restaurant()
  99. b = Restaurant()
  100. print(a == b)
  101. d = Dish('soup', ['water', 'potato'], 10)
  102. a.add_dish(d)
  103. a.change_dish(d,'name','msoup')
  104. print (d.name)
  105. print([dish.name for dish in b.menu])
  106. a.remove_dish(d)
  107. print(a)
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116. class Manager(Employee):
  117.  
  118.   def hire(self, position, restaurant, worker):
  119.     """Функция найма работника. Если вакансии есть, персонаж добавляется в список работников, иначе выводится сообщение о невозможности найма"""
  120.     if len(restaurant.workers[position]) == restaurant.max_employees[position]:
  121.       print('Cannot hire one more worker')
  122.       return
  123.     restaurant.workers[position].append(worker)
  124.  
  125.   def fire(self, position, restaurant, one_to_fire):
  126.     Employee.get_fired(self, position, restaurant, one_to_fire)
  127.  
  128.   def wait_waiter_a_table(name_of_waiter, number_of_table):
  129.     self.name_of_waiter = name_of_waiter
  130.     self.number_of_table = number_of_table
  131.     print("Обслужить столик под номером" + number_of_table + "официанту с именем" + name_of_waiter)
  132.     return wait_waiter_a_table
  133.  
  134.   def make_a_reservation(status, names_of_guests, time):
  135.     self.names_of_guests = names_of_guests
  136.     self.time = time
  137.     if status==self.is_free:
  138.       print ("Стол под номером" + number_of_table + "зарезервирован на имя" + names_of_guests + "на время" + time)
  139.     else:
  140.       print ("Стол занят")
  141.     return make_a_reservation
  142.  
  143. class Housemaid(Employee):
  144.   def __init__(self, place):
  145.     self.place = place
  146.  
  147.   def tidy(self, place):
  148.     for i in restaurant_zones:
  149.       if i in restaurant_zones:
  150.         print("Убраться в" + place)
  151.       else:
  152.         print("В этой зоне уборка не входит в обязанности уборщицы")
  153.  
  154. class Guest():
  155.   def __init__(self, number_of_guest):
  156.     self.number_of_guest = number_of_guest
  157.    
  158. m = Manager()
  159. c = Employee()
  160. m.hire('cleaners', a, c)
  161. print (a.workers)
  162. m.fire('cleaners', a, c)
  163. print (a.workers)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement