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;
- int mesec;
- int godina;
- public:
- InvalidDateException(int den,int mesec,int godina){
- this->den=den;
- this->mesec=mesec;
- this->godina=godina;
- }
- void print(){
- cout<<"Invalid Date "<<den<<"/"<<mesec<<"/"<<godina<<endl;
- }
- };
- class NotSupportedCurrencyException{
- private:
- char dev[3];
- public:
- NotSupportedCurrencyException(char *dev){
- strcpy(this->dev,dev);
- }
- void print(){
- cout<<dev<<" 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.0):den(den),mesec(mesec),godina(godina),iznos(iznos){}
- static void setEUR(double e){
- EUR=e;
- }
- static void setUSD(double u){
- USD=u;
- }
- virtual double voDenari()=0;
- virtual void pecati()=0;
- virtual double voDolari()=0;
- virtual double voEvra()=0;
- virtual ~Transakcija()=0;
- };
- Transakcija::~Transakcija(){}
- double Transakcija::EUR=61;
- double Transakcija::USD=50;
- class DenarskaTransakcija: public Transakcija{
- public:
- DenarskaTransakcija(int den,int mesec,int godina,double iznos):Transakcija(den,mesec,godina,iznos){}
- void pecati(){
- cout<<den<<"/"<<mesec<<"/"<<godina<<" "<<iznos<<" MKD"<<endl;
- }
- double voDenari(){
- return iznos;
- }
- double voEvra(){
- return iznos/Transakcija::EUR;
- }
- double voDolari(){
- return iznos/Transakcija::USD;
- }
- };
- class DeviznaTransakcija:public Transakcija{
- private:
- char dev[3];
- public:
- DeviznaTransakcija(int den,int mesec,int godina,double iznos, char *dev):Transakcija(den,mesec,godina,iznos){
- strcpy(this->dev,dev);
- }
- /*double voDenari(){
- return (!strcmp(dev,"EUR")) ? iznos*Transakcija::EUR : iznos*Transakcija::USD;
- }*/
- double voDenari(){
- //return (!strcmp(dev,"EUR")) ? iznos*Transakcija::EUR : iznos*Transakcija::USD;
- if(!(strcmp(dev,"EUR"))){
- return iznos*Transakcija::EUR;
- }
- else{
- return iznos*Transakcija::USD;
- }
- }
- double voEvra(){
- //if(!strcmp(dev,"EUR")){
- // return iznos;
- //}
- //else if(!strcmp(dev,"USD")){
- // return iznos/(Transakcija::EUR/Transakcija::USD);
- //}
- /* else if(!strcmp(dev,"")){
- return iznos*Transakcija::USD/Transakcija::EUR;
- }*/
- // else{
- return iznos/Transakcija::EUR;
- // }
- }
- double voDolari(){
- // if(!strcmp(dev,"USD")){
- // return iznos;
- // }
- // else if(!strcmp(dev,"EUR")){
- // return iznos()*(Transakcija::EUR/Transakcija::USD);
- // }
- // else{
- return iznos/Transakcija::USD;
- // }
- }
- void pecati(){
- cout<<den<<"/"<<mesec<<"/"<<godina<<" "<<iznos<<" "<<dev<<endl;
- }
- };
- class Smetka{
- private:
- Transakcija **izvrsheni;
- int brIzvrsheni;
- char brSmetka[15];
- double saldo;
- public:
- Smetka(const char *brSmetka, double saldo){
- strcpy(this->brSmetka,brSmetka);
- this->saldo=saldo;
- this->brIzvrsheni=0;
- izvrsheni=new Transakcija*[brIzvrsheni];
- }
- Smetka(const Smetka &s){
- strcpy(this->brSmetka,s.brSmetka);
- this->saldo=s.saldo;
- this->brIzvrsheni=s.brIzvrsheni;
- izvrsheni=new Transakcija*[s.brIzvrsheni];
- for(int i=0;i<s.brIzvrsheni;i++){
- izvrsheni[i]=s.izvrsheni[i];
- }
- }
- Smetka &operator =(const Smetka &s){
- if(this != &s){
- delete [] izvrsheni;
- strcpy(this->brSmetka,s.brSmetka);
- this->saldo=s.saldo;
- this->brIzvrsheni=s.brIzvrsheni;
- izvrsheni=new Transakcija*[s.brIzvrsheni];
- for(int i=0;i<s.brIzvrsheni;i++){
- izvrsheni[i]=s.izvrsheni[i];
- }
- }
- return *this;
- }
- ~Smetka(){
- for(int i=0;i<brIzvrsheni;i++){
- delete izvrsheni[i];
- }
- delete[] izvrsheni;
- }
- Smetka &operator +=(Transakcija *t){
- Transakcija **temp=new Transakcija*[brIzvrsheni+1];
- for(int i=0;i<brIzvrsheni;i++){
- temp[i]=izvrsheni[i];
- }
- temp[brIzvrsheni++]=t;
- delete[] izvrsheni;
- izvrsheni=temp;
- return *this;
- }
- void izvestajVoDenari(){
- double suma=saldo;
- cout<<"Korisnikot so smetka: "<<brSmetka<<" ima momentalno saldo od ";
- for(int i=0;i<brIzvrsheni;i++){
- suma+=izvrsheni[i]->voDenari();
- }
- cout<<suma<<" MKD"<<endl;
- }
- void izvestajVoEvra(){
- double sumich=saldo;
- cout<<"Korisnikot so smetka: "<<brSmetka<<" ima momentalno saldo od ";
- for(int i=0;i<brIzvrsheni;i++){
- sumich+=izvrsheni[i]->voEvra();
- }
- cout<<sumich<<" EUR"<<endl;
- }
- void izvestajVoDolari(){
- double sum=saldo;
- cout<<"Korisnikot so smetka: "<<brSmetka<<" ima momentalno saldo od ";
- for(int i=0;i<brIzvrsheni;i++){
- sum+=izvrsheni[i]->voDolari();
- }
- cout<<sum<<" USD"<<endl;
- }
- void pecatiTransakcii(){
- for(int i=0;i<brIzvrsheni;i++){
- izvrsheni[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;
- if(den<1 || den>31 || mesec<1 || mesec>12)
- throw InvalidDateException(den,mesec,godina);
- if(strcmp(valuta,"EUR") && strcmp(valuta,"USD"))
- throw NotSupportedCurrencyException(valuta);
- Transakcija * t = new DeviznaTransakcija(den,mesec,godina,iznos,valuta);
- s+=t;
- //delete t;
- }
- else {
- if(den<1 || den>31 || mesec<1 || mesec>12)
- throw InvalidDateException(den,mesec,godina);
- Transakcija * t = new DenarskaTransakcija(den,mesec,godina,iznos);
- s+=t;
- //delete t;
- }
- }
- catch(InvalidDateException a) {
- a.print();
- }
- catch(NotSupportedCurrencyException a) {
- a.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