Advertisement
Guest User

Admin-Student-Questions

a guest
Apr 28th, 2016
252
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.49 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <conio.h>
  4. #include <cstdlib>
  5.  
  6. using namespace std;
  7. char * crt = "\n========================================\n";
  8.  
  9. /*
  10. Za admin login
  11. Username : admin
  12. pass: password
  13. */
  14. enum NacinStudiranja { REDOVAN, DL };
  15. enum GodinaStudija { prva = 1, druga, treca, cetvrta };
  16. enum Odgovori { TACNO, NETACNO };
  17.  
  18. int brojPitanja = 5;
  19. struct Student {
  20. int _brojIndeksa;
  21. char _imePrezime[30];
  22. bool _radioTest;
  23. NacinStudiranja _nacin;
  24. GodinaStudija _godina;
  25. Odgovori *_odgovori = new Odgovori[brojPitanja];
  26. char *password;
  27. };
  28. struct Pitanja {
  29. int rbPitanja;
  30. char *pitanje;
  31. Odgovori odg;
  32. };
  33. struct Admin {
  34. char *username;
  35. char *password;
  36. };
  37.  
  38. char *PrikaziPitanje(Pitanja pitanja) {
  39. if (pitanja.rbPitanja <= 5) {
  40. if (pitanja.rbPitanja == 1)
  41. return "Enumeracije i unije su sinonimi ?";
  42. else if (pitanja.rbPitanja == 2)
  43. return "Moguce je kreirati anonimnu uniju ?";
  44. else if (pitanja.rbPitanja == 3)
  45. return "Svi clanovi unije koriste istu memorijsku lokaciju ?";
  46. else if (pitanja.rbPitanja == 4)
  47. return"Svi clanovi strukture koriste istu memorijsku lokaciju ?";
  48. else if (pitanja.rbPitanja == 5)
  49. return "Unija moze biti deklarisana unutar strukture ?";
  50. }
  51. else
  52. return pitanja.pitanje;
  53. }
  54. Odgovori GetTacanOdgovor(Pitanja pitanja) {
  55. if (pitanja.rbPitanja <= 5) {
  56. if (pitanja.rbPitanja == 1)
  57. return NETACNO;
  58. else if (pitanja.rbPitanja == 2)
  59. return TACNO;
  60. else if (pitanja.rbPitanja == 3)
  61. return TACNO;
  62. else if (pitanja.rbPitanja == 4)
  63. return NETACNO;
  64. else if (pitanja.rbPitanja == 5)
  65. return TACNO;
  66. }
  67. else
  68. return pitanja.odg;
  69. }
  70. int GetUspjehStudenta(Odgovori odgovori[], Pitanja *pitanja) {
  71. if (odgovori == nullptr)
  72. return -1;
  73. int brojacTacnih = 0;
  74. for (int i = 0;i < brojPitanja;i++)
  75. if (odgovori[i] == GetTacanOdgovor(pitanja[i]))
  76. brojacTacnih++;
  77. return brojacTacnih;
  78. }
  79. void inicijalizirajPitanja(Pitanja *&pitanja) { // za postojeca pitanja
  80. for (int i = 0; i < brojPitanja; i++) {
  81. pitanja[i].rbPitanja = i + 1;
  82. pitanja[i].pitanje = PrikaziPitanje(pitanja[i]);
  83. pitanja[i].odg = GetTacanOdgovor(pitanja[i]);
  84. }
  85. }
  86. char *ucitajPitanje() {
  87. char *p = new char[300];
  88. cin.getline(p, 300);
  89. return p;
  90. }
  91. void dodajPitanja(Pitanja &pitanja, int i) {
  92. int unos;
  93. Odgovori temp;
  94. pitanja.rbPitanja = i + 1;
  95. cout << "Unesite pitanje" << endl;
  96. pitanja.pitanje = ucitajPitanje();
  97. do {
  98. cout << "Unesite tacan odgovor (1.Tacno, 2.Netacno)" << endl;
  99. cin >> unos;
  100. unos--;
  101. temp = (Odgovori)unos;
  102. cin.ignore();
  103. } while (temp != TACNO && temp != NETACNO);
  104. pitanja.odg = (Odgovori)unos;
  105. }
  106. void PokreniTest(Student & student, Pitanja *pitanja) {
  107. int unos;
  108. Odgovori temp;
  109. for (int i = 0;i < brojPitanja;i++) {
  110. cout << crt << PrikaziPitanje(pitanja[i]) << crt;
  111. do {
  112. cout << "Odgovor (1.Tacno,2.Netacno): ";
  113. cin >> unos;
  114. unos--;
  115. temp = (Odgovori)unos;
  116. cin.ignore();
  117. } while (temp != TACNO && temp != NETACNO);
  118. student._odgovori[i] = temp;
  119. }
  120. student._radioTest = true;
  121. }
  122. char *ucitajPassword() {
  123. char *p = new char[24];
  124. int poz = 0;
  125. for (int i = 0; i < 24; i++) {
  126. p[i] = _getch();
  127. if (p[i] == 8)
  128. {
  129. if (i != 0) {
  130. cout << "\b \b";
  131. p[--i] = NULL; // zadnji karakter unesen je backspace pa iz tog razloga p[--i]
  132. i--;
  133. }
  134. else
  135. cout << " ";
  136. }
  137. else if (p[i] != 13 && p[i] != 8) { // 13 je ASCII za enter ,a 8 je ASCII za backspace
  138. cout << "*";
  139. }
  140. else if (p[i] == 13)
  141. {
  142. p[i] = '\0';
  143. break;
  144. }
  145. }
  146. return p;
  147. }
  148. void UnosPodataka(Student *& niz, int max) {
  149. int unos;
  150. char pomocna;
  151. for (int i = 0;i < max;i++) {
  152. cout << crt << "\t::STUDENT " << i + 1 << "::" << crt;
  153. cout << "Unesite ime i prezime: ";
  154. cin.getline(niz[i]._imePrezime, 30);
  155. cout << "Unesite broj indeksa: ";
  156. cin >> niz[i]._brojIndeksa;
  157. do {
  158. cout << "Nacin studiranja (1.Redovan, 2.DL): ";
  159. cin >> unos;
  160. } while (unos != 1 && unos != 2);
  161. niz[i]._nacin = (NacinStudiranja)--unos;
  162. cin.ignore();
  163. do {
  164. cout << "Godinu studija (1,2,3,4): ";
  165. cin >> unos;
  166. } while (unos < 1 || unos>4);
  167. niz[i]._godina = (GodinaStudija)unos;
  168. cin.ignore();
  169. cout << "Unesite password" << endl;
  170. niz[i].password = ucitajPassword();
  171. cout << "\nDa li zelite vidjeti password koji ste ukucali (y / n)" << endl;
  172. cin >> pomocna;
  173. if (pomocna == 'y' || pomocna=='Y')
  174. cout << niz[i].password << endl;
  175. cin.ignore();
  176. niz[i]._radioTest = false;
  177. //tek smo kreirali studenta
  178. //tako da je sigurno da test nije radjen
  179. }
  180. }
  181. void Pretraga(Student * niz, int max, Pitanja *pitanja) {
  182. //definisati funkciju(e) koja(e) ce omoguciti pretragu po:
  183. //1. godini studija
  184. //2. nacinu studiranja
  185. //3. rezultatima ostvarenim na testu
  186. //Nove funkcionalnosti dodati u funkciju PrikaziMeni
  187. int pomocna;
  188. bool provjera = false;
  189. cout << "Po cemu zelite pretragu: \n1.Godini studija\n2.Nacinu Studiranja\n3.Rezultatima ostvarenim na testu" << endl;
  190. cin >> pomocna;
  191. cin.ignore();
  192. if (pomocna == 1)
  193. {
  194. GodinaStudija temp;
  195. int pomocna2;
  196. cout << "Unesite godinu studija( 1,2,3,4)" << endl;
  197. do {
  198. cin >> pomocna2;
  199. cin.ignore();
  200. } while (pomocna2 < 1 || pomocna2>4);
  201. temp = (GodinaStudija)pomocna2;
  202. cout << "Studenti koji zadovoljavaju pretragu: " << endl;
  203. for (int i = 0; i < max; i++)
  204. if (temp == niz[i]._godina) {
  205. cout << niz[i]._imePrezime << "\t" << niz[i]._brojIndeksa << endl;
  206. provjera = true;
  207. }
  208. }
  209. else if (pomocna == 2)
  210. {
  211. NacinStudiranja temp;
  212. int pomocna2;
  213. cout << "Unesite nacin studiranja (0. Redovan, 1. DL)" << endl;
  214. do {
  215. cin >> pomocna2;
  216. cin.ignore();
  217. } while (pomocna2 != 0 && pomocna2 != 1);
  218. temp = (NacinStudiranja)pomocna2;
  219. cout << "Studenti koji zadovoljavaju pretragu: " << endl;
  220. for (int i = 0; i < max; i++)
  221. if (temp == niz[i]._nacin) {
  222. cout << niz[i]._imePrezime << "\t" << niz[i]._brojIndeksa << endl;
  223. provjera = true;
  224. }
  225. }
  226. else if (pomocna == 3)
  227. {
  228. int unos, pomocna2;
  229. cout << "Unesite procenat i ispisati ce vam sve studente sa tim ili vecim procentom" << endl;
  230. do {
  231. cin >> unos;
  232. } while (unos < 0 || unos>100);
  233. cout << "Studenti koji zadovoljavaju pretragu: " << endl;
  234. for (int i = 0; i < max; i++)
  235. {
  236. if (niz[i]._radioTest != false) {
  237. pomocna2 = ((GetUspjehStudenta(niz[i]._odgovori, pitanja))*100.0) / brojPitanja;
  238. if (pomocna2 >= unos) {
  239. cout << niz[i]._imePrezime << "\t" << niz[i]._brojIndeksa << "\t" << pomocna2 << endl;
  240. provjera = true;
  241. }
  242. }
  243. }
  244. if (provjera == false)
  245. cout << "Nema studenata po toj pretrazi" << endl;
  246. }
  247. else
  248. cout << "Nepostojeci unos" << endl;
  249.  
  250.  
  251. }
  252. int GlavniMeni() {
  253. int izbor;
  254. do {
  255. cout << crt << "\t::MAIN MENU::" << crt;
  256. cout << "1. Admin login" << endl;
  257. cout << "2. Student login" << endl;
  258. cout << "3. Exit" << endl;
  259. cin >> izbor;
  260. } while (izbor < 1 || izbor>3);
  261. cin.ignore();
  262. return izbor;
  263. }
  264. int StudentMeni() {
  265. int izbor;
  266. do {
  267. cout << crt << "\t::STUDENT MENU::" << crt;
  268. cout << "1. Pokreni test" << endl;
  269. cout << "2. Prikazi rezultate" << endl;
  270. cout << "3. Pretraga" << endl;
  271. cout << "4. Logout (back to main menu)" << crt;
  272. cout << "Unesite izbor: ";
  273. cin >> izbor;
  274. } while (izbor < 1 || izbor>4);
  275. cin.ignore();
  276. return izbor;
  277. }
  278. int AdminMeni() {
  279. int izbor;
  280. do {
  281. cout << crt << "\t::ADMIN MENU::" << crt;
  282. cout << "1. Dodaj nova pitanja i definisi tacne odgovore" << endl;
  283. cout << "2. Omoguci studentu ponovo polaganje testa" << endl;
  284. cout << "3. Unos podataka studentima " << endl;
  285. cout << "4. Logout (back to main menu)" << endl;
  286. cin >> izbor;
  287. } while (izbor < 1 || izbor>4);
  288. cin.ignore();
  289. return izbor;
  290. }
  291. bool provjeriLoginST(Student *niz, int max) {
  292. int indeks;
  293. cout << "Unesite broj indeksa:";
  294. cin >> indeks;
  295. cin.ignore();
  296. cout << "\nUnesite password: ";
  297. char *password = ucitajPassword();
  298. for (int i = 0; i < max; i++)
  299. if ((strcmp(password, niz[i].password) == 0) && (indeks == niz[i]._brojIndeksa))
  300. return true;
  301. return false;
  302. }
  303. bool provjeriLoginAdmin(Admin admin) {
  304. char *user = new char[20];
  305. cout << "\nUnesite username:";
  306. cin.getline(user, 20);
  307. cout << endl << "Unesite password:";
  308. char *password = ucitajPassword();
  309.  
  310. if ((strcmp(user, admin.username) == 0) && (strcmp(password, admin.password) == 0))
  311. return true;
  312.  
  313. return false;
  314. }
  315. int PrikaziStudente(Student * niz, int max, int izbor)
  316. {
  317. int unos;
  318. bool provjera = false;
  319. if (izbor == 1)
  320. {
  321. cout << "Studenti koji nisu radili test:" << endl;
  322. for (int i = 0;i < max;i++) {
  323. if (niz[i]._radioTest == false) {
  324. cout << i + 1 << ". " << niz[i]._imePrezime << endl;
  325. provjera = true;
  326. }
  327. }
  328. if (provjera == true) {
  329. do {
  330. cout << crt << "Unesite redni broj studenta: ";
  331. cin >> unos;
  332. } while ((niz[unos - 1]._radioTest == true) || (unos<1 || unos>max));
  333. unos--;
  334. return unos;
  335. }
  336. }
  337. else if (izbor == 2)
  338. {
  339. cout << "Ovi studenti su radili ispit - izaberi studenta" << endl;
  340. for (int i = 0; i < max; i++)
  341. {
  342. if (niz[i]._radioTest == true)
  343. {
  344. cout << i + 1 << "." << niz[i]._imePrezime << endl;
  345. provjera = true;
  346. }
  347. }
  348. if (provjera == true)
  349. {
  350. do {
  351. cout << crt << "Unesite redni broj studenta: ";
  352. cin >> unos;
  353. } while ((niz[unos - 1]._radioTest == false) || (unos<1 || unos>max));
  354. unos--;
  355. return unos;
  356. }
  357. }
  358. if (provjera == false && izbor == 1)
  359. cout << "Svi studenti su radili ispit" << endl;
  360.  
  361.  
  362. return -1;
  363. }
  364. int ispis(Student *niz, int max) {
  365. int unos;
  366. for (int i = 0; i < max; i++) {
  367. cout << i + 1 << ". " << niz[i]._imePrezime << niz[i]._brojIndeksa << endl;
  368. }
  369. cout << "Unesite redni broj studenta" << endl;
  370. do {
  371. cin >> unos;
  372. } while (unos<1 || unos>max);
  373. unos--;
  374. return unos;
  375. }
  376. void popravni(Student *niz, int max) {
  377. int pomocna = PrikaziStudente(niz, max, 2);
  378. niz[pomocna]._radioTest = false;
  379. }
  380. bool baremJedanRadioTest(Student *niz, int max) {
  381. for (int i = 0; i < max; i++)
  382. if (niz[i]._radioTest == true)
  383. return true;
  384.  
  385. return false;
  386. }
  387. void dealocirajPitanja(Pitanja *&questions) {
  388. delete[]questions;
  389. questions = nullptr;
  390. }
  391. void dealocirajStudent(Student *&niz, int max) {
  392.  
  393. for (int i = 0; i < max; i++)
  394. {
  395. delete[]niz[i].password;
  396. delete[]niz[i]._odgovori;
  397. }
  398. delete[]niz;
  399. niz = nullptr;
  400. }
  401.  
  402.  
  403. //dodati provjeru koja ce onemoguciti korisnika da unese redni
  404. //broj studenta koji ne zadovoljava kriterije - u zavisnosti od izbora
  405. //na taj nacin cemo biti u mogucnosti da izbacimo nepotrebne provjere
  406. //u main funkciji
  407. //dodati sljedece funkcionalnosti:
  408. //1.administratoru omoguciti da unosi pitanja te definise tacne odgovore
  409. //2.administratoru dati prava da studentu ponovo omoguci polaganje testa
  410. //3.uvesti username/password na osnovu koga ce se studenti logirati
  411. //4.odvojiti administratorske funkcije (meni) od korisnickih
  412. void main() {
  413. int max = 3, izbor, student, glavniIzbor, adminIzbor, unosDodajPitanja;
  414. int brojPokusaja = 3;
  415. bool prvoPokretanje = false;
  416. Student *niz = nullptr;
  417. Pitanja *questions = new Pitanja[brojPitanja];
  418. inicijalizirajPitanja(questions);
  419. Admin admin;
  420. admin.username = "admin";
  421. admin.password = "password";
  422.  
  423.  
  424.  
  425.  
  426.  
  427.  
  428. do {
  429. glavniIzbor = GlavniMeni();
  430. if (glavniIzbor == 1) { // za admina
  431. bool provjeraLogin = false;
  432. brojPokusaja = 3;
  433. do {
  434. cout << "\nBroj pokusaja : " << brojPokusaja << endl;
  435. provjeraLogin = provjeriLoginAdmin(admin);
  436. if (provjeraLogin == true)
  437. break;
  438. else
  439. brojPokusaja--;
  440. if (brojPokusaja == 0) {
  441. cout << "\nPogresno ste unijeli username ili password 3 puta." << endl;
  442. system("pause");
  443. }
  444. system("cls");
  445. } while (brojPokusaja > 0);
  446. if (provjeraLogin == true) {
  447. do {
  448. adminIzbor = AdminMeni();
  449. if (adminIzbor == 1) { // dodaj pitanja i odgovore
  450. cout << "Koliko pitanja zelite dodati" << endl;
  451. int pomocna = brojPitanja;
  452. cin >> unosDodajPitanja;
  453. cin.ignore();
  454. if (questions != nullptr)
  455. dealocirajPitanja(questions); // dealociranje prethodnih
  456.  
  457. brojPitanja += unosDodajPitanja;
  458. questions = new Pitanja[brojPitanja];
  459. inicijalizirajPitanja(questions);
  460. for (int i = pomocna; i < brojPitanja; i++)
  461. dodajPitanja(questions[i], i);
  462. }
  463. else if (adminIzbor == 2) {
  464. if (niz ==nullptr) {
  465. cout << "Prvo morate dodati studente da biste im pristupili" << endl;
  466. }
  467. else if (baremJedanRadioTest(niz, max) == true)
  468. popravni(niz, max);
  469. else
  470. cout << "Niko nije radio test" << endl; //ponovo polaganje testa
  471. }
  472. else if (adminIzbor == 3)
  473. {
  474. if (niz != nullptr)
  475. cout << "Vec ste dodali podatke za studente" << endl;
  476. else {
  477. do {
  478. cout << "Unesite broj studenata: ";
  479. cin >> max;
  480. } while (max <= 0);
  481. niz = new Student[max];
  482. cin.ignore();
  483. system("cls");
  484. UnosPodataka(niz, max);
  485. }
  486. }
  487. system("pause");
  488. system("cls");
  489. } while (adminIzbor != 4);
  490. }
  491. }
  492. else if (glavniIzbor == 2) { // za studenta
  493. if (niz == nullptr)
  494. cout << "Prvo morate dodati studente da biste im pristupili" << endl;
  495. else
  496. {
  497. bool provjeraLoginStudent = false;
  498. brojPokusaja = 3;
  499. do {
  500. cout << "\nBroj pokusaja : " << brojPokusaja << endl;
  501. provjeraLoginStudent = provjeriLoginST(niz,max);
  502. if (provjeraLoginStudent == true) {
  503. break;
  504. }
  505. else
  506. brojPokusaja--;
  507. } while (brojPokusaja > 0);
  508. if (provjeraLoginStudent == true) {
  509. do {
  510. izbor = StudentMeni();
  511. if (izbor == 1) {
  512. student = PrikaziStudente(niz, max, izbor);
  513. PokreniTest(niz[student], questions);
  514. }
  515. if (izbor == 2) {
  516. if (baremJedanRadioTest(niz, max) == false)
  517. cout << "Niko nije radio test" << endl;
  518. else {
  519. student = PrikaziStudente(niz, max, izbor);
  520. int brojTacnih = GetUspjehStudenta(niz[student]._odgovori, questions);
  521. cout << crt << "Uspjeh studenta " << brojTacnih << "/" << brojPitanja << " ili " << (brojTacnih*100.0) / brojPitanja << "%" << crt;
  522. }
  523. }
  524. if (izbor == 3)
  525. Pretraga(niz, max, questions);
  526.  
  527. system("pause");
  528. system("cls");
  529. } while (izbor != 4);
  530. }
  531. }
  532. }
  533. } while (glavniIzbor != 3);
  534.  
  535.  
  536. cout << "cao" << endl;
  537. if(niz!=nullptr)
  538. dealocirajStudent(niz, max);
  539. if(questions != nullptr)
  540. dealocirajPitanja(questions);
  541.  
  542. system("pause");
  543. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement