Advertisement
Kenoo

Studenti ( uradjen )

May 20th, 2018
266
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.30 KB | None | 0 0
  1. #include<iostream>
  2. #include<conio.h>
  3. using namespace std;
  4. const char * crt = "\n---------------------------\n";
  5.  
  6. struct Datum
  7. {
  8. int dan, mjesec, godina;
  9.  
  10. void unos()
  11. {
  12. cout << "Unesite dd/mm/gg" << endl;
  13. cin >> dan >> mjesec >> godina;
  14. cin.ignore();
  15. }
  16.  
  17. void ispis()
  18. {
  19. cout << dan << "/" << mjesec << "/" << godina;
  20. }
  21.  
  22. bool poredjenje(Datum OD, Datum DO)
  23. {
  24. if (godina > OD.godina && godina < DO.godina)
  25. {
  26. return true;
  27. }
  28. else
  29. if (godina == OD.godina || godina == DO.godina)
  30. {
  31. if (mjesec > OD.mjesec && mjesec < DO.mjesec)
  32. {
  33. return true;
  34. }
  35. else
  36. if (mjesec == OD.mjesec || mjesec == DO.mjesec)
  37. {
  38. if (dan > OD.dan && dan < DO.dan)
  39. {
  40. return true;
  41. }
  42. else
  43. {
  44. return false;
  45. }
  46. }
  47. }
  48. return false;
  49. }
  50.  
  51. };
  52.  
  53. struct PolozeniPredmet
  54. {
  55. char * nazivPredmeta;
  56. int ocjena;
  57. Datum datumPolaganja;
  58. char * napomena;
  59.  
  60. void Dealociraj()
  61. {
  62. delete[]nazivPredmeta; nazivPredmeta = nullptr;
  63. delete[]napomena; napomena = nullptr;
  64. }
  65. };
  66.  
  67. struct Student
  68. {
  69. char * imePrezime;
  70. PolozeniPredmet polozeni[40];
  71. int brojPolozenih;
  72.  
  73.  
  74. };
  75.  
  76. int PrikaziMenu()
  77. {
  78. int izbor;
  79. cout << crt << "\t::MENU::" << crt;
  80. cout << "1. Dodaj studenta" << endl;
  81. cout << "2. Dodaj polozeni predmet" << endl;
  82. cout << "3. Pretraga" << endl;
  83. cout << "4. Kraj" << crt;
  84. do {
  85. cout << "Vas izbor -> ";
  86. cin >> izbor;
  87. cin.ignore();
  88. } while (izbor < 1 || izbor>4);
  89. system("cls");
  90. return izbor;
  91. }
  92. /*UKOLIKO SMATRATE DA JE POTREBNO ZADATAK MOZETE PROSIRITI DODATNIM FUNKCIONALNOSTIMA, ALI PROSIRENJA MORAJU PRATITI ADEKVATNI KOMENTARI*/
  93.  
  94. void Login(const char *password)
  95. {
  96. char *temp, znak=0;
  97. int i = 0;
  98. temp = new char[strlen(password) + 1];
  99. do
  100. {
  101. while (znak != 13)
  102. {
  103. znak = _getch();
  104. cout << "-";
  105. temp[i++] = znak;
  106. }
  107. temp[i - 1] = 0;
  108.  
  109. if (strcmp(password, temp) == 0)
  110. {
  111. cout << "Uspjesan login" << endl;
  112. return;
  113. }
  114. else
  115. {
  116. cout << "Neispravan password, pokusajte ponovo" << endl;
  117. i = 0;
  118. znak=0;
  119. }
  120. } while (temp != password);
  121. }
  122.  
  123. void DodajStudenta(Student *&s)
  124. {
  125. s = new Student;
  126. char temp[200];
  127. int brPredmeta;
  128. cout << "Unesite ime i prezime" << endl;
  129. cin.getline(temp, 200);
  130. s->imePrezime = new char[strlen(temp) + 1];
  131. strcpy_s(s->imePrezime, strlen(temp) + 1, temp);
  132.  
  133. cout << "Koliko predmeta dodajete ?" << endl;
  134. cin >> brPredmeta;
  135. cin.ignore();
  136. s->brojPolozenih=brPredmeta;
  137.  
  138. for (int i = 0; i < brPredmeta; i++)
  139. {
  140. cout << "Unesite naziv "<<i+1<<". predmeta" << endl;
  141. cin.getline(temp, 200);
  142. s->polozeni[i].nazivPredmeta = new char[strlen(temp) + 1];
  143. strcpy_s(s->polozeni[i].nazivPredmeta, strlen(temp) + 1, temp);
  144.  
  145. cout << "Unesite datum polaganja" << endl;
  146. s->polozeni[i].datumPolaganja.unos();
  147.  
  148. cout << "Unesite ocjenu" << endl;
  149. cin >> s->polozeni[i].ocjena;
  150. cin.ignore();
  151.  
  152. cout << "Unesite napomenu" << endl;
  153. cin.getline(temp, 200);
  154. s->polozeni[i].napomena = new char[strlen(temp) + 1];
  155. strcpy_s(s->polozeni[i].napomena, strlen(temp) + 1, temp);
  156. }
  157.  
  158.  
  159. }
  160.  
  161. void DodajPolozeniPredmet(Student **s, int trenutnoS)
  162. {
  163. char temp[100];
  164. int indeks = -1;
  165. bool nadjen = false;
  166. cout << "Unesite ime i prezime studenta kome zelite dodati polozeni predmet" << endl;
  167. cin.getline(temp, 100);
  168.  
  169. for (int i = 0; i < trenutnoS; i++)
  170. {
  171. if (strcmp(s[i]->imePrezime, temp) == 0)
  172. {
  173. cout << "STUDENT PRONADJEN..." << endl;
  174. indeks = i;
  175. break;
  176. }
  177.  
  178. }
  179. if (indeks != -1)
  180. {
  181.  
  182. cout << "Unesite naziv predmeta kojeg zelite dodati" << endl;
  183. cin.getline(temp, 100);
  184.  
  185. int brPolozenih = s[indeks]->brojPolozenih;
  186. s[indeks]->polozeni[brPolozenih].nazivPredmeta = new char[strlen(temp) + 1];
  187. strcpy_s(s[indeks]->polozeni[brPolozenih].nazivPredmeta, strlen(temp) + 1, temp);
  188.  
  189. cout << "Unesite datum polaganja" << endl;
  190. s[indeks]->polozeni[brPolozenih].datumPolaganja.unos();
  191.  
  192. cout << "Unesite ocjenu" << endl;
  193. cin >> s[indeks]->polozeni[brPolozenih].ocjena;
  194. cin.ignore();
  195.  
  196. cout << "Unesite napomenu" << endl;
  197. cin.getline(temp, 100);
  198. s[indeks]->polozeni[brPolozenih].napomena = new char[strlen(temp) + 1];
  199. strcpy_s(s[indeks]->polozeni[brPolozenih].napomena, strlen(temp) + 1, temp);
  200. s[indeks]->brojPolozenih++;
  201. }
  202. else
  203. cout << "Ne postoji student sa tim imenom" << endl;
  204.  
  205. }
  206.  
  207. void Pretraga(Student **s, int trenutnoS)
  208. {
  209. Datum OD, DO;
  210. int izbor;
  211. bool nadjenDatum = false, nadjenaNapomena = false;
  212. do
  213. {
  214. cout << "Unesite (1) za pretragu po datumu, (2) za po napomeni" << endl;
  215. cin >> izbor;
  216. cin.ignore();
  217. } while (izbor != 1 && izbor != 2);
  218.  
  219. if (izbor == 1)
  220. {
  221. cout << "Unesite datum OD ->" << endl;
  222. OD.unos();
  223. cout << "Unesite datum DO ->" << endl;
  224. DO.unos();
  225.  
  226. cout << "U periodu od ";
  227. OD.ispis();
  228. cout << " do ";
  229. DO.ispis();
  230. cout << " ispit su polozili sljedeci studenti:" << endl;
  231. for (int i = 0; i < trenutnoS; i++)
  232. {
  233. for (int j = 0; j < s[i]->brojPolozenih; j++)
  234. {
  235. if (s[i]->polozeni[j].datumPolaganja.poredjenje(OD, DO))
  236. {
  237. cout << s[i]->imePrezime << "->" << s[i]->polozeni[j].nazivPredmeta << "(" << s[i]->polozeni[j].ocjena << ")" << endl;
  238. nadjenDatum = true;
  239. }
  240.  
  241. }
  242. }
  243. if (nadjenDatum == false)
  244. cout << "Niko od studenata nije polozio u tom periodu" << endl;
  245. }
  246.  
  247. else if (izbor == 2)
  248. {
  249. char temp[200];
  250. cout << "Unesite tekst za pretragu" << endl;
  251. cin.getline(temp, 200);
  252. cout << "Trazeni sadrzaj " << temp << " u napomeni posjeduju sljedeci studenti: " << endl;
  253. for (int i = 0; i < trenutnoS; i++)
  254. {
  255. for (int j = 0; j < s[i]->brojPolozenih; j++)
  256. {
  257. if (strstr(s[i]->polozeni[j].napomena, temp)!=nullptr)
  258. {
  259. cout << s[i]->imePrezime << " -> " << s[i]->polozeni[j].nazivPredmeta << endl;
  260. nadjenaNapomena = true;
  261. }
  262. }
  263. }
  264. if (nadjenaNapomena == false)
  265. cout << "Trazeni sadrzaj ne postoji" << endl;
  266. }
  267.  
  268. }
  269.  
  270. void Dealociraj(Student **s, int trenutnoS)
  271. {
  272. for (int i = 0; i < trenutnoS; i++)
  273. {
  274. delete[] s[i]->imePrezime; s[i]->imePrezime = nullptr;
  275.  
  276. for (int j = 0; j < s[i]->brojPolozenih; j++)
  277. {
  278. s[i]->polozeni[j].Dealociraj();
  279. }
  280. }
  281.  
  282.  
  283. }
  284. void main()
  285. {
  286. const int maxStudenata = 6;
  287. int trenutnoStudenata = 0, izbor = 0;
  288. Student * studentiIgodina[maxStudenata];
  289. char validPass[] = "ispitPRII2017";
  290. /*VRSITI VALIDACIJU KORISNIKOVIH UNOSA TE GA ONEMOGUCITI DA UNOSI VRIJEDNOSTI KOJE NISU VALIDNE*/
  291. do {
  292. /*
  293. za pristup aplikaciji zahtijevati logiranje,
  294. prilikom unosa password maskirati koristeci crticu (-)
  295. */
  296. cout << "Unesite password za pristup aplikaciji" << endl;
  297. Login(validPass);
  298.  
  299. izbor = PrikaziMenu();
  300. if (izbor == 1) {
  301. DodajStudenta(studentiIgodina[trenutnoStudenata]);
  302. /*
  303. Ime i prezime -> Denis Mušic
  304. Koliko predmeta dodajete -> 1
  305. Naziv predmeta -> Uvod u informacijske tehnologije
  306. Datum polaganja -> 11 4 2017
  307. Ocjena -> 6
  308. Napomena -> seminarski rad nije sadrzavao sve zahtijevane funkcionalnosti
  309. */
  310. trenutnoStudenata++;
  311. }
  312. else if (izbor == 2) {
  313. DodajPolozeniPredmet(studentiIgodina, trenutnoStudenata);
  314. /*
  315. Ime i prezime -> Denis Music
  316. STUDENT PRONADJEN....
  317. Naziv predmeta -> Racunarske mreze
  318. Datum polaganja -> 10 4 2017
  319. Ocjena -> 7
  320. Napomena -> studentu dodijeljen seminarski rad na temu OSI modela
  321. */
  322. }
  323. else if (izbor == 3) {
  324. Pretraga(studentiIgodina, trenutnoStudenata);
  325. /*
  326. Pratraga (1. Datumu polaganja, 2. Napomeni) -> 1
  327. Unesite datum OD -> 12 1 2017
  328. Unesite datum DO -> 14 4 2017
  329. U periodu od 12.1.2017 do 14.4.2017 ispite su polozili sljedeci studenti:
  330. 1. Denis Music -> Racunarske mreze (7) Prosjek studenta: 6.5
  331. 2. Denis Music -> Uvod u informacijske tehnologije (6) Prosjek studenta: 6.5
  332. 3. Adel Handzic -> Baze podataka (9) Prosjek studenta: 8.7
  333.  
  334. ----------UKOLIKO SE ODABERE OPCIJA 2---------------
  335. Pratraga (1. Datumu polaganja, 2. Napomeni) -> 2
  336. Unesite tekst -> nije sadrzavao
  337. Trazeni sadrzaj 'nije sadrzavao' u napomeni posjeduju sljedeci studenti:
  338. 1. Denis Music, predmet Uvod u informacijske tehnologije
  339. 2. ....
  340. */
  341. }
  342. else if (izbor == 4)
  343. return;
  344.  
  345.  
  346. } while (izbor != 4);
  347.  
  348.  
  349. /*oslobada zauzetu memoriju*/
  350. Dealociraj(studentiIgodina, trenutnoStudenata);
  351. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement