Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<cstring>
- using namespace std;
- class InvalidDateException
- {
- private:
- int den,mesec,godina;
- public:
- InvalidDateException(int den=0,int mesec=0,int godina=0)
- {
- this->den=den;
- this->mesec=mesec;
- this->godina=godina;
- }
- void printError()
- {
- cout<<"Invalid Date "<<den<<"/"<<mesec<<"/"<<godina<<endl;
- }
- };
- class NotSupportedCurrencyException
- {
- private:
- char *value;
- public:
- NotSupportedCurrencyException(const char *value="")
- {
- this->value=new char[strlen(value)+1];
- strcpy(this->value,value);
- }
- void printError()
- {
- cout<<value<<" is not a supported currency"<<endl;
- }
- };
- class Transakcija
- {
- protected:
- int den;
- int mesec;
- int godina;
- double iznos;
- static double EUR;
- static double USD;
- public:
- Transakcija(int den=0,int mesec=0,int godina=0,double iznos=0)
- {
- this->den=den;
- this->mesec=mesec;
- this->godina=godina;
- this->iznos=iznos;
- if(den<1 || den>31 || mesec<1 || mesec>12)
- {
- throw InvalidDateException(den,mesec,godina);
- }
- }
- virtual ~Transakcija(){}
- static void setEUR(double _eur)
- {
- EUR=_eur;
- }
- static void setUSD(double _usd)
- {
- USD=_usd;
- }
- virtual double voDenari()=0;
- virtual void pecati()=0;
- };
- double Transakcija::EUR=61.0;
- double Transakcija::USD=50.0;
- class DenarskaTransakcija : public Transakcija
- {
- public:
- DenarskaTransakcija(int den=0,int mesec=0,int godina=0,double iznos=0) :Transakcija(den,mesec,godina,iznos){
- }
- ~DenarskaTransakcija(){}
- double voDenari()
- {
- return this->iznos;
- }
- void pecati()
- {
- cout<<den<<"/"<<mesec<<"/"<<godina<<" "<<iznos<<" MKD"<<endl;
- }
- };
- class DeviznaTransakcija : public Transakcija
- {
- private:
- char value[3];
- public:
- DeviznaTransakcija(int den=0,int mesec=0,int godina=0,double iznos=0,const char *value="") :Transakcija(den,mesec,godina,iznos)
- {
- strcpy(this->value,value);
- if(strcmp(value,"EUR")!=0&&strcmp(value,"USD")!=0)
- {
- throw NotSupportedCurrencyException(value);
- }
- }
- ~DeviznaTransakcija(){}
- double voDenari()
- {
- if(strcmp(value,"EUR")==0)
- {
- return iznos*EUR;
- }
- if(strcmp(value,"USD")==0)
- {
- return iznos*USD;
- }
- else{
- return iznos;
- }
- }
- void pecati()
- {
- cout<<den<<"/"<<mesec<<"/"<<godina<<" "<<iznos<<" "<<value<<endl;
- }
- };
- class Smetka
- {
- private:
- Transakcija **niza;
- int brTransakci;
- char brojSmetka[15];
- int saldo;
- public:
- Smetka(const char *brojSmetka="",int saldo=0)
- {
- strcpy(this->brojSmetka,brojSmetka);
- this->saldo=saldo;
- this->niza=new Transakcija*[0];
- this->brTransakci=0;
- }
- ~Smetka(){
- for(int i=0;i<brTransakci;i++)
- {
- delete niza[i];
- }
- delete []niza;
- }
- Smetka& operator+=(Transakcija *t)
- {
- Transakcija **tmp=new Transakcija*[brTransakci+1];
- for(int i=0;i<brTransakci;i++)
- {
- tmp[i]=niza[i];
- }
- tmp[brTransakci++]=t;
- delete []niza;
- niza=tmp;
- return *this;
- }
- void izvestajVoDenari()
- {
- cout<<"Korisnikot so smetka: "<<brojSmetka<<" ima momentalno saldo od ";
- double suma=saldo;
- for(int i=0;i<brTransakci;i++)
- {
- suma+=niza[i]->voDenari();
- }
- cout<<suma<<" MKD"<<endl;
- }
- void pecatiTransakcii()
- {
- for(int i=0;i<brTransakci;i++)
- {
- niza[i]->pecati();
- }
- }
- };
- int main () {
- Smetka s ("300047024112789",1500);
- int n, den, mesec, godina, tip;
- double iznos;
- char valuta [3];
- cin>>n;
- cout<<"===VNESUVANJE NA TRANSAKCIITE I SPRAVUVANJE SO ISKLUCOCI==="<<endl;
- for (int i=0;i<n;i++){
- cin>>tip>>den>>mesec>>godina>>iznos;
- try{
- if (tip==2){
- cin>>valuta;
- Transakcija * t = new DeviznaTransakcija(den,mesec,godina,iznos,valuta);
- s+=t;
- //delete t;
- }
- else {
- Transakcija * t = new DenarskaTransakcija(den,mesec,godina,iznos);
- s+=t;
- //delete t;
- }
- }catch(InvalidDateException e)
- {
- e.printError();
- }
- catch(NotSupportedCurrencyException a)
- {
- a.printError();
- }
- }
- cout<<"===PECHATENJE NA SITE TRANSAKCII==="<<endl;
- s.pecatiTransakcii();
- cout<<"===IZVESHTAJ ZA SOSTOJBATA NA SMETKATA VO DENARI==="<<endl;
- s.izvestajVoDenari();
- //cout<<"===IZVESHTAJ ZA SOSTOJBATA NA SMETKATA VO EVRA==="<<endl;
- //s.izvestajVoEvra();
- //cout<<"===IZVESHTAJ ZA SOSTOJBATA NA SMETKATA VO DOLARI==="<<endl;
- //s.izvestajVoDolari();
- cout<<"\n===PROMENA NA KURSOT NA EVROTO I DOLAROT===\n"<<endl;
- double newEUR, newUSD;
- cin>>newEUR>>newUSD;
- Transakcija::setEUR(newEUR);
- Transakcija::setUSD(newUSD);
- cout<<"===IZVESHTAJ ZA SOSTOJBATA NA SMETKATA VO DENARI==="<<endl;
- s.izvestajVoDenari();
- //cout<<"===IZVESHTAJ ZA SOSTOJBATA NA SMETKATA VO EVRA==="<<endl;
- //s.izvestajVoEvra();
- //cout<<"===IZVESHTAJ ZA SOSTOJBATA NA SMETKATA VO DOLARI==="<<endl;
- //s.izvestajVoDolari();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement