<?php
header("Content-Type: text/plain");
/* Программа для расчета зарплаты сотрудников международной динамично развивающейся компании «Вектор»
Объекты в PHP, часть 2
*/
class Employee
{
public $norm = 40; // недельная норма рабочих часов
public $name; // фамилия-имя
public $rate; // часовая ставка (сколько он получает тугриков за час работы)
public $hours = array(); // массив, содержащий отработанные часы по неделям
public function __construct($name, $rate)
{
// задаем имя и часовую ставку
$this->name = $name;
$this->rate = $rate;
}
/* Считает общее число отработанных часов */
public function getTotalHoursWorked()
{
// Просто складываем значения часов в массиве
}
/* Считает число часов переработки */
public function getOvertimeHours() {
$totalOvertimeHours=0;
$overtimeHours=0;
foreach ($this->hours as $week) {
if ($week > $this->norm) {
$overtimeHours = $week - $this->norm;
}
$totalOvertimeHours += $overtimeHours;
}
return $totalOvertimeHours;
}
/* Считает зарплату */
public function getSalary()
{
// Получаем число отработанных часов
$totalHours = $this->getTotalHoursWorked();
$overtimeHours = $this->getOvertimeHours();
// и умножаем на часовую ставку
$salary = (($totalHours - $overtimeHours) * $this->rate)+($overtimeHours * $this->rate * 2);
return $salary;
}
/* Выводит короткое имя */
public function getShortName() {
$shortName = preg_replace ("/(\\w*)(\\s+)(\\w)(\\w*)/u", "$1 $3.", $this->name); return $shortName;
}
}
$ivan = new Employee("Иванов Иван", 10);
// name и rate заданы через конструктор, потому осталось лишь написать часы
$ivan->hours = array(40, 40, 40, 40); // Иван работает по 40 часов в неделю
$peter = new Employee("Петров Петр", 8);
$peter->hours = array(40, 10, 40, 50); // Петр взял отгул и потому отработал меньше часов,
// Компания
class Company {
public $name = "";
public $employees = array(); // Работники public $totalHours = 0; // Всего часов для всех работников
public $totalSalary = 0; // Всего бананов выплачено
public $totalOvertime = 0; // Всего переработки
public function __construct ($name) {
$this->$name = $name;
}
// Добавление работника
public function setEmployee ($employee) {
$this->employees[] = $employee;
}
// Расчет часов работы для всех работников
public function getTotalHours () {
foreach ($this->employees as $employee) {
$this->totalHours += $employee->getTotalHoursWorked();
}
return $this->totalHours;
}
// Расчет оплаты для всех работников
public function getTotalSalary () {
foreach ($this->employees as $employee) {
$this->totalSalary += $employee->getSalary();
}
return $this->totalSalary;
}
// Расчет часов переработки для всех работников
public function getTotalOvertime () {
foreach ($this->employees as $employee) {
$this->totalOvertime += $employee->getOvertimeHours();
}
return $this->totalOvertime;
}
}
$company = new Company("Vector");
// Добавляем работников в компанию
$company->setEmployee($ivan);
$company->setEmployee($peter);
// Ширина колонок
$col1 = 30;
$col2 = 8;
$col3 = 15;
$col4 = 8;
$col5 = 8;
// Добавление пробелов слева
function padLeft($string, $length) {
return $string;
}
// Добавление пробелов справа
function padRight($string, $length) {
return $string;
}
// Заголовок таблицы
echo padRight("Сотрудник", $col1) .
padLeft("Часы", $col2) .
padLeft("Переработка", $col3) .
padLeft("Ставка", $col4) .
padLeft("З/п", $col5) . "\n\n";
// Сама таблица
foreach ($company->employees as $employee) {
echo padRight($employee->getShortName(), $col1) .
padLeft($employee->getTotalHoursWorked(), $col2) .
padLeft($employee->getOvertimeHours(), $col3) .
padLeft($employee->rate, $col4) .
padLeft($employee->getSalary(), $col5) . "\n";
}
// Итого
echo padRight("Всего:", $col1) .
padLeft($company->getTotalHours(), $col2) .
padLeft($company->getTotalOvertime(), $col3) .
padLeft("", $col4) .
padLeft($company->getTotalSalary(), $col5) . "\n\n";
?>