Alx09

Untitled

Feb 2nd, 2021
843
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.42 KB | None | 0 0
  1. #include <iostream>
  2. #include <list>
  3. #include <iterator>
  4. #include <conio.h>
  5. #include <string>
  6. #include <fstream>
  7. #define _CRT_SECURE_NO_WARNING
  8. using namespace std;
  9.  
  10. class magazin {
  11.     int tip;
  12.     int pret;
  13.     int inaltime;
  14.     int serie;
  15. public: magazin() {};
  16.         magazin(int tip, int pret, int inaltime, int serie) {
  17.             this->tip = tip;
  18.             this->pret = pret;
  19.             this->inaltime = inaltime;
  20.             this->serie = serie;
  21.         }
  22.         virtual void afisare() {
  23.             cout << "\n-----------\n";
  24.             cout << "tipul este: " << tip << endl;
  25.             cout << "pret: " << tip << endl;
  26.             cout << "inaltime: " << inaltime << endl;
  27.             cout << "serie: " << serie << endl;
  28.         }
  29.         int get_tip() {
  30.             return tip;
  31.         }
  32.         int get_pret() {
  33.             return pret;
  34.         }
  35.         int get_inaltime() {
  36.             return inaltime;
  37.         }
  38.         int get_serie() {
  39.             return serie;
  40.         }
  41.  
  42.         friend istream& operator>>(istream& in, magazin*& mgz);
  43.         friend void cautare();
  44.         friend void stergere();
  45.         void set_pret() {
  46.             int pret_nou;
  47.             cout << "Pretul nou este: ";
  48.             cin >> pret_nou;
  49.             pret = pret_nou;
  50.         }
  51. };
  52.  
  53. list<magazin*>mgz;
  54. list<magazin*> ::iterator it;
  55.  
  56. enum material { lemn, bronz };
  57. class statuete : public magazin {
  58.     material m;
  59.     string autor;
  60. public: statuete(int tip, int pret, int inaltime, int serie, string autor, material m) : magazin(tip, pret, inaltime, serie) {
  61.     this->m = m;
  62.     this->autor = autor;
  63. }
  64.         void afisare() {
  65.             magazin::afisare();
  66.             cout << "Materialele statuetelor (0 - lemn, 1 - bronz): " << m << endl;
  67.             cout << "Autorul este: " << autor << endl;
  68.         }
  69.         friend void modificare();
  70.         string get_autor() { return autor; }
  71. };
  72.  
  73. enum tip_arbusti { tufa, copaci };
  74. class arbusti : public magazin {
  75.     tip_arbusti ta;
  76.     string denumire;
  77. public: arbusti(int tip, int pret, int inaltime, int serie, string denumire, tip_arbusti ta) : magazin(tip, pret, inaltime, serie) {
  78.     this->denumire = denumire;
  79.     this->ta = ta;
  80. }
  81.         void afisare() {
  82.             magazin::afisare();
  83.             cout << "Denumirea arbustilor: " << denumire << endl;
  84.             cout << "Tipul arbustilor ( 2- tufa, 3-copaci): " << ta << endl;
  85.         }
  86. };
  87.  
  88. void adaugare_fisier() {
  89.     ifstream f("magazin.txt");
  90.     int tip;
  91.     int pret;
  92.     int inaltime;
  93.     int serie;
  94.     int m;
  95.     string autor;
  96.     int ta;
  97.     string denumire;
  98.     while (f >> tip >> pret >> inaltime >> serie) {
  99.         if (tip == 0) {
  100.             f >> autor >> m;
  101.             switch (m) {
  102.             case 0: mgz.push_back(new statuete(tip, pret, inaltime, serie, autor, material::lemn));
  103.                 break;
  104.             case 1: mgz.push_back(new statuete(tip, pret, inaltime, serie, autor, material::bronz));
  105.                 break;
  106.             default: break;
  107.             }
  108.         }
  109.         else if (tip == 1) {
  110.             f >> denumire >> ta;
  111.             switch (ta) {
  112.             case 0: mgz.push_back(new arbusti(tip, pret, inaltime, serie, denumire, tip_arbusti::tufa));
  113.                 break;
  114.             case 1: mgz.push_back(new arbusti(tip, pret, inaltime, serie, denumire, tip_arbusti::copaci));
  115.                 break;
  116.             default: break;
  117.             }
  118.         }
  119.     }
  120. }
  121.  
  122. class Exceptie {
  123. public: string mesaj;
  124.         Exceptie(string mesaj) {
  125.             this->mesaj = mesaj;
  126.         }
  127. };
  128.  
  129. void adaugare() {
  130.     int tip;
  131.     int pret;
  132.     int inaltime;
  133.     int serie;
  134.     int m;
  135.     string autor;
  136.     int ta;
  137.     string denumire;
  138.  
  139.     try {
  140.         cout << "Tip 0,1: ";
  141.         if (!(cin >> tip)) {
  142.             throw Exceptie("Eroare citire!!");
  143.         }
  144.         if (tip < 0 || tip > 1) {
  145.             throw Exceptie("Tipul nu exista!");
  146.         }
  147.     }
  148.     catch (Exceptie &e) {
  149.         do {
  150.             cout << e.mesaj << endl;
  151.             cin.clear();
  152.             cin.ignore(numeric_limits <streamsize> ::max(), '\n');
  153.             cout << "Tip 0,1: ";
  154.             if (!(cin >> tip)) {
  155.                 e.mesaj = "Eroare citire";
  156.             }
  157.             if (tip < 0 || tip > 1) {
  158.                 e.mesaj = "Tipul nu exista";
  159.             }
  160.             else {
  161.                 e.mesaj = "Corect";
  162.             }
  163.         } while (e.mesaj != "Corect");
  164.     }
  165.         cout << "Pret: ";
  166.         cin >> pret;
  167.         cout << "Inaltime: ";
  168.         cin >> inaltime;
  169.         cout << "Serie: ";
  170.         cin >> serie;
  171.         if (tip == 0) {
  172.             cout << "Autorul este: ";
  173.             cin >> autor;
  174.             cout << "Materialul este facut din 0-lemn / 1-bronz: ";
  175.             cin >> m;
  176.             switch (m) {
  177.             case 0: mgz.push_back(new statuete(tip, pret, inaltime, serie, autor, material::lemn));
  178.                 break;
  179.             case 1: mgz.push_back(new statuete(tip, pret, inaltime, serie, autor, material::bronz));
  180.                 break;
  181.             default: break;
  182.             }
  183.         }
  184.         else {
  185.             cout << "Denumirea arborelui este: ";
  186.             cin >> denumire;
  187.             cout << "Tipul arborelui este 0-tufa / 1-copaci: ";
  188.             cin >> ta;
  189.             switch (ta) {
  190.             case 0: mgz.push_back(new arbusti(tip, pret, inaltime, serie, denumire, tip_arbusti::tufa));
  191.                 break;
  192.             case 1: mgz.push_back(new arbusti(tip, pret, inaltime, serie, denumire, tip_arbusti::copaci));
  193.                 break;
  194.             default: break;
  195.             }
  196.         }
  197.    
  198. }
  199.  
  200. void afisare() {
  201.     for (it = mgz.begin(); it != mgz.end(); it++) {
  202.         (*it)->afisare();
  203.         cout << "S-a afisat cu succes!! Azi ai noroc!";
  204.     }
  205. }
  206.  
  207. void cautare() {
  208.     int serie_unica;
  209.     int k = 0;
  210.     cout << "introduceti seria unica pe care vreti sa o cautati: ";
  211.     cin >> serie_unica;
  212.     for (it = mgz.begin(); it != mgz.end(); it++) {
  213.         if ((*it)->get_serie() == serie_unica) {
  214.             (*it)->afisare();
  215.             k = 1;
  216.         }
  217.     }
  218.     if (k == 0) {
  219.         cout << "Nu exista seria";
  220.     }
  221. }
  222. /* void modificare() {
  223.     string nume_autor;
  224.     int k = 0;
  225.     cout << "Introduceti numele autorului: ";
  226.     cin >> nume_autor;
  227.     for (it = mgz.begin(); it != mgz.end(); it++) {
  228.         if ((*it)->get_tip() == 0) {
  229.             statuete* st = (statuete*)(*it);
  230.             if ((*it)->get_autor() == nume_autor) {
  231.                 (*it)->set_pret();
  232.                 k = 1;
  233.             }
  234.         }
  235.     }
  236.     if (k == 0) {
  237.         cout << "Nu exista autorul";
  238.     }
  239. }
  240. */
  241. void stergere() {
  242.     int serie_unica;
  243.     int k = 0;
  244.     cout << "introduceti seria unica pe care vreti sa o cautati: ";
  245.     cin >> serie_unica;
  246.     for (it = mgz.begin(); it != mgz.end(); it++) {
  247.         if ((*it)->get_serie() == serie_unica) {
  248.             mgz.erase(it);
  249.             k = 1;
  250.             cout << "Seria a fost stearsa!";
  251.             break;
  252.         }
  253.     }
  254.     if (k == 0) {
  255.         cout << "Nu exista seria \n";
  256.     }
  257. }
  258. int main() {
  259.     int opt;
  260.     do {
  261.         cout << "\n 1.Adaugare \n";
  262.         cout << " 2.Adaugare fisier \n";
  263.         cout << " 3.Afisare\n";
  264.         cout << " 4.Cautarea elementelor dupa serie \n";
  265.         cout << " 5.Modificarea pretului unei statuete dupa autor \n";
  266.         cout << " 6.Stergerea elementelor cu serie \n";
  267.         cout << " 0. IESIRE\n";
  268.         cout << "Optiunea dvs este: \n";
  269.         cin >> opt;
  270.         switch (opt) {
  271.         case 0: exit(0);
  272.             break;
  273.         case 1: adaugare();
  274.             break;
  275.         case 2: adaugare_fisier();
  276.             break;
  277.         case 3: afisare();
  278.             break;
  279.         case 4: cautare();
  280.             break;
  281.         case 5: //modificare();
  282.             break;
  283.         case 6: stergere();
  284.             break;
  285.         }
  286.     } while (opt);
  287. }
Advertisement
Add Comment
Please, Sign In to add comment