@ 2017-11-17T23:52:04Z <?php
error_reporting(-1);
abstract class AbstractWorker
{
public $rank;
public $isBoss;
public function __construct(int $rank, int $isBoss)
{
$this->rank = $rank;
$this->isBoss = $isBoss;
}
public function getSalary(): float
{
$salary = $this->getBasicSalary();
if ($this->rank == 2){
$salary *= 1.25;
} elseif ($this->rank == 3){
$salary *= 1.5;
}
if ($this->isBoss == 1){
$salary *= 1.5;
}
return $salary;
}
public function getCoffee(): int
{
$coffee = $this->getBasicCoffee();
if ($this->isBoss == 1){
$coffee *= 2;
}
return $coffee;
}
public function getPages(): int
{
$pages = $this->getBasicPages();
if ($this->isBoss == 1){
$pages = 0;
}
return $pages;
}
abstract public function getBasicSalary(): int;
abstract public function getBasicCoffee(): int;
abstract public function getBasicPages(): int;
}
class Manager extends AbstractWorker
{
public function getBasicSalary(): int
{
return 500;
}
public function getBasicCoffee(): int
{
return 20;
}
public function getBasicPages(): int
{
return 200;
}
}
class Marketer extends AbstractWorker
{
public function getBasicSalary(): int
{
return 400;
}
public function getBasicCoffee(): int
{
return 15;
}
public function getBasicPages(): int
{
return 150;
}
}
class Engineer extends AbstractWorker
{
public function getBasicSalary(): int
{
return 200;
}
public function getBasicCoffee(): int
{
return 5;
}
public function getBasicPages(): int
{
return 50;
}
}
class Analyst extends AbstractWorker
{
public function getBasicSalary(): int
{
return 800;
}
public function getBasicCoffee(): int
{
return 50;
}
public function getBasicPages(): int
{
return 5;
}
}
class Department
{
private $name;
private $workers = array();
public function __construct(string $name)
{
$this->name = $name;
}
public function addWorker(AbstractWorker $worker): void
{
$this->workers[] = $worker;
}
public function getNumberWorkers(): int
{
return count($this->workers);
}
public function getDepartmentSalary(): float
{
$totalSalary = 0;
foreach ($this->workers as $worker) {
$totalSalary += $worker->getSalary();
}
return $totalSalary;
}
public function getDepartmentCoffee(): int
{
$totalCoffee = 0;
foreach ($this->workers as $worker) {
$totalCoffee += $worker->getCoffee();
}
return $totalCoffee;
}
public function getDepartmentPages(): int
{
$totalPages = 0;
foreach ($this->workers as $worker) {
$totalPages += $worker->getPages();
}
return $totalPages;
}
public function getDepartmentName(): string
{
return $this->name;
}
public function getWorkers(): array
{
return $this->workers;
}
public function getWorker(int $number): AbstractWorker
{
return $this->workers[$number];
}
public function deleteWorker(int $number): void
{
unset($this->workers[$number]);
}
public function sortWorkers(): void
{
sort($this->workers);
}
}
class Company
{
private $departments = array();
public function addDepartment(Department $department): void
{
$this->departments[] = $department;
}
public function getDepartments(): array
{
return $this->departments;
}
public function getDepartmentCount(): int
{
return count($this->departments);
}
}
class Tabel
{
private function padLeft($value, $columnLength): void
{
echo $value;
echo str_repeat(" ", $columnLength - mb_strlen($value));
}
private function printRow(string $name, $count, $salary, $coffee, $pages, $salaryDividePages): void
{
$col1 = 15;
$col2 = 10;
$col3 = 10;
$col4 = 8;
$col5 = 8;
$col6 = 15;
echo $this->padLeft($name, $col1) .
$this->padLeft($count, $col2) .
$this->padLeft($salary, $col3) .
$this->padLeft($coffee, $col4) .
$this->padLeft($pages, $col5) .
$this->padLeft($salaryDividePages, $col6) . "\n";
}
public function printTabel(Company $company): void
{
$this->printRow("Департамент", "сотр.", "тугр.", "кофе", "стр", "тугр./стр.");
echo "\n";
foreach ($company->getDepartments() as $department) {
$this->printRow($department->getDepartmentName(),
$department->getNumberWorkers(),
$department->getDepartmentSalary(),
$department->getDepartmentCoffee(),
$department->getDepartmentPages(),
round($department->getDepartmentSalary() / $department->getDepartmentPages(), 1));
}
echo "\n";
$count = 0;
$salary = 0;
$coffee = 0;
$pages = 0;
$salaryDividePages = 0;
foreach ($company->getDepartments() as $department) {
$count += $department->getNumberWorkers();
$salary += $department->getDepartmentSalary();
$coffee += $department->getDepartmentCoffee();
$pages += $department->getDepartmentPages();
$salaryDividePages += round($salary / $pages, 1);
}
$this->printRow("Всего", $count, $salary, $coffee, $pages, $salaryDividePages);
$this->printRow("Среднее",
round($count / $company->getDepartmentCount(), 1),
round($salary / $company->getDepartmentCount(), 1),
round($coffee / $company->getDepartmentCount(), 1),
round($pages / $company->getDepartmentCount(), 1),
round($salaryDividePages / $company->getDepartmentCount(), 1));
}
}
class HiringWorkers
{
public function addWorkersToDepartment(Department $department, string $profession, int $count, int $rang, int $isBoss): void
{
if ($profession == Manager::class){
for ($i = 0; $i < $count; $i++){
$department->addWorker(new Manager($rang, $isBoss));
}
} elseif ($profession == Marketer::class){
for ($i = 0; $i < $count; $i++){
$department->addWorker(new Marketer($rang, $isBoss));
}
} elseif ($profession == Engineer::class){
for ($i = 0; $i < $count; $i++){
$department->addWorker(new Engineer ($rang, $isBoss));
}
} elseif ($profession == Analyst::class){
for ($i = 0; $i < $count; $i++){
$department->addWorker(new Analyst ($rang, $isBoss));
}
}
}
}
$vektor = new Company;
$tabel = new Tabel;
$hiringWorkers = new HiringWorkers;
$departmentOfProcurement = new Department("Закупок");
$hiringWorkers->addWorkersToDepartment($departmentOfProcurement, "Manager", 9, 1, 0);
$hiringWorkers->addWorkersToDepartment($departmentOfProcurement, "Manager", 3, 2, 0);
$hiringWorkers->addWorkersToDepartment($departmentOfProcurement, "Manager", 2, 3, 0);
$hiringWorkers->addWorkersToDepartment($departmentOfProcurement, "Marketer", 2, 1, 0);
$hiringWorkers->addWorkersToDepartment($departmentOfProcurement, "Manager", 1, 2, 1);
$departmentOfSales = new Department("Продаж");
$hiringWorkers->addWorkersToDepartment($departmentOfSales, "Manager", 12, 1, 0);
$hiringWorkers->addWorkersToDepartment($departmentOfSales, "Marketer", 6, 1, 0);
$hiringWorkers->addWorkersToDepartment($departmentOfSales, "Analyst", 3, 1, 0);
$hiringWorkers->addWorkersToDepartment($departmentOfSales, "Analyst", 2, 2, 0);
$hiringWorkers->addWorkersToDepartment($departmentOfSales, "Marketer", 1, 2, 1);
$departmentOfAdvertising = new Department("Рекламы");
$hiringWorkers->addWorkersToDepartment($departmentOfAdvertising, "Marketer", 15, 1, 0);
$hiringWorkers->addWorkersToDepartment($departmentOfAdvertising, "Marketer", 10, 2, 0);
$hiringWorkers->addWorkersToDepartment($departmentOfAdvertising, "Manager", 8, 1, 0);
$hiringWorkers->addWorkersToDepartment($departmentOfAdvertising, "Engineer", 2, 1, 0);
$hiringWorkers->addWorkersToDepartment($departmentOfAdvertising, "Marketer", 1, 3, 1);
$departmentOfLogistics = new Department("Логистики");
$hiringWorkers->addWorkersToDepartment($departmentOfLogistics, "Manager", 13, 1, 0);
$hiringWorkers->addWorkersToDepartment($departmentOfLogistics, "Manager", 5, 2, 0);
$hiringWorkers->addWorkersToDepartment($departmentOfLogistics, "Engineer", 5, 1, 0);
$hiringWorkers->addWorkersToDepartment($departmentOfLogistics, "Manager", 1, 1, 1);
$vektor->addDepartment($departmentOfProcurement);
$vektor->addDepartment($departmentOfSales);
$vektor->addDepartment($departmentOfAdvertising);
$vektor->addDepartment($departmentOfLogistics);
$tabel->printTabel($vektor);
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Output for 7.1.0 - 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 Департамент сотр. тугр. кофе стр тугр./стр.
Закупок 17 9612.5 350 3100 3.1
Продаж 24 13550 610 3325 4.1
Рекламы 36 16300 575 5450 3
Логистики 24 11375 425 3850 3
Всего 101 50837.5 1960 15725 13.2
Среднее 25.3 12709.4 490 3931.3 3.3
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 9612.5 350 3100 3.1
Продаж 24 13550 610 3325 4.1
Рекламы 36 16300 575 5450 3
Логистики 24 11375 425 3850 3
Всего 101 50837.5 1960 15725 13.2
Среднее 25.3 12709.4 490 3931.3 3.3
Output for 7.0.0 - 7.0.25 Fatal error: Uncaught TypeError: Return value of Department::addWorker() must be an instance of void, none returned in /in/QfVAk:145
Stack trace:
#0 /in/QfVAk(304): Department->addWorker(Object(Manager))
#1 /in/QfVAk(327): HiringWorkers->addWorkersToDepartment(Object(Department), 'Manager', 9, 1, 0)
#2 {main}
thrown in /in/QfVAk on line 145
Process exited with code 255 . preferences:dark mode live preview
227.91 ms | 401 KiB | 196 Q