Advertisement
Guest User

Untitled

a guest
Sep 20th, 2019
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.22 KB | None | 0 0
  1. #include<iostream>
  2. #include<tuple>
  3. using namespace std;
  4.  
  5. /*
  6. 1. BROJ I VRSTA PARAMETARA MORAJU BITI IDENTICNI KAO U PRIMJERIMA. U SUPROTNOM SE RAD NECE BODOVATI
  7. 2. STAVITE KOMENTAR NA DIJELOVE CODE-A KOJE NE BUDETE IMPLEMENTIRALI
  8. 3. KREIRAJTE .DOC FAJL SA VAŠIM BROJEM INDEKSA ( NPR. IB160061.DOC BEZ IMENA I PREZIMENA), TE NA KRAJU ISPITA U NJEGA KOPIRAJTE RJEŠENJA VAŠIH ZADATAKA. NE PREDAVATI .TXT ILI .CPP FAJLOVE
  9. 4. TOKOM IZRADE ISPITA NIJE DOZVOLJENO KORIŠTENJE HELP-A
  10. 5. TOKOM IZRADE ISPITA MOGU BITI POKRENUTA SAMO TRI PROGRAMA: PDF READER (ISPITNI ZADACI), MS VISUAL STUDIO, MS WORD (U KOJI CETE KOPIRATI VAŠA RJEŠENJA)
  11. 6. BEZ OBZIRA NA TO DA LI SU ISPITNI ZADACI URAĐENI, SVI STUDENTI KOJI SU PRISTUPILI ISPITU MORAJU PREDATI SVOJ RAD
  12. */
  13.  
  14. const char* not_set = "NEMA_VRIJEDNOST";
  15. const char* crt = "\n-------------------------------------------\n";
  16. const int min_polgavlja = 3;
  17. const int min_karaktera_po_poglavlju = 30;
  18. const int max_zavrsnih = 30;
  19.  
  20. char* AlocirajNizKaraktera(const char* s) {
  21. if (s == nullptr)
  22. return nullptr;
  23. int vel = strlen(s) + 1;
  24. char* temp = new char[vel];
  25. strcpy_s(temp, vel, s);
  26. return temp;
  27. }
  28.  
  29. struct Poglavlje {
  30. char* _naslov;
  31. char* _sadrzaj;
  32. bool _prihvaceno;
  33. int* _ocjena;//da bi se poglavlje smatralo prihvacenim ocjena mora biti u opsegu od 6 - 10
  34. void Unos(const char* naslov = nullptr, const char* sadrzaj = nullptr) {
  35. _ocjena = new int{ 0 }; _prihvaceno = false;
  36. _naslov = AlocirajNizKaraktera(naslov);
  37. _sadrzaj = AlocirajNizKaraktera(sadrzaj);
  38. }
  39. void Dealociraj() {
  40. delete[] _naslov; _naslov = nullptr;
  41. delete[] _sadrzaj; _sadrzaj = nullptr;
  42. delete _ocjena; _ocjena = nullptr;
  43. }
  44. void Ispis() {
  45. if (_naslov == nullptr || _sadrzaj == nullptr)
  46. return;
  47. cout << endl << "Poglavlje -> " << _naslov << endl << _sadrzaj << endl;
  48. if (_prihvaceno)
  49. cout << "Ocjena: " << *_ocjena << endl;;
  50. }
  51. void OcijeniPoglavlje(int ocjena) {
  52. *_ocjena = ocjena;
  53. if (ocjena > 5 && ocjena <= 10)
  54. _prihvaceno = true;
  55. }
  56. };
  57.  
  58. struct ZavrsniRad {
  59. char* _brojIndeksa;
  60. char* _tema;
  61. Poglavlje* _poglavljaRada;
  62. int _trenutnoPoglavlja;
  63. char* _datumOdbrane;
  64. float _konacnaOcjena; //konacna ocjena zavrsnog rada predstavlja prosjek ocjena svih poglavlja u zavrsnom radu koja se izracunava u momentu zakazivanja odbrane
  65.  
  66. void Unos(const char* brojIndeksa, const char* nazivTeme = nullptr) {
  67. _konacnaOcjena = 0;
  68. _brojIndeksa = new char[strlen(brojIndeksa)+1];
  69. strcpy_s(_brojIndeksa, strlen(brojIndeksa )+1, brojIndeksa);
  70. _tema = AlocirajNizKaraktera(nazivTeme);
  71. _datumOdbrane = AlocirajNizKaraktera(not_set);
  72. _trenutnoPoglavlja = 0;
  73. }
  74. /*u zavrsni rad dodaje novo poglavlje i njegov sadrzaj. ukoliko poglavlje vec postoji u zavrsnom radu,
  75. funkcija tom poglavlju treba dodati novi sadrzaj i pri tome zadrzi postojeci (izmedju postojeceg i novog
  76. sadrzaja se dodaje prazan prostor). u slucaju da poglavlje ne postoji, ono se dodaje zajedno sa sadrzajem*/
  77. //parametri: nazivPoglavlja, sadrzajPoglavlja
  78. void DodajPoglavlje(const char* nazivPoglavlja, const char* sadrzajPoglavlja) {
  79. for (int i = 0; i < _trenutnoPoglavlja; i++)
  80. {
  81. if (strcmp(_poglavljaRada[i]._naslov, nazivPoglavlja) == 0)
  82. {
  83. int size = strlen(_poglavljaRada[i]._sadrzaj) + strlen(sadrzajPoglavlja) + 2;
  84. char* temp = new char[size];
  85. strcpy_s(temp, size, _poglavljaRada[i]._sadrzaj);
  86. strcat_s(temp, size, " ");
  87. strcat_s(temp, size, sadrzajPoglavlja);
  88. _poglavljaRada[i]._sadrzaj = temp;
  89. return;
  90. }
  91. }
  92. Poglavlje* temp = new Poglavlje[_trenutnoPoglavlja + 1];
  93. for (int i = 0; i < _trenutnoPoglavlja; i++)
  94. {
  95. temp[i].Unos(_poglavljaRada[i]._naslov, _poglavljaRada[i]._sadrzaj);
  96. _poglavljaRada[i].Dealociraj();
  97. }
  98.  
  99. temp[_trenutnoPoglavlja].Unos(nazivPoglavlja, sadrzajPoglavlja);
  100. _poglavljaRada = temp;
  101. _trenutnoPoglavlja++;
  102. }
  103. void OcijeniPoglavlje(const char* nazivPoglavlja, int ocjena) {
  104. for (int i = 0; i < _trenutnoPoglavlja; i++)
  105. {
  106. if (strcmp(_poglavljaRada[i]._naslov, nazivPoglavlja) == 0)
  107. _poglavljaRada[i].OcijeniPoglavlje(ocjena);
  108. }
  109. }
  110. void Dealociraj() {
  111. delete[] _tema; _tema = nullptr;
  112. delete[] _datumOdbrane; _datumOdbrane = nullptr;
  113. delete[] _brojIndeksa; _brojIndeksa = nullptr;
  114. for (size_t i = 0; i < _trenutnoPoglavlja; i++)
  115. _poglavljaRada[i].Dealociraj();
  116. delete[] _poglavljaRada; _poglavljaRada = nullptr;
  117. }
  118. void Ispis() {
  119. cout << "Tema rada: " << _tema << endl;
  120. cout << "Sadrzaj: " << endl;
  121. for (size_t i = 0; i < _trenutnoPoglavlja; i++)
  122. _poglavljaRada[i].Ispis();
  123. cout << "Datum odbrane rada: " << _datumOdbrane << endl << " Ocjena: " << _konacnaOcjena << endl;
  124. }
  125. void Kopiraj(ZavrsniRad zrad)
  126. {
  127. _brojIndeksa = zrad._brojIndeksa;
  128. _tema = AlocirajNizKaraktera(zrad._tema);
  129. _poglavljaRada = new Poglavlje[zrad._trenutnoPoglavlja];
  130. for (int i = 0; i < zrad._trenutnoPoglavlja; i++)
  131. {
  132. _poglavljaRada[i].Unos(zrad._poglavljaRada[i]._naslov, zrad._poglavljaRada[i]._sadrzaj);
  133. _poglavljaRada[i].OcijeniPoglavlje(*zrad._poglavljaRada[i]._ocjena);
  134. }
  135. _trenutnoPoglavlja = zrad._trenutnoPoglavlja;
  136. _konacnaOcjena = zrad._konacnaOcjena;
  137. if (zrad._datumOdbrane != nullptr)
  138. _datumOdbrane = AlocirajNizKaraktera(zrad._datumOdbrane);
  139. }
  140. };
  141. struct Nastavnik {
  142. char* _imePrezime;
  143. ZavrsniRad* _teme[max_zavrsnih] = { nullptr };
  144.  
  145. void Unos(const char* imePrezime) {
  146. _imePrezime = AlocirajNizKaraktera(imePrezime);
  147. }
  148. /*funkcija DodajZavrsniRad ima zadatak da odredjenom nastavniku dodijeli mentorstvo na zavrsnom radu.
  149. sprijeciti dodavanje zavrsnih radova sa istom temom kao i mogucnost da jedan student kod istog nastavnika
  150. posjeduje vise zavrsnih radova*/
  151. //brojIndeksa, zavrsniRad
  152. bool DodajZavrsniRad(ZavrsniRad zavrsniRad) {
  153. for (int i = 0; i < max_zavrsnih; i++)
  154. {
  155. if (_teme[i] == nullptr)
  156. {
  157. _teme[i] = new ZavrsniRad;
  158. _teme[i]->Kopiraj(zavrsniRad);
  159. return true;
  160. }
  161. else if (_teme[i] != nullptr)
  162. {
  163. if (strcmp(_teme[i]->_tema, zavrsniRad._tema) == 0)
  164. return false;
  165. if (strcmp(_teme[i]->_brojIndeksa, zavrsniRad._brojIndeksa) == 0)
  166. return false;
  167. }
  168. }
  169. return false;
  170. }
  171. /*funkcija ZakaziOdbranuRada ima zadatak da studentu sa proslijedjenim brojem indeksa zakaze odbranu zavrsnog
  172. rada sto podrazumijeva izracunavanje konacne ocjene i definisanje datuma odbrane. odbrana rada se moze
  173. zakazati samo studentu koji je rad prethodno prijavio.
  174. Za zakazivanje odbrane rada moraju biti zadovoljeni sljedeci uslovi:
  175. 1. zavrsni rad mora imati broj poglavlja veci od minimalnog
  176. 2. svako poglavlje mora imati broj karaktera veci od minimalnog
  177. 3. svako poglavlje mora biti prihvaceno/odobreno
  178. ukoliko su zadovoljeni prethodni kriteriji, izracunava se konacna ocjena rada (prosjek ocjena svih poglavlja), postavlja datum odbrane rada i vraca pokazivac na rad kome je zakazana odbrana.
  179. u slucaju da student sa primljenim brojem indeksa nije prijavio zavrsni rad ili neki od postavljenih kriterija nije zadovoljen, funkcija vraca nullptr.
  180. */
  181. ZavrsniRad* ZakaziOdbranuRada(const char*brojIndeksa, const char* datumOdbrane) {
  182. ZavrsniRad* zrad = nullptr;
  183. for (int i = 0; i < max_zavrsnih; i++)
  184. {
  185. if (_teme[i] != nullptr)
  186. {
  187. if (strcmp(_teme[i]->_brojIndeksa, brojIndeksa) == 0)
  188. {
  189. int ocjena = 0;
  190. if (_teme[i]->_trenutnoPoglavlja < min_polgavlja)//malo poglavlja
  191. return nullptr;
  192. for (int j = 0; j < _teme[i]->_trenutnoPoglavlja; j++)
  193. {
  194. if (strlen(_teme[i]->_poglavljaRada[j]._sadrzaj) < min_karaktera_po_poglavlju)
  195. return nullptr;
  196. if (!_teme[i]->_poglavljaRada[j]._prihvaceno)
  197. return nullptr;
  198. _teme[i]->_konacnaOcjena += (float)*_teme[i]->_poglavljaRada[j]._ocjena;
  199. }
  200. _teme[i]->_konacnaOcjena = _teme[i]->_konacnaOcjena / _teme[i]->_trenutnoPoglavlja;
  201. _teme[i]->_datumOdbrane = AlocirajNizKaraktera(datumOdbrane);
  202. zrad = _teme[i];
  203. }
  204. }
  205. }
  206. return zrad;
  207. }
  208. void Dealociraj() {
  209. delete[] _imePrezime; _imePrezime = nullptr;
  210. for (size_t i = 0; i < max_zavrsnih; i++)
  211. {
  212. if (_teme[i] != nullptr) {
  213. _teme[i]->Dealociraj();
  214. delete _teme[i];
  215. }
  216. }
  217. }
  218. void Ispis() {
  219. cout << crt << _imePrezime << crt;
  220. for (size_t i = 0; i < max_zavrsnih; i++)
  221. if (_teme[i] != nullptr)
  222. _teme[i]->Ispis();
  223. }
  224. };
  225.  
  226. int main() {
  227. cout << crt << "UPLOAD RADA OBAVEZNO IZVRSITI U ODGOVARAJUCI FOLDER NA FTP SERVERU" << endl;
  228. cout << "U slucaju da je Upload folder prazan pritisnite tipku F5" << crt;
  229.  
  230. const int max = 2;
  231. Nastavnik* nastavnici[max];
  232.  
  233. nastavnici[0] = new Nastavnik; nastavnici[0]->Unos("Denis Music");
  234. nastavnici[1] = new Nastavnik; nastavnici[1]->Unos("Emina Junuz");
  235.  
  236. ZavrsniRad multimedijalni;
  237. //parametri: brojIndeksa, tema
  238. multimedijalni.Unos("IB120021", "Multimedijalni informacijski sistem za visoko - obrazovnu ustanovu");
  239. ZavrsniRad podrsa_operaterima;
  240. podrsa_operaterima.Unos("IB130031", "Sistem za podršku rada kablovskog operatera");
  241. ZavrsniRad analiza_sigurnosti;
  242. analiza_sigurnosti.Unos("IB140041", "Prakticna analiza sigurnosti bežičnih računarskih mreža");
  243. ZavrsniRad kriptografija;
  244. kriptografija.Unos("IB120021", "Primjena teorije informacija u procesu generisanja kriptografskih ključeva");
  245.  
  246. /*u zavrsni rad dodaje novo poglavlje i njegov sadrzaj. ukoliko poglavlje vec postoji u zavrsnom radu, funkcija tom poglavlju treba dodati novi sadrzaj i pri tome zadrzi postojeci (izmedju postojeceg i novog sadrzaja se dodaje prazan prostor). u slucaju da poglavlje ne postoji, ono se dodaje zajedno sa sadrzajem*/
  247. //parametri: nazivPoglavlja, sadrzajPoglavlja
  248. multimedijalni.DodajPoglavlje("Uvod", "U ovom poglavlju ce biti rijeci");
  249. multimedijalni.DodajPoglavlje("Uvod", "o multimedijalnim sistemima koji se danas koriste");
  250. multimedijalni.DodajPoglavlje("Uvod", "u savremenom poslovanju");
  251. multimedijalni.DodajPoglavlje("Vrste multimedijalnih sistema", "Danas se moze govoriti o nekoliko vrsta multimedijalnih sistema, a neke od najznacajnijih su ...");
  252. multimedijalni.DodajPoglavlje("Teorija multimedije", "Sadrzaj koji bi trebao stajati na pocetku treceg poglavlja zavrsnog rada o multimediji studenta IB130011");
  253.  
  254. //nazivPoglavlja, ocjena
  255. multimedijalni.OcijeniPoglavlje("Uvod", 8);
  256.  
  257. /*funkcija DodajZavrsniRad ima zadatak da odredjenom nastavniku dodijeli mentorstvo na zavrsnom radu. sprijeciti dodavanje zavrsnih radova sa istom temom kao i mogucnost da jedan student kod istog nastavnika posjeduje vise zavrsnih radova*/
  258. //brojIndeksa, zavrsniRad
  259. if (nastavnici[0]->DodajZavrsniRad(multimedijalni))
  260. cout << "Zavrsni rad uspjesno dodat!" << endl;
  261. if (nastavnici[0]->DodajZavrsniRad(podrsa_operaterima))
  262. cout << "Zavrsni rad uspjesno dodat!" << endl;
  263. if (!nastavnici[0]->DodajZavrsniRad(podrsa_operaterima))//dupliranje rada, onemoguciti dodavanje
  264. cout << "Zavrsni rad nije dodat!" << endl;
  265. if (!nastavnici[0]->DodajZavrsniRad(kriptografija)) //studentu vec dodijeljen rad, onemoguciti dodavanje
  266. cout << "Zavrsni rad nije dodat!" << endl;
  267. if (nastavnici[1]->DodajZavrsniRad(analiza_sigurnosti))
  268. cout << "Zavrsni rad uspjesno dodat!" << endl;
  269.  
  270. /*funkcija ZakaziOdbranuRada ima zadatak da studentu sa proslijedjenim brojem indeksa zakaze odbranu zavrsnog rada sto podrazumijeva
  271. izracunavanje konacne ocjene i definisanje datuma odbrane. odbrana rada se moze zakazati samo studentu koji je rad prethodno prijavio.
  272. Za zakazivanje odbrane rada moraju biti zadovoljeni sljedeci uslovi:
  273. 1. zavrsni rad mora imati broj poglavlja veci od minimalnog
  274. 2. svako poglavlje mora imati broj karaktera veci od minimalnog
  275. 3. svako poglavlje mora biti prihvaceno/odobreno
  276. ukoliko su zadovoljeni prethodni kriteriji, izracunava se konacna ocjena rada (prosjek ocjena svih poglavlja), postavlja datum odbrane rada i vraca pokazivac na rad kome je zakazana odbrana.
  277. u slucaju da student sa primljenim brojem indeksa nije prijavio zavrsni rad ili neki od postavljenih kriterija nije zadovoljen, funkcija vraca nullptr.
  278. */
  279.  
  280. //paramteri: brojIndeksa, datumOdbrane
  281. ZavrsniRad* zr1 = nastavnici[0]->ZakaziOdbranuRada("IB120021", "25.09.2019");
  282. if (zr1 != nullptr)
  283. zr1->Ispis();
  284.  
  285. zr1 = nastavnici[0]->ZakaziOdbranuRada("IB180081", "25.09.2019");//student sa brojem indeksa IB180081 jos uvijek nije prijavio rad
  286. if (zr1 == nullptr)
  287. cout << "Odbrana ne moze biti zakazana!" << endl;
  288.  
  289. //ispisuje sve podatke o nastavniku i njegovim mentorstvima
  290. nastavnici[0]->Ispis();
  291. nastavnici[1]->Ispis();
  292.  
  293. /*funkcija PronadjiNajStudenta ima zadatak da pronadje prvog studenta koji je zavrsni rad odbranio kod
  294. nastavnika/mentora, te tom prilikom ostvario (odnosi se na studenta) ocjenu vecu od proslijedjene (npr. 8.2)*/
  295. float prosjekStudenta = 0;
  296. char* indeksStudenta;
  297. //parametri PronadjiNajStudenta: nastavnici, brojNastavnika, minimalnaKonacnaOcjena
  298. /* tie(prosjekStudenta, indeksStudenta) = PronadjiNajStudenta(nastavnici, max, 8.2);
  299. if (indeksStudenta != nullptr)
  300. cout << crt << indeksStudenta << " -> " << prosjekStudenta << crt*/;
  301.  
  302. for (int i = 0; i < max; i++) {
  303. nastavnici[i]->Dealociraj();
  304. delete nastavnici[i];
  305. nastavnici[i] = nullptr;
  306. }
  307. multimedijalni.Dealociraj();
  308. podrsa_operaterima.Dealociraj();
  309. analiza_sigurnosti.Dealociraj();
  310. kriptografija.Dealociraj();
  311.  
  312. system("pause>0");
  313. return 0;
  314. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement