Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<cstring>
- using namespace std;
- class Exception {
- protected:
- char msg[50];
- public:
- Exception(char * msg){
- strcpy(this->msg, msg);
- }
- void showMessage() {
- cout<<msg;
- }
- }; // Да се креираат класи за следните исклучоци:
- class InvalidDateException : public Exception {// InvalidDateException којшто се фрла доколку при
- public:
- InvalidDateException(char * msg) : Exception(msg) {
- }
- };
- class NotSupportedCurrencyException : public Exception { // // NotSupportedCurrencyException којшто
- public: //се фрла доколку при креирање на девизна трансакција се
- NotSupportedCurrencyException(char * msg) : Exception(msg) {
- }
- };//внесува вредност за валута што не е дозволена
- class Transakcija { //Да се креира класа Transakcija
- protected://во која што ќе се чуваат информации за:
- // датумот на реализирање на банкарската трансакција:
- int den; //ден (int)
- int mesec; //месец (int)
- int godina; //година (int)
- double iznos; //паричниот износ кој се однесува на трансакцијата (позитивен или негативен, тип double)
- static double EUR; //моменталната вредност на еврото во денари (static double EUR)
- static double USD; //моменталната вредност на доларот во денари (static double USD)
- public://За класата да се имплемтнираат соодветните конструктори,
- Transakcija(){
- this->den = 0;
- this->mesec = 0;
- this->godina = 0;
- this->iznos = 0.0;
- } // defaulten go brr
- Transakcija(int den, int mesec, int godina, double iznos) {
- if(den<1 || den>31) // креирање на трансакција не се испочитувани правилата
- {
- cout<<"Invalid Date "<<den<<"/"<<mesec<<"/"<<godina<<endl;
- throw InvalidDateException(""); // 1<=ден<=31 и 1<=месец<=12
- }
- else if(mesec<1 || mesec > 12) {
- cout<<"Invalid Date "<<den<<"/"<<mesec<<"/"<<godina<<endl;
- throw InvalidDateException("");
- }
- this->den = den;
- this->mesec = mesec;
- this->godina = godina;
- this->iznos = iznos;
- } // konstruktor sos argumenti
- Transakcija (const Transakcija ©) {
- this->den = copy.den;
- this->mesec = copy.mesec;
- this->godina = copy.godina;
- this->iznos = copy.iznos;
- } // copy konstruktor
- static void setUSD(double brojce) {
- USD = brojce;
- }
- static void setEUR(double brojce) {
- EUR = brojce;
- }
- //како и да се дефинираат следните четири чисто виртуелни методи:
- virtual double voDenari() = 0; //double voDenari()
- virtual void pecati() = 0; //void pecati()
- };
- double Transakcija::EUR = 61;//иницијално поставен на 61
- double Transakcija::USD = 50;// иницијално поставен на 50
- class DenarskaTransakcija : public Transakcija { //Трансакциите можат да бидат денарски и девизни (DenarskaTransakcija
- public:
- DenarskaTransakcija() {} //defaulten nepotreben
- DenarskaTransakcija(int den, int mesec, int godina, double iznos) : Transakcija (den, mesec, godina, iznos) {}
- DenarskaTransakcija(const DenarskaTransakcija ©) : Transakcija(copy) {}
- void pecati() {
- cout<<den<<"/"<<mesec<<"/"<<godina<<" ";
- cout<<iznos<<" MKD"<<endl;
- }
- double voDenari() {
- return iznos;
- }
- };
- class DeviznaTransakcija : public Transakcija { //и DeviznaTransakcija).
- private://За девизните трансакции се чува дополнителна информација за
- char valuta[3]; //валутата на трансакцијата (низа од три знаци).
- public://За двете изведени класи да се напишат соодветните конструктори, деструктори и да се препокријат потребните методи.
- DeviznaTransakcija(){
- strcpy(this->valuta, "");
- }
- DeviznaTransakcija(int den, int mesec, int godina, double iznos, char * valuta) : Transakcija (den, mesec, godina, iznos) {
- if(strcmp(valuta, "USD")!=0 && strcmp(valuta, "EUR")!=0) { //Дозволени валути за девизните транскации се USD и EUR.
- cout<<valuta;
- throw NotSupportedCurrencyException(" is not a supported currency\n");
- }
- strcpy(this->valuta, valuta);
- }
- DeviznaTransakcija(const DeviznaTransakcija ©) : Transakcija(copy) {
- strcpy(this->valuta, copy.valuta);
- }
- void pecati() {
- cout<<den<<"/"<<mesec<<"/"<<godina<<" ";
- cout<<iznos<<" "<<valuta<<endl;
- }
- double voDenari() {
- if(strcmp(valuta, "EUR")==0)
- return iznos*EUR;
- if(strcmp(valuta, "USD")==0)
- return iznos*USD;
- else return 0.0;
- }
- };
- class Smetka { //Да се дефинира класа Smetka
- private://во која што ќе се чуваат информации за:
- Transakcija **niza; //извршените трансакции (динамички алоцирана низа од покажувачи кон класата Transakcija)
- int broj; //број на извршените трансакции (int)
- char smetka[15]; //број на сметката (низа од 15 знаци)
- double saldo; //почетно салдо во денари (double)
- public://За класата Smetka да се имплементираат:
- Smetka() {
- strcpy(this->smetka, "");
- this->saldo = 0.0;
- }
- Smetka(char * smetka, double saldo) {
- strcpy(this->smetka, smetka);
- this->saldo = saldo;
- this->niza = new Transakcija*[1];
- this->broj = 0;
- }//потребен конструктор (со два аргументи, видете во main), деструктор
- Smetka (const Smetka ©) {
- strcpy(this->smetka, copy.smetka);
- this->saldo = copy.saldo;
- this->broj = copy.broj;
- this->niza = new Transakcija * [copy.broj];
- for(int i=0; i<copy.broj; i++)
- this->niza[i] = copy.niza[i];
- }
- ~Smetka(){
- delete [] niza;
- }
- Smetka &operator+=(Transakcija *sm) {//оператор за додавање на нова трансакција во низата од трансакции +=
- Transakcija ** tmp = new Transakcija * [broj+1];
- for(int i=0; i<broj; i++)
- tmp[i] = niza[i];
- tmp[broj++] = sm;
- delete [] niza;
- niza = tmp;
- return *this;
- }
- void izvestajVoDenari() { //void izvestajVoDenari() - функција што печати информации за сметката во форматот:
- double total = 0.0;
- for(int i=0; i<broj; i++) {
- total = total + niza[i]->voDenari();
- }
- cout<<"Korisnikot so smetka: "<<smetka;//Korisnikot so smetka: [број на сметката]
- cout<<" ima momentalno saldo od "<<total+saldo;//ima momentalno saldo od [салдо на сметката пресметано во денари]
- cout<<" MKD"<<endl; //MKD
- }
- void pecatiTransakcii() { //void pecatiTransakcii() - функција што ги печати сите внесени трансакции
- for(int i=0; i<broj; 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;
- if (tip==2){
- try {
- cin>>valuta;
- Transakcija * t = new DeviznaTransakcija(den,mesec,godina,iznos,valuta);
- s+=t;
- }
- //delete t;
- catch(NotSupportedCurrencyException &exc) {
- exc.showMessage();
- }
- catch (InvalidDateException &exc) {
- exc.showMessage();
- }
- }
- else {
- try {
- Transakcija * t = new DenarskaTransakcija(den,mesec,godina,iznos);
- s+=t;
- }
- catch(NotSupportedCurrencyException &exc) {
- exc.showMessage();
- }
- catch (InvalidDateException &exc) {
- exc.showMessage();
- }
- //delete t;
- }
- }
- 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