Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Трансакции (simple version) Problem 17 (0 / 0)
- Да се креира класа Transakcija во која што ќе се чуваат информации за:
- датумот на реализирање на банкарската трансакција:
- ден (int)
- месец (int)
- година (int)
- паричниот износ кој се однесува на трансакцијата (позитивен или негативен, тип double)
- моменталната вредност на еврото во денари (static double EUR), иницијално поставен на 61
- моменталната вредност на доларот во денари (static double USD), иницијално поставен на 50
- За класата да се имплемтнираат соодветните конструктори, како и да се дефинираат следните четири чисто виртуелни методи:
- double voDenari()
- void pecati()
- Трансакциите можат да бидат денарски и девизни (DenarskaTransakcija и DeviznaTransakcija). За девизните трансакции се чува дополнителна информација за валутата на трансакцијата (низа од три знаци). Дозволени валути за девизните транскации се USD и EUR.
- За двете изведени класи да се напишат соодветните конструктори, деструктори и да се препокријат потребните методи.
- Да се дефинира класа Smetka во која што ќе се чуваат информации за:
- извршените трансакции (динамички алоцирана низа од покажувачи кон класата Transakcija)
- број на извршените трансакции (int)
- број на сметката (низа од 15 знаци)
- почетно салдо во денари (double)
- За класата Smetka да се имплементираат:
- потребен конструктор (со два аргументи, видете во main), деструктор
- оператор за додавање на нова трансакција во низата од трансакции +=
- void izvestajVoDenari() - функција што печати информации за сметката во форматот:
- Korisnikot so smetka: [број на сметката] ima momentalno saldo od [салдо на сметката пресметано во денари] MKD
- void pecatiTransakcii() - функција што ги печати сите внесени трансакции
- Да се креираат класи за следните исклучоци:
- InvalidDateException којшто се фрла доколку при креирање на трансакција не се испочитувани правилата 1<=ден<=31 и 1<=месец<=12
- NotSupportedCurrencyException којшто се фрла доколку при креирање на девизна трансакција се внесува вредност за валута што не е дозволена
- Овие исклучоци да се фрлат и да се фатат таму каде што е потребно. Истите при фаќање треба да печатат пораки од следниот формат:
- Invalid Date 32/12/2018
- GBP is not a supported currency
- */
- #include<iostream>
- #include<cstring>
- using namespace std;
- class InvalidDateException{
- int day, mesec, godina;
- public:
- InvalidDateException(int d, int m, int g){
- day = d;
- mesec = m;
- godina = g;
- }
- void pecati(){
- cout << "Invalid Date " << day <<"/"<<mesec<<"/"<<godina<<endl;
- }
- };
- class NotSupportedCurrencyException{
- char valuta[3];
- public:
- NotSupportedCurrencyException(char * v = ""){
- strcpy(valuta, v);
- }
- 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 d = 0, int m = 0, int g = 0, double i = 0){
- if (d < 1 || d > 31 || m < 1 || m > 12)
- throw InvalidDateException(d,m,g);
- den = d;
- mesec = m;
- godina = g;
- iznos = i;
- }
- virtual double voDenari() = 0;
- virtual void pecati() {}
- 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{
- 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 ((int)iznos) * USD;
- return (int)iznos * EUR;
- }
- void pecati(){
- if (strcmp(valuta, "MKD") == 0)
- cout<<den<<"/"<<mesec<<"/"<<godina<<" "<<iznos<<" " <<valuta<<endl;
- else
- cout<<den<<"/"<<mesec<<"/"<<godina<<" "<<(int)iznos<<" " <<valuta<<endl;
- }
- };
- class Smetka{
- 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(){
- //Korisnikot so smetka: [број на сметката] ima momentalno saldo od [салдо на сметката пресметано во денари] MKD
- 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