@ 2019-03-03T15:53:53Z <?php
class Employee
{
public $name; // имя-фамилия
public $rate; // часовая ставка (сколько он получает тугриков за час работы)
public $hours = array(); // массив, содержащий отработанные часы по неделям
public $overtime = 0;
public function __construct($name, $rate)
{
// задаем имя и часовую ставку
$this->name = $name;
$this->rate = $rate;
}
/** Считает общее число отработанных часов */
public function getNormalHours()
{
// Просто складываем значения часов в массиве
return array_sum($this->hours);
}
public function getOvertimeHours() {
return $this->overtime;
}
/** Считает зарплату */
public function getSalary()
{
// Получаем число отработанных часов
$hours = $this->getNormalHours() - $this->overtime;
// и умножаем на часовую ставку
$salary = $hours * $this->rate + $this->overtime * $this->rate * 2;
return $salary;
}
public function getShortName() {
return preg_replace('/(?<=(?<=(?<=[а-яё])[ ])[А-ЯЁ])[а-яё]+/ui', ".", $this->name);
}
}
function printTable ($employees) {
// Ширина колонок
$col1 = 30;
$col2 = 8;
$col3 = 10;
$col4 = 8;
$col5 = 8;
$totalSelery = 0;
$totalNormalHours = 0;
$totalOvertimeHours = 0;
// Заголовок таблицы
echo padRight("Сотрудник", $col1) .
padLeft("Часы", $col2) .
padLeft("Овертайм", $col3) .
padLeft("Ставка", $col4) .
padLeft("З/п", $col5) . "\n\n";
// Сама таблица
foreach ($employees as $employee) {
echo padRight($employee->getShortName(), $col1) .
padLeft($employee->getNormalHours(), $col2) .
padLeft($employee->getOvertimeHours(), $col3) .
padLeft($employee->rate, $col4) .
padLeft($employee->getSalary(), $col5) . "\n";
$totalSelery += $employee->getSalary();
$totalNormalHours += $employee->getNormalHours();
$totalOvertimeHours += $employee->getOvertimeHours();
}
echo padRight("Всего", $col1) .
padLeft($totalNormalHours, $col2) .
padLeft($totalOvertimeHours, $col3) .
padLeft("", $col4) .
padLeft($totalSelery, $col5);
}
function padLeft ($field, $col) {
echo str_repeat(" ", $col - mb_strlen($field)).$field;
}
function padRight ($field, $col) {
echo $field.str_repeat(" ", $col - mb_strlen($field));
}
$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);
$peter->overtime = 10;
$employees = array();
$employees[] = $ivan;
$employees[] = $peter;
printTable($employees);
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Output for 7.1.25 , 7.2.0 - 7.2.33 , 7.3.0 - 7.3.33 , 7.4.0 - 7.4.33 , 8.0.0 - 8.0.30 , 8.1.0 - 8.1.28 , 8.2.0 - 8.2.18 , 8.3.0 - 8.3.4 , 8.3.6 Сотрудник Часы Овертайм Ставка З/п
Иванов И. 160 0 10 1600
Петров П. 140 10 8 1200
Всего 300 10 2800 Output for 8.3.5 Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
Сотрудник Часы Овертайм Ставка З/п
Иванов И. 160 0 10 1600
Петров П. 140 10 8 1200
Всего 300 10 2800 preferences:dark mode live preview
157.23 ms | 402 KiB | 156 Q