Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Lab_6
- #include "stdafx.h"
- #include <stdio.h>
- #include <conio.h>
- #include <stdlib.h>
- #include <math.h>
- #include <iostream>
- #include <locale.h>
- #include <string>
- #include <windows.h>
- using namespace std;
- //3. Классы табель выходов, инженер и бригадир.
- //Класс обработчик реализует заполнение табеля выходов и расчет заработной платы сотрудников на основании информации об отработанном времени.
- //Печать информации о бригадире включает в себя информацию о бригаде.
- class TSotrudnik
- {
- protected:
- int FId;
- string FName;
- string FSurname;
- public:
- TSotrudnik(); // Конструктор по умолчанию
- TSotrudnik(int Id, string Name, string Surname);
- virtual ~TSotrudnik(); // виртуальный деструктор
- virtual void Print() = 0; // виртуальный метод вывода сведений о Сотруднике
- virtual void Input() = 0;// виртуальный метод ввода сведений о Сотруднике
- int GetID() { return FId; }
- string GetName() { return FName; }
- string GetSurname() { return FSurname; }
- void SetID(int ID) { FId = ID; }
- void SetName(string name) { FName = name; }
- void SetSurname(string surname) { FSurname = surname; }
- };
- class TEngineer :public TSotrudnik
- {
- private:
- int FTimeWork;
- public:
- TEngineer(int Id, string Name, string Surname, int TimeWork); // Конструктор с параметрами
- TEngineer(); // Конструктор по умолчанию
- TEngineer(TEngineer &A); // Конструктор копирования
- ~TEngineer();// Деструктор по умолчанию
- TEngineer& operator =(const TEngineer &A); // Перегруженная операция =
- int GetTimeWork() { return FTimeWork; }
- void SetTimeWork(int TimeWorks)
- {
- FTimeWork = TimeWorks;
- }
- void Input(); // перегруженный виртуальный метод
- void Print(); // перегруженный виртуальный метод
- };
- class TBrigadier :public TSotrudnik
- {
- private:
- int FTimeWork;
- public:
- TBrigadier();// Конструктор по умолчанию
- TBrigadier(int Id, string Name, string Surname, int TimeWork);// Конструктор инициализатор
- TBrigadier(TBrigadier &A);// Конструктор копирования
- ~TBrigadier();// Деструктор
- TBrigadier& operator =(const TBrigadier &A);// Перегруженная операция =
- int GetTimeWork() { return FTimeWork; }
- void SetTimeWork(int TimeWork) { FTimeWork = TimeWork; }
- void Input();// перегруженный виртуальный метод
- void Print();// перегруженный виртуальный метод
- };
- TSotrudnik::TSotrudnik()
- {// Конструктор по умолчанию базового класса Сотрудник
- FId = 0;
- FName = "";
- FSurname = "";
- cout << "**** Конструктор по умолчанию базового класса Сотрудник" << endl;
- }
- TSotrudnik::TSotrudnik(int Id, string Name, string Surname)
- {// Конструктор инициализатор базового класса Сотрудник
- FId = Id;
- FName = Name;
- FSurname = Surname;
- cout << "**** Конструктор инициализатор базового класса Сотрудник" << endl;
- }
- TSotrudnik::~TSotrudnik()
- {//Деструктор базового класса Сотрудник
- cout << "**** Деструктор базового класса Сотрудник" << endl;
- }
- TEngineer::TEngineer(int Id, string Name, string Surname, int TimeWork) :TSotrudnik(Id, Name, Surname)
- {// Конструктор инициализатор класса Инженер
- FTimeWork = TimeWork;
- cout << "**** Конструктор инициализатор класса Инженер" << endl;
- }
- TEngineer::TEngineer()
- {//Конструктор по умолчанию класса Инженер
- FId = 0;
- FName = "";
- FSurname = "";
- FTimeWork = 0;
- cout << "**** Конструктор по умолчанию класса Инженер" << endl;
- }
- TBrigadier::TBrigadier(int Id, string Name, string Surname, int TimeWork) :TSotrudnik(Id, Name, Surname)
- {//Конструктор инициализатор класса Бригадир
- FTimeWork = TimeWork;
- cout << "**** Конструктор инициализатор класса Бригадир" << endl;
- }
- TBrigadier::TBrigadier()
- {//Конструктор по умолчанию класса Бригадир
- FId = 0;
- FName = "";
- FSurname = "";
- FTimeWork = 0;
- cout << "**** Конструктор по умолчанию класса Бригадир" << endl;
- }
- TEngineer::TEngineer(TEngineer &A)
- {//Конструктор копирования класса Инженер
- FId = A.FId;
- FName = A.FName;
- FSurname = A.FSurname;
- FTimeWork = A.FTimeWork;
- cout << "**** Конструктор копирования класса Инженер" << endl;
- }
- TBrigadier& TBrigadier::operator =(const TBrigadier &A)
- {//Перегруженная операция = класса Бригадир
- FId = A.FId;
- FName = A.FName;
- FSurname = A.FSurname;
- FTimeWork = A.FTimeWork;
- cout << "**** Перегруженная операция = класса Бригадир" << endl;
- return *this;
- }
- TEngineer& TEngineer::operator =(const TEngineer &A)
- {//Перегруженная операция = класса Инженер
- FId = A.FId;
- FName = A.FName;
- FSurname = A.FSurname;
- FTimeWork = A.FTimeWork;
- cout << "**** Перегруженная операция = класса Инженер" << endl;
- return *this;
- }
- TBrigadier::TBrigadier(TBrigadier &A)
- {//Конструктор копирования класса Бригадир
- FId = A.FId;
- FName = A.FName;
- FSurname = A.FSurname;
- FTimeWork = A.FTimeWork;
- cout << "****Конструктор копирования класса Бригадир" << endl;
- }
- void TEngineer::Input()
- {//Ввод сведений о инженере:
- cout << "Ввод сведений об Инженере:" << endl;
- cout << "Введите ID Инженера: ";
- cin >> FId;
- cout << "Введите Имя: ";
- cin >> FName;
- cout << "Введите Фамилию: ";
- cin >> FSurname;
- cout << "Введите отработанное время (в часах): ";
- cin >> FTimeWork;
- cout << "**** Перегруженный виртуальный метод Input класса Инженер" << endl;
- }
- void TBrigadier::Input()
- {//Ввод сведений о бригадире
- cout << "Ввод сведений о Бригадире:" << endl;
- cout << "Введите ID Бригадира: ";
- cin >> FId;
- cout << "Введите Имя: ";
- cin >> FName;
- cout << "Введите Фамилию: ";
- cin >> FSurname;
- cout << "Введите отработанное время (в часах): ";
- cin >> FTimeWork;
- cout << "**** Перегруженный виртуальный метод Input класса Бригадир" << endl;
- }
- void TEngineer::Print()
- {// Перегруженный виртуальный метод класса Инженер
- cout << "\t" << FId << "\t" << FName << "\t" << FSurname << "\t" << FTimeWork << endl;
- //cout << "**** Перегруженный виртуальный метод Print класса Инженер" << endl;
- }
- void TBrigadier::Print()
- {// Перегруженный виртуальный метод Print класса Бригадир
- cout << "\t" << FId << "\t" << FName << "\t" << FSurname << "\t" << FTimeWork << endl;
- //cout << "**** Перегруженный виртуальный метод Print класса Бригадир" << endl;
- }
- TEngineer::~TEngineer()
- {//Перегруженный виртуальный Деструктор класса Инженер
- cout << "**** Перегруженный виртуальный Деструктор класса Инженер" << endl;
- }
- TBrigadier::~TBrigadier()
- {//Перегруженный виртуальный Деструктор класса Бригадир
- cout << "**** Перегруженный виртуальный Деструктор класса Бригадир" << endl;
- }
- //-----------------------------------------------
- class TTabel
- {
- private:
- int FCounTEngineers; // Количество инженеров
- int FCounTBrigadiers; //Количество бригадиров
- TEngineer *FEngineer; // Массив инженеров
- TBrigadier *FBrigadier;// Массив бригадиров
- public:
- TTabel();// Конструктор по умолчанию
- ~TTabel();// Деструктор
- void Print();
- void AddEngineer(TEngineer &A);// Добавление инженера
- void AddBrigadier(TBrigadier &A);//Добавление бригадира
- void DelEngineer(int c);//Удаление инженера
- void DelBrigadier(int c);//Удаление бригадира
- TEngineer* GeTEngineer(int c) { return &FEngineer[c]; }
- TBrigadier* GeTBrigadier(int c) { return &FBrigadier[c]; }
- int GetCounTEngineers() { return FCounTEngineers; }
- int GetCounTBrigadiers() { return FCounTBrigadiers; }
- };
- TTabel::TTabel()
- {//Конструктор по умолчанию класса Табель
- FCounTEngineers = 0;
- FCounTBrigadiers = 0;
- FEngineer = NULL;
- FBrigadier = NULL;
- cout << "**** Конструктор по умолчанию класса Табель" << endl;
- }
- void TTabel::AddEngineer(TEngineer &A)
- {//Метод добавления Инженера класса Табель
- int i;
- TEngineer t;
- TEngineer *tmp = new TEngineer[FCounTEngineers + 1];
- for (i = 0; i<FCounTEngineers; i++)
- tmp[i] = FEngineer[i];
- tmp[FCounTEngineers] = A;
- delete[] FEngineer;
- FEngineer = tmp;
- FCounTEngineers++;
- cout << "**** Метод добавления Инженера класса Табель" << endl;
- }
- void TTabel::AddBrigadier(TBrigadier &A)
- {//Метод добавления Бригадира класса Табель
- int i;
- TBrigadier *tmp = new TBrigadier[FCounTBrigadiers + 1];
- for (i = 0; i<FCounTBrigadiers; i++)
- tmp[i] = FBrigadier[i];
- tmp[FCounTBrigadiers] = A;
- delete[] FBrigadier;
- FBrigadier = tmp;
- FCounTBrigadiers++;
- cout << "**** Метод добавления Бригадира класса Табель" << endl;
- }
- void TTabel::DelEngineer(int c)
- {//Метод удаления Инженера класса Табель
- int i;
- TEngineer *tmp = new TEngineer[FCounTEngineers - 1];
- for (i = 0; i<c; i++)
- tmp[i] = FEngineer[i];
- for (i = c + 1; i<FCounTEngineers; i++)
- tmp[i - 1] = FEngineer[i];
- delete[] FEngineer;
- FEngineer = tmp;
- FCounTEngineers--;
- cout << "**** Метод удаления Инженера класса Табель" << endl;
- }
- void TTabel::DelBrigadier(int c)
- {//Метод удаления Бригадира класса Табель
- int i;
- TBrigadier *tmp = new TBrigadier[FCounTBrigadiers - 1];
- for (i = 0; i<c; i++)
- tmp[i] = FBrigadier[i];
- for (i = c + 1; i<FCounTBrigadiers; i++)
- tmp[i - 1] = FBrigadier[i];
- delete[] FBrigadier;
- FBrigadier = tmp;
- FCounTBrigadiers--;
- cout << "**** Метод удаления Бригадира класса Табель" << endl;
- }
- TTabel::~TTabel()
- {// Деструктор класса Табель
- if (FEngineer != NULL)
- delete[] FEngineer;
- if (FBrigadier != NULL)
- delete[] FBrigadier;
- cout << "**** Деструктор класса Табель" << endl;
- }
- void TTabel::Print()
- {// Метод вывод сведений о бригаде класса Табель
- int i;
- cout << "Инженеры:" << endl;
- for (i = 0; i<FCounTEngineers; i++)
- FEngineer[i].Print();
- cout << "Бригадиры:" << endl;
- for (i = 0; i<FCounTBrigadiers; i++)
- FBrigadier[i].Print();
- cout << "**** Метод вывод сведений о бригаде класса Табель" << endl;
- }
- //-----------------------------------------------------
- class TProcessor
- {// Класс обработчик
- private:
- TTabel* t; // Бригада
- int max1, max2, max3, imax1, imax2, imax3;
- int min1, min2, min3, imin1, imin2, imin3;
- public:
- TProcessor();// Конструктор по умолчанию
- ~TProcessor();//Деструктор
- void CalculateEarnings(); // расчет заработной платы
- void AddEngineer(TEngineer &A) { t->AddEngineer(A); } // Добавить Инженера
- void AddBrigadier(TBrigadier &A)
- {
- t->AddBrigadier(A);
- }// Добавить Бригадира
- void DelEngineer(int c) { t->DelEngineer(c); }//Удалить Инженера
- void DelBrigadier(int c)
- {
- t->DelBrigadier(c);
- }//Удалить Бригадира
- void Print() { t->Print(); }// Вывод сведений о бригаде
- };
- TProcessor::TProcessor()
- {// Конструктор по умолчанию класса Обработчик
- t = new TTabel();
- cout << "**** Конструктор по умолчанию класса Обработчик" << endl;
- }
- TProcessor::~TProcessor()
- {// Деструктор класса Обработчик
- delete t;
- cout << "**** Деструктор класса Обработчик" << endl;
- };
- void TProcessor::CalculateEarnings()
- {//Расчет и вывод заработной платы сотрудников
- int RateEngineers = 5;
- cout << "Заработная плата Инженеров" << endl;
- if (t->GetCounTEngineers()>0)
- for (int i = 0; i<t->GetCounTEngineers(); i++)
- {
- t->GeTEngineer(i)->Print();
- cout << "Заработок: " << t->GeTEngineer(i)->GetTimeWork()*RateEngineers << endl;
- cout << "-----------------------------------------------------------------" << endl;
- }
- int RateBrigadier = 10;
- cout << "Заработная плата Бригадиров" << endl;
- if (t->GetCounTBrigadiers()>0)
- for (int i = 0; i<t->GetCounTBrigadiers(); i++)
- {
- t->GeTBrigadier(i)->Print();
- cout << "Заработок: " << t->GeTBrigadier(i)->GetTimeWork()*RateBrigadier << endl;
- cout << "-----------------------------------------------------------------" << endl;
- }
- }
- int main()
- {
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- int CounTEngineers, CounTBrigadiers;
- int i;
- cout << "Введите количество инженеров: ";
- cin >> CounTEngineers;
- cout << "Введите количество бригадиров: ";
- cin >> CounTBrigadiers;
- TEngineer *A = new TEngineer[CounTEngineers];
- for (i = 0; i<CounTEngineers; i++)
- A[i].Input();
- TBrigadier *B = new TBrigadier[CounTBrigadiers];
- for (i = 0; i<CounTBrigadiers; i++)
- B[i].Input();
- // Работа с классом Обработчик
- cout << "\n Работа с классом Обработчик" << endl;
- TProcessor *p = new TProcessor;
- for (i = 0; i<CounTEngineers; i++)
- p->AddEngineer(A[i]);
- for (i = 0; i<CounTBrigadiers; i++)
- p->AddBrigadier(B[i]);
- cout << " Вся Бригада: \n";
- p->Print();
- p->CalculateEarnings();
- system("pause");
- delete[] A;
- delete[] B;
- delete p;
- // Работа с массивом указателей на тип базового класса
- cout << "\n Работа с массивом указателей на тип базового класса\n" << endl;
- TSotrudnik **array_team;
- array_team = new TSotrudnik*[CounTEngineers + CounTBrigadiers];
- for (i = 0; i<CounTEngineers; i++)
- array_team[i] = new TEngineer;
- for (i = CounTEngineers; i<CounTEngineers + CounTBrigadiers; i++)
- array_team[i] = new TBrigadier;
- cout << "\n Ввод сведений о составе бригады:\n" << endl;
- for (i = 0; i<CounTEngineers + CounTBrigadiers; i++)
- array_team[i]->Input();
- cout << "\n В составе бригады следующие сотрудники:\n" << endl;
- for (i = 0; i<CounTEngineers + CounTBrigadiers; i++)
- array_team[i]->Print();
- for (i = 0; i<CounTEngineers + CounTBrigadiers; i++)
- delete array_team[i];
- delete[] array_team;
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement