Advertisement
Alx09

Problema POO de 7.5

Mar 2nd, 2021
1,491
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.67 KB | None | 0 0
  1. #include<iostream>
  2. #include<stdio.h>
  3. #include <string>
  4. #include<list>
  5. #include <iterator>
  6. #include <fstream>
  7. using namespace std;
  8.  
  9. class Articol {
  10. private:
  11.     int tip;
  12.     string denumire;
  13.     double pret, cantitate;
  14. public:
  15.     Articol(int tip, string denumire, double pret, double cantitate) {
  16.         this->tip = tip;
  17.         this->denumire = denumire;
  18.         this->pret = pret;
  19.         this->cantitate = cantitate;
  20.     }
  21.     virtual void Afis() {
  22.         cout << denumire<<" "<< pret <<" "<<cantitate<<" " ;
  23.     }
  24.     void Caut(string denumire) {
  25.         if (this->denumire == denumire) Afis();
  26.     }
  27.     void Mod(string denumire){
  28.  
  29.         if (this->denumire == denumire) {
  30.             Afis();
  31.             cout << "Cantitate noua: ";
  32.             cin >> cantitate;
  33.         }
  34.     }
  35. };
  36.  
  37. class Perisabil: public Articol{
  38. private:
  39.     string dataExp, categ;
  40. public:
  41.     Perisabil(int tip, string denumire, double pret, double cantitate, string dataExp, string categ) : Articol(0, denumire, pret, cantitate) {
  42.         this->dataExp = dataExp;
  43.         this->categ = categ;
  44.     }
  45.     void Afis() {
  46.         Articol::Afis();
  47.         cout << dataExp << " " << categ<<endl;
  48.     }
  49.    
  50. };
  51.  
  52. class NePerisabil : public Articol {
  53. private:
  54.     string domeniu, material;
  55. public:
  56.     NePerisabil(int tip, string denumire, double pret, double cantitate, string domeniu, string material) : Articol(1, denumire, pret, cantitate) {
  57.         this->domeniu= domeniu;
  58.         this->material = material;
  59.     }
  60.     void Afis() {
  61.         Articol::Afis();
  62.         cout << domeniu << " " << material << endl;
  63.     }
  64. };
  65.  
  66. istream &operator>>(istream &in, Articol *& a) {
  67.     int tip;
  68.     string denumire;
  69.     double pret, cantitate;
  70.  
  71.     string dataExp, categ;
  72.     string domeniu, material;
  73.  
  74.     cout << "Denumire: "; in >> denumire;
  75.     cout << "Pret: "; in >> pret;
  76.     cout << "Cantitate: "; in >> cantitate;
  77.     cout << "Tip(0-Perisabil, 1-Neperisabil) "; in >> tip;
  78.  
  79.     if (tip == 0) {
  80.         cout << "Data expirari: "; in >> dataExp;
  81.         cout << "Categorie: "; in >> categ;
  82.         a = new Perisabil(0, denumire, pret, cantitate, dataExp, categ);
  83.     }
  84.     else
  85.     {
  86.         cout << "Domeniu: "; in >> domeniu;
  87.         cout << "Material: "; in >> material;
  88.         a = new NePerisabil(1, denumire, pret, cantitate, domeniu, material);
  89.     }
  90.     return in;
  91. }
  92.  
  93. ifstream &operator>>(ifstream &in, Articol *& a) {
  94.     int tip;
  95.     string denumire;
  96.     double pret, cantitate;
  97.  
  98.     string dataExp, categ;
  99.     string domeniu, material;
  100.  
  101.      in >> denumire;
  102.      in >> pret;
  103.      in >> cantitate;
  104.      in >> tip;
  105.    
  106.     if (tip == 0) {
  107.      in >> dataExp;
  108.      in >> categ;
  109.         a = new Perisabil(0, denumire, pret, cantitate, dataExp, categ);
  110.     }
  111.     else
  112.     {
  113.         in >> domeniu;
  114.         in >> material;
  115.         a = new NePerisabil(1, denumire, pret, cantitate, domeniu, material);
  116.     }
  117.     return in;
  118. }
  119.  
  120. int main() {
  121.     list<Articol *> lista;
  122.     list<Articol *>::iterator it;
  123.     int opt;
  124.     Articol *a = NULL;
  125.     ifstream f("in.txt");
  126.     string denumire;
  127.     do {
  128.         cout << "0. Iesire\n";
  129.         cout << "1. Citire Tast\n";
  130.         cout << "2. Afisare\n";
  131.         cout << "3. Citire Fiser\n";
  132.         cout << "4. Cautare\n";
  133.         cout << "5. modificare\n";
  134.         cout << "Optiunea aleasa: "; cin >> opt;
  135.         switch (opt)
  136.         {
  137.         case 0: exit(0);
  138.         case 1:
  139.             cin >> a;
  140.             lista.push_back(a);
  141.             break;
  142.         case 2:
  143.             for (it = lista.begin(); it != lista.end(); it++)(*it)->Afis();
  144.             break;
  145.         case 3:
  146.             while (!f.eof())
  147.             {
  148.                 f >> a;
  149.                 lista.push_back(a);
  150.             }
  151.             lista.erase(--lista.end() ); // stergem ulitmul elment din lista deoarece este vid
  152.             break;
  153.         case 4:
  154.             cout << "Denumire: "; cin >> denumire;
  155.             for (it = lista.begin(); it != lista.end(); it++)(*it)->Caut(denumire);
  156.             break;
  157.         case 5:
  158.             cout << "Denumire: "; cin >> denumire;
  159.             for (it = lista.begin(); it != lista.end(); it++)(*it)->Mod(denumire);
  160.             break;
  161.         default:
  162.             break;
  163.         }
  164.  
  165.     } while (1);
  166.     return 0;
  167. }
  168.  
  169.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement