Advertisement
unnn

varianta Comenzi 2017

Jan 27th, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.16 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <list>
  4.  
  5. using namespace std;
  6.  
  7. class Comanda {
  8. private:
  9.     const int cod;
  10.     int nrProduse;
  11.     float* listaPreturi;
  12.     bool plataCard;
  13.     static int NR_COMANDA;
  14. public:
  15.     Comanda() : cod(NR_COMANDA++) {
  16.         nrProduse = 0;
  17.         listaPreturi = NULL;
  18.         plataCard = false;
  19.     }
  20.  
  21.     Comanda(int _nrProduse, float* _listaProduse, bool _plataCard) : cod(NR_COMANDA++) {
  22.         nrProduse = _nrProduse;
  23.         listaPreturi = new float[nrProduse];
  24.         for (int i = 0; i < nrProduse; i++) {
  25.             listaPreturi[i] = _listaProduse[i];
  26.         }
  27.         plataCard = _plataCard;
  28.     }
  29.  
  30.     ~Comanda() {
  31.         delete[] listaPreturi;
  32.         NR_COMANDA--;
  33.     }
  34.  
  35.     Comanda(const Comanda& c) : cod(NR_COMANDA++) {
  36.         nrProduse = c.nrProduse;
  37.         listaPreturi = new float[nrProduse];
  38.         for (int i = 0; i < nrProduse; i++) {
  39.             listaPreturi[i] = c.listaPreturi[i];
  40.         }
  41.         plataCard = c.plataCard;
  42.     }
  43.  
  44.     Comanda& operator=(const Comanda& c) {
  45.         nrProduse = c.nrProduse;
  46.         delete[] listaPreturi;
  47.         listaPreturi = new float[nrProduse];
  48.         for (int i = 0; i < nrProduse; i++) {
  49.             listaPreturi[i] = c.listaPreturi[i];
  50.         }
  51.         plataCard = c.plataCard;
  52.  
  53.         return *this;
  54.     }
  55.  
  56.     void setPreturi(float* _preturi, int _nrPreturi) {
  57.         if (_nrPreturi > 0) {
  58.             delete[] listaPreturi;
  59.             nrProduse = _nrPreturi;
  60.             listaPreturi = new float[_nrPreturi];
  61.             for (int i = 0; i < nrProduse; i++) {
  62.                 listaPreturi[i] = _preturi[i];
  63.             }
  64.         }
  65.         else {
  66.             throw new exception("Numar preturi invalid!");
  67.         }
  68.        
  69.     }
  70.  
  71.     int getNrProduse() {
  72.         return nrProduse;
  73.     }
  74.  
  75.     virtual float getTotalComanda() {
  76.         float suma = 0;
  77.         for (int i = 0; i < nrProduse; i++) {
  78.             suma += listaPreturi[i];
  79.         }
  80.  
  81.         return suma;
  82.     }
  83.  
  84.     bool operator>(Comanda& c) {
  85.         if (this->getTotalComanda() > c.getTotalComanda()) {
  86.             return true;
  87.         }
  88.         else {
  89.             return false;
  90.         }
  91.     }
  92.  
  93.     float& operator[](int index) {
  94.         if (index > 0 && index < nrProduse) {
  95.             return listaPreturi[index];
  96.         }
  97.         else {
  98.             throw new exception("Index invalid!");
  99.         }
  100.     }
  101.  
  102.     explicit operator float() {
  103.         float max = listaPreturi[0];
  104.         for (int i = 0; i < nrProduse; i++) {
  105.             if (listaPreturi[i] > max) {
  106.                 max = listaPreturi[i];
  107.             }
  108.         }
  109.        
  110.         return max;
  111.     }
  112.  
  113.     Comanda& operator/=(float _discount) {
  114.         for (int i = 0; i < nrProduse; i++) {
  115.             float reducere = listaPreturi[i] * _discount;
  116.             listaPreturi[i] = listaPreturi[i] - reducere;
  117.         }
  118.  
  119.         return *this;
  120.     }
  121.  
  122.     bool operator!() {
  123.         if (plataCard) {
  124.             return true;
  125.         }
  126.         else {
  127.             return false;
  128.         }
  129.     }
  130.  
  131.     friend istream& operator>>(istream& is, Comanda& c);
  132.     friend ostream& operator<<(ostream& oss, const Comanda& c);
  133.     friend ifstream& operator>>(ifstream& is, Comanda& c);
  134.     friend ofstream& operator<<(ofstream& os, const Comanda& c);
  135. };
  136.  
  137. int Comanda::NR_COMANDA = 0;
  138.  
  139. istream & operator>>(istream & is, Comanda & c) {
  140.     cout << "Nr. produse: ";
  141.     is >> c.nrProduse;
  142.     delete[] c.listaPreturi;
  143.     c.listaPreturi = new float[c.nrProduse];
  144.     for (int i = 0; i < c.nrProduse; i++) {
  145.         cout << "Produsul " << i << ": ";
  146.         is >> c.listaPreturi[i];
  147.     }
  148.     cout << "Plata card (0 F, 1 A): ";
  149.     is >> c.plataCard;
  150.  
  151.     return is;
  152. }
  153.  
  154. ostream & operator<<(ostream & oss, const Comanda & c) {
  155.     oss << "Comanda #" << c.cod << endl;
  156.     oss << "\tNr. produse: " << c.nrProduse << endl;
  157.     for (int i = 0; i < c.nrProduse; i++) {
  158.         oss << "\tProdusul " << i << ": " << c.listaPreturi[i] << endl;
  159.     }
  160.     oss << "\tPlata card: " << c.plataCard << endl;
  161.  
  162.     return oss;
  163. }
  164.  
  165. ifstream & operator>>(ifstream & is, Comanda & c) {
  166.     is >> c.nrProduse;
  167.     c.listaPreturi = new float[c.nrProduse];
  168.     for (int i = 0; i < c.nrProduse; i++) {
  169.         is >> c.listaPreturi[i];
  170.     }
  171.     is >> c.plataCard;
  172.  
  173.     return is;
  174. }
  175.  
  176. ofstream & operator<<(ofstream & os, const Comanda & c) {
  177.     os << c.nrProduse << endl;
  178.     for (int i = 0; i < c.nrProduse; i++) {
  179.         os << c.listaPreturi[i] << endl;
  180.     }
  181.     os << c.plataCard << endl;
  182.  
  183.     return os;
  184. }
  185.  
  186. class ComandaDomiciliu : public Comanda {
  187. private:
  188.     char adresa[50];
  189.     float taxaTransport;
  190. public:
  191.     ComandaDomiciliu() : Comanda() {
  192.         strcpy(adresa, NULL);
  193.         taxaTransport = 0;
  194.     }
  195.  
  196.     ComandaDomiciliu(const char* _adresa, float _taxa, int _nrProduse, float* _listaProduse, bool _plataCard)
  197.         : Comanda(_nrProduse, _listaProduse, _plataCard) {
  198.         strcpy(adresa, _adresa);
  199.         taxaTransport = _taxa;
  200.     }
  201.  
  202.     ~ComandaDomiciliu() {}
  203.  
  204.     float getTotalComanda() {
  205.         return Comanda::getTotalComanda() + taxaTransport;
  206.     }
  207. };
  208.  
  209. int main() {
  210.     Comanda c1;
  211.     float preturi[] = { 10.4, 23.6, 35, 19 };
  212.     Comanda c2(4, preturi, true);
  213.     Comanda *pc;
  214.     pc = new Comanda();
  215.     delete pc;
  216.  
  217.     cin >> c1;
  218.     cout << c1;
  219.  
  220.     c1 = c2;
  221.     Comanda c3 = c1;
  222.  
  223.     cout << c3;
  224.     float preturi2[] = { 200, 199.5, 150 };
  225.     c3.setPreturi(preturi2, 3);
  226.     cout << c3;
  227.     try {
  228.         c3.setPreturi(preturi2, -3);
  229.     }
  230.     catch (exception* e) {
  231.         cout << e->what() << endl;
  232.         c3.setPreturi(preturi2, 3);
  233.     }
  234.     cout << "\n" << c3.getNrProduse() << endl;
  235.  
  236.     float total = c3.getTotalComanda();
  237.     if (c3 > c2) {
  238.         cout << "Comanda c3 are un total mai mare ca c2" << endl;
  239.     }
  240.     else {
  241.         cout << "Comanda c2 are un total mai mare ca c3" << endl;
  242.     }
  243.  
  244.     cout << c3[2] << endl;
  245.     c3[2] = 100;
  246.     cout << c3[2] << endl;
  247.     float maxPret = (float)c3;
  248.     cout << maxPret << endl;
  249.  
  250.     c3 /= 0.1;
  251.     cout << c3;
  252.     if (!c2) {
  253.         cout << "Comanda nu a fost platita cu cardul!" << endl;
  254.     }
  255.  
  256.     ofstream file("comenzi.txt", ios::out);
  257.     if (file.is_open()) {
  258.         file << c1 << c2 << c3;
  259.  
  260.         file.close();
  261.     }
  262.  
  263.     Comanda c4, c5, c6;
  264.     ifstream filein("comenzi.txt", ios::in);
  265.     if (filein.is_open()) {
  266.         while (!filein.eof()) {
  267.             filein >> c4;
  268.             filein >> c5;
  269.             filein >> c6;
  270.         }
  271.  
  272.         filein.close();
  273.     }
  274.  
  275.     ComandaDomiciliu comanda("crangasi", 25, 4, preturi, 1);
  276.     cout << comanda.getTotalComanda() << endl;
  277.  
  278.     Comanda* *lista = new Comanda*[3];
  279.     lista[0] = &c1;
  280.     lista[1] = &c3;
  281.     lista[2] = &comanda;
  282.  
  283.     for (int i = 0; i < 3; i++) {
  284.         cout << lista[i]->getTotalComanda() << endl;
  285.     }
  286.  
  287.     list<Comanda> listaComenzi;
  288.     list<Comanda>::iterator it;
  289.     listaComenzi.push_back(c1);
  290.     listaComenzi.push_back(c2);
  291.     listaComenzi.push_back(c3);
  292.  
  293.     for (it = listaComenzi.begin(); it != listaComenzi.end(); it++) {
  294.         cout << *it << endl;
  295.     }
  296.    
  297.     return 0;
  298. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement