Advertisement
Guest User

Trans

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