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 msg() {
- cout<<"Brojot na pin kodovi nemoze 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;
- }
- /** void copy(const Karticka &k)
- {
- strcpy(this->smetka,k.smetka);
- this->pin=k.pin;
- this->povekjePin=k.povekjePin;
- }**/
- friend ostream &operator<<(ostream &out , const Karticka &k) {
- out<<k.smetka<<": "<<k.tezinaProbivanje()<<endl;
- return out;
- }
- char *getSmetka() {
- return smetka;
- }
- bool getDopolnitelenPin()
- {
- return povekjePin;
- }
- virtual int tezinaProbivanje() const
- {
- int nov=pin;
- int brojac=0;
- while(nov) {
- brojac/=10;
- brojac++;
- }
- return brojac;
- }
- ~Karticka () {}
- };
- class SpecijalnaKarticka:public Karticka {
- private:
- int *pinKodovi;
- int brpin;
- const static int P;
- public:
- SpecijalnaKarticka(char *smetka,int pin):Karticka(smetka,pin) {
- //this->brpin=brpin;
- this->pinKodovi=new int[brpin];
- for(int i = 0 ; i <brpin; i++) {
- this->pinKodovi[i]=pinKodovi[i];
- }
- }
- /** SpecijalnaKarticka(const SpecijalnaKarticka &s)
- {
- Karticka ::copy(s);
- for(int i = 0 ; i <brpin; i++)
- {
- this->pinKodovi[i]=s.pinKodovi[i];
- }
- }**/
- int tezinaProbivanje() {
- return Karticka ::tezinaProbivanje()+brpin;
- }
- int getPIN() {
- return brpin;
- }
- // friend ostream &operator<<(ostream &out, const SpecijalnaKarticka &s) {
- // out<<s.smetka<<": "<<s.tezinaProbivanje()<<endl;
- // return out;
- // }
- void operator+=(int novPin)
- {
- if(brpin==novPin) {
- throw OutOfBoundException();
- } else pinKodovi[brpin]+=novPin;
- brpin++;
- }
- ~SpecijalnaKarticka() {
- delete [] pinKodovi;
- }
- };
- 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 LIMIT) {
- Banka::LIMIT=LIMIT;
- }
- 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])<<endl;
- }
- }
- }
- void dodadiDopolnitelenPin(char * smetka, int novPin) {
- for(int i = 0 ; i < broj; i++) {
- if(strcmp(karticki[i]->getSmetka(),smetka)==0) {
- 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;
- }
- try{
- komercijalna.dodadiDopolnitelenPin(smetka,pin);
- }
- catch(OutOfBoundException o)
- {
- o.msg();
- }
- Banka::setLIMIT(5);
- komercijalna.pecatiKarticki();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement