Advertisement
1abinot

Untitled

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