Advertisement
SomeBody_Aplle

Untitled

Jun 16th, 2023
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.20 KB | None | 0 0
  1. # Логика.
  2. # Выработка человека по 10 бальной системе.
  3. # Стоимость проекта. Допустим 100000 руб.
  4. # Количество дней на проект. 100 дней
  5. # Процент госорган. 60%
  6. #
  7. # Выработка человека 1. Час стоимости 360 рублей.
  8. # Выработка человека 2. Час стоимости 370 рублей.
  9. # Выработка человека 3. Час стоимости 380 рублей.
  10. # Выработка человека 4. Час стоимости 390 рублей.
  11. # Выработка человека 5. Час стоимости 400 рублей.
  12. # Выработка человека 6. Час стоимости 410 рублей.
  13. # Выработка человека 7. Час стоимости 420 рублей.
  14. # Выработка человека 8. Час стоимости 430 рублей.
  15. # Выработка человека 9. Час стоимости 440 рублей.
  16. # Выработка человека 10. Час стоимости 450 рублей.
  17. # Допустим проект стоит 100000.
  18. # Человеку платим 350 рублей за час.
  19. #
  20. # Что нам надо понять?
  21. # Нужно понять, сколько платить сотруднику, чтобы получить прибыль.
  22. # Это нужно для того, чтобы понять, может нам дешевле нанять квалифицированных специалистов
  23.  
  24. # Итог. Прибыль, такая то.
  25.  
  26. class Worker:
  27. """ Класс работника """
  28.  
  29. SALARY_LEVEL = {
  30. "0": 350,
  31. "1": 360,
  32. "2": 370,
  33. "3": 390,
  34. "4": 390,
  35. "5": 400,
  36. "6": 410,
  37. "7": 420,
  38. "8": 430,
  39. "9": 440,
  40. "10": 450
  41. }
  42.  
  43. def __init__(self, name, bal):
  44. """
  45. Принимает bal - как уровень работника
  46.  
  47. self.SALARY_LEVEL[str(bal)] - обращение к словарю, по ключу bal.
  48. И в с-во self.salary - устанавливаем зарплату по уровню
  49.  
  50. self.bal = Хранит уровень сотрудника
  51.  
  52. self.days = 0 Хранит общее количество отработанных дней
  53. self.hours = 0 Хранит общее количество отработанных часов
  54. """
  55. self.salary = self.SALARY_LEVEL[str(bal)]
  56. self.bal = bal
  57. self.days = 0
  58. self.hours = 0
  59. self.name = name
  60.  
  61. def button(self):
  62. """
  63. Ф-ия которая добавляет 1 рабочий день для сотрудника.
  64. Например, когда нажата кнопка на сайте "Засчитать день"
  65. """
  66. self.days += 1
  67.  
  68. def add_hours(self, hours):
  69. """
  70. Ф-ия которая добавляет часы работы к общим часам работы (self.hours)
  71. """
  72. self.hours += hours
  73.  
  74. def salary_days(self):
  75. """
  76. Функция, которая считает зарплату за все дни. Вызывается в день зарплаты.
  77. Например, на 30 день работы. После вызова ф-ии, количество дней обнуляется.
  78. """
  79. if self.days < 30:
  80. raise ValueError("День зарплаты не настал")
  81. salary = (self.salary * self.hours) * self.days
  82. self.days = 0
  83. return salary
  84.  
  85.  
  86. class Employer:
  87. """ Класс работодателя """
  88.  
  89. def __init__(self):
  90. self.workers = []
  91.  
  92. def add_worker(self, worker: Worker):
  93. """
  94. Прикрепляет работника к работодателю.
  95. worker - ссылка (экземпляр класс) на работника.
  96. worker - создан через класс Worker.
  97. """
  98. self.workers.append(worker)
  99.  
  100. def list_workers(self):
  101. """ Выводит список сотрудников """
  102. for num, worker in enumerate(self.workers):
  103. print(f"№ Работника: {num}. Имя: {worker.name}, зарплата работника: {worker.salary}, уровень: {worker.bal}")
  104.  
  105. def change_level(self, num, bal):
  106. """
  107. :param num: Номер нашего сотрудника. Номер можно посмотреть с помощью ф-ии list_workers()
  108. :param bal: Новый уровень нашего работника
  109. """
  110. self.workers[num].bal = bal
  111. self.workers[num].salary = Worker.SALARY_LEVEL[str(bal)]
  112.  
  113.  
  114. class Project:
  115. """ Класс проекта """
  116.  
  117. def __init__(self, count_days, cost, performer):
  118. """
  119. :param count_days: дней на выполнение
  120. :param cost: стоимость разработки
  121. :param performer: кто будет исполнителем (Ссылка на Работодателя)
  122. """
  123. self.count_days = count_days
  124. self.coast = cost
  125. self.performer = performer
  126.  
  127. def development_cost(self, days):
  128. """
  129. Будет считать стоимость разработки при текущем наличии сотрудников.
  130. """
  131. hours = 8 # Норма работы 1 сотрудника
  132. workers = self.performer.workers # Получаем список сотрудников из класса работодателя (performer)
  133. development_cost = 0 # Общая стоимость разработки
  134. for worker in workers: # Цикл перебора сотрудников
  135. development_cost += (worker.salary * hours) * days
  136. print(f"{worker.bal} - Зарплата: {(worker.salary * hours) * days}")
  137. # Берем зарплату работника, умножаем на 8 (hours) и умножаем на количество дней на выполнение.
  138. # Таким образом, посчитаем, сколько нужно выплатить З\П на сотрудника за всё время выполнения проекта.
  139. print(f"Общая З\П сотрудников: {development_cost}")
  140. return development_cost
  141.  
  142. def profit(self, days):
  143. """ Ф-ия считает прибыль """
  144. return self.coast - self.development_cost(days)
  145.  
  146.  
  147. worker_1 = Worker("Вася", 0)
  148. worker_2 = Worker("Петя", 0)
  149. worker_3 = Worker("Дима", 0)
  150. worker_4 = Worker("Коля", 10)
  151.  
  152. employer = Employer() # Работодатель
  153. employer.add_worker(worker_1)
  154. employer.add_worker(worker_2)
  155. employer.add_worker(worker_3)
  156. employer.add_worker(worker_4)
  157.  
  158. employer.list_workers()
  159. employer.change_level(0, 1)
  160. print()
  161. employer.list_workers()
  162.  
  163. project = Project(100, 1000000, employer)
  164. print(f'Получим прибыли: {project.profit(50)}')
  165.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement