SlavkovB

Кафе OOP Exercises

Jun 14th, 2016
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.62 KB | None | 0 0
  1. Кафе Problem 4 (0 / 0)
  2. Да се дефинира класа Coffee во која се чуваат податоци за:
  3.  
  4. името (динамичка низа од знаци),
  5. цената (децимален број),
  6. попуст (цел број, изразен во проценти) иницијална вредност 0.
  7. За потребите на класата да се имплементираат:
  8.  
  9. соодветни конструктори и деструктори (погледнете ги повиците во main функцијата) (5 поени)
  10. оператор << за печатење на податоците за кафето во следниов формат:
  11.  
  12. име цена (цена на попуст)
  13.  
  14. – делот во цена на попуст се печати само ако кафето има попуст (вредноста на попуст да е поголема од нула) (5 поени)
  15.  
  16. оператор ++ во префикс нотација за зголемување на попустот за 5% (5 поени)
  17.  
  18. оператор + - две кафиња се собираат така што името на новото кафе се добива со спојување нивните имиња со знак - меѓу нив, има цена што е еднаква на збирот од цените на двете кафиња намален за 20%, а новиот попуст е еднаков на поголемиот од попустите на двете кафиња што се собираат. (10 поени)
  19. метод void setDiscount(int discount) со кој може да се промени вредноста на попустот. Ако вредноста е негативна или поголема од 100 треба да се фрли исклучок со кој ќе се пренесе навлидно внесената вредност и во соодветно назнчаениот дел во main функцијата справете се со овој исклучок и испечатете порака Nevalidna vrednost za popust: [vrednosta]. (10 поени)
  20. метод void setName(char* name) со кој се менува името на кафето. (5 поени)
  21. Да се креира класа CoffeeShop во која се чува:
  22.  
  23. име (низа од знаци макс. 50)
  24. динамички резервирано поле од објекти од класата Coffee
  25. број на кафиња (цел број).
  26. За оваа класа да се обезбедат:
  27.  
  28. соодветни конструктори и деструктори (погледнете ги повиците во main функцијата)
  29. оператор += за додавање нов објект од класата Coffee во полето (10 поени)
  30. оператор << за печатење на листа од сите кафиња во кафетеријата. Прво се печати името на кафетеријата, а потоа се печатат сите кафиња во нов ред. (5 поени)
  31. метод void setCoffee(int i, Coffee &c) кој го менува кафето на позиција i со кафето c (5 поени)
  32.  
  33. Sample input
  34. 1
  35. Latte
  36. 80
  37. 10
  38. Macchiato
  39. 60
  40. 20
  41.  
  42. Sample output
  43. ====== TESTING COFFEE CLASS ======
  44. CONSTRUCTOR
  45. OPERATOR <<
  46. Latte 80 (72)
  47. Macchiato 60 (48)
  48. OPERATOR ++
  49. Latte 80 (68)
  50. OPERATOR +
  51. Latte-Macchiato 112 (89.6)
  52.  
  53.  
  54. //CODE//
  55.  
  56.  
  57.  
  58. #include <iostream>
  59. #include <cstring>
  60. using namespace std;
  61.  
  62. class Coffee{
  63. protected:
  64.     char *ime;
  65.     float cena;
  66.     int popust;
  67. public:
  68. Coffee(const char *i = " ", float c = 0.0)
  69.  
  70. {
  71.     popust=0;
  72.     cena=c;
  73.     ime=new char[strlen(i)+1];
  74.     strcpy(ime,i);
  75.  
  76. }
  77. Coffee(const Coffee &c)
  78. {
  79.     popust=c.popust;
  80.     cena=c.cena;
  81.     ime=new char[strlen(c.ime)+1];
  82.     strcpy(ime,c.ime);
  83. }
  84.     Coffee& operator=(Coffee &c)
  85.     {
  86.       if(this!=&c)
  87.       {
  88.          cena=c.cena;
  89.           popust=c.popust;
  90.           ime=new char[strlen(c.ime)+1];
  91.           strcpy(ime,c.ime);
  92.       }
  93.         return *this;
  94.    
  95.    
  96.     }
  97.        
  98. Coffee &operator ++()
  99. {
  100.     popust+=5;
  101.     return *this;
  102. }
  103.     Coffee operator++(int){
  104.     Coffee c(*this);
  105.     c.popust+=5;
  106.     return c;}
  107. friend ostream &operator <<(ostream &o, Coffee &c)
  108. {
  109.     if(c.popust>0)
  110.  
  111.        o<<c.ime<<" "<<c.cena<<" ("<<c.cena*(1-(float)c.popust/100)<<")";
  112.       else o<<c.ime<<" "<<c.cena<<" ";
  113.      return o;
  114. }
  115. void setDiscount(int discount)
  116. {
  117.     try{
  118.     if(discount<0 || discount>100)
  119.  
  120.     throw 1;
  121.     popust=discount;
  122.     }
  123.         catch(int)
  124.         {
  125.             cout<<"Nevalidna vrednost za popust: "<<discount<<endl;
  126.         }
  127.  
  128.  
  129.     }
  130.     friend Coffee operator+ (Coffee &c1, Coffee &c2)
  131.         {
  132.         int i;
  133.                 Coffee tmp;
  134.         delete [] tmp.ime;
  135.         tmp.ime=new char[strlen(c1.ime)+strlen(c2.ime)+2];
  136.         int d=strlen(c1.ime)+strlen(c2.ime)+1;
  137.         for(i=0;i<strlen(c1.ime);i++)
  138.             tmp.ime[i]=c1.ime[i];
  139.         tmp.ime[i]='-';
  140.         int k=0;
  141.         for(i=strlen(c1.ime)+1;i<d;i++)
  142.                 tmp.ime[i]=c2.ime[k++];
  143.        
  144.         tmp.cena=(c1.cena + c2.cena)*0.8;
  145.        
  146.         tmp.popust=max(c1.popust,c2.popust);
  147.                 return tmp;
  148.         }
  149.    
  150.  
  151. void setName(char *name)
  152. {
  153.     delete [] ime;
  154.     ime=new char[strlen(name)+1];
  155.     strcpy(ime,name);
  156. }
  157. ~Coffee()
  158. {
  159.    
  160. }
  161.  
  162.  
  163. };
  164. class CoffeeShop:public Coffee{
  165. private:
  166.     char ime[50];
  167.     Coffee *cofi;
  168.     int broj;
  169. public:
  170.     CoffeeShop(){}
  171.     CoffeeShop(const char *im)
  172.     {
  173.         strcpy(ime,im);
  174.  
  175.         cofi=new Coffee[0];
  176.         broj=0;
  177.  
  178.  
  179.     }
  180.     CoffeeShop(const CoffeeShop &cs)
  181.     {
  182.         strcpy(ime,cs.ime);
  183.         broj=cs.broj;
  184.         cofi=new Coffee[cs.broj];
  185.         for(int i=0;i<broj;i++)
  186.             cofi[i]=cs.cofi[i];
  187.     }
  188.     CoffeeShop &operator=(const CoffeeShop &cs)
  189.     {
  190.         if(this!=&cs)
  191.         {
  192.             strcpy(ime,cs.ime);
  193.             broj=cs.broj;
  194.             delete[]cofi;
  195.             cofi=new Coffee[cs.broj];
  196.             for(int i=0;i<broj;i++)
  197.                 cofi[i]=cs.cofi[i];
  198.         }
  199.         return *this;
  200.     }
  201.     CoffeeShop&operator +=(Coffee &c)
  202.     {
  203.         Coffee *tmp=new Coffee[broj+1];
  204.         for(int i=0;i<broj;i++)
  205.         {
  206.             tmp[i]=cofi[i];
  207.         }
  208.         tmp[broj]=c;
  209.         broj++;
  210.         delete[] cofi;
  211.         cofi = tmp;
  212.         return *this;
  213.     }
  214.  
  215.     friend ostream &operator <<(ostream &o, CoffeeShop &c)
  216.     {
  217.         o<<c.ime<<endl;
  218.         for(int i=0;i<c.broj;i++)
  219.  
  220.         cout<<c.cofi[i]<<endl;
  221.         return o;
  222.     }
  223.  
  224. void setCoffee(int i, Coffee &c)
  225. {
  226.  
  227.     cofi[i]=c;
  228. }
  229. ~CoffeeShop(){
  230.  
  231. }
  232.  
  233. };
  234. // zabraneto e menuvanje na main funkcijata, osven dodavanje na kodot za spravuvanje so iskluchokot na soodvetno mesto
  235.  
  236. int main() {
  237.     char name[100];
  238.     float price;
  239.     int discount;
  240.    
  241.     int testCase;
  242.    
  243.     cin >> testCase;
  244.    
  245.     if(testCase == 1) {
  246.         cout << "====== TESTING COFFEE CLASS ======" << endl;
  247.         cin >> name;
  248.         cin >> price;
  249.         cin >> discount;
  250.         cout << "CONSTRUCTOR" << endl;
  251.         Coffee c1(name, price);
  252.         c1.setDiscount(discount);
  253.         cin >> name;
  254.         cin >> price;
  255.         cin >> discount;
  256.         Coffee c2(name, price);
  257.         c2.setDiscount(discount);
  258.         cout << "OPERATOR <<" << endl;
  259.         cout << c1 << endl;
  260.         cout << c2 << endl;
  261.         cout << "OPERATOR ++" << endl;
  262.         ++c1;
  263.         cout << c1 << endl;
  264.         cout << "OPERATOR +" << endl;
  265.         Coffee c3 = c1 + c2;
  266.         cout << c3 << endl;        
  267.     } else if(testCase == 2) {
  268.         cout << "====== TESTING COFFEE CONSTRUCTORS ======" << endl;
  269.         cin >> name;
  270.         cin >> price;
  271.         cin >> discount;
  272.         cout << "CONSTRUCTOR" << endl;
  273.         Coffee c1(name, price);
  274.         cout << c1 << endl;
  275.         cout << "COPY CONSTRUCTOR" << endl;
  276.         Coffee c2(c1);
  277.         cin >> name;
  278.         c2.setName(name);
  279.         cout << c1 << endl;
  280.         cout << c2 << endl;
  281.         cout << "OPERATOR =" << endl;
  282.         //Coffee x("ime", 30);
  283.         //x = c2;
  284.         c1 = c2;
  285.         cin >> name;
  286.         c2.setName(name);
  287.         cout << c1 << endl;
  288.         cout << c2 << endl;
  289.         cout << "TESTING EXCEPTION" << endl;
  290.        
  291.         // vashiot kod za spravuvanje so iskluchok ovde
  292.        
  293.         cin >> discount;
  294.         c1.setDiscount(discount);
  295.        
  296.        
  297.        
  298.     } else if(testCase == 3) {
  299.         cout << "====== TESTING COFFEE SHOP ======" << endl;
  300.         char csName[50];
  301.         cin >> csName;
  302.         cout << "CONSTRUCTOR" << endl;
  303.         CoffeeShop cs(csName);
  304.         int n;
  305.         cin >> n;
  306.         cout << "OPERATOR +=" << endl;
  307.         for(int i = 0; i < n; ++i) {
  308.             cin >> name;
  309.             cin >> price;
  310.             Coffee c(name, price);
  311.             cs += c;
  312.         }
  313.         cout << cs;
  314.     } else if(testCase == 4) {
  315.         cout << "====== TESTING COFFEE SHOP CONSTRUCTORS ======" << endl;
  316.         char csName[50];
  317.         cin >> csName;
  318.         CoffeeShop cs(csName);
  319.         int n;
  320.         cin >> n;
  321.         for(int i = 0; i < n; ++i) {
  322.             cin >> name;
  323.             cin >> price;
  324.             Coffee c(name, price);
  325.             cs += c;
  326.         }
  327.         Coffee x("Espresso", 60);
  328.         CoffeeShop cp = cs;
  329.         cs.setCoffee(0, x);
  330.         cout << cs << endl;
  331.         cout << cp << endl;
  332.     }
  333.  
  334.    
  335.     return 0;
  336. }
Add Comment
Please, Sign In to add comment