196040

OOP zadaci za vezbanje 2 Opera i balet

May 24th, 2020
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.99 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4. class Delo { //Потребно е да се моделира продажба на карти за прикажување на претстави во некој културен центар.
  5. private:// За таа цел, да се направи класа DELO. За класата се чуваат следните атрибути:
  6. char ime[50];//Име на делото (низа од 50 знаци)
  7. int godina;//Година кога е напишано (цел број)
  8. char zemja[50];//Земја на потекло (низа од 50 знаци)
  9. public://За класата да се направат потребниот конструктор, get и set методи.
  10. Delo(char * ime = "", int godina = 0, char * zemja = "") {
  11.     strcpy(this->ime, ime);
  12.     this->godina = godina;
  13.     strcpy(this->zemja, zemja);
  14. }
  15. Delo(const Delo &copy) {
  16.     strcpy(this->ime, copy.ime);
  17.     this->godina = copy.godina;
  18.     strcpy(this->zemja, copy.zemja);
  19. }
  20. Delo &operator=(const Delo &copy) {
  21.     if(this!=&copy) {
  22.         strcpy(this->ime, copy.ime);
  23.     this->godina = copy.godina;
  24.     strcpy(this->zemja, copy.zemja);
  25.     }
  26.     return *this;
  27. }
  28. int getgodina() {
  29.     return godina;
  30. }
  31. char * getzemja() {
  32.     return this->zemja;
  33. }
  34.     char * getIme() {
  35.     return ime;
  36.     }
  37. bool operator==(Delo &compare) { //За класата DELO да се преоптовари операторот ==
  38. if (strcmp(this->ime, compare.ime)==0) return true;//кој ќе споредува дали две дела се исти
  39. else return false;//(две дела се исти ако имаат исто име) (5 поени).
  40. }
  41. };
  42. class Pretstava { //Да се дефинира класа PRЕTSTAVA.
  43. private://За класата се чуваат информации за:
  44. Delo d; //Делото кое се прикажува (објект од класата DELO)
  45. int karti; //Број на продадени карти (цел број)
  46. char data[15]; //Дата на прикажување (низа од 15 знаци)
  47. public://За класата да се дефинира потребниот конструктор, set и get методите
  48. Pretstava() {
  49.     this->karti = 0;
  50.     strcpy(this->data, "");
  51. }
  52. Pretstava(Delo d, int karti, char * data) {
  53.     this->d = d;
  54.     this->karti = karti;
  55.     strcpy(this->data, data);
  56. }
  57. Pretstava(const Pretstava &copy) {
  58.       this->d = copy.d;
  59.     this->karti = copy.karti;
  60.     strcpy(this->data, copy.data);
  61. }
  62.     int getkarti() {
  63.     return karti;
  64.     }
  65.     Delo getDelo() {
  66.     return d;
  67.     }
  68. virtual int cena() { //Дополнително, за класата PRETSTAVA да се напише метода cena која треба да ја
  69. //врати цената на една карта.
  70.  int m = 0, n = 0; //Цената зависи од староста на делото и од земјата на потекло и се пресметува по следната формула:
  71.  if(d.getgodina() > 1899)// Цена = N + М, каде М = 50ден.
  72.  m = 50; //ако делото е напишано во 20 или 21 век,
  73.  else if(d.getgodina() < 1900&&d.getgodina() > 1799) //М = 75ден. ако делото е напишано во
  74.  m = 75; //19 век и
  75.  else if(d.getgodina() < 1800) m = 100;//М = 100ден. ако делото е напишано пред 19 век.
  76.  if(strcmp(d.getzemja(), "Italija")==0) //N = 100ден ако
  77.  n = 100;// делото е од Италија,
  78.  else if(strcmp(d.getzemja(), "Rusija")==0) //N = 150ден ако
  79.  n = 150; //делото е од Русија.
  80.  else n = 80;//Делата од останатите земји имаат N = 80ден.
  81. return m+n;
  82. }
  83. };
  84. class Balet : public Pretstava { //Претставите можат да бидат опера и балет.
  85. private://За балетите се чува дополнителен атрибут за
  86. static int dopolnitelna;//цената на балетот која се додава на оригиналната цена на картата
  87. public://и таа вредност е иста за сите балетски претстави.
  88. Balet(){}
  89.     Balet(Delo d, int karti, char * data) : Pretstava(d, karti, data) {}
  90. int cena() {
  91.     return Pretstava::cena() + this->dopolnitelna;
  92. }
  93.         static void setCenaBalet(int newcena) {
  94.     dopolnitelna = newcena;
  95.     }
  96.     Balet(const Balet &copy) : Pretstava(copy) {}
  97. };
  98. class Opera : public Pretstava {
  99.     public:
  100.     Opera(){}
  101.     Opera(Delo d, int karti, char * data) : Pretstava(d, karti, data) {}
  102.     int cena() {
  103.     return Pretstava::cena();
  104.     }
  105.     Opera(const Opera &copy) : Pretstava(copy) {}
  106. };
  107. int Balet::dopolnitelna = 150; //На почеток изнесува 150 денари, со можност да се променува
  108. int prihod (Pretstava **niza, int broj) { //Да се дефинира надворешна функција prihod која како аргумент
  109. int total = 0;//прима низа од покажувачи кон претстави кои се прикажале во еден месец и големина на низата, а како
  110. for(int i=0;i<broj;i++)
  111. total = total + niza[i]->cena() * niza[i]->getkarti();
  112. return total;
  113. }  // резултат треба да го пресмета и врати вкупниот приход на културниот центар. (10 поени)
  114. int brojPretstaviNaDelo(Pretstava **niza, int broj, Delo d) { //Да се дефинира надворешна функција brojPretstaviNaDelo
  115. int counter=0;//која како аргумент прима низа од покажувачи кон претстави кои се прикажале во еден месец,
  116. for(int i=0;i<broj;i++) //големина на низата и едно дело. Оваа функција пресметува на
  117.   if(niza[i]->getDelo() == d) //колку од дадените претстави е прикажано даденото дело. (5 поени)
  118.   counter++;
  119.   return counter;
  120. }
  121. Delo readDelo(){
  122.     char ime[50];
  123.     int godina;
  124.     char zemja[50];
  125.     cin>>ime>>godina>>zemja;
  126.     return Delo(ime,godina,zemja);
  127. }
  128. //citanje na pretstava
  129. Pretstava* readPretstava(){
  130.     int tip; //0 za Balet , 1 za Opera
  131.     cin>>tip;
  132.     Delo d=readDelo();
  133.     int brojProdadeni;
  134.     char data[15];
  135.     cin>>brojProdadeni>>data;
  136.     if (tip==0)  return new Balet(d,brojProdadeni,data);
  137.     else return new Opera(d,brojProdadeni,data);
  138. }
  139.  
  140. int main(){
  141.     int test_case;
  142.     cin>>test_case;
  143.    
  144.     switch(test_case){
  145.     case 1:
  146.     //Testiranje na klasite Opera i Balet
  147.     {
  148.         cout<<"======TEST CASE 1======="<<endl;
  149.         Pretstava* p1=readPretstava();
  150.         cout<<p1->getDelo().getIme()<<endl;
  151.         Pretstava* p2=readPretstava();
  152.         cout<<p2->getDelo().getIme()<<endl;
  153.     }break;
  154.        
  155.     case 2:
  156.     //Testiranje na  klasite Opera i Balet so cena
  157.     {
  158.         cout<<"======TEST CASE 2======="<<endl;
  159.         Pretstava* p1=readPretstava();
  160.         cout<<p1->cena()<<endl;
  161.         Pretstava* p2=readPretstava();
  162.         cout<<p2->cena()<<endl;
  163.     }break;
  164.    
  165.     case 3:
  166.     //Testiranje na operator ==
  167.     {
  168.         cout<<"======TEST CASE 3======="<<endl;
  169.         Delo f1=readDelo();
  170.         Delo f2=readDelo();
  171.         Delo f3=readDelo();
  172.        
  173.         if (f1==f2) cout<<"Isti se"<<endl; else cout<<"Ne se isti"<<endl;
  174.         if (f1==f3) cout<<"Isti se"<<endl; else cout<<"Ne se isti"<<endl;
  175.    
  176.     }break;
  177.    
  178.     case 4:
  179.     //testiranje na funkcijata prihod
  180.     {
  181.         cout<<"======TEST CASE 4======="<<endl;
  182.         int n;
  183.         cin>>n;
  184.         Pretstava **pole=new Pretstava*[n];
  185.         for (int i=0;i<n;i++){
  186.             pole[i]=readPretstava();
  187.        
  188.         }
  189.         cout<<prihod(pole,n);
  190.     }break;
  191.    
  192.     case 5:
  193.     //testiranje na prihod so izmena na cena za 3d proekcii
  194.     {
  195.         cout<<"======TEST CASE 5======="<<endl;
  196.         int cenaBalet;
  197.         cin>>cenaBalet;
  198.         Balet::setCenaBalet(cenaBalet);
  199.         int n;
  200.         cin>>n;
  201.         Pretstava **pole=new Pretstava*[n];
  202.         for (int i=0;i<n;i++){
  203.             pole[i]=readPretstava();
  204.         }
  205.         cout<<prihod(pole,n);
  206.         }break;
  207.        
  208.     case 6:
  209.     //testiranje na brojPretstaviNaDelo
  210.     {
  211.         cout<<"======TEST CASE 6======="<<endl;
  212.         int n;
  213.         cin>>n;
  214.         Pretstava **pole=new Pretstava*[n];
  215.         for (int i=0;i<n;i++){
  216.             pole[i]=readPretstava();
  217.         }
  218.        
  219.         Delo f=readDelo();
  220.         cout<<brojPretstaviNaDelo(pole,n,f);
  221.     }break;
  222.    
  223.     };
  224.  
  225.  
  226. return 0;
  227. }
Add Comment
Please, Sign In to add comment