Advertisement
masterm1nd99

transssssssimpl

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