Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <conio.h>
- #include <cstdlib>
- using namespace std;
- char * crt = "\n========================================\n";
- /*
- Za admin login
- Username : admin
- pass: password
- */
- enum NacinStudiranja { REDOVAN, DL };
- enum GodinaStudija { prva = 1, druga, treca, cetvrta };
- enum Odgovori { TACNO, NETACNO };
- int brojPitanja = 5;
- struct Student {
- int _brojIndeksa;
- char _imePrezime[30];
- bool _radioTest;
- NacinStudiranja _nacin;
- GodinaStudija _godina;
- Odgovori *_odgovori = new Odgovori[brojPitanja];
- char *password;
- };
- struct Pitanja {
- int rbPitanja;
- char *pitanje;
- Odgovori odg;
- };
- struct Admin {
- char *username;
- char *password;
- };
- char *PrikaziPitanje(Pitanja pitanja) {
- if (pitanja.rbPitanja <= 5) {
- if (pitanja.rbPitanja == 1)
- return "Enumeracije i unije su sinonimi ?";
- else if (pitanja.rbPitanja == 2)
- return "Moguce je kreirati anonimnu uniju ?";
- else if (pitanja.rbPitanja == 3)
- return "Svi clanovi unije koriste istu memorijsku lokaciju ?";
- else if (pitanja.rbPitanja == 4)
- return"Svi clanovi strukture koriste istu memorijsku lokaciju ?";
- else if (pitanja.rbPitanja == 5)
- return "Unija moze biti deklarisana unutar strukture ?";
- }
- else
- return pitanja.pitanje;
- }
- Odgovori GetTacanOdgovor(Pitanja pitanja) {
- if (pitanja.rbPitanja <= 5) {
- if (pitanja.rbPitanja == 1)
- return NETACNO;
- else if (pitanja.rbPitanja == 2)
- return TACNO;
- else if (pitanja.rbPitanja == 3)
- return TACNO;
- else if (pitanja.rbPitanja == 4)
- return NETACNO;
- else if (pitanja.rbPitanja == 5)
- return TACNO;
- }
- else
- return pitanja.odg;
- }
- int GetUspjehStudenta(Odgovori odgovori[], Pitanja *pitanja) {
- if (odgovori == nullptr)
- return -1;
- int brojacTacnih = 0;
- for (int i = 0;i < brojPitanja;i++)
- if (odgovori[i] == GetTacanOdgovor(pitanja[i]))
- brojacTacnih++;
- return brojacTacnih;
- }
- void inicijalizirajPitanja(Pitanja *&pitanja) { // za postojeca pitanja
- for (int i = 0; i < brojPitanja; i++) {
- pitanja[i].rbPitanja = i + 1;
- pitanja[i].pitanje = PrikaziPitanje(pitanja[i]);
- pitanja[i].odg = GetTacanOdgovor(pitanja[i]);
- }
- }
- char *ucitajPitanje() {
- char *p = new char[300];
- cin.getline(p, 300);
- return p;
- }
- void dodajPitanja(Pitanja &pitanja, int i) {
- int unos;
- Odgovori temp;
- pitanja.rbPitanja = i + 1;
- cout << "Unesite pitanje" << endl;
- pitanja.pitanje = ucitajPitanje();
- do {
- cout << "Unesite tacan odgovor (1.Tacno, 2.Netacno)" << endl;
- cin >> unos;
- unos--;
- temp = (Odgovori)unos;
- cin.ignore();
- } while (temp != TACNO && temp != NETACNO);
- pitanja.odg = (Odgovori)unos;
- }
- void PokreniTest(Student & student, Pitanja *pitanja) {
- int unos;
- Odgovori temp;
- for (int i = 0;i < brojPitanja;i++) {
- cout << crt << PrikaziPitanje(pitanja[i]) << crt;
- do {
- cout << "Odgovor (1.Tacno,2.Netacno): ";
- cin >> unos;
- unos--;
- temp = (Odgovori)unos;
- cin.ignore();
- } while (temp != TACNO && temp != NETACNO);
- student._odgovori[i] = temp;
- }
- student._radioTest = true;
- }
- char *ucitajPassword() {
- char *p = new char[24];
- int poz = 0;
- for (int i = 0; i < 24; i++) {
- p[i] = _getch();
- if (p[i] == 8)
- {
- if (i != 0) {
- cout << "\b \b";
- p[--i] = NULL; // zadnji karakter unesen je backspace pa iz tog razloga p[--i]
- i--;
- }
- else
- cout << " ";
- }
- else if (p[i] != 13 && p[i] != 8) { // 13 je ASCII za enter ,a 8 je ASCII za backspace
- cout << "*";
- }
- else if (p[i] == 13)
- {
- p[i] = '\0';
- break;
- }
- }
- return p;
- }
- void UnosPodataka(Student *& niz, int max) {
- int unos;
- char pomocna;
- for (int i = 0;i < max;i++) {
- cout << crt << "\t::STUDENT " << i + 1 << "::" << crt;
- cout << "Unesite ime i prezime: ";
- cin.getline(niz[i]._imePrezime, 30);
- cout << "Unesite broj indeksa: ";
- cin >> niz[i]._brojIndeksa;
- do {
- cout << "Nacin studiranja (1.Redovan, 2.DL): ";
- cin >> unos;
- } while (unos != 1 && unos != 2);
- niz[i]._nacin = (NacinStudiranja)--unos;
- cin.ignore();
- do {
- cout << "Godinu studija (1,2,3,4): ";
- cin >> unos;
- } while (unos < 1 || unos>4);
- niz[i]._godina = (GodinaStudija)unos;
- cin.ignore();
- cout << "Unesite password" << endl;
- niz[i].password = ucitajPassword();
- cout << "\nDa li zelite vidjeti password koji ste ukucali (y / n)" << endl;
- cin >> pomocna;
- if (pomocna == 'y' || pomocna=='Y')
- cout << niz[i].password << endl;
- cin.ignore();
- niz[i]._radioTest = false;
- //tek smo kreirali studenta
- //tako da je sigurno da test nije radjen
- }
- }
- void Pretraga(Student * niz, int max, Pitanja *pitanja) {
- //definisati funkciju(e) koja(e) ce omoguciti pretragu po:
- //1. godini studija
- //2. nacinu studiranja
- //3. rezultatima ostvarenim na testu
- //Nove funkcionalnosti dodati u funkciju PrikaziMeni
- int pomocna;
- bool provjera = false;
- cout << "Po cemu zelite pretragu: \n1.Godini studija\n2.Nacinu Studiranja\n3.Rezultatima ostvarenim na testu" << endl;
- cin >> pomocna;
- cin.ignore();
- if (pomocna == 1)
- {
- GodinaStudija temp;
- int pomocna2;
- cout << "Unesite godinu studija( 1,2,3,4)" << endl;
- do {
- cin >> pomocna2;
- cin.ignore();
- } while (pomocna2 < 1 || pomocna2>4);
- temp = (GodinaStudija)pomocna2;
- cout << "Studenti koji zadovoljavaju pretragu: " << endl;
- for (int i = 0; i < max; i++)
- if (temp == niz[i]._godina) {
- cout << niz[i]._imePrezime << "\t" << niz[i]._brojIndeksa << endl;
- provjera = true;
- }
- }
- else if (pomocna == 2)
- {
- NacinStudiranja temp;
- int pomocna2;
- cout << "Unesite nacin studiranja (0. Redovan, 1. DL)" << endl;
- do {
- cin >> pomocna2;
- cin.ignore();
- } while (pomocna2 != 0 && pomocna2 != 1);
- temp = (NacinStudiranja)pomocna2;
- cout << "Studenti koji zadovoljavaju pretragu: " << endl;
- for (int i = 0; i < max; i++)
- if (temp == niz[i]._nacin) {
- cout << niz[i]._imePrezime << "\t" << niz[i]._brojIndeksa << endl;
- provjera = true;
- }
- }
- else if (pomocna == 3)
- {
- int unos, pomocna2;
- cout << "Unesite procenat i ispisati ce vam sve studente sa tim ili vecim procentom" << endl;
- do {
- cin >> unos;
- } while (unos < 0 || unos>100);
- cout << "Studenti koji zadovoljavaju pretragu: " << endl;
- for (int i = 0; i < max; i++)
- {
- if (niz[i]._radioTest != false) {
- pomocna2 = ((GetUspjehStudenta(niz[i]._odgovori, pitanja))*100.0) / brojPitanja;
- if (pomocna2 >= unos) {
- cout << niz[i]._imePrezime << "\t" << niz[i]._brojIndeksa << "\t" << pomocna2 << endl;
- provjera = true;
- }
- }
- }
- if (provjera == false)
- cout << "Nema studenata po toj pretrazi" << endl;
- }
- else
- cout << "Nepostojeci unos" << endl;
- }
- int GlavniMeni() {
- int izbor;
- do {
- cout << crt << "\t::MAIN MENU::" << crt;
- cout << "1. Admin login" << endl;
- cout << "2. Student login" << endl;
- cout << "3. Exit" << endl;
- cin >> izbor;
- } while (izbor < 1 || izbor>3);
- cin.ignore();
- return izbor;
- }
- int StudentMeni() {
- int izbor;
- do {
- cout << crt << "\t::STUDENT MENU::" << crt;
- cout << "1. Pokreni test" << endl;
- cout << "2. Prikazi rezultate" << endl;
- cout << "3. Pretraga" << endl;
- cout << "4. Logout (back to main menu)" << crt;
- cout << "Unesite izbor: ";
- cin >> izbor;
- } while (izbor < 1 || izbor>4);
- cin.ignore();
- return izbor;
- }
- int AdminMeni() {
- int izbor;
- do {
- cout << crt << "\t::ADMIN MENU::" << crt;
- cout << "1. Dodaj nova pitanja i definisi tacne odgovore" << endl;
- cout << "2. Omoguci studentu ponovo polaganje testa" << endl;
- cout << "3. Unos podataka studentima " << endl;
- cout << "4. Logout (back to main menu)" << endl;
- cin >> izbor;
- } while (izbor < 1 || izbor>4);
- cin.ignore();
- return izbor;
- }
- bool provjeriLoginST(Student *niz, int max) {
- int indeks;
- cout << "Unesite broj indeksa:";
- cin >> indeks;
- cin.ignore();
- cout << "\nUnesite password: ";
- char *password = ucitajPassword();
- for (int i = 0; i < max; i++)
- if ((strcmp(password, niz[i].password) == 0) && (indeks == niz[i]._brojIndeksa))
- return true;
- return false;
- }
- bool provjeriLoginAdmin(Admin admin) {
- char *user = new char[20];
- cout << "\nUnesite username:";
- cin.getline(user, 20);
- cout << endl << "Unesite password:";
- char *password = ucitajPassword();
- if ((strcmp(user, admin.username) == 0) && (strcmp(password, admin.password) == 0))
- return true;
- return false;
- }
- int PrikaziStudente(Student * niz, int max, int izbor)
- {
- int unos;
- bool provjera = false;
- if (izbor == 1)
- {
- cout << "Studenti koji nisu radili test:" << endl;
- for (int i = 0;i < max;i++) {
- if (niz[i]._radioTest == false) {
- cout << i + 1 << ". " << niz[i]._imePrezime << endl;
- provjera = true;
- }
- }
- if (provjera == true) {
- do {
- cout << crt << "Unesite redni broj studenta: ";
- cin >> unos;
- } while ((niz[unos - 1]._radioTest == true) || (unos<1 || unos>max));
- unos--;
- return unos;
- }
- }
- else if (izbor == 2)
- {
- cout << "Ovi studenti su radili ispit - izaberi studenta" << endl;
- for (int i = 0; i < max; i++)
- {
- if (niz[i]._radioTest == true)
- {
- cout << i + 1 << "." << niz[i]._imePrezime << endl;
- provjera = true;
- }
- }
- if (provjera == true)
- {
- do {
- cout << crt << "Unesite redni broj studenta: ";
- cin >> unos;
- } while ((niz[unos - 1]._radioTest == false) || (unos<1 || unos>max));
- unos--;
- return unos;
- }
- }
- if (provjera == false && izbor == 1)
- cout << "Svi studenti su radili ispit" << endl;
- return -1;
- }
- int ispis(Student *niz, int max) {
- int unos;
- for (int i = 0; i < max; i++) {
- cout << i + 1 << ". " << niz[i]._imePrezime << niz[i]._brojIndeksa << endl;
- }
- cout << "Unesite redni broj studenta" << endl;
- do {
- cin >> unos;
- } while (unos<1 || unos>max);
- unos--;
- return unos;
- }
- void popravni(Student *niz, int max) {
- int pomocna = PrikaziStudente(niz, max, 2);
- niz[pomocna]._radioTest = false;
- }
- bool baremJedanRadioTest(Student *niz, int max) {
- for (int i = 0; i < max; i++)
- if (niz[i]._radioTest == true)
- return true;
- return false;
- }
- void dealocirajPitanja(Pitanja *&questions) {
- delete[]questions;
- questions = nullptr;
- }
- void dealocirajStudent(Student *&niz, int max) {
- for (int i = 0; i < max; i++)
- {
- delete[]niz[i].password;
- delete[]niz[i]._odgovori;
- }
- delete[]niz;
- niz = nullptr;
- }
- //dodati provjeru koja ce onemoguciti korisnika da unese redni
- //broj studenta koji ne zadovoljava kriterije - u zavisnosti od izbora
- //na taj nacin cemo biti u mogucnosti da izbacimo nepotrebne provjere
- //u main funkciji
- //dodati sljedece funkcionalnosti:
- //1.administratoru omoguciti da unosi pitanja te definise tacne odgovore
- //2.administratoru dati prava da studentu ponovo omoguci polaganje testa
- //3.uvesti username/password na osnovu koga ce se studenti logirati
- //4.odvojiti administratorske funkcije (meni) od korisnickih
- void main() {
- int max = 3, izbor, student, glavniIzbor, adminIzbor, unosDodajPitanja;
- int brojPokusaja = 3;
- bool prvoPokretanje = false;
- Student *niz = nullptr;
- Pitanja *questions = new Pitanja[brojPitanja];
- inicijalizirajPitanja(questions);
- Admin admin;
- admin.username = "admin";
- admin.password = "password";
- do {
- glavniIzbor = GlavniMeni();
- if (glavniIzbor == 1) { // za admina
- bool provjeraLogin = false;
- brojPokusaja = 3;
- do {
- cout << "\nBroj pokusaja : " << brojPokusaja << endl;
- provjeraLogin = provjeriLoginAdmin(admin);
- if (provjeraLogin == true)
- break;
- else
- brojPokusaja--;
- if (brojPokusaja == 0) {
- cout << "\nPogresno ste unijeli username ili password 3 puta." << endl;
- system("pause");
- }
- system("cls");
- } while (brojPokusaja > 0);
- if (provjeraLogin == true) {
- do {
- adminIzbor = AdminMeni();
- if (adminIzbor == 1) { // dodaj pitanja i odgovore
- cout << "Koliko pitanja zelite dodati" << endl;
- int pomocna = brojPitanja;
- cin >> unosDodajPitanja;
- cin.ignore();
- if (questions != nullptr)
- dealocirajPitanja(questions); // dealociranje prethodnih
- brojPitanja += unosDodajPitanja;
- questions = new Pitanja[brojPitanja];
- inicijalizirajPitanja(questions);
- for (int i = pomocna; i < brojPitanja; i++)
- dodajPitanja(questions[i], i);
- }
- else if (adminIzbor == 2) {
- if (niz ==nullptr) {
- cout << "Prvo morate dodati studente da biste im pristupili" << endl;
- }
- else if (baremJedanRadioTest(niz, max) == true)
- popravni(niz, max);
- else
- cout << "Niko nije radio test" << endl; //ponovo polaganje testa
- }
- else if (adminIzbor == 3)
- {
- if (niz != nullptr)
- cout << "Vec ste dodali podatke za studente" << endl;
- else {
- do {
- cout << "Unesite broj studenata: ";
- cin >> max;
- } while (max <= 0);
- niz = new Student[max];
- cin.ignore();
- system("cls");
- UnosPodataka(niz, max);
- }
- }
- system("pause");
- system("cls");
- } while (adminIzbor != 4);
- }
- }
- else if (glavniIzbor == 2) { // za studenta
- if (niz == nullptr)
- cout << "Prvo morate dodati studente da biste im pristupili" << endl;
- else
- {
- bool provjeraLoginStudent = false;
- brojPokusaja = 3;
- do {
- cout << "\nBroj pokusaja : " << brojPokusaja << endl;
- provjeraLoginStudent = provjeriLoginST(niz,max);
- if (provjeraLoginStudent == true) {
- break;
- }
- else
- brojPokusaja--;
- } while (brojPokusaja > 0);
- if (provjeraLoginStudent == true) {
- do {
- izbor = StudentMeni();
- if (izbor == 1) {
- student = PrikaziStudente(niz, max, izbor);
- PokreniTest(niz[student], questions);
- }
- if (izbor == 2) {
- if (baremJedanRadioTest(niz, max) == false)
- cout << "Niko nije radio test" << endl;
- else {
- student = PrikaziStudente(niz, max, izbor);
- int brojTacnih = GetUspjehStudenta(niz[student]._odgovori, questions);
- cout << crt << "Uspjeh studenta " << brojTacnih << "/" << brojPitanja << " ili " << (brojTacnih*100.0) / brojPitanja << "%" << crt;
- }
- }
- if (izbor == 3)
- Pretraga(niz, max, questions);
- system("pause");
- system("cls");
- } while (izbor != 4);
- }
- }
- }
- } while (glavniIzbor != 3);
- cout << "cao" << endl;
- if(niz!=nullptr)
- dealocirajStudent(niz, max);
- if(questions != nullptr)
- dealocirajPitanja(questions);
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement