<?php
header("Content-Type: text/plain; charset=utf-8");
class Departament
{
public $name;
public $employees = [];
public function __construct($name)
{
$this->name = $name;
}
public function getEmpolyees($position, $rank, $boss, $quantity)
{
For ($i=1; $i<=$quantity; $i++)
{
$this->employees[] = new $position($rank, $boss);
}
}
public function countEmployees() //число сотрудников в департаменте
{
$countEmployees=0;
foreach ($this->employees as $employee)
{
$countEmployees+= $employee->quantity;
}
return $countEmployees;
}
public function getSalaryDep() //суммарная зарплата работников
{
$countSalaryDep=0;
foreach ($this->employees as $employee)
{
$countSalaryDep+=$employee->getSalary();
}
return $countSalaryDep;
}
public function getCoffeeDep() //потребляемое кофе всеми сотрудниками депа
{
$countCoffee = 0;
foreach ($this->employees as $employee)
{
$countCoffee+= $employee->getCoffee();
}
return $countCoffee;
}
public function getPageDep() //Число страниц документов и отчетов, которые производит этот департамент
{
$countPage = 0;
foreach ($this->employees as $employee)
{
$countPage+= $employee->getPage();
}
return $countPage;
}
public function getAverageTugPerPage() //Посчитать средний расход тугриков на одну страницу
{
$average = $this->getPageDep() / $this->getSalaryDep();
return $average;
}
public function calculateall() //Произвести все расчеты и вывести на экран.
{
echo "Название департамента: {$this->name}\n";
$countEmployees = $this->countEmployees();
$salary=round($this->getSalaryDep()); //
echo "Зп по этому департаменту = {$salary}\n";
$countCoffee= $this->getCoffeeDep();
echo "Кол-во выпитого коффе = {$countCoffee}\n";
$countPage = $this->getPageDep();
echo "Всего страниц этого депа: {$countPage}\n";
$average = round($this->getAverageTugPerPage(),2);
echo "Cредний расход тугриков на одну страницу {$average}\n\n\n";
}
}
abstract Class Employee
{
public $coffe;
public $page;
public $baseSalary;
public $rank;
public $boss = false;
public $quantity;
public function __construct($rank, $boss)
{
$this->rank = $rank;
$this->boss = $boss;
}
public function getSalary() //Посчитать зарплату отдельного работника с учётом ранга. Возвращает зарплату.
{
$salary = $this->baseSalary;
switch($this->rank)
{
case 1:
$salary = $salary;//Ранг 1, зп по дефолту
break;
case 2:
$salary = $salary + ($salary)*25/100; //Ранг 2, прибавляем к з/п 25%
break;
case 3:
$salary = $salary + ($salary)*50/100;//Ранг 3, прибавляем к з/п 50%
break;
default:
echo "Неверно задан ранг.";
}
If ($this->boss) $salary=$salary + ($salary)*50/100; //Босс, прибавляем к з/п 50%(+за ранг отдельно накидывается)
return $salary;
}
public function getCoffee()//Сколько кофе выпили сотрудники. Босс пьёт в два раза больше.
{
$coffee=$this->coffee;
If ($this->boss) $coffee=$this->coffee*2;
return $coffee;
}
public function getPage() // Страницы одного сотрудника. Босс = 0;
{
$page=$this->page;
If ($this->boss) $page=0;
return $page;
}
}
Class Manager extends Employee
{
public $coffee = 20;
public $page = 200;
public $baseSalary = 500;
}
Class Marketer extends Employee
{
public $coffee = 15;
public $page = 150;
public $baseSalary = 400;
}
Class Engineer extends Employee
{
public $coffee = 5;
public $page = 50;
public $baseSalary = 200;
}
Class Analyst extends Employee
{
public $coffee = 50;
public $page = 5;
public $baseSalary = 800;
}
$allDep = [];
$sumDep = [];
$allDep[]=$procurementDep = new Departament("Procurement");
//Позиция, Ранг, босс, кол-во
$procurementDep->getEmpolyees("Manager", 1, false, 9);// 9 менеджеров 1 ранга.
$procurementDep->getEmpolyees("Manager",2, false, 3);//3 менеджера 2 ранга;
$procurementDep->getEmpolyees("Manager",3, false, 2);// 2 менеджера 3 ранга;
$procurementDep->getEmpolyees("Marketer", 1, false, 2);//2 маркетолога 1 ранга
$procurementDep->getEmpolyees("Manager",2, true, 1);// Босс 2 ранга ме.
$procurementDep->calculateall();
$allDep[]=$salesDep = new Departament("Sales");
$salesDep->getEmpolyees("Manager", 1, false, 12);// 12 менеджеров 1 ранга.
$salesDep->getEmpolyees("Marketer", 1, false, 6);//6 маркетолога 1 ранга
$salesDep->getEmpolyees("Analyst", 1, false, 3);//3 аналитика 1 ранга
$salesDep->getEmpolyees("Analyst", 2, false, 2);//2 аналитика 1 ранга
$salesDep->getEmpolyees("Marketer", 2, true, 1);//1 маркетолога 2 ранга boss
$salesDep->calculateall();
$allDep[]=$advertisingDep = new Departament("Advertising");
$advertisingDep->getEmpolyees("Marketer", 1, false, 15);//15 маркетолога 1 ранга
$advertisingDep->getEmpolyees("Marketer", 2, false, 10);//10 маркетолога 2 ранга
$advertisingDep->getEmpolyees("Manager", 1, false, 8);// 8 менеджеров 1 ранга.
$advertisingDep->getEmpolyees("Engineer", 1, false, 2);//2 инженера 1 ранга
$advertisingDep->getEmpolyees("Marketer", 3, true, 1);//1 маркетолога 3 ранга boss
$advertisingDep->calculateall();
$allDep[]=$logisticsDep = new Departament("logistics");
$logisticsDep->getEmpolyees("Manager", 1, false, 13);// 13 менеджеров 1 ранга.
$logisticsDep->getEmpolyees("Manager", 2, false, 5);// 5 менеджеров 2 ранга.
$logisticsDep->getEmpolyees("Engineer", 1, false, 5);//5 инженера 1 ранга
$logisticsDep->getEmpolyees("Manager", 1, true, 1);// 1 менеджеров 1 ранга. boss
$logisticsDep->calculateall();
function getSumDep($allDep) //Посчитать в сумме зарплаты/кофе/страницы всех департаментов.
{
$sumDep = [];
foreach ($allDep as $dep)
{
$sumDep['allDepSalary']+=$dep->getSalaryDep();
$sumDep['allDepCoffee']+=$dep->getCoffeeDep();
$sumDep['allDepPage']+=$dep->getPageDep();
}
return $sumDep;
}
$sumDep=getSumDep($allDep);
foreach ($sumDep as $value)
{
echo "$value\n";
}
?>
preferences:
28.28 ms | 405 KiB | 5 Q