fork(1) download
  1. <?php
  2.  
  3.  
  4. class Employee
  5. {
  6. public $name; // имя-фамилия
  7. public $rate; // часовая ставка (сколько он получает тугриков за час работы)
  8. public $hours = array();
  9. public $fullName;
  10.  
  11. public function __construct($name, $rate)
  12. {
  13. // задаем имя и часовую ставку
  14. $this->name = $name;
  15. $this->rate = $rate;
  16. $this->fullName = $this->name . " " . $this->getShortName();
  17. }
  18.  
  19. public function getTotalHoursWorked()
  20. {
  21. // Просто складываем значения часов в массиве
  22. return array_sum($this->hours);
  23. }
  24.  
  25.  
  26. public function getNormalHoursWorked()
  27. {
  28. $normal = 0;
  29. foreach ($this->hours as $week) {
  30. if ($week <= 40) {
  31. $normal += $week;
  32. }
  33. }
  34. return $normal;
  35. }
  36. public function getOverHoursWorked()
  37. {
  38. $overtime = 0;
  39. foreach ($this->hours as $week) {
  40. if ($week > 40) {
  41.  
  42. $overtime += $week - 40;
  43. }
  44. }
  45. return $overtime;
  46. }
  47.  
  48. /** Считает зарплату */
  49. public function getSalary()
  50. {
  51. // Получаем число отработанных часов
  52. $hoursNormal = $this->getNormalHoursWorked();
  53. // и умножаем на часовую ставку
  54. $salaryNormal = $hoursNormal * $this->rate;
  55.  
  56. $hoursOver = $this->getOverHoursWorked();
  57. // и умножаем на часовую ставку
  58. $salaryOver = $hoursOver * $this->rate * 2;
  59.  
  60. $salary = $salaryNormal + $salaryOver;
  61.  
  62. return $salary;
  63. }
  64.  
  65. public function getShortName()
  66. {
  67. $names = explode(" ", $this->name);
  68. $initials = [];
  69. foreach ($names as $name) {
  70. $initials[] = mb_substr($name, 0, 1);
  71. }
  72. $shortName = implode(".", $initials);
  73. return "(" . $shortName. ".)";
  74. }
  75. }
  76.  
  77.  
  78. $ivan = new Employee("Иванов Иван", 10);
  79. // name и rate заданы через конструктор, потому осталось лишь написать часы
  80. $ivan->hours = array(40, 40, 40, 40); // Иван работает по 40 часов в неделю
  81.  
  82.  
  83. $peter = new Employee("Петров Петр", 8);
  84. $peter->hours = array(40, 10, 40, 50); // Петр взял отгул и потому отработал меньше часов,
  85.  
  86. $vlad = new Employee("Владимир Владимирович", 9000);
  87. $vlad->hours = [100,100,100,100];
  88.  
  89. $maria = new Employee("Мария Ивановна Петрова", 6);
  90. $maria->hours = [60,10,20,30];
  91.  
  92.  
  93. $employees = array($ivan, $peter, $vlad, $maria);
  94.  
  95. function padLeft ($string, $length) {
  96. $strLength = mb_strlen($string);
  97. $spases = array_fill(0, ($length - $strLength - 1), " ");
  98. $spases = implode($spases);
  99. $string = "|" . $spases . $string;
  100. return $string;
  101. }
  102.  
  103. function padRight ($string, $length) {
  104. $strLength = mb_strlen($string);
  105. $spases = array_fill(0, ($length - $strLength), " ");
  106. $spases = implode($spases);
  107. $string .= $spases;
  108. return $string;
  109. }
  110.  
  111. // Ширина колонок
  112. $col1 = 35;
  113. $col2 = 12;
  114. $col3 = 12;
  115. $col4 = 12;
  116.  
  117. // Заголовок таблицы
  118. echo padRight("Сотрудник", $col1) .
  119. padLeft("Часы", $col2) .
  120. padLeft("Ставка", $col3) .
  121. padLeft("Овертайм", $col3) .
  122. padLeft("З/п", $col4) . "\n\n";
  123.  
  124. // Сама таблица
  125. foreach ($employees as $employee) {
  126. echo padRight($employee->fullName, $col1) .
  127. padLeft($employee->getTotalHoursWorked(), $col2) .
  128. padLeft($employee->rate, $col3) .
  129. padLeft($employee->getOverHoursWorked(), $col3) .
  130. padLeft($employee->getSalary(), $col4) . "\n";
  131. }
  132.  
  133.  
Success #stdin #stdout 0.02s 24400KB
stdin
Standard input is empty
stdout
Сотрудник                          |       Часы|     Ставка|   Овертайм|        З/п

Иванов Иван (И.И.)                 |        160|         10|          0|       1600
Петров Петр (П.П.)                 |        140|          8|         10|        880
Владимир Владимирович (В.В.)       |        400|       9000|        240|    4320000
Мария Ивановна Петрова (М.И.П.)    |        120|          6|         20|        600