Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Lab_6.cpp
- #include "stdafx.h"
- #include <iostream>
- #include <locale>
- #include <string>
- using namespace std;
- class TRow
- {
- protected:
- int FId;
- string FName;
- string FSurname;
- public:
- TRow(); // Конструктор по умолчанию
- TRow(int Id, string Name, string Surname);
- virtual ~TRow(); // виртуальный деструктор
- 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 TText :public TRow
- {
- private:
- string FMiddleName;
- public:
- TText(int Id, string Name, string Surname, string middle); // Конструктор с парамметрами
- TText(); // Конструктор по умолчанию
- TText(TText &A); // Конструктор копирования
- ~TText();// Деструктор по умолчанию
- TText& operator =(const TText &A); // Перегруженная операция =
- string GetMiddleName() { return FMiddleName; }
- void SetMiddleName(string middle) { FMiddleName = middle; }
- void Input(); // перегруженный виртуальный метод
- void Print(); // перегруженный виртуальный метод
- };
- class TInt :public TRow
- {
- private:
- int FYear;
- public:
- TInt();// Конструктор по умолчанию
- TInt(int Id, string Name, string Surname, int Year);// Конструктор инициализатор
- TInt(TInt &A);// Конструктор копирования
- ~TInt();// Деструктор
- TInt& operator =(const TInt &A);// Перегруженная операция =
- int GetYear() { return FYear; }
- void SetYear(int Year) { FYear = Year; }
- void Input();// перегруженный виртуальный метод
- void Print();// перегруженный виртуальный метод
- };
- TRow::TRow()
- {// Конструктор по умолчанию базового класса Строка
- FId = 0;
- FName = "";
- FSurname = "";
- //cout << "**** Конструктор по умолчанию базового класса Строка" << endl;
- }
- TRow::TRow(int Id, string Name, string Surname)
- {// Конструктор инициализатор базового класса Строка
- FId = Id;
- FName = Name;
- FSurname = Surname;
- //cout << "**** Конструктор инициализатор базового класса Строка" << endl;
- }
- TRow::~TRow()
- {//Деструктор базового класса Строка
- //cout << "**** Деструктор базового класса Строка" << endl;
- }
- TText::TText(int Id, string Name, string Surname, string middle) :TRow(Id, Name, Surname)
- {// Конструктор инициализатор класса Текст
- FMiddleName = middle;
- //cout << "**** Конструктор инициализатор класса Текст" << endl;
- }
- TText::TText()
- {//Конструктор по умолчанию класса Текст
- FId = 0;
- FName = "";
- FSurname = "";
- FMiddleName = "";
- //cout << "**** Конструктор по умолчанию класса Текст" << endl;
- }
- TInt::TInt(int Id, string Name, string Surname, int Year) :TRow(Id, Name, Surname)
- {//Конструктор инициализатор класса Число
- FYear = Year;
- //cout << "**** Конструктор инициализатор класса Число" << endl;
- }
- TInt::TInt()
- {//Конструктор по умолчанию класса Число
- FId = 0;
- FName = "";
- FSurname = "";
- FYear = 0;
- //cout << "**** Конструктор по умолчанию класса Число" << endl;
- }
- TText::TText(TText &A)
- {//Конструктор копирования класса Текст
- FId = A.FId;
- FName = A.FName;
- FSurname = A.FSurname;
- FMiddleName = A.FMiddleName;
- //cout << "**** Конструктор копирования класса Текст" << endl;
- }
- TInt& TInt::operator =(const TInt &A)
- {//Перегруженная операция = класса Число
- FId = A.FId;
- FName = A.FName;
- FSurname = A.FSurname;
- FYear = A.FYear;
- //cout << "**** Перегруженная операция = класса Число" << endl;
- return *this;
- }
- TText& TText::operator =(const TText &A)
- {//Перегруженная операция = класса Текст
- FId = A.FId;
- FName = A.FName;
- FSurname = A.FSurname;
- FMiddleName = A.FMiddleName;
- //cout << "**** Перегруженная операция = класса Текст" << endl;
- return *this;
- }
- TInt::TInt(TInt &A)
- {//Конструктор копирования класса Число
- FId = A.FId;
- FName = A.FName;
- FSurname = A.FSurname;
- FYear = A.FYear;
- //cout << "****Конструктор копирования класса Число" << endl;
- }
- void TText::Input()
- {//Ввод текстовой строки:
- cout << "Ввод текстовой строки:" << endl;
- cout << "Введите ID текстовой строки: ";
- cin >> FId;
- cout << "Введите Имя: ";
- cin >> FName;
- cout << "Введите Фамилию: ";
- cin >> FSurname;
- cout << "Введите Отчество: ";
- cin >> FMiddleName;
- //cout << "**** Перегруженный виртуальный метод Input класса Текст" << endl;
- }
- void TInt::Input()
- {//Ввод числовой строки:
- cout << "Ввод числовой строки:" << endl;
- cout << "Введите ID числовой строки: ";
- cin >> FId;
- cout << "Введите Имя: ";
- cin >> FName;
- cout << "Введите Фамилию: ";
- cin >> FSurname;
- cout << "Введите Год Рождения: ";
- cin >> FYear;
- //cout << "**** Перегруженный виртуальный метод Input класса Число" << endl;
- }
- void TText::Print()
- {// Перегруженный виртуальный метод класса Текст
- cout << "\t" << FId << "\t" << FName << "\t" << FSurname << "\t" << FMiddleName << endl;
- //cout << "**** Перегруженный виртуальный метод Print класса Текст" << endl;
- }
- void TInt::Print()
- {// Перегруженный виртуальный метод Print класса Число
- cout << "\t" << FId << "\t" << FName << "\t" << FSurname << "\t" << FYear << endl;
- //cout << "**** Перегруженный виртуальный метод Print класса Число" << endl;
- }
- TText::~TText()
- {//Перегруженный виртуальный Деструктор класса Текст
- //cout << "**** Перегруженный виртуальный Деструктор класса Текст" << endl;
- }
- TInt::~TInt()
- {//Перегруженный виртуальный Деструктор класса Число
- //cout << "**** Перегруженный виртуальный Деструктор класса Число" << endl;
- }
- //-----------------------------------------------
- class TTable
- {
- private:
- int FCountTexts; // Количество текстовых строк
- int FCountInts; //Количество числовых строк
- TText *FTexts; // Массив текстовых строк
- TInt *FInts;// Массив числовых строк
- public:
- TTable();// Конструктор по умолчанию
- ~TTable();// Деструктор
- void Print();
- void AddText(TText &A);// Добавление текстовой строки
- void AddInt(TInt &A);//Добавление числовой строки
- TText* GetText(int c) { return &FTexts[c]; }
- TInt* GetInt(int c) { return &FInts[c]; }
- int GetCountTexts() { return FCountTexts; }
- int GetCountInts() { return FCountInts; }
- };
- TTable::TTable()
- {//Конструктор по умолчанию класса Таблица
- FCountTexts = 0;
- FCountInts = 0;
- FTexts = NULL;
- FInts = NULL;
- //cout << "**** Конструктор по умолчанию класса Таблица" << endl;
- }
- void TTable::AddText(TText &A)
- {//Метод добавления Текста класса Строка
- int i;
- TText t;
- TText *tmp = new TText[FCountTexts + 1];
- for (i = 0; i<FCountTexts; i++)
- tmp[i] = FTexts[i];
- tmp[FCountTexts] = A;
- delete[] FTexts;
- FTexts = tmp;
- FCountTexts++;
- //cout << "**** Метод добавления текстовой строки класса Строка" << endl;
- }
- void TTable::AddInt(TInt &A)
- {//Метод добавления Числа класса Строка
- int i;
- TInt *tmp = new TInt[FCountInts + 1];
- for (i = 0; i<FCountInts; i++)
- tmp[i] = FInts[i];
- tmp[FCountInts] = A;
- delete[] FInts;
- FInts = tmp;
- FCountInts++;
- //cout << "**** Метод добавления числовой строки класса Строка" << endl;
- }
- TTable::~TTable()
- {// Деструктор класса Таблица
- if (FTexts != NULL)
- delete[] FTexts;
- if (FInts != NULL)
- delete[] FInts;
- //cout << "**** Деструктор класса Таблица" << endl;
- }
- void TTable::Print()
- {// Метод вывод строки класса Таблица
- int i;
- cout << "Текстовые поля:" << endl;
- for (i = 0; i<FCountTexts; i++)
- FTexts[i].Print();
- cout << "Числовые поля:" << endl;
- for (i = 0; i<FCountInts; i++)
- FInts[i].Print();
- //cout << "**** Метод вывод строки класса Таблица" << endl;
- }
- //-----------------------------------------------------
- class TProcessor
- {// Класс обработчик
- private:
- TTable* t; // Таблица
- public:
- TProcessor();// Конструктор по умолчанию
- ~TProcessor();//Деструктор
- void Sort(int sortColumn); // Вывод строк в порядке убывания
- void AddText(TText &A) { t->AddText(A); } // Добавить текстовую строку
- void AddInt(TInt &A) { t->AddInt(A); }// Добавить числовой строки
- void Print() { t->Print(); }// Вывод таблицы
- };
- TProcessor::TProcessor()
- {// Конструктор по умолчанию класса Обработчик
- t = new TTable();
- //cout << "**** Конструктор по умолчанию класса Обработчик" << endl;
- }
- TProcessor::~TProcessor()
- {// Деструктор класса Обработчик
- delete t;
- //cout << "**** Деструктор класса Обработчик" << endl;
- };
- void TProcessor::Sort(int sortColumn)
- {//Вывод текстовыех полей отсортированных в порядке возрастания
- cout << "Отсортированные по убыванию текстовые поля:" << endl;
- cout << "\t" << "ID" << "\t" << "Name" << "\t" << "Surname" << "\t" << "Middle" << endl;
- for (int i = 0; i < t->GetCountTexts(); i++)
- {
- for (int j = i + 1; j < t->GetCountTexts(); j++)
- {
- string istr = "";
- string jstr = "";
- if (sortColumn == 1)
- {
- istr = t->GetText(i)->GetID();
- jstr = t->GetText(j)->GetID();
- }
- else if (sortColumn == 2)
- {
- istr = t->GetText(i)->GetName();
- jstr = t->GetText(j)->GetName();
- }
- else if (sortColumn == 3)
- {
- istr = t->GetText(i)->GetSurname();
- jstr = t->GetText(j)->GetSurname();
- }
- else if (sortColumn == 4)
- {
- istr = t->GetText(i)->GetMiddleName();
- jstr = t->GetText(j)->GetMiddleName();
- }
- if (strcmp((istr.c_str()), (jstr.c_str())) > 0)
- {
- int itemp = t->GetText(i)->GetID(); //temp=i
- t->GetText(i)->SetID(t->GetText(j)->GetID()); //i=j
- t->GetText(j)->SetID(itemp); //i=j
- string stemp = t->GetText(i)->GetName(); //temp=i
- t->GetText(i)->SetName(t->GetText(j)->GetName()); //i=j
- t->GetText(j)->SetName(stemp); //i=j
- stemp = t->GetText(i)->GetSurname(); //temp=i
- t->GetText(i)->SetSurname(t->GetText(j)->GetSurname()); //i=j
- t->GetText(j)->SetSurname(stemp); //i=j
- stemp = t->GetText(i)->GetMiddleName(); //temp=i
- t->GetText(i)->SetMiddleName(t->GetText(j)->GetMiddleName()); //i=j
- t->GetText(j)->SetMiddleName(stemp); //i=j
- }
- }
- }
- for (int i = 0; i < t->GetCountTexts(); i++)
- t->GetText(i)->Print();
- //---------------------------
- cout << "Отсортированные по возрастанию числовые поля:" << endl;
- cout << "\t" << "ID" << "\t" << "Name" << "\t" << "Surname" << "\t" << "Year" << endl;
- for (int i = 0; i < t->GetCountInts(); i++)
- {
- for (int j = i + 1; j < t->GetCountInts(); j++)
- {
- string istr = "";
- string jstr = "";
- if (sortColumn == 1)
- {
- istr = t->GetInt(i)->GetID();
- jstr = t->GetInt(j)->GetID();
- }
- else if (sortColumn == 2)
- {
- istr = t->GetInt(i)->GetName();
- jstr = t->GetInt(j)->GetName();
- }
- else if (sortColumn == 3)
- {
- istr = t->GetInt(i)->GetSurname();
- jstr = t->GetInt(j)->GetSurname();
- }
- else if (sortColumn == 4)
- {
- istr = t->GetInt(i)->GetYear();
- jstr = t->GetInt(j)->GetYear();
- }
- if (strcmp((istr.c_str()), (jstr.c_str())) > 0)
- {
- int itemp = t->GetInt(i)->GetID(); //temp=i
- t->GetInt(i)->SetID(t->GetInt(j)->GetID()); //i=j
- t->GetInt(j)->SetID(itemp); //i=j
- string stemp = t->GetInt(i)->GetName(); //temp=i
- t->GetInt(i)->SetName(t->GetInt(j)->GetName()); //i=j
- t->GetInt(j)->SetName(stemp); //i=j
- stemp = t->GetInt(i)->GetSurname(); //temp=i
- t->GetInt(i)->SetSurname(t->GetInt(j)->GetSurname()); //i=j
- t->GetInt(j)->SetSurname(stemp); //i=j
- itemp = t->GetInt(i)->GetYear(); //temp=i
- t->GetInt(i)->SetYear(t->GetInt(j)->GetYear()); //i=j
- t->GetInt(j)->SetYear(itemp); //i=j
- }
- }
- }
- for (int i = 0; i < t->GetCountInts(); i++)
- t->GetInt(i)->Print();
- }
- int main()
- {
- setlocale(LC_ALL, "Rus");
- int CountTexts, CountInts;
- int i;
- cout << "Введите количество текстовых строк: ";
- cin >> CountTexts;
- cout << "Введите количество числовых строк: ";
- cin >> CountInts;
- TText *A = new TText[CountTexts];
- for (i = 0; i<CountTexts; i++)
- A[i].Input();
- TInt *B = new TInt[CountInts];
- for (i = 0; i<CountInts; i++)
- B[i].Input();
- // Работа с классом Обработчик
- cout << "\n Работа с классом Обработчик" << endl;
- TProcessor *p = new TProcessor;
- for (i = 0; i<CountTexts; i++)
- p->AddText(A[i]);
- for (i = 0; i<CountInts; i++)
- p->AddInt(B[i]);
- cout << " Вся таблица: \n";
- p->Print();
- int sortColumn;
- cout << "Сортировка по столбцам" << endl;
- cout << "1-ID" << endl;
- cout << "2-Name" << endl;
- cout << "3-Surname" << endl;
- cout << "4-Middle(Text) || Year(Int)" << endl;
- cout << "Enter(1-4): ";
- cin >> sortColumn;
- if (sortColumn > 0 && sortColumn < 5)
- p->Sort(sortColumn);
- else
- cout << "Неверный выбор" << endl;
- delete[] A;
- delete[] B;
- delete p;
- system("pause");
- // Работа с массивом указателей на тип базового класса
- cout << "\n Работа с массивом указателей на тип базового класса\n" << endl;
- TRow **array_table;
- array_table = new TRow*[CountTexts + CountInts];
- for (i = 0; i<CountTexts; i++)
- array_table[i] = new TText;
- for (i = CountTexts; i<CountTexts + CountInts; i++)
- array_table[i] = new TInt;
- cout << "\n Ввод строк:\n" << endl;
- for (i = 0; i<CountTexts + CountInts; i++)
- array_table[i]->Input();
- cout << "\n Таблица:\n" << endl;
- for (i = 0; i<CountTexts + CountInts; i++)
- array_table[i]->Print();
- for (i = 0; i<CountTexts + CountInts; i++)
- delete array_table[i];
- delete[] array_table;
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment