<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( )
{
//получаем полное имя
$name = $this -> name ;
//и заменяем его фамилию и инициалы имени
return preg_replace ( "/([а-яё]+)\\ s+([а-яё])[а-яё]+/ui" , '$1 $2.' , $this -> name ) ; }
/** Подсчитываем стандартные трудочасы */
public function getNormalHours( )
{
foreach ( $this -> hours as $object -> $hour ) {
if ( $object -> $hour <= 40 ) {
$hours += $object -> $hour ;
} else {
$hours += 40 ; // Если часов за неделю больше - добавляет только часы без переработок
}
}
return $hours ;
}
/** Подсчитываем часы переработки */
public function getOvertimeHours( )
{
$hours = 0 ;
foreach ( $this -> hours as $object -> $hour ) {
if ( $object -> $hour > 40 ) {
$hours += $object -> $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+Z2V0T3ZlcnRpbWVIb3VycygpICogJHRoaXMtPnJhdGUgKiAyICk7CgkJcmV0dXJuICRob3VyczsKICAgIH0KCQoJLyoqINCj0LrQvtGA0LDRh9C40LLQsNC10Lwg0LjQvNGPICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0U2hvcnROYW1lKCkKCXsKCQkvL9C/0L7Qu9GD0YfQsNC10Lwg0L/QvtC70L3QvtC1INC40LzRjwoJCSRuYW1lID0gJHRoaXMtPm5hbWU7CgkJLy/QuCDQt9Cw0LzQtdC90Y/QtdC8INC10LPQviDRhNCw0LzQuNC70LjRjiDQuCDQuNC90LjRhtC40LDQu9GLINC40LzQtdC90LgKCQlyZXR1cm4gcHJlZ19yZXBsYWNlKCIvKFvQsC3Rj9GRXSspXFxzKyhb0LAt0Y/RkV0pW9CwLdGP0ZFdKy91aSIsICckMSAkMi4nLCAkdGhpcy0+bmFtZSk7Cgl9CgkKCS8qKiDQn9C+0LTRgdGH0LjRgtGL0LLQsNC10Lwg0YHRgtCw0L3QtNCw0YDRgtC90YvQtSDRgtGA0YPQtNC+0YfQsNGB0YsgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXROb3JtYWxIb3VycygpCgl7CgkJZm9yZWFjaCggJHRoaXMtPmhvdXJzIGFzICRvYmplY3QtPiRob3VyICl7CgkJCWlmKCAkb2JqZWN0LT4kaG91ciA8PSA0MCl7CgkJCQkkaG91cnMgKz0gJG9iamVjdC0+JGhvdXI7CgkJCX1lbHNlewoJCQkJJGhvdXJzICs9IDQwOwkJLy8g0JXRgdC70Lgg0YfQsNGB0L7QsiDQt9CwINC90LXQtNC10LvRjiDQsdC+0LvRjNGI0LUgLSDQtNC+0LHQsNCy0LvRj9C10YIg0YLQvtC70YzQutC+INGH0LDRgdGLINCx0LXQtyDQv9C10YDQtdGA0LDQsdC+0YLQvtC6CgkJCX0KCQl9CgoJCXJldHVybiAkaG91cnM7Cgl9CgkKCS8qKiDQn9C+0LTRgdGH0LjRgtGL0LLQsNC10Lwg0YfQsNGB0Ysg0L/QtdGA0LXRgNCw0LHQvtGC0LrQuCAqLwoJcHVibGljIGZ1bmN0aW9uIGdldE92ZXJ0aW1lSG91cnMoKQoJewoJCSRob3VycyA9IDA7CgkJCgkJZm9yZWFjaCggJHRoaXMtPmhvdXJzIGFzICRvYmplY3QtPiRob3VyICl7CgkJCQlpZigkb2JqZWN0LT4kaG91ciA+IDQwKXsKCQkJCQkkaG91cnMgKz0gJG9iamVjdC0+JGhvdXIgLSA0MDsgLy/QstGL0YfQuNGC0LDQtdC8INC+0LHRi9GH0L3Ri9C1INGC0YDRg9C00L7Rh9Cw0YHRiwoJCQkJfQoJCX0KCQkKCQlyZXR1cm4gJGhvdXJzOwoJfQp9CiAKCQogCiRpdmFuID0gbmV3IEVtcGxveWVlKCLQmNCy0LDQvdC+0LIg0JjQstCw0L0iLCAxMCk7Ci8vIG5hbWUg0LggcmF0ZSDQt9Cw0LTQsNC90Ysg0YfQtdGA0LXQtyDQutC+0L3RgdGC0YDRg9C60YLQvtGALCDQv9C+0YLQvtC80YMg0L7RgdGC0LDQu9C+0YHRjCDQu9C40YjRjCDQvdCw0L/QuNGB0LDRgtGMINGH0LDRgdGLCiRpdmFuLT5ob3VycyA9IGFycmF5KDQwLCA0MCwgNDAsIDQwKTsgICAvLyDQmNCy0LDQvSDRgNCw0LHQvtGC0LDQtdGCINC/0L4gNDAg0YfQsNGB0L7QsiDQsiDQvdC10LTQtdC70Y4KIAokcGV0ZXIgPSBuZXcgRW1wbG95ZWUoItCf0LXRgtGA0L7QsiDQn9C10YLRgCIsIDgpOwokcGV0ZXItPmhvdXJzID0gYXJyYXkoNDAsIDEwLCA0MCwgNTApOyAgLy8g0J/QtdGC0YAg0LLQt9GP0Lsg0L7RgtCz0YPQuyDQuCDQv9C+0YLQvtC80YMg0L7RgtGA0LDQsdC+0YLQsNC7INC80LXQvdGM0YjQtSDRh9Cw0YHQvtCyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vINC90L4g0LIgINC/0L7RgdC70LXQtNC90Y7RjiDQvdC10LTQtdC70Y4g0YDQtdGI0LjQuyDQv9C+0YDQsNCx0L7RgtCw0YLRjCDQv9C+0LHQvtC70YzRiNC1CiRvcCA9IG5ldyBFbXBsb3llZSgi0J7QvyDQntC/0L7QstC40YciLCAxMDAwKTsKJG9wLT5ob3VycyA9IGFycmF5KDUwLCA2MCwgNTUsIDQwKTsKJGVtcGxveWVlcyA9IGFycmF5KCRpdmFuLCAkcGV0ZXIsICRvcCk7CiAKIApmdW5jdGlvbiBwYWRMZWZ0KCRzdHJpbmcsICRsZW5ndGgpewogICAkc3RyaW5nTGVuID0gbWJfc3RybGVuKCRzdHJpbmcpOwogICAvL9C+0LHRitGP0LLQu9GP0LXQvCDQv9C10YDQtdC80LXQvdC90YPRjiDQtNC70Y8g0L/Rg9GB0YLQvtCz0L4g0L/RgNC+0YHRgtGA0LDQvdGB0YLQstCwCiAgICAkc3BhY2UgPSIiOwogICAgZm9yICg7JHN0cmluZ0xlbiA8ICRsZW5ndGg7ICRzdHJpbmdMZW4rKyl7CiAgICAgICAgJHNwYWNlIC49ICIgIjsKICAgIH0KICAgIGVjaG8gIiRzcGFjZSRzdHJpbmciOwogCn0KIApmdW5jdGlvbiBwYWRSaWdodCgkc3RyaW5nLCAkbGVuZ3RoKXsKICAgICRzdHJpbmdMZW4gPSBtYl9zdHJsZW4oJHN0cmluZyk7CiAgICAvL9C+0LHRitGP0LLQu9GP0LXQvCDQv9C10YDQtdC80LXQvdC90YPRjiDQtNC70Y8g0L/Rg9GB0YLQvtCz0L4g0L/RgNC+0YHRgtGA0LDQvdGB0YLQstCwCiAgICAkc3BhY2UgPSIiOwogICAgZm9yICg7JHN0cmluZ0xlbiA8ICRsZW5ndGg7ICRzdHJpbmdMZW4rKyl7CiAgICAgICAgJHNwYWNlIC49ICIgIjsKICAgIH0KICAgIGVjaG8gIiRzdHJpbmckc3BhY2UiOwp9Ci8vINCo0LjRgNC40L3QsCDQutC+0LvQvtC90L7QugokY29sMSA9IDMwOwokY29sMiA9IDg7CiRjb2wzID0gODsKJGNvbDQgPSA4OwokY29sNSA9IDg7IC8vINC60L7Qu9C+0L3QutCwINC00LvRjyDQvtCy0LXRgNGC0LDQudC80LAKIAovLyDQl9Cw0LPQvtC70L7QstC+0Log0YLQsNCx0LvQuNGG0YsKZWNobyBwYWRSaWdodCgi0KHQvtGC0YDRg9C00L3QuNC6IiwgJGNvbDEpIC4KICAgICBwYWRMZWZ0KCLQp9Cw0YHRiyIsICRjb2wyKSAuIAoJIHBhZExlZnQoIiDQntCy0LXRgNGC0LDQudC8IiwgJGNvbDUpIC4KICAgICBwYWRMZWZ0KCLQodGC0LDQstC60LAiLCAkY29sMykgLiAKICAgICBwYWRMZWZ0KCLQly/QvyIsICRjb2w0KSAuICJcblxuIjsKIAovLyDQodCw0LzQsCDRgtCw0LHQu9C40YbQsApmb3JlYWNoICgkZW1wbG95ZWVzIGFzICRlbXBsb3llZSkgewogICAgZWNobyBwYWRSaWdodCgkZW1wbG95ZWUtPmdldFNob3J0TmFtZSgpLCAkY29sMSkgLgogICAgICAgICBwYWRMZWZ0KCRlbXBsb3llZS0+Z2V0VG90YWxIb3Vyc1dvcmtlZCgpLCAkY29sMikgLiAKCQkgcGFkTGVmdCgkZW1wbG95ZWUtPmdldE92ZXJ0aW1lSG91cnMoKSwgJGNvbDUpIC4KICAgICAgICAgcGFkTGVmdCgkZW1wbG95ZWUtPnJhdGUsICRjb2wzKSAuIAogICAgICAgICBwYWRMZWZ0KCRlbXBsb3llZS0+Z2V0U2FsYXJ5KCksICRjb2w0KSAuICJcbiI7Cn0KCi8vINCf0L7QtNGB0YfQtdGCINCy0YvQstC+0LTQsCAhISEg0YHRjtC00LAg0LTQvtC/0LjRgdCw0YLRjCDQvtCy0LXRgNGC0LDQudC8CmZvcmVhY2ggKCRlbXBsb3llZXMgYXMgJGVtcGxveWVlKXsKCSRob3Vyc1N1bSArPSAkZW1wbG95ZWUtPmdldFRvdGFsSG91cnNXb3JrZWQoKTsKCSRvdmVyVGltZVN1bSArPSAkZW1wbG95ZWUtPmdldE92ZXJ0aW1lSG91cnMoKTsKCSRzYWxhcnlTdW0gKz0gJGVtcGxveWVlLT5nZXRTYWxhcnkoKTsKfQoKLy/QstGL0L/QuNGB0YvQstCw0LXQvCDQstGL0LLQvtC0ICEhISDRgdGO0LTQsCDQtNC+0L/QuNGB0LDRgtGMINC+0LLQtdGA0YLQsNC50LwKZWNobyBwYWRSaWdodCgi0JLRgdC10LPQviIsICRjb2wxKSAuCgkgcGFkTGVmdCgkaG91cnNTdW0sICRjb2wyKSAuCgkgcGFkTGVmdCgkb3ZlclRpbWVTdW0sICRjb2w1KSAuCgkgcGFkTGVmdCgiICIsICRjb2wzKSAuCgkgcGFkTGVmdCgkc2FsYXJ5U3VtLCAkY29sNCk7Cj8+CgoKPC9wcmU+Cgo=