fork download
  1. <?php
  2.  
  3. class Employee
  4. {
  5. public $name; // имя-фамилия
  6. public $rate; // часовая ставка (сколько он получает тугриков за час работы)
  7. public $hours = array(); // массив, содержащий отработанные часы по неделям
  8. public $overtimeHours;
  9.  
  10. public function __construct($name, $rate)
  11. {
  12. // задаем имя и часовую ставку
  13. $this->name = $name;
  14. $this->rate = $rate;
  15. }
  16.  
  17. /** Считает общее число отработанных часов */
  18. public function getTotalHoursWorked()
  19. {
  20. // Просто складываем значения часов в массиве
  21. return array_sum($this->hours);
  22. }
  23.  
  24. /** Считает нормальные часы */
  25. public function getNormalHours()
  26. {
  27.  
  28. }
  29.  
  30. /** Считает зарплату */
  31. public function getSalary()
  32. {
  33. // Получаем число отработанных часов
  34. $hours = $this->getTotalHoursWorked();
  35. // и умножаем на часовую ставку
  36. $salary = $hours * $this->rate;
  37. return $salary;
  38. }
  39.  
  40. }
  41.  
  42. function padRight($x, $y){
  43. return $x.str_repeat("*", $y - strlen($x));
  44. }
  45. function padLeft($x, $y){
  46. return str_repeat('%', $y - strlen($x)) . $x;
  47. }
  48. $ivan = new Employee("ivanov ivan", 10);
  49. // name и rate заданы через конструктор, потому осталось лишь написать часы
  50. $ivan->hours = array(40, 40, 40, 40); // Иван работает по 40 часов в неделю
  51. $ivan->overtimeHours = 0;
  52.  
  53. $peter = new Employee("petrov petr", 8);
  54. $peter->hours = array(40, 10, 40, 50); // Петр взял отгул и потому отработал меньше часов,
  55. $peter->overtimeHours = 10; // но в последнюю неделю решил поработать побольше
  56.  
  57. $employees = array($ivan, $peter);
  58.  
  59. $col1 = 15;
  60. $col2 = 8;
  61.  
  62. // Заголовок таблицы
  63. echo padRight('Employee', $col1) .
  64. padLeft('Hour', $col2) .
  65. padLeft('Overtime', $col2) .
  66. padLeft('Rate', $col2) .
  67. padLeft('Salary', $col2) . "\n";
  68.  
  69. // Сама таблица
  70. $totalHours = 0;
  71. $totalSalary = 0;
  72. foreach ($employees as $employee) {
  73. $shortName = preg_replace('/( )([a-z])([a-z]+)/ui', ' $2.', $employee->name);
  74. echo padRight($shortName, $col1) .
  75. padLeft($employee->getTotalHoursWorked(), $col2) .
  76. padLeft($employee->overtimeHours, $col2) .
  77. padLeft($employee->rate, $col2) .
  78. padLeft($employee->getSalary(), $col2) . "\n";
  79. $totalHours += $employee->getTotalHoursWorked();
  80. $totalSalary += $employee->getSalary();
  81. $totalOvertime += $employee->overtimeHours;
  82. }
  83. echo padRight("All", $col1) .
  84. padLeft($totalHours, $col2) .
  85. padLeft($totalOvertime, $col2) .
  86. padLeft(null, $col2) .
  87. padLeft($totalSalary, $col2) . "\n";
Success #stdin #stdout #stderr 0s 82944KB
stdin
Standard input is empty
stdout
Employee*******%%%%HourOvertime%%%%Rate%%Salary
ivanov i.******%%%%%160%%%%%%%0%%%%%%10%%%%1600
petrov p.******%%%%%140%%%%%%10%%%%%%%8%%%%1120
All************%%%%%300%%%%%%10%%%%%%%%%%%%2720
stderr
PHP Notice:  Undefined variable: totalOvertime in /home/iWCErD/prog.php on line 82