Alx09

Untitled

Jan 4th, 2021
641
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 10.24 KB | None | 0 0
  1. #include <iostream>
  2. #include <conio.h>
  3. #include <string>
  4. #include <list>
  5. #include <iterator>
  6. #include <fstream>
  7.  
  8. using namespace std;
  9.  
  10. struct calendar
  11. {
  12.     int zi, luna, an;
  13. };
  14.  
  15. class Program
  16. {
  17. public:
  18.     int zi, luna, an;
  19.     int tip_derivat;
  20. public:
  21.     Program()
  22.     {
  23.         zi = luna = an = -1;
  24.     }
  25.  
  26.     Program(int tip_derivat)
  27.     {
  28.         this->tip_derivat = tip_derivat;
  29.     }
  30.  
  31.     Program(int zi, int luna, int an, int tip_derivat)
  32.     {
  33.         this->an = an;
  34.         this->luna = luna;
  35.         this->zi = zi;
  36.         this->tip_derivat = tip_derivat;
  37.     }
  38.  
  39.     virtual void afisare_program()
  40.     {
  41.         cout << "---------------" << endl;
  42.         cout << "Data: " << zi << "/" << luna << "/" << an << endl;
  43.     }
  44.  
  45.     virtual void setValori(int zi, int luna, int an)
  46.     {
  47.         this->zi = zi;
  48.         this->luna = luna;
  49.         this->an = an;
  50.     }
  51.  
  52.     friend istream& operator >>(istream&, Program*&);
  53.     friend ostream& operator <<(ostream&, Program*);
  54.     friend void afisare(list<Program*>);
  55.     friend void cautare(list<Program*>);
  56.     friend void stergere(list<Program*>&);
  57.     friend void modificare(list<Program*>);
  58. };
  59.  
  60. class Fizic : public Program
  61. {
  62. public:
  63.     string tip_exercitiu;
  64.     int durata;
  65.     string intensitatea;
  66.     int calorii_arse;
  67. public:
  68.     Fizic() {}
  69.     Fizic(int zi, int luna, int an, string tip_exercitiu, int durata, string intensitatea, int calorii_arse, int tip_derivat) : Program(an, luna, zi, tip_derivat)
  70.     {
  71.         this->tip_exercitiu = tip_exercitiu;
  72.         this->durata = durata;
  73.         this->intensitatea = intensitatea;
  74.         this->calorii_arse = calorii_arse;
  75.     }
  76.     void afisare_program()
  77.     {
  78.         Program::afisare_program(); // apelam functia din clasa de baza
  79.         cout << "Tip exercitiu: " << tip_exercitiu << endl;
  80.         cout << "Durata: " << durata << " minute\n";
  81.         cout << "Intensitatea: " << intensitatea << endl;
  82.         cout << "Calorii arse: " << calorii_arse << endl;
  83.     }
  84.  
  85.     int getCaloriiArse()
  86.     {
  87.         return calorii_arse;
  88.     }
  89.  
  90.     void setValori(int zi, int luna, int an, string tip_exercitiu, int durata, string intensitatea, int calorii_arse)
  91.     {
  92.         Program::setValori(zi, luna, an);
  93.         this->tip_exercitiu = tip_exercitiu;
  94.         this->durata = durata;
  95.         this->intensitatea = intensitatea;
  96.         this->calorii_arse = calorii_arse;
  97.     }
  98. };
  99.  
  100. class Masa : public Program
  101. {
  102. public:
  103.     int ora;
  104.     int min;
  105.     int gramaj;
  106.     int calorii_ingerate;
  107. public:
  108.     Masa() {}
  109.  
  110.     Masa(int zi, int luna, int an, int tip_derivat, int ora, int min, int gramaj, int calorii_ingerate) : Program(an, luna, zi, tip_derivat)
  111.     {
  112.         this->ora = ora;
  113.         this->min = min;
  114.         this->gramaj = gramaj;
  115.         this->calorii_ingerate = calorii_ingerate;
  116.     }
  117.  
  118.     void afisare_program()
  119.     {
  120.         Program::afisare_program(); // apelam functia din clasa de baza
  121.         cout << "Ora: " << ora << ":" << min << endl;
  122.         cout << "Gramaj: " << gramaj << endl;
  123.         cout << "Calorii ingerate: " << calorii_ingerate << endl;
  124.     }
  125.  
  126.     int getCaloriiIngerate()
  127.     {
  128.         return calorii_ingerate;
  129.     }
  130.  
  131.     void setValori(int zi, int luna, int an, int ora, int min, int gramaj, int calorii_ingerate)
  132.     {
  133.         Program::setValori(zi, luna, an);
  134.         this->ora = ora;
  135.         this->min = min;
  136.         this->gramaj = gramaj;
  137.         this->calorii_ingerate = calorii_ingerate;
  138.     }
  139. };
  140.  
  141. istream& operator >> (istream& in, Program*& a)// functia de supraincarcare a operatorului de citire
  142. {
  143.     int an, luna, zi, durata, calorii_arse, ora, min, gramaj, calorii_ingerate;
  144.     string tip, intensitate;
  145.  
  146.     cout << endl << "Introduceti datele despre un program: " << endl;
  147.     cout << "Data (zi luna an): ";
  148.     in >> zi >> luna >> an;
  149.  
  150.     if (a->tip_derivat == 0) // daca s-a ales adaugarea unui nou exercitiu fizic
  151.     {
  152.         cout << "Introduceti tipul exercitiului: ";
  153.         in >> tip;
  154.         cout << "Introduceti durata: ";
  155.         in >> durata;
  156.         cout << "Introduceti intensitatea: ";
  157.         in >> intensitate;
  158.         cout << "Introduceti caloriile arse: ";
  159.         in >> calorii_arse;
  160.         Fizic* f = new Fizic(zi, luna, an, tip, durata, intensitate, calorii_arse, 0); //apelare constructor cu info citite
  161.         a = f; //cast pentru clasa de baza
  162.     }
  163.     else if (a->tip_derivat == 1) //daca s-a ales adaugarea unei mese consumate
  164.     {
  165.         cout << "Introduceti ora: ";
  166.         in >> ora >> min;
  167.         cout << "Introduceti gramajul: ";
  168.         in >> gramaj;
  169.         cout << "Introduceti caloriile ingerate: ";
  170.         in >> calorii_ingerate;
  171.         Masa* m = new Masa(zi, luna, an, 1, ora, min, gramaj, calorii_ingerate);//apelare constructor cu info citite
  172.         a = m;//cast pentru clasa de baza
  173.     }
  174.     return in;
  175. }
  176.  
  177. ostream& operator << (ostream& out, Program* obj) // functia de supraincarcare a operatorului de scriere
  178. {
  179.     // Afisam datele despre un articol
  180.     obj->afisare_program();
  181.     return out;
  182. }
  183. // Introducere elemente in lista eterogena
  184. void introducere(list<Program*>& lista, int tip_derivat)
  185. {
  186.     Program* pr = new Program(tip_derivat);
  187.     cin >> pr; // supraincarcarea citirii
  188.     lista.push_front(pr);//se adauga nodul in fata
  189. }
  190.  
  191. void afisare(list<Program*> lista)
  192. {
  193.     list <Program*> ::iterator i;
  194.     for (i = lista.begin(); i != lista.end(); i++)
  195.     {
  196.         Program* pr = (*i);
  197.         cout << pr;
  198.         char ch = _getch(); // afisare pas cu pas
  199.     }
  200. }
  201.  
  202. void cautare(list<Program*> lista)
  203. {
  204.     int an, luna, zi, caloriiArse = 0, caloriiIngerate = 0;
  205.     cout << "Introduceti data cautata (zi luna an): ";
  206.     cin >> zi >> luna >> an;
  207.     Fizic *f;
  208.     Masa *m;
  209.     cout << "Inregistrarile din ziua " << zi << "/" << luna << "/" << an << ":\n";
  210.     list <Program*> ::iterator i;
  211.     for (i = lista.begin(); i != lista.end(); i++)
  212.     {
  213.         Program* pr = (*i);
  214.         if (pr->an == an && pr->luna == luna && pr->zi == zi)
  215.             if (pr->tip_derivat == 0)
  216.             {
  217.                 f = (Fizic*)pr;
  218.                 caloriiArse += f->getCaloriiArse();
  219.                 cout << pr;
  220.             }
  221.         if (pr->tip_derivat == 1)
  222.         {
  223.             m = (Masa*)pr;
  224.             caloriiIngerate += m->getCaloriiIngerate();
  225.             cout << pr;
  226.         }
  227.     }
  228.     cout << "\nRaportul de calorii mancate/arse: " << (double)caloriiIngerate / caloriiArse;
  229.     char ch = _getch();
  230. }
  231.  
  232. void stergere(list<Program*> &lista)
  233. {
  234.     int an, luna, zi, caloriiArse = 0, caloriiIngerate = 0, r;
  235.     cout << "Introduceti data (zi luna an): ";
  236.     cin >> zi >> luna >> an;
  237.  
  238.     list <Program*> ::iterator i;
  239.     for (i = lista.begin(); i != lista.end(); i++)
  240.     {
  241.         Program* pr = (*i);
  242.         if (pr->an == an && pr->luna == luna && pr->zi == zi)
  243.         {
  244.             cout << pr;
  245.             cout << "Stergeti aceasta inregistrare? (1 - Da, 0 - Nu): ";
  246.             cin >> r;
  247.             if (r)
  248.             {
  249.                 lista.erase(i);
  250.                 cout << "Element sters\n";
  251.                 char ch = _getch();
  252.                 return;
  253.             }
  254.         }
  255.     }
  256. }
  257.  
  258. void modificare(list<Program*> lista)
  259. {
  260.     int an_m, luna_m, zi_m, caloriiArse = 0, caloriiIngerate = 0, r;
  261.     int an, luna, zi, durata, calorii_arse, ora, min, gramaj, calorii_ingerate;
  262.     string tip, intensitate;
  263.     cout << "Introduceti data (zi luna an): ";
  264.     cin >> zi_m >> luna_m >> an_m;
  265.  
  266.     Fizic *f;
  267.     Masa *m;
  268.  
  269.     list <Program*> ::iterator i;
  270.     for (i = lista.begin(); i != lista.end(); i++)
  271.     {
  272.         Program* pr = (*i);
  273.         if (pr->an == an_m && pr->luna == luna_m && pr->zi == zi_m)
  274.         {
  275.             cout << pr;
  276.             cout << "Modificari aceasta inregistrare? (1 - Da, 0 - Nu): ";
  277.             cin >> r;
  278.             if (r)
  279.             {
  280.                 if (pr->tip_derivat == 0)
  281.                 {
  282.                     cout << endl << "Introduceti datele noi: " << endl;
  283.                     cout << "Data (zi luna an): ";
  284.                     cin >> zi >> luna >> an;
  285.                     cout << "Introduceti tipul exercitiului: ";
  286.                     cin >> tip;
  287.                     cout << "Introduceti durata: ";
  288.                     cin >> durata;
  289.                     cout << "Introduceti intensitatea: ";
  290.                     cin >> intensitate;
  291.                     cout << "Introduceti caloriile arse: ";
  292.                     cin >> calorii_arse;
  293.  
  294.                     f = (Fizic*)pr;
  295.                     f->setValori(zi, luna, an, tip, durata, intensitate, calorii_arse);
  296.                 }
  297.                 if (pr->tip_derivat == 1)
  298.                 {
  299.                     cout << endl << "Introduceti datele noi: " << endl;
  300.                     cout << "Data (zi luna an): ";
  301.                     cin >> zi >> luna >> an;
  302.                     cout << "Introduceti ora: ";
  303.                     cin >> ora >> min;
  304.                     cout << "Introduceti gramajul: ";
  305.                     cin >> gramaj;
  306.                     cout << "Introduceti caloriile ingerate: ";
  307.                     cin >> calorii_ingerate;
  308.  
  309.                     m = (Masa*)pr;
  310.                     m->setValori(zi, luna, an, ora, min, gramaj, calorii_ingerate);
  311.                 }
  312.                 cout << "Element modificat cu succes!\n";
  313.                 char ch = _getch();
  314.                 return;
  315.             }
  316.         }
  317.     }
  318. }
  319.  
  320. void importare(list<Program*> lista)
  321. {
  322.     ofstream fis;
  323.     fis.open("fisier.txt");
  324.     Fizic *f;
  325.     Masa *m;
  326.     list <Program*> ::iterator i;
  327.     for (i = lista.begin(); i != lista.end(); i++)
  328.     {
  329.         Program* pr = (*i);
  330.         if (pr->tip_derivat == 0)
  331.         {
  332.             f = (Fizic*)pr;
  333.             fis << "-------------\n";
  334.             fis << f->zi << "/" << f->luna << "/" << f->an << "\n";
  335.             fis << "Tip exercitiu: " << f->tip_exercitiu << endl;
  336.             fis << "Durata: " << f->durata << " minute\n";
  337.             fis << "Intensitatea: " << f->intensitatea << endl;
  338.             fis << "Calorii arse: " << f->calorii_arse << endl;
  339.         }
  340.         if (pr->tip_derivat == 1)
  341.         {
  342.             m = (Masa*)pr;
  343.             fis << "-------------\n";
  344.             fis << m->zi << "/" << m->luna << "/" << m->an << "\n";
  345.             fis << "Ora: " << m->ora << ":" << m->min << endl;
  346.             fis << "Gramaj: " << m->gramaj << endl;
  347.             fis << "Calorii ingerate: " << m->calorii_ingerate << endl;
  348.         }
  349.     }
  350.     fis.close();
  351. }
  352.  
  353. //void citire_fisier()
  354. //{
  355. //  ifstream fis("magazin.txt");
  356. //  string linie_fisier;
  357. //
  358. //  if (fis.is_open())
  359. //  {
  360. //      while (getline(fis, linie_fisier))
  361. //      {
  362. //          cout << linie_fisier << endl;
  363. //      }
  364. //      fis.close();
  365. //  }
  366. //  else
  367. //      cout << "Nu s-a putut deschide fisierul";
  368. //  char ch = _getch();
  369. //
  370. //}
  371.  
  372. int main() //programul principal
  373. {
  374.     int opt;
  375.     // Lista eterogena de exercitii si mese
  376.     list<Program*> pr;
  377.     do
  378.     {
  379.         system("CLS");
  380.         //meniu
  381.         cout << "1.Adaugare unui exercitiu fizic.\n";
  382.         cout << "2.Adaugare unei mese consumate.\n";
  383.         cout << "3.Afisarea intregii liste.\n";
  384.         cout << "4.Cautarea inregistrarilor dupa o anumita data si raportul de calorii.\n";
  385.         cout << "5.Stergerea unei inregistrari eronate.\n";
  386.         cout << "6.Modificarea unei inregistrari eronate.\n";
  387.         cout << "7.Importarea/exportarea datelor in fisier de tip .txt.\n";
  388.         cout << "0.Iesire.\n";
  389.         cout << "Dati optiunea dvs: ";
  390.         cin >> opt;
  391.         //apelare functii in functie de optiunea aleasa
  392.         switch (opt)
  393.         {
  394.         case 1: introducere(pr, 0);
  395.             break;
  396.         case 2: introducere(pr, 1);
  397.             break;
  398.         case 3: afisare(pr);
  399.             break;
  400.         case 4: cautare(pr);
  401.             break;
  402.         case 5: stergere(pr);
  403.             break;
  404.         case 6: modificare(pr);
  405.             break;
  406.         case 7: importare(pr);
  407.             break;
  408.         case 0: break;
  409.         default:cout << "Comanda gresita!";
  410.         }
  411.     } while (opt != 0);
  412.     return 0;
  413. }
Advertisement
Add Comment
Please, Sign In to add comment