<?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()
{
return $this->getTotalHoursWorked() - $this->getNormalHours();
}
/** Считает зарплату */
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+aG91cnMpOwogICAgfQogICAgCiAgICAvKiog0KHRh9C40YLQsNC10YIg0L3QvtGA0LzQsNC70YzQvdGL0LUg0YfQsNGB0YsgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb3JtYWxIb3VycygpIAogICAgewogICAgCSRub3JtYWxIb3VycyA9IDA7CiAgICAJZm9yZWFjaCAoJHRoaXMtPmhvdXJzIGFzICRob3Vyc0FXZWVrKSB7CgkgICAgICAgIGlmICgkaG91cnNBV2VlayA8PSA0MCkgewoJICAgIAkgICAgJG5vcm1hbEhvdXJzICs9ICRob3Vyc0FXZWVrOwoJICAgICAgICB9IAoJICAgICAgICBlbHNlaWYgKCRob3Vyc0FXZWVrID4gNDApIHsKCSAgICAgICAgCSRub3JtYWxIb3VycyArPSAkaG91cnNBV2VlayAtICgkaG91cnNBV2VlayAtIDQwKTsKCSAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJG5vcm1hbEhvdXJzOwogICAgfQogICAgcHVibGljIGZ1bmN0aW9uIGdldE92ZXJ0aW1lSG91cnMoKQogICAgewogICAgCXJldHVybiAkdGhpcy0+Z2V0VG90YWxIb3Vyc1dvcmtlZCgpIC0gJHRoaXMtPmdldE5vcm1hbEhvdXJzKCk7CiAgICB9CiAKICAgIC8qKiDQodGH0LjRgtCw0LXRgiDQt9Cw0YDQv9C70LDRgtGDICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2FsYXJ5KCkKICAgIHsKICAgICAgICAvLyDQn9C+0LvRg9GH0LDQtdC8INGH0LjRgdC70L4g0L7RgtGA0LDQsdC+0YLQsNC90L3Ri9GFINGH0LDRgdC+0LIKICAgICAgICAkaG91cnMgPSAkdGhpcy0+Z2V0Tm9ybWFsSG91cnMoKTsKICAgICAgICAvLyDQuCDRg9C80L3QvtC20LDQtdC8INC90LAg0YfQsNGB0L7QstGD0Y4g0YHRgtCw0LLQutGDCiAgICAgICAgJG5vcm1hbFNhbGFyeSA9ICRob3VycyAqICR0aGlzLT5yYXRlOwogICAgICAgIC8vINCf0L7Qu9GD0YfQsNC10Lwg0YfQuNGB0LvQviDQvtGC0YDQsNCx0L7RgtCw0L3QvdGL0YUg0YfQsNGB0L7QsgogICAgICAgICRvdmVydGltZSA9ICR0aGlzLT5nZXRPdmVydGltZUhvdXJzKCk7CiAgICAgICAgLy8g0Lgg0YPQvNC90L7QttCw0LXQvCDQvdCwINC00LLQvtC50L3Rg9GOINGB0YLQsNCy0LrRgwogICAgICAgICRvdmVydGltZVNhbGFyeSA9ICRvdmVydGltZSAqICgkdGhpcy0+cmF0ZSAqIDIpOwogICAgICAgIHJldHVybiAkbm9ybWFsU2FsYXJ5ICsgJG92ZXJ0aW1lU2FsYXJ5OwogICAgfQogICAgCn0KCmZ1bmN0aW9uIHBhZFJpZ2h0KCR4LCAkeSl7CiAgICByZXR1cm4gJHguc3RyX3JlcGVhdCgiICIsICR5IC0gc3RybGVuKCR4KSk7Cn0KZnVuY3Rpb24gcGFkTGVmdCgkeCwgJHkpewogICAgcmV0dXJuIHN0cl9yZXBlYXQoIiAiLCAkeSAtIHN0cmxlbigkeCkpIC4gJHg7Cn0KJGl2YW4gPSBuZXcgRW1wbG95ZWUoIml2YW5vdiBpdmFuIiwgMTApOwovLyBuYW1lINC4IHJhdGUg0LfQsNC00LDQvdGLINGH0LXRgNC10Lcg0LrQvtC90YHRgtGA0YPQutGC0L7RgCwg0L/QvtGC0L7QvNGDINC+0YHRgtCw0LvQvtGB0Ywg0LvQuNGI0Ywg0L3QsNC/0LjRgdCw0YLRjCDRh9Cw0YHRiwokaXZhbi0+aG91cnMgPSBhcnJheSg0MCwgNDAsIDQwLCA0MCk7ICAgLy8g0JjQstCw0L0g0YDQsNCx0L7RgtCw0LXRgiDQv9C+IDQwINGH0LDRgdC+0LIg0LIg0L3QtdC00LXQu9GOCgokcGV0ZXIgPSBuZXcgRW1wbG95ZWUoInBldHJvdiBwZXRyIiwgOCk7CiRwZXRlci0+aG91cnMgPSBhcnJheSg0MCwgMTAsIDQwLCA1MCk7ICAvLyDQn9C10YLRgCDQstC30Y/QuyDQvtGC0LPRg9C7INC4INC/0L7RgtC+0LzRgyDQvtGC0YDQsNCx0L7RgtCw0Lsg0LzQtdC90YzRiNC1INGH0LDRgdC+0LIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDQvdC+INCyICDQv9C+0YHQu9C10LTQvdGO0Y4g0L3QtdC00LXQu9GOINGA0LXRiNC40Lsg0L/QvtGA0LDQsdC+0YLQsNGC0Ywg0L/QvtCx0L7Qu9GM0YjQtQogCiRlbXBsb3llZXMgPSBhcnJheSgkaXZhbiwgJHBldGVyKTsKIAokY29sMSA9IDE1OwokY29sMiA9IDk7CgovLyDQl9Cw0LPQvtC70L7QstC+0Log0YLQsNCx0LvQuNGG0YsKCWVjaG8gcGFkUmlnaHQoJ0VtcGxveWVlJywgJGNvbDEpIC4KICAgICAgICAgcGFkTGVmdCgnSG91cicsICRjb2wyKSAuCiAgICAgICAgIHBhZExlZnQoJ092ZXJ0aW1lJywgJGNvbDIpIC4KICAgICAgICAgcGFkTGVmdCgnUmF0ZScsICRjb2wyKSAuIAogICAgICAgICBwYWRMZWZ0KCdTYWxhcnknLCAkY29sMikgLiAiXG4iOwogICAgICAgICAKLy8g0KHQsNC80LAg0YLQsNCx0LvQuNGG0LAKJHRvdGFsSG91cnMgPSAwOwokdG90YWxTYWxhcnkgPSAwOwokdG90YWxPdmVydGltZSA9IDA7CmZvcmVhY2ggKCRlbXBsb3llZXMgYXMgJGVtcGxveWVlKSB7CgkgICAgJHNob3J0TmFtZSA9IHByZWdfcmVwbGFjZSgnLyggKShbYS16XSkoW2Etel0rKS91aScsICcgJDIuJywgJGVtcGxveWVlLT5uYW1lKTsKICAgIGVjaG8gcGFkUmlnaHQoJHNob3J0TmFtZSwgJGNvbDEpIC4KICAgICAgICAgcGFkTGVmdCgkZW1wbG95ZWUtPmdldFRvdGFsSG91cnNXb3JrZWQoKSwgJGNvbDIpIC4gCiAgICAgICAgIHBhZExlZnQoJGVtcGxveWVlLT5nZXRPdmVydGltZUhvdXJzKCksICRjb2wyKSAuIAogICAgICAgICBwYWRMZWZ0KCRlbXBsb3llZS0+cmF0ZSwgJGNvbDIpIC4gCiAgICAgICAgIHBhZExlZnQoJGVtcGxveWVlLT5nZXRTYWxhcnkoKSwgJGNvbDIpIC4gIlxuIjsKICAgICAgICAgJHRvdGFsSG91cnMgKz0gJGVtcGxveWVlLT5nZXRUb3RhbEhvdXJzV29ya2VkKCk7CiAgICAgICAgICR0b3RhbFNhbGFyeSArPSAkZW1wbG95ZWUtPmdldFNhbGFyeSgpOwogICAgICAgICAkdG90YWxPdmVydGltZSArPSAkZW1wbG95ZWUtPmdldE92ZXJ0aW1lSG91cnMoKTsKfQplY2hvIHBhZFJpZ2h0KCJBbGwiLCAkY29sMSkgLgogICAgICAgICBwYWRMZWZ0KCR0b3RhbEhvdXJzLCAkY29sMikgLiAKICAgICAgICAgcGFkTGVmdCgkdG90YWxPdmVydGltZSwgJGNvbDIpIC4gCiAgICAgICAgIHBhZExlZnQobnVsbCwgJGNvbDIpIC4gCiAgICAgICAgIHBhZExlZnQoJHRvdGFsU2FsYXJ5LCAkY29sMikgLiAiXG4iOw==