Advertisement
masterm1nd99

BKA

May 16th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.09 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4.  
  5. class NotSupportedCurrencyException{
  6. private:
  7. char *valuta;
  8. public:
  9. NotSupportedCurrencyException(char *valuta){
  10. this -> valuta = new char[3];
  11. strcpy(this -> valuta, valuta);
  12. }
  13. void pecatiPoraka(){
  14. cout<< valuta << " is not a supported currency" << endl;
  15. }
  16. };
  17. class InvalidDateException{
  18. private:
  19. int den;
  20. int mesec;
  21. int godina;
  22. public:
  23. InvalidDateException(int den, int mesec, int godina){
  24. this -> den = den;
  25. this -> mesec = mesec;
  26. this -> godina = godina;
  27. }
  28. void pecatiPoraka(){
  29. cout<< "Invalid Date " << den << "/" << mesec << "/" << godina << endl;
  30. }
  31. };
  32.  
  33. class Transakcija {
  34. protected:
  35. int den;
  36. int mesec;
  37. int godina;
  38. double iznos;
  39. public:
  40. static double EUR;
  41. static double USD;
  42. static void setEUR(double newEUR);
  43. static void setUSD(double newUSD);
  44. Transakcija(int den, int mesec, int godina, int iznos){
  45. if(den < 1 || den > 31 || mesec < 1 || mesec > 12 ) throw InvalidDateException(den, mesec, godina);
  46. this -> den = den;
  47. this -> mesec = mesec;
  48. this -> godina = godina;
  49. this -> iznos = iznos;
  50. }
  51. virtual double voDenari() = 0;
  52. virtual void pecati() = 0;
  53. };
  54.  
  55. double Transakcija::EUR = 61;
  56. double Transakcija::USD = 50;
  57. void Transakcija::setEUR(double newEUR){
  58. EUR = newEUR;
  59. }
  60. void Transakcija::setUSD(double newUSD){
  61. USD = newUSD;
  62. }
  63.  
  64. class DenarskaTransakcija : public Transakcija {
  65.  
  66. public:
  67. DenarskaTransakcija(int den, int mesec, int godina, double iznos)
  68. :Transakcija(den, mesec, godina, iznos){}
  69. double voDenari(){
  70. return iznos;
  71. }
  72. void pecati(){
  73. cout<<den<<"/"<<mesec<<"/"<<godina<<" "<<iznos<<endl;
  74. }
  75. };
  76.  
  77. class DeviznaTransakcija : public Transakcija {
  78. private:
  79. char valuta[3];
  80. public:
  81. DeviznaTransakcija(int den, int mesec, int godina, double iznos, char *valuta)
  82. :Transakcija(den, mesec, godina, iznos){
  83. if(strcmp(valuta, "USD") != 0 & strcmp(valuta, "EUR") != 0) throw NotSupportedCurrencyException(valuta);
  84. strcpy(this->valuta, valuta);
  85. }
  86. double voDenari(){
  87. if(strcmp(valuta, "USD") == 0) return this -> iznos * this -> USD;
  88. return this -> iznos * this -> EUR;
  89. }
  90. void pecati(){
  91. cout<<den<<"/"<<mesec<<"/"<<godina<<" "<<iznos<<" "<<valuta<<endl;
  92. }
  93. };
  94.  
  95. class Smetka {
  96. private:
  97. Transakcija **transakcii;
  98. int brTransakcii;
  99. char brojSmetka[15];
  100. double saldoDenari;
  101. public:
  102. Smetka(char *brojSmetka, double saldoDenari){
  103. strcpy(this->brojSmetka, brojSmetka);
  104. this -> saldoDenari = saldoDenari;
  105. this -> brTransakcii = 0;
  106. transakcii = new Transakcija*[this -> brTransakcii];
  107. }
  108. ~Smetka(){
  109. delete [] transakcii;
  110. }
  111. Smetka& operator+=(Transakcija *novaTransakcija){
  112. Transakcija** temp = new Transakcija*[brTransakcii + 1];
  113. for(int i = 0; i < brTransakcii; i++){
  114. temp[i] = transakcii[i];
  115. }
  116. temp[brTransakcii] = novaTransakcija;
  117. brTransakcii++;
  118. delete [] transakcii;
  119. transakcii = temp;
  120. return *this;
  121. }
  122. void pecatiTransakcii(){
  123. for(int i = 0; i < brTransakcii; i++){
  124. transakcii[i] -> pecati();
  125. }
  126. }
  127. void izvestajVoDenari(){
  128. double saldo = saldoDenari;
  129. for(int i = 0; i < brTransakcii; i++){
  130. saldo += transakcii[i] -> voDenari();
  131. }
  132. cout<<"Korisnikot so smetkaa: "<< brojSmetka << " ima momentalno saldo od "<< saldo <<" MKD"<<endl;
  133. }
  134. };
  135.  
  136.  
  137. int main () {
  138.  
  139. Smetka s ("300047024112789",1500);
  140.  
  141. int n, den, mesec, godina, tip;
  142. double iznos;
  143. char valuta [3];
  144.  
  145. cin>>n;
  146. cout<<"===VNESUVANJE NA TRANSAKCIITE I SPRAVUVANJE SO ISKLUCOCI==="<<endl;
  147. for (int i=0;i<n;i++){
  148. cin>>tip>>den>>mesec>>godina>>iznos;
  149. try{
  150. if (tip==2){
  151. cin>>valuta;
  152. Transakcija * t = new DeviznaTransakcija(den,mesec,godina,iznos,valuta);
  153. s+=t;
  154. //delete t;
  155. }
  156. else {
  157. Transakcija * t = new DenarskaTransakcija(den,mesec,godina,iznos);
  158. s+=t;
  159. //delete t;
  160. }
  161. } catch(InvalidDateException ide){
  162. ide.pecatiPoraka();
  163. } catch(NotSupportedCurrencyException ce){
  164. ce.pecatiPoraka();
  165. }
  166. }
  167.  
  168. cout<<"===PECHATENJE NA SITE TRANSAKCII==="<<endl;
  169. s.pecatiTransakcii();
  170. cout<<"===IZVESHTAJ ZA SOSTOJBATA NA SMETKATA VO DENARI==="<<endl;
  171. s.izvestajVoDenari();
  172.  
  173.  
  174. cout<<"\n===PROMENA NA KURSOT NA EVROTO I DOLAROT===\n"<<endl;
  175.  
  176.  
  177. double newEUR, newUSD;
  178. cin>>newEUR>>newUSD;
  179. Transakcija::setEUR(newEUR);
  180. Transakcija::setUSD(newUSD);
  181. cout<<"===IZVESHTAJ ZA SOSTOJBATA NA SMETKATA VO DENARI==="<<endl;
  182. s.izvestajVoDenari();
  183.  
  184.  
  185.  
  186.  
  187. return 0;
  188. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement