Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<cstring>
- using namespace std;
- class InvalidDateException {
- int den, mesec, godina;
- public:
- InvalidDateException(int d,int m,int g) {
- den=d;mesec=m;godina=g;
- }
- void print() {
- cout<<"Invalid Date "<<den<<"/"<<mesec<<"/"<<godina<<endl;
- }
- };
- class NotSupportedCurrencyExcpetion {
- char currency[3];
- public:
- NotSupportedCurrencyExcpetion(char* c) {
- strcpy(currency,c);
- }
- void print() {
- cout<<currency<<" is not a supported currency"<<endl;
- }
- };
- class Transakcija
- {
- protected:
- int den;
- int mesec;
- int godina;
- double iznos;
- public:
- double getIznos() {return iznos;}
- static double EUR;
- static double USD;
- static void setEUR(double newEUR) {
- EUR=newEUR;
- }
- static void setUSD(double newUSD) {
- USD=newUSD;
- }
- virtual double voDenari()=0;
- virtual double voEvra()=0;
- virtual double voDolari()=0;
- virtual void pecati()=0;
- Transakcija (int d,int m,int g,double i)
- {
- if(d>31||d<1||m>12||m<1) throw InvalidDateException(d,m,g);
- den=d;
- mesec=m;
- godina=g;
- iznos=i;
- }
- virtual ~Transakcija() {}
- };
- double Transakcija::EUR=61;
- double Transakcija::USD=50;
- class DenarskaTransakcija:public Transakcija{
- public:
- DenarskaTransakcija(int d,int m,int g,double i):Transakcija(d,m,g,i) {}
- double voDenari()
- {
- return iznos;
- }
- double voEvra()
- {
- return iznos/EUR;
- }
- double voDolari()
- {
- return iznos/USD;
- }
- void pecati()
- {
- cout<<den<<"/"<<mesec<<"/"<<godina<<" "<<iznos<<" MKD"<<endl;
- }
- };
- class DeviznaTransakcija:public Transakcija{
- protected:
- char valuta[3];
- public:
- DeviznaTransakcija(int d,int m,int g,double i,char *v):Transakcija(d,m,g,i)
- {
- if(strcmp(v,"EUR")&&strcmp(v,"USD")&&strcmp(v,"MKD"))
- throw NotSupportedCurrencyExcpetion(v);
- strcpy(valuta,v);
- }
- char* getValuta() {return valuta;}
- double voDenari()
- {
- return iznos;
- }
- double voEvra()
- {
- return iznos/EUR;
- }
- double voDolari()
- {
- return iznos/USD;
- }
- void pecati()
- {
- cout<<den<<"/"<<mesec<<"/"<<godina<<" "<<iznos<<" "<<valuta<<endl;
- }
- };
- class Smetka{
- protected:
- Transakcija** transakcija;
- int broj;
- char brojSmetka[15];
- double saldo;
- public:
- Smetka(char *br,double s)
- {
- transakcija=0;
- broj=0;
- strcpy(brojSmetka,br);
- saldo=s;
- }
- void operator+=(Transakcija* t)
- {
- // DeviznaTransakcija* d=dynamic_cast<DeviznaTransakcija*>(t);
- // if(d==0)
- // saldo+=t->getIznos();
- // else {
- // if (!strcmp(d->getValuta(),"EUR"))
- // saldo+=d->getIznos()*Transakcija::EUR;
- // else
- // saldo+=d->getIznos()*Transakcija::USD;
- // }
- Transakcija** temp=new Transakcija*[broj+1];
- for(int i=0;i<broj;i++)
- {
- temp[i]=transakcija[i];
- }
- temp[broj]=t;
- broj++;
- delete [] transakcija;
- transakcija=temp;
- }
- void izvestajVoDenari()
- {
- cout<<"Korisnikot so smetka: "<<brojSmetka<<" ima momentalno saldo od "<<getSaldo()<<" MKD"<<endl;
- }
- void izvestajVoEvra()
- {
- cout<<"Korisnikot so smetka: "<<brojSmetka<<" ima momentalno saldo od "<<getSaldo()/Transakcija::EUR<<" EUR"<<endl;
- }
- void izvestajVoDolari()
- {
- cout<<"Korisnikot so smetka: "<<brojSmetka<<" ima momentalno saldo od "<<getSaldo()/Transakcija::USD<<" USD"<<endl;
- }
- void pecatiTransakcii() {
- for (int i=0;i<broj;i++)
- transakcija[i]->pecati();
- }
- double getSaldo() {
- double s=saldo;
- for(int i=0;i<broj;i++)
- {
- DeviznaTransakcija* d=dynamic_cast<DeviznaTransakcija*>(transakcija[i]);
- if(!d)
- s+=transakcija[i]->getIznos();
- else {
- if(!strcmp(d->getValuta(),"EUR"))
- s+=transakcija[i]->getIznos()*Transakcija::EUR;
- else
- s+=transakcija[i]->getIznos()*Transakcija::USD;
- }
- }
- return s;
- }
- };
- 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++){
- try
- {
- cin>>tip>>den>>mesec>>godina>>iznos;
- 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.print();
- }
- catch(NotSupportedCurrencyExcpetion e){
- e.print();
- }
- }
- 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