Advertisement
Guest User

Untitled

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