Advertisement
KralMarko123

Transakcii simple

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