<?php
error_reporting(-1);
header("Content-Type: text/plain; charset=utf-8");
mb_internal_encoding('utf-8');
abstract class Employee
{
public $boss;
public $rank;
public function __construct($boss, $rank)
{
$this->boss = $boss;
$this->rank = $rank;
}
function getSalary()
{
if ($this->rank == 1) {
$rankFactor = 1;
} elseif ($this->rank == 2) {
$rankFactor = 1.25;
} elseif ($this->rank == 3) {
$rankFactor = 1.5;
} else
return "Ошибка ранга!";
if ($this->boss == 0) {
$bossFactor = 1;
} elseif ($this->boss == 1) {
$bossFactor = 2;
} else
return "Ошибка иерархии!";
return $this->rate * $rankFactor * $bossFactor;
}
function getReports()
{
if ($this->boss == 0) {
$bossFactor = 1;
} elseif ($this->boss == 1) {
$bossFactor = 0;
} else
return "Ошибка иерархии!";
return $this->reports * $bossFactor;
}
function getCoffee()
{
if ($this->boss == 0) {
$bossFactor = 1;
} elseif ($this->boss == 1) {
$bossFactor = 2;
} else
return "Ошибка иерархии!";
return $this->coffee * $bossFactor;
}
}
class Manager extends Employee
{
public $rate = 500;
public $coffee = 20;
public $reports = 200;
}
class Marketer extends Employee
{
public $rate = 400;
public $coffee = 15;
public $reports = 150;
}
class Engineer extends Employee
{
public $rate = 200;
public $coffee = 5;
public $reports = 50;
}
class Analyst extends Employee
{
public $rate = 800;
public $coffee = 50;
public $reports = 5;
}
class Department
{
public $departmentName;
public $departamentEmployees;
public function __construct($departmentName)
{
$this->departmentName = $departmentName;
}
public function getTotalEmployees()
{
return count($this->departamentEmployees);
}
public function getTotalSalary()
{
$totalSalary = 0;
foreach ($this->departamentEmployees as $employee) {
$totalSalary += $employee->getSalary();
}
return $totalSalary;
}
public function getTotalCoffee()
{
$totalCoffee = 0;
foreach ($this->departamentEmployees as $employee) {
$totalCoffee += $employee->getCoffee();
}
return $totalCoffee;
}
public function getTotalReports()
{
$totalReports = 0;
foreach ($this->departamentEmployees as $employee) {
$totalReports += $employee->getReports();
}
return $totalReports;
}
public function getAverageMoneyPerPage()
{
return round($this->getTotalSalary() / $this->getTotalReports());
}
}
$purchasing = new Department("Закупок");
$sales = new Department("Продаж");
$advertising = new Department("Рекламы");
$logistics = new Department("Логистики");
$purchasing->departamentEmployees = [
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 2),
$employee = new Manager(0, 2),
$employee = new Manager(0, 2),
$employee = new Manager(0, 3),
$employee = new Manager(0, 3),
$employee = new Marketer(0, 1),
$employee = new Marketer(0, 1),
$employee = new Manager(1, 2)
];
$sales->departamentEmployees = [
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Marketer(0, 1),
$employee = new Marketer(0, 1),
$employee = new Marketer(0, 1),
$employee = new Marketer(0, 1),
$employee = new Marketer(0, 1),
$employee = new Marketer(0, 1),
$employee = new Analyst(0, 1),
$employee = new Analyst(0, 1),
$employee = new Analyst(0, 1),
$employee = new Analyst(0, 2),
$employee = new Analyst(0, 2),
$employee = new Marketer(1, 2)
];
$advertising->departamentEmployees = [
$employee = new Marketer(0, 1),
$employee = new Marketer(0, 1),
$employee = new Marketer(0, 1),
$employee = new Marketer(0, 1),
$employee = new Marketer(0, 1),
$employee = new Marketer(0, 1),
$employee = new Marketer(0, 1),
$employee = new Marketer(0, 1),
$employee = new Marketer(0, 1),
$employee = new Marketer(0, 1),
$employee = new Marketer(0, 1),
$employee = new Marketer(0, 1),
$employee = new Marketer(0, 1),
$employee = new Marketer(0, 1),
$employee = new Marketer(0, 1),
$employee = new Marketer(0, 2),
$employee = new Marketer(0, 2),
$employee = new Marketer(0, 2),
$employee = new Marketer(0, 2),
$employee = new Marketer(0, 2),
$employee = new Marketer(0, 2),
$employee = new Marketer(0, 2),
$employee = new Marketer(0, 2),
$employee = new Marketer(0, 2),
$employee = new Marketer(0, 2),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Engineer(0, 1),
$employee = new Engineer(0, 1),
$employee = new Marketer(1, 3)
];
$logistics->departamentEmployees = [
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 1),
$employee = new Manager(0, 2),
$employee = new Manager(0, 2),
$employee = new Manager(0, 2),
$employee = new Manager(0, 2),
$employee = new Manager(0, 2),
$employee = new Engineer(0, 1),
$employee = new Engineer(0, 1),
$employee = new Engineer(0, 1),
$employee = new Engineer(0, 1),
$employee = new Engineer(0, 1),
$employee = new Manager(1, 1)
];
$departamentsList = [$purchasing, $sales, $advertising, $logistics];
function padLeft($string, $length)
{
$str = "";
if (mb_strlen($string) < $length) {
$str = str_repeat(" ", $length - mb_strlen($string)) . $string;
}
return $str;
}
function padRight($string, $length)
{
$str = "";
if (mb_strlen($string) < $length) {
return $string . str_repeat(" ", $length - mb_strlen($string));
}
return $str;
}
$col1 = 30;
$col2 = 8;
$col3 = 8;
$col4 = 8;
$col5 = 8;
$col6 = 12;
$colLength = $col1 + $col2 + $col3 + $col4 + $col5 + $col6;
echo str_repeat("-", $colLength + 1) . "\n";
echo padRight("Департамент", $col1) .
padLeft("сотр.", $col2) .
padLeft("тугр.", $col3) .
padLeft("кофе", $col4) .
padLeft("стр.", $col5) .
padLeft("тугр./стр.", $col6) . "\n";
echo str_repeat("-", $colLength + 1) . "\n";
foreach ($departamentsList as $department) {
echo padRight($department->departmentName, $col1) .
padLeft($department->getTotalEmployees(), $col2) .
padLeft($department->getTotalSalary(), $col3) .
padLeft($department->getTotalCoffee(), $col4) .
padLeft($department->getTotalReports(), $col5) .
padLeft($department->getAverageMoneyPerPage(), $col6) . "\n";
}
echo "\n";
$allEmployees = 0;
$allSalary = 0;
$allCoffee = 0;
$allReports = 0;
$allAverageMoneyPerPage = 0;
foreach ($departamentsList as $department) {
$allEmployees += $department->getTotalEmployees();
$allSalary += $department->getTotalSalary();
$allCoffee += $department->getTotalCoffee();
$allReports += $department->getTotalReports();
$allAverageMoneyPerPage += $department->getAverageMoneyPerPage();
}
echo padRight("Среднее", $col1) .
padLeft(round($allEmployees / count($departamentsList)), $col2) .
padLeft(round($allSalary / count($departamentsList)), $col3) .
padLeft(round($allCoffee / count($departamentsList)), $col4) .
padLeft(round($allReports / count($departamentsList)), $col5) .
padLeft(round($allAverageMoneyPerPage / count($departamentsList)), $col6) . "\n";
echo padRight("Всего", $col1) .
padLeft(round($allEmployees), $col2) .
padLeft(round($allSalary), $col3) .
padLeft(round($allCoffee), $col4) .
padLeft(round($allReports), $col5) .
padLeft(round($allAverageMoneyPerPage), $col6) . "\n";
- Output for 7.1.25 - 7.1.33, 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
- ---------------------------------------------------------------------------
Департамент сотр. тугр. кофе стр. тугр./стр.
---------------------------------------------------------------------------
Закупок 17 9925 350 3100 3
Продаж 24 13800 610 3325 4
Рекламы 36 16600 575 5450 3
Логистики 24 11625 425 3850 3
Среднее 25 12988 490 3931 3
Всего 101 51950 1960 15725 13
- 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
---------------------------------------------------------------------------
Департамент сотр. тугр. кофе стр. тугр./стр.
---------------------------------------------------------------------------
Закупок 17 9925 350 3100 3
Продаж 24 13800 610 3325 4
Рекламы 36 16600 575 5450 3
Логистики 24 11625 425 3850 3
Среднее 25 12988 490 3931 3
Всего 101 51950 1960 15725 13
preferences:
260.5 ms | 403 KiB | 181 Q