Alx09

Untitled

Jan 27th, 2021
745
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include<iostream>
  2. #include<fstream>
  3. #include<conio.h>
  4. #include<list>
  5. #include<string>
  6. #include<iterator>
  7. #include<exception>
  8. using namespace std;
  9. class MyException : public exception {
  10. private:
  11.     string mesajEroare;
  12. public:
  13.  
  14.     MyException(string mesajEroare) {
  15.  
  16.         this->mesajEroare = mesajEroare;
  17.     }
  18.     const char* what() const throw() {
  19.         if (mesajEroare == "out_limit") return "Valoarea este inafara intervalului";
  20.         if (mesajEroare == "lista_goala") return "lista este goala";
  21.         return "Eroere neprevazuta";
  22.     }
  23. };
  24.  
  25. class Modul {
  26. protected:
  27.     string denumire;
  28.     int  idModul, val;
  29.     bool  isDefect, tipModul;
  30. public:
  31.     Modul(string denumire, int val, bool isDefect, bool tipModul) {
  32.         this->denumire = denumire;
  33.         this->idModul = idModul;
  34.         this->val = val;
  35.         this->isDefect = isDefect;
  36.         this->tipModul = tipModul;
  37.     }
  38.     void SetId(int id) {
  39.         idModul = id;
  40.     }
  41.     virtual void Afisare() = 0;
  42.     string getNume(){
  43.         return denumire;
  44.     }
  45. };
  46.  
  47. class Releu : public Modul {
  48. private:
  49.     bool tipReleu;
  50.     int histereza;
  51.     static int nrMod;
  52. public:
  53.     Releu(string denumire, int val, bool isDefect, bool tipReleu, int histereza) : Modul(denumire, val, isDefect, false) {
  54.         this->tipReleu = tipReleu;
  55.         this->histereza = histereza;
  56.     }
  57.     void SetId(int id) {
  58.         nrMod++;
  59.         Modul::SetId(id);
  60.     }
  61.     void Afisare() {
  62.         cout << "\nDenumire " << denumire << "\nidModul" << idModul << "\nvaloare " << val << "\neste defect " << isDefect << "\nTip model " << tipModul << "\nTip releu " << tipReleu;
  63.         cout << "\n Histereza " << histereza << "\nNumar module" << nrMod;
  64.     }
  65. };
  66. int Releu::nrMod = 0;
  67.  
  68. class Dimmer : public Modul {
  69. private:
  70.     int putere, valPrag;
  71.     static int nrMod;
  72. public:
  73.     Dimmer(string denumire, int val, bool isDefect, int putere, int valPrag) : Modul(denumire, val, isDefect, true) {
  74.         this->putere = putere;
  75.         this->valPrag = valPrag;
  76.     }
  77.     void SetId(int id) {
  78.         nrMod++;
  79.         Modul::SetId(id);
  80.     }
  81.     void Afisare() {
  82.         cout << "\nDenumire " << denumire << "\nidModul" << idModul << "\nvaloare " << val << "\neste defect " << isDefect << "\nTip model " << tipModul;
  83.         cout << "\n Putere " << putere << "\nValoare de prag" << valPrag;
  84.     }
  85. };
  86. int Dimmer::nrMod = 0;
  87. istream & operator>>(istream &in, Releu *r) {
  88.     string denumire;
  89.     int   val;
  90.     bool  isDefect, tipModul;
  91.     bool tipReleu;
  92.     int histereza;
  93.     cout << " denumire "; cin >> denumire;
  94.     cout << "Valoare "; cin >> val;
  95.     cout << "Este defect(0-def, 1 -bun)"; cin >> isDefect;
  96.     cout << "Tip modul(0 / 1) "; cin >> tipModul;
  97.     cout << "Tip releu(0-statc,  1-mcontacte)"; cin >> tipReleu;
  98.     cout << "Histereza "; cin >> histereza;
  99.     r = new Releu(denumire, val, isDefect, tipReleu, histereza);
  100.     return in;
  101. }
  102. istream & operator>>(istream &in, Dimmer *d) {
  103.     string denumire;
  104.     int   val;
  105.     bool  isDefect;
  106.     int putere, valPrag;
  107.     cout << " denumire "; cin >> denumire;
  108.     cout << "Valoare "; cin >> val;
  109.     cout << "Este defect(0-def, 1 -bun)"; cin >> isDefect;
  110.     cout << "Puete "; cin >> putere;
  111.     cout << "val Prag"; cin >> valPrag;
  112.    
  113.     d = new Dimmer(denumire, val, isDefect, putere, valPrag);
  114.     return in;
  115. }
  116. class Client {
  117. private:
  118.     string nume, adresa;
  119.     list <Modul *> listaModul;
  120. public:
  121.     Client(string nume, string adresa) {
  122.         this->nume = nume;
  123.         this->adresa = adresa;
  124.     }
  125.     void AddModul(int &idModul) {
  126.         Releu *r = NULL;
  127.         Dimmer *d = NULL;
  128.         int help;
  129.         cout << "0-releu, 1- dimmer "; cin >> help;
  130.         if (help) {
  131.             cin >> d;
  132.             d->SetId(idModul);
  133.             idModul++;
  134.             listaModul.push_back(d);
  135.         }
  136.         else
  137.         {
  138.             cin >> r;
  139.             r->SetId(idModul);
  140.             idModul++;
  141.             listaModul.push_back(r);
  142.         }
  143.        
  144.        
  145.     }
  146.     void Afisare() {
  147.         cout << "\nNume " << nume << "\nadresa " << adresa;
  148.         for (auto it = listaModul.begin(); it != listaModul.end(); it++)(*it)->Afisare();
  149.     }
  150.     string  getNume() { return nume; }
  151.     void Delete() {
  152.         string den;
  153.         cout << "denumire modul"; cin >>den;
  154.         for (auto it = listaModul.begin(); it != listaModul.end(); it++)if ((*it)->getNume() == nume) {
  155.             listaModul.erase(it);
  156.             break;
  157.         }
  158.     }
  159. };
  160. istream & operator>>(istream& in, Client *c) {
  161.     string nume, adresa;
  162.     cout << "nume "; in >> nume;
  163.     cout << "Adresa "; in >> adresa;
  164.     c = new Client(nume, adresa);
  165.     return in;
  166. }
  167.  
  168. int main() {
  169.     int opt, idModul = 1, help;
  170.     list <Client *> listaClient;
  171.     string nume;
  172.     Client *c = NULL;
  173.     list<Client *>::iterator it;
  174.     do {
  175.         cout << "\n0. Iesire";
  176.         cout << "\n1.Citire tastatura";
  177.         cout << "\n2. Afisare";
  178.         cout << "\nOpitunea aleasa"; cin >>  opt;
  179.         system("cls");
  180.         switch (opt) {
  181.         case 0: break;
  182.         case 1:
  183.             cout << "Cititi persoana noua(0-nu,1-da) "; cin >> help;
  184.             if (help) {
  185.                 cin >> c;
  186.                 int nrMod;
  187.                 cout << "Numar de module "; cin >> nrMod;
  188.                 for (int i = 1; i <= nrMod; i++)
  189.                     c->AddModul(idModul);
  190.                 cout << "Nume client: "; cin >> nume;
  191.            
  192.                 for (it = listaClient.begin(); it != listaClient.end(); it++) {
  193.                     if ((*it)->getNume() > nume) break;
  194.                 }
  195.                 listaClient.emplace(it);
  196.             }
  197.             else
  198.             {
  199.                 try {
  200.                     if (listaClient.empty()) throw MyException("lista_goala");
  201.                     cout << "Nume client: "; cin >> nume;
  202.                     for (auto it = listaClient.begin(); it != listaClient.end(); it++) {
  203.                         if ((*it)->getNume() == nume) {
  204.                             int nrMod;
  205.                             cout << "Numar de module "; cin >> nrMod;
  206.                             for(int i =1;i <= nrMod;i++)
  207.                             (*it)->AddModul(idModul);
  208.                         }
  209.                     }
  210.                 }
  211.                 catch (exception &e) {
  212.                     cerr << e.what();
  213.                 }
  214.             }
  215.             break;
  216.         case 2:
  217.             for (it = listaClient.begin(); it != listaClient.end(); it++) (*it)->Afisare();
  218.         case 3:
  219.             cout << " nume persoana"; cin >> nume;
  220.        
  221.             for (it = listaClient.begin(); it != listaClient.end(); it++) {
  222.                 if ((*it)->getNume() == nume) break;
  223.                 (*it)->Delete();
  224.             }
  225.         }
  226.  
  227.     } while (1);
  228.  
  229.     return 0;
  230. }
RAW Paste Data