Xom9ik

Lab_3/17var (IIl semester)

Oct 4th, 2017
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.87 KB | None | 0 0
  1. //Futbolist.h
  2. #pragma once
  3. #include <string>
  4. class TFutbolist
  5. {
  6. public:
  7.     std::string name, surname;
  8.     int goal;
  9.     // Конструктор по умолчанию
  10.     TFutbolist(std::string _name = "", std::string _surname = "", int _goal = 0) : name(_name), surname(_surname), goal(_goal) {};
  11.     // Метод отображения в текстовом режиме
  12.     void Show()const;
  13. };
  14. //Futbolist.cpp
  15. #include "stdafx.h"
  16. #include "Futbolist.h"
  17. #include <iostream>
  18. #include <string>
  19. //---------------------------------------------------
  20. // Метод отображения в текстовом режиме
  21. void TFutbolist::Show()const
  22. {
  23.     std::cout << "\n|" << name << " " << surname << " - " << goal << "|";
  24. }
  25. //Comanda.h
  26. #pragma once
  27. #include "Futbolist.h"
  28. #include <string>
  29. class TComanda
  30. {
  31. private:
  32.     std::string ComandName;
  33. public:
  34.     TFutbolist fut[10]; // Футболисты
  35.     // Конструктор по умолчанию
  36.     TComanda();
  37.     // Конструктор инициализатор
  38.     TComanda(TFutbolist, TFutbolist, TFutbolist);
  39.     // Перегруженный конструктор
  40.     TComanda(std::string n1, std::string s1, int g1, std::string n2, std::string s2, int g2, std::string n3, std::string s3, int g3, std::string n4, std::string s4, int g4);
  41.     // Конструктор копирования
  42.     //TComanda(const TFutbolist&);
  43.     // Деструктор
  44.     ~TComanda();
  45.     std::string GetName()const { return this->ComandName; };// Получить имя объекта
  46.     void Show() const; // Показать в текстовом режиме
  47.     void ShowOneLines(int lines) const; // Показать в текстовом режиме 1 строку
  48.  
  49. public:
  50.     static int count; //количество созданных объектов
  51.     int countFut = 0;
  52. };
  53. //Comanda.cpp
  54. #include "stdafx.h"
  55. #include <iostream>
  56. #include "Comanda.h"
  57. #include <string>
  58. using namespace std;
  59. //---------------------------------------------------
  60. // Конструктор по умолчанию
  61. TComanda::TComanda()
  62. {
  63.     // увеличиваем количество команд
  64.     count++;
  65.     // Наименование команды
  66.     ComandName = "Comanda[" + to_string(count) + "]";
  67.     // вывод отладочного сообщения
  68.     cout << "Default Constructor for " << ComandName << endl;
  69. }
  70. // Конструктор инициализатор
  71. TComanda::TComanda(TFutbolist _fut1, TFutbolist _fut2, TFutbolist _fut3) : fut{ _fut1, _fut2, _fut3 }
  72. {
  73.     countFut += 3;
  74.     // увеличиваем количество команд
  75.     count++;
  76.     // Наименование команды
  77.     ComandName = "Comanda[" + to_string(count) + "]";
  78.     // вывод отладочного сообщения
  79.     cout << "Constructor initiation for " << ComandName << endl;
  80. }
  81. // Перегруженный конструктор
  82. TComanda::TComanda(string n1, string s1, int g1, string n2, string s2, int g2, string n3, string s3, int g3, string n4, string s4, int g4)
  83. {
  84.     // увеличиваем количество команд
  85.     count++;
  86.     // Наименование команды
  87.     ComandName = "Comanda[" + to_string(count) + "]";
  88.     fut[countFut].name = n1;
  89.     fut[countFut].surname = s1;
  90.     fut[countFut].goal = g1;
  91.     countFut++;
  92.     fut[countFut].name = n2;
  93.     fut[countFut].surname = s2;
  94.     fut[countFut].goal = g2;
  95.     countFut++;
  96.     fut[countFut].name = n3;
  97.     fut[countFut].surname = s3;
  98.     fut[countFut].goal = g3;
  99.     countFut++;
  100.     fut[countFut].name = n4;
  101.     fut[countFut].surname = s4;
  102.     fut[countFut].goal = g4;
  103.     countFut++;
  104.     // вывод отладочного сообщения
  105.     cout << "Overloaded Constructor for " << ComandName << endl;
  106. }
  107. // Конструктор копирования
  108. /*TComanda::TComanda(const TComanda& comanda)
  109. {
  110.     cout << "Copy constructor for: " << comanda.GetName() << endl;
  111.     ComandName = comanda.GetName() + "(copy)";
  112.     for (int i = 0; i <= 10; i++)
  113.     {
  114.         fut[i] = comanda.fut[i];
  115.     }
  116. }*/
  117. // Деструктор
  118. TComanda::~TComanda()
  119. {
  120.     cout << "Destructor for " << ComandName << endl;
  121. }
  122. // Метод текстового показа объекта
  123. void TComanda::Show()const
  124. {
  125.     cout << ComandName << ":";
  126.     for (int i = 0; i < countFut; i++)
  127.     {
  128.         fut[i].Show();
  129.     }
  130.     cout << endl;
  131. }
  132. //Lab_3.cpp
  133. #include "stdafx.h"
  134. #include <iostream>
  135. #include "Futbolist.h"
  136. #include "Comanda.h"
  137. using namespace std;
  138. /*17.   Метод поиска результативной команды;
  139. метод выводящий сведения о футболистах, по всем командам;
  140. метод переводящий футболиста из одной команды в другую. */
  141. //---------------------------------------------------
  142. // Инициализация глобальных переменных
  143. int TComanda::count = 0;
  144. int Menu();
  145. int GetNumber(int, int);
  146. void ExitBack();
  147.  
  148. class Processor
  149. {
  150. public:
  151.     void Show(TComanda*[], int);
  152.     void Move(TComanda*[], int);
  153.     void FindMax(TComanda*[], int);
  154. };
  155.  
  156. int main()
  157. {
  158.     // Определение футболистов
  159.     TFutbolist fut1("Stecenko", "Nikita", 2); TFutbolist fut2("Anichenko", "Vladimir", 2); TFutbolist fut3("Romanuta", "Maxim", 2);
  160.     TFutbolist fut4("Iliyn", "Denis", 3); TFutbolist fut5("Zaletskiy", "Evgeniy", 3); TFutbolist fut6("Bidnik", "Alina", 3);
  161.     TFutbolist fut7("Zubakin", "Maxim", 1); TFutbolist fut8("Kasperunas", "Igor", 1); TFutbolist fut9("Kulishova", "Ekaterina", 1);
  162.     // Определение команд
  163.     TComanda comandaA(fut1, fut2, fut3);
  164.     TComanda comandaB(fut4, fut5, fut6);
  165.     TComanda comandaC("Lapshun", "Alexandr", 4, "Mishenko", "Mihail", 4, "Nevolnik", "Vladislav", 4, "Pavlovsky", "Ivan", 4);
  166.     TComanda comandaD(fut7, fut8, fut9);
  167.     // Определение массива указателей на команды
  168.     TComanda* pComanda[] = { &comandaA,&comandaB,&comandaC,&comandaD };
  169.     Processor processor;
  170.     int n = sizeof(pComanda) / sizeof(pComanda[0]);
  171.     bool done = false; // Главный цикл
  172.     while (!done)
  173.     {
  174.         switch (Menu())
  175.         {
  176.         case 1: processor.Show(pComanda, n); break;
  177.         case 2: processor.Move(pComanda, n); break;
  178.         case 3: processor.FindMax(pComanda, n); break;
  179.         case 4: cout << "The End." << endl; done = true; break;
  180.         }
  181.     }
  182.     return 0;
  183. }
  184. int Menu()// Вывод меню
  185. {
  186.     int option;
  187.     cout << "\n_______ Main Menu ____________" << endl;
  188.     cout << "1 - Output all objects" << endl;
  189.     cout << "2 - Move" << endl;
  190.     cout << "3 - Search for the most effective" << endl;
  191.     cout << "4 - Exit" << endl;
  192.     cin >> option;
  193.     return option;
  194. }
  195. // Вывод всех Команд
  196. void Processor::Show(TComanda* p_comanda[], int k)
  197. {
  198.     cout << "_______ Comand: _________" << endl;
  199.     for (int i = 0; i<k; ++i)
  200.         p_comanda[i]->Show();
  201. }
  202. // Перемещение
  203. void Processor::Move(TComanda* p_comanda[], int k)
  204. {
  205.     int comanda1 = 0, comanda2 = 0, fut1 = 0, fut2 = 0;
  206.     cout << "From which comand (1-" << k << "):";
  207.     cin >> comanda1;
  208.     cout << "Which futbolist with [" << comanda1 << "] comands (1-" << p_comanda[comanda1 - 1]->countFut << "):";
  209.     cin >> fut1;
  210.     cout << "Which comand (1-" << k << "):";
  211.     cin >> comanda2;
  212.     cout << "In which futbolist [" << comanda2 << "] of the comand (1-" << p_comanda[comanda2 - 1]->countFut << "):";
  213.     cin >> fut2;
  214.     comanda1--;
  215.     comanda2--;
  216.     fut1--;
  217.     fut2--;
  218.     string name1 = "", surname1 = "";
  219.     int goal1 = 0;
  220.     string name2 = "", surname2 = "";
  221.     int goal2 = 0;
  222.     name1 = p_comanda[comanda1]->fut[fut1].name;
  223.     surname1 = p_comanda[comanda1]->fut[fut1].surname;
  224.     goal1 = p_comanda[comanda1]->fut[fut1].goal;
  225.  
  226.     name2 = p_comanda[comanda2]->fut[fut2].name;
  227.     surname2 = p_comanda[comanda2]->fut[fut2].name;
  228.     goal2 = p_comanda[comanda2]->fut[fut2].goal;
  229.  
  230.     cout << "Move: '";
  231.     cout << name1 << " " << surname1 << " ";
  232.  
  233.     cout << " to Comand[" << comanda2 + 1 << "] in fut[" << fut2 + 1 << "]" << endl;
  234.  
  235.     p_comanda[comanda2]->fut[fut2].name = name1;
  236.     p_comanda[comanda2]->fut[fut2].surname = surname1;
  237.     p_comanda[comanda2]->fut[fut2].goal = goal1;
  238.  
  239.     p_comanda[comanda1]->fut[fut1].name = name2;
  240.     p_comanda[comanda1]->fut[fut1].surname = surname2;
  241.     p_comanda[comanda1]->fut[fut1].goal = goal2;
  242.  
  243.     cout << "Moving successfully" << endl;
  244.     Show(p_comanda, k);
  245. }
  246. // Поиск самой результативной команды
  247. void Processor::FindMax(TComanda* p_comanda[], int k)
  248. {
  249.     int goal[10] = {0};
  250.     for (int i = 0; i < k; i++) //проходим по командам
  251.     {
  252.         for (int j = 0; j < p_comanda[i]->countFut; j++) //проходим по футболистам
  253.         {
  254.             goal[i] += p_comanda[i]->fut[j].goal;
  255.         }
  256.         cout << p_comanda[i]->GetName() << " = " << goal[i] << endl;
  257.     }
  258.     cout << "__________ Find Max goal __________" << endl;
  259.     int ii = 0, max = 0;
  260.     for (int i = 0; i < 10; i++)
  261.     {
  262.         if (max <= goal[i])
  263.         {      
  264.             max = goal[i];
  265.             ii = i;
  266.         }
  267.     }
  268.     cout << "Max goals = " << max << " in " << p_comanda[ii]->GetName() << ":" << endl;
  269.     p_comanda[ii]->Show();
  270. }
Advertisement
Add Comment
Please, Sign In to add comment