Mitrezzz

Картичка

May 20th, 2018
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.57 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(){}
  14.    
  15.     Karticka(char* smetka,int pin){
  16.        strcpy(this->smetka,smetka);
  17.        this->pin=pin;
  18.        this->povekjePin=false;
  19.      }
  20.      // дополниете ја класата
  21.    
  22.     Karticka(Karticka& k){
  23.         strcpy(smetka,k.smetka);
  24.         pin=k.pin;
  25.         povekjePin=k.povekjePin;
  26.     }
  27.    
  28.     friend ostream& operator<<(ostream& out,Karticka& k){
  29.         return out<<k.smetka<<": "<<k.tezhinaProbivanje()<<endl;
  30.     }
  31.    
  32.     virtual int tezhinaProbivanje(){
  33.         int temp=pin;
  34.         int cifri=0;
  35.         while(temp){
  36.             cifri++;
  37.             temp/=10;
  38.         }
  39.         return cifri;
  40.     }
  41.    
  42.     virtual bool getPovekjePin(){
  43.         return povekjePin;
  44.     }
  45.    
  46.     char* getSmetka(){
  47.         return smetka;
  48.     }
  49.    
  50. };
  51.  
  52. //вметнете го кодот за SpecijalnaKarticka
  53.  
  54. class SpecijalnaKarticka:public Karticka{
  55. protected:
  56.     int *pinovi;
  57.     int brPinovi;
  58.     static const int P=4;
  59. public:
  60.    
  61.     SpecijalnaKarticka(char* smetka,int pin):Karticka(smetka,pin){
  62.         brPinovi=0;
  63.         pinovi=new int [0];
  64.         povekjePin=true;
  65.     }
  66.    
  67.     SpecijalnaKarticka(const SpecijalnaKarticka& s){
  68.         strcpy(smetka,s.smetka);
  69.         pin=s.pin;
  70.         povekjePin=s.povekjePin;
  71.         brPinovi=s.brPinovi;
  72.         delete [] pinovi;
  73.         for(int i=0;i<brPinovi;i++){
  74.             pinovi[i]=s.pinovi[i];
  75.         }
  76.        
  77.     }
  78.    
  79.     int tezhinaProbivanje(){
  80.         int temp=pin;
  81.         int cifri=0;
  82.         while(temp){
  83.             cifri++;
  84.             temp/=10;
  85.         }
  86.         //for(int i=0;i<brPinovi;i++){
  87.         //  temp=pinovi[i];
  88.         //  while(temp){
  89.        //       cifri++;
  90.         //      temp/=10;
  91.        //   }
  92.         //}
  93.         return cifri+brPinovi;
  94.     }
  95.    
  96.     SpecijalnaKarticka& operator+=(int nov){
  97.         if(brPinovi==P) throw OutOfBoundException();
  98.         int *temp=pinovi;
  99.         //delete [] pinovi;
  100.         pinovi= new int [brPinovi+1];
  101.         for(int i=0;i<brPinovi;i++){
  102.             pinovi[i]=temp[i];
  103.         }
  104.         delete [] temp;
  105.         pinovi[brPinovi++]=nov;
  106.         return *this;
  107.     }
  108.    
  109.     bool getPovekjePin(){
  110.         return povekjePin;
  111.     }
  112.    
  113.    
  114. };
  115.  
  116. class Banka {
  117. private:
  118.     char naziv[30];
  119.     Karticka *karticki[20];
  120.     int broj;
  121.     static int LIMIT;
  122. public:
  123.     Banka(char *naziv, Karticka** karticki,int broj ){
  124.       strcpy(this->naziv,naziv);
  125.       for (int i=0;i<broj;i++){
  126.         //ako kartickata ima dopolnitelni pin kodovi
  127.         if (karticki[i]->getPovekjePin()){
  128.             this->karticki[i]=new SpecijalnaKarticka(*dynamic_cast<SpecijalnaKarticka*>(karticki[i]));
  129.         }
  130.         else this->karticki[i]=new Karticka(*karticki[i]);
  131.       }
  132.       this->broj=broj;
  133.     }
  134.     ~Banka(){
  135.     for (int i=0;i<broj;i++) delete karticki[i];
  136.     }
  137.  
  138.     //да се дополни класата
  139.    
  140.     static void setLIMIT(int n){
  141.         LIMIT=n;
  142.     }
  143.    
  144.     void pecatiKarticki(){
  145.         cout<<"Vo bankata "<<naziv<<" moze da se probijat kartickite:"<<endl;
  146.            
  147.         for(int i=0;i<broj;i++){
  148.             if(karticki[i]->tezhinaProbivanje()<=LIMIT){
  149.                 cout<<*karticki[i];
  150.             }  
  151.         }
  152.     }
  153.    
  154.     void dodadiDopolnitelenPin(char* smetka,int novPin){
  155.     for(int i=0;i<broj;i++){
  156.         if(!strcmp(smetka,karticki[i]->getSmetka())){
  157.             if(karticki[i]->getPovekjePin()){
  158.                 SpecijalnaKarticka* sk=dynamic_cast<SpecijalnaKarticka*>(karticki[i]);
  159.                 try{
  160.                   *sk+=novPin;
  161.                 } catch (OutOfBoundException e){
  162.                     cout<<"Brojot na pin kodovi ne moze da go nadmine dozvolenoto"<<endl;
  163.                 }
  164.             }
  165.         }
  166.     }
  167. }
  168.  
  169.    
  170. };
  171. int Banka::LIMIT=7;
  172.  
  173.  
  174. int main(){
  175.  
  176. Karticka **niza;
  177. int n,m,pin;
  178. char smetka[16];
  179. bool daliDopolnitelniPin;
  180. cin>>n;
  181. niza=new Karticka*[n];
  182. for (int i=0;i<n;i++){
  183.    cin>>smetka;
  184.    cin>>pin;
  185.    cin>>daliDopolnitelniPin;
  186.    if (!daliDopolnitelniPin)
  187.     niza[i]=new Karticka(smetka,pin);
  188.    else
  189.     niza[i]=new SpecijalnaKarticka(smetka,pin);
  190. }
  191.  
  192. Banka komercijalna("Komercijalna",niza,n);
  193. for (int i=0;i<n;i++) delete niza[i];
  194. delete [] niza;
  195. cin>>m;
  196. for (int i=0;i<m;i++){
  197.    cin>>smetka>>pin;
  198.  
  199.    komercijalna.dodadiDopolnitelenPin(smetka,pin);
  200.    
  201. }
  202.  
  203. Banka::setLIMIT(5);
  204.  
  205. komercijalna.pecatiKarticki();
  206.  
  207. }
Add Comment
Please, Sign In to add comment