Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <list>
- using namespace std;
- class Comanda {
- private:
- const int cod;
- int nrProduse;
- float* listaPreturi;
- bool plataCard;
- static int NR_COMANDA;
- public:
- Comanda() : cod(NR_COMANDA++) {
- nrProduse = 0;
- listaPreturi = NULL;
- plataCard = false;
- }
- Comanda(int _nrProduse, float* _listaProduse, bool _plataCard) : cod(NR_COMANDA++) {
- nrProduse = _nrProduse;
- listaPreturi = new float[nrProduse];
- for (int i = 0; i < nrProduse; i++) {
- listaPreturi[i] = _listaProduse[i];
- }
- plataCard = _plataCard;
- }
- ~Comanda() {
- delete[] listaPreturi;
- NR_COMANDA--;
- }
- Comanda(const Comanda& c) : cod(NR_COMANDA++) {
- nrProduse = c.nrProduse;
- listaPreturi = new float[nrProduse];
- for (int i = 0; i < nrProduse; i++) {
- listaPreturi[i] = c.listaPreturi[i];
- }
- plataCard = c.plataCard;
- }
- Comanda& operator=(const Comanda& c) {
- nrProduse = c.nrProduse;
- delete[] listaPreturi;
- listaPreturi = new float[nrProduse];
- for (int i = 0; i < nrProduse; i++) {
- listaPreturi[i] = c.listaPreturi[i];
- }
- plataCard = c.plataCard;
- return *this;
- }
- void setPreturi(float* _preturi, int _nrPreturi) {
- if (_nrPreturi > 0) {
- delete[] listaPreturi;
- nrProduse = _nrPreturi;
- listaPreturi = new float[_nrPreturi];
- for (int i = 0; i < nrProduse; i++) {
- listaPreturi[i] = _preturi[i];
- }
- }
- else {
- throw new exception("Numar preturi invalid!");
- }
- }
- int getNrProduse() {
- return nrProduse;
- }
- virtual float getTotalComanda() {
- float suma = 0;
- for (int i = 0; i < nrProduse; i++) {
- suma += listaPreturi[i];
- }
- return suma;
- }
- bool operator>(Comanda& c) {
- if (this->getTotalComanda() > c.getTotalComanda()) {
- return true;
- }
- else {
- return false;
- }
- }
- float& operator[](int index) {
- if (index > 0 && index < nrProduse) {
- return listaPreturi[index];
- }
- else {
- throw new exception("Index invalid!");
- }
- }
- explicit operator float() {
- float max = listaPreturi[0];
- for (int i = 0; i < nrProduse; i++) {
- if (listaPreturi[i] > max) {
- max = listaPreturi[i];
- }
- }
- return max;
- }
- Comanda& operator/=(float _discount) {
- for (int i = 0; i < nrProduse; i++) {
- float reducere = listaPreturi[i] * _discount;
- listaPreturi[i] = listaPreturi[i] - reducere;
- }
- return *this;
- }
- bool operator!() {
- if (plataCard) {
- return true;
- }
- else {
- return false;
- }
- }
- friend istream& operator>>(istream& is, Comanda& c);
- friend ostream& operator<<(ostream& oss, const Comanda& c);
- friend ifstream& operator>>(ifstream& is, Comanda& c);
- friend ofstream& operator<<(ofstream& os, const Comanda& c);
- };
- int Comanda::NR_COMANDA = 0;
- istream & operator>>(istream & is, Comanda & c) {
- cout << "Nr. produse: ";
- is >> c.nrProduse;
- delete[] c.listaPreturi;
- c.listaPreturi = new float[c.nrProduse];
- for (int i = 0; i < c.nrProduse; i++) {
- cout << "Produsul " << i << ": ";
- is >> c.listaPreturi[i];
- }
- cout << "Plata card (0 F, 1 A): ";
- is >> c.plataCard;
- return is;
- }
- ostream & operator<<(ostream & oss, const Comanda & c) {
- oss << "Comanda #" << c.cod << endl;
- oss << "\tNr. produse: " << c.nrProduse << endl;
- for (int i = 0; i < c.nrProduse; i++) {
- oss << "\tProdusul " << i << ": " << c.listaPreturi[i] << endl;
- }
- oss << "\tPlata card: " << c.plataCard << endl;
- return oss;
- }
- ifstream & operator>>(ifstream & is, Comanda & c) {
- is >> c.nrProduse;
- c.listaPreturi = new float[c.nrProduse];
- for (int i = 0; i < c.nrProduse; i++) {
- is >> c.listaPreturi[i];
- }
- is >> c.plataCard;
- return is;
- }
- ofstream & operator<<(ofstream & os, const Comanda & c) {
- os << c.nrProduse << endl;
- for (int i = 0; i < c.nrProduse; i++) {
- os << c.listaPreturi[i] << endl;
- }
- os << c.plataCard << endl;
- return os;
- }
- class ComandaDomiciliu : public Comanda {
- private:
- char adresa[50];
- float taxaTransport;
- public:
- ComandaDomiciliu() : Comanda() {
- strcpy(adresa, NULL);
- taxaTransport = 0;
- }
- ComandaDomiciliu(const char* _adresa, float _taxa, int _nrProduse, float* _listaProduse, bool _plataCard)
- : Comanda(_nrProduse, _listaProduse, _plataCard) {
- strcpy(adresa, _adresa);
- taxaTransport = _taxa;
- }
- ~ComandaDomiciliu() {}
- float getTotalComanda() {
- return Comanda::getTotalComanda() + taxaTransport;
- }
- };
- int main() {
- Comanda c1;
- float preturi[] = { 10.4, 23.6, 35, 19 };
- Comanda c2(4, preturi, true);
- Comanda *pc;
- pc = new Comanda();
- delete pc;
- cin >> c1;
- cout << c1;
- c1 = c2;
- Comanda c3 = c1;
- cout << c3;
- float preturi2[] = { 200, 199.5, 150 };
- c3.setPreturi(preturi2, 3);
- cout << c3;
- try {
- c3.setPreturi(preturi2, -3);
- }
- catch (exception* e) {
- cout << e->what() << endl;
- c3.setPreturi(preturi2, 3);
- }
- cout << "\n" << c3.getNrProduse() << endl;
- float total = c3.getTotalComanda();
- if (c3 > c2) {
- cout << "Comanda c3 are un total mai mare ca c2" << endl;
- }
- else {
- cout << "Comanda c2 are un total mai mare ca c3" << endl;
- }
- cout << c3[2] << endl;
- c3[2] = 100;
- cout << c3[2] << endl;
- float maxPret = (float)c3;
- cout << maxPret << endl;
- c3 /= 0.1;
- cout << c3;
- if (!c2) {
- cout << "Comanda nu a fost platita cu cardul!" << endl;
- }
- ofstream file("comenzi.txt", ios::out);
- if (file.is_open()) {
- file << c1 << c2 << c3;
- file.close();
- }
- Comanda c4, c5, c6;
- ifstream filein("comenzi.txt", ios::in);
- if (filein.is_open()) {
- while (!filein.eof()) {
- filein >> c4;
- filein >> c5;
- filein >> c6;
- }
- filein.close();
- }
- ComandaDomiciliu comanda("crangasi", 25, 4, preturi, 1);
- cout << comanda.getTotalComanda() << endl;
- Comanda* *lista = new Comanda*[3];
- lista[0] = &c1;
- lista[1] = &c3;
- lista[2] = &comanda;
- for (int i = 0; i < 3; i++) {
- cout << lista[i]->getTotalComanda() << endl;
- }
- list<Comanda> listaComenzi;
- list<Comanda>::iterator it;
- listaComenzi.push_back(c1);
- listaComenzi.push_back(c2);
- listaComenzi.push_back(c3);
- for (it = listaComenzi.begin(); it != listaComenzi.end(); it++) {
- cout << *it << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement