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