Patey

Untitled

Dec 21st, 2021
1,100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.07 KB | None | 0 0
  1. #include<iostream>
  2. #include<string.h>
  3. #include<list>
  4. #include<iterator>
  5. using namespace std;
  6.  
  7. typedef struct
  8. {
  9.     int lungime, latime;
  10. } dimensiune;
  11.  
  12. void citire_struct(dimensiune &dim)
  13. {
  14.     cout << "Lungime: ";
  15.     cin >> dim.lungime;
  16.     cout << "Latime: ";
  17.     cin >> dim.latime;
  18. }
  19.  
  20. void afisare_struct(dimensiune dim)
  21. {
  22.     cout << "Lungime: " << dim.lungime << endl;
  23.     cout << "Latime: " << dim.latime << endl;
  24. }
  25.  
  26. class electrocasnic
  27. {
  28.     dimensiune dim;
  29.     int pret;
  30. public:
  31.     class eroare{};
  32.  
  33.     electrocasnic()
  34.     {}
  35.     electrocasnic(dimensiune dim, int pret)
  36.     {
  37.         this->dim = dim;
  38.         this->pret=pret;
  39.     }
  40.     virtual void afisare()
  41.     {
  42.         afisare_struct(dim);
  43.         cout << "Pret: " << pret << endl;
  44.     }
  45.     int returnare()
  46.     {
  47.         return this->pret;
  48.     }
  49.     friend istream& operator>>(istream& intrare, electrocasnic& p);
  50.     friend void adaugare(list<electrocasnic*>& lista_el, int nr);
  51.     friend void suma_lista(list<electrocasnic*>lista_el);
  52. };
  53.  
  54. class televizor:public electrocasnic
  55. {
  56.     string marca;
  57.     int nr;
  58. public:
  59.     televizor()
  60.     {}
  61.     televizor(dimensiune dim, int pret, string marca,int nr):electrocasnic(dim,pret)
  62.     {
  63.         this->marca = marca;
  64.         this->nr = 1;
  65.     }
  66.     void afisare()
  67.     {
  68.         electrocasnic::afisare();
  69.         cout << "Marca: " << marca << endl;
  70.     }
  71.     int returnare2()
  72.     {
  73.         return electrocasnic::returnare();
  74.     }
  75. };
  76.  
  77. class telefon :public electrocasnic
  78. {
  79.     int nr, camera;
  80.     string model;
  81. public:
  82.     telefon(dimensiune dim, int pret, int camera, string model, int nr) :electrocasnic(dim, pret)
  83.     {
  84.         this->camera = camera;
  85.         this->model = model;
  86.         this->nr = 2;
  87.     }
  88.     void afisare()
  89.     {
  90.         electrocasnic::afisare();
  91.         cout << "Model: " << model << endl;
  92.         cout << "Camera: " << camera << endl;
  93.     }
  94. };
  95.  
  96. istream& operator>>(istream& intrare, electrocasnic& p)
  97. {
  98.     dimensiune dim;
  99.     int pret;
  100.     citire_struct(dim);
  101.     try{
  102.         cout << "Pret: ";
  103.         cin >> pret;
  104.         if (pret < 0)
  105.             throw electrocasnic::eroare();
  106.     }
  107.     catch (electrocasnic::eroare)
  108.     {
  109.         do {
  110.             cout << "Pret mai mic ca zero!" << endl;
  111.             cout << "Pret: ";
  112.             cin >> pret;
  113.         } while (pret < 0);
  114.     }
  115.     p = electrocasnic(dim, pret);
  116.     return intrare;
  117. }
  118.  
  119. void adaugare(list<electrocasnic*>& lista_el,int nr)
  120. {
  121.     auto co = new electrocasnic();
  122.     electrocasnic p;
  123.     string marca, model;
  124.     int camera;
  125.     dimensiune dim;
  126.     cin >> p;
  127.     if (nr == 1)
  128.     {
  129.         cout << "Marca: ";
  130.         cin >> marca;
  131.         auto a = new televizor(p.dim, p.pret, marca, nr);
  132.         co = a;
  133.         lista_el.push_back(co);
  134.     }
  135.     else
  136.     {
  137.         cout << "Model: ";
  138.         cin >> model;
  139.         cout << "Camera: ";
  140.         cin >> camera;
  141.         auto a = new telefon(p.dim, p.pret, camera, model, nr);
  142.         co = a;
  143.         lista_el.push_back(co);
  144.     }
  145.     lista_el.sort();
  146. }
  147.  
  148. template <typename T>
  149. T suma(int x, int y)
  150. {
  151.     int s;
  152.     s = x + y;
  153.     return s;
  154. }
  155.  
  156. void suma_lista(list<electrocasnic*>lista_el)
  157. {
  158.     auto co = new electrocasnic();
  159.     for (auto i = lista_el.begin(); i != lista_el.end(); i++)
  160.     {
  161.         co = *i;
  162.         auto sumc = suma<int>(co->dim.latime, co->dim.lungime);
  163.         cout << sumc << endl;
  164.     }
  165. }
  166.  
  167. void afisare(list<electrocasnic*>lista_tel)
  168. {
  169.     for (auto i = lista_tel.begin(); i != lista_tel.end(); i++)
  170.     {
  171.         cout << endl;
  172.         (*i)->afisare();
  173.         //lista_tel.remove(*i);
  174.     }
  175. }
  176.  
  177. void stergere(list<electrocasnic*>& lista_el, int pret_caut)
  178. {
  179.     for (auto i = lista_el.begin(); i != lista_el.end(); i++)
  180.     {
  181.         if ((*i)->returnare() == pret_caut)
  182.         {
  183.             auto co = (*i);
  184.             i++;
  185.             lista_el.remove(co);
  186.         }
  187.     }
  188.     afisare(lista_el);
  189. }
  190.  
  191. int main()
  192. {
  193.     list<electrocasnic*>lista_el;
  194.     int opt,pret_caut;
  195.     do {
  196.         cout << "0.Iesire" << endl;
  197.         cout << "1.Adaugare" << endl;
  198.         cout << "2.Afisare" << endl;
  199.         cout << "opt= ";
  200.         cin >> opt;
  201.         switch (opt)
  202.         {
  203.         case 0:
  204.             exit(0);
  205.             break;
  206.         case 1:
  207.             cout << "1.Televizor" << endl;
  208.             cout << "2.Telefon" << endl;
  209.             cout << "opt= ";
  210.             cin >> opt;
  211.             adaugare(lista_el,opt);
  212.             break;
  213.         case 2:
  214.             afisare(lista_el);
  215.             break;
  216.         case 3:
  217.             cout << "Dati pretul cautat: ";
  218.             cin >> pret_caut;
  219.             stergere(lista_el,pret_caut);
  220.             break;
  221.         case 4:
  222.             suma_lista(lista_el);
  223.             break;
  224.         default:
  225.             break;
  226.         }
  227.     } while (1);
  228. }
Advertisement
Add Comment
Please, Sign In to add comment