Advertisement
sellmmaahh

TP-2015-2.parc

Sep 11th, 2015
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.48 KB | None | 0 0
  1. #include <string>
  2. #include <iostream>
  3. #include <stdexcept>
  4. #include <string>
  5. #include "TestCurenja.h"
  6. using namespace std;
  7.  
  8. class Obrok
  9. {
  10.     std::string naziv;
  11.     double cijena;
  12.     std::string narucioc;
  13. public:
  14.     Obrok(std::string naziv, double cijena, std::string narucioc) :
  15.         naziv(naziv), cijena(cijena), narucioc(narucioc) {}
  16.     std::string DajNazivObroka() const
  17.     {
  18.         return naziv;
  19.     }
  20.     double DajCijenuObroka() const
  21.     {
  22.         return cijena;
  23.     }
  24.      virtual double DajUkupnuCijenu () const { return cijena; }
  25.     std::string DajNarucioca() const
  26.     {
  27.         return narucioc;
  28.     }
  29.     virtual void Ispisi() const
  30.     {
  31.         std::cout << narucioc << " je narucio " << naziv << " i treba platiti "
  32.                   << cijena << " KM.\n";
  33.     }
  34.     virtual Obrok *DajKopiju () const {
  35.         return new Obrok (*this);
  36.     }
  37. };
  38.  
  39. class Narudzbe
  40. {
  41.     int broj_narudzbi, kapacitet;
  42.     Obrok **obroci;
  43. public:
  44.     Narudzbe() : broj_narudzbi(0), kapacitet(20),
  45.         obroci(new Obrok*[kapacitet]) {}
  46.     ~Narudzbe()
  47.     { for (int i=0; i<broj_narudzbi; i++)
  48.           delete obroci[i];
  49.  
  50.         delete[] obroci;
  51.     }
  52.     Narudzbe(const Narudzbe &n) : broj_narudzbi(n.broj_narudzbi),
  53.         kapacitet(n.kapacitet)
  54.     {
  55.         obroci=new Obrok *[kapacitet];
  56.         for (int i=0; i<broj_narudzbi; i++)
  57.             obroci[i]=n.obroci[i]->DajKopiju();
  58.  
  59.     }
  60.     Narudzbe (const Narudzbe &&n) {
  61.         broj_narudzbi=n.broj_narudzbi;
  62.         kapacitet=n.kapacitet;
  63.         obroci=n.obroci;
  64.         n.broj_narudzbi=0;
  65.         n.kapacitet=0;
  66.         n.obroci=nullptr;
  67.     }
  68.  
  69.     Narudzbe &operator =(const Narudzbe &n) {
  70.         if (this==&n) return *this;
  71.         for (int i=0; i<broj_narudzbi; i++)
  72.             delete obroci [i];
  73.         delete [] obroci;
  74.         broj_narudzbi=n.broj_narudzbi;
  75.         kapacitet=n.kapacitet;
  76.          obroci=new Obrok *[kapacitet];
  77.         for (int i=0; i<broj_narudzbi; i++)
  78.                 obroci[i]= n.obroci[i]->DajKopiju();
  79.  
  80.         return *this;
  81.  
  82.     }
  83.     Narudzbe &operator =(const Narudzbe &&n) {
  84.         if (this==&n) return *this;
  85.         for (int i=0; i<broj_narudzbi; i++)
  86.             delete obroci [i];
  87.         delete [] obroci;
  88.         kapacitet=n.kapacitet;
  89.         broj_narudzbi=n.broj_narudzbi;
  90.         obroci=n.obroci;
  91.         n.kapacitet=0;
  92.         n.broj_narudzbi=0;
  93.         n.obroci=nullptr;
  94.      return *this;
  95.     }
  96.  
  97.     void NaruciObrok(std::string naziv, double cijena, std::string narucioc)
  98.     {
  99.         if(broj_narudzbi == kapacitet)
  100.         {
  101.             try {
  102.             kapacitet+=20;
  103.             Obrok **pom= new Obrok *[kapacitet];
  104.             for (int i=0; i<broj_narudzbi; i++)
  105.                 pom[i]=obroci[i];
  106.             delete [] obroci;
  107.             obroci=pom;
  108.         }
  109.         catch (bad_alloc) {
  110.             throw std::range_error("Dostignut maksimalan broj narudzbi!");
  111.         }
  112.         }
  113.         obroci[broj_narudzbi++] = new Obrok(naziv, cijena, narucioc);
  114.     }
  115.  
  116.     void NaruciObrokSPicem (string naziv, string pice, double cijena_o, double cijena_p, string narucioc) {
  117.         if (broj_narudzbi>kapacitet)
  118.             throw std::range_error("Dostignut maksimalan broj narudzbi!");
  119.         obroci[broj_narudzbi++]= new ObrokSaPicem (naziv,pice,cijena_o,cijena_p,narucioc);
  120.     }
  121.  
  122.     void ObradiNarudzbu () const {
  123.         if (broj_narudzbi==0) throw "Nema narudzbi!";
  124.         obroci[broj_narudzbi-1]->Ispisi();
  125.         delete obroci[broj_narudzbi-1];
  126.         broj_narudzbi--;
  127.     }
  128.  
  129.  
  130.     bool operator ! () {
  131.         if (broj_narudzbi==0) return true;
  132.     return false;
  133.     }
  134.  
  135.         friend Narudzbe operator+ (const Narudzbe &n1, const Narudzbe &n2)
  136.     {
  137.         Narudzbe n3;
  138.         n3.kapacitet = n1.kapacitet + n2.kapacitet;
  139.         n3.broj_narudzbi = n1.broj_narudzbi + n2.broj_narudzbi;
  140.         n3.obroci = new Obrok * [n1.kapacitet + n2.kapacitet];
  141.         for(int i = 0; i < n1.broj_narudzbi; i++)
  142.         {
  143.             n3.obroci[i] = n1.obroci[i]->DajKopiju();
  144.         }
  145.         for (int i=n1.broj_narudzbi; i<n3.broj_narudzbi; i++)
  146.         {
  147.              n3.obroci[i]=n2.obroci[i]->DajKopiju();
  148.         }
  149.  
  150.     }
  151.     int operator () (string student ) {
  152.        int cijena{0};
  153.        for (int i=0; i<broj_narudzbi; i++) {
  154.             if (student==obroci[i]->DajNarucioca())
  155.             cijena+=obroci[i]->DajUkupnuCijenu();
  156.        }
  157.  
  158.        return cijena;
  159.    }
  160.  
  161.     const Obrok &operator[] (int redni_broj) const
  162.     {
  163.         return *obroci[redni_broj];
  164.     }
  165. };
  166.  
  167. class ObrokSaPicem : public Obrok {
  168.  
  169.     string naziv_pica;
  170.     double cijena_pica;
  171. public :
  172.     ObrokSaPicem (string naziv, string pice, double cijena_o, double cijena_p, string narucioc) : Obrok(naziv,cijena_o,narucioc),
  173.     naziv_pica(pice), cijena_pica(cijena_p) {}
  174.     string DajNazivPica () const {return naziv_pica; }
  175.     double DajCijenuPica () const { return cijena_pica; }
  176.     double DajUkupnuCijenu () const override { return cijena+cijena_pica; }
  177.      void Ispisi() const override
  178.     {
  179.      std::cout << narucioc << " je narucio " << naziv <<" i" << naziv_pica<<" i ukupno treba platiti "
  180.                   << cijena+ cijena_pica<< " KM.\n";
  181.     }
  182.  
  183.  
  184.       virtual ObrokSaPicem *DajKopiju () const {
  185.         return new ObrokSaPicem (*this);
  186.     }
  187.  
  188.  
  189.  
  190.  
  191.  
  192. int main()
  193. {
  194.     Narudzbe etf_fast_food;
  195.     etf_fast_food.NaruciObrok("burek", 2.5, "Brus Li");
  196.     etf_fast_food[0].Ispisi();
  197.     return 0;
  198. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement