Advertisement
masterm1nd99

fdasfdas

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