<pre>
<?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 getSalary( )
{
$hours = ( $this -> getNormalHours ( ) * $this -> rate ) + ( $this -> getOvertimeHours ( ) * $this -> rate * 2 ) ;
return $hours ;
}
/** Укорачиваем имя */
public function getShortName( )
{
//заменяем подное имя на укороченное
return preg_replace ( "/^([а-яё]+)\\ s+([а-яё])[а-яё]+/ui" , '$1 $2.' , $this -> name ) ; }
/** Подсчитываем стандартные трудочасы */
public function getNormalHours( )
{
foreach ( $this -> hours as $hour ) {
if ( $hour <= 40 ) {
$hours += $hour ;
} else {
$hours += 40 ; // Если часов за неделю больше - добавляет только часы без переработок
}
}
return $hours ;
}
/** Подсчитываем часы переработки */
public function getOvertimeHours( )
{
$hours = 0 ;
foreach ( $this -> hours as $hour ) {
if ( $hour > 40 ) {
$hours += $hour - 40 ; //вычитаем обычные трудочасы
}
}
return $hours ;
}
}
$ivan = new Employee( "Иванов Иван" , 10 ) ;
// name и rate заданы через конструктор, потому осталось лишь написать часы
$ivan -> hours = array ( 40 , 40 , 40 , 40 ) ; // Иван работает по 40 часов в неделю
$peter = new Employee( "Петров Петр" , 8 ) ;
$peter -> hours = array ( 40 , 10 , 40 , 50 ) ; // Петр взял отгул и потому отработал меньше часов, // но в последнюю неделю решил поработать побольше
$op = new Employee( "Оп Опович" , 1000 ) ;
$op -> hours = array ( 50 , 60 , 55 , 40 ) ; $employees = array ( $ivan , $peter , $op ) ;
function padLeft( $string , $length ) {
//объявляем переменную для пустого пространства
$space = "" ;
for ( ; $stringLen < $length ; $stringLen ++ ) {
$space .= " " ;
}
echo "$space $string " ;
}
function padRight( $string , $length ) {
//объявляем переменную для пустого пространства
$space = "" ;
for ( ; $stringLen < $length ; $stringLen ++ ) {
$space .= " " ;
}
echo "$string $space " ;
}
// Ширина колонок
$col1 = 30 ;
$col2 = 8 ;
$col3 = 8 ;
$col4 = 8 ;
$col5 = 8 ; // колонка для овертайма
// Заголовок таблицы
echo padRight( "Сотрудник" , $col1 ) .
padLeft( "Часы" , $col2 ) .
padLeft( " Овертайм" , $col5 ) .
padLeft( "Ставка" , $col3 ) .
padLeft( "З/п" , $col4 ) . "\n \n " ;
// Сама таблица
foreach ( $employees as $employee ) {
echo padRight( $employee -> getShortName ( ) , $col1 ) .
padLeft( $employee -> getTotalHoursWorked ( ) , $col2 ) .
padLeft( $employee -> getOvertimeHours ( ) , $col5 ) .
padLeft( $employee -> rate , $col3 ) .
padLeft( $employee -> getSalary ( ) , $col4 ) . "\n " ;
}
// Подсчет вывода !!! сюда дописать овертайм
foreach ( $employees as $employee ) {
$hoursSum += $employee -> getTotalHoursWorked ( ) ;
$overTimeSum += $employee -> getOvertimeHours ( ) ;
$salarySum += $employee -> getSalary ( ) ;
}
//выписываем вывод !!! сюда дописать овертайм
echo padRight( "Всего" , $col1 ) .
padLeft( $hoursSum , $col2 ) .
padLeft( $overTimeSum , $col5 ) .
padLeft( " " , $col3 ) .
padLeft( $salarySum , $col4 ) ;
?>
</pre>
PHByZT4KPD9waHAKIAovLyBhcmNoaXZlLWlwcS1jby5uYXJvZC5ydQplcnJvcl9yZXBvcnRpbmcoLTEpOwogCmNsYXNzIEVtcGxveWVlICAgICAgICAgICAgIAp7CiAgICBwdWJsaWMgJG5hbWU7ICAgICAgICAgICAgICAgLy8g0LjQvNGPLdGE0LDQvNC40LvQuNGPCiAgICBwdWJsaWMgJHJhdGU7ICAgICAgICAgICAgICAgLy8g0YfQsNGB0L7QstCw0Y8g0YHRgtCw0LLQutCwICjRgdC60L7Qu9GM0LrQviDQvtC9INC/0L7Qu9GD0YfQsNC10YIg0YLRg9Cz0YDQuNC60L7QsiDQt9CwINGH0LDRgSDRgNCw0LHQvtGC0YspCiAgICBwdWJsaWMgJGhvdXJzID0gYXJyYXkoKTsgICAgLy8g0LzQsNGB0YHQuNCyLCDRgdC+0LTQtdGA0LbQsNGJ0LjQuSDQvtGC0YDQsNCx0L7RgtCw0L3QvdGL0LUg0YfQsNGB0Ysg0L/QviDQvdC10LTQtdC70Y/QvAogCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG5hbWUsICRyYXRlKQogICAgewogICAgICAgIC8vINC30LDQtNCw0LXQvCDQuNC80Y8g0Lgg0YfQsNGB0L7QstGD0Y4g0YHRgtCw0LLQutGDCiAgICAgICAgJHRoaXMtPm5hbWUgPSAkbmFtZTsKICAgICAgICAkdGhpcy0+cmF0ZSA9ICRyYXRlOwogICAgfQogCiAgICAvKiog0KHRh9C40YLQsNC10Lwg0L7QsdGJ0LXQtSDRh9C40YHQu9C+INC+0YLRgNCw0LHQvtGC0LDQvdC90YvRhSDRh9Cw0YHQvtCyICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VG90YWxIb3Vyc1dvcmtlZCgpCiAgICB7CiAgICAgICAgLy8g0J/RgNC+0YHRgtC+INGB0LrQu9Cw0LTRi9Cy0LDQtdC8INC30L3QsNGH0LXQvdC40Y8g0YfQsNGB0L7QsiDQsiDQvNCw0YHRgdC40LLQtQogICAgICAgIHJldHVybiBhcnJheV9zdW0oJHRoaXMtPmhvdXJzKTsKICAgIH0KIAogICAgLyoqINCh0YfQuNGC0LDQtdC8INC30LDRgNC/0LvQsNGC0YMgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTYWxhcnkoKQogICAgewoJCSRob3VycyA9ICggJHRoaXMtPmdldE5vcm1hbEhvdXJzKCkgKiAkdGhpcy0+cmF0ZSApICsgKCAkdGhpcy0+Z2V0T3ZlcnRpbWVIb3VycygpICogJHRoaXMtPnJhdGUgKiAyICk7CgkJcmV0dXJuICRob3VyczsKICAgIH0KIAoJLyoqINCj0LrQvtGA0LDRh9C40LLQsNC10Lwg0LjQvNGPICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0U2hvcnROYW1lKCkKCXsKCQkvL9C30LDQvNC10L3Rj9C10Lwg0L/QvtC00L3QvtC1INC40LzRjyDQvdCwINGD0LrQvtGA0L7Rh9C10L3QvdC+0LUKCQlyZXR1cm4gcHJlZ19yZXBsYWNlKCIvXihb0LAt0Y/RkV0rKVxccysoW9CwLdGP0ZFdKVvQsC3Rj9GRXSsvdWkiLCAnJDEgJDIuJywgJHRoaXMtPm5hbWUpOwoJfQogCgkvKiog0J/QvtC00YHRh9C40YLRi9Cy0LDQtdC8INGB0YLQsNC90LTQsNGA0YLQvdGL0LUg0YLRgNGD0LTQvtGH0LDRgdGLICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9ybWFsSG91cnMoKQoJewoJCWZvcmVhY2goICR0aGlzLT5ob3VycyBhcyAkaG91ciApewoJCQlpZigkaG91ciA8PSA0MCl7CgkJCQkkaG91cnMgKz0gJGhvdXI7CgkJCX1lbHNlewoJCQkJJGhvdXJzICs9IDQwOwkJLy8g0JXRgdC70Lgg0YfQsNGB0L7QsiDQt9CwINC90LXQtNC10LvRjiDQsdC+0LvRjNGI0LUgLSDQtNC+0LHQsNCy0LvRj9C10YIg0YLQvtC70YzQutC+INGH0LDRgdGLINCx0LXQtyDQv9C10YDQtdGA0LDQsdC+0YLQvtC6CgkJCX0KCQl9CiAKCQlyZXR1cm4gJGhvdXJzOwoJfQogCgkvKiog0J/QvtC00YHRh9C40YLRi9Cy0LDQtdC8INGH0LDRgdGLINC/0LXRgNC10YDQsNCx0L7RgtC60LggKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRPdmVydGltZUhvdXJzKCkKCXsKCQkkaG91cnMgPSAwOwogCgkJZm9yZWFjaCgkdGhpcy0+aG91cnMgYXMgJGhvdXIgKXsKCQkJCWlmKCRob3VyID4gNDApewoJCQkJCSRob3VycyArPSAkaG91ciAtIDQwOyAvL9Cy0YvRh9C40YLQsNC10Lwg0L7QsdGL0YfQvdGL0LUg0YLRgNGD0LTQvtGH0LDRgdGLCgkJCQl9CgkJfQogCgkJcmV0dXJuICRob3VyczsKCX0KfQoJCiAKIAokaXZhbiA9IG5ldyBFbXBsb3llZSgi0JjQstCw0L3QvtCyINCY0LLQsNC9IiwgMTApOwovLyBuYW1lINC4IHJhdGUg0LfQsNC00LDQvdGLINGH0LXRgNC10Lcg0LrQvtC90YHRgtGA0YPQutGC0L7RgCwg0L/QvtGC0L7QvNGDINC+0YHRgtCw0LvQvtGB0Ywg0LvQuNGI0Ywg0L3QsNC/0LjRgdCw0YLRjCDRh9Cw0YHRiwokaXZhbi0+aG91cnMgPSBhcnJheSg0MCwgNDAsIDQwLCA0MCk7ICAgLy8g0JjQstCw0L0g0YDQsNCx0L7RgtCw0LXRgiDQv9C+IDQwINGH0LDRgdC+0LIg0LIg0L3QtdC00LXQu9GOCiAKJHBldGVyID0gbmV3IEVtcGxveWVlKCLQn9C10YLRgNC+0LIg0J/QtdGC0YAiLCA4KTsKJHBldGVyLT5ob3VycyA9IGFycmF5KDQwLCAxMCwgNDAsIDUwKTsgIC8vINCf0LXRgtGAINCy0LfRj9C7INC+0YLQs9GD0Lsg0Lgg0L/QvtGC0L7QvNGDINC+0YLRgNCw0LHQvtGC0LDQuyDQvNC10L3RjNGI0LUg0YfQsNGB0L7QsiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDQvdC+INCyICDQv9C+0YHQu9C10LTQvdGO0Y4g0L3QtdC00LXQu9GOINGA0LXRiNC40Lsg0L/QvtGA0LDQsdC+0YLQsNGC0Ywg0L/QvtCx0L7Qu9GM0YjQtQokb3AgPSBuZXcgRW1wbG95ZWUoItCe0L8g0J7Qv9C+0LLQuNGHIiwgMTAwMCk7CiRvcC0+aG91cnMgPSBhcnJheSg1MCwgNjAsIDU1LCA0MCk7CiRlbXBsb3llZXMgPSBhcnJheSgkaXZhbiwgJHBldGVyLCAkb3ApOwogCiAKZnVuY3Rpb24gcGFkTGVmdCgkc3RyaW5nLCAkbGVuZ3RoKXsKICAgJHN0cmluZ0xlbiA9IG1iX3N0cmxlbigkc3RyaW5nKTsKICAgLy/QvtCx0YrRj9Cy0LvRj9C10Lwg0L/QtdGA0LXQvNC10L3QvdGD0Y4g0LTQu9GPINC/0YPRgdGC0L7Qs9C+INC/0YDQvtGB0YLRgNCw0L3RgdGC0LLQsAogICAgJHNwYWNlID0iIjsKICAgIGZvciAoOyRzdHJpbmdMZW4gPCAkbGVuZ3RoOyAkc3RyaW5nTGVuKyspewogICAgICAgICRzcGFjZSAuPSAiICI7CiAgICB9CiAgICBlY2hvICIkc3BhY2Ukc3RyaW5nIjsKIAp9CiAKZnVuY3Rpb24gcGFkUmlnaHQoJHN0cmluZywgJGxlbmd0aCl7CiAgICAkc3RyaW5nTGVuID0gbWJfc3RybGVuKCRzdHJpbmcpOwogICAgLy/QvtCx0YrRj9Cy0LvRj9C10Lwg0L/QtdGA0LXQvNC10L3QvdGD0Y4g0LTQu9GPINC/0YPRgdGC0L7Qs9C+INC/0YDQvtGB0YLRgNCw0L3RgdGC0LLQsAogICAgJHNwYWNlID0iIjsKICAgIGZvciAoOyRzdHJpbmdMZW4gPCAkbGVuZ3RoOyAkc3RyaW5nTGVuKyspewogICAgICAgICRzcGFjZSAuPSAiICI7CiAgICB9CiAgICBlY2hvICIkc3RyaW5nJHNwYWNlIjsKfQovLyDQqNC40YDQuNC90LAg0LrQvtC70L7QvdC+0LoKJGNvbDEgPSAzMDsKJGNvbDIgPSA4OwokY29sMyA9IDg7CiRjb2w0ID0gODsKJGNvbDUgPSA4OyAvLyDQutC+0LvQvtC90LrQsCDQtNC70Y8g0L7QstC10YDRgtCw0LnQvNCwCiAKLy8g0JfQsNCz0L7Qu9C+0LLQvtC6INGC0LDQsdC70LjRhtGLCmVjaG8gcGFkUmlnaHQoItCh0L7RgtGA0YPQtNC90LjQuiIsICRjb2wxKSAuCiAgICAgcGFkTGVmdCgi0KfQsNGB0YsiLCAkY29sMikgLiAKCSBwYWRMZWZ0KCIg0J7QstC10YDRgtCw0LnQvCIsICRjb2w1KSAuCiAgICAgcGFkTGVmdCgi0KHRgtCw0LLQutCwIiwgJGNvbDMpIC4gCiAgICAgcGFkTGVmdCgi0Jcv0L8iLCAkY29sNCkgLiAiXG5cbiI7CiAKLy8g0KHQsNC80LAg0YLQsNCx0LvQuNGG0LAKZm9yZWFjaCAoJGVtcGxveWVlcyBhcyAkZW1wbG95ZWUpIHsKICAgIGVjaG8gcGFkUmlnaHQoJGVtcGxveWVlLT5nZXRTaG9ydE5hbWUoKSwgJGNvbDEpIC4KICAgICAgICAgcGFkTGVmdCgkZW1wbG95ZWUtPmdldFRvdGFsSG91cnNXb3JrZWQoKSwgJGNvbDIpIC4gCgkJIHBhZExlZnQoJGVtcGxveWVlLT5nZXRPdmVydGltZUhvdXJzKCksICRjb2w1KSAuCiAgICAgICAgIHBhZExlZnQoJGVtcGxveWVlLT5yYXRlLCAkY29sMykgLiAKICAgICAgICAgcGFkTGVmdCgkZW1wbG95ZWUtPmdldFNhbGFyeSgpLCAkY29sNCkgLiAiXG4iOwp9CiAKLy8g0J/QvtC00YHRh9C10YIg0LLRi9Cy0L7QtNCwICEhISDRgdGO0LTQsCDQtNC+0L/QuNGB0LDRgtGMINC+0LLQtdGA0YLQsNC50LwKZm9yZWFjaCAoJGVtcGxveWVlcyBhcyAkZW1wbG95ZWUpewoJJGhvdXJzU3VtICs9ICRlbXBsb3llZS0+Z2V0VG90YWxIb3Vyc1dvcmtlZCgpOwoJJG92ZXJUaW1lU3VtICs9ICRlbXBsb3llZS0+Z2V0T3ZlcnRpbWVIb3VycygpOwoJJHNhbGFyeVN1bSArPSAkZW1wbG95ZWUtPmdldFNhbGFyeSgpOwp9CiAKLy/QstGL0L/QuNGB0YvQstCw0LXQvCDQstGL0LLQvtC0ICEhISDRgdGO0LTQsCDQtNC+0L/QuNGB0LDRgtGMINC+0LLQtdGA0YLQsNC50LwKZWNobyBwYWRSaWdodCgi0JLRgdC10LPQviIsICRjb2wxKSAuCgkgcGFkTGVmdCgkaG91cnNTdW0sICRjb2wyKSAuCgkgcGFkTGVmdCgkb3ZlclRpbWVTdW0sICRjb2w1KSAuCgkgcGFkTGVmdCgiICIsICRjb2wzKSAuCgkgcGFkTGVmdCgkc2FsYXJ5U3VtLCAkY29sNCk7Cj8+CiAKIAo8L3ByZT4=