Advertisement
add1ctus

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

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