<?php
/**
* Created by PhpStorm.
* User: Саша
* Date: 17.03.2017
* Time: 20:25
*/
class Employee {
public $rank = 1;
public $coffee = 0;
public $pages = 0;
public $basicSalary = 0;
public $boss = false;
function __construct($rank, $boss = false) {
$this->rank = $rank;
$this->boss = $boss;
}
public function getSalary() {
$rate = 0;
if ($this->boss == true) {
$bossRank = 1.5;
} else {
$bossRank = 1;
}
switch ($this->rank) {
case 1:
$rate = 1;
break;
case 2:
$rate = 1.25;
break;
case 3:
$rate = 1.5;
break;
}
$rate *= $bossRank;
return $this->basicSalary * $rate;
}
public function getCoffee()
{
if ($this->boss == true) {
return $this->coffee * 2;
} else {
return $this->coffee;
}
}
public function getPages()
{
if ($this->boss) {
return 0;
} else {
return $this->pages;
}
}
}
class Manager extends Employee {
public $rank = 1;
public $boss = false;
}
class Marketer extends Employee {
public $rank = 1;
public $boss = false;
}
class Engineer extends Employee {
public $rank = 1;
public $boss = false;
}
class Analyst extends Employee {
public $rank = 1;
public $boss = false;
}
class Department {
private $employees = [];
private $name;
function __construct($name) {
$this->name = $name;
}
public function addEmployee($profession, $number, $rank = 1, $boss = false) {
$variable = '';
for ($i = 0; $i < $number; $i++) {
$variable = new $profession($rank, $boss);
switch ($profession) {
case 'Manager':
$variable->basicSalary = 500;
$variable->coffee = 20;
$variable->pages = 200;
break;
case 'Marketer':
$variable->basicSalary = 400;
$variable->coffee = 15;
$variable->pages = 150;
break;
case 'Engineer':
$variable->basicSalary = 200;
$variable->coffee = 5;
$variable->pages = 50;
break;
case 'Analyst':
$variable->basicSalary = 800;
$variable->coffee = 50;
$variable->pages = 5;
break;
}
$this->employees[] = $variable;
}
}
public function getName() {
return $this->name;
}
public function getEmployeesNumber() {
return count($this->employees);
}
public function getAllDepartmentSalary() {
$result = 0;
foreach ($this->employees as $employee) {
$result += $employee->getSalary();
}
return $result;
}
public function getAllDepartmentCoffee() {
$result = 0;
foreach ($this->employees as $employee) {
$result += $employee->getCoffee();
}
return $result;
}
public function getAllDepartmentPages() {
$result = 0;
foreach ($this->employees as $employee) {
$result += $employee->getPages();
}
return $result;
}
}
function padRight($x, $y) {
return $x . str_repeat(" ", $y - mb_strlen($x));
}
function padLeft($x, $y) {
return str_repeat(" ", $y - mb_strlen($x)) . $x;
}
function getTheValues($departments)
{
$col1 = 15;
$col2 = 11;
$countedColumns = $col1 + ($col2 * 5);
$numberOfDepartments = count($departments);
$allEmployees = 0;
$allSalary = 0;
$allCoffee = 0;
$allPages = 0;
$allMoneyPerPage = 0;
echo padRight("Департамент", $col1) .
padLeft("сотр.", $col2) .
padLeft("тугр.", $col2) .
padLeft("кофе", $col2) .
padLeft("стр.", $col2) .
padLeft("тугр./стр.", $col2) ."\n";
echo str_repeat("-", $countedColumns) ."\n";
foreach ($departments as $key => $value) {
$name = $departments[$key]->getName();
$employees = $departments[$key]->getEmployeesNumber();
$salary = $departments[$key]->getAllDepartmentSalary();
$coffee = $departments[$key]->getAllDepartmentCoffee();
$pages = $departments[$key]->getAllDepartmentPages();
$moneyPerPage = round($salary / $pages, 2);
echo padRight($name, $col1) .
padLeft($employees, $col2) .
padLeft($salary, $col2) .
padLeft($coffee, $col2) .
padLeft($pages, $col2) .
padLeft($moneyPerPage, $col2) ."\n";
$allEmployees += $employees;
$allSalary += $salary;
$allCoffee += $coffee;
$allPages += $pages;
$allMoneyPerPage += $moneyPerPage;
}
echo str_repeat("-", $countedColumns) ."\n";
echo padRight("Среднее", $col1) .
padLeft($allEmployees/$numberOfDepartments, $col2) .
padLeft($allSalary/$numberOfDepartments, $col2) .
padLeft($allCoffee/$numberOfDepartments, $col2) .
padLeft($allPages/$numberOfDepartments, $col2) .
padLeft($allMoneyPerPage/$numberOfDepartments, $col2) ."\n";
echo padRight("Всего", $col1) .
padLeft($allEmployees, $col2) .
padLeft($allSalary, $col2) .
padLeft($allCoffee, $col2) .
padLeft($allPages, $col2) .
padLeft($allMoneyPerPage, $col2) ."\n";
}
$procurementDepartment = new Department("Закупок");
$procurementDepartment->AddEmployee('Manager', 9);
$procurementDepartment->AddEmployee('Manager', 3, 2);
$procurementDepartment->AddEmployee('Manager', 2, 3);
$procurementDepartment->AddEmployee('Marketer', 2, 1);
$procurementDepartment->AddEmployee('Manager', 1, 2, true);
$sellingDepartment = new Department("Продаж");
$sellingDepartment->AddEmployee('Manager', 12);
$sellingDepartment->AddEmployee('Marketer', 6);
$sellingDepartment->AddEmployee('Analyst', 3);
$sellingDepartment->AddEmployee('Analyst', 2, 2);
$sellingDepartment->AddEmployee('Manager', 1, 2, true);
$advertisingDepartment = new Department("Рекламы");
$advertisingDepartment->AddEmployee('Marketer', 15);
$advertisingDepartment->AddEmployee('Marketer', 10, 2);
$advertisingDepartment->AddEmployee('Manager', 8);
$advertisingDepartment->AddEmployee('Engineer', 2);
$advertisingDepartment->AddEmployee('Manager', 1, 3, true);
$logisticsDepartment = new Department("Логистики");
$logisticsDepartment->AddEmployee('Manager', 13);
$logisticsDepartment->AddEmployee('Manager', 5, 2);
$logisticsDepartment->AddEmployee('Engineer', 5);
$logisticsDepartment->AddEmployee('Manager', 1, 1, true);
$departments = [$procurementDepartment, $sellingDepartment, $advertisingDepartment, $logisticsDepartment];
getTheValues($departments);
preferences:
54.76 ms | 402 KiB | 5 Q