SHARE
TWEET

Transakcii

KralMarko123 May 16th, 2019 130 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2. Трансакции Problem 17 (0 / 0)
  3. Да се креира класа Transakcija во која што ќе се чуваат информации за:
  4.  
  5. датумот на реализирање на банкарската трансакција:
  6. ден (int)
  7. месец (int)
  8. година (int)
  9. паричниот износ кој се однесува на трансакцијата (позитивен или негативен, тип double)
  10. моменталната вредност на еврото во денари (static double EUR), иницијално поставен на 61
  11. моменталната вредност на доларот во денари (static double USD), иницијално поставен на 50
  12. За класата да се имплемтнираат соодветните конструктори, како и да се дефинираат следните четири чисто виртуелни методи:
  13.  
  14. double voDenari()
  15. double voEvra()
  16. double voDolari()
  17. void pecati()
  18. Трансакциите можат да бидат денарски и девизни (DenarskaTransakcija и DeviznaTransakcija). За девизните трансакции се чува дополнителна информација за валутата на трансакцијата (низа од три знаци). Дозволени валути за девизните транскации се USD и EUR.
  19.  
  20. За двете изведени класи да се напишат соодветните конструктори, деструктори и да се препокријат потребните методи.
  21.  
  22. Да се дефинира класа Smetka во која што ќе се чуваат информации за:
  23.  
  24. извршените трансакции (динамички алоцирана низа од покажувачи кон класата Transakcija)
  25. број на извршените трансакции (int)
  26. број на сметката (низа од 15 знаци)
  27. почетно салдо во денари (double)
  28. За класата Smetka да се имплементираат:
  29.  
  30. потребен конструктор (со два аргументи, видете во main), деструктор
  31. оператор за додавање на нова трансакција во низата од трансакции +=
  32. void izvestajVoDenari() - функција што печати информации за сметката во форматот:
  33.  
  34. Korisnikot so smetka: [број на сметката] ima momentalno saldo od [салдо на сметката пресметано во денари] MKD
  35.  
  36. void izvestajVoEvra() - функција што печати информации за сметката во форматот:
  37.  
  38. Korisnikot so smetka: [број на сметката] ima momentalno saldo od [салдо на сметката пресметано во евра] EUR
  39.  
  40. void izvestajVoDolari() - функција што печати информации за сметката во форматот:
  41.  
  42. Korisnikot so smetka: [број на сметката] ima momentalno saldo od [салдо на сметката пресметано во долари] УСД
  43.  
  44. void pecatiTransakcii() - функција што ги печати сите внесени трансакции
  45.  
  46. Да се креираат класи за следните исклучоци:
  47.  
  48. InvalidDateException којшто се фрла доколку при креирање на трансакција не се испочитувани правилата 1<=ден<=31 и 1<=месец<=12
  49. NotSupportedCurrencyException којшто се фрла доколку при креирање на девизна трансакција се внесува вредност за валута што не е дозволена
  50. Овие исклучоци да се фрлат и да се фатат таму каде што е потребно. Истите при фаќање треба да печатат пораки од следниот формат:
  51.  
  52. Invalid Date 32/12/2018
  53. GBP is not a supported currency
  54. */
  55.  
  56.  
  57. #include<iostream>
  58. #include<cstring>
  59. using namespace std;
  60.  
  61. class NotSupportedCurrencyException{
  62. private:
  63.     char *valuta;
  64. public:
  65.     NotSupportedCurrencyException(char *valuta){
  66.         this -> valuta = new char[3];
  67.         strcpy(this -> valuta, valuta);
  68.     }
  69.     void pecatiPoraka(){
  70.         cout<< valuta << " is not a supported currency" << endl;
  71.     }
  72. };
  73. class InvalidDateException{
  74. private:
  75.     int den;
  76.     int mesec;
  77.     int godina;
  78. public:
  79.     InvalidDateException(int den, int mesec, int godina){
  80.         this -> den = den;
  81.         this -> mesec = mesec;
  82.         this -> godina = godina;
  83.     }
  84.     void pecatiPoraka(){
  85.         cout<< "Invalid Date " << den << "/" << mesec << "/" << godina << endl;
  86.     }
  87. };
  88.  
  89. class Transakcija {
  90. protected:
  91.     int den;
  92.     int mesec;
  93.     int godina;
  94.     double iznos;
  95. public:
  96.     static double EUR;
  97.     static double USD;
  98.     static void setEUR(double newEUR);
  99.     static void setUSD(double newUSD);
  100.     Transakcija(int den, int mesec, int godina, int iznos){
  101.         if(den < 1 || den > 31 || mesec < 1 || mesec > 12 ) throw InvalidDateException(den, mesec, godina);
  102.         this -> den = den;
  103.         this -> mesec = mesec;
  104.         this -> godina = godina;
  105.         this -> iznos = iznos;
  106.     }
  107.     virtual double voDenari() = 0;
  108.     virtual void pecati() = 0;
  109. };
  110.  
  111. double Transakcija::EUR = 61;
  112. double Transakcija::USD = 50;
  113. void Transakcija::setEUR(double newEUR){
  114.     EUR = newEUR;
  115. }
  116. void Transakcija::setUSD(double newUSD){
  117.     USD = newUSD;
  118. }
  119.  
  120. class DenarskaTransakcija : public Transakcija {
  121.  
  122. public:
  123.     DenarskaTransakcija(int den, int mesec, int godina, double iznos)
  124.         :Transakcija(den, mesec, godina, iznos){}
  125.     double voDenari(){
  126.         return iznos;
  127.     }
  128.     void pecati(){
  129.         cout<<den<<"/"<<mesec<<"/"<<godina<<" "<<iznos<<endl;
  130.     }
  131. };
  132.  
  133. class DeviznaTransakcija : public Transakcija {
  134. private:
  135.     char valuta[3];
  136. public:
  137.     DeviznaTransakcija(int den, int mesec, int godina, double iznos, char *valuta)
  138.         :Transakcija(den, mesec, godina, iznos){
  139.             if(strcmp(valuta, "USD") != 0 & strcmp(valuta, "EUR") != 0) throw NotSupportedCurrencyException(valuta);
  140.             strcpy(this->valuta, valuta);
  141.     }
  142.     double voDenari(){
  143.         if(strcmp(valuta, "USD") == 0) return this -> iznos * this -> USD;
  144.         return this -> iznos * this -> EUR;
  145.     }
  146.     void pecati(){
  147.         cout<<den<<"/"<<mesec<<"/"<<godina<<" "<<iznos<<" "<<valuta<<endl;
  148.     }
  149. };
  150.  
  151. class Smetka {
  152. private:
  153.     Transakcija **transakcii;
  154.     int brTransakcii;
  155.     char brojSmetka[15];
  156.     double saldoDenari;
  157. public:
  158.     Smetka(char *brojSmetka, double saldoDenari){
  159.         strcpy(this->brojSmetka, brojSmetka);
  160.         this -> saldoDenari = saldoDenari;
  161.         this -> brTransakcii = 0;
  162.         transakcii = new Transakcija*[this -> brTransakcii];
  163.     }
  164.     ~Smetka(){
  165.         delete [] transakcii;
  166.     }
  167.     Smetka& operator+=(Transakcija *novaTransakcija){
  168.         Transakcija** temp = new Transakcija*[brTransakcii + 1];
  169.         for(int i = 0; i < brTransakcii; i++){
  170.             temp[i] = transakcii[i];
  171.         }
  172.         temp[brTransakcii] = novaTransakcija;
  173.         brTransakcii++;
  174.         delete [] transakcii;
  175.         transakcii = temp;
  176.         return *this;
  177.     }
  178.     void pecatiTransakcii(){
  179.         for(int i = 0; i < brTransakcii; i++){
  180.             transakcii[i] -> pecati();
  181.         }
  182.     }
  183.     void izvestajVoDenari(){
  184.         double saldo = saldoDenari;
  185.         for(int i = 0; i < brTransakcii; i++){
  186.             saldo += transakcii[i] -> voDenari();
  187.         }
  188.         cout<<"Korisnikot so smetkaa: "<< brojSmetka << " ima momentalno saldo od "<< saldo <<" MKD"<<endl;
  189.     }
  190. };
  191.  
  192.  
  193. int main () {
  194.  
  195.     Smetka s ("300047024112789",1500);
  196.  
  197.     int n, den, mesec, godina, tip;
  198.     double iznos;
  199.     char valuta [3];
  200.  
  201.     cin>>n;
  202.     cout<<"===VNESUVANJE NA TRANSAKCIITE I SPRAVUVANJE SO ISKLUCOCI==="<<endl;
  203.     for (int i=0;i<n;i++){
  204.         cin>>tip>>den>>mesec>>godina>>iznos;
  205.         try{
  206.             if (tip==2){
  207.                 cin>>valuta;
  208.                 Transakcija * t = new DeviznaTransakcija(den,mesec,godina,iznos,valuta);
  209.                 s+=t;
  210.                 //delete t;
  211.             }
  212.             else {
  213.                 Transakcija * t = new DenarskaTransakcija(den,mesec,godina,iznos);
  214.                 s+=t;
  215.                 //delete t;
  216.             }
  217.         } catch(InvalidDateException ide){
  218.             ide.pecatiPoraka();
  219.         } catch(NotSupportedCurrencyException ce){
  220.             ce.pecatiPoraka();
  221.         }
  222.     }
  223.  
  224.     cout<<"===PECHATENJE NA SITE TRANSAKCII==="<<endl;
  225.     s.pecatiTransakcii();
  226.     cout<<"===IZVESHTAJ ZA SOSTOJBATA NA SMETKATA VO DENARI==="<<endl;
  227.     s.izvestajVoDenari();
  228.  
  229.  
  230.     cout<<"\n===PROMENA NA KURSOT NA EVROTO I DOLAROT===\n"<<endl;
  231.  
  232.  
  233.     double newEUR, newUSD;
  234.     cin>>newEUR>>newUSD;
  235.     Transakcija::setEUR(newEUR);
  236.     Transakcija::setUSD(newUSD);
  237.     cout<<"===IZVESHTAJ ZA SOSTOJBATA NA SMETKATA VO DENARI==="<<endl;
  238.     s.izvestajVoDenari();
  239.  
  240.  
  241.  
  242.  
  243.     return 0;
  244. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top