Advertisement
Guest User

Untitled

a guest
Jun 18th, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.49 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. class Datum
  5. {
  6. public:
  7. int mesec;
  8. int godina;
  9.  
  10. Datum()
  11. {
  12. mesec = 1;
  13. godina = 2019;
  14. }
  15.  
  16. Datum(int mesec, int godina)
  17. {
  18. this->mesec = mesec;
  19. this->godina = godina;
  20. }
  21.  
  22. bool jednakSa(Datum d)
  23. {
  24. return mesec == d.mesec && godina == d.godina;
  25. }
  26.  
  27. void ispis()
  28. {
  29. cout << mesec << "/" << godina;
  30. }
  31. };
  32.  
  33. class Karta
  34. {
  35. public:
  36. int id;
  37.  
  38. virtual bool valjana(float cena, Datum datum) = 0;
  39.  
  40. virtual void ispis() = 0;
  41. };
  42.  
  43. class MesecnaKarta : public Karta
  44. {
  45. public:
  46. string imeVlasnika;
  47. Datum datumVazenja;
  48.  
  49. MesecnaKarta()
  50. {
  51. imeVlasnika = "Kambo";
  52. }
  53.  
  54. void produzi(int mesec, int godina)
  55. {
  56. datumVazenja.mesec += mesec;
  57. datumVazenja.godina += godina;
  58. }
  59.  
  60. bool valjana(float cena, Datum datum)
  61. {
  62. if (datumVazenja.godina < datum.godina)
  63. return false;
  64. else if (datumVazenja.godina == datum.godina)
  65. {
  66. if (datumVazenja.mesec < datumVazenja.mesec)
  67. return false;
  68. else
  69. return true;
  70. }
  71. else
  72. return true;
  73. }
  74.  
  75. void ispis()
  76. {
  77. cout << imeVlasnika << endl;
  78. cout << "vazi do: ";
  79. datumVazenja.ispis();
  80. cout << endl;
  81. }
  82. };
  83.  
  84. class PojedinacnaKarta : public Karta
  85. {
  86. public:
  87. float uplaceniIznos;
  88.  
  89. PojedinacnaKarta()
  90. {
  91. uplaceniIznos = 50;
  92. }
  93.  
  94. PojedinacnaKarta(float iznos)
  95. {
  96. uplaceniIznos = iznos;
  97. }
  98.  
  99. void dopuni(float iznos)
  100. {
  101. uplaceniIznos += iznos;
  102. }
  103.  
  104. bool valjana(float cena, Datum datum)
  105. {
  106. bool ok = uplaceniIznos >= cena;
  107. uplaceniIznos -= cena;
  108. return ok;
  109. }
  110.  
  111. void ispis()
  112. {
  113. cout << "uplaceni iznos je: " << uplaceniIznos << endl;
  114. }
  115. };
  116.  
  117. class Aparat
  118. {
  119. public:
  120. Karta **karte; // niz pokazivaca (jedan * je za niz, a drugi za pokazivace)
  121. int brojKarata; // broj elemenata niza
  122.  
  123. Aparat(int brKarata = 10)
  124. {
  125. brojKarata = brKarata;
  126. karte = new Karta*[brojKarata];
  127.  
  128. for (int i = 0; i < brojKarata; i++)
  129. {
  130. char izbor;
  131. cout << "Je li karta mesecna ili pojedinacna? (m/p): ";
  132. cin >> izbor;
  133.  
  134. if (izbor == 'm')
  135. {
  136. karte[i] = new MesecnaKarta();
  137.  
  138. string imeVlasnika;
  139. cout << "Unesite ime vlasnika: ";
  140. cin >> imeVlasnika;
  141. ((MesecnaKarta *) karte[i])->imeVlasnika = imeVlasnika;
  142.  
  143. cout << "Unesite mesec vazenja: ";
  144. int mesec;
  145. cin >> mesec;
  146. cout << "Unesite godinu vazenja: ";
  147. int godina;
  148. cin >> godina;
  149. Datum datumVazenja(mesec, godina);
  150. ((MesecnaKarta *) karte[i])->datumVazenja = datumVazenja;
  151.  
  152. unosIdentifikatora(i);
  153. }
  154. else
  155. {
  156. karte[i] = new PojedinacnaKarta();
  157.  
  158. cout << "Unesite uplaceni iznos: ";
  159. float iznos;
  160. cin >> iznos;
  161. ((PojedinacnaKarta *) karte[i])->uplaceniIznos = iznos;
  162.  
  163. unosIdentifikatora(i);
  164. }
  165. }
  166. }
  167.  
  168. // Trazi korisniku da unese identifikator sve dok ne unese ispravan.
  169. // Ispravan je ako ne postoji ni jedan isti u nisu (pre njega).
  170. void unosIdentifikatora(int indeks)
  171. {
  172. int id;
  173.  
  174. // beskonacna petlja
  175. for (;;)
  176. {
  177. cout << "Unesite identifikator: ";
  178. cin >> id;
  179.  
  180. for (int i = 0; i < indeks; i++)
  181. {
  182. if (karte[i]->id == id)
  183. {
  184. cout << "Vec postoji takav identifikator, pokusajte ponovo" << endl;
  185. continue;
  186. }
  187. }
  188.  
  189. break; // id je u redu, moze da se doda karti
  190. }
  191.  
  192. karte[indeks]->id = id;
  193. }
  194.  
  195. void valjanostKarti(float cena, Datum datum)
  196. {
  197. for (int i = 0; i < brojKarata; i++)
  198. {
  199. string valjanost = karte[i]->valjana(cena, datum) ? " je valjana" : " nije valjana";
  200. karte[i]->ispis();
  201. cout << " - ";
  202. cout << karte[i]->id;
  203. cout << " - ";
  204. cout << valjanost << endl;
  205. }
  206. }
  207. };
  208.  
  209. int main()
  210. {
  211. Aparat a(3);
  212. Datum d(5, 2020);
  213. a.valjanostKarti(12, d);
  214.  
  215. return 0;
  216. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement