Advertisement
Xom9ik

Lab_6/3 var (IIl semester)

Dec 7th, 2017
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 16.13 KB | None | 0 0
  1. //Lab_6
  2. #include "stdafx.h"
  3. #include <stdio.h>
  4. #include <conio.h>
  5. #include <stdlib.h>
  6. #include <math.h>
  7. #include <iostream>
  8. #include <locale.h>
  9. #include <string>
  10. #include <windows.h>
  11.  
  12. using namespace std;
  13. //3.    Классы табель выходов, инженер и бригадир.
  14. //Класс обработчик реализует заполнение табеля выходов и расчет заработной платы сотрудников на основании информации об отработанном времени.
  15. //Печать информации о бригадире включает в себя информацию о бригаде.
  16. class TSotrudnik
  17. {
  18. protected:
  19.     int FId;
  20.     string FName;
  21.     string FSurname;
  22. public:
  23.     TSotrudnik(); // Конструктор по умолчанию
  24.     TSotrudnik(int Id, string Name, string Surname);
  25.     virtual ~TSotrudnik(); // виртуальный деструктор
  26.     virtual void Print() = 0; // виртуальный метод вывода сведений о Сотруднике      
  27.     virtual void Input() = 0;// виртуальный метод ввода сведений о Сотруднике
  28.     int GetID() { return FId; }
  29.     string GetName() { return FName; }
  30.     string GetSurname() { return FSurname; }
  31.     void SetID(int ID) { FId = ID; }
  32.     void SetName(string name) { FName = name; }
  33.     void SetSurname(string surname) { FSurname = surname; }
  34. };
  35. class TEngineer :public TSotrudnik
  36. {
  37. private:
  38.     int FTimeWork;
  39. public:
  40.     TEngineer(int Id, string Name, string Surname, int TimeWork); // Конструктор с параметрами
  41.     TEngineer(); // Конструктор по умолчанию
  42.     TEngineer(TEngineer &A); // Конструктор копирования
  43.     ~TEngineer();// Деструктор по умолчанию
  44.     TEngineer& operator =(const TEngineer &A); // Перегруженная операция =
  45.     int GetTimeWork() { return FTimeWork; }
  46.     void SetTimeWork(int TimeWorks)
  47.     {
  48.         FTimeWork = TimeWorks;
  49.     }
  50.     void Input(); // перегруженный виртуальный метод
  51.     void Print(); // перегруженный виртуальный метод
  52. };
  53. class TBrigadier :public TSotrudnik
  54. {
  55. private:
  56.     int FTimeWork;
  57. public:
  58.     TBrigadier();// Конструктор по умолчанию
  59.     TBrigadier(int Id, string Name, string Surname, int TimeWork);// Конструктор инициализатор
  60.     TBrigadier(TBrigadier &A);// Конструктор копирования
  61.     ~TBrigadier();// Деструктор
  62.     TBrigadier& operator =(const TBrigadier &A);// Перегруженная операция =
  63.     int GetTimeWork() { return FTimeWork; }
  64.     void SetTimeWork(int TimeWork) { FTimeWork = TimeWork; }
  65.     void Input();// перегруженный виртуальный метод
  66.     void Print();// перегруженный виртуальный метод
  67. };
  68. TSotrudnik::TSotrudnik()
  69. {// Конструктор по умолчанию базового класса Сотрудник
  70.     FId = 0;
  71.     FName = "";
  72.     FSurname = "";
  73.     cout << "**** Конструктор по умолчанию базового класса Сотрудник" << endl;
  74. }
  75. TSotrudnik::TSotrudnik(int Id, string Name, string Surname)
  76. {// Конструктор инициализатор базового класса Сотрудник
  77.     FId = Id;
  78.     FName = Name;
  79.     FSurname = Surname;
  80.     cout << "**** Конструктор инициализатор базового класса Сотрудник" << endl;
  81. }
  82. TSotrudnik::~TSotrudnik()
  83. {//Деструктор базового класса Сотрудник
  84.     cout << "**** Деструктор базового класса Сотрудник" << endl;
  85. }
  86. TEngineer::TEngineer(int Id, string Name, string Surname, int TimeWork) :TSotrudnik(Id, Name, Surname)
  87. {// Конструктор инициализатор класса Инженер
  88.     FTimeWork = TimeWork;
  89.     cout << "**** Конструктор инициализатор класса Инженер" << endl;
  90. }
  91. TEngineer::TEngineer()
  92. {//Конструктор по умолчанию класса Инженер
  93.     FId = 0;
  94.     FName = "";
  95.     FSurname = "";
  96.     FTimeWork = 0;
  97.     cout << "**** Конструктор по умолчанию класса Инженер" << endl;
  98. }
  99. TBrigadier::TBrigadier(int Id, string Name, string Surname, int TimeWork) :TSotrudnik(Id, Name, Surname)
  100. {//Конструктор инициализатор класса Бригадир
  101.     FTimeWork = TimeWork;
  102.     cout << "**** Конструктор инициализатор класса Бригадир" << endl;
  103. }
  104. TBrigadier::TBrigadier()
  105. {//Конструктор по умолчанию класса Бригадир
  106.     FId = 0;
  107.     FName = "";
  108.     FSurname = "";
  109.     FTimeWork = 0;
  110.     cout << "**** Конструктор по умолчанию класса Бригадир" << endl;
  111. }
  112. TEngineer::TEngineer(TEngineer &A)
  113. {//Конструктор копирования класса Инженер
  114.     FId = A.FId;
  115.     FName = A.FName;
  116.     FSurname = A.FSurname;
  117.     FTimeWork = A.FTimeWork;
  118.     cout << "**** Конструктор копирования класса Инженер" << endl;
  119. }
  120. TBrigadier& TBrigadier::operator =(const TBrigadier &A)
  121. {//Перегруженная операция = класса Бригадир
  122.     FId = A.FId;
  123.     FName = A.FName;
  124.     FSurname = A.FSurname;
  125.     FTimeWork = A.FTimeWork;
  126.     cout << "**** Перегруженная операция = класса Бригадир" << endl;
  127.     return *this;
  128. }
  129. TEngineer& TEngineer::operator =(const TEngineer &A)
  130. {//Перегруженная операция = класса Инженер
  131.     FId = A.FId;
  132.     FName = A.FName;
  133.     FSurname = A.FSurname;
  134.     FTimeWork = A.FTimeWork;
  135.     cout << "**** Перегруженная операция = класса Инженер" << endl;
  136.     return *this;
  137. }
  138. TBrigadier::TBrigadier(TBrigadier &A)
  139. {//Конструктор копирования класса Бригадир
  140.     FId = A.FId;
  141.     FName = A.FName;
  142.     FSurname = A.FSurname;
  143.     FTimeWork = A.FTimeWork;
  144.     cout << "****Конструктор копирования класса Бригадир" << endl;
  145. }
  146. void TEngineer::Input()
  147. {//Ввод сведений о инженере:
  148.     cout << "Ввод сведений об Инженере:" << endl;
  149.     cout << "Введите ID Инженера: ";
  150.     cin >> FId;
  151.     cout << "Введите Имя: ";
  152.     cin >> FName;
  153.     cout << "Введите Фамилию: ";
  154.     cin >> FSurname;
  155.     cout << "Введите отработанное время (в часах): ";
  156.     cin >> FTimeWork;
  157.     cout << "**** Перегруженный виртуальный метод Input класса Инженер" << endl;
  158. }
  159. void TBrigadier::Input()
  160. {//Ввод сведений о бригадире
  161.     cout << "Ввод сведений о Бригадире:" << endl;
  162.     cout << "Введите ID Бригадира: ";
  163.     cin >> FId;
  164.     cout << "Введите Имя: ";
  165.     cin >> FName;
  166.     cout << "Введите Фамилию: ";
  167.     cin >> FSurname;
  168.     cout << "Введите отработанное время (в часах): ";
  169.     cin >> FTimeWork;
  170.     cout << "**** Перегруженный виртуальный метод Input класса Бригадир" << endl;
  171. }
  172. void TEngineer::Print()
  173. {// Перегруженный виртуальный метод класса Инженер
  174.     cout << "\t" << FId << "\t" << FName << "\t" << FSurname << "\t" << FTimeWork << endl;
  175.     //cout << "**** Перегруженный виртуальный метод Print класса Инженер" << endl;
  176. }
  177. void TBrigadier::Print()
  178. {// Перегруженный виртуальный метод Print класса Бригадир
  179.     cout << "\t" << FId << "\t" << FName << "\t" << FSurname << "\t" << FTimeWork << endl;
  180.     //cout << "**** Перегруженный виртуальный метод Print класса Бригадир" << endl;
  181. }
  182. TEngineer::~TEngineer()
  183. {//Перегруженный виртуальный Деструктор класса Инженер
  184.     cout << "**** Перегруженный виртуальный Деструктор класса Инженер" << endl;
  185. }
  186. TBrigadier::~TBrigadier()
  187. {//Перегруженный виртуальный Деструктор класса Бригадир
  188.     cout << "**** Перегруженный виртуальный Деструктор класса Бригадир" << endl;
  189. }
  190. //-----------------------------------------------
  191. class TTabel
  192. {
  193. private:
  194.     int FCounTEngineers; // Количество инженеров  
  195.     int FCounTBrigadiers; //Количество бригадиров
  196.     TEngineer *FEngineer; // Массив инженеров
  197.     TBrigadier *FBrigadier;// Массив бригадиров
  198. public:
  199.     TTabel();// Конструктор по умолчанию
  200.     ~TTabel();// Деструктор
  201.     void Print();
  202.     void AddEngineer(TEngineer &A);// Добавление инженера
  203.     void AddBrigadier(TBrigadier &A);//Добавление бригадира
  204.     void DelEngineer(int c);//Удаление инженера
  205.     void DelBrigadier(int c);//Удаление бригадира
  206.     TEngineer* GeTEngineer(int c) { return &FEngineer[c]; }
  207.     TBrigadier* GeTBrigadier(int c) { return &FBrigadier[c]; }
  208.     int GetCounTEngineers() { return FCounTEngineers; }
  209.     int GetCounTBrigadiers() { return FCounTBrigadiers; }
  210. };
  211. TTabel::TTabel()
  212. {//Конструктор по умолчанию класса Табель
  213.     FCounTEngineers = 0;
  214.     FCounTBrigadiers = 0;
  215.     FEngineer = NULL;
  216.     FBrigadier = NULL;
  217.     cout << "**** Конструктор по умолчанию класса Табель" << endl;
  218. }
  219. void TTabel::AddEngineer(TEngineer &A)
  220. {//Метод добавления Инженера класса Табель
  221.     int i;
  222.     TEngineer t;
  223.     TEngineer *tmp = new TEngineer[FCounTEngineers + 1];
  224.     for (i = 0; i<FCounTEngineers; i++)
  225.         tmp[i] = FEngineer[i];
  226.     tmp[FCounTEngineers] = A;
  227.     delete[] FEngineer;
  228.     FEngineer = tmp;
  229.     FCounTEngineers++;
  230.     cout << "**** Метод добавления Инженера класса Табель" << endl;
  231. }
  232. void TTabel::AddBrigadier(TBrigadier &A)
  233. {//Метод добавления Бригадира класса Табель
  234.     int i;
  235.     TBrigadier *tmp = new TBrigadier[FCounTBrigadiers + 1];
  236.     for (i = 0; i<FCounTBrigadiers; i++)
  237.         tmp[i] = FBrigadier[i];
  238.     tmp[FCounTBrigadiers] = A;
  239.     delete[] FBrigadier;
  240.     FBrigadier = tmp;
  241.     FCounTBrigadiers++;
  242.     cout << "**** Метод добавления Бригадира класса Табель" << endl;
  243. }
  244. void TTabel::DelEngineer(int c)
  245. {//Метод удаления Инженера класса Табель
  246.     int i;
  247.     TEngineer *tmp = new TEngineer[FCounTEngineers - 1];
  248.     for (i = 0; i<c; i++)
  249.         tmp[i] = FEngineer[i];
  250.     for (i = c + 1; i<FCounTEngineers; i++)
  251.         tmp[i - 1] = FEngineer[i];
  252.     delete[] FEngineer;
  253.     FEngineer = tmp;
  254.     FCounTEngineers--;
  255.     cout << "**** Метод удаления Инженера класса Табель" << endl;
  256. }
  257. void TTabel::DelBrigadier(int c)
  258. {//Метод удаления Бригадира класса Табель
  259.     int i;
  260.     TBrigadier *tmp = new TBrigadier[FCounTBrigadiers - 1];
  261.     for (i = 0; i<c; i++)
  262.         tmp[i] = FBrigadier[i];
  263.     for (i = c + 1; i<FCounTBrigadiers; i++)
  264.         tmp[i - 1] = FBrigadier[i];
  265.     delete[] FBrigadier;
  266.     FBrigadier = tmp;
  267.     FCounTBrigadiers--;
  268.     cout << "**** Метод удаления Бригадира класса Табель" << endl;
  269. }
  270. TTabel::~TTabel()
  271. {// Деструктор класса Табель
  272.     if (FEngineer != NULL)
  273.         delete[] FEngineer;
  274.     if (FBrigadier != NULL)
  275.         delete[] FBrigadier;
  276.     cout << "**** Деструктор класса Табель" << endl;
  277. }
  278. void TTabel::Print()
  279. {// Метод вывод сведений о бригаде класса Табель
  280.     int i;
  281.     cout << "Инженеры:" << endl;
  282.     for (i = 0; i<FCounTEngineers; i++)
  283.         FEngineer[i].Print();
  284.     cout << "Бригадиры:" << endl;
  285.     for (i = 0; i<FCounTBrigadiers; i++)
  286.         FBrigadier[i].Print();
  287.     cout << "**** Метод вывод сведений о бригаде класса Табель" << endl;
  288. }
  289. //-----------------------------------------------------
  290. class TProcessor
  291. {// Класс обработчик
  292. private:
  293.     TTabel* t; // Бригада
  294.     int max1, max2, max3, imax1, imax2, imax3;
  295.     int min1, min2, min3, imin1, imin2, imin3;
  296. public:
  297.     TProcessor();// Конструктор по умолчанию
  298.     ~TProcessor();//Деструктор
  299.     void CalculateEarnings(); // расчет заработной платы
  300.     void AddEngineer(TEngineer &A) { t->AddEngineer(A); } // Добавить Инженера
  301.     void AddBrigadier(TBrigadier &A)
  302.     {
  303.         t->AddBrigadier(A);
  304.     }// Добавить Бригадира
  305.     void DelEngineer(int c) { t->DelEngineer(c); }//Удалить Инженера
  306.     void DelBrigadier(int c)
  307.     {
  308.         t->DelBrigadier(c);
  309.     }//Удалить Бригадира
  310.     void Print() { t->Print(); }// Вывод сведений о бригаде
  311. };
  312. TProcessor::TProcessor()
  313. {// Конструктор по умолчанию класса Обработчик
  314.     t = new TTabel();
  315.     cout << "**** Конструктор по умолчанию класса Обработчик" << endl;
  316. }
  317. TProcessor::~TProcessor()
  318. {// Деструктор класса Обработчик
  319.     delete t;
  320.     cout << "**** Деструктор класса Обработчик" << endl;
  321. };
  322. void TProcessor::CalculateEarnings()
  323. {//Расчет и вывод заработной платы сотрудников
  324.  
  325.     int RateEngineers = 5;
  326.     cout << "Заработная плата Инженеров" << endl;
  327.     if (t->GetCounTEngineers()>0)
  328.         for (int i = 0; i<t->GetCounTEngineers(); i++)
  329.         {
  330.             t->GeTEngineer(i)->Print();
  331.             cout << "Заработок: " << t->GeTEngineer(i)->GetTimeWork()*RateEngineers << endl;
  332.             cout << "-----------------------------------------------------------------" << endl;
  333.         }
  334.     int RateBrigadier = 10;
  335.     cout << "Заработная плата Бригадиров" << endl;
  336.     if (t->GetCounTBrigadiers()>0)
  337.         for (int i = 0; i<t->GetCounTBrigadiers(); i++)
  338.         {
  339.             t->GeTBrigadier(i)->Print();
  340.             cout << "Заработок: " << t->GeTBrigadier(i)->GetTimeWork()*RateBrigadier << endl;
  341.             cout << "-----------------------------------------------------------------" << endl;
  342.         }
  343. }
  344. int main()
  345. {
  346.     SetConsoleCP(1251);
  347.     SetConsoleOutputCP(1251);
  348.     int CounTEngineers, CounTBrigadiers;
  349.     int i;
  350.     cout << "Введите количество инженеров: ";
  351.     cin >> CounTEngineers;
  352.     cout << "Введите количество бригадиров: ";
  353.     cin >> CounTBrigadiers;
  354.     TEngineer *A = new TEngineer[CounTEngineers];
  355.     for (i = 0; i<CounTEngineers; i++)
  356.         A[i].Input();
  357.     TBrigadier *B = new TBrigadier[CounTBrigadiers];
  358.     for (i = 0; i<CounTBrigadiers; i++)
  359.         B[i].Input();
  360.     // Работа с классом Обработчик
  361.     cout << "\n Работа с классом Обработчик" << endl;
  362.     TProcessor *p = new TProcessor;
  363.     for (i = 0; i<CounTEngineers; i++)
  364.         p->AddEngineer(A[i]);
  365.     for (i = 0; i<CounTBrigadiers; i++)
  366.         p->AddBrigadier(B[i]);
  367.     cout << " Вся Бригада: \n";
  368.     p->Print();
  369.     p->CalculateEarnings();
  370.     system("pause");
  371.     delete[] A;
  372.     delete[] B;
  373.     delete p;
  374.     // Работа с массивом указателей на тип базового класса
  375.     cout << "\n Работа с массивом указателей на тип базового класса\n" << endl;
  376.     TSotrudnik **array_team;
  377.     array_team = new TSotrudnik*[CounTEngineers + CounTBrigadiers];
  378.     for (i = 0; i<CounTEngineers; i++)
  379.         array_team[i] = new TEngineer;
  380.     for (i = CounTEngineers; i<CounTEngineers + CounTBrigadiers; i++)
  381.         array_team[i] = new TBrigadier;
  382.     cout << "\n Ввод сведений о составе бригады:\n" << endl;
  383.     for (i = 0; i<CounTEngineers + CounTBrigadiers; i++)
  384.         array_team[i]->Input();
  385.     cout << "\n В составе бригады следующие сотрудники:\n" << endl;
  386.     for (i = 0; i<CounTEngineers + CounTBrigadiers; i++)
  387.         array_team[i]->Print();
  388.     for (i = 0; i<CounTEngineers + CounTBrigadiers; i++)
  389.         delete array_team[i];
  390.     delete[] array_team;
  391.     system("pause");
  392. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement