Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <string>
- #include <iostream>
- #include <locale>
- #include <fstream>
- using namespace std;
- //17. Классы команда и футболист
- //Класс - обработчик позволяет выводить список записей таблицы, отсортированных по заданному полю.
- //Класс-TFutbolist
- class TFutbolist
- {
- protected:
- int FId;
- string FName;
- string FSurname;
- int FNumber;
- public:
- TFutbolist(); // Конструктор по умолчанию
- TFutbolist(int Id, string Name, string Surname, int Number);
- virtual ~TFutbolist(); // виртуальный деструктор
- virtual void Print() = 0; // виртуальный метод вывода сведений о футболисте
- virtual void Input() = 0;// виртуальный метод ввода сведений о футболисте
- int GetID() { return FId; }
- string GetName() { return FName; }
- string GetSurname() { return FSurname; }
- int GetNumber() { return FNumber; }
- void SetID(int ID) { FId = ID; }
- void SetName(string name) { FName = name; }
- void SetSurname(string surname) { FSurname = surname; }
- void SetNumber(int Number) { FNumber = Number; }
- };
- class TPlayer :public TFutbolist
- {
- private:
- int FCountGoals;
- public:
- TPlayer(int Id, string Name, string Surname, int Number, int CountGoals); // Конструктор с парамметрами
- TPlayer(); // Конструктор по умолчанию
- TPlayer(TPlayer &A); // Конструктор копирования
- ~TPlayer();// Деструктор по умолчанию
- TPlayer& operator =(const TPlayer &A); // Перегруженная операция =
- int GetCountGoal() { return FCountGoals; }
- void SetCountGoal(int CountGoals)
- {
- FCountGoals = CountGoals;
- }
- void Input(); // перегруженный виртуальный метод
- void Print(); // перегруженный виртуальный метод
- };
- class TGoalKeeper :public TFutbolist
- {
- private:
- int FCountGoals;
- public:
- TGoalKeeper();// Конструктор по умолчанию
- TGoalKeeper(int Id, string Name, string Surname, int Number, int Kolpropgol);// Конструктор инициализатор
- TGoalKeeper(TGoalKeeper &A);// Конструктор копирования
- ~TGoalKeeper();// Деструктор
- TGoalKeeper& operator =(const TGoalKeeper &A);// Перегруженная операция =
- int GetCountGoals() { return FCountGoals; }
- void SetCountGoals(int CountGoals) { FCountGoals = CountGoals; }
- void Input();// перегруженный виртуальный метод
- void Print();// перегруженный виртуальный метод
- };
- TFutbolist::TFutbolist()
- {// Конструктор по умолчанию базового класса Футболист
- FId = 0;
- FName = "";
- FSurname = "";
- FNumber = 0;
- cout << "**** Конструктор по умолчанию базового класса Футболист" << endl;
- }
- TFutbolist::TFutbolist(int Id, string Name, string Surname, int Number)
- {// Конструктор инициализатор базового класса Футболист
- FId = Id;
- FName = Name;
- FSurname = Surname;
- FNumber = Number;
- cout << "**** Конструктор инициализатор базового класса Футболист" << endl;
- }
- TFutbolist::~TFutbolist()
- {//Деструктор базового класса Футболист
- cout << "**** Деструктор базового класса Футболист" << endl;
- }
- TPlayer::TPlayer(int Id, string Name, string Surname, int Number, int CountGoals) :TFutbolist(Id, Name, Surname, Number)
- {// Конструктор инициализатор класса Игрок
- FCountGoals = CountGoals;
- cout << "**** Конструктор инициализатор класса Игрок" << endl;
- }
- TPlayer::TPlayer()
- {//Конструктор по умолчанию класса Игрок
- FId = 0;
- FName = "";
- FSurname = "";
- FNumber = 0;
- FCountGoals = 0;
- cout << "**** Конструктор по умолчанию класса Игрок" << endl;
- }
- TGoalKeeper::TGoalKeeper(int Id, string Name, string Surname, int Number, int CountGoals) :TFutbolist(Id, Name, Surname, Number)
- {//Конструктор инициализатор класса Вратарь
- FCountGoals = CountGoals;
- cout << "**** Конструктор инициализатор класса Вратарь" << endl;
- }
- TGoalKeeper::TGoalKeeper()
- {//Конструктор по умолчанию класса Вратарь
- FId = 0;
- FName = "";
- FSurname = "";
- FNumber = 0;
- FCountGoals = 0;
- cout << "**** Конструктор по умолчанию класса Вратарь" << endl;
- }
- TPlayer::TPlayer(TPlayer &A)
- {//Конструктор копирования класса Игрок
- FId = A.FId;
- FName = A.FName;
- FSurname = A.FSurname;
- FNumber = A.FNumber;
- FCountGoals = A.FCountGoals;
- cout << "**** Конструктор копирования класса Игрок" << endl;
- }
- TGoalKeeper& TGoalKeeper::operator =(const TGoalKeeper &A)
- {//Перегруженная операция = класса Вратарь
- FId = A.FId;
- FName = A.FName;
- FSurname = A.FSurname;
- FNumber = A.FNumber;
- FCountGoals = A.FCountGoals;
- cout << "**** Перегруженная операция = класса Вратарь" << endl;
- return *this;
- }
- TPlayer& TPlayer::operator =(const TPlayer &A)
- {//Перегруженная операция = класса Игрок
- FId = A.FId;
- FName = A.FName;
- FSurname = A.FSurname;
- FNumber = A.FNumber;
- FCountGoals = A.FCountGoals;
- cout << "**** Перегруженная операция = класса Игрок" << endl;
- return *this;
- }
- TGoalKeeper::TGoalKeeper(TGoalKeeper &A)
- {//Конструктор копирования класса Вратарь
- FId = A.FId;
- FName = A.FName;
- FSurname = A.FSurname;
- FNumber = A.FNumber;
- FCountGoals = A.FCountGoals;
- cout << "****Конструктор копирования класса Вратарь" << endl;
- }
- void TPlayer::Input()
- {//Ввод сведений о игроке:
- cout << "Ввод сведений о игроке:" << endl;
- cout << "Введите ID игрока: ";
- cin >> FId;
- cout << "Введите Имя: ";
- cin >> FName;
- cout << "Введите Фамилию: ";
- cin >> FSurname;
- cout << "Введите номер: ";
- cin >> FNumber;
- cout << "Введите количество забитых голов: ";
- cin >> FCountGoals;
- cout << "**** Перегруженный виртуальный метод Input класса Игрок" << endl;
- }
- void TGoalKeeper::Input()
- {//Ввод сведений о вратаре:
- cout << "Ввод сведений о игроке:" << endl;
- cout << "Введите ID вратаря: ";
- cin >> FId;
- cout << "Введите Имя: ";
- cin >> FName;
- cout << "Введите Фамилию: ";
- cin >> FSurname;
- cout << "Введите номер: ";
- cin >> FNumber;
- cout << "Введите количество забитых голов: ";
- cin >> FCountGoals;
- cout << "**** Перегруженный виртуальный метод Input класса Вратарь" << endl;
- }
- void TPlayer::Print()
- {// Перегруженный виртуальный метод класса Игрок
- cout << "\t" << FId << "\t" << FName << "\t" << FSurname << "\t" << FNumber << "\t" << FCountGoals << endl;
- cout << "**** Перегруженный виртуальный метод Print класса Игрок" << endl;
- }
- void TGoalKeeper::Print()
- {// Перегруженный виртуальный метод Print класса Вратарь
- cout << "\t" << FId << "\t" << FName << "\t" << FSurname << "\t" << FNumber << "\t" << FCountGoals << endl;
- cout << "**** Перегруженный виртуальный метод Print класса Вратарь" << endl;
- }
- TPlayer::~TPlayer()
- {//Перегруженный виртуальный Деструктор класса Игрок
- cout << "**** Перегруженный виртуальный Деструктор класса Игрок" << endl;
- }
- TGoalKeeper::~TGoalKeeper()
- {//Перегруженный виртуальный Деструктор класса Вратарь
- cout << "**** Перегруженный виртуальный Деструктор класса Вратарь" << endl;
- }
- //Класс-TComanda
- class TComanda
- {
- private:
- int FCountPlayers; // Количество игроков
- int FCountGoalKeepers; //Количество вратарей
- TPlayer *FPlayers; // Массив игроков
- TGoalKeeper *FGoalKeepers;// Массив вратарей
- public:
- TComanda();// Конструктор по умолчанию
- TComanda(TPlayer* p, TGoalKeeper* g, int max)
- {
- FPlayers = p;
- FGoalKeepers = g;
- FCountPlayers = max;
- FCountGoalKeepers = max;
- }
- ~TComanda();// Деструктор
- void Print();
- void AddPlayer(TPlayer &A);// Добавление игрока
- void AddGoalKeeper(TGoalKeeper &A);//Добавление вратаря
- void DelPlayer(int c);//Удаление игрока
- void DelGoalKeeper(int c);//Удаление вратаря
- TPlayer* GetPlayer(int c) { return &FPlayers[c]; }
- TGoalKeeper* GetGoalKeeper(int c) { return &FGoalKeepers[c]; }
- int GetCountPlayers() { return FCountPlayers; }
- int GetCountGoalKeepers() { return FCountGoalKeepers; }
- };
- TComanda::TComanda()
- {//Конструктор по умолчанию класса Команда
- FCountPlayers = 0;
- FCountGoalKeepers = 0;
- FPlayers = NULL;
- FGoalKeepers = NULL;
- cout << "**** Конструктор по умолчанию класса Команда" << endl;
- }
- void TComanda::AddPlayer(TPlayer &A)
- {//Метод добавления Игрока класса Командa
- int i;
- TPlayer t;
- TPlayer *tmp = new TPlayer[FCountPlayers + 1];
- for (i = 0; i<FCountPlayers; i++)
- tmp[i] = FPlayers[i];
- tmp[FCountPlayers] = A;
- delete[] FPlayers;
- FPlayers = tmp;
- FCountPlayers++;
- cout << "**** Метод добавления Игрока класса Команда" << endl;
- }
- void TComanda::AddGoalKeeper(TGoalKeeper &A)
- {//Метод добавления Вратаря класса Команда
- int i;
- TGoalKeeper *tmp = new TGoalKeeper[FCountGoalKeepers + 1];
- for (i = 0; i<FCountGoalKeepers; i++)
- tmp[i] = FGoalKeepers[i];
- tmp[FCountGoalKeepers] = A;
- delete[] FGoalKeepers;
- FGoalKeepers = tmp;
- FCountGoalKeepers++;
- cout << "**** Метод добавления Вратаря класса Команда" << endl;
- }
- void TComanda::DelPlayer(int c)
- {//Метод удаления Игрока класса Команда
- int i;
- TPlayer *tmp = new TPlayer[FCountPlayers - 1];
- for (i = 0; i<c; i++)
- tmp[i] = FPlayers[i];
- for (i = c + 1; i<FCountPlayers; i++)
- tmp[i - 1] = FPlayers[i];
- delete[] FPlayers;
- FPlayers = tmp;
- FCountPlayers--;
- cout << "**** Метод удаления Игрока класса Команда" << endl;
- }
- void TComanda::DelGoalKeeper(int c)
- {//Метод удаления Вратаря класса Команда
- int i;
- TGoalKeeper *tmp = new TGoalKeeper[FCountGoalKeepers - 1];
- for (i = 0; i<c; i++)
- tmp[i] = FGoalKeepers[i];
- for (i = c + 1; i<FCountGoalKeepers; i++)
- tmp[i - 1] = FGoalKeepers[i];
- delete[] FGoalKeepers;
- FGoalKeepers = tmp;
- FCountGoalKeepers--;
- cout << "**** Метод удаления Вратаря класса Команда" << endl;
- }
- TComanda::~TComanda()
- {// Деструктор класса Команда
- if (FPlayers != NULL)
- delete[] FPlayers;
- if (FGoalKeepers != NULL)
- delete[] FGoalKeepers;
- cout << "**** Деструктор класса Команда" << endl;
- }
- class TabularOutput
- {//табличный вывод информации в файл и на экран
- public:
- virtual void Print(TComanda *C) = 0;
- };
- class StringOutput
- {//вывод информации в ленточной форме в файл и на экран
- public:
- virtual void Print(TComanda *C) = 0;
- };
- class Tabular_Output : public TabularOutput {
- public:
- virtual void TO_Print(TComanda *C) = 0;
- void Print(TComanda *C)
- {
- TO_Print(C);
- }
- };
- class String_Output : public StringOutput {
- public:
- virtual void SO_Print(TComanda *C) = 0;
- void Print(TComanda *C)
- {
- SO_Print(C);
- }
- };
- //Класс-обработчик
- class TProcessor : public Tabular_Output, public String_Output
- {
- public:
- TProcessor();
- TProcessor(TComanda *T);
- TComanda *Tpointer;
- void TO_Print(TComanda *C)
- {
- string out = "";
- cout << "Tabular Output" << endl;
- out += "Tabular Output\n";
- cout << "Name\t" << "Surname\t" << "Goal" << endl;
- out += "Name\tSurname\tBirthday\n";
- for (int i = 0; i < C[0].GetCountGoalKeepers(); i++)
- {
- out += C[0].GetGoalKeeper(i)->GetName() + "\t" + C[0].GetGoalKeeper(i)->GetSurname() + "\t";
- out += to_string(C[0].GetGoalKeeper(i)->GetCountGoals()) + "\n";
- cout << C[0].GetGoalKeeper(i)->GetName() << "\t" << C[0].GetGoalKeeper(i)->GetSurname() << "\t" << C[0].GetGoalKeeper(i)->GetCountGoals() << endl;
- }
- ofstream fout;
- fout.open("TO.txt");
- fout << out;
- fout.close();
- }
- void SO_Print(TComanda *C)
- {
- string out = "";
- out += "String Output\n";
- cout << "String Output" << endl;
- cout << "Name: ";
- out += "Name: ";
- for (int i = 0; i < C[0].GetCountPlayers(); i++)
- {
- out += C[0].GetPlayer(i)->GetName() + "; ";
- cout << C[0].GetPlayer(i)->GetName() << "; ";
- }
- cout << endl;
- cout << "Surname: ";
- out += "\nSurname: ";
- for (int i = 0; i < C[0].GetCountPlayers(); i++)
- {
- out += C[0].GetPlayer(i)->GetSurname() + "; ";
- cout << C[0].GetPlayer(i)->GetSurname() << "; ";
- }
- cout << endl;
- cout << "Goal: ";
- out += "\nGoal: ";
- for (int i = 0; i < C[0].GetCountPlayers(); i++)
- {
- out += to_string(C[0].GetPlayer(i)->GetCountGoal()) + "; ";
- cout << C[0].GetPlayer(i)->GetCountGoal() << "; ";
- }
- cout << endl;
- out += "\n";
- ofstream fout;
- fout.open("SO.txt");
- fout << out;
- fout.close();
- }
- ~TProcessor();
- };
- TProcessor::TProcessor()
- {
- cout << "Constructor class TProcessor" << endl;
- };
- TProcessor::TProcessor(TComanda *T)
- {
- Tpointer = T;
- }
- TProcessor::~TProcessor()
- {
- cout << "Destructor class TProcessor" << endl;
- };
- int main()
- {
- setlocale(LC_ALL, "rus");
- int max = 0, sortRow = 0;
- string name = "", surname = "";
- int year = 0;
- cout << "Enter the number of futbolist: ";
- cin >> max;
- TPlayer *A = new TPlayer[max];
- for (int i = 0; i<max; i++)
- A[i].Input();
- TGoalKeeper *B = new TGoalKeeper[max];
- for (int i = 0; i<max; i++)
- B[i].Input();
- TProcessor *p = new TProcessor;
- //for (int i = 0; i<max; i++)
- // p->AddPlayer(A[i]);
- TPlayer *player = new TPlayer[max];
- TGoalKeeper *keeper = new TGoalKeeper[max];
- TComanda com(A, B, max);
- TProcessor processor(&com);
- StringOutput* SO = &processor;
- TabularOutput* TO = &processor;
- SO->Print(&com);
- TO->Print(&com);
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment