SlavkovB

Планинарски дом OOP Exercises

Jun 14th, 2016
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.67 KB | None | 0 0
  1. Планинарски дом Problem 5 (0 / 0)
  2. Да се креира класата Zichara во која ќе се чуваат информации за:
  3.  
  4. место (динамичко алоцирано поле од знаци)
  5. цена на дневна карта (цел број)
  6. Да се креира класа PlaninarskiDom во која се чуваат информации за:
  7.  
  8. име (статичко поле од најмногу 15 знаци)
  9. цени по сезони (поле од 2 цели броеви кои ја претставуваат цената за спиење за еден ден во планинарскиот дом во двете различни сезони. Секој планинарски дом има две сезони: летна и зимска. Летната сезона почнува на 1ви април и завршува до 1ви сепмтември. На пример цената за престој на 24ти Јули ќе биде сместена во полето со индекс 0 - каде е сместена цената за летната сезона)
  10. класа на планинарскиот дом (еден знак кој може да има вредност од A до F, каде A е најдобра класа)
  11. дали има жичара (bool-тип)
  12. жичарата на планинарскиот дом (покажувач кон објект од класата Zichara)
  13. За дадените класи дефинирајте ги потребните: конструктори, деструктори, set и get методи. Оптоварете го соодветно операторот =. (20 поени)
  14.  
  15. Да се оптоварат:
  16.  
  17. операторот -- (префискен) за намалување на класата на планинарскиот дом (во класата PlaninarskiDom). Да се запази дека за планинарскиот дом најмала класа е F. (5 поени)
  18. операторот << за печатење на објект одPlaninarskiDom. (5 поени)
  19. операторот <= за одредување дали планинарскиот дом има класа помала или еднаква со дадениот знак (споредба на планинарски дом со знак). (5 поени)
  20. Формат на печатење на информации за еден планинарски дом:
  21.  
  22. Pelister klasa:A so zichara //ако има жичара
  23. Korab klasa:B //ако нема жичара
  24. Во класата PlaninarskiDom да се имплементира функција со име presmetajDnevenPrestoj со која се пресметува цената за дневен престој во планинарскиот дом за даден ден и месец во годината. Ако планинарскиот дом има жичара во цената за дневен престој влегува и дневната карта за жичарата. Функцијата враќа void (не враќа ништо). Првиот аргумент на функцијата е денот (1-31), а вториот е месецот (1-12) за кои се пресметува цената. Третиот аргумент е цената за дневен престој која ќе се пресмета во функцијата. Доколку денот или месецот се невалидни да се фрли соодветен исклучок со кој се справуваме во main-функцијата. Да се земе дека секој месец има 31 ден. (15 поени)
  25.  
  26. Дадена е main-функција во која се користат класите Zichara и PlaninarskiDom. Без таа да се менува креирајте ги опишаните класи.
  27.  
  28. Sample input
  29. Korab 48 42 A
  30. 0
  31. 12 4
  32.  
  33. Sample output
  34. Informacii za PlaninarskiDomot:
  35. Korab klasa:C
  36. Cenata za 12.4 e 48
  37.  
  38.  
  39. //CODE//
  40.  
  41.  
  42. #include<iostream>
  43. #include<string.h>
  44. using namespace std;
  45.  
  46. //ова е место за вашиот код
  47.  
  48. class Zichara {
  49. private:
  50.     char *mesto; // DIN. AL.
  51.     int cenaKarta; // cena na dnevna karta
  52. public:
  53.     Zichara(const char *m = " ", int cK = 0)
  54.     {
  55.         mesto = new char [strlen(m)+1];
  56.         strcpy(mesto,m);
  57.         cenaKarta=cK;
  58.     }
  59.     ~Zichara(){
  60.         delete [] mesto;
  61.     }
  62.     int getCenaKarta()
  63.     {
  64.         return cenaKarta;
  65.     }
  66.     Zichara& operator= (const Zichara &z)
  67.     {
  68.         if(this!=&z)
  69.         {
  70.             delete [] mesto;
  71.             mesto = new char [strlen(z.mesto)+1];
  72.             strcpy(mesto,z.mesto);
  73.             cenaKarta=z.cenaKarta;
  74.         }
  75.         return *this;
  76.     }
  77.     Zichara (const Zichara &z)
  78.     {
  79.         mesto = new char [strlen(z.mesto)+1];
  80.         strcpy(mesto,z.mesto);
  81.         cenaKarta=z.cenaKarta;
  82.     }
  83. };
  84.  
  85. class PlaninarskiDom {
  86. private:
  87.     static char ime[15];
  88.     int ceniSezoni[2]; // cena za spienje za eden den vo dve razlicni sezoni, letna: 01.04 - 01.09
  89.     char klasa; // A-F, A-najdobra klasa na planinarskiot dom
  90.     bool daliZichara; // dali ima zhichara
  91.     Zichara *zichara;
  92.    
  93. public:
  94.     PlaninarskiDom(){}
  95.     PlaninarskiDom(char *ime, int *cS, char k)
  96.     {
  97.         strcpy(this->ime,ime);
  98.         for(int i=0;i<2;i++)
  99.             ceniSezoni[i]=cS[i];
  100.         klasa=k;
  101.         daliZichara=false;
  102.         zichara=NULL;
  103.     }
  104.     ~PlaninarskiDom(){}
  105.     void setZichara(Zichara z)
  106.     {
  107.         zichara=&z;
  108.         daliZichara=true;
  109.     }
  110.     PlaninarskiDom& operator= (const PlaninarskiDom &pd)
  111.     {
  112.         if(this!=&pd)
  113.         {
  114.             strcpy(ime,pd.ime);
  115.             for(int i=0;i<2;i++)
  116.                 ceniSezoni[i]=pd.ceniSezoni[i];
  117.             klasa=pd.klasa;
  118.             daliZichara=pd.daliZichara;
  119.             zichara=pd.zichara;
  120.         }
  121.         return *this;
  122.     }
  123.     PlaninarskiDom& operator-- ()
  124.     {
  125.         if(klasa!='F')
  126.             klasa++;
  127.         return *this;
  128.     }
  129.     friend ostream& operator<< (ostream &o, const PlaninarskiDom &pd)
  130.     {
  131.         if(pd.daliZichara)
  132.             o<<pd.ime<<" klasa:"<<pd.klasa<<" so Zichara"<<endl;
  133.         else o<<pd.ime<<" klasa:"<<pd.klasa<<endl;
  134.         return o;
  135.     }
  136.     bool operator<= (char k)
  137.     {
  138.         if(klasa>=k)
  139.             return true;
  140.         else return false;
  141.     }
  142.     void presmetajDnevenPrestoj(int den, int mesec, int &cenaDen)
  143.     {
  144.         try {
  145.         if(den<1 || den>31 || mesec<1 || mesec>12) throw 4;
  146.         if(mesec>=4&&mesec <=9) {
  147.                 if(daliZichara)
  148.                 cenaDen=zichara->getCenaKarta() + ceniSezoni[0];
  149.                 else cenaDen=ceniSezoni[0];
  150.         }
  151.         else {
  152.             if(daliZichara)
  153.                 cenaDen=zichara->getCenaKarta() + ceniSezoni[1];
  154.             else cenaDen=ceniSezoni[1];
  155.         }
  156.         }
  157.         catch(int)
  158.         {
  159.             throw 4;
  160.         }
  161.     }
  162. };
  163.  
  164. char PlaninarskiDom::ime[15]="";
  165.  
  166. int main(){
  167.  
  168.    PlaninarskiDom p; //креирање на нов објект од класата планинарски дом
  169.  
  170.    //во следниот дел се вчитуваат информации за планинарскиот дом
  171.    char imePlaninarskiDom[15],mestoZichara[30],klasa;
  172.    int ceni[12];
  173.    int dnevnakartaZichara;
  174.    bool daliZichara;
  175.    cin>>imePlaninarskiDom;
  176.    for (int i=0;i<2;i++) cin>>ceni[i];
  177.    cin>>klasa;
  178.    cin>>daliZichara;
  179.  
  180.    //во следниот дел се внесуваат информации и за жичарата ако постои
  181.    if (daliZichara) {
  182.       cin>>mestoZichara>>dnevnakartaZichara;
  183.       PlaninarskiDom pom(imePlaninarskiDom,ceni,klasa);
  184.       Zichara r(mestoZichara,dnevnakartaZichara);
  185.       pom.setZichara(r);
  186.       p=pom;
  187.    }
  188.    else{
  189.       PlaninarskiDom *pok=new PlaninarskiDom(imePlaninarskiDom,ceni,klasa);
  190.       p=*pok;
  191.    }
  192.  
  193.    //се намалува класата на планинарскиот дом за 2
  194.    --p;
  195.    --p;
  196.  
  197.    int cena;
  198.    int den,mesec;
  199.    cin>>den>>mesec;
  200.    try{
  201.    p.presmetajDnevenPrestoj(den,mesec,cena); //тука се користи функцијата presmetajDnevenPrestoj
  202.    cout<<"Informacii za PlaninarskiDomot:"<<endl;
  203.    cout<<p;
  204.    if (p<='D')
  205.        cout<<"Planinarskiot dom za koj se vneseni informaciite ima klasa poniska ili ista so D\n";
  206.        
  207.    cout<<"Cenata za "<<den<<"."<<mesec<<" e "<<cena; //се печати цената за дадениот ден и месец
  208.    }
  209.    catch (int){
  210.       cout<<"Mesecot ili denot e greshno vnesen!";
  211.    }
  212. }
Add Comment
Please, Sign In to add comment