Ctyderv

Untitled

Jan 14th, 2022
861
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //GESTIUNEA UNUI RESTAURANT
  2. //AM ALES ACEST DOMENIU DEOARECE SUNT PASIONATA DE GASTRONOMIE,IMI PLACE ATAT SA GATESC,CAT SI SA INCERC DIFERITE MANCARURI CU SPECIFIC.
  3. //PE VIITOR IMI DORESC SA IMI DESCHID UN RESTAURANT SI CONSIDER CA O APLICATIE M-AR AJUTA FOARTE MULT IN PROCESUL DE GESTIUNE & MANAGEMENT.
  4. #include<iostream>
  5. #include<string>
  6. #include<fstream>
  7. using namespace std;
  8.  
  9. class Bar {
  10. private:
  11.     string localizare;
  12.     float* preturi;
  13.     int nrProduse;
  14.     static int nrBaruri;
  15.     const int anConstructie;
  16. public:
  17.     Bar() :anConstructie(2020) {
  18.         localizare = "centrala";
  19.         nrProduse = 10;
  20.         preturi = new float[nrProduse];
  21.         for (int i = 0; i < nrProduse; i++)
  22.         {
  23.             preturi[i] = 4;
  24.         }
  25.         nrBaruri++;
  26.     }
  27.  
  28.     Bar(string localizare, float* preturi, int nrProduseBar, int anConstructieBar) :anConstructie(anConstructieBar)
  29.     {
  30.         this->localizare = localizare;
  31.         nrProduse = nrProduseBar;
  32.         this->preturi = new float[nrProduseBar];
  33.         for (int i = 0; i < nrProduse; i++)
  34.         {
  35.             this->preturi[i] = preturi[i];
  36.         }
  37.         nrBaruri++;
  38.     }
  39.     Bar(string localizare, int nrProduse, int anConstructie) :anConstructie(anConstructie)
  40.     {
  41.         this->localizare = localizare;
  42.         this->nrProduse = nrProduse;
  43.     }
  44.  
  45.     Bar(const Bar& BarCentral) :anConstructie(BarCentral.anConstructie) {
  46.         nrBaruri++;
  47.         this->localizare = BarCentral.localizare;
  48.         this->nrProduse = BarCentral.nrProduse;
  49.         if (BarCentral.preturi != NULL && BarCentral.nrProduse > 0)
  50.         {
  51.             this->preturi = new float[nrProduse];
  52.             for (int i = 0; i < nrProduse; i++)
  53.                 this->preturi[i] = BarCentral.preturi[i];
  54.         }
  55.         else
  56.         {
  57.             this->preturi = NULL;
  58.         }
  59.     }
  60.     const Bar& operator=(const Bar& BarCentral) {
  61.         if (this != &BarCentral) {
  62.             this->localizare = BarCentral.localizare;
  63.             this->nrProduse = BarCentral.nrProduse;
  64.             if (this->preturi != NULL)
  65.                 delete[]this->preturi;
  66.             if (BarCentral.preturi != NULL && BarCentral.nrProduse > 0)
  67.             {
  68.                 preturi = new float[BarCentral.nrProduse];
  69.                 for (int i = 0; i < nrProduse; i++)
  70.                     this->preturi[i] = BarCentral.preturi[i];
  71.             }
  72.             else
  73.                 this->preturi = NULL;
  74.             return *this;
  75.         }
  76.     }
  77.     string getLocalizare()const {
  78.         return this->localizare;
  79.     }
  80.     const int getAnConstructie()const {
  81.         return this->anConstructie;
  82.     }
  83.     int getNrProduse()const {
  84.         return this->nrProduse;
  85.     }
  86.     float* getPreturi()const {
  87.         return preturi;
  88.     }
  89.     float getPret(int pozitie)const {
  90.         if (pozitie >= 0 && pozitie < this->nrProduse) {
  91.             return this->preturi[pozitie];
  92.         }
  93.     }
  94.     void setlocalizare(string localizare) {
  95.         if (localizare.length() >= 6) {
  96.             this->localizare = localizare;
  97.         }
  98.     }
  99.     void setPreturiProduse(float* preturi, int nrProduse) {
  100.         if (nrProduse > 0 && preturi != NULL)
  101.         {
  102.             if (this->preturi != NULL)
  103.             {
  104.                 delete[]this->preturi;
  105.             }
  106.             this->preturi = new float[nrProduse];
  107.             for (int i = 0; i < nrProduse; i++)
  108.             {
  109.                 if (preturi[i] > 0)
  110.                     this->preturi[i] = preturi[i];
  111.                 else
  112.                     this->preturi[i] = 0.3f;
  113.             }
  114.             this->nrProduse = nrProduse;
  115.         }
  116.     }
  117.     static int getNrBaruri()
  118.     {
  119.         return nrBaruri;
  120.     }
  121.  
  122.     ~Bar() {
  123.         if (this->preturi != NULL)
  124.             delete[]preturi;
  125.     }
  126.     friend ofstream& operator<< (ofstream& out, const Bar& b) {
  127.         out << b.localizare << " ";
  128.         out << b.nrProduse << " ";
  129.         for (int i = 0; i < b.nrProduse; i++)
  130.         {
  131.             out << b.preturi[i] << " ";
  132.  
  133.         }
  134.         out << b.anConstructie << endl;
  135.         return out;
  136.     }
  137.     friend ifstream& operator>>(ifstream& g, Bar& b) {
  138.         g >> b.localizare;
  139.         g >> b.nrProduse;
  140.         if (b.nrProduse != NULL) {
  141.             delete[]b.preturi;
  142.         }
  143.         b.preturi = new float[b.nrProduse];
  144.         for (int i = 0; i < b.nrProduse; i++) {
  145.             g >> b.preturi[i];
  146.         }
  147.         int aux;
  148.         g >> aux;
  149.         return g;
  150.  
  151.     }
  152.     bool operator >= (const Bar& BarCentral) {
  153.         return this->nrProduse >= BarCentral.nrProduse;
  154.     }
  155.     bool operator==(const Bar& BarCentral) {
  156.         if (nrProduse = BarCentral.nrProduse && localizare == BarCentral.localizare)
  157.         {
  158.             return true;
  159.         }
  160.         return false;
  161.     }
  162.     Bar operator!() {
  163.         Bar aux = *this;
  164.         aux.nrBaruri = !aux.nrBaruri;
  165.         return aux;
  166.     }
  167.     Bar operator+(const Bar& BarCentral) {
  168.         Bar aux = *this;
  169.         if (aux.preturi != NULL) {
  170.             delete[]aux.preturi;
  171.         }
  172.         aux.preturi = new float[this->nrProduse + BarCentral.nrProduse];
  173.         aux.nrProduse = this->nrProduse + BarCentral.nrProduse;
  174.         for (int i = 0; i < this->nrProduse; i++) {
  175.             aux.preturi[i] = this->preturi[i];
  176.         }
  177.         for (int i = 0; i < BarCentral.nrProduse; i++) {
  178.             aux.preturi[i + this->nrProduse] = BarCentral.preturi[i];
  179.         }
  180.         return aux;
  181.     }
  182.     int operator[](int pozitie) {
  183.         if (pozitie >= 0 && pozitie < this->nrProduse) {
  184.             return this->preturi[pozitie];
  185.         }
  186.         else
  187.             throw exception("Preturile nu sunt valide");
  188.     }
  189.     Bar operator++() { //forma prefixata
  190.         for (int i = 0; i < this->nrProduse; i++) {
  191.             this->preturi[i]++;
  192.         }
  193.         return *this;
  194.     }
  195.     Bar operator++(int) {//forma postfixata
  196.         Bar aux = *this;
  197.         for (int i = 0; i < this->nrProduse; i++)
  198.         {
  199.             this->preturi[i]++;
  200.         }
  201.         return aux;
  202.     }
  203.  
  204.     explicit operator float() {
  205.         float suma = 0;
  206.         for (int i = 0; i < nrProduse; i++)
  207.             suma = suma + preturi[i];
  208.         return suma;
  209.     }
  210.     //void scriereInFisierBinar(fstream& s) {
  211.     //  int lungime = localizare.length();
  212.     //  s.write((char*)&lungime, sizeof(lungime));
  213.     //  s.write((char*)&this->localizare.c_str(), lungime * sizeof(char));
  214.     //  s.write((char*)&this->nrProduse, sizeof(this->nrProduse));
  215.     //  for (int i = 0; i < nrProduse; i++)
  216.     //  {
  217.     //      s.write((char*)&this->preturi[i], sizeof(preturi[i]));
  218.     //  }
  219.     //}
  220.     //void citesteDinFisierBinar(fstream& c) {
  221.     //  int lungime = 0;
  222.     //  c.read((char*)&lungime, sizeof(lungime));
  223.     //  localizare.resize(lungime);
  224.     //  c.read((char*)localizare.c_str(), lungime);
  225.     //  c.read((char*)&nrProduse, sizeof(nrProduse));
  226.     //  if (this->preturi != NULL)
  227.     //      delete[]this->preturi;
  228.     //  this->preturi = new float[nrProduse];
  229.     //  for (int i = 0; i < nrProduse; i++)
  230.     //      c.read((char*)&preturi[i], sizeof(preturi[i]));
  231.  
  232.     //}
  233.  
  234. };
  235. int Bar::nrBaruri = 0;
  236.  
  237. class Magazie {
  238. private:
  239.     string numeMagazie;
  240.     int numarRafturi;
  241.     int* distanteRafturi;
  242.     const int AnConstructie;
  243.     static int nrMagazii;
  244.  
  245. public:
  246.     Magazie() :AnConstructie(2020) {
  247.         this->numeMagazie = "Magazia1";
  248.         this->numarRafturi = 0;
  249.         this->distanteRafturi = nullptr;
  250.         nrMagazii++;
  251.     }
  252.  
  253.     Magazie(string numeMagazie, int numarRafturi, int* distanteRafturi) :AnConstructie(AnConstructie)
  254.     {
  255.         this->numeMagazie = numeMagazie;
  256.         if (this->numarRafturi > 0 && distanteRafturi != NULL) {
  257.             this->numarRafturi = numarRafturi;
  258.             this->distanteRafturi = new int[this->numarRafturi];
  259.             for (int i = 0; i < this->numarRafturi; i++)
  260.                 this->distanteRafturi[i] = distanteRafturi[i];
  261.         }
  262.         else
  263.         {
  264.             this->numarRafturi = 0;
  265.             this->distanteRafturi = nullptr;
  266.         }
  267.         nrMagazii++;
  268.     }
  269.  
  270.     Magazie(int numarRafturi, int* distanteRafturi) :AnConstructie(AnConstructie)
  271.     {
  272.  
  273.         if (this->numarRafturi > 0 && distanteRafturi != NULL) {
  274.             this->numarRafturi = numarRafturi;
  275.             this->distanteRafturi = new int[this->numarRafturi];
  276.             for (int i = 0; i < this->numarRafturi; i++)
  277.                 this->distanteRafturi[i] = distanteRafturi[i];
  278.         }
  279.         else
  280.         {
  281.             this->numarRafturi = 0;
  282.             this->distanteRafturi = nullptr;
  283.         }
  284.         nrMagazii;
  285.     }
  286.     Magazie(const Magazie& magazie) :AnConstructie(magazie.AnConstructie)
  287.     {
  288.         this->numeMagazie = magazie.numeMagazie;
  289.         this->numarRafturi = magazie.numarRafturi;
  290.         this->distanteRafturi = new int[magazie.numarRafturi];
  291.         for (i = 0; i < magazie.numarRafturi; i++)
  292.             this->distanteRafturi[i] = magazie.distanteRafturi[i];
  293.     }
  294.     Magazie& operator =(const Magazie& magazie) {
  295.         if (this != &magazie) {
  296.             if (this->distanteRafturi != NULL)
  297.                 this->numeMagazie = magazie.numeMagazie;
  298.             this->numarRafturi = magazie.numarRafturi;
  299.             this->distanteRafturi = new int[magazie.numarRafturi];
  300.             for (int i = 0; i < magazie.numarRafturi; i++)
  301.                 this->distanteRafturi[i] = magazie.distanteRafturi[i];
  302.         }
  303.         return *this;
  304.     }
  305.     string getnumeMagazie() {
  306.         return this->numeMagazie;
  307.     }
  308.     const int getAnConstructie()const {
  309.         return this->AnConstructie;
  310.     }
  311.     int getnumarRafturi()const {
  312.         return this->numarRafturi;
  313.     }
  314.     int* getdistanteRafturi() {
  315.         return this->distanteRafturi;
  316.     }
  317.     int getdistanteRaft(int pozitie)const {
  318.         if (pozitie >= 0 && pozitie < this->numarRafturi) {
  319.             return this->distanteRafturi[pozitie];
  320.         }
  321.     }
  322.     void setnumeMagazie(string getnumeMagazie)
  323.     {
  324.         this->numeMagazie = numeMagazie;
  325.  
  326.     }
  327.     void setnumarRafturi(int numarRafturi)
  328.     {
  329.         this->numarRafturi = numarRafturi;
  330.     }
  331.     void setdistanteRafturi(int* distanteRafturi)
  332.     {
  333.         this->distanteRafturi = distanteRafturi;
  334.     }
  335.     ~Magazie()
  336.     {
  337.         if (this->distanteRafturi != NULL)
  338.             delete[] this->distanteRafturi;
  339.     }
  340.     friend ostream& operator<<(ostream& out, const Magazie& magazie)
  341.     {
  342.         out << magazie.numeMagazie << " " << magazie.numarRafturi << " " << magazie.distanteRafturi << " " << endl;
  343.         for (int i = 0; i < magazie.numarRafturi; i++)
  344.             out << magazie.distanteRafturi[i] << " ";
  345.         return out;
  346.     }
  347.     friend istream& operator >>(istream& in, Magazie& magazie) {
  348.         if (magazie.distanteRafturi != NULL)
  349.             delete[] magazie.distanteRafturi;
  350.         cout << "Nume :";
  351.         in >> magazie.numeMagazie;
  352.         cout << "Numar Rafturi:";
  353.         in >> magazie.numarRafturi;
  354.         cout << "Distante Rafturi:";
  355.         in >> magazie.distanteRafturi;
  356.         magazie.distanteRafturi = new int[magazie.numarRafturi];
  357.         cout << "distanteRafturi:";
  358.         for (int i = 0; i < magazie.numarRafturi; i++);
  359.         in >> magazie.distanteRafturi;
  360.         return in;
  361.     }
  362.     bool operator<(Magazie Magazia1) {
  363.         return this->numarRafturi < Magazia1.numarRafturi;
  364.     }
  365.     bool operator==(const Magazie& Magazia1) {
  366.         if (numarRafturi == Magazia1.numarRafturi && numeMagazie == Magazia1.numeMagazie)
  367.         {
  368.             return true;
  369.         }
  370.         return false;
  371.     }
  372.     Magazie operator!() {
  373.         Magazie aux = *this;
  374.         aux.numarRafturi = !aux.numarRafturi;
  375.         return aux;
  376.     }
  377.     Magazie operator+(const Magazie& Magazia1)
  378.     {
  379.         Magazie aux = *this;
  380.         if (aux.distanteRafturi != NULL)
  381.         {
  382.             delete[]aux.distanteRafturi;
  383.         }
  384.         aux.distanteRafturi = new int[this->numarRafturi + Magazia1.numarRafturi];
  385.         aux.numarRafturi = this->numarRafturi + Magazia1.numarRafturi;
  386.         for (int i = 0; i < this->numarRafturi; i++) {
  387.             aux.distanteRafturi[i] = this->distanteRafturi[i];
  388.         }
  389.         return aux;
  390.  
  391.     }
  392.     int operator[](int pozitie) {
  393.         if (pozitie >= 0 && pozitie < this->numarRafturi) {
  394.             return this->distanteRafturi[pozitie];
  395.         }
  396.         else
  397.             throw exception("Distanta nu este valida");
  398.     }
  399.     Magazie operator++() { //forma prefixata
  400.         for (int i = 0; i < this->numarRafturi; i++) {
  401.             this->distanteRafturi[i]++;
  402.         }
  403.         return *this;
  404.     }
  405.     Magazie operator++(int) { //forma postfixata
  406.         Magazie aux = *this;
  407.         for (int i = 0; i < this->numarRafturi; i++) {
  408.             this->distanteRafturi[i]++;
  409.         }
  410.         return aux;
  411.  
  412.     }
  413.     explicit operator int() {
  414.         int suma = 0;
  415.         for (int i = 0; i < numarRafturi; i++)
  416.             suma = suma + distanteRafturi[i];
  417.         return suma;
  418.     }
  419.     /*void scriereInFisierBinar(fstream& s) {
  420.         int lungime = numeMagazie.length();
  421.         s.write((char*)&lungime, sizeof(lungime));
  422.         s.write((char*)&this->numeMagazie.c_str(), lungime * sizeof(char));
  423.         s.write((char*)&this->numarRafturi, sizeof(this->numarRafturi));
  424.         for (int i = 0; i < numarRafturi; i++)
  425.         {
  426.             s.write((char*)&this->distanteRafturi[i], sizeof(distanteRafturi[i]));
  427.         }
  428.     }
  429.     void citesteDinFisierBinar(fstream& c) {
  430.         int lungime = 0;
  431.         c.read((char*)&lungime, sizeof(lungime));
  432.         numeMagazie.resize(lungime);
  433.         c.read((char*)numeMagazie.c_str(), lungime);
  434.         c.read((char*)&numarRafturi, sizeof(numarRafturi));
  435.         if (this->distanteRafturi != NULL)
  436.             delete[]this->distanteRafturi;
  437.         this->distanteRafturi = new float[numarRafturi];
  438.         for (int i = 0; i < numarRafturi; i++)
  439.             c.read((char*)&distanteRafturi[i], sizeof(distanteRafturi[i]));
  440.  
  441.     }*/
  442.  
  443.  
  444.  
  445.  
  446.  
  447.  
  448. };
  449. int Magazie::nrMagazii = 0;
  450.  
  451. class Bucatarie {
  452. private:
  453.     int nrBucatari;
  454.     string numeBucatarie;
  455.     float* dimensiune;
  456.  
  457.     const int anConstructie;
  458.     static int nrBucatarii;
  459. public:
  460.     Bucatarie() :anConstructie(2020) {
  461.         numeBucatarie = "Bucataria Principala";
  462.         nrBucatari = 6;
  463.         dimensiune = new float[nrBucatari];
  464.         for (int i = 0; i < nrBucatari; i++)
  465.         {
  466.             dimensiune[i] = 5;
  467.         }
  468.         nrBucatarii++;
  469.     }
  470.     Bucatarie(string numeBucatarie, float* dimensiune, int nrBucatariProfesionisti, int anConstructieBucatarie) :anConstructie(anConstructieBucatarie) {
  471.         this->numeBucatarie = numeBucatarie;
  472.         nrBucatari = nrBucatariProfesionisti;
  473.         this->dimensiune = new float[nrBucatariProfesionisti];
  474.         for (int i = 0; i < nrBucatari; i++) {
  475.             this->dimensiune[i] = dimensiune[i];
  476.         }
  477.         nrBucatarii++;
  478.     }
  479.     Bucatarie(string numeBucatarie, int nrBucatari, int anConstructie) :anConstructie(anConstructie) {
  480.         this->numeBucatarie = numeBucatarie;
  481.         this->nrBucatari = nrBucatari;
  482.     }
  483.     Bucatarie(const Bucatarie& Kitchen) :anConstructie(Kitchen.anConstructie) {
  484.         nrBucatarii++;
  485.         this->numeBucatarie = Kitchen.numeBucatarie;
  486.         this->nrBucatari = Kitchen.nrBucatari;
  487.         if (Kitchen.dimensiune != NULL && Kitchen.nrBucatari > 0)
  488.         {
  489.             this->dimensiune = new float[nrBucatari];
  490.             for (int i = 0; i < nrBucatari; i++)
  491.                 this->dimensiune[i] = Kitchen.dimensiune[i];
  492.         }
  493.         else
  494.         {
  495.             this->dimensiune = NULL;
  496.         }
  497.     }
  498.     const Bucatarie& operator=(const Bucatarie& Kitchen)
  499.     {
  500.         if (this != &Kitchen)
  501.         {
  502.             this->numeBucatarie = Kitchen.numeBucatarie;
  503.             this->nrBucatari = Kitchen.nrBucatari;
  504.             if (this->dimensiune != NULL)
  505.                 delete[]this->dimensiune;
  506.             if (Kitchen.dimensiune != NULL && Kitchen.nrBucatari > 0)
  507.             {
  508.                 dimensiune = new float[Kitchen.nrBucatari];
  509.                 for (int i = 0; i < nrBucatari; i++)
  510.                     this->dimensiune[i] = Kitchen.dimensiune[i];
  511.             }
  512.             else
  513.                 this->dimensiune = NULL;
  514.             return *this;
  515.         }
  516.     }
  517.     string getNumeBucatarie()const {
  518.         return this->numeBucatarie;
  519.     }
  520.     const int getAnConstructie()const {
  521.         return this->anConstructie;
  522.     }
  523.     int getNrBucatari()const {
  524.         return this->nrBucatari;
  525.     }
  526.     float* getDimensiune()const {
  527.         return dimensiune;
  528.     }
  529.     float getDimens(int pozitie)const {
  530.         if (pozitie >= 0 && pozitie < this->nrBucatari) {
  531.             return this->dimensiune[pozitie];
  532.         }
  533.     }
  534.     void setnumeBucatarie(string numeBucatarie) {
  535.         if (numeBucatarie.length() >= 5) {
  536.             this->numeBucatarie = numeBucatarie;
  537.         }
  538.     }
  539.     void setDimensiuneBucatarie(float* dimensiune, int nrBucatari) {
  540.         if (nrBucatari > 0 && dimensiune != NULL)
  541.         {
  542.             if (this->dimensiune != NULL)
  543.             {
  544.                 delete[]this->dimensiune;
  545.             }
  546.             this->dimensiune = new float[nrBucatari];
  547.             for (int i = 0; i < nrBucatari; i++)
  548.             {
  549.                 if (dimensiune[i] > 0)
  550.                     this->dimensiune[i] = dimensiune[i];
  551.                 else
  552.                     this->dimensiune[i] = 0.3f;
  553.             }
  554.             this->nrBucatari = nrBucatari;
  555.         }
  556.     }
  557.     static int getNrBucatarii()
  558.     {
  559.         return nrBucatarii;
  560.     }
  561.  
  562.     ~Bucatarie() {
  563.         if (this->dimensiune != NULL)
  564.             delete[]dimensiune;
  565.     }
  566.     friend ofstream& operator<<(ofstream& out, const Bucatarie& b) {
  567.         out << b.numeBucatarie << " ";
  568.         out << b.nrBucatari << " ";
  569.         for (int i = 0; i < b.nrBucatari; i++)
  570.         {
  571.             out << b.dimensiune[i] << " ";
  572.         }
  573.         out << b.anConstructie << endl;
  574.         return out;
  575.     }
  576.     friend ifstream& operator>>(ifstream& f, Bucatarie& b) {
  577.         f >> b.numeBucatarie;
  578.         f >> b.nrBucatari;
  579.         if (b.dimensiune != NULL) {
  580.             delete[]b.dimensiune;
  581.         }
  582.         b.dimensiune = new float[b.nrBucatari];
  583.         for (int i = 0; i < b.nrBucatari; i++) {
  584.             f >> b.dimensiune[i];
  585.             int aux;
  586.             f >> aux;
  587.             return f;
  588.         }
  589.     }
  590.     bool operator >= (const Bucatarie& Kitchen) {
  591.         return this->nrBucatari >= Kitchen.nrBucatari;
  592.     }
  593.     bool operator==(const Bucatarie& Kitchen) {
  594.         if (nrBucatari = Kitchen.nrBucatari && numeBucatarie == Kitchen.numeBucatarie)
  595.         {
  596.             return true;
  597.         }
  598.         return false;
  599.     }
  600.     Bucatarie operator!() {
  601.         Bucatarie aux = *this;
  602.         aux.nrBucatari = !aux.nrBucatari;
  603.         return aux;
  604.     }
  605.     Bucatarie operator+(const Bucatarie& Kitchen) {
  606.         Bucatarie aux = *this;
  607.         if (aux.dimensiune != NULL) {
  608.             delete[]aux.dimensiune;
  609.         }
  610.         aux.dimensiune = new float[this->nrBucatari + Kitchen.nrBucatari];
  611.         aux.nrBucatari = this->nrBucatari + Kitchen.nrBucatari;
  612.         for (int i = 0; i < this->nrBucatari; i++) {
  613.             aux.dimensiune[i] = this->dimensiune[i];
  614.         }
  615.         for (int i = 0; i < Kitchen.nrBucatari; i++) {
  616.             aux.dimensiune[i + this->nrBucatari] = Kitchen.dimensiune[i];
  617.         }
  618.         return aux;
  619.     }
  620.     int operator[](int pozitie) {
  621.         if (pozitie >= 0 && pozitie < this->nrBucatari) {
  622.             return this->dimensiune[pozitie];
  623.         }
  624.         else
  625.             throw exception("Dimensiunea nu este valida");
  626.     }
  627.     Bucatarie operator++() { //forma prefixata
  628.         for (int i = 0; i < this->nrBucatari; i++) {
  629.             this->dimensiune[i]++;
  630.         }
  631.         return *this;
  632.     }
  633.     Bucatarie operator++(int) {//forma postfixata
  634.         Bucatarie aux = *this;
  635.         for (int i = 0; i < this->nrBucatari; i++)
  636.         {
  637.             this->dimensiune[i]++;
  638.         }
  639.         return aux;
  640.     }
  641.  
  642.     explicit operator float() {
  643.         float suma = 0;
  644.         for (int i = 0; i < nrBucatari; i++)
  645.             suma = suma + dimensiune[i];
  646.         return suma;
  647.     }
  648.     //void scriereInFisierBinar(fstream& s) {
  649.     //  int lungime = numeBucatarie.length();
  650.     //  s.write((char*)&lungime, sizeof(lungime));
  651.     //  s.write((char*)&this->numeBucatarie.c_str(), lungime * sizeof(char));
  652.     //  s.write((char*)&this->dimensiune, sizeof(this->nrBucatari));
  653.     //  for (int i = 0; i < nrBucatari; i++)
  654.     //  {
  655.     //      s.write((char*)&this->dimensiune[i], sizeof(dimensiune[i]));
  656.     //  }
  657.     //}
  658.     //void citesteDinFisierBinar(fstream& c) {
  659.     //  int lungime = 0;
  660.     //  c.read((char*)&lungime, sizeof(lungime));
  661.     //  numeBucatarie.resize(lungime);
  662.     //  c.read((char*)numeBucatarie.c_str(), lungime);
  663.     //  c.read((char*)&nrBucatari, sizeof(nrBucatari));
  664.     //  if (this->dimensiune != NULL)
  665.     //      delete[]this->dimensiune;
  666.     //  this->dimensiune = new float[nrBucatari];
  667.     //  for (int i = 0; i < nrBucatari; i++)
  668.     //      c.read((char*)&dimensiune[i], sizeof(dimensiune[i]));
  669.  
  670.     //}
  671. };
  672. int Bucatarie::nrBucatarii = 0;
  673.  
  674. class Meniu
  675. {
  676. private:
  677.     string specific;
  678.     char* material;
  679.     int  nrPagini;
  680.     int nrPreparate;
  681.     const int anFabricatie;
  682.     static int nrMeniuri;
  683. public:
  684.     Meniu() :anFabricatie(2020) {
  685.         specific = "Traditional";
  686.         material = new char[strlen("Plastic") + 1];
  687.         strcpy(material, "Plastic");
  688.         nrPagini = 20;
  689.         nrPreparate = 20;
  690.         nrMeniuri++;
  691.     }
  692.     Meniu(string specific, int nrPaginiMeniu, int nrPreparate) :anFabricatie(anFabricatie)
  693.     {
  694.         this->specific = specific;
  695.         this->nrPagini = nrPaginiMeniu;
  696.         this->nrPreparate = nrPreparate;
  697.         material = new char[strlen(material) + 1];
  698.         strcpy(this->material, material);
  699.         nrMeniuri++;
  700.     }
  701.     Meniu(string specific, char* material, int nrPaginiMeniu) :anFabricatie(anFabricatie)
  702.     {
  703.         this->specific = specific;
  704.         material = new char[strlen(material) + 1];
  705.         strcpy(this->material, material);
  706.         this->nrPagini = nrPaginiMeniu;
  707.     }
  708.     Meniu(const Meniu& meniu) :anFabricatie(meniu.anFabricatie) {
  709.         this->specific = meniu.specific;
  710.         this->material = new char[strlen(meniu.material) + 1];
  711.         strcpy(this->material, meniu.material);
  712.         this->nrPagini = meniu.nrPagini;
  713.         this->nrPreparate = meniu.nrPreparate;
  714.     }
  715.     Meniu& operator =(const Meniu& meniu) {
  716.         delete[]material;
  717.         if (this != &meniu) {
  718.             this->specific = meniu.specific;
  719.             this->material = new char[strlen(meniu.material) + 1];
  720.             strcpy(this->material, meniu.material);
  721.             this->nrPagini = meniu.nrPagini;
  722.             this->nrPreparate = meniu.nrPreparate;
  723.         }
  724.         return *this;
  725.     }
  726.     string getspecific() {
  727.         return this->specific;
  728.     }
  729.     int getanFabricatie()const {
  730.         return this->anFabricatie;
  731.     }
  732.     char* getmaterial() {
  733.         return this->material;
  734.     }
  735.     int getnrPagini() {
  736.         return this->nrPagini;
  737.     }
  738.     int getnrPreparate() {
  739.         return this->nrPreparate;
  740.     }
  741.     void setspecific(string specific) {
  742.         this->specific = specific;
  743.     }
  744.     void setmaterial(char* material) {
  745.         this->material = material;
  746.     }
  747.     void setnrPagini(int nrPagini) {
  748.         this->nrPagini = nrPagini;
  749.     }
  750.     void setnrPreparate(int nrPreparate) {
  751.         this->nrPreparate = nrPreparate;
  752.     }
  753.     static int getNrMeniuri() {
  754.         return nrMeniuri;
  755.     }
  756.  
  757.     ~Meniu() {
  758.         if (this->material != NULL)
  759.             delete[] this->material;
  760.     }
  761.     friend ostream& operator<<(ostream& out, const Meniu& meniu)
  762.     {
  763.         out << meniu.specific << " " << meniu.material << " " << meniu.nrPagini << " " << meniu.nrPreparate << " " << endl;
  764.         return out;
  765.     }
  766.     friend istream& operator >>(istream& in, Meniu& meniu) {
  767.         delete[] meniu.material;
  768.         cout << "Specific :";
  769.         in >> meniu.specific;
  770.         cout << "Numar Pagini:";
  771.         in >> meniu.nrPagini;
  772.         cout << "Numar preparate:";
  773.         in >> meniu.nrPreparate;
  774.         meniu.material = new char[strlen(meniu.material) + 1];
  775.         cout << "Material:";
  776.         in >> meniu.material;
  777.         return in;
  778.     }
  779.     bool operator <=(const Meniu& Delicios) {
  780.         return this->nrPagini >= Delicios.nrPagini;
  781.     }
  782.     Meniu operator! () {
  783.         Meniu aux = *this;
  784.         aux.nrPagini = !aux.nrPagini;
  785.         return aux;
  786.     }
  787.     bool operator==(const Meniu& Delicios) {
  788.         if (nrPagini = Delicios.nrPagini && nrPreparate == Delicios.nrPreparate)
  789.         {
  790.             return true;
  791.         }
  792.         return false;
  793.     }
  794.     Meniu operator+(const Meniu& Delicios) {
  795.         Meniu aux = *this;
  796.         aux.nrPagini = this->nrPagini + Delicios.nrPagini;
  797.         aux.nrPreparate = this->nrPreparate + Delicios.nrPreparate;
  798.         return aux;
  799.     }
  800.     int operator[](int pozitie) {
  801.         if (pozitie >= 0 && pozitie < this->nrPagini) {
  802.             return this->material[pozitie]; //in loc de material nr preparate
  803.         }
  804.         else
  805.             throw exception("Nu este valid");
  806.     }
  807.     Meniu operator++() { //forma prefixata
  808.         for (int i = 0; i < this->nrPagini; i++) {
  809.             this->nrPreparate[i]++;
  810.         }
  811.         return *this;
  812.     }
  813.     Meniu operator++(int) { //forma postfixata
  814.         Meniu aux = *this;
  815.         for (int i = 0; i < this->nrPagini; i++) {
  816.             this->nrPreparate[i]++;
  817.         }
  818.         return aux;
  819.     }
  820.     //operator cast
  821.  
  822.     //void scriereInFisierBinar(fstream& s) {
  823.     //  int lungime = specific.length();
  824.     //  s.write((char*)&lungime, sizeof(lungime));
  825.     //  s.write((char*)&this->specific.c_str(), lungime * sizeof(char));
  826.     //  s.write((char*)&this->nrPagini, sizeof(this->nrPagini));
  827.     //  s.write((char*)&this->nrPreparate, sizeof(this->nrPreparate));
  828.     // 
  829.     //      s.write((char*)&this->material[i], sizeof(material[i]));
  830.     // 
  831.     //}
  832.     //void citesteDinFisierBinar(fstream& c) {
  833.     //  int lungime = 0;
  834.     //  c.read((char*)&lungime, sizeof(lungime));
  835.     //  specific.resize(lungime);
  836.     //  c.read((char*)specific.c_str(), lungime);
  837.     //  c.read((char*)&nrPagini, sizeof(nrPagini));
  838.     //  c.read((char*)&nrPreparate, sizeof(nrPreparate));
  839.     //  if (this->material != NULL)
  840.     //      delete[]this->material;
  841.     //  this->material = new char[strlen(material) + 1];
  842.     //  strcpy(this->material, material);
  843.     // 
  844.  
  845.     //}
  846. };
  847. int Meniu::nrMeniuri = 0;
  848.  
  849. class Terasa {
  850. private:
  851.     string forma;
  852.     float* capacitate;
  853.     int nrMese;
  854.     const int anConstructie;
  855.     static int nrTerase;
  856. public:
  857.     Terasa() :anConstructie(2020) {
  858.         forma = "patrat";
  859.         nrMese = 10;
  860.         capacitate = new float[nrMese];
  861.         for (int i = 0; i < nrMese; i++)
  862.         {
  863.             capacitate[i] = 6;
  864.         }
  865.         nrTerase++;
  866.     }
  867.     Terasa(string forma, float* capacitate, int nrMeseTerasa, int anConstructieTerasa) : anConstructie(anConstructieTerasa) {
  868.         this->forma = forma;
  869.         nrMese = nrMeseTerasa;
  870.         this->capacitate = new float[nrMeseTerasa];
  871.         for (int i = 0; i < nrMese; i++)
  872.         {
  873.             this->capacitate[i] = capacitate[i];
  874.         }
  875.         nrTerase++;
  876.     }
  877.     Terasa(string forma, int nrMese, int anConstructie) :anConstructie(anConstructie) {
  878.         this->forma = forma;
  879.         this->nrMese = nrMese;
  880.  
  881.     }
  882.     Terasa(const Terasa& TerasaRestaurant) :anConstructie(TerasaRestaurant.anConstructie) {
  883.         nrTerase++;
  884.         this->forma = TerasaRestaurant.forma;
  885.         this->nrMese = TerasaRestaurant.nrMese;
  886.         if (TerasaRestaurant.capacitate != NULL && TerasaRestaurant.nrMese > 0)
  887.         {
  888.             this->capacitate = new float[nrMese];
  889.             for (int i = 0; i < nrMese; i++)
  890.                 this->capacitate[i] = TerasaRestaurant.capacitate[i];
  891.         }
  892.         else
  893.         {
  894.             this->capacitate = NULL;
  895.         }
  896.     }
  897.     const Terasa& operator=(const Terasa& TerasaRestaurant) {
  898.         if (this != &TerasaRestaurant) {
  899.             this->forma = TerasaRestaurant.forma;
  900.             this->nrMese = TerasaRestaurant.nrMese;
  901.             if (this->capacitate != NULL)
  902.                 delete[]this->capacitate;
  903.             if (TerasaRestaurant.capacitate != NULL && TerasaRestaurant.nrMese > 0)
  904.             {
  905.                 capacitate = new float[TerasaRestaurant.nrMese];
  906.                 for (int i = 0; i < nrMese; i++)
  907.                     this->capacitate[i] = TerasaRestaurant.capacitate[i];
  908.             }
  909.             else
  910.                 this->capacitate = NULL;
  911.             return *this;
  912.         }
  913.     }
  914.     string getForma()const {
  915.         return this->forma;
  916.     }
  917.     const int getAnConstructie()const {
  918.         return this->anConstructie;
  919.     }
  920.     int getNrMese()const {
  921.         return this->nrMese;
  922.     }
  923.     float* getCapacitate()const {
  924.         return capacitate;
  925.     }
  926.     float getCapacitatee(int pozitie)const {
  927.         if (pozitie >= 0 && pozitie < this->nrMese) {
  928.             return this->capacitate[pozitie];
  929.         }
  930.     }
  931.     void setForma(string forma) {
  932.         if (forma.length() >= 4) {
  933.             this->forma = forma;
  934.         }
  935.     }
  936.     void setCapacitateTerasa(float* capacitate, int nrMese) {
  937.         if (nrMese > 0 && capacitate != NULL)
  938.         {
  939.             if (this->capacitate != NULL)
  940.             {
  941.                 delete[]this->capacitate;
  942.             }
  943.             this->capacitate = new float[nrMese];
  944.             for (int i = 0; i < nrMese; i++)
  945.             {
  946.                 if (capacitate[i] > 0)
  947.                     this->capacitate[i] = capacitate[i];
  948.                 else
  949.                     this->capacitate[i] = 0.2f;
  950.             }
  951.             this->nrMese = nrMese;
  952.         }
  953.     }
  954.     static int getNrTerase()
  955.     {
  956.         return nrTerase;
  957.     }
  958.  
  959.     ~Terasa() {
  960.         if (this->capacitate != NULL)
  961.             delete[]capacitate;
  962.     }
  963.     friend ofstream& operator<< (ofstream& out, const Terasa& t) {
  964.         out << t.forma << " ";
  965.         out << t.nrMese << " ";
  966.         for (int i = 0; i < t.nrMese; i++)
  967.         {
  968.             out << t.capacitate[i] << " ";
  969.  
  970.         }
  971.         out << t.anConstructie << endl;
  972.         return out;
  973.     }
  974.     friend ifstream& operator>>(ifstream& g, Terasa& t) {
  975.         g >> t.forma;
  976.         g >> t.nrMese;
  977.         if (t.nrMese != NULL) {
  978.             delete[]t.capacitate;
  979.         }
  980.         t.capacitate = new float[t.nrMese];
  981.         for (int i = 0; i < t.nrMese; i++) {
  982.             g >> t.capacitate[i];
  983.         }
  984.         int aux;
  985.         g >> aux;
  986.         return g;
  987.  
  988.     }
  989.     bool operator >=(const Terasa& TerasaRestaurant) {
  990.         return this->nrMese >= TerasaRestaurant.nrMese;
  991.     }
  992.     bool operator==(const Terasa& TerasaRestaurant) {
  993.         if (nrMese = TerasaRestaurant.nrMese && forma == TerasaRestaurant.forma)
  994.         {
  995.             return true;
  996.         }
  997.         return false;
  998.     }
  999.     Terasa operator ! () {
  1000.         Terasa aux = *this;
  1001.         aux.nrMese = !aux.nrMese;
  1002.         return aux;
  1003.     }
  1004.     Terasa operator+(const Terasa& TerasaRestaurant) {
  1005.         Terasa aux = *this;
  1006.         if (aux.capacitate != NULL) {
  1007.             delete[]aux.capacitate;
  1008.         }
  1009.         aux.capacitate = new float[this->nrMese + TerasaRestaurant.nrMese];
  1010.         aux.nrMese = this->nrMese + TerasaRestaurant.nrMese;
  1011.         for (int i = 0; i < this->nrMese; i++) {
  1012.             aux.capacitate[i] = this->capacitate[i];
  1013.         }
  1014.         for (int i = 0; i < TerasaRestaurant.nrMese; i++) {
  1015.             aux.capacitate[i + this->nrMese] = TerasaRestaurant.capacitate[i];
  1016.         }
  1017.         return aux;
  1018.     }
  1019.     int operator[](int pozitie) {
  1020.         if (pozitie >= 0 && pozitie < this->nrMese) {
  1021.             return this->capacitate[pozitie];
  1022.         }
  1023.         else
  1024.             throw exception("Capacitatea nu este valida");
  1025.     }
  1026.     Terasa operator++() { //forma prefixata
  1027.         for (int i = 0; i < this->nrMese; i++) {
  1028.             this->capacitate[i]++;
  1029.         }
  1030.         return *this;
  1031.     }
  1032.     Terasa operator++(int) {//forma postfixata
  1033.         Terasa aux = *this;
  1034.         for (int i = 0; i < this->nrMese; i++)
  1035.         {
  1036.             this->capacitate[i]++;
  1037.         }
  1038.         return aux;
  1039.     }
  1040.  
  1041.     explicit operator float() {
  1042.         float suma = 0;
  1043.         for (int i = 0; i < nrMese; i++)
  1044.             suma = suma + capacitate[i];
  1045.         return suma;
  1046.     }
  1047.     void scriereInFisierBinar(fstream& s) {
  1048.         int lungime = forma.length();
  1049.         s.write((char*)&lungime, sizeof(lungime));
  1050.         s.write((char*)&this->forma.c_str(), lungime * sizeof(char));
  1051.         s.write((char*)&this->nrMese, sizeof(this->nrMese));
  1052.         for (int i = 0; i < nrMese; i++)
  1053.         {
  1054.             s.write((char*)&this->capacitate[i], sizeof(capacitate[i]));
  1055.         }
  1056.     }
  1057.     void citesteDinFisierBinar(fstream& c) {
  1058.         int lungime = 0;
  1059.         c.read((char*)&lungime, sizeof(lungime));
  1060.         forma.resize(lungime);
  1061.         c.read((char*)forma.c_str(), lungime);
  1062.         c.read((char*)&nrMese, sizeof(nrMese));
  1063.         if (this->capacitate != NULL)
  1064.             delete[]this->capacitate;
  1065.         this->capacitate = new float[nrMese];
  1066.         for (int i = 0; i < nrMese; i++)
  1067.             c.read((char*)&capacitate[i], sizeof(capacitate[i]));
  1068.  
  1069.     }
  1070. };
  1071. int Terasa::nrTerase = 0;
  1072.  
  1073. void  main() {
  1074.     Bar barcentral("centrala", 3, 2020);
  1075.     barcentral.afisare();
  1076.  
  1077.  
  1078.     /*Bar bar("centrala", 3, 2020)
  1079.         fstream f("fisier2022.bin", ios::out | ios::binary);
  1080.     bar.scriereInFisierBinar(f);
  1081.     f.close();
  1082.     Bar b;
  1083.     fstream f("fisier2022.bin", ios::out | ios::binary);
  1084.     c.citesteDinFisierBinar(f);
  1085.     cout << b;
  1086.     f.close()*/
  1087.  
  1088.         /*Magazie magazie(0,0)
  1089.         fstream f("fisier2022.bin", ios::out | ios::binary);
  1090.     magazie.scriereInFisierBinar(f);
  1091.     f.close();
  1092.     Magazie m;
  1093.     fstream f("fisier2022.bin", ios::out | ios::binary);
  1094.     c.citesteDinFisierBinar(f);
  1095.     cout << m;
  1096.     f.close()*/
  1097.     /*Bucatarie bucatarie("Bucatarie",30,2020)
  1098.         fstream f("fisier2022.bin", ios::out | ios::binary);
  1099.     bucatarie.scriereInFisierBinar(f);
  1100.     f.close();
  1101.     Bucatarie u;
  1102.     fstream f("fisier2022.bin", ios::out | ios::binary);
  1103.     c.citesteDinFisierBinar(f);
  1104.     cout << u;
  1105.     f.close()*/
  1106.     //Meniu meniu("italienesc",plastic,200)
  1107.     //  fstream f("fisier2022.bin", ios::out | ios::binary);
  1108.     //meniu.scriereInFisierBinar(f);
  1109.     //f.close();
  1110.     //Meniu m;
  1111.     //fstream f("fisier2022.bin", ios::out | ios::binary);
  1112.     //c.citesteDinFisierBinar(f);
  1113.     //cout <<m;
  1114.     //f.close()
  1115.     //Terasa terasa("rotunda",30,30,2020)
  1116.     //  fstream f("fisier2022.bin", ios::out | ios::binary);
  1117.     //terasa.scriereInFisierBinar(f);
  1118.     //f.close();
  1119.     //Terasa t;
  1120.     //fstream f("fisier2022.bin", ios::out | ios::binary);
  1121.     //c.citesteDinFisierBinar(f);
  1122.     //cout << t;
  1123.     //f.close()
  1124. }
RAW Paste Data