<?php
class Employee
{
public $name; // имя-фамилия
public $rate; // часовая ставка (сколько он получает тугриков за час работы)
public $hours = array(); // массив, содержащий отработанные часы по неделям
public function __construct($name, $rate)
{
// задаем имя и часовую ставку
$this->name = $name;
$this->rate = $rate;
}
/** Считает общее число отработанных часов */
public function getTotalHoursWorked()
{
// Просто складываем значения часов в массиве
}
/** Считает нормальные часы */
public function getNormalHours()
{
$normalHours = 0;
foreach ($this->hours as $hoursAWeek) {
if ($hoursAWeek <= 40) {
$normalHours += $hoursAWeek;
}
elseif ($hoursAWeek > 40) {
$normalHours += $hoursAWeek - ($hoursAWeek - 40);
}
}
return $normalHours;
}
public function getOvertimeHours()
{
$overtime = 0;
foreach ($this->hours as $hoursAWeek) {
if ($hoursAWeek > 40) {
$overtime += ($hoursAWeek - 40);
}
}
return $overtime;
}
/** Считает зарплату */
public function getSalary()
{
// Получаем число отработанных часов
$hours = $this->getNormalHours();
// и умножаем на часовую ставку
$normalSalary = $hours * $this->rate;
// Получаем число отработанных часов
$overtime = $this->getOvertimeHours();
// и умножаем на двойную ставку
$overtimeSalary = $overtime * ($this->rate * 2);
return $normalSalary + $overtimeSalary;
}
}
function padRight($x, $y){
}
function padLeft($x, $y){
}
$ivan = new Employee("ivanov ivan", 10);
// name и rate заданы через конструктор, потому осталось лишь написать часы
$ivan->hours = array(40, 40, 40, 40); // Иван работает по 40 часов в неделю
$peter = new Employee("petrov petr", 8);
$peter->hours = array(40, 10, 40, 50); // Петр взял отгул и потому отработал меньше часов, // но в последнюю неделю решил поработать побольше
$employees = array($ivan, $peter);
$col1 = 15;
$col2 = 9;
// Заголовок таблицы
echo padRight('Employee', $col1) .
padLeft('Hour', $col2) .
padLeft('Overtime', $col2) .
padLeft('Rate', $col2) .
padLeft('Salary', $col2) . "\n";
// Сама таблица
$totalHours = 0;
$totalSalary = 0;
$totalOvertime = 0;
foreach ($employees as $employee) {
$shortName = preg_replace('/( )([a-z])([a-z]+)/ui', ' $2.', $employee->name); echo padRight($shortName, $col1) .
padLeft($employee->getTotalHoursWorked(), $col2) .
padLeft($employee->getOvertimeHours(), $col2) .
padLeft($employee->rate, $col2) .
padLeft($employee->getSalary(), $col2) . "\n";
$totalHours += $employee->getTotalHoursWorked();
$totalSalary += $employee->getSalary();
$totalOvertime += $employee->getOvertimeHours();
}
echo padRight("All", $col1) .
padLeft($totalHours, $col2) .
padLeft($totalOvertime, $col2) .
padLeft(null, $col2) .
padLeft($totalSalary, $col2) . "\n";
PD9waHAKZXJyb3JfcmVwb3J0aW5nKC0xKTsKCmNsYXNzIEVtcGxveWVlICAgICAgICAgICAgIAp7CiAgICBwdWJsaWMgJG5hbWU7ICAgICAgICAgICAgICAgLy8g0LjQvNGPLdGE0LDQvNC40LvQuNGPCiAgICBwdWJsaWMgJHJhdGU7ICAgICAgICAgICAgICAgLy8g0YfQsNGB0L7QstCw0Y8g0YHRgtCw0LLQutCwICjRgdC60L7Qu9GM0LrQviDQvtC9INC/0L7Qu9GD0YfQsNC10YIg0YLRg9Cz0YDQuNC60L7QsiDQt9CwINGH0LDRgSDRgNCw0LHQvtGC0YspCiAgICBwdWJsaWMgJGhvdXJzID0gYXJyYXkoKTsgICAgLy8g0LzQsNGB0YHQuNCyLCDRgdC+0LTQtdGA0LbQsNGJ0LjQuSDQvtGC0YDQsNCx0L7RgtCw0L3QvdGL0LUg0YfQsNGB0Ysg0L/QviDQvdC10LTQtdC70Y/QvAoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbmFtZSwgJHJhdGUpCiAgICB7CiAgICAgICAgLy8g0LfQsNC00LDQtdC8INC40LzRjyDQuCDRh9Cw0YHQvtCy0YPRjiDRgdGC0LDQstC60YMKICAgICAgICAkdGhpcy0+bmFtZSA9ICRuYW1lOwogICAgICAgICR0aGlzLT5yYXRlID0gJHJhdGU7CiAgICB9CiAKICAgIC8qKiDQodGH0LjRgtCw0LXRgiDQvtCx0YnQtdC1INGH0LjRgdC70L4g0L7RgtGA0LDQsdC+0YLQsNC90L3Ri9GFINGH0LDRgdC+0LIgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUb3RhbEhvdXJzV29ya2VkKCkKICAgIHsKICAgICAgICAvLyDQn9GA0L7RgdGC0L4g0YHQutC70LDQtNGL0LLQsNC10Lwg0LfQvdCw0YfQtdC90LjRjyDRh9Cw0YHQvtCyINCyINC80LDRgdGB0LjQstC1CiAgICAgICAgcmV0dXJuIGFycmF5X3N1bSgkdGhpcy0+aG91cnMpOwogICAgfQogICAgCiAgICAvKiog0KHRh9C40YLQsNC10YIg0L3QvtGA0LzQsNC70YzQvdGL0LUg0YfQsNGB0YsgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb3JtYWxIb3VycygpIAogICAgewogICAgCSRub3JtYWxIb3VycyA9IDA7CiAgICAJZm9yZWFjaCAoJHRoaXMtPmhvdXJzIGFzICRob3Vyc0FXZWVrKSB7CgkgICAgICAgIGlmICgkaG91cnNBV2VlayA8PSA0MCkgewoJICAgIAkgICAgJG5vcm1hbEhvdXJzICs9ICRob3Vyc0FXZWVrOwoJICAgICAgICB9IAoJICAgICAgICBlbHNlaWYgKCRob3Vyc0FXZWVrID4gNDApIHsKCSAgICAgICAgCSRub3JtYWxIb3VycyArPSAkaG91cnNBV2VlayAtICgkaG91cnNBV2VlayAtIDQwKTsKCSAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJG5vcm1hbEhvdXJzOwogICAgfQogICAgcHVibGljIGZ1bmN0aW9uIGdldE92ZXJ0aW1lSG91cnMoKQogICAgewogICAgICAgICRvdmVydGltZSA9IDA7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmhvdXJzIGFzICRob3Vyc0FXZWVrKSB7CgkgICAgICAgIGlmICgkaG91cnNBV2VlayA+IDQwKSB7CgkgICAgCSAgICAkb3ZlcnRpbWUgKz0gKCRob3Vyc0FXZWVrIC0gNDApOwoJICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkb3ZlcnRpbWU7CiAgICB9CiAgICAKIAogICAgLyoqINCh0YfQuNGC0LDQtdGCINC30LDRgNC/0LvQsNGC0YMgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTYWxhcnkoKQogICAgewogICAgICAgIC8vINCf0L7Qu9GD0YfQsNC10Lwg0YfQuNGB0LvQviDQvtGC0YDQsNCx0L7RgtCw0L3QvdGL0YUg0YfQsNGB0L7QsgogICAgICAgICRob3VycyA9ICR0aGlzLT5nZXROb3JtYWxIb3VycygpOwogICAgICAgIC8vINC4INGD0LzQvdC+0LbQsNC10Lwg0L3QsCDRh9Cw0YHQvtCy0YPRjiDRgdGC0LDQstC60YMKICAgICAgICAkbm9ybWFsU2FsYXJ5ID0gJGhvdXJzICogJHRoaXMtPnJhdGU7CiAgICAgICAgLy8g0J/QvtC70YPRh9Cw0LXQvCDRh9C40YHQu9C+INC+0YLRgNCw0LHQvtGC0LDQvdC90YvRhSDRh9Cw0YHQvtCyCiAgICAgICAgJG92ZXJ0aW1lID0gJHRoaXMtPmdldE92ZXJ0aW1lSG91cnMoKTsKICAgICAgICAvLyDQuCDRg9C80L3QvtC20LDQtdC8INC90LAg0LTQstC+0LnQvdGD0Y4g0YHRgtCw0LLQutGDCiAgICAgICAgJG92ZXJ0aW1lU2FsYXJ5ID0gJG92ZXJ0aW1lICogKCR0aGlzLT5yYXRlICogMik7CiAgICAgICAgcmV0dXJuICRub3JtYWxTYWxhcnkgKyAkb3ZlcnRpbWVTYWxhcnk7CiAgICB9CiAgICAKfQoKZnVuY3Rpb24gcGFkUmlnaHQoJHgsICR5KXsKICAgIHJldHVybiAkeC5zdHJfcmVwZWF0KCIgIiwgJHkgLSBzdHJsZW4oJHgpKTsKfQpmdW5jdGlvbiBwYWRMZWZ0KCR4LCAkeSl7CiAgICByZXR1cm4gc3RyX3JlcGVhdCgiICIsICR5IC0gc3RybGVuKCR4KSkgLiAkeDsKfQokaXZhbiA9IG5ldyBFbXBsb3llZSgiaXZhbm92IGl2YW4iLCAxMCk7Ci8vIG5hbWUg0LggcmF0ZSDQt9Cw0LTQsNC90Ysg0YfQtdGA0LXQtyDQutC+0L3RgdGC0YDRg9C60YLQvtGALCDQv9C+0YLQvtC80YMg0L7RgdGC0LDQu9C+0YHRjCDQu9C40YjRjCDQvdCw0L/QuNGB0LDRgtGMINGH0LDRgdGLCiRpdmFuLT5ob3VycyA9IGFycmF5KDQwLCA0MCwgNDAsIDQwKTsgICAvLyDQmNCy0LDQvSDRgNCw0LHQvtGC0LDQtdGCINC/0L4gNDAg0YfQsNGB0L7QsiDQsiDQvdC10LTQtdC70Y4KCiRwZXRlciA9IG5ldyBFbXBsb3llZSgicGV0cm92IHBldHIiLCA4KTsKJHBldGVyLT5ob3VycyA9IGFycmF5KDQwLCAxMCwgNDAsIDUwKTsgIC8vINCf0LXRgtGAINCy0LfRj9C7INC+0YLQs9GD0Lsg0Lgg0L/QvtGC0L7QvNGDINC+0YLRgNCw0LHQvtGC0LDQuyDQvNC10L3RjNGI0LUg0YfQsNGB0L7QsiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vINC90L4g0LIgINC/0L7RgdC70LXQtNC90Y7RjiDQvdC10LTQtdC70Y4g0YDQtdGI0LjQuyDQv9C+0YDQsNCx0L7RgtCw0YLRjCDQv9C+0LHQvtC70YzRiNC1CiAKJGVtcGxveWVlcyA9IGFycmF5KCRpdmFuLCAkcGV0ZXIpOwogCiRjb2wxID0gMTU7CiRjb2wyID0gOTsKCi8vINCX0LDQs9C+0LvQvtCy0L7QuiDRgtCw0LHQu9C40YbRiwoJZWNobyBwYWRSaWdodCgnRW1wbG95ZWUnLCAkY29sMSkgLgogICAgICAgICBwYWRMZWZ0KCdIb3VyJywgJGNvbDIpIC4KICAgICAgICAgcGFkTGVmdCgnT3ZlcnRpbWUnLCAkY29sMikgLgogICAgICAgICBwYWRMZWZ0KCdSYXRlJywgJGNvbDIpIC4gCiAgICAgICAgIHBhZExlZnQoJ1NhbGFyeScsICRjb2wyKSAuICJcbiI7CiAgICAgICAgIAovLyDQodCw0LzQsCDRgtCw0LHQu9C40YbQsAokdG90YWxIb3VycyA9IDA7CiR0b3RhbFNhbGFyeSA9IDA7CiR0b3RhbE92ZXJ0aW1lID0gMDsKZm9yZWFjaCAoJGVtcGxveWVlcyBhcyAkZW1wbG95ZWUpIHsKCSAgICAkc2hvcnROYW1lID0gcHJlZ19yZXBsYWNlKCcvKCApKFthLXpdKShbYS16XSspL3VpJywgJyAkMi4nLCAkZW1wbG95ZWUtPm5hbWUpOwogICAgZWNobyBwYWRSaWdodCgkc2hvcnROYW1lLCAkY29sMSkgLgogICAgICAgICBwYWRMZWZ0KCRlbXBsb3llZS0+Z2V0VG90YWxIb3Vyc1dvcmtlZCgpLCAkY29sMikgLiAKICAgICAgICAgcGFkTGVmdCgkZW1wbG95ZWUtPmdldE92ZXJ0aW1lSG91cnMoKSwgJGNvbDIpIC4gCiAgICAgICAgIHBhZExlZnQoJGVtcGxveWVlLT5yYXRlLCAkY29sMikgLiAKICAgICAgICAgcGFkTGVmdCgkZW1wbG95ZWUtPmdldFNhbGFyeSgpLCAkY29sMikgLiAiXG4iOwogICAgICAgICAkdG90YWxIb3VycyArPSAkZW1wbG95ZWUtPmdldFRvdGFsSG91cnNXb3JrZWQoKTsKICAgICAgICAgJHRvdGFsU2FsYXJ5ICs9ICRlbXBsb3llZS0+Z2V0U2FsYXJ5KCk7CiAgICAgICAgICR0b3RhbE92ZXJ0aW1lICs9ICRlbXBsb3llZS0+Z2V0T3ZlcnRpbWVIb3VycygpOwp9CmVjaG8gcGFkUmlnaHQoIkFsbCIsICRjb2wxKSAuCiAgICAgICAgIHBhZExlZnQoJHRvdGFsSG91cnMsICRjb2wyKSAuIAogICAgICAgICBwYWRMZWZ0KCR0b3RhbE92ZXJ0aW1lLCAkY29sMikgLiAKICAgICAgICAgcGFkTGVmdChudWxsLCAkY29sMikgLiAKICAgICAgICAgcGFkTGVmdCgkdG90YWxTYWxhcnksICRjb2wyKSAuICJcbiI7