<?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()
{
$normal = 40;
$total = 0;
foreach ($this->hours as $hours) {
$total += min($normal, $hours); }
return $total;
}
// Считаем количество часов оплачиваемых по двойному тарифу
public function getOverTimeHours()
{
return $this->getTotalHoursWorked() - $this->getNormalHours();
}
/** Считает зарплату */
public function getSalary()
{
// Получаем число отработанных часов
$hours = $this->getNormalHours();
// и умножаем на часовую ставку
$salary = $hours * $this->rate;
//Считаем по двойному тарифу за переработку
$hours = $this->getOverTimeHours();
$salary += $hours * $this->rate * 2;
return $salary;
}
public function getShortName()
{
}
}
$ivan = new Employee('Иванов Иван', 10);
$ivan->hours = array(40, 40, 40, 40); // Иван работает по 40 часов в неделю
$peter = new Employee('Петров Петр', 8);
$peter->hours = array(40, 10, 40, 50); // Петр взял отгул и потому отработал меньше часов, // но в последнюю неделю решил поработать побольше
$employees = array($ivan, $peter);
//теперь попробуем использовать методы для вывода полезной информации:
//Функции генерирующие отступ для строки слева и справа
function padRight($string, $length)
{
}
function padLeft($string, $length)
{
}
// Ширина колонок
$col1 = 30;
$col2 = 8;
$col3 = 10;
$col4 = 8;
$col5 = 8;
// Заголовок таблицы
echo padRight("Сотрудник", $col1) .
padLeft("Часы", $col2) .
padLeft("Овертайм", $col3) .
padLeft("Ставка", $col4) .
padLeft("З/п", $col5) . "\n\n";
$totalHours = 0;
$totalSalary = 0;
$totalOvertime = 0;
// Сама таблица
foreach ($employees as $employee) {
echo padRight($employee->getShortName(), $col1) .
padLeft($employee->getTotalHoursWorked(), $col2) .
padLeft($employee->getOverTimeHours(), $col3) .
padLeft($employee->rate, $col4) .
padLeft($employee->getSalary(), $col5) . "\n";
$totalHours += $employee->getTotalHoursWorked();
$totalSalary += $employee->getSalary();
$totalOvertime += $employee->getOverTimeHours();
}
echo padRight('Всего', $col1) .
padLeft($totalHours, $col2) .
padLeft($totalOvertime, $col3) .
padLeft('', $col4) .
padLeft($totalSalary, $col5);
PD9waHAKCm1iX2ludGVybmFsX2VuY29kaW5nKCdVVEYtOCcpOwoKY2xhc3MgRW1wbG95ZWUKewogICAgcHVibGljICRuYW1lOyAvLyDQuNC80Y8t0YTQsNC80LjQu9C40Y8KICAgIHB1YmxpYyAkcmF0ZTsgLy8g0YfQsNGB0L7QstCw0Y8g0YHRgtCw0LLQutCwICjRgdC60L7Qu9GM0LrQviDQvtC9INC/0L7Qu9GD0YfQsNC10YIg0YLRg9Cz0YDQuNC60L7QsiDQt9CwINGH0LDRgSDRgNCw0LHQvtGC0YspCiAgICBwdWJsaWMgJGhvdXJzID0gYXJyYXkoKTsgLy8g0LzQsNGB0YHQuNCyLCDRgdC+0LTQtdGA0LbQsNGJ0LjQuSDQvtGC0YDQsNCx0L7RgtCw0L3QvdGL0LUg0YfQsNGB0Ysg0L/QviDQvdC10LTQtdC70Y/QvAoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbmFtZSwgJHJhdGUpCiAgICB7CiAgICAgICAgLy8g0LfQsNC00LDQtdC8INC40LzRjyDQuCDRh9Cw0YHQvtCy0YPRjiDRgdGC0LDQstC60YMKICAgICAgICAkdGhpcy0+bmFtZSA9ICRuYW1lOwogICAgICAgICR0aGlzLT5yYXRlID0gJHJhdGU7CiAgICB9CgogICAgLyoqINCh0YfQuNGC0LDQtdGCINC+0LHRidC10LUg0YfQuNGB0LvQviDQvtGC0YDQsNCx0L7RgtCw0L3QvdGL0YUg0YfQsNGB0L7QsiAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRvdGFsSG91cnNXb3JrZWQoKQogICAgewogICAgICAgIC8vINCf0YDQvtGB0YLQviDRgdC60LvQsNC00YvQstCw0LXQvCDQt9C90LDRh9C10L3QuNGPINGH0LDRgdC+0LIg0LIg0LzQsNGB0YHQuNCy0LUKICAgICAgICByZXR1cm4gYXJyYXlfc3VtKCR0aGlzLT5ob3Vycyk7CiAgICB9CgogICAgLy/QodGH0LjRgtCw0LXQvCDQutC+0LvQuNGH0LXRgdGC0LLQviDRh9Cw0YHQvtCyINC+0L/Qu9Cw0YfQuNCy0LDQtdC80YvRhSDQv9C+INC+0LHRi9GH0L3QvtC80YMg0YLQsNGA0LjRhNGDCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9ybWFsSG91cnMoKQogICAgewogICAgICAgICRub3JtYWwgPSA0MDsKICAgICAgICAkdG90YWwgPSAwOwogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5ob3VycyBhcyAkaG91cnMpIHsKICAgICAgICAgICAgJHRvdGFsICs9IG1pbigkbm9ybWFsLCAkaG91cnMpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHRvdGFsOwogICAgfQoKICAgIC8vINCh0YfQuNGC0LDQtdC8INC60L7Qu9C40YfQtdGB0YLQstC+INGH0LDRgdC+0LIg0L7Qv9C70LDRh9C40LLQsNC10LzRi9GFINC/0L4g0LTQstC+0LnQvdC+0LzRgyDRgtCw0YDQuNGE0YMKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRPdmVyVGltZUhvdXJzKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldFRvdGFsSG91cnNXb3JrZWQoKSAtICR0aGlzLT5nZXROb3JtYWxIb3VycygpOwogICAgfQoKICAgIC8qKiDQodGH0LjRgtCw0LXRgiDQt9Cw0YDQv9C70LDRgtGDICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2FsYXJ5KCkKICAgIHsKICAgICAgICAvLyDQn9C+0LvRg9GH0LDQtdC8INGH0LjRgdC70L4g0L7RgtGA0LDQsdC+0YLQsNC90L3Ri9GFINGH0LDRgdC+0LIKICAgICAgICAkaG91cnMgPSAkdGhpcy0+Z2V0Tm9ybWFsSG91cnMoKTsKICAgICAgICAvLyDQuCDRg9C80L3QvtC20LDQtdC8INC90LAg0YfQsNGB0L7QstGD0Y4g0YHRgtCw0LLQutGDCiAgICAgICAgJHNhbGFyeSA9ICRob3VycyAqICR0aGlzLT5yYXRlOwogICAgICAgIC8v0KHRh9C40YLQsNC10Lwg0L/QviDQtNCy0L7QudC90L7QvNGDINGC0LDRgNC40YTRgyDQt9CwINC/0LXRgNC10YDQsNCx0L7RgtC60YMKICAgICAgICAkaG91cnMgPSAkdGhpcy0+Z2V0T3ZlclRpbWVIb3VycygpOwogICAgICAgICRzYWxhcnkgKz0gJGhvdXJzICogJHRoaXMtPnJhdGUgKiAyOwogICAgICAgIHJldHVybiAkc2FsYXJ5OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaG9ydE5hbWUoKQogICAgewogICAgICAgIHJldHVybiBwcmVnX3JlcGxhY2UoJy8oXHcrIFx3KS4rL3UnLCAnJDEuJywgJHRoaXMtPm5hbWUpOwogICAgfQp9CgokaXZhbiA9IG5ldyBFbXBsb3llZSgn0JjQstCw0L3QvtCyINCY0LLQsNC9JywgMTApOwokaXZhbi0+aG91cnMgPSBhcnJheSg0MCwgNDAsIDQwLCA0MCk7IC8vINCY0LLQsNC9INGA0LDQsdC+0YLQsNC10YIg0L/QviA0MCDRh9Cw0YHQvtCyINCyINC90LXQtNC10LvRjgoKJHBldGVyID0gbmV3IEVtcGxveWVlKCfQn9C10YLRgNC+0LIg0J/QtdGC0YAnLCA4KTsKJHBldGVyLT5ob3VycyA9IGFycmF5KDQwLCAxMCwgNDAsIDUwKTsgLy8g0J/QtdGC0YAg0LLQt9GP0Lsg0L7RgtCz0YPQuyDQuCDQv9C+0YLQvtC80YMg0L7RgtGA0LDQsdC+0YLQsNC7INC80LXQvdGM0YjQtSDRh9Cw0YHQvtCyLAovLyDQvdC+INCyICDQv9C+0YHQu9C10LTQvdGO0Y4g0L3QtdC00LXQu9GOINGA0LXRiNC40Lsg0L/QvtGA0LDQsdC+0YLQsNGC0Ywg0L/QvtCx0L7Qu9GM0YjQtQoKJGVtcGxveWVlcyA9IGFycmF5KCRpdmFuLCAkcGV0ZXIpOwoKLy/RgtC10L/QtdGA0Ywg0L/QvtC/0YDQvtCx0YPQtdC8INC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvNC10YLQvtC00Ysg0LTQu9GPINCy0YvQstC+0LTQsCDQv9C+0LvQtdC30L3QvtC5INC40L3RhNC+0YDQvNCw0YbQuNC4OgoKLy/QpNGD0L3QutGG0LjQuCDQs9C10L3QtdGA0LjRgNGD0Y7RidC40LUg0L7RgtGB0YLRg9C/INC00LvRjyDRgdGC0YDQvtC60Lgg0YHQu9C10LLQsCDQuCDRgdC/0YDQsNCy0LAKZnVuY3Rpb24gcGFkUmlnaHQoJHN0cmluZywgJGxlbmd0aCkKewogICAgcmV0dXJuICAkc3RyaW5nIC4gc3RyX3JlcGVhdCgnICcsICRsZW5ndGggLSBtYl9zdHJsZW4oJHN0cmluZykpOwoKfQoKZnVuY3Rpb24gcGFkTGVmdCgkc3RyaW5nLCAkbGVuZ3RoKQp7CiAgICByZXR1cm4gc3RyX3JlcGVhdCgnICcsICRsZW5ndGggLSBtYl9zdHJsZW4oJHN0cmluZykpIC4gJHN0cmluZzsKfQoKLy8g0KjQuNGA0LjQvdCwINC60L7Qu9C+0L3QvtC6CiRjb2wxID0gMzA7CiRjb2wyID0gODsKJGNvbDMgPSAxMDsKJGNvbDQgPSA4OwokY29sNSA9IDg7CgovLyDQl9Cw0LPQvtC70L7QstC+0Log0YLQsNCx0LvQuNGG0YsKZWNobyBwYWRSaWdodCgi0KHQvtGC0YDRg9C00L3QuNC6IiwgJGNvbDEpIC4KICAgIHBhZExlZnQoItCn0LDRgdGLIiwgJGNvbDIpIC4KICAgIHBhZExlZnQoItCe0LLQtdGA0YLQsNC50LwiLCAkY29sMykgLgogICAgcGFkTGVmdCgi0KHRgtCw0LLQutCwIiwgJGNvbDQpIC4KICAgIHBhZExlZnQoItCXL9C/IiwgJGNvbDUpIC4gIlxuXG4iOwoKJHRvdGFsSG91cnMgPSAwOwokdG90YWxTYWxhcnkgPSAwOwokdG90YWxPdmVydGltZSA9IDA7Ci8vINCh0LDQvNCwINGC0LDQsdC70LjRhtCwCmZvcmVhY2ggKCRlbXBsb3llZXMgYXMgJGVtcGxveWVlKSB7CiAgICBlY2hvIHBhZFJpZ2h0KCRlbXBsb3llZS0+Z2V0U2hvcnROYW1lKCksICRjb2wxKSAuCiAgICAgICAgcGFkTGVmdCgkZW1wbG95ZWUtPmdldFRvdGFsSG91cnNXb3JrZWQoKSwgJGNvbDIpIC4KICAgICAgICBwYWRMZWZ0KCRlbXBsb3llZS0+Z2V0T3ZlclRpbWVIb3VycygpLCAkY29sMykgLgogICAgICAgIHBhZExlZnQoJGVtcGxveWVlLT5yYXRlLCAkY29sNCkgLgogICAgICAgIHBhZExlZnQoJGVtcGxveWVlLT5nZXRTYWxhcnkoKSwgJGNvbDUpIC4gIlxuIjsKICAgICR0b3RhbEhvdXJzICs9ICRlbXBsb3llZS0+Z2V0VG90YWxIb3Vyc1dvcmtlZCgpOwogICAgJHRvdGFsU2FsYXJ5ICs9ICRlbXBsb3llZS0+Z2V0U2FsYXJ5KCk7CiAgICAkdG90YWxPdmVydGltZSArPSAkZW1wbG95ZWUtPmdldE92ZXJUaW1lSG91cnMoKTsKfQoKZWNobyBwYWRSaWdodCgn0JLRgdC10LPQvicsICRjb2wxKSAuCiAgICBwYWRMZWZ0KCR0b3RhbEhvdXJzLCAkY29sMikgLgogICAgcGFkTGVmdCgkdG90YWxPdmVydGltZSwgJGNvbDMpIC4KICAgIHBhZExlZnQoJycsICRjb2w0KSAuCiAgICBwYWRMZWZ0KCR0b3RhbFNhbGFyeSwgJGNvbDUpOw==