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 day, mesec, godina;
- public:
- InvalidDateException(int day, int mesec, int godina)
- {
- this->day = day;
- this->mesec = mesec;
- this->godina = godina;
- }
- void pecati()
- {
- cout << "Invalid Date " << day <<"/"<<mesec<<"/"<<godina<<endl;
- }
- };
- class NotSupportedCurrencyException
- {
- private:
- char valuta[3];
- public:
- NotSupportedCurrencyException(char * valuta = "")
- {
- strcpy(this->valuta, valuta);
- }
- void print()
- {
- cout << valuta << " is not a supported currency" << endl;
- }
- };
- class Transakcija
- {
- protected:
- int den, mesec, godina;
- double iznos;
- static double EUR, USD;
- public:
- Transakcija(int den = 0, int mesec = 0, int godina = 0, double iznos = 0)
- {
- if (den < 1 || den > 31 || mesec < 1 || mesec > 12)
- throw InvalidDateException(den,mesec,godina);
- this->den = den;
- this->mesec = mesec;
- this->godina = godina;
- this->iznos = iznos;
- }
- virtual double voDenari() = 0;
- virtual void pecati() = 0;
- static void setEUR(double newEUR)
- {
- EUR = newEUR;
- }
- static void setUSD(double newUSD)
- {
- USD = newUSD;
- }
- };
- double Transakcija::EUR = 61;
- double Transakcija::USD = 50;
- class DenarskaTransakcija:public Transakcija{
- public:
- DenarskaTransakcija(int d = 0, int m = 0, int g = 0, double i = 0):Transakcija(d,m,g,i){}
- double voDenari()
- {
- return iznos;
- }
- void pecati()
- {
- cout<<den<<"/"<<mesec<<"/"<<godina<<" "<<iznos<<" MKD"<<endl;
- }
- };
- class DeviznaTransakcija:public Transakcija
- {
- private:
- char valuta[3];
- public:
- DeviznaTransakcija(int d = 0, int m = 0, int g = 0, double i = 0, char * v = ""):Transakcija(d,m,g,i)
- {
- if (strcmp(v, "EUR") == 0 || strcmp(v, "USD") == 0)
- strcpy(valuta, v);
- else
- throw NotSupportedCurrencyException(v);
- }
- double voDenari()
- {
- if (strcmp(valuta, "USD") == 0)
- return iznos * USD;
- else
- return iznos * EUR;
- }
- void pecati()
- {
- if (strcmp(valuta, "MKD") == 0)
- cout<<den<<"/"<<mesec<<"/"<<godina<<" "<<iznos<<" " <<valuta<<endl;
- else
- cout<<den<<"/"<<mesec<<"/"<<godina<<" "<<iznos<<" " <<valuta<<endl;
- }
- };
- class Smetka
- {
- private:
- Transakcija ** niza;
- int n;
- char broj[15];
- double saldo;
- public:
- Smetka(const char * broj = "", double saldo = 0)
- {
- niza = new Transakcija*[0];
- n = 0;
- strcpy(this->broj, broj);
- this->saldo = saldo;
- }
- Smetka &operator += (Transakcija *k)
- {
- Transakcija ** temp = new Transakcija*[n + 1];
- for (int i = 0; i < n; i++)
- temp[i] = niza[i];
- temp[n++] = k;
- delete [] niza;
- niza = new Transakcija*[n];
- niza = temp;
- return *this;
- }
- void izvestajVoDenari()
- {
- double pocetno = saldo;
- for (int i = 0; i < n; i++)
- pocetno += niza[i] -> voDenari();
- cout << "Korisnikot so smetka: " << broj << " ima momentalno saldo od " << pocetno << " MKD" << endl;
- }
- void pecatiTransakcii()
- {
- for (int i = 0; i < n; 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 invalid){
- invalid.pecati();
- }
- catch(NotSupportedCurrencyException invalid){
- invalid.print();
- }
- }
- cout<<"===PECHATENJE NA SITE TRANSAKCII==="<<endl;
- s.pecatiTransakcii();
- cout<<"===IZVESHTAJ ZA SOSTOJBATA NA SMETKATA VO DENARI==="<<endl;
- s.izvestajVoDenari();
- 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();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement