<?php
error_reporting(-1);
class Department
{
public $name;
public $employees = array();
public function addEmployees($quantity, $employee)
{
for($i = 0; $i < $quantity; $i++){
array_push($this->employees, clone $employee);
}
return $this->employees;
}
public function addLeader($employee){
$employee->setRank();
$employee->makeLeader();
array_push($this->employees,$employee);
return $this;
}
public function getTotalEmployees()
{ $total = 0;
foreach ($this->employees as $employee){
$total++;
}
return $total;
}
public function getTotalCoffee(){
$total = 0;
foreach ($this->employees as $employee) {
$total+=$employee->coffee;
}
return $total;
}
public function getTotalPapers(){
$total = 0;
foreach ($this->employees as $employee) {
$total+=$employee->papers;
}
return $total;
}
public function getTotalIncome(){
$total = 0;
foreach ($this->employees as $employee) {
$total += $employee->income;
}
return floor($total);
}
}
abstract class Employee
{
public $rank;
public $income;
public $coffee;
public $papers;
public function __construct($rank)
{
$this->rank = $rank;
}
public function setRank()
{
$rank = $this->rank;
if($rank == 2){
$this->income *= 1.25;
}
elseif($rank == 3){
$this->income *= 1.5;
}
return $this;
}
public function makeLeader(){
$this->income *= 1.5;
$this->coffee *= 2;
$this->papers = 0;
return $this;
}
}
class Manager extends Employee
{
public $income = 500;
public $coffee = 20;
public $papers = 200;
}
class Marketer extends Employee
{
public $income = 400;
public $coffee = 15;
public $papers = 150;
}
class Engineer extends Employee
{
public $income = 200;
public $coffee = 5;
public $papers = 50;
}
class Analytics extends Employee
{
public $income = 800;
public $coffee = 50;
public $papers = 5;
}
function padLeft($text, $length){
$cl = mb_strlen($text);
if($cl<$length){
$text =str_repeat(" ", $length - $cl).$text;
}
return $text;
}
function padRight($text, $length){
$cl = mb_strlen($text);
if($cl<$length){
$text = $text.str_repeat(" ", $length - $cl);
}
return $text;
}
$col1 = 11;
$col2 = 11;
$col3 = 11;
$col4 = 11;
$col5 = 11;
$col6 = 13;
$col7 = 11;
$buyers = new Department;
$buyers->name = "Закупок";
$buyers->addEmployees(9, new Manager(1));
$buyers->addEmployees(3, new Manager(2));
$buyers->addEmployees(2, new Marketer(1));
$buyers->addLeader(new Manager(2));
$sellers = new Department;
$sellers->name = "Продаж";
$sellers->addEmployees(12, new Manager(1));
$sellers->addEmployees(6, new Marketer(1));
$sellers->addEmployees(3, new Analytics(1));
$sellers->addEmployees(2, new Analytics(2));
$sellers->addLeader(new Marketer(2));
$advertisers = new Department;
$advertisers->name = "Рекламы";
$advertisers->addEmployees(15, new Marketer(1));
$advertisers->addEmployees(10, new Marketer(2));
$advertisers->addEmployees(8, new Manager(1));
$advertisers->addEmployees(2, new Engineer(1));
$advertisers->addLeader(new Manager(1));
$logistics = new Department;
$logistics->name = "Логистики";
$logistics->addEmployees(13, new Manager(1));
$logistics->addEmployees(5, new Manager(2));
$logistics->addEmployees(5, new Engineer(1));
$logistics->addLeader(new Manager(1));
$departments = array($buyers, $sellers, $advertisers, $logistics);
foreach ($departments as $department) {
$totalEmp+=$department->getTotalEmployees();
$totalInc+=$department->getTotalIncome();
$totalCof+=$department->getTotalCoffee();
$totalPap+=$department->getTotalPapers();
$totalPrice+=floor($department->getTotalIncome()/$department->getTotalPapers());
}
$avIncome = floor($totalInc/count($departments));
$avEmp = floor($totalEmp / count($departments));
$avCof = floor($totalCof / count($departments));
$avPap = floor($totalPap / count($departments));
$avPrice = floor($totalPrice / count($departments));
echo (padRight("Департамент",$col1).
padLeft("сотр.",$col2).
padLeft("тугр.",$col3).
padLeft("кофе",$col4).
padLeft("стр.",$col5).
padLeft("тугр./стр.",$col6)."\n---------------------------------------------------------------------------\n");
foreach ($departments as $department){
echo padRight($department->name,$col1).
padLeft($department->getTotalEmployees(),$col2).
padLeft($department->getTotalIncome(),$col3).
padLeft($department->getTotalCoffee(),$col4).
padLeft($department->getTotalPapers(),$col5).
padLeft(floor($department->getTotalIncome()/$department->getTotalPapers()),$col6)."\n";
}
echo (
padRight("Среднее", $col1).
padLeft($avEmp, $col2).
padLeft($avIncome, $col3).
padLeft($avCof, $col4).
padLeft($avPap, $col5).
padLeft($avPrice, $col6)."\n"
);
echo(
padRight("Всего",$col1).
padLeft($totalEmp, $col2).
padLeft($totalInc, $col3).
padLeft($totalCof, $col4).
padLeft($totalPap, $col5).
padLeft($totalPrice, $col6)
);
PD9waHAKZXJyb3JfcmVwb3J0aW5nKC0xKTsKY2xhc3MgRGVwYXJ0bWVudAp7CglwdWJsaWMgJG5hbWU7CglwdWJsaWMgJGVtcGxveWVlcyA9IGFycmF5KCk7CgoJcHVibGljIGZ1bmN0aW9uIGFkZEVtcGxveWVlcygkcXVhbnRpdHksICRlbXBsb3llZSkKCXsKCQlmb3IoJGkgPSAwOyAkaSA8ICRxdWFudGl0eTsgJGkrKyl7CgkJCWFycmF5X3B1c2goJHRoaXMtPmVtcGxveWVlcywgY2xvbmUgJGVtcGxveWVlKTsKCQl9CgkJcmV0dXJuICR0aGlzLT5lbXBsb3llZXM7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGFkZExlYWRlcigkZW1wbG95ZWUpewoJCSRlbXBsb3llZS0+c2V0UmFuaygpOwoJCSRlbXBsb3llZS0+bWFrZUxlYWRlcigpOwoJCWFycmF5X3B1c2goJHRoaXMtPmVtcGxveWVlcywkZW1wbG95ZWUpOwoJCXJldHVybiAkdGhpczsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0VG90YWxFbXBsb3llZXMoKQoJewkkdG90YWwgPSAwOwoJCWZvcmVhY2ggKCR0aGlzLT5lbXBsb3llZXMgYXMgJGVtcGxveWVlKXsKCQkJJHRvdGFsKys7CgkJfQoJCXJldHVybiAkdG90YWw7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldFRvdGFsQ29mZmVlKCl7CgkJJHRvdGFsID0gMDsKCQlmb3JlYWNoICgkdGhpcy0+ZW1wbG95ZWVzIGFzICRlbXBsb3llZSkgewoJCQkkdG90YWwrPSRlbXBsb3llZS0+Y29mZmVlOwoJCX0KCQlyZXR1cm4gJHRvdGFsOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRUb3RhbFBhcGVycygpewoJCSR0b3RhbCA9IDA7CgkJZm9yZWFjaCAoJHRoaXMtPmVtcGxveWVlcyBhcyAkZW1wbG95ZWUpIHsKCQkJJHRvdGFsKz0kZW1wbG95ZWUtPnBhcGVyczsKCQl9CgkJcmV0dXJuICR0b3RhbDsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0VG90YWxJbmNvbWUoKXsKCQkkdG90YWwgPSAwOwoJCWZvcmVhY2ggKCR0aGlzLT5lbXBsb3llZXMgYXMgJGVtcGxveWVlKSB7CgkJCSR0b3RhbCArPSAkZW1wbG95ZWUtPmluY29tZTsKCQl9CgkJcmV0dXJuIGZsb29yKCR0b3RhbCk7Cgl9CgoKfQoKYWJzdHJhY3QgY2xhc3MgRW1wbG95ZWUKewoJcHVibGljICRyYW5rOwoJcHVibGljICRpbmNvbWU7CglwdWJsaWMgJGNvZmZlZTsKCXB1YmxpYyAkcGFwZXJzOwoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRyYW5rKQoJewoJCSR0aGlzLT5yYW5rID0gJHJhbms7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHNldFJhbmsoKQoJewoJCSRyYW5rID0gJHRoaXMtPnJhbms7CgkJaWYoJHJhbmsgPT0gMil7CgkJCSR0aGlzLT5pbmNvbWUgKj0gMS4yNTsKCQl9CgkJZWxzZWlmKCRyYW5rID09IDMpewoJCQkkdGhpcy0+aW5jb21lICo9IDEuNTsKCQl9CgkJcmV0dXJuICR0aGlzOwoJfQoJcHVibGljIGZ1bmN0aW9uIG1ha2VMZWFkZXIoKXsKCQkkdGhpcy0+aW5jb21lICo9IDEuNTsKCQkkdGhpcy0+Y29mZmVlICo9IDI7CgkJJHRoaXMtPnBhcGVycyA9IDA7CgkJcmV0dXJuICR0aGlzOwoJfQp9CgpjbGFzcyBNYW5hZ2VyIGV4dGVuZHMgRW1wbG95ZWUKewoJcHVibGljICRpbmNvbWUgPSA1MDA7CglwdWJsaWMgJGNvZmZlZSA9IDIwOwoJcHVibGljICRwYXBlcnMgPSAyMDA7Cn0KY2xhc3MgTWFya2V0ZXIgZXh0ZW5kcyBFbXBsb3llZQp7CglwdWJsaWMgJGluY29tZSA9IDQwMDsKCXB1YmxpYyAkY29mZmVlID0gMTU7CglwdWJsaWMgJHBhcGVycyA9IDE1MDsKfQpjbGFzcyBFbmdpbmVlciBleHRlbmRzIEVtcGxveWVlCnsKCXB1YmxpYyAkaW5jb21lID0gMjAwOwoJcHVibGljICRjb2ZmZWUgPSA1OwoJcHVibGljICRwYXBlcnMgPSA1MDsKfQpjbGFzcyBBbmFseXRpY3MgZXh0ZW5kcyBFbXBsb3llZQp7CglwdWJsaWMgJGluY29tZSA9IDgwMDsKCXB1YmxpYyAkY29mZmVlID0gNTA7CglwdWJsaWMgJHBhcGVycyA9IDU7Cn0KCmZ1bmN0aW9uIHBhZExlZnQoJHRleHQsICRsZW5ndGgpewoJJGNsID0gbWJfc3RybGVuKCR0ZXh0KTsKCWlmKCRjbDwkbGVuZ3RoKXsKCQkkdGV4dCA9c3RyX3JlcGVhdCgiICIsICRsZW5ndGggLSAkY2wpLiR0ZXh0OwoJfQoJcmV0dXJuICR0ZXh0Owp9CmZ1bmN0aW9uIHBhZFJpZ2h0KCR0ZXh0LCAkbGVuZ3RoKXsKCSRjbCA9IG1iX3N0cmxlbigkdGV4dCk7CglpZigkY2w8JGxlbmd0aCl7CgkJJHRleHQgPSAkdGV4dC5zdHJfcmVwZWF0KCIgIiwgJGxlbmd0aCAtICRjbCk7Cgl9CglyZXR1cm4gJHRleHQ7Cn0KCgoKJGNvbDEgPSAxMTsKJGNvbDIgPSAxMTsKJGNvbDMgPSAxMTsKJGNvbDQgPSAxMTsKJGNvbDUgPSAxMTsKJGNvbDYgPSAxMzsKJGNvbDcgPSAxMTsKCiRidXllcnMgPSBuZXcgRGVwYXJ0bWVudDsKJGJ1eWVycy0+bmFtZSA9ICLQl9Cw0LrRg9C/0L7QuiI7CiRidXllcnMtPmFkZEVtcGxveWVlcyg5LCBuZXcgTWFuYWdlcigxKSk7CiRidXllcnMtPmFkZEVtcGxveWVlcygzLCBuZXcgTWFuYWdlcigyKSk7CiRidXllcnMtPmFkZEVtcGxveWVlcygyLCBuZXcgTWFya2V0ZXIoMSkpOwokYnV5ZXJzLT5hZGRMZWFkZXIobmV3IE1hbmFnZXIoMikpOwoKJHNlbGxlcnMgPSBuZXcgRGVwYXJ0bWVudDsKJHNlbGxlcnMtPm5hbWUgPSAi0J/RgNC+0LTQsNC2IjsKJHNlbGxlcnMtPmFkZEVtcGxveWVlcygxMiwgbmV3IE1hbmFnZXIoMSkpOwokc2VsbGVycy0+YWRkRW1wbG95ZWVzKDYsIG5ldyBNYXJrZXRlcigxKSk7CiRzZWxsZXJzLT5hZGRFbXBsb3llZXMoMywgbmV3IEFuYWx5dGljcygxKSk7CiRzZWxsZXJzLT5hZGRFbXBsb3llZXMoMiwgbmV3IEFuYWx5dGljcygyKSk7CiRzZWxsZXJzLT5hZGRMZWFkZXIobmV3IE1hcmtldGVyKDIpKTsKCiRhZHZlcnRpc2VycyA9IG5ldyBEZXBhcnRtZW50OwokYWR2ZXJ0aXNlcnMtPm5hbWUgPSAi0KDQtdC60LvQsNC80YsiOwokYWR2ZXJ0aXNlcnMtPmFkZEVtcGxveWVlcygxNSwgbmV3IE1hcmtldGVyKDEpKTsKJGFkdmVydGlzZXJzLT5hZGRFbXBsb3llZXMoMTAsIG5ldyBNYXJrZXRlcigyKSk7CiRhZHZlcnRpc2Vycy0+YWRkRW1wbG95ZWVzKDgsIG5ldyBNYW5hZ2VyKDEpKTsKJGFkdmVydGlzZXJzLT5hZGRFbXBsb3llZXMoMiwgbmV3IEVuZ2luZWVyKDEpKTsKJGFkdmVydGlzZXJzLT5hZGRMZWFkZXIobmV3IE1hbmFnZXIoMSkpOwoKJGxvZ2lzdGljcyA9IG5ldyBEZXBhcnRtZW50OwokbG9naXN0aWNzLT5uYW1lID0gItCb0L7Qs9C40YHRgtC40LrQuCI7CiRsb2dpc3RpY3MtPmFkZEVtcGxveWVlcygxMywgbmV3IE1hbmFnZXIoMSkpOwokbG9naXN0aWNzLT5hZGRFbXBsb3llZXMoNSwgbmV3IE1hbmFnZXIoMikpOwokbG9naXN0aWNzLT5hZGRFbXBsb3llZXMoNSwgbmV3IEVuZ2luZWVyKDEpKTsKJGxvZ2lzdGljcy0+YWRkTGVhZGVyKG5ldyBNYW5hZ2VyKDEpKTsKCiRkZXBhcnRtZW50cyA9IGFycmF5KCRidXllcnMsICRzZWxsZXJzLCAkYWR2ZXJ0aXNlcnMsICRsb2dpc3RpY3MpOwoKZm9yZWFjaCAoJGRlcGFydG1lbnRzIGFzICRkZXBhcnRtZW50KSB7CgkkdG90YWxFbXArPSRkZXBhcnRtZW50LT5nZXRUb3RhbEVtcGxveWVlcygpOwoJJHRvdGFsSW5jKz0kZGVwYXJ0bWVudC0+Z2V0VG90YWxJbmNvbWUoKTsKCSR0b3RhbENvZis9JGRlcGFydG1lbnQtPmdldFRvdGFsQ29mZmVlKCk7CgkkdG90YWxQYXArPSRkZXBhcnRtZW50LT5nZXRUb3RhbFBhcGVycygpOwoJJHRvdGFsUHJpY2UrPWZsb29yKCRkZXBhcnRtZW50LT5nZXRUb3RhbEluY29tZSgpLyRkZXBhcnRtZW50LT5nZXRUb3RhbFBhcGVycygpKTsKfQoKJGF2SW5jb21lID0gZmxvb3IoJHRvdGFsSW5jL2NvdW50KCRkZXBhcnRtZW50cykpOwokYXZFbXAgPSBmbG9vcigkdG90YWxFbXAgLyBjb3VudCgkZGVwYXJ0bWVudHMpKTsKJGF2Q29mID0gZmxvb3IoJHRvdGFsQ29mIC8gY291bnQoJGRlcGFydG1lbnRzKSk7CiRhdlBhcCA9IGZsb29yKCR0b3RhbFBhcCAvIGNvdW50KCRkZXBhcnRtZW50cykpOwokYXZQcmljZSA9IGZsb29yKCR0b3RhbFByaWNlIC8gY291bnQoJGRlcGFydG1lbnRzKSk7CgplY2hvIChwYWRSaWdodCgi0JTQtdC/0LDRgNGC0LDQvNC10L3RgiIsJGNvbDEpLgoJcGFkTGVmdCgi0YHQvtGC0YAuIiwkY29sMikuCglwYWRMZWZ0KCLRgtGD0LPRgC4iLCRjb2wzKS4KCXBhZExlZnQoItC60L7RhNC1IiwkY29sNCkuCglwYWRMZWZ0KCLRgdGC0YAuIiwkY29sNSkuCglwYWRMZWZ0KCLRgtGD0LPRgC4v0YHRgtGALiIsJGNvbDYpLiJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CgoKCmZvcmVhY2ggKCRkZXBhcnRtZW50cyBhcyAkZGVwYXJ0bWVudCl7CgllY2hvIHBhZFJpZ2h0KCRkZXBhcnRtZW50LT5uYW1lLCRjb2wxKS4KCXBhZExlZnQoJGRlcGFydG1lbnQtPmdldFRvdGFsRW1wbG95ZWVzKCksJGNvbDIpLgoJcGFkTGVmdCgkZGVwYXJ0bWVudC0+Z2V0VG90YWxJbmNvbWUoKSwkY29sMykuCglwYWRMZWZ0KCRkZXBhcnRtZW50LT5nZXRUb3RhbENvZmZlZSgpLCRjb2w0KS4KCXBhZExlZnQoJGRlcGFydG1lbnQtPmdldFRvdGFsUGFwZXJzKCksJGNvbDUpLgoJcGFkTGVmdChmbG9vcigkZGVwYXJ0bWVudC0+Z2V0VG90YWxJbmNvbWUoKS8kZGVwYXJ0bWVudC0+Z2V0VG90YWxQYXBlcnMoKSksJGNvbDYpLiJcbiI7Cn0KCgplY2hvICgKCXBhZFJpZ2h0KCLQodGA0LXQtNC90LXQtSIsICRjb2wxKS4KCXBhZExlZnQoJGF2RW1wLCAkY29sMikuCglwYWRMZWZ0KCRhdkluY29tZSwgJGNvbDMpLgoJcGFkTGVmdCgkYXZDb2YsICRjb2w0KS4KCXBhZExlZnQoJGF2UGFwLCAkY29sNSkuCglwYWRMZWZ0KCRhdlByaWNlLCAkY29sNikuIlxuIgopOwoKZWNobygKCXBhZFJpZ2h0KCLQktGB0LXQs9C+IiwkY29sMSkuCglwYWRMZWZ0KCR0b3RhbEVtcCwgJGNvbDIpLgoJcGFkTGVmdCgkdG90YWxJbmMsICRjb2wzKS4KCXBhZExlZnQoJHRvdGFsQ29mLCAkY29sNCkuCglwYWRMZWZ0KCR0b3RhbFBhcCwgJGNvbDUpLgoJcGFkTGVmdCgkdG90YWxQcmljZSwgJGNvbDYpCgkKCQoJKTs=