Advertisement
Guest User

ICream

a guest
May 24th, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.35 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4.  
  5. class IceCream{
  6. private:
  7.     char *name;
  8.     char ingredients[100];
  9.     float price;
  10.     int discount;
  11. public:
  12.     IceCream(){
  13.      name=new char[0];
  14.      strcpy(ingredients,"");
  15.      price=0;
  16.      discount=0;
  17.     }
  18.     IceCream(char *name1,char *ingredients1,float price1){
  19.     name=new char[strlen(name1)+1];
  20.      strcpy(name,name1);
  21.      strcpy(ingredients,ingredients1);
  22.      price=price1;
  23.      discount=0;
  24.     }
  25.       IceCream(char *name1,char *ingredients1,float price1,int discount1){
  26.     name=new char[strlen(name1)+1];
  27.      strcpy(name,name1);
  28.      strcpy(ingredients,ingredients1);
  29.      price=price1;
  30.      discount=discount1;
  31.     }
  32.  
  33.  
  34.     IceCream(const IceCream &ic){
  35.     name=new char[strlen(ic.name)+1];
  36.      strcpy(name,ic.name);
  37.      strcpy(ingredients,ic.ingredients);
  38.      price=ic.price;
  39.      discount=ic.discount;
  40.  
  41.     }
  42.  
  43.  IceCream operator =(const IceCream &ic){
  44.      if(this!=&ic){
  45.           name=new char[strlen(ic.name)+1];
  46.      strcpy(name,ic.name);
  47.      strcpy(ingredients,ic.ingredients);
  48.      price=ic.price;
  49.      discount=ic.discount;
  50.      }
  51.      return *this;
  52.     }
  53.  
  54.     ~IceCream(){
  55.     delete [] name;
  56.     }
  57.     float discountPrice(){
  58.     return price-price*discount/100.0;
  59.     }
  60.     friend ostream& operator <<(ostream &out, IceCream &ic){
  61.         if(ic.discount!=0){
  62.              out<<ic.name<<": "<<ic.ingredients<<" "<<ic.price<<" ("<<ic.discountPrice()<<")";
  63.         }else{
  64.          out<<ic.name<<": "<<ic.ingredients<<" "<<ic.price<<" ";
  65.         }
  66.      return out;
  67.     }
  68.     IceCream operator++(){
  69.     discount+=5;
  70.     return *this;
  71.     }
  72.     IceCream operator+(char *plusIme){
  73.       char novoIme[strlen(name)+strlen(plusIme)+3];
  74.        strncpy(novoIme,name,strlen(name));
  75.        novoIme[strlen(name)]=' ';
  76.         novoIme[strlen(name)+1]='+';
  77.          novoIme[strlen(name)+2]=' ';
  78.        int brojac=0;
  79.        for(int i=strlen(name)+3;i<(strlen(name)+strlen(plusIme))+3;i++){
  80.         novoIme[i]=plusIme[brojac++];
  81.        }
  82.        novoIme[strlen(novoIme)-2]='\0';
  83.        IceCream novSladoled(novoIme,ingredients,price+10,discount);
  84.        return novSladoled;
  85.     }
  86.  
  87.     void setDiscount(int discount1){
  88.      if(discount1<0 || discount1>100) throw discount1;
  89.      discount=discount1;
  90.     }
  91.     void setName(char *name1){
  92.         name=new char[strlen(name1)+1];
  93.      strcpy(name,name1);
  94.     }
  95.  
  96.  
  97. };
  98.  
  99. class IceCreamShop {
  100. private:
  101.     char name[50];
  102.     IceCream *iceCreams;
  103.     int brojac;
  104. public:
  105.     IceCreamShop(){
  106.      strcpy(name,"");
  107.      iceCreams=new IceCream[0];
  108.      brojac=0;
  109.     }
  110.     IceCreamShop(char *name1,IceCream *ic1,int brojac1){
  111.      iceCreams=new IceCream[brojac1];
  112.      brojac=brojac1;
  113.      for(int i=0;i<brojac1;i++){
  114.         iceCreams[i]=ic1[i];
  115.      }
  116.      strcpy(name,name1);
  117.  
  118.     }
  119.  
  120.      IceCreamShop(char *name1){
  121.      iceCreams=new IceCream[0];
  122.      brojac=0;
  123.      strcpy(name,name1);
  124.  
  125.     }
  126.   IceCreamShop(IceCreamShop &ics){
  127.      iceCreams=new IceCream[ics.brojac];
  128.      brojac=ics.brojac;
  129.      for(int i=0;i<ics.brojac;i++){
  130.         iceCreams[i]=ics.iceCreams[i];
  131.      }
  132.      strcpy(name,ics.name);
  133.  
  134.   }
  135.    IceCreamShop operator =(IceCreamShop &ics){
  136.        if(this!=&ics){
  137.            iceCreams=new IceCream[ics.brojac];
  138.      brojac=ics.brojac;
  139.      for(int i=0;i<ics.brojac;i++){
  140.         iceCreams[i]=ics.iceCreams[i];
  141.      }
  142.      strcpy(name,ics.name);
  143.        }
  144.   return *this;
  145.   }
  146.   ~IceCreamShop(){
  147.   delete [] iceCreams;
  148.   }
  149.   IceCreamShop operator +=(IceCream ic){
  150.     IceCream *tmp=new IceCream[brojac];
  151.     for(int i=0;i<brojac;i++){
  152.         tmp[i]=iceCreams[i];
  153.     }
  154.     delete [] iceCreams;
  155.     iceCreams=new IceCream[brojac+1];
  156.      for(int i=0;i<brojac;i++){
  157.         iceCreams[i]=tmp[i];
  158.     }
  159.     iceCreams[brojac]=ic;
  160.     delete [] tmp;
  161.     brojac++;
  162.     return *this;
  163.   }
  164.   friend ostream& operator<<(ostream &out, IceCreamShop &ics){
  165.    out<<ics.name<<endl;
  166.    for(int i=0;i<ics.brojac;i++){
  167.     out<<ics.iceCreams[i]<<endl;
  168.    }
  169.    return out;
  170.   }
  171. };
  172. // your code here
  173.  
  174. // DO NOT CHANGE THE MAIN FUNCTION, EXCEPT THE MARKED PART FOR HANDLING WITH THE EXCEPTION
  175.  
  176. int main() {
  177.     char name[100];
  178.     char ingr[100];
  179.     float price;
  180.     int discount;
  181.  
  182.     int testCase;
  183.  
  184.     cin >> testCase;
  185.     cin.get();
  186.     if(testCase == 1) {
  187.         cout << "====== TESTING IceCream CLASS ======" << endl;
  188.         cin.getline(name,100);
  189.         cin.getline(ingr,100);
  190.         cin >> price;
  191.         cin >> discount;
  192.         cout << "CONSTRUCTOR" << endl;
  193.         IceCream ic1(name, ingr, price);
  194.         ic1.setDiscount(discount);
  195.         cin.get();
  196.         cin.getline(name,100);
  197.         cin.getline(ingr,100);
  198.         cin >> price;
  199.         cin >> discount;
  200.         IceCream ic2(name, ingr, price);
  201.         ic2.setDiscount(discount);
  202.         cout << "OPERATOR <<" << endl;
  203.         cout << ic1 << endl;
  204.         cout << ic2 << endl;
  205.         cout << "OPERATOR ++" << endl;
  206.         ++ic1;
  207.         cout << ic1 << endl;
  208.         cout << "OPERATOR +" << endl;
  209.         IceCream ic3 = ic2 + "chocolate";
  210.         cout << ic3 << endl;
  211.     } else if(testCase == 2) {
  212.         cout << "====== TESTING IceCream CONSTRUCTORS ======" << endl;
  213.         cin.getline(name,100);
  214.         cin.getline(ingr,100);
  215.         cin >> price;
  216.         cout << "CONSTRUCTOR" << endl;
  217.         IceCream ic1(name, ingr, price);
  218.         cout << ic1 << endl;
  219.         cout << "COPY CONSTRUCTOR" << endl;
  220.         IceCream ic2(ic1);
  221.         cin.get();
  222.         cin.getline(name,100);
  223.         ic2.setName(name);
  224.         cout << ic1 << endl;
  225.         cout << ic2 << endl;
  226.         cout << "OPERATOR =" << endl;
  227.         ic1 = ic2;
  228.         cin.getline(name,100);
  229.         ic2.setName(name);
  230.         cout << ic1 << endl;
  231.         cout << ic2 << endl;
  232.         cout << "TESTING EXCEPTION" << endl;
  233.  
  234.         // your exception handling code
  235.         try{
  236.           cin >> discount;
  237.         ic1.setDiscount(discount);
  238.         }catch (int brojce){
  239.           cout<<"Invalid discount value: "<<brojce<<endl;
  240.         }
  241.  
  242.  
  243.  
  244.     } else if(testCase == 3) {
  245.         cout << "====== TESTING IceCreamShop ======" << endl;
  246.         char icsName[50];
  247.         cin.getline(icsName,100);
  248.         cout << "CONSTRUCTOR" << endl;
  249.         IceCreamShop ics(icsName);
  250.         int n;
  251.         cin >> n;
  252.         cout << "OPERATOR +=" << endl;
  253.         for(int i = 0; i < n; ++i) {
  254.             cin.get();
  255.             cin.getline(name,100);
  256.             cin.getline(ingr,100);
  257.             cin >> price;
  258.             IceCream ic(name, ingr, price);
  259.             ics += ic;
  260.         }
  261.         cout << ics;
  262.     } else if(testCase == 4) {
  263.         cout << "====== TESTING IceCreamShop CONSTRUCTORS ======" << endl;
  264.         char icsName[50];
  265.         cin.getline(icsName,100);
  266.         IceCreamShop ics(icsName);
  267.         int n;
  268.         cin >> n;
  269.         for(int i = 0; i < n; ++i) {
  270.             cin.get();
  271.             cin.getline(name,100);
  272.             cin.getline(ingr,100);
  273.             cin >> price;
  274.             IceCream ic(name, ingr, price);
  275.             ics += ic;
  276.         }
  277.         IceCream x("FINKI fruits", "strawberry ice cream, raspberry ice cream, blueberry ice cream", 60);
  278.         IceCreamShop icp = ics;
  279.         ics+=x;
  280.         cout << ics << endl;
  281.         cout << icp << endl;
  282.     }
  283.  
  284.  
  285.     return 0;
  286. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement