<?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 getSalary()
{
// Получаем число отработанных часов
$normalHours = $this->getNormalHours();
$overHours = $this->getOvertimeHours();
// и умножаем на часовую ставку
$salary = $normalHours * $this->rate + $overHours * ($this->rate * 2);
return $salary;
}
public function getOvertimeHours(){
// Количество часов по обычной ставке
$normalHours = 40;
// Количетсво переработанных часов
$overHours = 0;
foreach($this->hours as $weekHours){
// Если отработанных часов больше нормы
if($weekHours>$normalHours){
// Считаем переработанные часы
$overHours=$overHours+($weekHours-$normalHours);
}
}
return $overHours;
}
public function getNormalHours(){
// Высчитываем количество часов по обычной ставке
return $this->getTotalHoursWorked()-$this->getOvertimeHours();;
}
public function getShortName(){
// Ищем с конца буквы до заглавной и заменяем их на "."
$shortName = preg_replace("/[a-zа-яё]+$/u",".",$this->name); return $shortName;
}
}
function padRight($string,$length){
$space="";
for($i = 0;$i < $length; $i++){
$space=$space." " ;
}
return $string.$space;
}
function padLeft($string,$length){
$space="";
// Вычитаем длину строки из колонки
for ($i = 0; $i < $length; $i++) {
$space = $space . " ";
}
$result = $space . $string;
return $result;
}
$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); // Петр взял отгул и потому отработал меньше часов, // но в последнюю неделю решил поработать побольше
$employees = array($ivan, $peter);
// Ширина колонок
$col1 = 30;
$col2 = 8;
$col3 = 8;
$col4 = 8;
$col5 = 8;
// Заголовок таблицы
echo padRight("Сотрудник", $col1) .
padLeft("Часы", $col2) .
padLeft("Овертайм", $col3) .
padLeft("Ставка", $col4) .
padLeft("З/п", $col5) . "\n";
// Сама таблица
$overTotal = 0;
$hoursTotal = 0;
$salaryTotal = 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";
$overTotal += $employee->getOvertimeHours();
$hoursTotal += $employee->getTotalHoursWorked();
$salaryTotal += $employee->getSalary();
}
echo padRight("Всего", $col1) .
padLeft($hoursTotal, $col2) .
padLeft($overTotal,$col3).
padLeft(" ", $col4) .
padLeft($salaryTotal, $col5) . "\n";