Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- using namespace std;
- char * crt = "\n---------------------------\n";
- struct Odgovor {
- bool tacan;
- char * tekstOdgovora;
- };
- struct Pitanje {
- char * tekstPitanja;
- Odgovor odgovori[5];
- int brojOdgovora;
- int brojBodova;
- };
- int trenutnoPitanja = 0;
- int PrikaziMenu() {
- int izbor;
- cout << crt << "\t::MENU::" << crt;
- cout << "1. Dodaj pitanje" << endl;
- cout << "2. Promijeni odgovor na pitanje" << endl;
- cout << "3. Pokreni kviz" << endl;
- cout << "4. Prikazi rezultat" << crt;
- cout << "5. Kraj" << crt;
- do {
- cout << "Vas izbor -> ";
- cin >> izbor;
- } while (izbor < 1 || izbor>5);
- system("cls");
- return izbor;
- }
- void DodajPitanje(Pitanje *& pit) {
- pit = new Pitanje;
- char buffer[255];
- int len, tacanOdg;
- cout << "Unesite tekst pitanja -> ";
- cin.ignore();
- cin.getline(buffer, 255);
- len = strlen(buffer) + 1;
- pit->tekstPitanja = new char[len];
- strcpy_s(pit->tekstPitanja, len, buffer);
- do {
- cout << "Koliko odgovora unosite (2 do 5) -> ";
- cin >> pit->brojOdgovora;
- } while (pit->brojOdgovora < 2 || pit->brojOdgovora > 5);
- cin.ignore();
- for (int i = 0; i < pit->brojOdgovora; i++) {
- cout << "Odgovor " << i + 1 << " -> ";
- cin.getline(buffer, 255);
- len = strlen(buffer) + 1;
- pit->odgovori[i].tekstOdgovora = new char[len];
- strcpy_s(pit->odgovori[i].tekstOdgovora, len, buffer);
- pit->odgovori[i].tacan = false;
- }
- do {
- cout << "Koji od unesenih je tacan odgovor -> ";
- cin >> tacanOdg;
- } while (tacanOdg < 1 || tacanOdg > pit->brojOdgovora);
- pit->odgovori[tacanOdg - 1].tacan = true;
- do {
- cout << "Koliko bodova nosi ovo pitanje -> ";
- cin >> pit->brojBodova;
- } while (pit->brojBodova < 1);
- }
- void PromijeniOdgovor(Pitanje ** pitanja, int trenutno) {
- cout << "Unesite odgovor ili dio odgovora za pretragu -> ";
- char buffer[255], izbor;
- cin.ignore();
- cin.getline(buffer, 255);
- for (int i = 0; i < trenutno; i++) {
- Pitanje * pit = pitanja[i];
- for (int j = 0; j < pit->brojOdgovora; j++) {
- Odgovor * odg = pit->odgovori + j;
- if (strstr(odg->tekstOdgovora, buffer) == nullptr)
- continue;
- cout << "Odgovor " << odg->tekstOdgovora << " pronadjen u pitanju: " << pit->tekstPitanja << endl
- << "Da li je ovo odgovor koji biste zeljeli promijeniti (d/n) -> ";
- cin >> izbor;
- if (izbor != 'd')
- continue;
- cout << "Unesite novi odgovor -> ";
- cin.ignore();
- cin.getline(buffer, 255);
- int len = strlen(buffer) + 1;
- delete[] odg->tekstOdgovora;
- odg->tekstOdgovora = new char[len];
- strcpy_s(odg->tekstOdgovora, len, buffer);
- cout << "Da li zelite postaviti novi odgovor kao tacan (d/n) -> " << endl;
- cin >> izbor;
- if (izbor == 'd') {
- for (int k = 0; k < pit->brojOdgovora; k++) {
- if (pit->odgovori[k].tacan) {
- pit->odgovori[k].tacan = false;
- break;
- }
- }
- odg->tacan = true;
- }
- return;
- }
- }
- cout << "Odgovor nije pronadjen!" << endl;
- }
- int * PokreniKviz(Pitanje ** pitanja, int maxPitanja) {
- int * odgovoriNaPitanja = new int[maxPitanja];
- for (int i = 0; i < trenutnoPitanja; i++) {
- Pitanje * pit = pitanja[i];
- cout << crt << i + 1 << ". " << pit->tekstPitanja << crt;
- for (int j = 0; j < pit->brojOdgovora; j++) {
- cout << j + 1 << ". " << pit->odgovori[j].tekstOdgovora;
- if (j != pit->brojOdgovora - 1)
- cout << endl;
- }
- cout << crt;
- int izbor;
- do {
- cout << "Vas odgovor -> ";
- cin >> izbor;
- } while (izbor < 1 || izbor > pit->brojOdgovora);
- cout << "\b" << crt;
- odgovoriNaPitanja[i] = izbor - 1;
- }
- return odgovoriNaPitanja;
- }
- void PrikaziRezultat(Pitanje ** pitanja, int * odgovori, int maxPitanja) {
- if (odgovori == nullptr) {
- cout << "Kviz nije uradjen!" << endl;
- return;
- }
- int bodovi = 0, maxBodova = 0;
- cout << crt << "REZULTATI" << crt;
- for (int i = 0; i < trenutnoPitanja; i++) {
- Pitanje * pit = pitanja[i];
- cout << i + 1 << ". Pitanje->";
- maxBodova += pit->brojBodova;
- if (pit->odgovori[odgovori[i]].tacan) {
- bodovi += pit->brojBodova;
- cout << "TACNO" << endl;
- }
- else
- cout << "NETACNO" << endl;
- }
- cout << "\b" << crt << "USPJEH: " << bodovi << " / " << maxBodova << " BODOVA(" << (float)bodovi / maxBodova * 100 << " % )" << crt;
- }
- void Dealociraj(Pitanje ** pitanja, int * odgovoriNaPitanja, int trenutnoPitanja) {
- for (int i = 0; i < trenutnoPitanja; i++) {
- for (int j = 0; j < pitanja[i]->brojOdgovora; j++) {
- delete[] pitanja[i]->odgovori[j].tekstOdgovora;
- }
- delete[] pitanja[i]->tekstPitanja;
- delete pitanja[i];
- }
- delete[] odgovoriNaPitanja;
- }
- void main() {
- const int maxPitanja = 6;
- int izbor = 0;
- Pitanje * ispitPRII[maxPitanja];
- int * odgovoriNaPitanja = nullptr;
- do {
- izbor = PrikaziMenu();
- if (izbor == 1) {
- if (trenutnoPitanja == maxPitanja)
- cout << "Dosegli ste maksimalni broj pitanja (" << maxPitanja << ")" << endl;
- else if (odgovoriNaPitanja != nullptr)
- cout << "Pitanja se mogu dodavati samo ako kviz nije uradjen!" << endl;
- else {
- DodajPitanje(ispitPRII[trenutnoPitanja]);
- trenutnoPitanja++;
- }
- }
- else if (izbor == 2) {
- if (odgovoriNaPitanja == nullptr)
- PromijeniOdgovor(ispitPRII, trenutnoPitanja);
- else
- cout << "Pitanja se mogu mijenjati samo ako kviz nije uradjen!" << endl;
- }
- else if (izbor == 3) {
- if (odgovoriNaPitanja != nullptr)
- cout << "Kviz se ne moze pokretati vise puta!" << endl;
- else if (trenutnoPitanja < 3)
- cout << "Kviz mora imati bar 3 pitanja kako bi se pokrenuo!" << endl;
- else
- odgovoriNaPitanja = PokreniKviz(ispitPRII, maxPitanja);
- }
- else if (izbor == 4) {
- PrikaziRezultat(ispitPRII, odgovoriNaPitanja, maxPitanja);
- }
- } while (izbor != 5);
- Dealociraj(ispitPRII, odgovoriNaPitanja, trenutnoPitanja);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement