fork download
  1. <pre>
  2. <?php
  3.  
  4. // archive-ipq-co.narod.ru
  5.  
  6. class Employee
  7. {
  8. public $name; // имя-фамилия
  9. public $rate; // часовая ставка (сколько он получает тугриков за час работы)
  10. public $hours = array(); // массив, содержащий отработанные часы по неделям
  11.  
  12. public function __construct($name, $rate)
  13. {
  14. // задаем имя и часовую ставку
  15. $this->name = $name;
  16. $this->rate = $rate;
  17. }
  18.  
  19. /** Считаем общее число отработанных часов */
  20. public function getTotalHoursWorked()
  21. {
  22. // Просто складываем значения часов в массиве
  23. return array_sum($this->hours);
  24. }
  25.  
  26. /** Считаем зарплату */
  27. public function getSalary()
  28. {
  29. $hours = ( $this->getNormalHours() * $this->rate ) + ( $this->getOvertimeHours() * $this->rate * 2 );
  30. return $hours;
  31. }
  32.  
  33. /** Укорачиваем имя */
  34. public function getShortName()
  35. {
  36. //заменяем подное имя на укороченное
  37. return preg_replace("/^([а-яё]+)\\s+([а-яё])[а-яё]+/ui", '$1 $2.', $this->name);
  38. }
  39.  
  40. /** Подсчитываем стандартные трудочасы */
  41. public function getNormalHours()
  42. {
  43. foreach( $this->hours as $hour ){
  44. if($hour <= 40){
  45. $hours += $hour;
  46. }else{
  47. $hours += 40; // Если часов за неделю больше - добавляет только часы без переработок
  48. }
  49. }
  50.  
  51. return $hours;
  52. }
  53.  
  54. /** Подсчитываем часы переработки */
  55. public function getOvertimeHours()
  56. {
  57. $hours = 0;
  58.  
  59. foreach($this->hours as $hour ){
  60. if($hour > 40){
  61. $hours += $hour - 40; //вычитаем обычные трудочасы
  62. }
  63. }
  64.  
  65. return $hours;
  66. }
  67. }
  68.  
  69.  
  70.  
  71. $ivan = new Employee("Иванов Иван", 10);
  72. // name и rate заданы через конструктор, потому осталось лишь написать часы
  73. $ivan->hours = array(40, 40, 40, 40); // Иван работает по 40 часов в неделю
  74.  
  75. $peter = new Employee("Петров Петр", 8);
  76. $peter->hours = array(40, 10, 40, 50); // Петр взял отгул и потому отработал меньше часов,
  77. // но в последнюю неделю решил поработать побольше
  78. $op = new Employee("Оп Опович", 1000);
  79. $op->hours = array(50, 60, 55, 40);
  80. $employees = array($ivan, $peter, $op);
  81.  
  82.  
  83. function padLeft($string, $length){
  84. $stringLen = mb_strlen($string);
  85. //объявляем переменную для пустого пространства
  86. $space ="";
  87. for (;$stringLen < $length; $stringLen++){
  88. $space .= " ";
  89. }
  90. echo "$space$string";
  91.  
  92. }
  93.  
  94. function padRight($string, $length){
  95. $stringLen = mb_strlen($string);
  96. //объявляем переменную для пустого пространства
  97. $space ="";
  98. for (;$stringLen < $length; $stringLen++){
  99. $space .= " ";
  100. }
  101. echo "$string$space";
  102. }
  103. // Ширина колонок
  104. $col1 = 30;
  105. $col2 = 8;
  106. $col3 = 8;
  107. $col4 = 8;
  108. $col5 = 8; // колонка для овертайма
  109.  
  110. // Заголовок таблицы
  111. echo padRight("Сотрудник", $col1) .
  112. padLeft("Часы", $col2) .
  113. padLeft(" Овертайм", $col5) .
  114. padLeft("Ставка", $col3) .
  115. padLeft("З/п", $col4) . "\n\n";
  116.  
  117. // Сама таблица
  118. foreach ($employees as $employee) {
  119. echo padRight($employee->getShortName(), $col1) .
  120. padLeft($employee->getTotalHoursWorked(), $col2) .
  121. padLeft($employee->getOvertimeHours(), $col5) .
  122. padLeft($employee->rate, $col3) .
  123. padLeft($employee->getSalary(), $col4) . "\n";
  124. }
  125.  
  126. // Подсчет вывода !!! сюда дописать овертайм
  127. foreach ($employees as $employee){
  128. $hoursSum += $employee->getTotalHoursWorked();
  129. $overTimeSum += $employee->getOvertimeHours();
  130. $salarySum += $employee->getSalary();
  131. }
  132.  
  133. //выписываем вывод !!! сюда дописать овертайм
  134. echo padRight("Всего", $col1) .
  135. padLeft($hoursSum, $col2) .
  136. padLeft($overTimeSum, $col5) .
  137. padLeft(" ", $col3) .
  138. padLeft($salarySum, $col4);
  139. ?>
  140.  
  141.  
  142. </pre>
Runtime error #stdin #stdout #stderr 0s 82880KB
stdin
Standard input is empty
stdout
<pre>
stderr
PHP Fatal error:  Uncaught Error: Call to undefined function mb_strlen() in /home/LP8ehA/prog.php:96
Stack trace:
#0 /home/LP8ehA/prog.php(112): padRight('\xD0\xA1\xD0\xBE\xD1\x82\xD1\x80\xD1\x83\xD0\xB4\xD0\xBD\xD0...', 30)
#1 {main}
  thrown in /home/LP8ehA/prog.php on line 96