Andziev

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

Apr 22nd, 2016
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.29 KB | None | 0 0
  1. #include<iostream>
  2. #include<string.h>
  3. using namespace std;
  4.  
  5. class Zichara
  6. {
  7.     private:
  8.     char *mesto;
  9.     int cena;
  10.     public:
  11.     Zichara (const char *m="",int c=0)
  12.     {
  13.         mesto=new char [strlen(m)+1];
  14.         for(int i=0; i<strlen(m)+1; i++)
  15.             mesto[i]=m[i];
  16.         cena=c;
  17.     }
  18.     int getCena()
  19.     {
  20.         return cena;
  21.     }
  22. };
  23. class PlaninarskiDom
  24. {
  25.     private:
  26.     char ime [15];
  27.     int ceni[2];
  28.     char klasa;
  29.     bool ima;
  30.     Zichara *zichara;
  31.     public:
  32.     PlaninarskiDom () {}
  33.     PlaninarskiDom(const char *i,int *c,char k)
  34.     {
  35.         strcpy(ime,i);
  36.         for(int i=0; i<2; i++)
  37.             ceni[i]=c[i];
  38.         klasa=k;
  39.         ima=false;
  40.     }
  41.     PlaninarskiDom & operator--()
  42.     {
  43.         if(klasa!='F')
  44.             klasa++;
  45.         return *this;
  46.     }
  47.     friend ostream& operator << (ostream &x,const PlaninarskiDom &p)
  48.     {
  49.         x<<p.ime<<" klasa:"<<p.klasa;
  50.         if(p.ima)
  51.             x<<" so Zichara";
  52.         x<<endl;
  53.         return x;
  54.     }
  55.     bool operator <= (char c)
  56.     {
  57.        
  58.         return klasa>=c;
  59.     }
  60.     void setZichara (Zichara &z)
  61.     {
  62.         zichara=&z;
  63.         ima=true;
  64.     }
  65.     void presmetajDnevenPrestoj (int den,int mesec,int &cena)
  66.     {
  67.         if(den <1 || den >31)
  68.             throw 214234;
  69.         if(mesec <1 || mesec > 12)
  70.             throw 423423;
  71.         if(mesec>=3&&mesec <=9)
  72.         {
  73.             if(mesec==9&&den>1)
  74.                 cena=ceni[1];
  75.             if(mesec==3)
  76.                 cena=ceni[1];
  77.              else  cena=ceni[0];
  78.         }
  79.         else
  80.             cena=ceni[0];
  81.         if(ima)
  82.             cena+=zichara->getCena();
  83.     }
  84. };
  85. int main(){
  86.  
  87.    PlaninarskiDom p; //креирање на нов објект од класата планинарски дом
  88.  
  89.    //во следниот дел се вчитуваат информации за планинарскиот дом
  90.    char imePlaninarskiDom[15],mestoZichara[30],klasa;
  91.    int ceni[12];
  92.    int dnevnakartaZichara;
  93.    bool daliZichara;
  94.    cin>>imePlaninarskiDom;
  95.    for (int i=0;i<2;i++) cin>>ceni[i];
  96.    cin>>klasa;
  97.    cin>>daliZichara;
  98.  
  99.    //во следниот дел се внесуваат информации и за жичарата ако постои
  100.    if (daliZichara) {
  101.       cin>>mestoZichara>>dnevnakartaZichara;
  102.       PlaninarskiDom pom(imePlaninarskiDom,ceni,klasa);
  103.       Zichara r(mestoZichara,dnevnakartaZichara);
  104.       pom.setZichara(r);
  105.       p=pom;
  106.    }
  107.    else{
  108.       PlaninarskiDom *pok=new PlaninarskiDom(imePlaninarskiDom,ceni,klasa);
  109.       p=*pok;
  110.    }
  111.  
  112.    //се намалува класата на планинарскиот дом за 2
  113.    --p;
  114.    --p;
  115.  
  116.    int cena;
  117.    int den,mesec;
  118.    cin>>den>>mesec;
  119.    try{
  120.    p.presmetajDnevenPrestoj(den,mesec,cena); //тука се користи функцијата presmetajDnevenPrestoj
  121.    cout<<"Informacii za PlaninarskiDomot:"<<endl;
  122.    cout<<p;
  123.    if (p<='D')
  124.        cout<<"Planinarskiot dom za koj se vneseni informaciite ima klasa poniska ili ista so D\n";
  125.        
  126.    cout<<"Cenata za "<<den<<"."<<mesec<<" e "<<cena; //се печати цената за дадениот ден и месец
  127.    }
  128.    catch (int){
  129.       cout<<"Mesecot ili denot e greshno vnesen!";
  130.    }
  131. }
Advertisement
Add Comment
Please, Sign In to add comment