Advertisement
NebojshaTodorovic

Vezbanje prv kolokvium-OOP- Planinarski Dom

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