Advertisement
Guest User

Untitled

a guest
Aug 7th, 2016
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 13.53 KB | None | 0 0
  1. char * crt = "\n========================================\n";
  2. enum NacinStudiranja{ REDOVAN, DL };
  3. enum GodinaStudija{ prva = 1, druga, treca, cetvrta };
  4. enum Odgovori{ TACNO, NETACNO };
  5. int brojPitanja = 0;
  6. int brIndexa = 1;
  7. int brojAdmina = 0,brojStudenata=0;
  8. struct Student{
  9.     int _brojIndeksa;
  10.     char _imePrezime[30];
  11.     char* korisnickoIme;
  12.     char* password;
  13.     bool _radioTest;
  14.     NacinStudiranja _nacin;
  15.     GodinaStudija _godina;
  16.     Odgovori *_odgovori;
  17. };
  18. void registrujStudenta(Student* baza)
  19. {
  20.     if (baza == nullptr)
  21.     {
  22.         char ime[15];
  23.         char prezime[15];
  24.         baza = new Student[brojStudenata + 1];
  25.         cout << "Unesite ime studenta: ";
  26.         cin.ignore();
  27.         cin.getline(ime, 15);
  28.         cout << "Unesite prezime studenta: ";
  29.         cin.getline(prezime, 15);
  30.         char sifra[15];
  31.         char znak;
  32.         int brojac = 0;
  33.         cout << "Unesite zeljenu sifru: ";
  34.         do
  35.         {
  36.             znak = _getch();
  37.             if ((int)znak == 13)
  38.             {
  39.                 break;
  40.             }
  41.             sifra[brojac] = znak;
  42.             brojac++;
  43.             cout << "*";
  44.         } while (brojac < 30);
  45.         sifra[brojac] = '\0';
  46.        
  47.         strcpy_s(baza[brojStudenata]._imePrezime, strlen(ime)+strlen(" ")+strlen(prezime) + 1, ime);
  48.         strcat_s(baza[brojStudenata]._imePrezime, strlen(ime) + strlen(" ") + strlen(prezime) + 1, " ");
  49.         strcat_s(baza[brojStudenata]._imePrezime, strlen(ime) + strlen(" ") + strlen(prezime) + 1, prezime);
  50.         baza[brojStudenata].password = new char[strlen(sifra) + 1];
  51.         strcpy_s(baza[brojStudenata].password, strlen(sifra) + 1, sifra);
  52.         cout << endl;
  53.        
  54.     }
  55. }
  56. struct Admin{
  57.     char * imePrezime;
  58.     char * username;
  59.     char * password;
  60.     char ** pitanja=nullptr;
  61.     Odgovori * odgovoriAdmin;
  62.     void unos()
  63.     {
  64.         char tempIme[15];
  65.         char tempPrezime[15];
  66.         cout << "Unesite ime administratora: ";
  67.         cin.ignore();
  68.         cin.getline(tempIme, 15);
  69.         cout << "Unesite prezime administratora: ";
  70.         cin.getline(tempPrezime, 15);
  71.         imePrezime = new char[strlen(tempIme) + strlen(tempPrezime) + 2];
  72.         strcpy_s(imePrezime, strlen(tempIme) + strlen(tempPrezime) + 2, tempIme);
  73.         strcat_s(imePrezime, strlen(tempIme) + strlen(tempPrezime) + 2, " ");
  74.         strcat_s(imePrezime, strlen(tempIme) + strlen(tempPrezime) + 2, tempPrezime);
  75.         username = new char[strlen("admin") + strlen(".") + strlen(tempIme) + 1];
  76.         strcpy_s(username, strlen(tempIme) + strlen(tempPrezime) + strlen(".") + 1, tempIme);
  77.         strcat_s(username, strlen(tempIme) + strlen(tempPrezime) + strlen(".") + 1, ".");
  78.         strcat_s(username, strlen(tempIme) + strlen(tempPrezime) + strlen(".") + 1, tempPrezime);
  79.         char sifra[15];
  80.         char znak;
  81.         int brojac = 0;
  82.         cout << "Unesite zeljenu sifru: ";
  83.         do
  84.         {
  85.             znak = _getch();
  86.             if ((int)znak == 13)
  87.             {
  88.                 break;
  89.             }
  90.             sifra[brojac] = znak;
  91.             brojac++;
  92.             cout << "*";
  93.         } while (brojac < 30);
  94.         sifra[brojac] = '\0';
  95.  
  96.  
  97.         password = new char[strlen(sifra) + 1];
  98.         strcpy_s(password, strlen(sifra) + 1, sifra);
  99.         cout << endl;
  100.     }
  101.     bool addPitanje(){
  102.         char temp[300];
  103.         bool uspjeh = false;
  104.         int tempOdg;
  105.         cin.ignore();
  106.         if (pitanja == nullptr)
  107.         {
  108.         ofstream pitanjaFile("Pitanja.txt");
  109.         ofstream odgovoriFile("Odgovori.txt");
  110.             pitanja = new char*[brojPitanja + 1];
  111.             odgovoriAdmin = new Odgovori[brojPitanja + 1];
  112.             cout << "Unesite pitanje koje zelite: " << endl;
  113.             cin.getline(temp, 300);
  114.             pitanja[brojPitanja] = new char[strlen(temp) + 1];
  115.             strcpy_s(pitanja[brojPitanja], strlen(temp) + 1, temp);
  116.             cout << "Unesite odgovor (1-DA/2-NE): ";
  117.             do
  118.             {
  119.                 cin >> tempOdg;
  120.                 cin.ignore();
  121.             } while (tempOdg<1 || tempOdg>2);
  122.             tempOdg--;
  123.             odgovoriAdmin[brojPitanja] = (Odgovori)tempOdg;
  124.             if (pitanjaFile.is_open() && odgovoriFile.is_open()){
  125.                 pitanjaFile << pitanja[brojPitanja] << endl;
  126.                 odgovoriFile <<odgovoriAdmin[brojPitanja] << endl;
  127.             pitanjaFile.close();
  128.             odgovoriFile.close();
  129.             uspjeh = true;
  130.             brojPitanja++;
  131.             return uspjeh;
  132.             }
  133.             else {
  134.                 cout << "Doslo je do greske pri otvaranju jednog od potrebnih fileova" << endl;
  135.                 return false;
  136.             }
  137.         }
  138.         ifstream pitanjaUlaz("Pitanja.txt");
  139.         ifstream odgovoriUlaz("Odgovori.txt");
  140.         char **tempPitanja=nullptr;
  141.         tempPitanja = new char*[brojPitanja + 1];
  142.         char * tempOdogovori = new char[brojPitanja + 1];
  143.         if (pitanjaUlaz.is_open() && odgovoriUlaz.is_open()){
  144.             cout << "Prethodna pitanja su: " << endl;
  145.             for (int i = 0; i < brojPitanja; i++)
  146.             {
  147.                 while (pitanjaUlaz.getline(temp, 300)){
  148.                     cout << temp << endl;
  149.                    
  150.             }
  151.                 tempPitanja[i] = new char[strlen(temp + 1)];
  152.                 strcpy_s(tempPitanja[i], strlen(temp) + 1, temp);
  153.                 odgovoriUlaz >> tempOdogovori[i];
  154.             }
  155.  
  156.             pitanjaUlaz.close();
  157.             odgovoriUlaz.close();
  158.         }
  159.             else{ cout << "Doslo je do greske pri otvaranju file" << endl;
  160.             return uspjeh;
  161.             }
  162.         cout << "Unesite pitanje koje zelite: " << endl;
  163.         cin.getline(temp, 300);
  164.         tempPitanja[brojPitanja] = new char[strlen(temp) + 1];
  165.         strcpy_s(tempPitanja[brojPitanja], strlen(temp) + 1, temp);
  166.         cout << "Unesite odgovor (1-DA/2-NE): ";
  167.         do
  168.         {
  169.             cin >> tempOdg;
  170.             cin.ignore();
  171.         } while (tempOdg<1 || tempOdg>2);
  172.         tempOdg --;
  173.         tempOdogovori[brojPitanja] = (Odgovori)tempOdg;
  174.         brojPitanja++;
  175.         ofstream pitanjaFile("Pitanja.txt", ios::app);
  176.         ofstream odgovoriFile("Odgovori.txt", ios::app);
  177.         for (int i = 0; i < brojPitanja; i++)
  178.         {
  179.             pitanjaFile << tempPitanja[i]<<endl;
  180.             odgovoriFile <<tempOdogovori[i]<<endl;
  181.    
  182.  
  183.         };
  184.         uspjeh = true;
  185.         return uspjeh;
  186.        
  187.     }
  188.    
  189.  
  190. };
  191. void PrikaziPitanje(int rbPitanja, Admin neko){
  192.  
  193.         cout << crt << neko.pitanja[rbPitanja - 1] << crt;
  194.     }
  195. Odgovori GetTacanOdgovor(int rbPitanja,Admin neko){
  196.    
  197.     return neko.odgovoriAdmin[rbPitanja - 1];
  198. }
  199. int GetUspjehStudenta(Odgovori odgovori[],Admin neko){
  200.     int brojacTacnih = 0;
  201.     for (int i = 0; i<brojPitanja; i++)
  202.     if (odgovori[i] == GetTacanOdgovor(i + 1,neko))
  203.         brojacTacnih++;
  204.     return brojacTacnih;
  205. }
  206. void PokreniTest(Student & student, Admin neko){
  207.     int unos;
  208.     Odgovori temp;
  209.     for (int i = 0; i<brojPitanja; i++){
  210.         do{
  211.             PrikaziPitanje(i + 1, neko);
  212.             cout << "Odgovor (1.Tacno,2.Netacno): ";
  213.             cin >> unos;
  214.             cin.ignore();
  215.             unos--;
  216.             temp = (Odgovori)unos;
  217.         } while (temp != TACNO && temp != NETACNO);
  218.         student._odgovori[i] = temp;
  219.     }
  220.     student._radioTest = true;
  221. }
  222. void UnosPodataka(Student * niz, int max){
  223.     int unos;
  224.     for (int i = 0; i<max; i++){
  225.         cout << crt << "\t::STUDENT " << i + 1 << "::" << crt;
  226.         cout << "Unesite ime i prezime: ";
  227.         cin.getline(niz[i]._imePrezime, 30);
  228.         cout << "Unesite broj indeksa: ";
  229.         cin >> niz[i]._brojIndeksa;
  230.         cout << "Nacin studiranja (1.Redovan, 2.DL): ";
  231.         cin >> unos;
  232.         niz[i]._nacin = (NacinStudiranja)--unos;
  233.         cout << "Nacin godinu studija (1,2,3,4): ";
  234.         cin >> unos;
  235.         niz[i]._godina = (GodinaStudija)--unos;
  236.         niz[i]._radioTest = false;//tek smo kreirali studenta
  237.             //tako da je sigurno da test nije radjen
  238.     }
  239. }
  240. void Pretraga(Student * niz, int max,Admin neko){
  241.     int izbor = 0;
  242.     cout << "Izaberite nacin pretrage: " << endl;
  243.     cout << "1. Godina studija" << endl;
  244.     cout << "2. Nacin studiranja" << endl;
  245.     cout << "3. Rezultatu ostvarenom na testu" << endl;
  246.     do{
  247.         cin >> izbor;
  248.     } while (izbor<1 || izbor >3);
  249.     system("cls");
  250.     switch (izbor)
  251.     {
  252.     case 1: {
  253.                 cout << "Unesite zeljenu godinu studija(1/2/3): ";
  254.                 do{
  255.                     cin >> izbor;
  256.                     system("cls");
  257.                 } while (izbor<1 || izbor >3);
  258.                 for (int i = 0; i < max; i++)
  259.                 {
  260.                     if (niz[i]._godina == (GodinaStudija)izbor)
  261.                     {
  262.                         cout << niz[i]._brojIndeksa << "   " << niz[i]._imePrezime << endl;
  263.                         cout << "Godina studija: " << niz[i]._godina;
  264.                         cout << "Nacin studiranja: ";
  265.                         if (niz[i]._nacin == 0)
  266.                             cout << "RREDOVAN" << endl;
  267.                         else cout << "DL" << endl;
  268.                         cout << "Radio test: ";
  269.                         if (niz[i]._radioTest)
  270.                             cout << " DA" << endl;
  271.                         else cout << "NE" << endl;
  272.                         cout << endl;
  273.                     }
  274.                 }
  275.  
  276.     }
  277.     case 2:{
  278.                cout << "Unesite zeljeni nacin studiranja(1-REDOVAN/2-DL): ";
  279.                do{
  280.                    cin >> izbor;
  281.                    system("cls");
  282.                } while (izbor<1 || izbor >2);
  283.                izbor -= 1;
  284.                for (int i = 0; i < max; i++)
  285.                {
  286.                    if (niz[i]._nacin == (GodinaStudija)izbor)
  287.                    {
  288.                        cout << niz[i]._brojIndeksa << "   " << niz[i]._imePrezime << endl;
  289.                        cout << "Godina studija: " << niz[i]._godina;
  290.                        cout << "Nacin studiranja: ";
  291.                        if (niz[i]._nacin == 0)
  292.                            cout << "RREDOVAN" << endl;
  293.                        else cout << "DL" << endl;
  294.                        cout << "Radio test: ";
  295.                        if (niz[i]._radioTest)
  296.                            cout << " DA" << endl;
  297.                        else cout << "NE" << endl;
  298.                        cout << endl;
  299.  
  300.                    }
  301.                }
  302.  
  303.     }
  304.  
  305.     case 3:{
  306.                cout << "Unesite zeljeni uspjeh: ";
  307.                do{
  308.                    cin >> izbor;
  309.                    system("cls");
  310.                } while (izbor<1 || izbor >3);
  311.                cout << "Studenti na trazenoj godini su: " << endl;
  312.                cout << endl;
  313.                for (int i = 0; i < max; i++)
  314.                {
  315.                    if ((float)(GetUspjehStudenta(niz[i]._odgovori,neko) / 5) * 100 >=(float)izbor && niz[i]._radioTest)
  316.                    {
  317.                        cout << niz[i]._brojIndeksa << "   " << niz[i]._imePrezime << endl;
  318.                        cout << "Godina studija: " << niz[i]._godina;
  319.                        cout << "Nacin studiranja: ";
  320.                        if (niz[i]._nacin == 0)
  321.                            cout << "RREDOVAN" << endl;
  322.                        else cout << "DL" << endl;
  323.                        cout << "Radio test: ";
  324.                        cout << " DA" << endl;
  325.                        cout << endl;
  326.                    }
  327.                }
  328.  
  329.     }
  330.     }
  331.  
  332.     //definisati funkciju(e) koja(e) ce omoguciti pretragu po:
  333.     //1. godini studija
  334.     //2. nacinu studiranja
  335.     //3. rezultatima ostvarenim na testu
  336.     //Nove funkcionalnosti dodati u funkciju PrikaziMeni
  337. }
  338. int PrikaziStudentMeni(){
  339.     int izbor;
  340.     do{
  341.         cout << crt << "\t::MENI::" << crt;
  342.         cout << "1. Pokreni test" << endl;
  343.         cout << "2. Prikazi rezultat" << endl;
  344.         cout << "4. Pretraga" << endl;
  345.         cout << "5. Kraj rada" << crt;
  346.         cout << "Unesite izbor: ";     
  347.         cin >> izbor;
  348.         cin.ignore();
  349.         system("cls");
  350.     } while (izbor<1 || izbor>6);
  351.     return izbor;
  352. }
  353. int PrikaziAdminMeni(){
  354.     int izbor;
  355.     do{
  356.         cout << crt << "\t::MENI::" << crt;
  357.         cout << "1. Pokreni test" << endl;
  358.         cout << "2. Prikazi rezultate" << endl;
  359.         cout << "3. Pretraga" << endl;
  360.         cout << "4. Dodaj studenta" << endl;
  361.         cout << "5. Dodaj pitanje" << endl;
  362.         cout << "6. Dodaj admina" << endl;
  363.         cout << "7. Ponisti test" << endl;
  364.         cout << "8. Ukloni studenta" << endl;
  365.         cout << "9. Ukloni pitanje" << endl;
  366.         cout << "10. Kraj rada" << crt;
  367.         cout << "Unesite izbor: ";
  368.         cin >> izbor;
  369.         system("cls");
  370.     } while (izbor<1 || izbor>6);
  371.     return izbor;
  372. }
  373. int PrikaziStudente(Student * niz, int max, int izbor){
  374.     //pokusajte pojednostaviti definiciju funkcije, te smanjiti broj nepotrebnih //provjera
  375.     int unos;
  376.     bool postoji = false;
  377.     for (int i = 0; i<max; i++){
  378.         if (izbor == 1){
  379.             if (niz[i]._radioTest == false){
  380.                 cout << i + 1 << ". " << niz[i]._imePrezime << endl;
  381.                 postoji = true;
  382.             }
  383.         }
  384.         else
  385.         {
  386.             cout << i + 1 << ". " << niz[i]._imePrezime << endl;
  387.             postoji = true;
  388.         }
  389.     }
  390.     //dodati provjeru koja ce onemoguciti korisnika da unese redni
  391.     //broj studenta koji ne zadovoljava kriterije - u zavisnosti od izbora
  392.     //na taj nacin cemo biti u mogucnosti da izbacimo nepotrebne provjere
  393.     //u main funkciji
  394.         cout << crt << "Unesite redni broj studenta: ";
  395.         cin >> unos;
  396.         unos--;
  397.         return unos;
  398.    
  399. }
  400. int logInAdmin(Admin * baza, char * username,char * sifra)
  401. {
  402.     for (int i = 0; i < brojAdmina; i++)
  403.     {
  404.         if (strcmp(baza[i].username, username) == 0 && strcmp(baza[i].password, sifra) == 0)
  405.             return i;
  406.     }
  407.     return -1;
  408. }
  409. int logInStudent(Student * baza, char * username, char * sifra)
  410. {
  411.     for (int i = 0; i < brojAdmina; i++)
  412.     {
  413.         if (strcmp(baza[i].korisnickoIme, username) == 0 && strcmp(baza[i].password, sifra) == 0)
  414.             return i;
  415.     }
  416.     return 0;
  417. }
  418. void main()
  419. {
  420.     Admin * bazaAdmina=nullptr;
  421.     int trenutniAdmin = -1;
  422.     Student * bazaStudenata=nullptr;
  423.     int brojPokusaja = 0;
  424.     int izborMod=0;
  425.     do{
  426.         izborMod =0;
  427.         cout << "Zelite se logovati kao: " << endl << "1. Administrator" << endl << "2. Student" << endl;
  428.         cout << "Unesite izbor: ";
  429.         do{
  430.             cin >> izborMod;
  431.         } while (izborMod<1 || izborMod>2);
  432.         system("cls");
  433.         if (izborMod == 1)
  434.         {
  435.             if (brojAdmina == 0)
  436.             {
  437.                 cout << "Posto se radi o prvom pokretanju, napravite admin account." << endl;
  438.                 cout << endl;
  439.                 bazaAdmina = new Admin[brojAdmina + 1];
  440.                 bazaAdmina[brojAdmina].unos();
  441.                 system("cls");
  442.                 cout << "Vas username je: " << bazaAdmina[brojAdmina].username << endl;
  443.                 cout << endl;
  444.                 brojAdmina++;
  445.             }
  446.                 char tempUsername[30];
  447.                 char tempSifra[30];
  448.                 char znak;
  449.                 int brojac = 0;
  450.                 do {
  451.                     cout << "Unesite vas username: ";
  452.                     cin.getline(tempUsername, 30);
  453.                     cout << "Unesite vasu sifru: ";
  454.                     do
  455.                     {
  456.                         znak = _getch();
  457.                         if ((int)znak == 13)
  458.                         {
  459.                             break;
  460.                         }
  461.                         tempSifra[brojac] = znak;
  462.                         brojac++;
  463.                         cout << "*";
  464.                     } while (brojac < 30);
  465.                     tempSifra[brojac] = '\0';
  466.                     trenutniAdmin = logInAdmin(bazaAdmina, tempUsername, tempSifra);
  467.                     if (trenutniAdmin == -1)
  468.                         brojPokusaja++;
  469.                     else brojPokusaja = 0;
  470.                     cout << endl;
  471.                 } while (trenutniAdmin==(-1));
  472.            
  473.             do{
  474.                 izborMod = PrikaziAdminMeni();
  475.                 cin.ignore();
  476.  
  477.  
  478.                 switch (izborMod)
  479.                 {
  480.                 case 1: {
  481.                             if (bazaAdmina[trenutniAdmin].addPitanje())
  482.                                 cout << "Uspjesno ste dodali pitanje." << endl;
  483.                             else cout << "Popravi" << endl;
  484.                             break;
  485.  
  486.                 }
  487.                 case 10:{
  488.                             system("cls");
  489.                             cout << "Ugodan dan" << endl;
  490.                             break;
  491.                 }
  492.                 }
  493.                 }
  494.                 while (izborMod != 10);
  495.             }
  496.        
  497.         else if (izborMod == 2)
  498.         {
  499.             PrikaziStudentMeni();
  500.         }
  501.     } while (1);
  502. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement