<?php
class Employee
{
public $name;
public $rate;
public $hours = array(); //hours worked in a week
public function __construct($name, $rate)
{
$this->name = $name;
$this->rate = $rate;
}
public function getTotalHoursWorked()
{
}
public function getNormalHours()
{
$normalHours = 0;
foreach ($this->hours as $weekHours) {
if ($weekHours <= 40) {
$normalHours += $weekHours;
} else {
$normalHours += 40;
}
}
return $normalHours;
}
public function getOvertimeHours()
{
$overtimeHours = $this->getTotalHoursWorked() - $this->getNormalHours();
return $overtimeHours;
}
public function getSalary()
{
$normalHours = $this->getNormalHours();
$overtimeHours = $this->getOvertimeHours();
$salary = $normalHours * $this->rate;
$salary += $overtimeHours * $this->rate*2;
return $salary;
}
public function getShortName()
{
$shortName = preg_replace("/([а-яёА-ЯЁ]+\s[а-яёА-ЯЁ])[а-яёА-ЯЁ]+/ui", '$1.', $this->name); return $shortName;
}
}
$ivan = new Employee("Иванов Иван", 10);
$ivan->hours = array(40, 40, 40, 40);
$petr = new Employee("Петров Петр", 8);
$petr->hours = array(40, 10, 40, 50);
$employees = array($ivan, $petr);
$col1 = 20;
$col2 = 8;
$col3 = 8;
$col4 = 8;
$col5 = 8;
function padRight($string, $length)
{
return $string;
}
function padLeft($string, $length)
{
return $string;
}
$totalHours = 0;
$totalOvertimeHours = 0;
$totalSalary = 0;
//header
echo padRight("Сотрудник", $col1) .
padLeft("Часы", $col2) .
padLeft("Овертайм", $col3) .
padLeft("Ставка", $col4) .
padLeft("З/п", $col5) . "\n\n";
//table
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();
$totalOvertimeHours += $employee->getOvertimeHours();
$totalSalary += $employee->getSalary();
}
//footer
echo padRight("Всего", $col1) .
padLeft($totalHours, $col2) .
padLeft($totalOvertimeHours, $col3) .
padLeft(" ", $col4) .
padLeft($totalSalary, $col5) . "\n";
PD9waHAKCmVycm9yX3JlcG9ydGluZygtMSk7CgpjbGFzcyBFbXBsb3llZQp7CglwdWJsaWMgJG5hbWU7CglwdWJsaWMgJHJhdGU7CglwdWJsaWMgJGhvdXJzID0gYXJyYXkoKTsgLy9ob3VycyB3b3JrZWQgaW4gYSB3ZWVrCgkKCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbmFtZSwgJHJhdGUpCgl7CgkJJHRoaXMtPm5hbWUgPSAkbmFtZTsKCQkkdGhpcy0+cmF0ZSA9ICRyYXRlOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gZ2V0VG90YWxIb3Vyc1dvcmtlZCgpCgl7CgkJcmV0dXJuIGFycmF5X3N1bSgkdGhpcy0+aG91cnMpOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9ybWFsSG91cnMoKQoJewoJCSRub3JtYWxIb3VycyA9IDA7CgkJCgkJZm9yZWFjaCAoJHRoaXMtPmhvdXJzIGFzICR3ZWVrSG91cnMpIHsKCQkJaWYgKCR3ZWVrSG91cnMgPD0gNDApIHsKCQkJCSRub3JtYWxIb3VycyArPSAkd2Vla0hvdXJzOwoJCQl9IGVsc2UgewoJCQkJJG5vcm1hbEhvdXJzICs9IDQwOwoJCQl9CgkJfQoJCXJldHVybiAkbm9ybWFsSG91cnM7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBnZXRPdmVydGltZUhvdXJzKCkKCXsKCQkkb3ZlcnRpbWVIb3VycyA9ICR0aGlzLT5nZXRUb3RhbEhvdXJzV29ya2VkKCkgLSAkdGhpcy0+Z2V0Tm9ybWFsSG91cnMoKTsKCQlyZXR1cm4gJG92ZXJ0aW1lSG91cnM7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBnZXRTYWxhcnkoKQoJewoJCSRub3JtYWxIb3VycyA9ICR0aGlzLT5nZXROb3JtYWxIb3VycygpOwoJCSRvdmVydGltZUhvdXJzID0gJHRoaXMtPmdldE92ZXJ0aW1lSG91cnMoKTsKCQkkc2FsYXJ5ID0gJG5vcm1hbEhvdXJzICogJHRoaXMtPnJhdGU7CgkJJHNhbGFyeSArPSAkb3ZlcnRpbWVIb3VycyAqICR0aGlzLT5yYXRlKjI7CgkJcmV0dXJuICRzYWxhcnk7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBnZXRTaG9ydE5hbWUoKQoJewoJCSRzaG9ydE5hbWUgPSBwcmVnX3JlcGxhY2UoIi8oW9CwLdGP0ZHQkC3Qr9CBXStcc1vQsC3Rj9GR0JAt0K/QgV0pW9CwLdGP0ZHQkC3Qr9CBXSsvdWkiLCAnJDEuJywgJHRoaXMtPm5hbWUpOwoJCXJldHVybiAkc2hvcnROYW1lOwoJfQp9CgokaXZhbiA9IG5ldyBFbXBsb3llZSgi0JjQstCw0L3QvtCyINCY0LLQsNC9IiwgMTApOwokaXZhbi0+aG91cnMgPSBhcnJheSg0MCwgNDAsIDQwLCA0MCk7CgokcGV0ciA9IG5ldyBFbXBsb3llZSgi0J/QtdGC0YDQvtCyINCf0LXRgtGAIiwgOCk7CiRwZXRyLT5ob3VycyA9IGFycmF5KDQwLCAxMCwgNDAsIDUwKTsKCiRlbXBsb3llZXMgPSBhcnJheSgkaXZhbiwgJHBldHIpOwoKJGNvbDEgPSAyMDsKJGNvbDIgPSA4OwokY29sMyA9IDg7CiRjb2w0ID0gODsKJGNvbDUgPSA4OwoKZnVuY3Rpb24gcGFkUmlnaHQoJHN0cmluZywgJGxlbmd0aCkKewoJJHBhZGRpbmcgPSAkbGVuZ3RoIC0gbWJfc3RybGVuKCRzdHJpbmcpOwoJJHN0cmluZyAuPSBzdHJfcmVwZWF0KCIgIiwgJHBhZGRpbmcpOwoJcmV0dXJuICRzdHJpbmc7Cn0KCmZ1bmN0aW9uIHBhZExlZnQoJHN0cmluZywgJGxlbmd0aCkgCnsKCSRwYWRkaW5nID0gJGxlbmd0aCAtIG1iX3N0cmxlbigkc3RyaW5nKSsyOwoJJHN0cmluZyA9IHN0cl9yZXBlYXQoIiAiLCAkcGFkZGluZykgLiAkc3RyaW5nOwoJcmV0dXJuICRzdHJpbmc7Cn0KCiR0b3RhbEhvdXJzID0gMDsKJHRvdGFsT3ZlcnRpbWVIb3VycyA9IDA7CiR0b3RhbFNhbGFyeSA9IDA7CgkKLy9oZWFkZXIKZWNobyBwYWRSaWdodCgi0KHQvtGC0YDRg9C00L3QuNC6IiwgJGNvbDEpIC4gCnBhZExlZnQoItCn0LDRgdGLIiwgJGNvbDIpIC4gCnBhZExlZnQoItCe0LLQtdGA0YLQsNC50LwiLCAkY29sMykgLiAKcGFkTGVmdCgi0KHRgtCw0LLQutCwIiwgJGNvbDQpIC4gCnBhZExlZnQoItCXL9C/IiwgJGNvbDUpIC4gIlxuXG4iOwoKLy90YWJsZQpmb3JlYWNoICgkZW1wbG95ZWVzIGFzICRlbXBsb3llZSkgewoJZWNobyBwYWRSaWdodCgkZW1wbG95ZWUtPmdldFNob3J0TmFtZSgpLCAkY29sMSkgLiAKCXBhZExlZnQoJGVtcGxveWVlLT5nZXRUb3RhbEhvdXJzV29ya2VkKCksICRjb2wyKSAuIAoJcGFkTGVmdCgkZW1wbG95ZWUtPmdldE92ZXJ0aW1lSG91cnMoKSwgJGNvbDMpIC4KCXBhZExlZnQoJGVtcGxveWVlLT5yYXRlLCAkY29sNCkgLiAKCXBhZExlZnQoJGVtcGxveWVlLT5nZXRTYWxhcnkoKSwgJGNvbDUpIC4gIlxuIjsKCSR0b3RhbEhvdXJzICs9ICRlbXBsb3llZS0+Z2V0VG90YWxIb3Vyc1dvcmtlZCgpOwoJJHRvdGFsT3ZlcnRpbWVIb3VycyArPSAkZW1wbG95ZWUtPmdldE92ZXJ0aW1lSG91cnMoKTsKCSR0b3RhbFNhbGFyeSArPSAkZW1wbG95ZWUtPmdldFNhbGFyeSgpOwp9CgovL2Zvb3RlciAKZWNobyBwYWRSaWdodCgi0JLRgdC10LPQviIsICRjb2wxKSAuIApwYWRMZWZ0KCR0b3RhbEhvdXJzLCAkY29sMikgLiAKcGFkTGVmdCgkdG90YWxPdmVydGltZUhvdXJzLCAkY29sMykgLiAKcGFkTGVmdCgiICIsICRjb2w0KSAuIApwYWRMZWZ0KCR0b3RhbFNhbGFyeSwgJGNvbDUpIC4gIlxuIjsKCg==