Crazy

Картичка

May 11th, 2017
611
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.13 KB | None | 0 0
  1. #include<iostream>
  2. #include<string.h>
  3. using namespace std;
  4.  
  5. class OutOfBoundException{};
  6.  
  7. class Karticka{
  8.    protected:
  9.        char smetka[16];
  10.        int pin;
  11.        bool povekjePin;
  12.    public:
  13.     Karticka(char* smetka,int pin){
  14.        strcpy(this->smetka,smetka);
  15.        this->pin=pin;
  16.        this->povekjePin=false;
  17.      }
  18.      // дополниете ја класата
  19.     bool getDopolnitelenPin(){return povekjePin;}
  20.     char *getSmetka(){return smetka;}
  21.     virtual int tezinaProbivanje(){
  22.         int temp=pin;
  23.         int tezina=0;
  24.         while(temp)
  25.         {
  26.             temp/=10;
  27.             tezina++;
  28.        
  29.         }
  30.         return tezina;    
  31.    
  32.     }
  33.    
  34.     //operator overloading  
  35.    
  36.     friend ostream &operator<<(ostream &out, Karticka &k)
  37.     {
  38.     out<<k.smetka<<": "<<k.tezinaProbivanje()<<endl;
  39.         return out;
  40.     }
  41.    
  42.     virtual ~Karticka(){}
  43.    
  44. };
  45.  
  46. //вметнете го кодот за SpecijalnaKarticka
  47. class SpecijalnaKarticka: public Karticka{
  48.     private:
  49.     int *dopolnitelni;
  50.     int pinkodovi;
  51.     const static int P;
  52.    
  53.     public:
  54.     SpecijalnaKarticka(char *smetka, int pin): Karticka(smetka,pin){
  55.         dopolnitelni=new int[0];
  56.         pinkodovi=0;
  57.         povekjePin=true;
  58.     }
  59.    
  60.     //get metodi za exceptiono posle
  61.     int getPINkodovi(){return pinkodovi;}
  62.     int getP(){return P;}
  63.    
  64.     int tezinaProbivanje(){ return Karticka::tezinaProbivanje()+pinkodovi;}
  65.    
  66.    
  67.    
  68.     SpecijalnaKarticka &operator+=(int kod)
  69.     {
  70.         int *pom=dopolnitelni;
  71.       dopolnitelni=new int[pinkodovi+1];
  72.         for(int i=0;i<pinkodovi;i++)
  73.         {
  74.         dopolnitelni[i]=pom[i];
  75.         }
  76.         dopolnitelni[pinkodovi]=kod;
  77.        pinkodovi++;
  78.  
  79.     return *this;
  80.        
  81.    
  82.    
  83.     }
  84.        
  85. };
  86.  
  87. const int SpecijalnaKarticka::P=4;
  88.  
  89.  
  90. class Banka {
  91. private:
  92.     char naziv[30];
  93.     Karticka *karticki[20];
  94.     int broj;
  95.     static int LIMIT;
  96. public:
  97.     Banka(char *naziv, Karticka** karticki,int broj ){
  98.       strcpy(this->naziv,naziv);
  99.       for (int i=0;i<broj;i++){
  100.         //ako kartickata ima dopolnitelni pin kodovi
  101.         if (karticki[i]->getDopolnitelenPin()){
  102.             this->karticki[i]=new SpecijalnaKarticka(*dynamic_cast<SpecijalnaKarticka*>(karticki[i]));
  103.         }
  104.         else this->karticki[i]=new Karticka(*karticki[i]);
  105.       }
  106.       this->broj=broj;
  107.     }
  108.    
  109.  
  110.     //да се дополни класата
  111.     void dodadiDopolnitelenPin(char * smetka, int novPin) {
  112.         for(int i=0;i<broj;i++){
  113.             if(strcmp(karticki[i]->getSmetka(),smetka)==0&&karticki[i]->getDopolnitelenPin()){
  114.  
  115.                 SpecijalnaKarticka  *s=dynamic_cast<SpecijalnaKarticka*>(karticki[i]);
  116.  
  117.                     *s+=novPin;
  118.                 }
  119.                
  120.                
  121.             }
  122.         }
  123.    
  124.    
  125.     void pecatiKarticki(){
  126.         cout<<"Vo bankata "<<naziv<<" moze da se probijat kartickite:"<<endl;
  127.         for(int i=0;i<broj;i++)
  128.             if(karticki[i]->tezinaProbivanje()<=LIMIT)
  129.             cout<<*karticki[i];
  130.    
  131.    
  132.     }
  133.    static void setLIMIT(int L){LIMIT=L;}
  134.    
  135.     ~Banka(){
  136.     for (int i=0;i<broj;i++) delete karticki[i];
  137.     }
  138.    
  139. };
  140.  
  141.  
  142. int Banka::LIMIT=7;
  143.  
  144. int main(){
  145.  
  146. Karticka **niza;
  147. int n,m,pin;
  148. char smetka[16];
  149. bool daliDopolnitelniPin;
  150. cin>>n;
  151. niza=new Karticka*[n];
  152. for (int i=0;i<n;i++){
  153.    cin>>smetka;
  154.    cin>>pin;
  155.    cin>>daliDopolnitelniPin;
  156.    if (!daliDopolnitelniPin)
  157.     niza[i]=new Karticka(smetka,pin);
  158.    else
  159.     niza[i]=new SpecijalnaKarticka(smetka,pin);
  160. }
  161.  
  162. Banka komercijalna("Komercijalna",niza,n);
  163. for (int i=0;i<n;i++) delete niza[i];
  164. delete [] niza;
  165. cin>>m;
  166. for (int i=0;i<m;i++){
  167.    cin>>smetka>>pin;
  168. //handling exception posto na tove red ke se vidi dali dozvolenio broj na pinove e povekje od dozvoleno  
  169.     try {komercijalna.dodadiDopolnitelenPin(smetka,pin);
  170.        
  171.         }
  172.     catch(OutOfBoundException)
  173.     {
  174.         cout<<"Brojot na pin kodovi ne moze da go nadmine dozvolenoto"<<endl;
  175.    
  176.     }
  177.    
  178. }
  179.  
  180. Banka::setLIMIT(5);
  181.  
  182. komercijalna.pecatiKarticki();
  183.  
  184. }
Advertisement
Add Comment
Please, Sign In to add comment