Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <conio.h>
- #include <string>
- #include <list>
- #include <iterator>
- #include <fstream>
- using namespace std;
- struct calendar
- {
- int zi, luna, an;
- };
- class Program
- {
- public:
- int zi, luna, an;
- int tip_derivat;
- public:
- Program()
- {
- zi = luna = an = -1;
- }
- Program(int tip_derivat)
- {
- this->tip_derivat = tip_derivat;
- }
- Program(int zi, int luna, int an, int tip_derivat)
- {
- this->an = an;
- this->luna = luna;
- this->zi = zi;
- this->tip_derivat = tip_derivat;
- }
- virtual void afisare_program()
- {
- cout << "---------------" << endl;
- cout << "Data: " << zi << "/" << luna << "/" << an << endl;
- }
- virtual void setValori(int zi, int luna, int an)
- {
- this->zi = zi;
- this->luna = luna;
- this->an = an;
- }
- friend istream& operator >>(istream&, Program*&);
- friend ostream& operator <<(ostream&, Program*);
- friend void afisare(list<Program*>);
- friend void cautare(list<Program*>);
- friend void stergere(list<Program*>&);
- friend void modificare(list<Program*>);
- };
- class Fizic : public Program
- {
- public:
- string tip_exercitiu;
- int durata;
- string intensitatea;
- int calorii_arse;
- public:
- Fizic() {}
- 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)
- {
- this->tip_exercitiu = tip_exercitiu;
- this->durata = durata;
- this->intensitatea = intensitatea;
- this->calorii_arse = calorii_arse;
- }
- void afisare_program()
- {
- Program::afisare_program(); // apelam functia din clasa de baza
- cout << "Tip exercitiu: " << tip_exercitiu << endl;
- cout << "Durata: " << durata << " minute\n";
- cout << "Intensitatea: " << intensitatea << endl;
- cout << "Calorii arse: " << calorii_arse << endl;
- }
- int getCaloriiArse()
- {
- return calorii_arse;
- }
- void setValori(int zi, int luna, int an, string tip_exercitiu, int durata, string intensitatea, int calorii_arse)
- {
- Program::setValori(zi, luna, an);
- this->tip_exercitiu = tip_exercitiu;
- this->durata = durata;
- this->intensitatea = intensitatea;
- this->calorii_arse = calorii_arse;
- }
- };
- class Masa : public Program
- {
- public:
- int ora;
- int min;
- int gramaj;
- int calorii_ingerate;
- public:
- Masa() {}
- 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)
- {
- this->ora = ora;
- this->min = min;
- this->gramaj = gramaj;
- this->calorii_ingerate = calorii_ingerate;
- }
- void afisare_program()
- {
- Program::afisare_program(); // apelam functia din clasa de baza
- cout << "Ora: " << ora << ":" << min << endl;
- cout << "Gramaj: " << gramaj << endl;
- cout << "Calorii ingerate: " << calorii_ingerate << endl;
- }
- int getCaloriiIngerate()
- {
- return calorii_ingerate;
- }
- void setValori(int zi, int luna, int an, int ora, int min, int gramaj, int calorii_ingerate)
- {
- Program::setValori(zi, luna, an);
- this->ora = ora;
- this->min = min;
- this->gramaj = gramaj;
- this->calorii_ingerate = calorii_ingerate;
- }
- };
- istream& operator >> (istream& in, Program*& a)// functia de supraincarcare a operatorului de citire
- {
- int an, luna, zi, durata, calorii_arse, ora, min, gramaj, calorii_ingerate;
- string tip, intensitate;
- cout << endl << "Introduceti datele despre un program: " << endl;
- cout << "Data (zi luna an): ";
- in >> zi >> luna >> an;
- if (a->tip_derivat == 0) // daca s-a ales adaugarea unui nou exercitiu fizic
- {
- cout << "Introduceti tipul exercitiului: ";
- in >> tip;
- cout << "Introduceti durata: ";
- in >> durata;
- cout << "Introduceti intensitatea: ";
- in >> intensitate;
- cout << "Introduceti caloriile arse: ";
- in >> calorii_arse;
- Fizic* f = new Fizic(zi, luna, an, tip, durata, intensitate, calorii_arse, 0); //apelare constructor cu info citite
- a = f; //cast pentru clasa de baza
- }
- else if (a->tip_derivat == 1) //daca s-a ales adaugarea unei mese consumate
- {
- cout << "Introduceti ora: ";
- in >> ora >> min;
- cout << "Introduceti gramajul: ";
- in >> gramaj;
- cout << "Introduceti caloriile ingerate: ";
- in >> calorii_ingerate;
- Masa* m = new Masa(zi, luna, an, 1, ora, min, gramaj, calorii_ingerate);//apelare constructor cu info citite
- a = m;//cast pentru clasa de baza
- }
- return in;
- }
- ostream& operator << (ostream& out, Program* obj) // functia de supraincarcare a operatorului de scriere
- {
- // Afisam datele despre un articol
- obj->afisare_program();
- return out;
- }
- // Introducere elemente in lista eterogena
- void introducere(list<Program*>& lista, int tip_derivat)
- {
- Program* pr = new Program(tip_derivat);
- cin >> pr; // supraincarcarea citirii
- lista.push_front(pr);//se adauga nodul in fata
- }
- void afisare(list<Program*> lista)
- {
- list <Program*> ::iterator i;
- for (i = lista.begin(); i != lista.end(); i++)
- {
- Program* pr = (*i);
- cout << pr;
- char ch = _getch(); // afisare pas cu pas
- }
- }
- void cautare(list<Program*> lista)
- {
- int an, luna, zi, caloriiArse = 0, caloriiIngerate = 0;
- cout << "Introduceti data cautata (zi luna an): ";
- cin >> zi >> luna >> an;
- Fizic *f;
- Masa *m;
- cout << "Inregistrarile din ziua " << zi << "/" << luna << "/" << an << ":\n";
- list <Program*> ::iterator i;
- for (i = lista.begin(); i != lista.end(); i++)
- {
- Program* pr = (*i);
- if (pr->an == an && pr->luna == luna && pr->zi == zi)
- if (pr->tip_derivat == 0)
- {
- f = (Fizic*)pr;
- caloriiArse += f->getCaloriiArse();
- cout << pr;
- }
- if (pr->tip_derivat == 1)
- {
- m = (Masa*)pr;
- caloriiIngerate += m->getCaloriiIngerate();
- cout << pr;
- }
- }
- cout << "\nRaportul de calorii mancate/arse: " << (double)caloriiIngerate / caloriiArse;
- char ch = _getch();
- }
- void stergere(list<Program*> &lista)
- {
- int an, luna, zi, caloriiArse = 0, caloriiIngerate = 0, r;
- cout << "Introduceti data (zi luna an): ";
- cin >> zi >> luna >> an;
- list <Program*> ::iterator i;
- for (i = lista.begin(); i != lista.end(); i++)
- {
- Program* pr = (*i);
- if (pr->an == an && pr->luna == luna && pr->zi == zi)
- {
- cout << pr;
- cout << "Stergeti aceasta inregistrare? (1 - Da, 0 - Nu): ";
- cin >> r;
- if (r)
- {
- lista.erase(i);
- cout << "Element sters\n";
- char ch = _getch();
- return;
- }
- }
- }
- }
- void modificare(list<Program*> lista)
- {
- int an_m, luna_m, zi_m, caloriiArse = 0, caloriiIngerate = 0, r;
- int an, luna, zi, durata, calorii_arse, ora, min, gramaj, calorii_ingerate;
- string tip, intensitate;
- cout << "Introduceti data (zi luna an): ";
- cin >> zi_m >> luna_m >> an_m;
- Fizic *f;
- Masa *m;
- list <Program*> ::iterator i;
- for (i = lista.begin(); i != lista.end(); i++)
- {
- Program* pr = (*i);
- if (pr->an == an_m && pr->luna == luna_m && pr->zi == zi_m)
- {
- cout << pr;
- cout << "Modificari aceasta inregistrare? (1 - Da, 0 - Nu): ";
- cin >> r;
- if (r)
- {
- if (pr->tip_derivat == 0)
- {
- cout << endl << "Introduceti datele noi: " << endl;
- cout << "Data (zi luna an): ";
- cin >> zi >> luna >> an;
- cout << "Introduceti tipul exercitiului: ";
- cin >> tip;
- cout << "Introduceti durata: ";
- cin >> durata;
- cout << "Introduceti intensitatea: ";
- cin >> intensitate;
- cout << "Introduceti caloriile arse: ";
- cin >> calorii_arse;
- f = (Fizic*)pr;
- f->setValori(zi, luna, an, tip, durata, intensitate, calorii_arse);
- }
- if (pr->tip_derivat == 1)
- {
- cout << endl << "Introduceti datele noi: " << endl;
- cout << "Data (zi luna an): ";
- cin >> zi >> luna >> an;
- cout << "Introduceti ora: ";
- cin >> ora >> min;
- cout << "Introduceti gramajul: ";
- cin >> gramaj;
- cout << "Introduceti caloriile ingerate: ";
- cin >> calorii_ingerate;
- m = (Masa*)pr;
- m->setValori(zi, luna, an, ora, min, gramaj, calorii_ingerate);
- }
- cout << "Element modificat cu succes!\n";
- char ch = _getch();
- return;
- }
- }
- }
- }
- void importare(list<Program*> lista)
- {
- ofstream fis;
- fis.open("fisier.txt");
- Fizic *f;
- Masa *m;
- list <Program*> ::iterator i;
- for (i = lista.begin(); i != lista.end(); i++)
- {
- Program* pr = (*i);
- if (pr->tip_derivat == 0)
- {
- f = (Fizic*)pr;
- fis << "-------------\n";
- fis << f->zi << "/" << f->luna << "/" << f->an << "\n";
- fis << "Tip exercitiu: " << f->tip_exercitiu << endl;
- fis << "Durata: " << f->durata << " minute\n";
- fis << "Intensitatea: " << f->intensitatea << endl;
- fis << "Calorii arse: " << f->calorii_arse << endl;
- }
- if (pr->tip_derivat == 1)
- {
- m = (Masa*)pr;
- fis << "-------------\n";
- fis << m->zi << "/" << m->luna << "/" << m->an << "\n";
- fis << "Ora: " << m->ora << ":" << m->min << endl;
- fis << "Gramaj: " << m->gramaj << endl;
- fis << "Calorii ingerate: " << m->calorii_ingerate << endl;
- }
- }
- fis.close();
- }
- //void citire_fisier()
- //{
- // ifstream fis("magazin.txt");
- // string linie_fisier;
- //
- // if (fis.is_open())
- // {
- // while (getline(fis, linie_fisier))
- // {
- // cout << linie_fisier << endl;
- // }
- // fis.close();
- // }
- // else
- // cout << "Nu s-a putut deschide fisierul";
- // char ch = _getch();
- //
- //}
- int main() //programul principal
- {
- int opt;
- // Lista eterogena de exercitii si mese
- list<Program*> pr;
- do
- {
- system("CLS");
- //meniu
- cout << "1.Adaugare unui exercitiu fizic.\n";
- cout << "2.Adaugare unei mese consumate.\n";
- cout << "3.Afisarea intregii liste.\n";
- cout << "4.Cautarea inregistrarilor dupa o anumita data si raportul de calorii.\n";
- cout << "5.Stergerea unei inregistrari eronate.\n";
- cout << "6.Modificarea unei inregistrari eronate.\n";
- cout << "7.Importarea/exportarea datelor in fisier de tip .txt.\n";
- cout << "0.Iesire.\n";
- cout << "Dati optiunea dvs: ";
- cin >> opt;
- //apelare functii in functie de optiunea aleasa
- switch (opt)
- {
- case 1: introducere(pr, 0);
- break;
- case 2: introducere(pr, 1);
- break;
- case 3: afisare(pr);
- break;
- case 4: cautare(pr);
- break;
- case 5: stergere(pr);
- break;
- case 6: modificare(pr);
- break;
- case 7: importare(pr);
- break;
- case 0: break;
- default:cout << "Comanda gresita!";
- }
- } while (opt != 0);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment