<?php
class Employee
{
public $name; // имя-фамилия
public $rate; // часовая ставка (сколько он получает тугриков за час работы)
public $hours = array(); // массив, содержащий отработанные часы по неделям public $overtimeHours;
public function __construct($name, $rate)
{
// задаем имя и часовую ставку
$this->name = $name;
$this->rate = $rate;
}
/** Считает общее число отработанных часов */
public function getTotalHoursWorked()
{
// Просто складываем значения часов в массиве
}
/** Считает нормальные часы */
public function getNormalHours()
{
}
/** Считает зарплату */
public function getSalary()
{
// Получаем число отработанных часов
$hours = $this->getTotalHoursWorked();
// и умножаем на часовую ставку
$salary = $hours * $this->rate;
return $salary;
}
}
function padRight($x, $y){
}
function padLeft($x, $y){
}
$ivan = new Employee("ivanov ivan", 10);
// name и rate заданы через конструктор, потому осталось лишь написать часы
$ivan->hours = array(40, 40, 40, 40); // Иван работает по 40 часов в неделю $ivan->overtimeHours = 0;
$peter = new Employee("petrov petr", 8);
$peter->hours = array(40, 10, 40, 50); // Петр взял отгул и потому отработал меньше часов, $peter->overtimeHours = 10; // но в последнюю неделю решил поработать побольше
$employees = array($ivan, $peter);
$col1 = 15;
$col2 = 8;
// Заголовок таблицы
echo padRight('Employee', $col1) .
padLeft('Hour', $col2) .
padLeft('Overtime', $col2) .
padLeft('Rate', $col2) .
padLeft('Salary', $col2) . "\n";
// Сама таблица
$totalHours = 0;
$totalSalary = 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->overtimeHours, $col2) .
padLeft($employee->rate, $col2) .
padLeft($employee->getSalary(), $col2) . "\n";
$totalHours += $employee->getTotalHoursWorked();
$totalSalary += $employee->getSalary();
$totalOvertime += $employee->overtimeHours;
}
echo padRight("All", $col1) .
padLeft($totalHours, $col2) .
padLeft($totalOvertime, $col2) .
padLeft(null, $col2) .
padLeft($totalSalary, $col2) . "\n";
PD9waHAKZXJyb3JfcmVwb3J0aW5nKC0xKTsKCmNsYXNzIEVtcGxveWVlICAgICAgICAgICAgIAp7CiAgICBwdWJsaWMgJG5hbWU7ICAgICAgICAgICAgICAgLy8g0LjQvNGPLdGE0LDQvNC40LvQuNGPCiAgICBwdWJsaWMgJHJhdGU7ICAgICAgICAgICAgICAgLy8g0YfQsNGB0L7QstCw0Y8g0YHRgtCw0LLQutCwICjRgdC60L7Qu9GM0LrQviDQvtC9INC/0L7Qu9GD0YfQsNC10YIg0YLRg9Cz0YDQuNC60L7QsiDQt9CwINGH0LDRgSDRgNCw0LHQvtGC0YspCiAgICBwdWJsaWMgJGhvdXJzID0gYXJyYXkoKTsgICAgLy8g0LzQsNGB0YHQuNCyLCDRgdC+0LTQtdGA0LbQsNGJ0LjQuSDQvtGC0YDQsNCx0L7RgtCw0L3QvdGL0LUg0YfQsNGB0Ysg0L/QviDQvdC10LTQtdC70Y/QvAogICAgcHVibGljICRvdmVydGltZUhvdXJzOwogCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG5hbWUsICRyYXRlKQogICAgewogICAgICAgIC8vINC30LDQtNCw0LXQvCDQuNC80Y8g0Lgg0YfQsNGB0L7QstGD0Y4g0YHRgtCw0LLQutGDCiAgICAgICAgJHRoaXMtPm5hbWUgPSAkbmFtZTsKICAgICAgICAkdGhpcy0+cmF0ZSA9ICRyYXRlOwogICAgfQogCiAgICAvKiog0KHRh9C40YLQsNC10YIg0L7QsdGJ0LXQtSDRh9C40YHQu9C+INC+0YLRgNCw0LHQvtGC0LDQvdC90YvRhSDRh9Cw0YHQvtCyICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VG90YWxIb3Vyc1dvcmtlZCgpCiAgICB7CiAgICAgICAgLy8g0J/RgNC+0YHRgtC+INGB0LrQu9Cw0LTRi9Cy0LDQtdC8INC30L3QsNGH0LXQvdC40Y8g0YfQsNGB0L7QsiDQsiDQvNCw0YHRgdC40LLQtQogICAgICAgIHJldHVybiBhcnJheV9zdW0oJHRoaXMtPmhvdXJzKTsKICAgIH0KICAgIAogICAgLyoqINCh0YfQuNGC0LDQtdGCINC90L7RgNC80LDQu9GM0L3Ri9C1INGH0LDRgdGLICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9ybWFsSG91cnMoKQogICAgewogICAgCQogICAgfQogCiAgICAvKiog0KHRh9C40YLQsNC10YIg0LfQsNGA0L/Qu9Cw0YLRgyAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNhbGFyeSgpCiAgICB7CiAgICAgICAgLy8g0J/QvtC70YPRh9Cw0LXQvCDRh9C40YHQu9C+INC+0YLRgNCw0LHQvtGC0LDQvdC90YvRhSDRh9Cw0YHQvtCyCiAgICAgICAgJGhvdXJzID0gJHRoaXMtPmdldFRvdGFsSG91cnNXb3JrZWQoKTsKICAgICAgICAvLyDQuCDRg9C80L3QvtC20LDQtdC8INC90LAg0YfQsNGB0L7QstGD0Y4g0YHRgtCw0LLQutGDCiAgICAgICAgJHNhbGFyeSA9ICRob3VycyAqICR0aGlzLT5yYXRlOwogICAgICAgIHJldHVybiAkc2FsYXJ5OwogICAgfQogICAgCn0KCmZ1bmN0aW9uIHBhZFJpZ2h0KCR4LCAkeSl7CiAgICByZXR1cm4gJHguc3RyX3JlcGVhdCgiKiIsICR5IC0gc3RybGVuKCR4KSk7Cn0KZnVuY3Rpb24gcGFkTGVmdCgkeCwgJHkpewogICAgcmV0dXJuIHN0cl9yZXBlYXQoJyUnLCAkeSAtIHN0cmxlbigkeCkpIC4gJHg7Cn0KJGl2YW4gPSBuZXcgRW1wbG95ZWUoIml2YW5vdiBpdmFuIiwgMTApOwovLyBuYW1lINC4IHJhdGUg0LfQsNC00LDQvdGLINGH0LXRgNC10Lcg0LrQvtC90YHRgtGA0YPQutGC0L7RgCwg0L/QvtGC0L7QvNGDINC+0YHRgtCw0LvQvtGB0Ywg0LvQuNGI0Ywg0L3QsNC/0LjRgdCw0YLRjCDRh9Cw0YHRiwokaXZhbi0+aG91cnMgPSBhcnJheSg0MCwgNDAsIDQwLCA0MCk7ICAgLy8g0JjQstCw0L0g0YDQsNCx0L7RgtCw0LXRgiDQv9C+IDQwINGH0LDRgdC+0LIg0LIg0L3QtdC00LXQu9GOCiRpdmFuLT5vdmVydGltZUhvdXJzID0gMDsKCiRwZXRlciA9IG5ldyBFbXBsb3llZSgicGV0cm92IHBldHIiLCA4KTsKJHBldGVyLT5ob3VycyA9IGFycmF5KDQwLCAxMCwgNDAsIDUwKTsgIC8vINCf0LXRgtGAINCy0LfRj9C7INC+0YLQs9GD0Lsg0Lgg0L/QvtGC0L7QvNGDINC+0YLRgNCw0LHQvtGC0LDQuyDQvNC10L3RjNGI0LUg0YfQsNGB0L7QsiwgCiRwZXRlci0+b3ZlcnRpbWVIb3VycyA9IDEwOyAgICAgICAgICAgICAgIC8vINC90L4g0LIgINC/0L7RgdC70LXQtNC90Y7RjiDQvdC10LTQtdC70Y4g0YDQtdGI0LjQuyDQv9C+0YDQsNCx0L7RgtCw0YLRjCDQv9C+0LHQvtC70YzRiNC1CiAKJGVtcGxveWVlcyA9IGFycmF5KCRpdmFuLCAkcGV0ZXIpOwogCiRjb2wxID0gMTU7CiRjb2wyID0gODsKCi8vINCX0LDQs9C+0LvQvtCy0L7QuiDRgtCw0LHQu9C40YbRiwoJZWNobyBwYWRSaWdodCgnRW1wbG95ZWUnLCAkY29sMSkgLgogICAgICAgICBwYWRMZWZ0KCdIb3VyJywgJGNvbDIpIC4gCiAgICAgICAgIHBhZExlZnQoJ092ZXJ0aW1lJywgJGNvbDIpIC4gCiAgICAgICAgIHBhZExlZnQoJ1JhdGUnLCAkY29sMikgLiAKICAgICAgICAgcGFkTGVmdCgnU2FsYXJ5JywgJGNvbDIpIC4gIlxuIjsKICAgICAgICAgCi8vINCh0LDQvNCwINGC0LDQsdC70LjRhtCwCiR0b3RhbEhvdXJzID0gMDsKJHRvdGFsU2FsYXJ5ID0gMDsKZm9yZWFjaCAoJGVtcGxveWVlcyBhcyAkZW1wbG95ZWUpIHsKCSAgICAkc2hvcnROYW1lID0gcHJlZ19yZXBsYWNlKCcvKCApKFthLXpdKShbYS16XSspL3VpJywgJyAkMi4nLCAkZW1wbG95ZWUtPm5hbWUpOwogICAgZWNobyBwYWRSaWdodCgkc2hvcnROYW1lLCAkY29sMSkgLgogICAgICAgICBwYWRMZWZ0KCRlbXBsb3llZS0+Z2V0VG90YWxIb3Vyc1dvcmtlZCgpLCAkY29sMikgLiAKICAgICAgICAgcGFkTGVmdCgkZW1wbG95ZWUtPm92ZXJ0aW1lSG91cnMsICRjb2wyKSAuCiAgICAgICAgIHBhZExlZnQoJGVtcGxveWVlLT5yYXRlLCAkY29sMikgLiAKICAgICAgICAgcGFkTGVmdCgkZW1wbG95ZWUtPmdldFNhbGFyeSgpLCAkY29sMikgLiAiXG4iOwogICAgICAgICAkdG90YWxIb3VycyArPSAkZW1wbG95ZWUtPmdldFRvdGFsSG91cnNXb3JrZWQoKTsKICAgICAgICAgJHRvdGFsU2FsYXJ5ICs9ICRlbXBsb3llZS0+Z2V0U2FsYXJ5KCk7CiAgICAgICAgICR0b3RhbE92ZXJ0aW1lICs9ICRlbXBsb3llZS0+b3ZlcnRpbWVIb3VyczsKfQplY2hvIHBhZFJpZ2h0KCJBbGwiLCAkY29sMSkgLgogICAgICAgICBwYWRMZWZ0KCR0b3RhbEhvdXJzLCAkY29sMikgLiAKICAgICAgICAgcGFkTGVmdCgkdG90YWxPdmVydGltZSwgJGNvbDIpIC4KICAgICAgICAgcGFkTGVmdChudWxsLCAkY29sMikgLiAKICAgICAgICAgcGFkTGVmdCgkdG90YWxTYWxhcnksICRjb2wyKSAuICJcbiI7