Advertisement
Xom9ik

Lab_6/8 var (IIl semester)

Dec 9th, 2017
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 19.10 KB | None | 0 0
  1. //Lab_6.cpp
  2. #include "stdafx.h"
  3. #include <stdio.h>
  4. #include <conio.h>
  5. #include <stdlib.h>
  6. #include <math.h>
  7. #include <iostream>
  8. #include <locale.h>
  9. #include <string>
  10. using namespace std;
  11.  
  12. class TKvartira
  13. {
  14. protected:
  15.     int FFloor;
  16.     int FHeight;
  17.     int FArea;
  18.     int FNumberOfRooms;
  19.     bool FBalcony;
  20. public:
  21.     TKvartira(); // Конструктор по умолчанию
  22.     TKvartira(int Floor, int Height, int Area, int NumberOfRooms, bool Balcony);
  23.     virtual ~TKvartira(); // виртуальный деструктор
  24.     virtual void Print() = 0; // виртуальный метод вывода сведений о Квартире      
  25.     virtual void Input() = 0;// виртуальный метод ввода сведений о Квартире
  26.     int GetAreaOfRooms() { return FNumberOfRooms; }
  27.     int GetFloor() { return FFloor; }
  28.     int GetHeight() { return FHeight; }
  29.     int GetArea() { return FArea; }
  30.     int GetBalcony() { return FBalcony; }
  31.     void SetID(int ID) { FNumberOfRooms = ID; }
  32.     void SetFloor(int Floor) { FFloor = Floor; }
  33.     void SetSurFloor(int surFloor) { FHeight = surFloor; }
  34.     void SetArea(int Area) { FArea = Area; }
  35.     void SetBalcony(int Area) { FArea = Area; }
  36. };
  37. class TVedom :public TKvartira
  38. {
  39. public:
  40.     TVedom(int Floor, int Height, int Area, int NumberOfRooms, bool Balcony); // Конструктор с парамметрами
  41.     TVedom(); // Конструктор по умолчанию
  42.     TVedom(TVedom &A); // Конструктор копирования
  43.     ~TVedom();// Деструктор по умолчанию
  44.     TVedom& operator =(const TVedom &A); // Перегруженная операция =
  45.     void Input(); // перегруженный виртуальный метод
  46.     void Print(); // перегруженный виртуальный метод
  47. };
  48. class TChastnaya :public TKvartira
  49. {
  50. public:
  51.     TChastnaya();// Конструктор по умолчанию
  52.     TChastnaya(int Floor, int Height, int Area, int NumberOfRooms, bool Balcony);// Конструктор инициализатор
  53.     TChastnaya(TChastnaya &A);// Конструктор копирования
  54.     ~TChastnaya();// Деструктор
  55.     TChastnaya& operator =(const TChastnaya &A);// Перегруженная операция =
  56.     void Input();// перегруженный виртуальный метод
  57.     void Print();// перегруженный виртуальный метод
  58. };
  59. TKvartira::TKvartira()
  60. {// Конструктор по умолчанию базового класса Квартира
  61.     FNumberOfRooms = 0;
  62.     FFloor = 0;
  63.     FHeight = 0;
  64.     FArea = 0;
  65.     FBalcony = false;
  66.     cout << "**** Конструктор по умолчанию базового класса Квартира" << endl;
  67. }
  68. TKvartira::TKvartira(int Floor, int Height, int Area, int NumberOfRooms, bool Balcony)
  69. {// Конструктор инициализатор базового класса Квартира
  70.     FNumberOfRooms = NumberOfRooms;
  71.     FFloor = Floor;
  72.     FHeight = Height;
  73.     FArea = Area;
  74.     FBalcony = Balcony;
  75.     cout << "**** Конструктор инициализатор базового класса Квартира" << endl;
  76. }
  77. TKvartira::~TKvartira()
  78. {//Деструктор базового класса Квартира
  79.     cout << "**** Деструктор базового класса Квартира" << endl;
  80. }
  81. TVedom::TVedom(int Floor, int Height, int Area, int NumberOfRooms, bool Balcony) :TKvartira(Floor, Height, Area, NumberOfRooms, Balcony)
  82. {// Конструктор инициализатор класса Ведомственная квартира
  83.     cout << "**** Конструктор инициализатор класса Ведомственная квартира" << endl;
  84. }
  85. TVedom::TVedom()
  86. {//Конструктор по умолчанию класса Ведомственная квартира
  87.     FNumberOfRooms = 0;
  88.     FFloor = 0;
  89.     FHeight = 0;
  90.     FArea = 0;
  91.     FBalcony = false;
  92.     cout << "**** Конструктор по умолчанию класса Ведомственная квартира" << endl;
  93. }
  94. TChastnaya::TChastnaya(int Floor, int Height, int Area, int NumberOfRooms, bool Balcony) :TKvartira(Floor, Height, Area, NumberOfRooms, Balcony)
  95. {//Конструктор инициализатор класса Частная квартира
  96.     cout << "**** Конструктор инициализатор класса Частная квартира" << endl;
  97. }
  98. TChastnaya::TChastnaya()
  99. {//Конструктор по умолчанию класса Частная квартира
  100.     FNumberOfRooms = 0;
  101.     FFloor = 0;
  102.     FHeight = 0;
  103.     FArea = 0;
  104.     FBalcony = false;
  105.     cout << "**** Конструктор по умолчанию класса Частная квартира" << endl;
  106. }
  107. TVedom::TVedom(TVedom &A)
  108. {//Конструктор копирования класса Ведомственная квартира
  109.     FNumberOfRooms = A.FNumberOfRooms;
  110.     FFloor = A.FFloor;
  111.     FHeight = A.FHeight;
  112.     FArea = A.FArea;
  113.     FBalcony = A.FBalcony;
  114.     cout << "**** Конструктор копирования класса Ведомственная квартира" << endl;
  115. }
  116. TChastnaya& TChastnaya::operator =(const TChastnaya &A)
  117. {//Перегруженная операция = класса Частная квартира
  118.     FNumberOfRooms = A.FNumberOfRooms;
  119.     FFloor = A.FFloor;
  120.     FHeight = A.FHeight;
  121.     FArea = A.FArea;
  122.     FBalcony = A.FBalcony;
  123.     cout << "**** Перегруженная операция = класса Частная квартира" << endl;
  124.     return *this;
  125. }
  126. TVedom& TVedom::operator =(const TVedom &A)
  127. {//Перегруженная операция = класса Ведомственная квартира
  128.     FNumberOfRooms = A.FNumberOfRooms;
  129.     FFloor = A.FFloor;
  130.     FHeight = A.FHeight;
  131.     FArea = A.FArea;
  132.     FBalcony = A.FBalcony;
  133.     cout << "**** Перегруженная операция = класса Ведомственная квартира" << endl;
  134.     return *this;
  135. }
  136. TChastnaya::TChastnaya(TChastnaya &A)
  137. {//Конструктор копирования класса Частная квартира
  138.     FNumberOfRooms = A.FNumberOfRooms;
  139.     FFloor = A.FFloor;
  140.     FHeight = A.FHeight;
  141.     FArea = A.FArea;
  142.     FBalcony = A.FBalcony;
  143.     cout << "****Конструктор копирования класса Частная квартира" << endl;
  144. }
  145. void TVedom::Input()
  146. {//Ввод сведений о Ведомственная квартира:
  147.     cout << "Ввод сведений о Ведомственная квартира" << endl;
  148.     cout << "Введите количество комнат ведомственной квартиры: ";
  149.     cin >> FNumberOfRooms;
  150.     cout << "Введите этаж: ";
  151.     cin >> FFloor;
  152.     cout << "Введите высоту: ";
  153.     cin >> FHeight;
  154.     cout << "Введите площадь: ";
  155.     cin >> FArea;
  156.     cout << "Введите наличие балкона(0,1): ";
  157.     cin >> FBalcony;
  158.     cout << "**** Перегруженный виртуальный метод Input класса Ведомственная квартира" << endl;
  159. }
  160. void TChastnaya::Input()
  161. {//Ввод сведений о Частная квартира:
  162.     cout << "Ввод сведений о Частная квартира:" << endl;
  163.     cout << "Введите количество комнат частной квартиры: ";
  164.     cin >> FNumberOfRooms;
  165.     cout << "Введите этаж: ";
  166.     cin >> FFloor;
  167.     cout << "Введите высоту: ";
  168.     cin >> FHeight;
  169.     cout << "Введите площадь: ";
  170.     cin >> FArea;
  171.     cout << "Введите наличие балкона(0,1): ";
  172.     cin >> FBalcony;
  173.     cout << "**** Перегруженный виртуальный метод Input класса Частная квартира" << endl;
  174. }
  175. void TVedom::Print()
  176. {// Перегруженный виртуальный метод класса Ведомственная квартира
  177.     cout << "\t" << FNumberOfRooms << "\t" << FFloor << "\t" << FHeight << "\t" << FArea << "\t" << FBalcony << endl;
  178. }
  179. void TChastnaya::Print()
  180. {// Перегруженный виртуальный метод Print класса Частная квартира
  181.     cout << "\t" << FNumberOfRooms << "\t" << FFloor << "\t" << FHeight << "\t" << FArea << "\t" << FBalcony << endl;
  182. }
  183. TVedom::~TVedom()
  184. {//Перегруженный виртуальный Деструктор класса Ведомственная квартира
  185.     cout << "**** Перегруженный виртуальный Деструктор класса Ведомственная квартира" << endl;
  186. }
  187. TChastnaya::~TChastnaya()
  188. {//Перегруженный виртуальный Деструктор класса Частная квартира
  189.     cout << "**** Перегруженный виртуальный Деструктор класса Частная квартира" << endl;
  190. }
  191. //-----------------------------------------------
  192. class TZdanie
  193. {
  194. private:
  195.     int FCounTVedoms; // Количество Ведомственная квартира  
  196.     int FCounTChastnaya; //Количество Частная квартира
  197.     TVedom *FVedom; // Массив Ведомственная квартира
  198.     TChastnaya *FChastnaya;// Массив Частная квартира
  199. public:
  200.     TZdanie();// Конструктор по умолчанию
  201.     ~TZdanie();// Деструктор
  202.     void Print();
  203.     void AddVedom(TVedom &A);// Добавление Ведомственная квартира
  204.     void AddChastnaya(TChastnaya &A);//Добавление Частная квартира
  205.     void DelVedom(int c);//Удаление Ведомственная квартира
  206.     void DelChastnaya(int c);//Удаление Частная квартира
  207.     TVedom* GeTVedom(int c) { return &FVedom[c]; }
  208.     TChastnaya* GeTChastnaya(int c) { return &FChastnaya[c]; }
  209.     int GetCounTVedoms() { return FCounTVedoms; }
  210.     int GetCounTChastnaya() { return FCounTChastnaya; }
  211. };
  212. TZdanie::TZdanie()
  213. {//Конструктор по умолчанию класса Здание
  214.     FCounTVedoms = 0;
  215.     FCounTChastnaya = 0;
  216.     FVedom = NULL;
  217.     FChastnaya = NULL;
  218.     cout << "**** Конструктор по умолчанию класса Здание" << endl;
  219. }
  220. void TZdanie::AddVedom(TVedom &A)
  221. {//Метод добавления Ведомственная квартира класса Командa
  222.     int i;
  223.     TVedom t;
  224.     TVedom *tmp = new TVedom[FCounTVedoms + 1];
  225.     for (i = 0; i<FCounTVedoms; i++)
  226.         tmp[i] = FVedom[i];
  227.     tmp[FCounTVedoms] = A;
  228.     delete[] FVedom;
  229.     FVedom = tmp;
  230.     FCounTVedoms++;
  231.     cout << "**** Метод добавления Ведомственная квартира класса Здание" << endl;
  232. }
  233. void TZdanie::AddChastnaya(TChastnaya &A)
  234. {//Метод добавления Частная квартира класса Здание
  235.     int i;
  236.     TChastnaya *tmp = new TChastnaya[FCounTChastnaya + 1];
  237.     for (i = 0; i<FCounTChastnaya; i++)
  238.         tmp[i] = FChastnaya[i];
  239.     tmp[FCounTChastnaya] = A;
  240.     delete[] FChastnaya;
  241.     FChastnaya = tmp;
  242.     FCounTChastnaya++;
  243.     cout << "**** Метод добавления Частная квартира класса Здание" << endl;
  244. }
  245. void TZdanie::DelVedom(int c)
  246. {//Метод удаления Ведомственная квартира класса Здание
  247.     int i;
  248.     TVedom *tmp = new TVedom[FCounTVedoms - 1];
  249.     for (i = 0; i<c; i++)
  250.         tmp[i] = FVedom[i];
  251.     for (i = c + 1; i<FCounTVedoms; i++)
  252.         tmp[i - 1] = FVedom[i];
  253.     delete[] FVedom;
  254.     FVedom = tmp;
  255.     FCounTVedoms--;
  256.     cout << "**** Метод удаления Ведомственная квартира класса Здание" << endl;
  257. }
  258. void TZdanie::DelChastnaya(int c)
  259. {//Метод удаления Частная квартира класса Здание
  260.     int i;
  261.     TChastnaya *tmp = new TChastnaya[FCounTChastnaya - 1];
  262.     for (i = 0; i<c; i++)
  263.         tmp[i] = FChastnaya[i];
  264.     for (i = c + 1; i<FCounTChastnaya; i++)
  265.         tmp[i - 1] = FChastnaya[i];
  266.     delete[] FChastnaya;
  267.     FChastnaya = tmp;
  268.     FCounTChastnaya--;
  269.     cout << "**** Метод удаления Частная квартира класса Здание" << endl;
  270. }
  271. TZdanie::~TZdanie()
  272. {// Деструктор класса Здание
  273.     if (FVedom != NULL)
  274.         delete[] FVedom;
  275.     if (FChastnaya != NULL)
  276.         delete[] FChastnaya;
  277.     cout << "**** Деструктор класса Здание" << endl;
  278. }
  279. void TZdanie::Print()
  280. {// Метод вывод сведений о здании класса Здание
  281.     int i;
  282.     cout << "Ведомственная квартираи:" << endl;
  283.     for (i = 0; i<FCounTVedoms; i++)
  284.         FVedom[i].Print();
  285.     cout << "Вратари:" << endl;
  286.     for (i = 0; i<FCounTChastnaya; i++)
  287.         FChastnaya[i].Print();
  288.     cout << "**** Метод вывод сведений о здании класса Здание" << endl;
  289. }
  290. //-----------------------------------------------------
  291. class TProcessor
  292. {// Класс обработчик
  293. private:
  294.     TZdanie* t; // Здание
  295.     int max1, max2, max3, imax1, imax2, imax3;
  296.     int min1, min2, min3, imin1, imin2, imin3;
  297. public:
  298.     TProcessor();// Конструктор по умолчанию
  299.     ~TProcessor();//Деструктор
  300.     void Search();
  301.     void AddVedom(TVedom &A) { t->AddVedom(A); } // Добавить Ведомственная квартира
  302.     void AddChastnaya(TChastnaya &A)
  303.     {
  304.         t->AddChastnaya(A);
  305.     }// Добавить Частная квартира
  306.     void DelVedom(int c) { t->DelVedom(c); }//Удалить Ведомственная квартира
  307.     void DelChastnaya(int c)
  308.     {
  309.         t->DelChastnaya(c);
  310.     }//Удалить Частная квартира
  311.     void Print() { t->Print(); }// Вывод сведений о здании
  312. };
  313. TProcessor::TProcessor()
  314. {// Конструктор по умолчанию класса Обработчик
  315.     t = new TZdanie();
  316.     cout << "**** Конструктор по умолчанию класса Обработчик" << endl;
  317. }
  318. TProcessor::~TProcessor()
  319. {// Деструктор класса Обработчик
  320.     delete t;
  321.     cout << "**** Деструктор класса Обработчик" << endl;
  322. };
  323. void TProcessor::Search()
  324. {
  325.     cout << "По какому параметру произвести поиск?" << endl;
  326.     int option;
  327.     cout << "1-Площадь" << endl;
  328.     cout << "2-Количество комнат" << endl;
  329.     cout << "3-Этаж" << endl;
  330.     cout << "4-Наличие балкона" << endl;
  331.     cout << "5-Высота потолков" << endl;
  332.     cout << "Ваш выбор: ";
  333.     cin >> option;
  334.     switch (option)
  335.     {
  336.     case 1:
  337.     {
  338.         int value;
  339.         cout << "Введите площадь: ";
  340.         cin >> value;
  341.         cout << "Квартиры с площадью больше " << value << endl;
  342.         for (int i = 0; i<t->GetCounTChastnaya(); i++)
  343.             if (t->GeTChastnaya(i)->GetArea()>=value)
  344.                 t->GeTChastnaya(i)->Print();
  345.         for (int i = 0; i<t->GetCounTVedoms(); i++)
  346.             if (t->GeTVedom(i)->GetArea() >= value)
  347.                 t->GeTVedom(i)->Print();
  348.     }
  349.     case 2:
  350.     {
  351.         int value;
  352.         cout << "Введите количество комнат: ";
  353.         cin >> value;
  354.         cout << "Квартиры с количеством комнат больше " << value << endl;
  355.         for (int i = 0; i<t->GetCounTChastnaya(); i++)
  356.             if (t->GeTChastnaya(i)->GetAreaOfRooms() >= value)
  357.                 t->GeTChastnaya(i)->Print();
  358.         for (int i = 0; i<t->GetCounTVedoms(); i++)
  359.             if (t->GeTVedom(i)->GetAreaOfRooms() >= value)
  360.                 t->GeTVedom(i)->Print();
  361.     }
  362.     case 3:
  363.     {
  364.         int value;
  365.         cout << "Введите этаж: ";
  366.         cin >> value;
  367.         cout << "Квартиры с этажом " << value << endl;
  368.         for (int i = 0; i<t->GetCounTChastnaya(); i++)
  369.             if (t->GeTChastnaya(i)->GetFloor() == value)
  370.                 t->GeTChastnaya(i)->Print();
  371.         for (int i = 0; i<t->GetCounTVedoms(); i++)
  372.             if (t->GeTVedom(i)->GetFloor() >= value)
  373.                 t->GeTVedom(i)->Print();
  374.     }
  375.     case 4:
  376.     {
  377.         int value;
  378.         cout << "Введите наличие балкона(0,1): ";
  379.         cin >> value;
  380.         cout << "Квартиры с балконом " << value << endl;
  381.         for (int i = 0; i<t->GetCounTChastnaya(); i++)
  382.             if (t->GeTChastnaya(i)->GetBalcony() == value)
  383.                 t->GeTChastnaya(i)->Print();
  384.         for (int i = 0; i<t->GetCounTVedoms(); i++)
  385.             if (t->GeTVedom(i)->GetBalcony() == value)
  386.                 t->GeTVedom(i)->Print();
  387.     }
  388.     case 5:
  389.     {
  390.         int value;
  391.         cout << "Введите высоту потолков: ";
  392.         cin >> value;
  393.         cout << "Квартиры с высотой потолков больше " << value << endl;
  394.         for (int i = 0; i<t->GetCounTChastnaya(); i++)
  395.             if (t->GeTChastnaya(i)->GetHeight() >= value)
  396.                 t->GeTChastnaya(i)->Print();
  397.         for (int i = 0; i<t->GetCounTVedoms(); i++)
  398.             if (t->GeTVedom(i)->GetHeight() >= value)
  399.                 t->GeTVedom(i)->Print();
  400.     }
  401.     default:
  402.         break;
  403.     }
  404. }
  405. int main()
  406. {
  407.     setlocale(LC_ALL, "Rus");
  408.     int CounTVedoms, CounTChastnaya;
  409.     int i;
  410.     cout << "Введите количество Ведомственная квартира: ";
  411.     cin >> CounTVedoms;
  412.     cout << "Введите количество Частная квартира: ";
  413.     cin >> CounTChastnaya;
  414.     TVedom *A = new TVedom[CounTVedoms];
  415.     for (i = 0; i<CounTVedoms; i++)
  416.         A[i].Input();
  417.     TChastnaya *B = new TChastnaya[CounTChastnaya];
  418.     for (i = 0; i<CounTChastnaya; i++)
  419.         B[i].Input();
  420.     // Работа с классом Обработчик
  421.     cout << "\n Работа с классом Обработчик" << endl;
  422.     TProcessor *p = new TProcessor;
  423.     for (i = 0; i<CounTVedoms; i++)
  424.         p->AddVedom(A[i]);
  425.     for (i = 0; i<CounTChastnaya; i++)
  426.         p->AddChastnaya(B[i]);
  427.     cout << " Все квартиры в здании: \n";
  428.     p->Print();
  429.     p->Search();
  430.     system("pause");
  431.     delete[] A;
  432.     delete[] B;
  433.     delete p;
  434.     // Работа с массивом указателей на тип базового класса
  435.     cout << "\n Работа с массивом указателей на тип базового класса\n" << endl;
  436.     TKvartira **array_zdanie;
  437.     array_zdanie = new TKvartira*[CounTVedoms + CounTChastnaya];
  438.     for (i = 0; i<CounTVedoms; i++)
  439.         array_zdanie[i] = new TVedom;
  440.     for (i = CounTVedoms; i<CounTVedoms + CounTChastnaya; i++)
  441.         array_zdanie[i] = new TChastnaya;
  442.     cout << "\n Ввод сведений о здании:\n" << endl;
  443.     for (i = 0; i<CounTVedoms + CounTChastnaya; i++)
  444.         array_zdanie[i]->Input();
  445.     cout << "\n В здании имеются следующие квартиры:\n" << endl;
  446.     for (i = 0; i<CounTVedoms + CounTChastnaya; i++)
  447.         array_zdanie[i]->Print();
  448.     for (i = 0; i<CounTVedoms + CounTChastnaya; i++)
  449.         delete array_zdanie[i];
  450.     delete[] array_zdanie;
  451.     system("pause");
  452.     return 0;
  453. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement