Advertisement
Zlaja7

Pr II

Jun 23rd, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.71 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. enum enumPredmeti { Matematika, Historija, Geografia, Hemija, Biologija, Engleski };
  6. char *Predmeti[6] = { "Matematika" , "Historija" , "Geografia" , "Hemija" , "Biologija", "Engleski" };
  7. enum enumRazredi { I, II, III, IV };
  8. char *Razredi[5] = { "I" , "II" , "III", "IV" };
  9. char *crt = "\n--------------------------------------------\n";
  10.  
  11. struct Datum
  12. {
  13. int * _dan, *_mjesec, *_godina;
  14. void Unos(int d, int m, int g)
  15. {
  16. _dan = new int(d);
  17. _mjesec = new int(m);
  18. _godina = new int(g);
  19. }
  20. void Ispis() { cout << *_dan << "/" << *_mjesec << "/" << *_godina << endl; }
  21. void Dealociraj() { delete _dan; delete _mjesec; delete _godina; }
  22. };
  23.  
  24. struct Kurs
  25. {
  26. enumPredmeti _predmet;
  27. enumRazredi _razredi;
  28. Datum * _pocetak;
  29. Datum * _kraj;
  30. char * _imePredavaca;
  31. void Unos(enumPredmeti predmet, enumRazredi razred, Datum pocetak, Datum kraj, char * imePredavaca)
  32. {
  33. _predmet = predmet;
  34. _razredi = razred;
  35. _pocetak = new Datum;
  36. _pocetak->Unos(*pocetak._dan, *pocetak._mjesec, *pocetak._godina);
  37. _kraj = new Datum;
  38. _kraj->Unos(*kraj._dan, *kraj._mjesec, *kraj._godina);
  39. int size = strlen(imePredavaca) + 1;
  40. _imePredavaca = new char[size];
  41. strcpy_s(_imePredavaca, size, imePredavaca);
  42. }
  43. void Ispis() {
  44. cout << "Naziv predmeta -> " << Predmeti [(int)_predmet] << endl;
  45. cout << "Rared-> " << Razredi[(int) _razredi] << endl;
  46. cout << "Pocetak kursa -> "; _pocetak->Ispis(); cout << endl;
  47. cout << "Kraj kursa -> "; _kraj->Ispis(); cout << endl;
  48. cout << "Ime predavaca -> " << _imePredavaca << endl;
  49. }
  50. void Dealociraj()
  51. {
  52. delete[] _imePredavaca; _imePredavaca = nullptr;
  53. _pocetak->Dealociraj();
  54. _kraj->Dealociraj();
  55. }
  56. };
  57.  
  58. struct Polaznik
  59. {
  60. Datum * _datumRodjenja;
  61. char * _imePrezime;
  62. void Unos(Datum datumRodjenja, char * imePrezime)
  63. {
  64. int size = strlen(imePrezime) + 1;
  65. _imePrezime = new char[size];
  66. _datumRodjenja = new Datum;
  67. strcpy_s(_imePrezime, size, imePrezime);
  68. _datumRodjenja->Unos(*datumRodjenja._dan, *datumRodjenja._mjesec, *datumRodjenja._godina);
  69. }
  70. void Dealociraj() { delete[] _imePrezime; _imePrezime = nullptr; }
  71. void Ispis() {
  72. cout << "Ime prezime -> " << _imePrezime << endl;
  73. cout << "Datum rodjenja ->"; _datumRodjenja->Ispis();
  74. }
  75. };
  76. struct Polaganja
  77. {
  78. Polaznik * _polaznik;
  79. Kurs * _kurs;
  80. Datum * _datumPolaganja;
  81. int _ocjena; //ocjene su u rasponu od 1 do 5
  82. void Unos(Polaznik p, Kurs k, Datum date, int ocjena) {
  83. _polaznik = new Polaznik;
  84. _polaznik->Unos(*p._datumRodjenja, p._imePrezime);
  85. _kurs = new Kurs;
  86. _kurs->Unos(k._predmet, k._razredi, *k._pocetak, *k._kraj, k._imePredavaca);
  87. _datumPolaganja = new Datum;
  88. _datumPolaganja->Unos(*date._dan, *date._mjesec, *date._godina);
  89. _ocjena = ocjena;
  90. }
  91. void Dealociraj() {
  92. _polaznik->Dealociraj();
  93. _kurs->Dealociraj();
  94. _datumPolaganja->Dealociraj();
  95. delete[] _polaznik; _polaznik = nullptr;
  96. delete[] _kurs; _kurs = nullptr;
  97. delete[] _datumPolaganja; _datumPolaganja = nullptr;
  98. }
  99. void Ispis() {
  100. _polaznik->Ispis();
  101. cout << endl;
  102. _kurs->Ispis();
  103. cout << endl;
  104. _datumPolaganja->Ispis();
  105. cout << endl;
  106. cout << "Ocjena -> " << _ocjena << endl;
  107. }
  108.  
  109. };
  110.  
  111. struct EdukacijskiCentar
  112. {
  113. char * _nazivCentra;
  114. Kurs * _kursevi[50];//JEDAN EDUKACIJSKI CENTAR MOZE NUDITI NAJVISE 50 KURSEVA
  115. int _trenutnoKurseva;
  116. Polaganja * _polaganja;
  117. int _trenutnoPolaganja;
  118. void Unos(char *nazivKursa) {
  119. _nazivCentra = new char[strlen(nazivKursa) + 1];
  120. strcpy_s(_nazivCentra, strlen(nazivKursa) + 1, nazivKursa);
  121. for (int i = 0; i < 50; i++)
  122. {
  123. _kursevi[i] = nullptr;
  124. }
  125. _polaganja = nullptr;
  126. _trenutnoPolaganja = 0;
  127. _trenutnoKurseva = 0;
  128. }
  129. int prebrojiDane(Datum d) {
  130. return *d._dan + *d._mjesec * 30 + *d._godina * 365;
  131. }
  132. bool DodajKurs(Kurs k)
  133. {
  134. for (int i = 0; i < _trenutnoKurseva; i++)
  135. {
  136. if (_kursevi[i] != nullptr && prebrojiDane(*_kursevi[i]->_kraj) > prebrojiDane(*k._pocetak)) {
  137. return false;
  138. }
  139. }
  140. _kursevi[_trenutnoKurseva] = new Kurs;
  141. _kursevi[_trenutnoKurseva]->Unos(k._predmet, k._razredi, *k._pocetak, *k._kraj, k._imePredavaca);
  142. _trenutnoKurseva++;
  143. return true;
  144.  
  145. }
  146. bool DodajPolaganje(Polaganja p) {
  147. bool imaNema = false;
  148. for (int i = 0; i < 50; i++)
  149. {
  150. if (_kursevi[i]->_predmet == p._kurs[i]._predmet) {
  151. imaNema = true;
  152. break;
  153. }
  154. }
  155. if (!imaNema) {
  156. return false;
  157. }
  158. for (int i = 0; i < _trenutnoPolaganja; i++)
  159. {
  160. if (_polaganja[i]._kurs[i]._predmet == p._kurs[i]._predmet && _polaganja[i]._ocjena > p._ocjena) {
  161. return false;
  162. }
  163. }
  164. Polaganja *temp = new Polaganja[_trenutnoPolaganja + 1];
  165. for (int i = 0; i < _trenutnoPolaganja; i++)
  166. {
  167. temp[i].Unos(*_polaganja[i]._polaznik, *_polaganja[i]._kurs, *_polaganja[i]._datumPolaganja, _polaganja[i]._ocjena);
  168. _polaganja[i].Dealociraj();
  169. }
  170. delete[]_polaganja; _polaganja = nullptr;
  171. temp[_trenutnoPolaganja].Unos(*p._polaznik, *p._kurs, *p._datumPolaganja, p._ocjena);
  172. _polaganja = temp;
  173. temp = nullptr;
  174. _trenutnoPolaganja++;
  175. }
  176. Polaganja *PolaganjaByDatumIRazred(Datum OD, Datum DO, enumRazredi r, int &brojPolaganja)
  177. {
  178. brojPolaganja = 0;
  179. Polaganja *niz = new Polaganja[_trenutnoPolaganja];
  180. for (int i = 0; i < _trenutnoPolaganja; i++)
  181. {
  182. if (prebrojiDane(OD) < prebrojiDane(*_polaganja[i]._datumPolaganja) && prebrojiDane(DO) > prebrojiDane(*_polaganja[i]._datumPolaganja))
  183. {
  184. cout << *_polaganja[i]._polaznik->_imePrezime << endl;
  185. niz[brojPolaganja++].Unos(*_polaganja[i]._polaznik, *_polaganja[i]._kurs, *_polaganja[i]._datumPolaganja, _polaganja[i]._ocjena);
  186. }
  187. }
  188. return niz;
  189. }
  190. };
  191.  
  192. void main()
  193. {
  194.  
  195. /*Informacije o ispitu
  196. 1. BROJ I TIPOVI PARAMETARA MORAJU BITI IDENTICNI ONIMA U TESTNOM CODE-U
  197. (OSIM UKOLIKO IMATE OPRAVDANU POTREBU ZA MODIFIKACIJOM). U SUPROTNOM SE RAD NEÆE BODOVATI
  198. 2. KREIRAJTE .DOC FAJL SA VAŠIM BROJEM INDEKSA ( NPR. IB130030.DOC BEZ IMENA I PREZIMENA),
  199. TE NA KRAJU ISPITA U NJEGA KOPIRAJTE RJEŠENJA VAŠIH ZADATAKA.
  200. NE PREDAVATI .TXT ILI .CPP FAJLOVE. TAKOÐER, UKLONITE SVE DIJELOVE CODE-A KOJI NISU IMPLEMENTIRANI
  201. 3. TOKOM IZRADE ISPITA NIJE DOZVOLJENO KORIŠTENJE HELP-A
  202. 4. TOKOM IZRADE ISPITA MOGU BITI POKRENUTA SAMO TRI PROGRAMA: PDF READER (ISPITNI ZADACI),
  203. MS VISUAL STUDIO, MS WORD (U KOJI ÆETE KOPIRATI VAŠA RJEŠENJA)
  204. 5. BEZ OBZIRA NA TO DA LI SU ISPITNI ZADACI URAÐENI, SVI STUDENTI KOJI SU PRISTUPILI ISPITU MORAJU PREDATI SVOJ RAD
  205. */
  206.  
  207. Datum datum1, datum2, datum3, datum4, datum5, datum6;
  208. datum1.Unos(26, 11, 2015);
  209. datum2.Unos(29, 5, 2016);
  210. datum3.Unos(5, 6, 2016);
  211. datum4.Unos(15, 8, 2016);
  212. datum5.Unos(13, 7, 2016);
  213. datum6.Unos(22, 9, 2016);
  214.  
  215. Kurs matematika, hemija, biologija, engleski;
  216. matematika.Unos(Matematika, III, datum1, datum2, "Nina Bijedic");
  217. hemija.Unos(Hemija, III, datum2, datum3, "Murat Praso");
  218. biologija.Unos(Biologija, IV, datum3, datum4, "Jasmin Azemovic");
  219. engleski.Unos(Engleski, II, datum3, datum4, "Iris Memic");
  220.  
  221. Datum rodjenje1, rodjenje2;
  222. rodjenje1.Unos(22, 8, 1982);
  223. rodjenje2.Unos(22, 4, 1992); // ovoga nije bilo, ali morao sam sam dodati kako bi radilo, vjv je profa zaboravio
  224. Polaznik denis, zanin, indira;
  225. denis.Unos(rodjenje1, "Denis Music");
  226. zanin.Unos(rodjenje2, "Zanin Vejzovic");
  227.  
  228.  
  229. Polaganja denisMatematika, zaninHemija, denisBiologija;
  230. denisMatematika.Unos(denis, matematika, datum5, 3);//3 predstavlja ostvareni uspjeh/ocjenu, a uspjesno
  231. // polozenim se smatra svaki kurs na kome je polaznik
  232. // ostvario ocjenu veæu od 1
  233.  
  234. zaninHemija.Unos(zanin, hemija, datum6, 93);
  235.  
  236. EdukacijskiCentar mostar;
  237. mostar.Unos("ECM - Edukacijski Center Mostar");
  238. //jedan edukacijski centar moze nuditi vise istih kurseva (npr. Matematika), ali se oni moraju realizovati
  239. //u razlictim periodima (pocetak-kraj) tj. ne smiju se preklapati
  240. //novi kurs istog tipa (npr. Matematika) se mora realizovati nakon prethodno dodanog
  241. //npr. ako prethodni kurs Matematika traje 01.03.2016 - 01.04.2016, onda se novi kurs Matematika moze dodati
  242. //jedino ako pocinje nakon 01.04.2016
  243. if (mostar.DodajKurs(matematika))
  244. {
  245. cout << crt << "KURS USPJESNO REGISTROVAN" << crt;
  246. matematika.Ispis();
  247. cout << crt;
  248. }
  249. //nije moguce dodati polaganje onog kursa koji nije evidentiran (registrovan, ponudjen) u tom edukacijskom centru
  250. //kurseve je moguce najkasnije polagati 15 dana od dana zavrsetka (kraja) posljednje dodanog kursa
  251. //jedan polaznik moze vise puta polagati isti kurs, ali nova ocjena mora biti veca od prethodne ocjene na tom istom kursu
  252. if (mostar.DodajPolaganje(denisMatematika)) {
  253. cout << crt << "POLAGANJE EVIDENTIRANO" << crt;
  254. denisMatematika.Ispis();
  255. }
  256. Datum OD, DO;
  257. int brojPolaganja = 0;
  258. OD.Unos(1, 6, 2016);
  259. DO.Unos(1, 8, 2016);
  260. /*PolaganjaByDatumIRazred - funkcija vraca niz uspjesnih polaganja koja su realizovana u periodu OD - DO,
  261. a odnose se na bilo koji predmet u definisanom razredu (npr. II)*/
  262. Polaganja * polaganjaByDatumiRazred = mostar.PolaganjaByDatumIRazred(OD, DO, II, brojPolaganja);
  263. cout << "U periodu od ";
  264. OD.Ispis();
  265. cout << " do ";
  266. DO.Ispis();
  267. cout << " uspjesno je polozeno " << brojPolaganja << " predmeta --->>> ";
  268. for (size_t i = 0; i < brojPolaganja; i++){
  269. polaganjaByDatumiRazred[i].Ispis();
  270. }
  271.  
  272. ////PretragaRekurzivno - rekurzivna funkcija koja pronalazi prosjecni uspjeh koji su polaznici tokom
  273. ////godine (npr.2016) ostvarili na odredjenom kursu (npr. Matematika)
  274. //cout << "Prosjecan uspjeh na kursu iz predmeta Matematika u 2016 godini je " << PretragaRekurzivno(/*potrebni parametri*/) << endl;
  275. ////ispisuje sve informacije o edukacijskom centru. prije ispisa sortirati sve kurseve
  276. //mostar.Ispis();
  277.  
  278. //izvrsiti potrebne dealokacije
  279. system("pause");
  280. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement