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