Advertisement
Guest User

Untitled

a guest
Apr 24th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.87 KB | None | 0 0
  1. #include<iostream>
  2. using namespace std;
  3. char * crt = "\n---------------------------\n";
  4.  
  5. struct Odgovor {
  6. bool tacan;
  7. char * tekstOdgovora;
  8. };
  9.  
  10. struct Pitanje {
  11. char * tekstPitanja;
  12. Odgovor odgovori[5];
  13. int brojOdgovora;
  14. int brojBodova;
  15. };
  16.  
  17. int trenutnoPitanja = 0;
  18.  
  19. int PrikaziMenu() {
  20. int izbor;
  21. cout << crt << "\t::MENU::" << crt;
  22. cout << "1. Dodaj pitanje" << endl;
  23. cout << "2. Promijeni odgovor na pitanje" << endl;
  24. cout << "3. Pokreni kviz" << endl;
  25. cout << "4. Prikazi rezultat" << crt;
  26. cout << "5. Kraj" << crt;
  27. do {
  28. cout << "Vas izbor -> ";
  29. cin >> izbor;
  30. } while (izbor < 1 || izbor>5);
  31. system("cls");
  32. return izbor;
  33. }
  34.  
  35. void DodajPitanje(Pitanje *& pit) {
  36. pit = new Pitanje;
  37.  
  38. char buffer[255];
  39. int len, tacanOdg;
  40.  
  41. cout << "Unesite tekst pitanja -> ";
  42. cin.ignore();
  43. cin.getline(buffer, 255);
  44.  
  45. len = strlen(buffer) + 1;
  46. pit->tekstPitanja = new char[len];
  47. strcpy_s(pit->tekstPitanja, len, buffer);
  48.  
  49. do {
  50. cout << "Koliko odgovora unosite (2 do 5) -> ";
  51. cin >> pit->brojOdgovora;
  52. } while (pit->brojOdgovora < 2 || pit->brojOdgovora > 5);
  53.  
  54. cin.ignore();
  55. for (int i = 0; i < pit->brojOdgovora; i++) {
  56. cout << "Odgovor " << i + 1 << " -> ";
  57. cin.getline(buffer, 255);
  58.  
  59. len = strlen(buffer) + 1;
  60. pit->odgovori[i].tekstOdgovora = new char[len];
  61. strcpy_s(pit->odgovori[i].tekstOdgovora, len, buffer);
  62.  
  63. pit->odgovori[i].tacan = false;
  64. }
  65.  
  66. do {
  67. cout << "Koji od unesenih je tacan odgovor -> ";
  68. cin >> tacanOdg;
  69. } while (tacanOdg < 1 || tacanOdg > pit->brojOdgovora);
  70.  
  71. pit->odgovori[tacanOdg - 1].tacan = true;
  72.  
  73. do {
  74. cout << "Koliko bodova nosi ovo pitanje -> ";
  75. cin >> pit->brojBodova;
  76. } while (pit->brojBodova < 1);
  77. }
  78.  
  79. void PromijeniOdgovor(Pitanje ** pitanja, int trenutno) {
  80. cout << "Unesite odgovor ili dio odgovora za pretragu -> ";
  81. char buffer[255], izbor;
  82. cin.ignore();
  83. cin.getline(buffer, 255);
  84.  
  85. for (int i = 0; i < trenutno; i++) {
  86. Pitanje * pit = pitanja[i];
  87. for (int j = 0; j < pit->brojOdgovora; j++) {
  88. Odgovor * odg = pit->odgovori + j;
  89. if (strstr(odg->tekstOdgovora, buffer) == nullptr)
  90. continue;
  91.  
  92. cout << "Odgovor " << odg->tekstOdgovora << " pronadjen u pitanju: " << pit->tekstPitanja << endl
  93. << "Da li je ovo odgovor koji biste zeljeli promijeniti (d/n) -> ";
  94.  
  95. cin >> izbor;
  96. if (izbor != 'd')
  97. continue;
  98.  
  99. cout << "Unesite novi odgovor -> ";
  100. cin.ignore();
  101. cin.getline(buffer, 255);
  102.  
  103. int len = strlen(buffer) + 1;
  104. delete[] odg->tekstOdgovora;
  105. odg->tekstOdgovora = new char[len];
  106. strcpy_s(odg->tekstOdgovora, len, buffer);
  107.  
  108. cout << "Da li zelite postaviti novi odgovor kao tacan (d/n) -> " << endl;
  109. cin >> izbor;
  110. if (izbor == 'd') {
  111. for (int k = 0; k < pit->brojOdgovora; k++) {
  112. if (pit->odgovori[k].tacan) {
  113. pit->odgovori[k].tacan = false;
  114. break;
  115. }
  116. }
  117. odg->tacan = true;
  118. }
  119.  
  120. return;
  121.  
  122. }
  123. }
  124.  
  125. cout << "Odgovor nije pronadjen!" << endl;
  126. }
  127.  
  128. int * PokreniKviz(Pitanje ** pitanja, int maxPitanja) {
  129. int * odgovoriNaPitanja = new int[maxPitanja];
  130.  
  131. for (int i = 0; i < trenutnoPitanja; i++) {
  132. Pitanje * pit = pitanja[i];
  133.  
  134. cout << crt << i + 1 << ". " << pit->tekstPitanja << crt;
  135. for (int j = 0; j < pit->brojOdgovora; j++) {
  136. cout << j + 1 << ". " << pit->odgovori[j].tekstOdgovora;
  137. if (j != pit->brojOdgovora - 1)
  138. cout << endl;
  139. }
  140. cout << crt;
  141. int izbor;
  142. do {
  143. cout << "Vas odgovor -> ";
  144. cin >> izbor;
  145. } while (izbor < 1 || izbor > pit->brojOdgovora);
  146. cout << "\b" << crt;
  147.  
  148. odgovoriNaPitanja[i] = izbor - 1;
  149. }
  150.  
  151. return odgovoriNaPitanja;
  152. }
  153.  
  154. void PrikaziRezultat(Pitanje ** pitanja, int * odgovori, int maxPitanja) {
  155. if (odgovori == nullptr) {
  156. cout << "Kviz nije uradjen!" << endl;
  157. return;
  158. }
  159.  
  160. int bodovi = 0, maxBodova = 0;
  161. cout << crt << "REZULTATI" << crt;
  162. for (int i = 0; i < trenutnoPitanja; i++) {
  163. Pitanje * pit = pitanja[i];
  164. cout << i + 1 << ". Pitanje->";
  165. maxBodova += pit->brojBodova;
  166.  
  167. if (pit->odgovori[odgovori[i]].tacan) {
  168. bodovi += pit->brojBodova;
  169. cout << "TACNO" << endl;
  170. }
  171. else
  172. cout << "NETACNO" << endl;
  173. }
  174. cout << "\b" << crt << "USPJEH: " << bodovi << " / " << maxBodova << " BODOVA(" << (float)bodovi / maxBodova * 100 << " % )" << crt;
  175. }
  176.  
  177. void Dealociraj(Pitanje ** pitanja, int * odgovoriNaPitanja, int trenutnoPitanja) {
  178. for (int i = 0; i < trenutnoPitanja; i++) {
  179. for (int j = 0; j < pitanja[i]->brojOdgovora; j++) {
  180. delete[] pitanja[i]->odgovori[j].tekstOdgovora;
  181. }
  182.  
  183. delete[] pitanja[i]->tekstPitanja;
  184. delete pitanja[i];
  185. }
  186.  
  187. delete[] odgovoriNaPitanja;
  188. }
  189.  
  190. void main() {
  191. const int maxPitanja = 6;
  192. int izbor = 0;
  193. Pitanje * ispitPRII[maxPitanja];
  194. int * odgovoriNaPitanja = nullptr;
  195.  
  196. do {
  197. izbor = PrikaziMenu();
  198. if (izbor == 1) {
  199. if (trenutnoPitanja == maxPitanja)
  200. cout << "Dosegli ste maksimalni broj pitanja (" << maxPitanja << ")" << endl;
  201. else if (odgovoriNaPitanja != nullptr)
  202. cout << "Pitanja se mogu dodavati samo ako kviz nije uradjen!" << endl;
  203. else {
  204. DodajPitanje(ispitPRII[trenutnoPitanja]);
  205. trenutnoPitanja++;
  206. }
  207. }
  208. else if (izbor == 2) {
  209. if (odgovoriNaPitanja == nullptr)
  210. PromijeniOdgovor(ispitPRII, trenutnoPitanja);
  211. else
  212. cout << "Pitanja se mogu mijenjati samo ako kviz nije uradjen!" << endl;
  213. }
  214. else if (izbor == 3) {
  215. if (odgovoriNaPitanja != nullptr)
  216. cout << "Kviz se ne moze pokretati vise puta!" << endl;
  217. else if (trenutnoPitanja < 3)
  218. cout << "Kviz mora imati bar 3 pitanja kako bi se pokrenuo!" << endl;
  219. else
  220. odgovoriNaPitanja = PokreniKviz(ispitPRII, maxPitanja);
  221. }
  222. else if (izbor == 4) {
  223. PrikaziRezultat(ispitPRII, odgovoriNaPitanja, maxPitanja);
  224. }
  225.  
  226. } while (izbor != 5);
  227.  
  228. Dealociraj(ispitPRII, odgovoriNaPitanja, trenutnoPitanja);
  229. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement