Xom9ik

Lab_9_Task2/17 var (IIl semester)

Dec 12th, 2017
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 15.14 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <string>
  3. #include <iostream>
  4. #include <locale>
  5. #include <fstream>
  6.  
  7. using namespace std;
  8. //17.   Классы команда и футболист
  9. //Класс - обработчик позволяет выводить список записей таблицы, отсортированных по заданному полю.
  10.  
  11. //Класс-TFutbolist
  12. class TFutbolist
  13. {
  14. protected:
  15.     int FId;
  16.     string FName;
  17.     string FSurname;
  18.     int FNumber;
  19. public:
  20.     TFutbolist(); // Конструктор по умолчанию
  21.     TFutbolist(int Id, string Name, string Surname, int Number);
  22.     virtual ~TFutbolist(); // виртуальный деструктор
  23.     virtual void Print() = 0; // виртуальный метод вывода сведений о футболисте      
  24.     virtual void Input() = 0;// виртуальный метод ввода сведений о футболисте
  25.     int GetID() { return FId; }
  26.     string GetName() { return FName; }
  27.     string GetSurname() { return FSurname; }
  28.     int GetNumber() { return FNumber; }
  29.     void SetID(int ID) { FId = ID; }
  30.     void SetName(string name) { FName = name; }
  31.     void SetSurname(string surname) { FSurname = surname; }
  32.     void SetNumber(int Number) { FNumber = Number; }
  33. };
  34. class TPlayer :public TFutbolist
  35. {
  36. private:
  37.     int FCountGoals;
  38. public:
  39.     TPlayer(int Id, string Name, string Surname, int Number, int CountGoals); // Конструктор с парамметрами
  40.     TPlayer(); // Конструктор по умолчанию
  41.     TPlayer(TPlayer &A); // Конструктор копирования
  42.     ~TPlayer();// Деструктор по умолчанию
  43.     TPlayer& operator =(const TPlayer &A); // Перегруженная операция =
  44.     int GetCountGoal() { return FCountGoals; }
  45.     void SetCountGoal(int CountGoals)
  46.     {
  47.         FCountGoals = CountGoals;
  48.     }
  49.     void Input(); // перегруженный виртуальный метод
  50.     void Print(); // перегруженный виртуальный метод
  51. };
  52. class TGoalKeeper :public TFutbolist
  53. {
  54. private:
  55.     int FCountGoals;
  56. public:
  57.     TGoalKeeper();// Конструктор по умолчанию
  58.     TGoalKeeper(int Id, string Name, string Surname, int Number, int Kolpropgol);// Конструктор инициализатор
  59.     TGoalKeeper(TGoalKeeper &A);// Конструктор копирования
  60.     ~TGoalKeeper();// Деструктор
  61.     TGoalKeeper& operator =(const TGoalKeeper &A);// Перегруженная операция =
  62.     int GetCountGoals() { return FCountGoals; }
  63.     void SetCountGoals(int CountGoals) { FCountGoals = CountGoals; }
  64.     void Input();// перегруженный виртуальный метод
  65.     void Print();// перегруженный виртуальный метод
  66. };
  67. TFutbolist::TFutbolist()
  68. {// Конструктор по умолчанию базового класса Футболист
  69.     FId = 0;
  70.     FName = "";
  71.     FSurname = "";
  72.     FNumber = 0;
  73.     cout << "**** Конструктор по умолчанию базового класса Футболист" << endl;
  74. }
  75. TFutbolist::TFutbolist(int Id, string Name, string Surname, int Number)
  76. {// Конструктор инициализатор базового класса Футболист
  77.     FId = Id;
  78.     FName = Name;
  79.     FSurname = Surname;
  80.     FNumber = Number;
  81.     cout << "**** Конструктор инициализатор базового класса Футболист" << endl;
  82. }
  83. TFutbolist::~TFutbolist()
  84. {//Деструктор базового класса Футболист
  85.     cout << "**** Деструктор базового класса Футболист" << endl;
  86. }
  87. TPlayer::TPlayer(int Id, string Name, string Surname, int Number, int CountGoals) :TFutbolist(Id, Name, Surname, Number)
  88. {// Конструктор инициализатор класса Игрок
  89.     FCountGoals = CountGoals;
  90.     cout << "**** Конструктор инициализатор класса Игрок" << endl;
  91. }
  92. TPlayer::TPlayer()
  93. {//Конструктор по умолчанию класса Игрок
  94.     FId = 0;
  95.     FName = "";
  96.     FSurname = "";
  97.     FNumber = 0;
  98.     FCountGoals = 0;
  99.     cout << "**** Конструктор по умолчанию класса Игрок" << endl;
  100. }
  101. TGoalKeeper::TGoalKeeper(int Id, string Name, string Surname, int Number, int CountGoals) :TFutbolist(Id, Name, Surname, Number)
  102. {//Конструктор инициализатор класса Вратарь
  103.     FCountGoals = CountGoals;
  104.     cout << "**** Конструктор инициализатор класса Вратарь" << endl;
  105. }
  106. TGoalKeeper::TGoalKeeper()
  107. {//Конструктор по умолчанию класса Вратарь
  108.     FId = 0;
  109.     FName = "";
  110.     FSurname = "";
  111.     FNumber = 0;
  112.     FCountGoals = 0;
  113.     cout << "**** Конструктор по умолчанию класса Вратарь" << endl;
  114. }
  115. TPlayer::TPlayer(TPlayer &A)
  116. {//Конструктор копирования класса Игрок
  117.     FId = A.FId;
  118.     FName = A.FName;
  119.     FSurname = A.FSurname;
  120.     FNumber = A.FNumber;
  121.     FCountGoals = A.FCountGoals;
  122.     cout << "**** Конструктор копирования класса Игрок" << endl;
  123. }
  124. TGoalKeeper& TGoalKeeper::operator =(const TGoalKeeper &A)
  125. {//Перегруженная операция = класса Вратарь
  126.     FId = A.FId;
  127.     FName = A.FName;
  128.     FSurname = A.FSurname;
  129.     FNumber = A.FNumber;
  130.     FCountGoals = A.FCountGoals;
  131.     cout << "**** Перегруженная операция = класса Вратарь" << endl;
  132.     return *this;
  133. }
  134. TPlayer& TPlayer::operator =(const TPlayer &A)
  135. {//Перегруженная операция = класса Игрок
  136.     FId = A.FId;
  137.     FName = A.FName;
  138.     FSurname = A.FSurname;
  139.     FNumber = A.FNumber;
  140.     FCountGoals = A.FCountGoals;
  141.     cout << "**** Перегруженная операция = класса Игрок" << endl;
  142.     return *this;
  143. }
  144. TGoalKeeper::TGoalKeeper(TGoalKeeper &A)
  145. {//Конструктор копирования класса Вратарь
  146.     FId = A.FId;
  147.     FName = A.FName;
  148.     FSurname = A.FSurname;
  149.     FNumber = A.FNumber;
  150.     FCountGoals = A.FCountGoals;
  151.     cout << "****Конструктор копирования класса Вратарь" << endl;
  152. }
  153. void TPlayer::Input()
  154. {//Ввод сведений о игроке:
  155.     cout << "Ввод сведений о игроке:" << endl;
  156.     cout << "Введите ID игрока: ";
  157.     cin >> FId;
  158.     cout << "Введите Имя: ";
  159.     cin >> FName;
  160.     cout << "Введите Фамилию: ";
  161.     cin >> FSurname;
  162.     cout << "Введите номер: ";
  163.     cin >> FNumber;
  164.     cout << "Введите количество забитых голов: ";
  165.     cin >> FCountGoals;
  166.     cout << "**** Перегруженный виртуальный метод Input класса Игрок" << endl;
  167. }
  168. void TGoalKeeper::Input()
  169. {//Ввод сведений о вратаре:
  170.     cout << "Ввод сведений о игроке:" << endl;
  171.     cout << "Введите ID вратаря: ";
  172.     cin >> FId;
  173.     cout << "Введите Имя: ";
  174.     cin >> FName;
  175.     cout << "Введите Фамилию: ";
  176.     cin >> FSurname;
  177.     cout << "Введите номер: ";
  178.     cin >> FNumber;
  179.     cout << "Введите количество забитых голов: ";
  180.     cin >> FCountGoals;
  181.     cout << "**** Перегруженный виртуальный метод Input класса Вратарь" << endl;
  182. }
  183. void TPlayer::Print()
  184. {// Перегруженный виртуальный метод класса Игрок
  185.     cout << "\t" << FId << "\t" << FName << "\t" << FSurname << "\t" << FNumber << "\t" << FCountGoals << endl;
  186.     cout << "**** Перегруженный виртуальный метод Print класса Игрок" << endl;
  187. }
  188. void TGoalKeeper::Print()
  189. {// Перегруженный виртуальный метод Print класса Вратарь
  190.     cout << "\t" << FId << "\t" << FName << "\t" << FSurname << "\t" << FNumber << "\t" << FCountGoals << endl;
  191.     cout << "**** Перегруженный виртуальный метод Print класса Вратарь" << endl;
  192. }
  193. TPlayer::~TPlayer()
  194. {//Перегруженный виртуальный Деструктор класса Игрок
  195.     cout << "**** Перегруженный виртуальный Деструктор класса Игрок" << endl;
  196. }
  197. TGoalKeeper::~TGoalKeeper()
  198. {//Перегруженный виртуальный Деструктор класса Вратарь
  199.     cout << "**** Перегруженный виртуальный Деструктор класса Вратарь" << endl;
  200. }
  201. //Класс-TComanda
  202. class TComanda
  203. {
  204. private:
  205.     int FCountPlayers; // Количество игроков  
  206.     int FCountGoalKeepers; //Количество вратарей
  207.     TPlayer *FPlayers; // Массив игроков
  208.     TGoalKeeper *FGoalKeepers;// Массив вратарей
  209. public:
  210.     TComanda();// Конструктор по умолчанию
  211.     TComanda(TPlayer* p, TGoalKeeper* g, int max)
  212.     {
  213.         FPlayers = p;
  214.         FGoalKeepers = g;
  215.         FCountPlayers = max;
  216.         FCountGoalKeepers = max;
  217.     }
  218.     ~TComanda();// Деструктор
  219.     void Print();
  220.     void AddPlayer(TPlayer &A);// Добавление игрока
  221.     void AddGoalKeeper(TGoalKeeper &A);//Добавление вратаря
  222.     void DelPlayer(int c);//Удаление игрока
  223.     void DelGoalKeeper(int c);//Удаление вратаря
  224.     TPlayer* GetPlayer(int c) { return &FPlayers[c]; }
  225.     TGoalKeeper* GetGoalKeeper(int c) { return &FGoalKeepers[c]; }
  226.     int GetCountPlayers() { return FCountPlayers; }
  227.     int GetCountGoalKeepers() { return FCountGoalKeepers; }
  228. };
  229. TComanda::TComanda()
  230. {//Конструктор по умолчанию класса Команда
  231.     FCountPlayers = 0;
  232.     FCountGoalKeepers = 0;
  233.     FPlayers = NULL;
  234.     FGoalKeepers = NULL;
  235.     cout << "**** Конструктор по умолчанию класса Команда" << endl;
  236. }
  237. void TComanda::AddPlayer(TPlayer &A)
  238. {//Метод добавления Игрока класса Командa
  239.     int i;
  240.     TPlayer t;
  241.     TPlayer *tmp = new TPlayer[FCountPlayers + 1];
  242.     for (i = 0; i<FCountPlayers; i++)
  243.         tmp[i] = FPlayers[i];
  244.     tmp[FCountPlayers] = A;
  245.     delete[] FPlayers;
  246.     FPlayers = tmp;
  247.     FCountPlayers++;
  248.     cout << "**** Метод добавления Игрока класса Команда" << endl;
  249. }
  250. void TComanda::AddGoalKeeper(TGoalKeeper &A)
  251. {//Метод добавления Вратаря класса Команда
  252.     int i;
  253.     TGoalKeeper *tmp = new TGoalKeeper[FCountGoalKeepers + 1];
  254.     for (i = 0; i<FCountGoalKeepers; i++)
  255.         tmp[i] = FGoalKeepers[i];
  256.     tmp[FCountGoalKeepers] = A;
  257.     delete[] FGoalKeepers;
  258.     FGoalKeepers = tmp;
  259.     FCountGoalKeepers++;
  260.     cout << "**** Метод добавления Вратаря класса Команда" << endl;
  261. }
  262. void TComanda::DelPlayer(int c)
  263. {//Метод удаления Игрока класса Команда
  264.     int i;
  265.     TPlayer *tmp = new TPlayer[FCountPlayers - 1];
  266.     for (i = 0; i<c; i++)
  267.         tmp[i] = FPlayers[i];
  268.     for (i = c + 1; i<FCountPlayers; i++)
  269.         tmp[i - 1] = FPlayers[i];
  270.     delete[] FPlayers;
  271.     FPlayers = tmp;
  272.     FCountPlayers--;
  273.     cout << "**** Метод удаления Игрока класса Команда" << endl;
  274. }
  275. void TComanda::DelGoalKeeper(int c)
  276. {//Метод удаления Вратаря класса Команда
  277.     int i;
  278.     TGoalKeeper *tmp = new TGoalKeeper[FCountGoalKeepers - 1];
  279.     for (i = 0; i<c; i++)
  280.         tmp[i] = FGoalKeepers[i];
  281.     for (i = c + 1; i<FCountGoalKeepers; i++)
  282.         tmp[i - 1] = FGoalKeepers[i];
  283.     delete[] FGoalKeepers;
  284.     FGoalKeepers = tmp;
  285.     FCountGoalKeepers--;
  286.     cout << "**** Метод удаления Вратаря класса Команда" << endl;
  287. }
  288. TComanda::~TComanda()
  289. {// Деструктор класса Команда
  290.     if (FPlayers != NULL)
  291.         delete[] FPlayers;
  292.     if (FGoalKeepers != NULL)
  293.         delete[] FGoalKeepers;
  294.     cout << "**** Деструктор класса Команда" << endl;
  295. }
  296.  
  297. class TabularOutput
  298. {//табличный вывод информации в файл и на экран
  299. public:
  300.     virtual void Print(TComanda *C) = 0;
  301.  
  302. };
  303. class StringOutput
  304. {//вывод информации в ленточной форме в файл и на экран
  305. public:
  306.     virtual void Print(TComanda *C) = 0;
  307.  
  308. };
  309. class Tabular_Output : public TabularOutput {
  310. public:
  311.     virtual void TO_Print(TComanda *C) = 0;
  312.     void Print(TComanda *C)
  313.     {
  314.         TO_Print(C);
  315.     }
  316. };
  317. class String_Output : public StringOutput {
  318. public:
  319.     virtual void SO_Print(TComanda *C) = 0;
  320.     void Print(TComanda *C)
  321.     {
  322.         SO_Print(C);
  323.     }
  324. };
  325.  
  326. //Класс-обработчик
  327. class TProcessor : public Tabular_Output, public String_Output
  328. {
  329. public:
  330.     TProcessor();
  331.     TProcessor(TComanda *T);
  332.     TComanda *Tpointer;
  333.    
  334.     void TO_Print(TComanda *C)
  335.     {
  336.         string out = "";
  337.         cout << "Tabular Output" << endl;
  338.         out += "Tabular Output\n";
  339.         cout << "Name\t" << "Surname\t" << "Goal" << endl;
  340.         out += "Name\tSurname\tBirthday\n";
  341.         for (int i = 0; i < C[0].GetCountGoalKeepers(); i++)
  342.         {
  343.             out += C[0].GetGoalKeeper(i)->GetName() + "\t" + C[0].GetGoalKeeper(i)->GetSurname() + "\t";
  344.             out += to_string(C[0].GetGoalKeeper(i)->GetCountGoals()) + "\n";
  345.             cout << C[0].GetGoalKeeper(i)->GetName() << "\t" << C[0].GetGoalKeeper(i)->GetSurname() << "\t" << C[0].GetGoalKeeper(i)->GetCountGoals() << endl;
  346.         }
  347.         ofstream fout;
  348.         fout.open("TO.txt");
  349.         fout << out;
  350.         fout.close();
  351.     }
  352.     void SO_Print(TComanda *C)
  353.     {
  354.         string out = "";
  355.         out += "String Output\n";
  356.         cout << "String Output" << endl;
  357.         cout << "Name: ";
  358.         out += "Name: ";
  359.         for (int i = 0; i < C[0].GetCountPlayers(); i++)
  360.         {
  361.             out += C[0].GetPlayer(i)->GetName() + "; ";
  362.             cout << C[0].GetPlayer(i)->GetName() << "; ";
  363.         }
  364.         cout << endl;
  365.         cout << "Surname: ";
  366.         out += "\nSurname: ";
  367.         for (int i = 0; i < C[0].GetCountPlayers(); i++)
  368.         {
  369.             out += C[0].GetPlayer(i)->GetSurname() + "; ";
  370.             cout << C[0].GetPlayer(i)->GetSurname() << "; ";
  371.         }
  372.         cout << endl;
  373.         cout << "Goal: ";
  374.         out += "\nGoal: ";
  375.         for (int i = 0; i < C[0].GetCountPlayers(); i++)
  376.         {
  377.             out += to_string(C[0].GetPlayer(i)->GetCountGoal()) + "; ";
  378.             cout << C[0].GetPlayer(i)->GetCountGoal() << "; ";
  379.         }
  380.         cout << endl;
  381.         out += "\n";
  382.         ofstream fout;
  383.         fout.open("SO.txt");
  384.         fout << out;
  385.         fout.close();
  386.     }
  387.     ~TProcessor();
  388. };
  389. TProcessor::TProcessor()
  390. {
  391.     cout << "Constructor class TProcessor" << endl;
  392. };
  393. TProcessor::TProcessor(TComanda *T)
  394. {
  395.     Tpointer = T;
  396. }
  397. TProcessor::~TProcessor()
  398. {
  399.     cout << "Destructor class TProcessor" << endl;
  400. };
  401.  
  402. int main()
  403. {
  404.     setlocale(LC_ALL, "rus");
  405.     int max = 0, sortRow = 0;
  406.     string name = "", surname = "";
  407.     int year = 0;
  408.     cout << "Enter the number of futbolist: ";
  409.     cin >> max;
  410.     TPlayer *A = new TPlayer[max];
  411.     for (int i = 0; i<max; i++)
  412.         A[i].Input();
  413.     TGoalKeeper *B = new TGoalKeeper[max];
  414.     for (int i = 0; i<max; i++)
  415.         B[i].Input();
  416.    
  417.     TProcessor *p = new TProcessor;
  418.     //for (int i = 0; i<max; i++)
  419.     //  p->AddPlayer(A[i]);
  420.  
  421.  
  422.     TPlayer *player = new TPlayer[max];
  423.     TGoalKeeper *keeper = new TGoalKeeper[max];
  424.     TComanda com(A, B, max);
  425.  
  426.     TProcessor processor(&com);
  427.     StringOutput* SO = &processor;
  428.     TabularOutput* TO = &processor;
  429.     SO->Print(&com);
  430.     TO->Print(&com);
  431.  
  432.     system("pause");
  433.     return 0;
  434. }
Advertisement
Add Comment
Please, Sign In to add comment