Advertisement
SlavkovB

Хотел OOP Exercises

Jun 7th, 2016
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.00 KB | None | 0 0
  1. Хотел Problem 9 (0 / 0)
  2. Да се креира класата Restoran во која ќе се чуваат информации за:
  3.  
  4. име (динамичко алоцирано поле од знаци)
  5. цена на дневно мени (цел број)
  6. Да се креира класа Hotel во која се чуваат информации за:
  7.  
  8. име (поле од најмногу 15 знаци)
  9. цени по месец (поле од 12 цели броеви кои ја претставуваат цената за спиење во хотелот во секој од месеците од годината. На пример цената за спиење во март е сместена во полето со индекс 2)
  10. број на ѕвездички на хотелот (цел број од 1 до 5)
  11. дали има ресторан (bool-тип)
  12. ретсорантот на хотелот (покажувач кон објект од класата Restoran)
  13. За дадените класи дефинирајте ги потребните: конструктори, деструктори, set и get методи. Оптоварете го соодветно операторот =. (20 поени)
  14.  
  15. Да се оптоварат:
  16.  
  17. операторот ++ (префискен) за зголемување на бројот на ѕвездички на хотелот (во класата Hotel). Да се запази дека хотелот може да има најмногу 5 ѕвездички. (5 поени)
  18. операторот << за печатење на објект одHotel. (5 поени)
  19. операторот >= за одредување дали хотелот има повеќе ѕвездички од дадениот цел број (споредба на хотел со цел број) . (5 поени)
  20. Формат на печатење на информации за еден хотел:
  21.  
  22. Belvi 3* so restoran //ако има ресторан
  23. Molcika 2* //ако нема ресторан
  24. Во класата Hotel да се имплементира функција со име presmetajDnevnaCena со која се пресметува дневна цена во хотелот за даден месец во годината. Ако хотелот има ресторан во дневната цена се додава и цената на дневното мени во ресторантот. Функцијата враќа void (не враќа ништо). Првиот аргумент на функцијата е редниот број на месецот за кој се бара цената (1-12), а вториот ја претставува дневната цена која ќе се пресмета во функцијата како влезно-излезен аргумент. Доколку редниот број на месецот е невалиден да се фрли соодветен исклучок со кој се справуваме во main-функцијата. (15 поени)
  25.  
  26. Дадена е main-функцијата во која се користат класите Restoran и Hotel. Без таа да се менува креирајте ги опишаните класи.
  27.  
  28. Sample input
  29. Palace 48 42 40 41 42 43 46 47 46 40 41 43 4
  30. 0
  31. 3
  32.  
  33. Sample output
  34. Informacii za hotelot:
  35. Palace 5*
  36. Hotelot za koj se vneseni informaciite ima broj na dzvezdichki pogolem ili ednakov na 4
  37. Cenata vo mesecot so reden broj 3 e 40
  38.  
  39. //CODE//
  40.  
  41.  
  42. #include <iostream>
  43. #include<cstring>
  44. using namespace std;
  45.  
  46.  
  47. class Restoran{
  48. char *ime;
  49. int cena;
  50. public:
  51.     Restoran(const char *ime = " ", int cena = 0){
  52.     this -> ime = new char[strlen(ime) + 1];
  53.         strcpy(this -> ime, ime);
  54.     this -> cena = cena;}
  55.     int getCena(){return this -> cena;}
  56.    
  57.     Restoran(const Restoran &r){
  58.     cena = r.cena;
  59.     ime = new char[strlen(r.ime) + 1];
  60.     strcpy(ime, r.ime);
  61.     }
  62.    
  63.     Restoran &operator=(Restoran &r){
  64.         if(this != &r){
  65.     cena = r.cena;
  66.     delete ime;
  67.     ime = new char[strlen(r.ime) + 1];
  68.     strcpy(ime, r.ime);}
  69.     }
  70.     };
  71.  
  72. class Hotel
  73. {
  74. private:
  75.     char ime[15];
  76.     int ceniMesec[12];
  77.     int zvezdicki;
  78.     bool daliRestoran;
  79.     Restoran *r;
  80.  
  81. public:
  82.     void setRestoran(Restoran n)
  83.     {
  84.         this-> daliRestoran = true;
  85.         this->r = &n;
  86.     }
  87.     Hotel(const char *ime=" ", int ceniMesec[12] = NULL, int zvezdicki = 0, bool daliRestoran = false, Restoran *r = NULL)
  88.     {
  89.         strcpy(this->ime, ime);
  90.         this -> daliRestoran = daliRestoran;
  91.         this -> zvezdicki = zvezdicki;
  92.         if(ceniMesec != NULL){
  93.         for(int i = 0; i < 12; i++)
  94.         {
  95.             this->ceniMesec[i] = ceniMesec[i];
  96.         }
  97.         }
  98.         this->r = r;
  99.     }
  100.     Hotel &operator++()
  101.     {
  102.         if(this -> zvezdicki == 5) return *this;
  103.         this -> zvezdicki++;
  104.         return *this;
  105.     }
  106.     friend ostream &operator<<(ostream &out, Hotel &h)
  107.     {
  108.         if(h.daliRestoran)
  109.             out<<h.ime<<" "<<h.zvezdicki<<"* so restoran"<<endl;
  110.         else
  111.             out<<h.ime<<" "<<h.zvezdicki<<"*"<<endl;
  112.         return out;
  113.     }
  114.     bool operator>=(int br)
  115.     {
  116.         return this -> zvezdicki >= br;
  117.     }
  118.     void presmetajDnevnaCena(int mesec, int &cena)
  119.     {
  120.         if(mesec < 1 || mesec > 12) throw 10;
  121.         if(this->daliRestoran)
  122.             cena = ceniMesec[mesec - 1] + r -> getCena();
  123.         else
  124.             cena = ceniMesec[mesec - 1];
  125.     }
  126. };
  127.  
  128. int main(){
  129.  
  130.    Hotel h; //креирање на нов објект од класата хотел
  131.  
  132.    //во следниот дел се вчитуваат информации за хотелот
  133.    char imeHotel[15],imeRestoran[30];
  134.    int ceni[12];
  135.    int broj,cenaRestoran;
  136.    bool daliRestoran;
  137.    cin>>imeHotel;
  138.    for (int i=0;i<12;i++) cin>>ceni[i];
  139.    cin>>broj;
  140.    cin>>daliRestoran;
  141.  
  142.    //во следниот дел се внесуваат информации и за ресторанот ако постои
  143.    if (daliRestoran) {
  144.       cin>>imeRestoran>>cenaRestoran;
  145.       Hotel pom(imeHotel,ceni,broj);
  146.       Restoran r(imeRestoran,cenaRestoran);
  147.       pom.setRestoran(r);
  148.       h=pom;
  149.    }
  150.    else{
  151.       Hotel *pok=new Hotel(imeHotel,ceni,broj);
  152.       h=*pok;
  153.    }
  154.  
  155.    //се зголемува бројот на ѕвездички на хотелот за 2
  156.    ++h;
  157.    ++h;
  158.  
  159.    int cena;
  160.    int mesec;
  161.    cin>>mesec;
  162.    try{
  163.    h.presmetajDnevnaCena(mesec,cena); //тука се применува функцијата presmetajDnevnaCena
  164.    cout<<"Informacii za hotelot:"<<endl;
  165.    cout<<h;
  166.    if (h>=4)
  167.        cout<<"Hotelot za koj se vneseni informaciite ima broj na dzvezdichki pogolem ili ednakov na 4\n";
  168.  
  169.    cout<<"Cenata vo mesecot so reden broj "<<mesec<<" e "<<cena; //се печати цената за дадениот месец
  170.    }
  171.    catch (int){
  172.       cout<<"Redniot broj na mesecot e greshno vnesen!";
  173.    }
  174. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement