Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<string.h>
- #include<cmath>
- using namespace std;
- class OutOfBoundException
- {
- public:
- void showMessage(){
- cout<<"Brojot na pin kodovi ne moze da go nadmine dozvolenoto"<<endl;
- }
- };
- class Karticka{
- protected:
- char smetka[16];
- int pin;
- bool povekjePin;
- public:
- Karticka(char* smetka,int pin){
- strcpy(this->smetka,smetka);
- this->pin=pin;
- this->povekjePin=false;
- }
- virtual int tezinaProbivanje()const
- {
- int nov=pin;
- int brojac=0;
- for(int i = 0 ; i <=nov ; i ++)
- {
- nov/=10;
- brojac++;
- }
- return brojac;
- }
- friend ostream &operator<<(ostream &out, const Karticka &k)
- {
- out<<k.smetka<<": "<<k.tezinaProbivanje()<<endl;
- return out;
- }
- virtual int *getDopolnitelenPin(){ return 0; }
- char *getSmetka(){return smetka;}
- };
- class SpecijalnaKarticka : public Karticka
- {
- private:
- int *dopolnitelenPinKod;
- int broj;
- static const int P ;
- public:
- SpecijalnaKarticka(char *smetka ,int pin): Karticka(smetka , pin)
- {
- this->dopolnitelenPinKod=new int [broj+1];
- for(int i = 0 ; i < broj ; i++)
- {
- this->dopolnitelenPinKod[i]=dopolnitelenPinKod[i];
- }
- }
- int *getDopolnitelenPin(){return dopolnitelenPinKod;}
- SpecijalnaKarticka &operator+=(int n )
- {
- if(broj==n)
- {
- throw OutOfBoundException();
- }
- else{
- int *tmp=new int [broj+1];
- for(int i = 0 ; i < broj ; i++)
- {
- tmp[i]=dopolnitelenPinKod[i];
- }
- tmp[broj]=n;
- broj++;
- delete[] dopolnitelenPinKod;
- dopolnitelenPinKod=tmp;
- return *this;
- }
- }
- int tezinaProbivanje() const
- {
- return Karticka::tezinaProbivanje()+broj;
- }
- friend ostream &operator<<(ostream &out , const SpecijalnaKarticka &s)
- {
- out<<s.smetka<<": "<<s.tezinaProbivanje()<<endl;
- return out;
- }
- };
- const int SpecijalnaKarticka::P=4;
- class Banka {
- private:
- static int LIMIT;
- char naziv[30];
- Karticka *karticki[20];
- int broj;
- public:
- Banka(char *naziv, Karticka** karticki,int broj ){
- strcpy(this->naziv,naziv);
- for (int i=0;i<broj;i++){
- //ako kartickata ima dopolnitelni pin kodovi
- if (karticki[i]->getDopolnitelenPin()){
- this->karticki[i]=new SpecijalnaKarticka(*dynamic_cast<SpecijalnaKarticka*>(karticki[i]));
- }
- else this->karticki[i]=new Karticka(*karticki[i]);
- }
- this->broj=broj;
- }
- ~Banka(){
- for (int i=0;i<broj;i++) delete karticki[i];
- }
- void pecatiKarticki()
- {
- cout<<"Vo bankata "<<naziv<<" moze da se probijat kartickite:"<<endl;
- for(int i = 0 ; i < broj ; i++)
- {
- if(karticki[i]->tezinaProbivanje()<=LIMIT)
- {
- cout<<*karticki[i];
- }
- }
- }
- void dodadiDopolnitelenPin(char * smetka, int novPin)
- {
- for(int i = 0 ; i < broj ; i ++)
- {
- if(strcmp(karticki[i]->getSmetka(),smetka)==0)
- {
- SpecijalnaKarticka * s=dynamic_cast<SpecijalnaKarticka*>(karticki[i]);
- if(s!=0)
- {
- *s+=novPin;
- }
- }
- }
- }
- static void setLIMIT(int LIMIT){Banka::LIMIT=LIMIT;}
- };
- int Banka::LIMIT=7;
- int main(){
- Karticka **niza;
- int n,m,pin;
- char smetka[16];
- bool daliDopolnitelniPin;
- cin>>n;
- niza=new Karticka*[n];
- for (int i=0;i<n;i++){
- cin>>smetka;
- cin>>pin;
- cin>>daliDopolnitelniPin;
- if (!daliDopolnitelniPin)
- niza[i]=new Karticka(smetka,pin);
- else
- niza[i]=new SpecijalnaKarticka(smetka,pin);
- }
- Banka komercijalna("Komercijalna",niza,n);
- for (int i=0;i<n;i++) delete niza[i];
- delete [] niza;
- cin>>m;
- for (int i=0;i<m;i++){
- cin>>smetka>>pin;
- try{
- komercijalna.dodadiDopolnitelenPin(smetka,pin);
- }
- catch(OutOfBoundException &e)
- {
- e.showMessage();
- }
- }
- Banka::setLIMIT(5);
- komercijalna.pecatiKarticki();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement