developer10

Edvin -- IspitPismeniPrakticni -- v1

Jan 10th, 2016
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include<iostream>
  2. #include <ctype.h>
  3. #include <string.h>
  4. #include <conio.h>
  5.  
  6. using namespace std;
  7.  
  8. char * crt = "::::::::::::::::::::::::::::::::::::::::::::::::::::::";
  9.  
  10. class Datum
  11. {
  12.     int _dan;
  13.     int _mjesec;
  14.     int _godina;
  15. public:
  16.     Datum()
  17.     {
  18.         _dan = 0;
  19.         _mjesec = 0;
  20.         _godina = 0;
  21.     }
  22.  
  23.     Datum(int d, int m, int g)
  24.     {
  25.         _dan = d;
  26.         _mjesec = m;
  27.         _godina = g;
  28.     }
  29.  
  30.     friend ostream& operator<<(ostream&, const Datum&);
  31.  
  32. };
  33.  
  34. ostream& operator<<(ostream& cout, const Datum& d)
  35. {
  36.     cout << d._dan << "." << d._mjesec << "." << d._godina << ". god." << endl;
  37.  
  38.     return cout;
  39. }
  40.  
  41. class Ispit
  42. {
  43.     char* _predmet;
  44.     Datum _datumOdrzavanja;
  45.     char* _vrijemeOdrzavanja; //početak ispita
  46.     int _trajanje; //trajanje ispita u minutama
  47.     int _maxBrojBodova;
  48.     double _rezultat; //procentualni rezultat ispita
  49. public:
  50.  
  51.     Ispit(char* predmet, Datum datumOdrzavanja, char* vrijemeOdrzavanja, int trajanje) : _datumOdrzavanja(datumOdrzavanja)
  52.     {
  53.         int vel = strlen(predmet) + 1;
  54.         _predmet = new char[vel];
  55.         strcpy_s(_predmet, vel, predmet);
  56.  
  57.         vel = strlen(vrijemeOdrzavanja) + 1;
  58.         _vrijemeOdrzavanja = new char[vel];
  59.         strcpy_s(_vrijemeOdrzavanja, vel, vrijemeOdrzavanja);
  60.  
  61.         _trajanje = trajanje;
  62.         _maxBrojBodova = 0;
  63.         _rezultat = 0;
  64.  
  65.     }
  66.  
  67.     Ispit(Ispit & org):_datumOdrzavanja(org._datumOdrzavanja) {
  68.  
  69.         int vel = strlen(org._predmet) + 1;
  70.         _predmet = new char[vel];
  71.         strcpy_s(_predmet, vel, org._predmet);
  72.  
  73.         vel = strlen(org._vrijemeOdrzavanja) + 1;
  74.         _vrijemeOdrzavanja = new char[vel];
  75.         strcpy_s(_vrijemeOdrzavanja, vel, org._vrijemeOdrzavanja);
  76.  
  77.         _trajanje = org._trajanje;
  78.  
  79.         _maxBrojBodova = org._maxBrojBodova;
  80.         _rezultat = org._rezultat;
  81.  
  82.     }
  83.  
  84.     ~Ispit()
  85.     {
  86.         delete[] _predmet;
  87.         _predmet = NULL;
  88.  
  89.         delete[] _vrijemeOdrzavanja;
  90.         _vrijemeOdrzavanja = NULL;
  91.     }
  92.  
  93. };
  94.  
  95. template <class T1, class T2, int max>
  96. class Kolekcija
  97. {
  98.     T1 _elementi1[max];
  99.     T2 _elementi2[max];
  100.     int _trenutno;
  101. public:
  102.  
  103.     Kolekcija() {
  104.  
  105.         _elementi1[max];
  106.         _elementi2[max];
  107.         _trenutno = 0;
  108.  
  109.     }
  110.  
  111.     bool AddElement(T1 text, T2 bod) {
  112.  
  113.         if (_trenutno > max)
  114.             return false;
  115.  
  116.         if (bod < 0)
  117.             return false;
  118.  
  119.         if (_trenutno != 0) {
  120.             for (int i = 0; i < _trenutno; i++) {
  121.                 if (strcmp(text, _elementi1[i]) == 0){
  122.                 cout << "Text je vec dodan" << endl;
  123.                 return false;
  124.             }
  125.             }
  126.         }
  127.            
  128.             _elementi1[_trenutno] = text;
  129.             _elementi2[_trenutno] = bod;
  130.             _trenutno++;
  131.  
  132.             return true;
  133.  
  134.     }
  135.  
  136.  
  137.     void IzmjeniBodove(int id, T2 bodovi) {_elementi2[id] = bodovi;}
  138.  
  139.  
  140.     //T2 operator[] (int id) {return _elementi2[id];}
  141.  
  142.  
  143. //  T1 operator[] (int id) {return _elementi1[id];}
  144.  
  145.  
  146.     Kolekcija operator=(Kolekcija<T1, T2, max> & obj) {
  147.  
  148.  
  149.  
  150.         for (int i = 0; i < _trenutno; i++) {
  151.  
  152.             _elementi1[i] = obj._elementi1[i];
  153.             _elementi2[i] = obj._elementi2[i];
  154.  
  155.         }
  156.        
  157.         _trenutno = obj._trenutno;
  158.  
  159.         return *this;
  160.  
  161.     }
  162.  
  163.  
  164.     friend ostream& operator<< <> (ostream & COUT, Kolekcija<T1, T2, max>  & obj);
  165.  
  166.     T1 getEl1(int i) {
  167.  
  168.         return _elementi1[i];
  169.     }
  170.  
  171.     T2 getEl2(int i) {
  172.  
  173.         return _elementi2[i];
  174.     }
  175.  
  176.     //Implementirati potrebne funkcije za rad sa kolekcijom
  177. };
  178. template <class T1, class T2, int max>
  179.  ostream& operator<< <> (ostream & COUT, Kolekcija<T1, T2, max>  & obj) {
  180.  
  181.  
  182.      for (int i = 0; i < obj._trenutno; i++) {
  183.  
  184.          COUT <<" <" << i << "> " << obj._elementi1[i] << "  " << obj._elementi2[i] << endl;
  185.      }
  186.  
  187.      return COUT;
  188.  
  189. }
  190.  
  191.  
  192. class PismeniIspit: public Ispit
  193. {
  194.     Kolekcija<char*, int, 50>* _pitanja; //kolekcija pitanja sa brojem bodova
  195.     Kolekcija<char*, int, 50> _odgovori; //kolekcija odgovora sa brojem osvojenih bodova
  196.     int _brTacnihOdgovora;
  197.     int _brOsvojenihBodova;
  198. public:
  199.  
  200. //Konstruktor i destruktor funkcije
  201.     PismeniIspit(char* predmet = "--", Datum datumOdrzavanja = Datum(), char* vrijemeOdrzavanja = "--", int trajanje = 0)
  202.         :Ispit(predmet, datumOdrzavanja, vrijemeOdrzavanja, trajanje)
  203.     {
  204.         _pitanja = new Kolekcija<char*, int, 50>;
  205.         _brTacnihOdgovora = 0;
  206.         _brOsvojenihBodova = 0; //Broj osvojenih bodova se inicijalno postavlja na 0. Moguće je dodati i prazan tekst kao odgovor.
  207.     }
  208.  
  209.  
  210.     ~PismeniIspit() {
  211.  
  212.         delete _pitanja;
  213.         _pitanja = NULL;
  214.  
  215.  
  216.     }
  217.    
  218.  
  219.     //Konstruktor kopije
  220.  
  221.  
  222.     PismeniIspit(PismeniIspit & org):Ispit(org) {
  223.  
  224.  
  225.         _pitanja = new Kolekcija<char*, int, 50>;
  226.         _brTacnihOdgovora = org._brTacnihOdgovora;
  227.         _brOsvojenihBodova = org._brOsvojenihBodova;
  228.  
  229.  
  230.     }
  231.  
  232.  
  233.     PismeniIspit& operator() (char * pitanje, int bodovi) {//Operator() za dodavanje pitanja u kolekciju uz pripadajući broj bodova.
  234.                                                         //Ispit ne smije sadržavati ista pitanja. Broj bodova na jednom pitanju ne smije biti negativan.
  235.  
  236.         _pitanja->AddElement(pitanje, bodovi);    //provjeru sam uradio u funkciji Add Element
  237.  
  238.         return *this;
  239.  
  240.     }
  241.  
  242.     PismeniIspit& operator+= (char * odgovor) {//Operator+= za dodavanje odgovora na pitanje. Odgovori se dodaju u redoslijedu dodavanja pitanja.
  243.  
  244.         _odgovori.AddElement(odgovor, 0);
  245.  
  246.         return *this;
  247.  
  248.     }
  249.  
  250.  
  251.  
  252.     friend ostream& operator<< (ostream &COUT, PismeniIspit & obj);
  253.    
  254.  
  255.    
  256.     void ocjenaTacnogOdgovora(int id, char* odgovor) {
  257.  
  258.         if (strcmp(_odgovori.getEl1(id), odgovor) == 0) {
  259.        
  260.             _brOsvojenihBodova += _pitanja->getEl2(id);
  261.             _odgovori.IzmjeniBodove(id,_pitanja->getEl2(id));
  262.             _brTacnihOdgovora++;
  263.  
  264.  
  265.         }
  266.  
  267.         _brOsvojenihBodova += 0; //ne potrebno ali jbg
  268.  
  269.  
  270.     }
  271.  
  272.  
  273.  
  274.  
  275.  
  276.     //Funkciju za ocjenu tačnog odgovora koja kao parametar prima redni broj pitanja u kolekciji i tačan odgovor. (jbg, ne kontam sta je pisac htio reci)
  277.     //Funkcija treba da pronađe odgovor na traženo pitanje, te da taj odgovor uporedi sa tačnim odgovorom i postavi
  278.     //osvojene bodove. Student može osvojiti 0 ili maksimalan broj bodova na pitanju. U skladu sa rezultatom
  279.     //provjere postaviti vrijednosti odgovarajućih atributa.
  280. };
  281.  
  282.  
  283. ostream& operator<< (ostream &COUT, PismeniIspit & obj) {
  284.  
  285.     COUT << "::: PITANJA :::\n";
  286.     COUT << *obj._pitanja;
  287.     COUT << "::: ODGOVORI :::\n";
  288.     COUT << obj._odgovori;
  289.     COUT << "Broj osvojenih bodova: "<< obj._brOsvojenihBodova << endl;
  290.     COUT << "Broj tacnih odgovora: " << obj._brTacnihOdgovora << endl;
  291.  
  292.     return COUT;
  293.  
  294.  
  295. }
  296. class PrakticniIspit:public Ispit
  297. {
  298.     Kolekcija<char*, char*, 3> _alati; //potrebni alati i njihove verzije, npr. alat "Visual Studio", verzija "2013"
  299.     char* _zadatak; //tekst zadatka
  300.     bool _zadovoljeno; //true ako je student zadovoljio na ispitu, u suprotnom false
  301. public:
  302.  
  303.     PrakticniIspit(char* zadatak="---",char* predmet = "--", Datum datumOdrzavanja = Datum(), char* vrijemeOdrzavanja = "--", int trajanje = 0)
  304.         :Ispit(predmet, datumOdrzavanja, vrijemeOdrzavanja, trajanje)
  305.     {
  306.        
  307.         int size = strlen(zadatak) + 1;
  308.         _zadatak = new char[size];
  309.         strcpy_s(_zadatak, size, zadatak);
  310.         _zadovoljeno = false;
  311.  
  312.     }
  313.  
  314.     PrakticniIspit(PrakticniIspit & org) :Ispit(org) {
  315.  
  316.  
  317.         int size = strlen(org._zadatak) + 1;
  318.         _zadatak = new char[size];
  319.         strcpy_s(_zadatak, size, org._zadatak);
  320.         _zadovoljeno = false;
  321.  
  322.  
  323.     }
  324.  
  325.  
  326.     PrakticniIspit& operator() (char * alat, char* verzija) {//Operator() za dodavanje zadatak u kolekciju uz pripadajući broj bodova.
  327.                                                            //Ispit ne smije sadržavati ista pitanja. Broj bodova na jednom pitanju ne smije biti negativan.
  328.  
  329.         _alati.AddElement(alat, verzija);    //provjeru sam uradio u funkciji Add Element
  330.  
  331.         return *this;
  332.  
  333.     }
  334.  
  335.    
  336.     ~PrakticniIspit() {
  337.  
  338.         delete[] _zadatak;
  339.         _zadatak = NULL;
  340.  
  341.     }
  342.  
  343.     friend ostream& operator<< (ostream &COUT, PrakticniIspit & obj);
  344.  
  345.  
  346.  
  347.     //Na osnovu prethodne implementacije klase PismeniIspit osmisliti i implementirati
  348.     //potrebne funkcije za rad sa klasom PrakticniIspit.
  349. };
  350.  
  351. ostream& operator<< (ostream &COUT, PrakticniIspit & obj) {
  352.  
  353.     COUT<< ":::::::::::PRATKICNI DIO ISPITA:::::::::::::" << endl;
  354.     COUT << "Zadatak glasi:" << obj._zadatak << endl;
  355.     COUT << "Raspolozivi" << endl;
  356.     COUT << obj._alati << endl;
  357.     if (obj._zadovoljeno)
  358.         cout << "Student je zadovolio ispit" << endl;
  359.     else
  360.         cout << "Student nije zadovolji ispit" << endl;
  361.  
  362.     return COUT;
  363. }
  364.  
  365.  
  366. void main()
  367. {
  368.     //Testirati sve dostupne funkcionalnosti putem datih kolekcija.
  369.     //Drugi parametar kolekcije predstavlja broj indeksa studenta.
  370.  
  371.     Kolekcija<char*, int, 50> _pitanja;
  372.     Datum Danas(13, 9,2017);
  373.  
  374.     _pitanja.AddElement("Sto ti se ne spava", 150);
  375.     _pitanja.AddElement("A Sto ti se ne spava", 350);
  376.  
  377.  
  378.     //cout << _pitanja;
  379.  
  380.     PismeniIspit prIII("Programiranje 3", Danas, "10:00", 60);
  381.     PismeniIspit prII(prIII);
  382.  
  383.     prIII("Zasto mi se ne spava", 100);
  384.     prIII += "Zato sto sam se naspavao";
  385.  
  386.     prIII("Zasto mi se ne uci", 100);
  387.     prIII += "Jer mi se ne da";
  388.  
  389.  
  390.     prIII("Zasto profa daje teske zadatke", 100);
  391.     prIII += "Jer moze";
  392.  
  393.     cout << prIII;
  394.  
  395.     cout << "::::::::::::::::::::::::::::::::::::::::::::::::::::::" << endl;
  396.     int id;
  397.     char name[500];
  398.     char dalje = 'Y';
  399.    
  400.  
  401.  
  402.     while (dalje == 'Y') {
  403.     cout << "Na koje pitanje zelite dati odgovor: ";
  404.     cin >> id;
  405.     cin.ignore();
  406.     cout << " Vas odgovor je: " << endl;
  407.     cin.getline(name,500);
  408.  
  409.     prIII.ocjenaTacnogOdgovora(id, name);
  410.  
  411.     cout << "\nZelite li jos odgovarati, uneiste Y ili N ";
  412.  
  413.     char odg;
  414.     cin >> odg;
  415.     cin.ignore();
  416.     dalje = toupper(odg);
  417.  
  418.     }
  419.  
  420.  
  421.  
  422.  
  423.  
  424.     cout << endl << endl;
  425.  
  426.     cout << prIII;
  427.  
  428.  
  429.     PrakticniIspit Baze("Trebate napravit bazu podataka","Baze", Danas, "10:00", 60);
  430.  
  431.     Baze("Visual Studio", "2015");
  432.     Baze("Visual 213 Studio", "2013");
  433.     Baze("Visual Access", "2013");
  434.  
  435.  
  436.     cout << Baze;
  437.  
  438.  
  439.     system("pause>0");
  440.  
  441. }
Add Comment
Please, Sign In to add comment