Andziev

Картичка

May 10th, 2016
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.49 KB | None | 0 0
  1. #include<iostream>
  2. #include<string.h>
  3. using namespace std;
  4.  
  5. class OutOfBoundException : public exception {};
  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.     virtual int tezinaProbivanje () {
  19.         int k = 0, p = pin;
  20.         while(p!=0) {
  21.             k++;
  22.             p/=10;
  23.         }
  24.         return k;
  25.     }
  26.     friend ostream& operator << (ostream &x, Karticka &k) {
  27.         x << k.smetka<<": "<<k.tezinaProbivanje()<<endl;
  28.         return x;
  29.     }
  30.     virtual Karticka& operator += (int kod) {
  31.         return *this;
  32.     }
  33.     bool getDopolnitelenPin() {
  34.         return povekjePin;
  35.     }
  36.     char *getSmetka () {
  37.         return smetka;
  38.     }
  39. };
  40.  
  41. class SpecijalnaKarticka : public Karticka {
  42. private:
  43.     int *kod;
  44.     int n;
  45.     static const int P = 4;
  46. public:
  47.     SpecijalnaKarticka (char* smetka,int pin)
  48.         : Karticka (smetka,pin) {
  49.         povekjePin = true;
  50.         n = 0;
  51.     }
  52.     int tezinaProbivanje () {
  53.         return Karticka::tezinaProbivanje () + n;
  54.     }
  55.     friend ostream& operator << (ostream &x, SpecijalnaKarticka &s) {
  56.         x << s.smetka<<": "<<s.tezinaProbivanje()<<endl;
  57.         return x;
  58.     }
  59.     SpecijalnaKarticka& operator += (int kod) {
  60.         if(n==P) throw OutOfBoundException();
  61.  
  62.         ++n;
  63.         return *this;
  64.     }
  65. };
  66.  
  67. class Banka {
  68. private:
  69.     char naziv[30];
  70.     Karticka *karticki[20];
  71.     int broj;
  72.     static int LIMIT;
  73. public:
  74.     Banka(const char *naziv, Karticka** karticki,int broj ) {
  75.         strcpy(this->naziv,naziv);
  76.         for (int i=0; i<broj; i++) {
  77.             if (karticki[i]->getDopolnitelenPin()) {
  78.                 this->karticki[i]=new SpecijalnaKarticka(*dynamic_cast<SpecijalnaKarticka*>(karticki[i]));
  79.             } else this->karticki[i]=new Karticka(*karticki[i]);
  80.         }
  81.         this->broj=broj;
  82.     }
  83.     ~Banka() {
  84.         for (int i=0; i<broj; i++) delete karticki[i];
  85.     }
  86.  
  87.     void pecatiKarticki () {
  88.         cout<<"Vo bankata Komercijalna moze da se probijat kartickite:"<<endl;
  89.         for(int i=0; i<broj; i++) {
  90.             if(karticki[i]->tezinaProbivanje()<=LIMIT)
  91.                 cout<<*karticki[i];
  92.         }
  93.     }
  94.     void dodadiDopolnitelenPin (char *smetka,int pin) {
  95.         for(int i=0; i<broj; i++) {
  96.             if(strcmp(smetka,karticki[i]->getSmetka())==0)
  97.                 *karticki[i]+=pin;
  98.         }
  99.  
  100.     }
  101.     static void setLIMIT (int l) {
  102.         LIMIT = l;
  103.     }
  104. };
  105. int Banka::LIMIT = 7;
  106.  
  107.  
  108. int main() {
  109.  
  110.     Karticka **niza;
  111.     int n,m,pin;
  112.     char smetka[16];
  113.     bool daliDopolnitelniPin;
  114.     cin>>n;
  115.     niza=new Karticka*[n];
  116.     for (int i=0; i<n; i++) {
  117.         cin>>smetka;
  118.         cin>>pin;
  119.         cin>>daliDopolnitelniPin;
  120.         if (!daliDopolnitelniPin)
  121.             niza[i]=new Karticka(smetka,pin);
  122.         else
  123.             niza[i]=new SpecijalnaKarticka(smetka,pin);
  124.     }
  125.  
  126.     Banka komercijalna("Komercijalna",niza,n);
  127.     for (int i=0; i<n; i++) delete niza[i];
  128.     delete [] niza;
  129.     cin>>m;
  130.     for (int i=0; i<m; i++) {
  131.         cin>>smetka>>pin;
  132.         try {
  133.             komercijalna.dodadiDopolnitelenPin(smetka,pin);
  134.         } catch (exception &e) {
  135.             cout<<"Brojot na pin kodovi ne moze da go nadmine dozvolenoto";
  136.         }
  137.     }
  138.  
  139.     Banka::setLIMIT(5);
  140.  
  141.     komercijalna.pecatiKarticki();
  142.  
  143. }
Add Comment
Please, Sign In to add comment