fork download
  1. <?php
  2. //С крипа берет начало каждый класс. Надо будет сделать абстрактным
  3. abstract class Creep
  4. {
  5. //Базовые данные. потом стоит изменить к ним доступ
  6. protected $salary;
  7. protected $thirst;
  8. protected $output;
  9. private $tier;
  10. private $isBig;
  11.  
  12. //Давать доступ только через конструктор
  13. public function __construct($tier, $isBig){
  14. $this->tier = $tier;
  15. $this->isBig = $isBig;
  16. }
  17.  
  18. //Выводит зарплату
  19. public function countTierSalary(){
  20. $salary = $this->salary;
  21. switch($this->tier){
  22. case 2 :
  23. $salary += $salary * 0.25;
  24. break;
  25. case 3 :
  26. $salary += $salary * 0.5;
  27. break;
  28. }
  29. //Если крип- босс, то поднимаем оплату
  30. if($this->isBig == 1){
  31. $salary += $salary * 0.5;
  32. }
  33. return $salary;
  34. }
  35.  
  36. //Выводит потребление
  37. public function countCreepThirst(){
  38. $thirst = $this->thirst;
  39. if($this->isBig == 1){
  40. $thirst += $thirst * 0.5;
  41. }
  42. return $thirst;
  43. }
  44.  
  45. //Выводит выхлоп
  46. public function countCreepOutput(){
  47. $output = $this->output;
  48. if($this->isBig == 1){
  49. $output = 0;
  50. }
  51. return $output;
  52. }
  53. }
  54.  
  55. //Менеджеры
  56. class Manager extends Creep
  57. {
  58. protected $salary = 500;
  59. protected $thirst = 20;
  60. protected $output = 200;
  61. }
  62.  
  63. //Маркетологи
  64. class Marketer extends Creep
  65. {
  66. protected $salary = 400;
  67. protected $thirst = 15;
  68. protected $output = 150;
  69. }
  70.  
  71. //Инженеры
  72. class Engeneer extends Creep
  73. {
  74. protected $salary = 200;
  75. protected $thirst = 5;
  76. protected $output = 15;
  77. }
  78.  
  79. //Аналитики
  80. class Analyst extends Creep
  81. {
  82. protected $salary = 800;
  83. protected $thirst = 50;
  84. protected $output = 5;
  85. }
  86.  
  87.  
  88. //Типы сотрудников
  89. $me1b = new Manager(1, 1);
  90. $me2b = new Manager(2, 1);
  91. $me1 = new Manager(1, 0);
  92. $me2 = new Manager(2, 0);
  93. $me3 = new Manager(3, 0);
  94. $ma2b = new Marketer(2, 1);
  95. $ma3b = new Marketer(3, 1);
  96. $ma1 = new Marketer(1, 0);
  97. $ma2 = new Marketer(2, 0);
  98. $an1 = new Analyst(1, 0);
  99. $an2 = new Analyst(2, 0);
  100. $en1 = new Engeneer(1, 0);
  101.  
  102. //Абстрактный департамент, с него пойдут 4 департамента
  103. abstract class Department
  104. {
  105. //Массив сотрудников
  106. protected $listOfCreeps = array();
  107.  
  108. //Метод, записывающий работника в массив
  109. public function fillListOfCreeps($creep){
  110. $this->listOfCreeps[] = $creep;
  111. }
  112.  
  113. //Метод, выводящий кол-во сотрудников в департаменте
  114. public function countNumberOfCreeps(){
  115. $numberOfCreeps = count($this->listOfCreeps);
  116. return $numberOfCreeps;
  117. }
  118.  
  119. //Метод, выводящий расходы на зарплату
  120. public function countSalary(){
  121. $sum = 0;
  122. foreach($this->listOfCreeps as $creep){
  123. $sum += $creep->countTierSalary();
  124. }
  125. return $sum;
  126. }
  127.  
  128. //Метод, выводящий потребление кофе
  129. public function countThirst(){
  130. $sum = 0;
  131. foreach($this->listOfCreeps as $creep){
  132. $sum += $creep->countCreepThirst();
  133. }
  134. return $sum;
  135. }
  136.  
  137. //Метод, выводящий кол-во страниц
  138. public function countNumOfPages(){
  139. $sum = 0;
  140. foreach($this->listOfCreeps as $creep){
  141. $sum += $creep->countCreepOutput();
  142. }
  143. return $sum;
  144. }
  145.  
  146. //Средний расход тугриков на страницу
  147. public function countCharge(){
  148. $charge = $this->countSalary() / $this->countNumOfPages();
  149. return floor($charge);
  150. }
  151.  
  152. public function getName(){
  153. return $this->name;
  154. }
  155. }
  156.  
  157. //Отдел закупок
  158. class Procurement extends Department
  159. {
  160. protected $name = 'Закупок';
  161. }
  162.  
  163. //Забиваю отдел закупок
  164. $procurement = new Procurement;
  165. $procurement->fillListOfCreeps($me2b);
  166.  
  167. for($i = 0; $i < 9; $i++){
  168. $procurement->fillListOfCreeps($me1);
  169. }
  170.  
  171. $procurement->fillListOfCreeps($me2);
  172. $procurement->fillListOfCreeps($me2);
  173. $procurement->fillListOfCreeps($me2);
  174.  
  175. $procurement->fillListOfCreeps($me3);
  176. $procurement->fillListOfCreeps($me3);
  177.  
  178. $procurement->fillListOfCreeps($ma1);
  179. $procurement->fillListOfCreeps($ma1);
  180.  
  181. /*
  182. //Вывожу отдел закупок
  183. print "Людей в отделе: ". $procurement->countNumberOfCreeps(). "\n".
  184. "Общая затрата на зарплату: ". $procurement->countSalary(). "\n".
  185. "Общие затраты на кофе: ". $procurement->countThirst(). "\n".
  186. "Общий выхлоп: ". $procurement->countNumOfPages(). "\n".
  187. "Расход денег на страницу: ". $procurement->countCharge(). "\n";
  188. */
  189.  
  190. //Отдел продаж
  191. class Selling extends Department
  192. {
  193. protected $name = 'Продаж';
  194. }
  195.  
  196. //Забиваю отдел продаж
  197. $selling = new Selling;
  198. for($i = 0; $i < 12; $i++){
  199. $selling->fillListOfCreeps($me1);
  200. }
  201.  
  202. for($i = 0; $i < 6; $i++){
  203. $selling->fillListOfCreeps($ma1);
  204. }
  205.  
  206. $selling->fillListOfCreeps($an1);
  207. $selling->fillListOfCreeps($an1);
  208. $selling->fillListOfCreeps($an1);
  209.  
  210. $selling->fillListOfCreeps($an2);
  211. $selling->fillListOfCreeps($an2);
  212.  
  213. $selling->fillListOfCreeps($ma2b);
  214.  
  215. //Отдел рекламы
  216. class Marketing extends Department
  217. {
  218. protected $name = 'Рекламы';
  219. }
  220.  
  221. //Забиваю отдел рекламы
  222. $marketing = new Marketing;
  223.  
  224. for($i = 0; $i < 15; $i++){
  225. $marketing->fillListOfCreeps($ma1);
  226. }
  227.  
  228. for($i = 0; $i < 10; $i++){
  229. $marketing->fillListOfCreeps($ma2);
  230. }
  231.  
  232. for($i = 0; $i < 8; $i++){
  233. $marketing->fillListOfCreeps($me1);
  234. }
  235.  
  236. $marketing->fillListOfCreeps($en1);
  237. $marketing->fillListOfCreeps($en1);
  238.  
  239. $marketing->fillListOfCreeps($ma3b);
  240.  
  241. //Отдел логистики
  242. class Logistics extends Department
  243. {
  244. protected $name = 'Логистики';
  245. }
  246.  
  247. //Забиваю работников логистики
  248. $logistics = new Logistics;
  249.  
  250. for($i = 0; $i < 13; $i++){
  251. $logistics->fillListOfCreeps($me1);
  252. }
  253.  
  254. for($i = 0; $i < 5; $i++){
  255. $logistics->fillListOfCreeps($me2);
  256. }
  257.  
  258. for($i = 0; $i < 5; $i++){
  259. $logistics->fillListOfCreeps($en1);
  260. }
  261.  
  262. $logistics->fillListOfCreeps($me1b);
  263.  
  264. //Создаю класс компании
  265. class Company
  266. {
  267. //Массив со всеми департаментами
  268. private $fullList = array();
  269.  
  270. //Доступ к массиву
  271. public function addDepartment($department){
  272. $this->fullList[] = $department;
  273. }
  274.  
  275. //получить массив
  276. public function getListOfDepartments(){
  277. return $this->fullList;
  278. }
  279.  
  280. //Общее кол-во работников
  281. public function getNumOfCreeps(){
  282. $sum = 0;
  283. foreach($this->fullList as $department){
  284. $sum += $department->countNumberOfCreeps();
  285. }
  286. return $sum;
  287. }
  288.  
  289. //Общие затраты на зп
  290. public function getFinalSalary(){
  291. $sum = 0;
  292. foreach($this->fullList as $department){
  293. $sum += $department->countSalary();
  294. }
  295. return $sum;
  296. }
  297.  
  298. //Всего кофе выжрали
  299. public function getFinalThirst(){
  300. $sum = 0;
  301. foreach($this->fullList as $department){
  302. $sum += $department->countThirst();
  303. }
  304. return $sum;
  305. }
  306.  
  307. //Всего выхлопа
  308. public function getFinalOutput(){
  309. $sum = 0;
  310. foreach($this->fullList as $department){
  311. $sum += $department->countNumOfPages();
  312. }
  313. return $sum;
  314. }
  315.  
  316. //Затраты на страничку
  317. public function getFinalCharge(){
  318. $charge = $this->getFinalSalary() / $this->getFinalOutput();
  319. return floor($charge);
  320. }
  321. }
  322.  
  323. //Создаю вектор
  324. $vector = new Company;
  325.  
  326. //Забиваю департаменты
  327. $vector->addDepartment($procurement);
  328. $vector->addDepartment($selling);
  329. $vector->addDepartment($marketing);
  330. $vector->addDepartment($logistics);
  331.  
  332.  
  333. //Функция для забивания строки пробелами справа
  334. function padRight($string){
  335.  
  336. //Ширина колонки
  337. $column = 13;
  338.  
  339. $length = mb_strlen(strval($string));
  340. $numOfPads = $column - $length;
  341. $filledColumn = strval($string). str_repeat(" ", $numOfPads);
  342. echo $filledColumn;
  343. }
  344.  
  345. //Функция для забивания строки пробелами справа
  346. function padLeft($string){
  347.  
  348. //Ширина колонки
  349. $column = 13;
  350.  
  351. $length = mb_strlen(strval($string));
  352. $numOfPads = $column - $length;
  353. $filledColumn = str_repeat(" ", $numOfPads). strval($string);
  354. echo $filledColumn;
  355. }
  356.  
  357. //Выводим табличку
  358. echo padRight('Департамент'). padLeft('сотр.'). padLeft('денег').
  359. padLeft('кофе'). padLeft('стр.'). padLeft('кпд'). "\n";
  360.  
  361. foreach($vector->getListOfDepartments() as $department){
  362. echo padRight($department->getName()). padLeft($department->countNumberOfCreeps()).
  363. padLeft($department->countSalary()). padLeft($department->countThirst()).
  364. padLeft($department->countNumOfPages()). padLeft($department->countCharge()). "\n";
  365. }
  366.  
  367. echo padRight('Итого'). padLeft($vector->getNumOfCreeps()). padLeft($vector->getFinalSalary()).
  368. padLeft($vector->getFinalThirst()). padLeft($vector->getFinalOutput()).
  369. padLeft($vector->getFinalCharge());
Success #stdin #stdout 0.02s 52472KB
stdin
Standard input is empty
stdout
Департамент          сотр.        денег         кофе         стр.          кпд
Закупок                 17       9612.5          340         3100            3
Продаж                  24        13550        602.5         3325            4
Рекламы                 36        16300        567.5         5380            3
Логистики               24        11375          415         3675            3
Итого                  101      50837.5         1925        15480            3