Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<string.h>
- using namespace std;
- class OutOfBoundException
- {
- public:
- void print()
- {
- cout<<"Brojot na pin kodovi ne moze da go nadmine dozvolenoto"<<endl;
- }
- };
- class Karticka{
- protected:
- char smetka[16];
- int pin;
- bool povekjePin;
- public:
- Karticka(){}
- Karticka(char* smetka,int pin){
- strcpy(this->smetka,smetka);
- this->pin=pin;
- this->povekjePin=false;
- }
- char *getSmetka()
- {
- return smetka;
- }
- friend ostream &operator<<(ostream &out,Karticka &k)
- {
- out<<k.smetka<<": "<<k.tezinaProbivanje()<<endl;
- return out;
- }
- virtual int tezinaProbivanje()
- {
- int p=pin, t=0;
- while(p)
- {
- t++;
- p/=10;
- }
- return t;
- }
- bool getDopolnitelenPin()
- {
- return povekjePin;
- }
- };
- class SpecijalnaKarticka:public Karticka{
- int *dopolnitelni;
- int broj;
- const static int P;
- public:
- SpecijalnaKarticka(char *smetka,int pin):Karticka(smetka,pin)
- {
- dopolnitelni=new int[0];
- broj=0;
- }
- SpecijalnaKarticka(const SpecijalnaKarticka &sk)
- {
- strcpy(smetka,sk.smetka);
- povekjePin=sk.povekjePin;
- pin=sk.pin;
- broj=sk.broj;
- dopolnitelni=new int[broj];
- for(int i=0;i<broj;i++)
- {
- dopolnitelni[i]=sk.dopolnitelni[i];
- }
- }
- SpecijalnaKarticka &operator=(const SpecijalnaKarticka &sk)
- {
- if(this!=&sk)
- {
- delete [] dopolnitelni;
- povekjePin=sk.povekjePin;
- strcpy(smetka,sk.smetka);
- pin=sk.pin;
- broj=sk.broj;
- dopolnitelni=new int[broj];
- for(int i=0;i<broj;i++)
- {
- dopolnitelni[i]=sk.dopolnitelni[i];
- }
- }
- return *this;
- }
- ~SpecijalnaKarticka()
- {
- delete[]dopolnitelni;
- }
- friend ostream &operator<<(ostream &out, SpecijalnaKarticka &k)
- {
- out<<k.smetka<<": "<<k.tezinaProbivanje()<<endl;
- return out;
- }
- int tezinaProbivanje()
- {
- int vk=0;
- vk+=Karticka::tezinaProbivanje()+broj;
- return vk;
- }
- SpecijalnaKarticka &operator+=(int i)
- {
- if(broj+1>P) throw OutOfBoundException();
- povekjePin=true;
- int *temp=new int[broj+1];
- for(int j=0;j<broj;j++)
- {
- temp[j]=dopolnitelni[j];
- }
- temp[broj++]=i;
- delete [] dopolnitelni;
- dopolnitelni=temp;
- return *this;
- }
- };
- const int SpecijalnaKarticka::P=4;
- class Banka {
- private:
- char naziv[30];
- Karticka *karticki[20];
- int broj;
- static int LIMIT;
- 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];
- }
- static void setLimit(int n)
- {
- LIMIT=n;
- }
- 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 * s, int novPin)
- {
- for(int i=0;i<broj;i++)
- {
- if(!strcmp(s,karticki[i]->getSmetka()))
- {
- SpecijalnaKarticka *sk=dynamic_cast<SpecijalnaKarticka*>(karticki[i]);
- if(sk) *sk+=novPin;
- }
- }
- }
- };
- 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;
- komercijalna.dodadiDopolnitelenPin(smetka,pin);
- }
- Banka::setLimit(5);
- komercijalna.pecatiKarticki();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement