Alx09

sub 8 poo

Nov 23rd, 2021 (edited)
404
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.05 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. class Carte {
  9. private:
  10.     string titlu;
  11.     string autor;
  12.     string editura;
  13.     double pret;
  14. public:
  15.     Carte(string titlu, string autor, string editura, double pret) {
  16.         this->autor = autor;
  17.         this->editura = editura;
  18.         this->pret = pret;
  19.         this->titlu = titlu;
  20.     }
  21.     virtual void  Afisare() {
  22.         cout << titlu << " " << autor << " " << editura << " " << pret << " ";
  23.     }
  24.     string getTitlu() { return titlu; }
  25.     string getAutor() { return autor; }
  26.     void setTitlu(string titlu) { this->titlu = titlu; }
  27. };
  28. class Carte_Bele: public Carte {
  29. private:
  30.     string tipCarte;
  31.     int anAp;
  32. public:
  33.     Carte_Bele(string titlu, string autor, string editura, double pret, string tipCarte, int anAp ) : Carte(titlu, autor, editura, pret){
  34.         this->anAp = anAp;
  35.         this->tipCarte = tipCarte;
  36.     }
  37.     void Afisare() {
  38.         Carte::Afisare();
  39.         cout << tipCarte << " " << anAp << endl;
  40.     }
  41.    
  42. };
  43.  
  44. class Carte_Teh : public Carte {
  45. private:
  46.     string domeniu;
  47.     string nivel;
  48. public:
  49.     Carte_Teh(string titlu, string autor, string editura, double pret, string domeniu, string nivel) : Carte(titlu, autor, editura, pret) {
  50.         this->nivel = nivel;
  51.         this->domeniu = domeniu;
  52.     }
  53.     void Afisare() {
  54.         Carte::Afisare();
  55.         cout << domeniu << " " << nivel << endl;
  56.     }
  57. };
  58. ostream & operator<<(ostream &out, Carte *&c) {
  59.     c->Afisare();
  60.     return out;
  61. }
  62. int main() {
  63.     list<Carte *> listCarti;
  64.     list<Carte *>::iterator it;
  65.     ifstream in("in.txt");
  66.     int opt;
  67.     string titlu;
  68.     string autor;
  69.     string editura;
  70.     double pret;
  71.     string titluNou;
  72.     do {
  73.         cout << "0. Iesire \n";
  74.         cout << "1. Citire tastatura \n";
  75.         cout << "2. Afisare \n";
  76.         cout << "Optiunea aleasa: "; cin >> opt;
  77.         switch (opt)
  78.         {
  79.         case 1:
  80.             cout << "Titlu carte: "; cin >> titlu;
  81.             cout << "Autor carte: "; cin >> autor;
  82.             cout << "editura carte: "; cin >> editura;
  83.             cout << "Pret carte: "; cin >> pret;
  84.             int tipCarte;
  85.             cout << "Tip carte introdus 0 - Carte Tehnica, 1 - Carte beletristika: "; cin >> tipCarte;
  86.             if (tipCarte) {
  87.                 string tipCarte;
  88.                 int anAp;
  89.                 cout << "Tip carte: "; cin >> tipCarte;
  90.                 try {
  91.                     cout << "An aparitie: "; cin >> anAp;
  92.                     if (anAp < -2000 || anAp > 2021) throw "Anul nu a fost intrdus bine\n";
  93.                 }
  94.                 catch (const char * mesaj) {
  95.                     cout << mesaj;
  96.                     break;
  97.                 }
  98.                 listCarti.push_back(new Carte_Bele(titlu, autor, editura, pret, tipCarte, anAp));
  99.             }
  100.             else {
  101.                 string domeniu;
  102.                 string nivel;
  103.                 cout << "Domeniu carte: "; cin >> domeniu;
  104.                 cout << "Nivel: "; cin >> nivel;
  105.                 listCarti.push_back(new Carte_Teh(titlu, autor, editura, pret, domeniu, nivel));
  106.             }
  107.             break;
  108.         case 2:
  109.             for (it = listCarti.begin(); it != listCarti.end(); it++)
  110.                 cout << *it;
  111.             break;
  112.         case 3:
  113.        
  114.             while (!in.eof()) {
  115.                 in >> titlu;
  116.                 in >> autor;
  117.                 in >> editura;
  118.                 in >> pret;
  119.                 int tipCarte;
  120.                 in >> tipCarte;
  121.                 if (tipCarte) {
  122.                     string tipCarte;
  123.                     int anAp;
  124.                     in >> tipCarte;
  125.                     in >> anAp;
  126.                     listCarti.push_back(new Carte_Bele(titlu, autor, editura, pret, tipCarte, anAp));
  127.                 }
  128.                 else {
  129.                     string domeniu;
  130.                     string nivel;
  131.                     in >> domeniu;
  132.                     in >> nivel;
  133.                     listCarti.push_back(new Carte_Teh(titlu, autor, editura, pret, domeniu, nivel));
  134.                 }
  135.             }
  136.             break;
  137.         case 4:
  138.             cout << "Titlu carte: "; cin >> titlu;
  139.             for (it = listCarti.begin(); it != listCarti.end(); it++)
  140.                 if (titlu == (*it)->getTitlu()) {
  141.                     listCarti.remove(*it);
  142.                     break;
  143.                 }
  144.             break;
  145.         case 5:
  146.             cout << "Titlu carte: "; cin >> titlu;
  147.             cout << "Titlu nou: "; cin >> titluNou;
  148.             for (it = listCarti.begin(); it != listCarti.end(); it++)
  149.                 if (titlu == (*it)->getTitlu()) {
  150.                     (*it)->setTitlu(titluNou);
  151.                     break;
  152.                 }
  153.             break;
  154.         case 6:
  155.             cout << "Autor: "; cin >> autor;
  156.             for (it = listCarti.begin(); it != listCarti.end(); it++)
  157.                 if (titlu == (*it)->getAutor()) {
  158.                     cout << *it;
  159.                 }
  160.             break;
  161.         }
  162.     } while (opt != 0);
  163.     return 0;
  164. }
  165.  
  166.  
Add Comment
Please, Sign In to add comment