fork download
  1. <?php
  2.  
  3. class Employee
  4. {
  5. public $isChief;
  6. public $rank;
  7.  
  8. public function __construct($isChief, $rank)
  9. {
  10. $this->isChief = $isChief;
  11. $this->rank = $rank;
  12.  
  13. if ($isChief == 1) {
  14. $this->coffeeConsumption *= 2;
  15. $this->paperConsumption = 0;
  16. }
  17. }
  18. public function getSalary()
  19. {
  20. $salary = $this->baseRate;
  21. if ($this->rank == 2) {
  22. $salary *= 1.25;
  23. } elseif ($this->rank == 3) {
  24. $salary *= 1.5;
  25. }
  26. if ($this->isChief == 1) {
  27. $salary *= 1.5;
  28. }
  29. return $salary;
  30. }
  31. }
  32.  
  33. class Manager extends Employee
  34. {
  35. public $baseRate = 500;
  36. public $coffeeConsumption = 20;
  37. public $paperConsumption = 200;
  38. }
  39.  
  40. class Marketing extends Employee
  41. {
  42. public $baseRate = 400;
  43. public $coffeeConsumption = 15;
  44. public $paperConsumption = 150;
  45. }
  46.  
  47. class Engineer extends Employee
  48. {
  49. public $baseRate = 200;
  50. public $coffeeConsumption = 5;
  51. public $paperConsumption = 50;
  52. }
  53.  
  54. class Analyst extends Employee
  55. {
  56. public $baseRate = 800;
  57. public $coffeeConsumption = 50;
  58. public $paperConsumption = 5;
  59. }
  60.  
  61. class Department
  62. {
  63. public $name;
  64. public $employees;
  65.  
  66. public function __construct ($name, $employees)
  67. {
  68. $this->name = $name;
  69. $this->employees = $employees;
  70. }
  71. public function getEmployeesCount()
  72. {
  73. return count($this->employees);
  74. }
  75. public function getEmployeesSalary()
  76. {
  77. $employeesSalary = 0;
  78. foreach ($this->employees as $employee) {
  79. $employeesSalary += $employee->getSalary();
  80. }
  81. return $employeesSalary;
  82. }
  83. public function getConsumptionOfCoffee()
  84. {
  85. $consumptionOfCoffee = 0;
  86. foreach ($this->employees as $employee) {
  87. $consumptionOfCoffee += $employee->coffeeConsumption;
  88. }
  89. return $consumptionOfCoffee;
  90. }
  91. public function getPaperConsumption()
  92. {
  93. $paperConsumption = 0;
  94. foreach ($this->employees as $employee) {
  95. $paperConsumption += $employee->paperConsumption;
  96. }
  97. return $paperConsumption;
  98. }
  99. public function getCostPerPage()
  100. {
  101. return round($this->getEmployeesSalary() / $this->getPaperConsumption(), 2);
  102. }
  103. }
  104.  
  105. function generateEmployeesList ($name, $isChief, $rank, $count, $employees)
  106. {
  107. for ($i = 0; $i < $count; ++$i) {
  108. $employees[] = new $name($isChief, $rank);
  109. }
  110. return $employees;
  111. }
  112.  
  113. //Создаем департаменты
  114. $employees = array();
  115. $employees = generateEmployeesList('Manager', 0, 1, 9, $employees);
  116. $employees = generateEmployeesList('Manager', 0, 2, 3, $employees);
  117. $employees = generateEmployeesList('Manager', 0, 3, 2, $employees);
  118. $employees = generateEmployeesList('Marketing', 0, 1, 2, $employees);
  119. $employees = generateEmployeesList('Manager', 1, 2, 1, $employees);
  120. $departmentOfProcurement = new Department('Закупок', $employees);
  121.  
  122. $employees = array();
  123. $employees = generateEmployeesList('Manager', 0, 1, 12, $employees);
  124. $employees = generateEmployeesList('Marketing', 0, 1, 6, $employees);
  125. $employees = generateEmployeesList('Analyst', 0, 1, 3, $employees);
  126. $employees = generateEmployeesList('Analyst', 0, 2, 2, $employees);
  127. $employees = generateEmployeesList('Marketing', 1, 2, 1, $employees);
  128. $salesDepartment = new Department('Продаж', $employees);
  129.  
  130. $employees = array();
  131. $employees = generateEmployeesList('Marketing', 0, 1, 15, $employees);
  132. $employees = generateEmployeesList('Marketing', 0, 2, 10, $employees);
  133. $employees = generateEmployeesList('Manager', 0, 1, 8, $employees);
  134. $employees = generateEmployeesList('Engineer', 0, 1, 2, $employees);
  135. $employees = generateEmployeesList('Marketing', 1, 3, 1, $employees);
  136. $departmentOfAdvertising = new Department('Рекламы', $employees);
  137.  
  138. $employees = array();
  139. $employees = generateEmployeesList('Manager', 0, 1, 13, $employees);
  140. $employees = generateEmployeesList('Manager', 0, 2, 5, $employees);
  141. $employees = generateEmployeesList('Engineer', 0, 1, 5, $employees);
  142. $employees = generateEmployeesList('Manager', 1, 1, 1, $employees);
  143. $logisticDepartment = new Department('Логистики', $employees);
  144.  
  145. echo "Сотрудников " . $departmentOfProcurement->getEmployeesCount() . "\n";
  146. echo "Зарплата " . $departmentOfProcurement->getEmployeesSalary() . "\n";
  147. echo "Кофе " . $departmentOfProcurement->getConsumptionOfCoffee() . "\n";
  148. echo "Страниц " . $departmentOfProcurement->getPaperConsumption() . "\n";
  149. echo "Стоимость страницы " . $departmentOfProcurement->getCostPerPage() . "\n";
Success #stdin #stdout 0.01s 20568KB
stdin
Standard input is empty
stdout
Сотрудников 17
Зарплата 9612.5
Кофе 350
Страниц 3100
Стоимость страницы  3.1