<?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()
{
$total = 0;
foreach ($this->hours as $hours) {
if ($hours > 40) {
$total += 40;
} else {
$total += $hours;
}
}
return $total;
}
// Считаем количество часов оплачиваемых по двойному тарифу
public function getOverTimeHours()
{
$total = 0;
foreach ($this->hours as $hours) {
if ($hours > 40) {
$total += $hours - 40;
}
}
return $total;
}
/** Считает зарплату */
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)
{
if ($spaces >= 0) {
for ($i = 0; $i < $spaces; ++$i) {
$string .= ' ';
}
return $string;
} else {
return mb_substr($string, 0, $length - 1) . '.'; }
}
function padLeft($string, $length)
{
if ($spaces >= 0) {
for ($i = 0; $i < $spaces; ++$i) {
}
return $string;
} else {
return mb_substr($string, 0, $length - 1) . '.'; }
}
// Ширина колонок
$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+0LHRi9GH0L3QvtC80YMg0YLQsNGA0LjRhNGDCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9ybWFsSG91cnMoKQogICAgewogICAgICAgICR0b3RhbCA9IDA7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmhvdXJzIGFzICRob3VycykgewogICAgICAgICAgICBpZiAoJGhvdXJzID4gNDApIHsKICAgICAgICAgICAgICAgICR0b3RhbCArPSA0MDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0b3RhbCArPSAkaG91cnM7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICR0b3RhbDsKICAgIH0KCiAgICAvLyDQodGH0LjRgtCw0LXQvCDQutC+0LvQuNGH0LXRgdGC0LLQviDRh9Cw0YHQvtCyINC+0L/Qu9Cw0YfQuNCy0LDQtdC80YvRhSDQv9C+INC00LLQvtC50L3QvtC80YMg0YLQsNGA0LjRhNGDCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0T3ZlclRpbWVIb3VycygpCiAgICB7CiAgICAgICAgJHRvdGFsID0gMDsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+aG91cnMgYXMgJGhvdXJzKSB7CiAgICAgICAgICAgIGlmICgkaG91cnMgPiA0MCkgewogICAgICAgICAgICAgICAgJHRvdGFsICs9ICRob3VycyAtIDQwOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkdG90YWw7CiAgICB9CgogICAgLyoqINCh0YfQuNGC0LDQtdGCINC30LDRgNC/0LvQsNGC0YMgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTYWxhcnkoKQogICAgewogICAgICAgIC8vINCf0L7Qu9GD0YfQsNC10Lwg0YfQuNGB0LvQviDQvtGC0YDQsNCx0L7RgtCw0L3QvdGL0YUg0YfQsNGB0L7QsgogICAgICAgICRob3VycyA9ICR0aGlzLT5nZXROb3JtYWxIb3VycygpOwogICAgICAgIC8vINC4INGD0LzQvdC+0LbQsNC10Lwg0L3QsCDRh9Cw0YHQvtCy0YPRjiDRgdGC0LDQstC60YMKICAgICAgICAkc2FsYXJ5ID0gJGhvdXJzICogJHRoaXMtPnJhdGU7CiAgICAgICAgLy/QodGH0LjRgtCw0LXQvCDQv9C+INC00LLQvtC50L3QvtC80YMg0YLQsNGA0LjRhNGDINC30LAg0L/QtdGA0LXRgNCw0LHQvtGC0LrRgwogICAgICAgICRob3VycyA9ICR0aGlzLT5nZXRPdmVyVGltZUhvdXJzKCk7CiAgICAgICAgJHNhbGFyeSArPSAkaG91cnMgKiAkdGhpcy0+cmF0ZSoyOwogICAgICAgIHJldHVybiAkc2FsYXJ5OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaG9ydE5hbWUoKQogICAgewogICAgICAgIHJldHVybiBwcmVnX3JlcGxhY2UoJy8oXHcrIFx3KS4rL3UnLCAnJDEuJywgJHRoaXMtPm5hbWUpOwogICAgfQp9CgokaXZhbiA9IG5ldyBFbXBsb3llZSgn0JjQstCw0L3QvtCyINCY0LLQsNC9JywgMTApOwokaXZhbi0+aG91cnMgPSBhcnJheSg0MCwgNDAsIDQwLCA0MCk7IC8vINCY0LLQsNC9INGA0LDQsdC+0YLQsNC10YIg0L/QviA0MCDRh9Cw0YHQvtCyINCyINC90LXQtNC10LvRjgoKJHBldGVyID0gbmV3IEVtcGxveWVlKCfQn9C10YLRgNC+0LIg0J/QtdGC0YAnLCA4KTsKJHBldGVyLT5ob3VycyA9IGFycmF5KDQwLCAxMCwgNDAsIDUwKTsgLy8g0J/QtdGC0YAg0LLQt9GP0Lsg0L7RgtCz0YPQuyDQuCDQv9C+0YLQvtC80YMg0L7RgtGA0LDQsdC+0YLQsNC7INC80LXQvdGM0YjQtSDRh9Cw0YHQvtCyLAovLyDQvdC+INCyICDQv9C+0YHQu9C10LTQvdGO0Y4g0L3QtdC00LXQu9GOINGA0LXRiNC40Lsg0L/QvtGA0LDQsdC+0YLQsNGC0Ywg0L/QvtCx0L7Qu9GM0YjQtQoKJGVtcGxveWVlcyA9IGFycmF5KCRpdmFuLCAkcGV0ZXIpOwoKLy/RgtC10L/QtdGA0Ywg0L/QvtC/0YDQvtCx0YPQtdC8INC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvNC10YLQvtC00Ysg0LTQu9GPINCy0YvQstC+0LTQsCDQv9C+0LvQtdC30L3QvtC5INC40L3RhNC+0YDQvNCw0YbQuNC4OgoKZnVuY3Rpb24gcGFkUmlnaHQoJHN0cmluZywgJGxlbmd0aCkKewogICAgJHNwYWNlcyA9ICRsZW5ndGggLSBtYl9zdHJsZW4oJHN0cmluZyk7CiAgICBpZiAoJHNwYWNlcyA+PSAwKSB7CiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJHNwYWNlczsgKyskaSkgewogICAgICAgICAgICAkc3RyaW5nIC49ICcgJzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRzdHJpbmc7CiAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBtYl9zdWJzdHIoJHN0cmluZywgMCwgJGxlbmd0aCAtIDEpIC4gJy4nOwogICAgfQp9CgpmdW5jdGlvbiBwYWRMZWZ0KCRzdHJpbmcsICRsZW5ndGgpCnsKICAgICRzcGFjZXMgPSAkbGVuZ3RoIC0gbWJfc3RybGVuKCRzdHJpbmcpOwogICAgaWYgKCRzcGFjZXMgPj0gMCkgewogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRzcGFjZXM7ICsrJGkpIHsKICAgICAgICAgICAgJHN0cmluZyA9IHByZWdfcmVwbGFjZSgnL14vJywgJyAnLCAkc3RyaW5nKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRzdHJpbmc7CiAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBtYl9zdWJzdHIoJHN0cmluZywgMCwgJGxlbmd0aCAtIDEpIC4gJy4nOwogICAgfQp9CgovLyDQqNC40YDQuNC90LAg0LrQvtC70L7QvdC+0LoKJGNvbDEgPSAzMDsKJGNvbDIgPSA4OwokY29sMyA9IDEwOwokY29sNCA9IDg7CiRjb2w1ID0gODsKCi8vINCX0LDQs9C+0LvQvtCy0L7QuiDRgtCw0LHQu9C40YbRiwplY2hvIHBhZFJpZ2h0KCLQodC+0YLRgNGD0LTQvdC40LoiLCAkY29sMSkgLgogICAgcGFkTGVmdCgi0KfQsNGB0YsiLCAkY29sMikgLgogICAgcGFkTGVmdCgi0J7QstC10YDRgtCw0LnQvCIsICRjb2wzKSAuCiAgICBwYWRMZWZ0KCLQodGC0LDQstC60LAiLCAkY29sNCkgLgogICAgcGFkTGVmdCgi0Jcv0L8iLCAkY29sNSkgLiAiXG5cbiI7CgokdG90YWxIb3VycyA9IDA7CiR0b3RhbFNhbGFyeSA9IDA7CiR0b3RhbE92ZXJ0aW1lID0gMDsKLy8g0KHQsNC80LAg0YLQsNCx0LvQuNGG0LAKZm9yZWFjaCAoJGVtcGxveWVlcyBhcyAkZW1wbG95ZWUpIHsKICAgIGVjaG8gcGFkUmlnaHQoJGVtcGxveWVlLT5nZXRTaG9ydE5hbWUoKSwgJGNvbDEpIC4KICAgICAgICBwYWRMZWZ0KCRlbXBsb3llZS0+Z2V0VG90YWxIb3Vyc1dvcmtlZCgpLCAkY29sMikgLgogICAgICAgIHBhZExlZnQoJGVtcGxveWVlLT5nZXRPdmVyVGltZUhvdXJzKCksICRjb2wzKSAuCiAgICAgICAgcGFkTGVmdCgkZW1wbG95ZWUtPnJhdGUsICRjb2w0KSAuCiAgICAgICAgcGFkTGVmdCgkZW1wbG95ZWUtPmdldFNhbGFyeSgpLCAkY29sNSkgLiAiXG4iOwogICAgJHRvdGFsSG91cnMgKz0gJGVtcGxveWVlLT5nZXRUb3RhbEhvdXJzV29ya2VkKCk7CiAgICAkdG90YWxTYWxhcnkgKz0gJGVtcGxveWVlLT5nZXRTYWxhcnkoKTsKICAgICR0b3RhbE92ZXJ0aW1lICs9ICRlbXBsb3llZS0+Z2V0T3ZlclRpbWVIb3VycygpOwp9CgplY2hvIHBhZFJpZ2h0KCfQktGB0LXQs9C+JywgJGNvbDEpIC4KICAgIHBhZExlZnQoJHRvdGFsSG91cnMsICRjb2wyKSAuCiAgICBwYWRMZWZ0KCR0b3RhbE92ZXJ0aW1lLCAkY29sMykgLgogICAgcGFkTGVmdCgnJywgJGNvbDQpIC4KICAgIHBhZExlZnQoJHRvdGFsU2FsYXJ5LCAkY29sNSk7