Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <String>
- #include <conio.h>
- #include <fstream>
- #include <vector>
- using namespace std;
- class Medicament
- {
- private:
- string denumire;
- float pret;
- public:
- Medicament()
- {
- pret = 0.0;
- denumire = "fara denumire";
- };
- Medicament(string den, float p)
- {
- denumire = den;
- pret = p;
- };
- Medicament(Medicament& m)
- {
- this->denumire = m.denumire;
- this->pret = m.pret;
- };
- ~Medicament()
- {
- }
- void setDenumire(string den)
- {
- this->denumire = den;
- };
- void setPret(float p)
- {
- this->pret = p;
- };
- float getPret()
- {
- return this->pret;
- };
- Medicament& operator=(Medicament& m)
- {
- this->denumire = m.denumire;
- this->pret = m.pret;
- return *this;
- };
- friend ostream& operator<<(ostream& out, Medicament& m)
- {
- out << "Denumire: " << m.denumire<<endl;
- out << "Pret: " << m.pret<<endl;
- return out;
- };
- };
- class Reteta
- {
- private:
- Medicament* medicamente;
- int n;
- public:
- Reteta()
- {
- this->n = 0;
- medicamente = NULL;
- };
- Reteta(Medicament* mP, int nP)
- {
- this->n = nP;
- this->medicamente = new Medicament[n];
- for (int i = 0; i < n;i++)
- {
- medicamente[i] = mP[i];
- }
- };
- Reteta(Reteta& rP)
- {
- this->n = rP.n;
- this->medicamente = new Medicament[n];
- for (int i = 0; i < n; i++)
- {
- medicamente[i] = rP.medicamente[i];
- }
- };
- ~Reteta()
- {
- this->n = 0;
- if (this->medicamente != NULL)
- delete[] this->medicamente;
- };
- friend ostream& operator<<(ostream& out, Reteta& r)
- {
- for (int i = 0; i < r.n; i++)
- {
- out<<r.medicamente[i];
- }
- return out;
- };
- void adaugaMedicament(Medicament& m)
- {
- if (this->medicamente != NULL&&this->n!=0)
- {
- Medicament* temp = new Medicament[n + 1];
- for (int i = 0; i < n; i++)
- {
- temp[i] = this->medicamente[i];
- }
- delete[] this->medicamente;
- this->medicamente = new Medicament[n+1];
- for (int i = 0; i < n; i++)
- {
- this->medicamente[i] = temp[i];
- }
- }
- else
- {
- this->medicamente = new Medicament[n + 1];
- }
- this->medicamente[n] = m;
- n = n + 1;
- };
- Reteta& operator=(Reteta& r)
- {
- if (this->medicamente != NULL&&this->n != 0)
- {
- delete[] this->medicamente;
- }
- this->n = r.n;
- this->medicamente = new Medicament[n];
- for (int i = 0; i < n; i++)
- {
- this->medicamente[i] = r.medicamente[i];
- }
- return *this;
- };
- int getN()
- {
- return this->n;
- };
- Medicament& operator[](int i)
- {
- return medicamente[i];
- };
- virtual float getValoare()
- {
- float suma = 0;
- for (int i = 0; i < this->n; i++)
- {
- suma = suma + this->medicamente[i].getPret();
- }
- return suma;
- };
- friend ifstream& operator>>(ifstream& in, Reteta& r)
- {
- int nrMedicamente,randuri ,randuriCitite=0;
- float pretMedicament;
- string data, numeMedicament;
- Medicament m;
- string::size_type sz;
- in >> nrMedicamente;
- randuri = nrMedicamente * 2;
- if (r.medicamente != NULL)
- {
- delete[] r.medicamente;
- }
- while (randuriCitite<randuri)
- {
- randuriCitite++;
- in >> data;
- if (randuriCitite % 2 == 1)
- {
- numeMedicament = data;
- }
- else
- {
- pretMedicament = stof (data,&sz);
- m.setDenumire(numeMedicament);
- m.setPret(pretMedicament);
- r.adaugaMedicament(m);
- }
- }
- return in;
- };
- };
- class RetetaCompensata : public Reteta
- {
- private:
- float procentCompensat;
- public:
- RetetaCompensata()
- {
- procentCompensat = 0.0;
- }
- RetetaCompensata(float procent)
- {
- procentCompensat = procent;
- }
- RetetaCompensata(Reteta& rP, float procent):Reteta(rP)
- {
- procentCompensat = procent;
- }
- ~RetetaCompensata()
- {
- }
- float getValoare()
- {
- float suma=Reteta::getValoare();
- return suma*procentCompensat;
- };
- RetetaCompensata& operator=(Reteta& r)
- {
- this->procentCompensat = 0;
- return *this;
- };
- };
- int main()
- {
- //partea 1
- Medicament nurofen("Nurofen", 11.25f);
- Medicament aspirina = nurofen;
- aspirina.setDenumire("Aspirina");
- aspirina.setPret(4.5f);
- {
- Medicament temp;
- temp = nurofen;
- cout << temp << endl;
- }
- cout << nurofen << endl;
- cout << aspirina << endl;
- //partea 2
- Medicament medicamente[] = { aspirina,nurofen };
- Reteta r0(medicamente, 2);
- cout << r0 << endl;
- //partea 3
- Reteta r1;
- r1.adaugaMedicament(nurofen);
- r1.adaugaMedicament(aspirina);
- for (int i = 0; i < r1.getN(); i++)
- cout << r1[i] << endl;
- //partea 4
- RetetaCompensata r2(0.5);
- r2.adaugaMedicament(nurofen);
- r2.adaugaMedicament(aspirina);
- RetetaCompensata r3(r1, (float)0.2);
- Reteta*p = &r1;
- cout << p->getValoare() << endl;
- p = &r3;
- cout << p->getValoare() << endl;
- //partea 5
- Reteta r4;
- ifstream fisier("retete.txt");
- fisier >> r4;
- cout << endl << endl;
- cout << r4 << endl;
- //partea 6
- RetetaCompensata* pReteta = new RetetaCompensata[5];
- pReteta[0] = r0;
- pReteta[1] = r1;
- pReteta[2] = r2;
- pReteta[3] = r3;
- pReteta[4] = r4;
- int iteratorv2 = 0;
- vector<Reteta> listaRetete(pReteta, pReteta + 5);
- cout << endl << endl;
- for (vector<Reteta>::iterator it = listaRetete.begin(); it != listaRetete.end(); ++it)
- {
- cout << *it << "Valoare: " << listaRetete[iteratorv2].getValoare() << endl<<endl;
- iteratorv2++;
- }
- _getch();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement