prometheus800

ООП: Пицерија

Apr 6th, 2022
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.52 KB | None | 0 0
  1. // Пицерија Problem 3 (1 / 1)
  2. #include <iostream>
  3. #include <cstring>
  4.  
  5. using namespace std;
  6.  
  7. class Pica {
  8. private:
  9.     char ime[15];
  10.     int cena;
  11.     char* sostojki;
  12.     int namaluvanje;
  13. public:
  14.  
  15.     Pica(const char* ime = "", int cena = 0, const char* sostojki = "", int namaluvanje = 0) {
  16.  
  17.         strcpy(this->ime, ime);
  18.         this->cena = cena;
  19.         this->sostojki = new char[strlen(sostojki) + 1];
  20.         strcpy(this->sostojki, sostojki);
  21.         this->namaluvanje = namaluvanje;
  22.     }
  23.  
  24.     Pica(const Pica& p) {
  25.         strcpy(ime, p.ime);
  26.         cena = p.cena;
  27.         sostojki = new char[strlen(p.sostojki) + 1];
  28.         strcpy(sostojki, p.sostojki);
  29.         namaluvanje = p.namaluvanje;
  30.     }
  31.  
  32.     ~Pica() {
  33.         delete[] sostojki;
  34.     }
  35.  
  36.     Pica& operator= (Pica& p) {
  37.         if (this != &p) {
  38.             strcpy(ime, p.ime);
  39.             cena = p.cena;
  40.             delete[] sostojki;
  41.             sostojki = new char[strlen(p.sostojki) + 1];
  42.             strcpy(sostojki, p.sostojki);
  43.             namaluvanje = p.namaluvanje;
  44.         }
  45.         return *this;
  46.     }
  47.     void pecati(){
  48.         cout << ime << " - " << sostojki << ", " << cena;
  49.     }
  50.  
  51.     bool istiSe(Pica p){
  52.         return (strcmp(sostojki, p.sostojki) == 0);
  53.     }
  54.     int getNamaluvanje(){
  55.         return namaluvanje;
  56.     }
  57.     int getCena(){
  58.         return cena;
  59.     }
  60. };
  61.  
  62. class Picerija {
  63.  
  64. private:
  65.     char ime[15];
  66.     Pica* pici;
  67.     int br;
  68.  
  69. public:
  70.     Picerija(const char *ime = ""){
  71.         strncpy(this->ime, ime, 14);
  72.         this->ime[14] = 0;
  73.         pici = NULL;
  74.         br = 0;
  75.     }
  76.     Picerija(const char *ime, Pica* pici, int br) {
  77.         strncpy(this->ime, ime, 14);
  78.         this->ime[14] = 0;
  79.         this->br = br;
  80.         this->pici = new Pica[br];
  81.         for (int i = 0; i < br; i++)
  82.             this->pici[i] = pici[i];
  83.     }
  84.  
  85.     Picerija(const Picerija &p) {
  86.         strcpy(ime, p.ime);
  87.         br = p.br;
  88.         pici = new Pica[br];
  89.         for (int i = 0; i < br; i++)
  90.             pici[i] = p.pici[i];
  91.     }
  92.     Picerija& operator= (const Picerija &p) {
  93.         if (this != &p) {
  94.             strcpy(ime, p.ime);
  95.             br = p.br;
  96.             delete[] pici;
  97.             pici = new Pica[br];
  98.             for (int i = 0; i < br; i++)
  99.                 pici[i] = p.pici[i];
  100.         }
  101.         return *this;
  102.     }
  103.     ~Picerija() {
  104.         delete[] pici;
  105.     }
  106.  
  107.     Picerija& operator+=(Pica &p){
  108.         bool imaIsta = false;
  109.         for (int i = 0; i < br; i++)
  110.             if (pici[i].istiSe(p))
  111.                 imaIsta = true;
  112.         if (!imaIsta)
  113.         {
  114.             Pica* tmp = new Pica[br + 1];
  115.             for (int i = 0; i < br; i++)
  116.                 tmp[i] = pici[i];
  117.             tmp[br++] = p;
  118.             delete[] pici;
  119.             pici = tmp;
  120.         }
  121.         return *this;
  122.     }
  123.  
  124.     void piciNaPromocija() {
  125.         for (int i = 0; i < br; i++){
  126.             if (pici[i].getNamaluvanje() != 0){
  127.                 pici[i].pecati();
  128.                 cout << " " << pici[i].getCena() * (1 - pici[i].getNamaluvanje() / 100.0) << endl;
  129.             }
  130.         }
  131.  
  132.     }
  133.     const char* getIme(){
  134.         return ime;
  135.     }
  136.     void setIme(const char* ime){
  137.         strncpy(this->ime, ime, 14);
  138.         this->ime[14] = 0;
  139.     }
  140.  
  141. };
  142. int main() {
  143.  
  144.     int n;
  145.     char ime[15];
  146.     cin >> ime;
  147.     cin >> n;
  148.  
  149.     Picerija p1(ime);
  150.     for (int i = 0; i < n; i++){
  151.         char imp[100];
  152.         cin.get();
  153.         cin.getline(imp, 100);
  154.         int cena;
  155.         cin >> cena;
  156.         char sostojki[100];
  157.         cin.get();
  158.         cin.getline(sostojki, 100);
  159.         int popust;
  160.         cin >> popust;
  161.         Pica p(imp, cena, sostojki, popust);
  162.         p1+=p;
  163.     }
  164.  
  165.     Picerija p2 = p1;
  166.     cin >> ime;
  167.     p2.setIme(ime);
  168.     char imp[100];
  169.     cin.get();
  170.     cin.getline(imp, 100);
  171.     int cena;
  172.     cin >> cena;
  173.     char sostojki[100];
  174.     cin.get();
  175.     cin.getline(sostojki, 100);
  176.     int popust;
  177.     cin >> popust;
  178.     Pica p(imp, cena, sostojki, popust);
  179.     p2+=p;
  180.  
  181.     cout << p1.getIme() << endl;
  182.     cout << "Pici na promocija:" << endl;
  183.     p1.piciNaPromocija();
  184.  
  185.     cout << p2.getIme() << endl;
  186.     cout << "Pici na promocija:" << endl;
  187.     p2.piciNaPromocija();
  188.  
  189.     return 0;
  190. }
  191.  
Add Comment
Please, Sign In to add comment