<?php
// archive-ipq-co.narod.ru
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 getOvertimeHours()
{
$overtimeHours = 0;
foreach($this->hours as $weeklyHours) {
$overtimeHours += ($weeklyHours > 40) ? $weeklyHours - 40 : 0;
}
return $overtimeHours;
}
//Считает количество отработанных по графику часов
public function getNormalHours()
{
return $this->getTotalHoursWorked() - $this->getOvertimeHours();
}
//Считает зарплату
public function getSalary()
{
/** // Получаем число нормально отработанных часов и овертайм
$normalHours = $this->getNormalHours();
$overtimeHours = $this->getOvertimeHours();
// и умножаем на часовую ставку
$salary = $normalHours * $this->rate + $overtimeHours * 2 * $this->rate;
return $salary; */
return ($this->getNormalHours() + 2 * $this->getOvertimeHours()) * $this->rate;
}
}
$ivan = new Employee("Иванов Иван", 10);
// name и rate заданы через конструктор, потому осталось лишь написать часы
$ivan->hours = array(40, 40, 40, 40); // Иван работает по 40 часов в неделю
$peter = new Employee("Петров Петр", 8);
$peter->hours = array(40, 10, 50, 50); // Петр взял отгул и потому отработал меньше часов, // но в последние 2 недели решил поработать побольше
$rd = new Employee("Rainbow Dash", 20) ;
$rd->hours = array(60, 60, 60, 60);
$employees = array($ivan, $peter, $rd);
//str_pad для многобайтовых строк
function mb_str_pad ($input, $pad_length, $pad_string, $pad_style, $encoding="UTF-8") {
}
//Добавление пробелов справа
function padRight ($string, $length) {
return mb_str_pad($string, $length, " ", STR_PAD_RIGHT);
}
//Добавление пробелов слева
function padLeft ($string, $length) {
return mb_str_pad($string, $length, " ", STR_PAD_LEFT);
}
//Ширина колонок
$col1 = 15;
$col2 = 5;
$col3 = 8;
$col4 = 8;
$col5 = 10;
//Заголовок таблицы
echo padRight("Сотрудник", $col1) .
padLeft("Часы", $col2) .
padLeft("Овертайм", $col5) .
padLeft("Ставка", $col3) .
padLeft("З/п", $col4) . "\n";
$allEmployeesNormalHours = 0;
$allEmployeesOvertimeHours = 0;
$allEmployeesSalary = 0;
//Таблица
foreach ($employees as $employee) {
$allEmployeesNormalHours += $employee->getNormalHours();
$allEmployeesOvertimeHours += $employee->getOvertimeHours();
$allEmployeesSalary += $employee->getSalary();
echo padRight($employee->name, $col1) .
padLeft($employee->getNormalHours(), $col2) .
padLeft($employee->getOvertimeHours(), $col5) .
padLeft($employee->rate, $col3) .
padLeft($employee->getSalary(), $col4) . "\n";
}
//Вывод рабочего времени и зарплаты всех сотрудников
echo padRight("Всего", $col1) .
padLeft($allEmployeesNormalHours, $col2) .
padLeft($allEmployeesOvertimeHours, $col5) .
padLeft("", $col3) .
padLeft($allEmployeesSalary, $col4) . "\n";
?>
PD9waHAKLy8gYXJjaGl2ZS1pcHEtY28ubmFyb2QucnUKZXJyb3JfcmVwb3J0aW5nKC0xKTsKbWJfaW50ZXJuYWxfZW5jb2RpbmcoJ3V0Zi04Jyk7CiAKY2xhc3MgRW1wbG95ZWUgICAgICAgICAgICAgCnsKICAgIHB1YmxpYyAkbmFtZTsgICAgICAgICAgICAgICAvLyDQuNC80Y8t0YTQsNC80LjQu9C40Y8KICAgIHB1YmxpYyAkcmF0ZTsgICAgICAgICAgICAgICAvLyDRh9Cw0YHQvtCy0LDRjyDRgdGC0LDQstC60LAgKNGB0LrQvtC70YzQutC+INC+0L0g0L/QvtC70YPRh9Cw0LXRgiDRgtGD0LPRgNC40LrQvtCyINC30LAg0YfQsNGBINGA0LDQsdC+0YLRiykKICAgIHB1YmxpYyAkaG91cnMgPSBhcnJheSgpOyAgICAvLyDQvNCw0YHRgdC40LIsINGB0L7QtNC10YDQttCw0YnQuNC5INC+0YLRgNCw0LHQvtGC0LDQvdC90YvQtSDRh9Cw0YHRiyDQv9C+INC90LXQtNC10LvRj9C8CiAKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbmFtZSwgJHJhdGUpCiAgICB7CiAgICAgICAgLy8g0LfQsNC00LDQtdC8INC40LzRjyDQuCDRh9Cw0YHQvtCy0YPRjiDRgdGC0LDQstC60YMKICAgICAgICAkdGhpcy0+bmFtZSA9ICRuYW1lOwogICAgICAgICR0aGlzLT5yYXRlID0gJHJhdGU7CiAgICB9CiAKICAgIC8v0KHRh9C40YLQsNC10YIg0L7QsdGJ0LXQtSDRh9C40YHQu9C+INC+0YLRgNCw0LHQvtGC0LDQvdC90YvRhSDRh9Cw0YHQvtCyCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VG90YWxIb3Vyc1dvcmtlZCgpCiAgICB7CiAgICAgICAgLy8g0J/RgNC+0YHRgtC+INGB0LrQu9Cw0LTRi9Cy0LDQtdC8INC30L3QsNGH0LXQvdC40Y8g0YfQsNGB0L7QsiDQsiDQvNCw0YHRgdC40LLQtQogICAgICAgIHJldHVybiBhcnJheV9zdW0oJHRoaXMtPmhvdXJzKTsKICAgIH0KIAogICAgLy/QodGH0LjRgtCw0LXRgiDQvtCy0LXRgNGC0LDQudC8CiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0T3ZlcnRpbWVIb3VycygpCiAgICB7CiAgICAgICAgJG92ZXJ0aW1lSG91cnMgPSAwOwogICAgICAgIGZvcmVhY2goJHRoaXMtPmhvdXJzIGFzICR3ZWVrbHlIb3VycykgewogICAgICAgICAgICAkb3ZlcnRpbWVIb3VycyArPSAoJHdlZWtseUhvdXJzID4gNDApID8gJHdlZWtseUhvdXJzIC0gNDAgOiAwOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJG92ZXJ0aW1lSG91cnM7CiAgICB9CiAKICAgIC8v0KHRh9C40YLQsNC10YIg0LrQvtC70LjRh9C10YHRgtCy0L4g0L7RgtGA0LDQsdC+0YLQsNC90L3Ri9GFINC/0L4g0LPRgNCw0YTQuNC60YMg0YfQsNGB0L7QsgogICAgcHVibGljIGZ1bmN0aW9uIGdldE5vcm1hbEhvdXJzKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldFRvdGFsSG91cnNXb3JrZWQoKSAtICR0aGlzLT5nZXRPdmVydGltZUhvdXJzKCk7CiAgICB9CiAKICAgIC8v0KHRh9C40YLQsNC10YIg0LfQsNGA0L/Qu9Cw0YLRgwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNhbGFyeSgpCiAgICB7CiAgICAgICAgLyoqIC8vINCf0L7Qu9GD0YfQsNC10Lwg0YfQuNGB0LvQviDQvdC+0YDQvNCw0LvRjNC90L4g0L7RgtGA0LDQsdC+0YLQsNC90L3Ri9GFINGH0LDRgdC+0LIg0Lgg0L7QstC10YDRgtCw0LnQvAogICAgICAgICRub3JtYWxIb3VycyA9ICR0aGlzLT5nZXROb3JtYWxIb3VycygpOwogICAgICAgICRvdmVydGltZUhvdXJzID0gJHRoaXMtPmdldE92ZXJ0aW1lSG91cnMoKTsKICAgICAgICAvLyDQuCDRg9C80L3QvtC20LDQtdC8INC90LAg0YfQsNGB0L7QstGD0Y4g0YHRgtCw0LLQutGDCiAgICAgICAgJHNhbGFyeSA9ICRub3JtYWxIb3VycyAqICR0aGlzLT5yYXRlICsgJG92ZXJ0aW1lSG91cnMgKiAyICogJHRoaXMtPnJhdGU7CiAgICAgICAgcmV0dXJuICRzYWxhcnk7ICovCiAKICAgICAgICByZXR1cm4gKCR0aGlzLT5nZXROb3JtYWxIb3VycygpICsgMiAqICR0aGlzLT5nZXRPdmVydGltZUhvdXJzKCkpICogJHRoaXMtPnJhdGU7CiAgICB9Cn0KIAogCiRpdmFuID0gbmV3IEVtcGxveWVlKCLQmNCy0LDQvdC+0LIg0JjQstCw0L0iLCAxMCk7Ci8vIG5hbWUg0LggcmF0ZSDQt9Cw0LTQsNC90Ysg0YfQtdGA0LXQtyDQutC+0L3RgdGC0YDRg9C60YLQvtGALCDQv9C+0YLQvtC80YMg0L7RgdGC0LDQu9C+0YHRjCDQu9C40YjRjCDQvdCw0L/QuNGB0LDRgtGMINGH0LDRgdGLCiRpdmFuLT5ob3VycyA9IGFycmF5KDQwLCA0MCwgNDAsIDQwKTsgICAvLyDQmNCy0LDQvSDRgNCw0LHQvtGC0LDQtdGCINC/0L4gNDAg0YfQsNGB0L7QsiDQsiDQvdC10LTQtdC70Y4KIAokcGV0ZXIgPSBuZXcgRW1wbG95ZWUoItCf0LXRgtGA0L7QsiDQn9C10YLRgCIsIDgpOwokcGV0ZXItPmhvdXJzID0gYXJyYXkoNDAsIDEwLCA1MCwgNTApOyAgLy8g0J/QtdGC0YAg0LLQt9GP0Lsg0L7RgtCz0YPQuyDQuCDQv9C+0YLQvtC80YMg0L7RgtGA0LDQsdC+0YLQsNC7INC80LXQvdGM0YjQtSDRh9Cw0YHQvtCyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vINC90L4g0LIgINC/0L7RgdC70LXQtNC90LjQtSAyINC90LXQtNC10LvQuCDRgNC10YjQuNC7INC/0L7RgNCw0LHQvtGC0LDRgtGMINC/0L7QsdC+0LvRjNGI0LUKCiRyZCA9IG5ldyBFbXBsb3llZSgiUmFpbmJvdyBEYXNoIiwgMjApIDsKJHJkLT5ob3VycyA9IGFycmF5KDYwLCA2MCwgNjAsIDYwKTsKCiRlbXBsb3llZXMgPSBhcnJheSgkaXZhbiwgJHBldGVyLCAkcmQpOwogCi8vc3RyX3BhZCDQtNC70Y8g0LzQvdC+0LPQvtCx0LDQudGC0L7QstGL0YUg0YHRgtGA0L7QugpmdW5jdGlvbiBtYl9zdHJfcGFkICgkaW5wdXQsICRwYWRfbGVuZ3RoLCAkcGFkX3N0cmluZywgJHBhZF9zdHlsZSwgJGVuY29kaW5nPSJVVEYtOCIpIHsgCiAgIHJldHVybiBzdHJfcGFkKCRpbnB1dCwgc3RybGVuKCRpbnB1dCktbWJfc3RybGVuKCRpbnB1dCwkZW5jb2RpbmcpKyRwYWRfbGVuZ3RoLCAkcGFkX3N0cmluZywgJHBhZF9zdHlsZSk7IAp9CiAKLy/QlNC+0LHQsNCy0LvQtdC90LjQtSDQv9GA0L7QsdC10LvQvtCyINGB0L/RgNCw0LLQsApmdW5jdGlvbiBwYWRSaWdodCAoJHN0cmluZywgJGxlbmd0aCkgewogICAgcmV0dXJuIG1iX3N0cl9wYWQoJHN0cmluZywgJGxlbmd0aCwgIiAiLCBTVFJfUEFEX1JJR0hUKTsKfQogCi8v0JTQvtCx0LDQstC70LXQvdC40LUg0L/RgNC+0LHQtdC70L7QsiDRgdC70LXQstCwCmZ1bmN0aW9uIHBhZExlZnQgKCRzdHJpbmcsICRsZW5ndGgpIHsKICAgIHJldHVybiBtYl9zdHJfcGFkKCRzdHJpbmcsICRsZW5ndGgsICIgIiwgU1RSX1BBRF9MRUZUKTsKfQogCi8v0KjQuNGA0LjQvdCwINC60L7Qu9C+0L3QvtC6CiRjb2wxID0gMTU7CiRjb2wyID0gNTsKJGNvbDMgPSA4OwokY29sNCA9IDg7CiRjb2w1ID0gMTA7CiAKLy/Ql9Cw0LPQvtC70L7QstC+0Log0YLQsNCx0LvQuNGG0YsKZWNobyBwYWRSaWdodCgi0KHQvtGC0YDRg9C00L3QuNC6IiwgJGNvbDEpIC4gCiAgICAgcGFkTGVmdCgi0KfQsNGB0YsiLCAkY29sMikgLiAKICAgICBwYWRMZWZ0KCLQntCy0LXRgNGC0LDQudC8IiwgJGNvbDUpIC4gCiAgICAgcGFkTGVmdCgi0KHRgtCw0LLQutCwIiwgJGNvbDMpIC4gCiAgICAgcGFkTGVmdCgi0Jcv0L8iLCAkY29sNCkgLiAiXG4iOwoKJGFsbEVtcGxveWVlc05vcm1hbEhvdXJzID0gMDsKJGFsbEVtcGxveWVlc092ZXJ0aW1lSG91cnMgPSAwOwokYWxsRW1wbG95ZWVzU2FsYXJ5ID0gMDsKCi8v0KLQsNCx0LvQuNGG0LAKZm9yZWFjaCAoJGVtcGxveWVlcyBhcyAkZW1wbG95ZWUpIHsKICAgICRhbGxFbXBsb3llZXNOb3JtYWxIb3VycyArPSAkZW1wbG95ZWUtPmdldE5vcm1hbEhvdXJzKCk7CiAgICAkYWxsRW1wbG95ZWVzT3ZlcnRpbWVIb3VycyArPSAkZW1wbG95ZWUtPmdldE92ZXJ0aW1lSG91cnMoKTsKICAgICRhbGxFbXBsb3llZXNTYWxhcnkgKz0gJGVtcGxveWVlLT5nZXRTYWxhcnkoKTsKICAgIGVjaG8gcGFkUmlnaHQoJGVtcGxveWVlLT5uYW1lLCAkY29sMSkgLgogICAgICAgICBwYWRMZWZ0KCRlbXBsb3llZS0+Z2V0Tm9ybWFsSG91cnMoKSwgJGNvbDIpIC4gCiAgICAgICAgIHBhZExlZnQoJGVtcGxveWVlLT5nZXRPdmVydGltZUhvdXJzKCksICRjb2w1KSAuCiAgICAgICAgIHBhZExlZnQoJGVtcGxveWVlLT5yYXRlLCAkY29sMykgLiAKICAgICAgICAgcGFkTGVmdCgkZW1wbG95ZWUtPmdldFNhbGFyeSgpLCAkY29sNCkgLiAiXG4iOwogICAgIH0KICAgICAKLy/QktGL0LLQvtC0INGA0LDQsdC+0YfQtdCz0L4g0LLRgNC10LzQtdC90Lgg0Lgg0LfQsNGA0L/Qu9Cw0YLRiyDQstGB0LXRhSDRgdC+0YLRgNGD0LTQvdC40LrQvtCyCiAgICBlY2hvIHBhZFJpZ2h0KCLQktGB0LXQs9C+IiwgJGNvbDEpIC4gCiAgICAgICAgIHBhZExlZnQoJGFsbEVtcGxveWVlc05vcm1hbEhvdXJzLCAkY29sMikgLiAKICAgICAgICAgcGFkTGVmdCgkYWxsRW1wbG95ZWVzT3ZlcnRpbWVIb3VycywgJGNvbDUpIC4gCiAgICAgICAgIHBhZExlZnQoIiIsICRjb2wzKSAuCiAgICAgICAgIHBhZExlZnQoJGFsbEVtcGxveWVlc1NhbGFyeSwgJGNvbDQpIC4gIlxuIjsKPz4=