Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include <ctype.h>
- #include <string.h>
- #include <conio.h>
- using namespace std;
- char * crt = "::::::::::::::::::::::::::::::::::::::::::::::::::::::";
- class Datum
- {
- int _dan;
- int _mjesec;
- int _godina;
- public:
- Datum()
- {
- _dan = 0;
- _mjesec = 0;
- _godina = 0;
- }
- Datum(int d, int m, int g)
- {
- _dan = d;
- _mjesec = m;
- _godina = g;
- }
- friend ostream& operator<<(ostream&, const Datum&);
- };
- ostream& operator<<(ostream& cout, const Datum& d)
- {
- cout << d._dan << "." << d._mjesec << "." << d._godina << ". god." << endl;
- return cout;
- }
- class Ispit
- {
- char* _predmet;
- Datum _datumOdrzavanja;
- char* _vrijemeOdrzavanja; //početak ispita
- int _trajanje; //trajanje ispita u minutama
- int _maxBrojBodova;
- double _rezultat; //procentualni rezultat ispita
- public:
- Ispit(char* predmet, Datum datumOdrzavanja, char* vrijemeOdrzavanja, int trajanje) : _datumOdrzavanja(datumOdrzavanja)
- {
- int vel = strlen(predmet) + 1;
- _predmet = new char[vel];
- strcpy_s(_predmet, vel, predmet);
- vel = strlen(vrijemeOdrzavanja) + 1;
- _vrijemeOdrzavanja = new char[vel];
- strcpy_s(_vrijemeOdrzavanja, vel, vrijemeOdrzavanja);
- _trajanje = trajanje;
- _maxBrojBodova = 0;
- _rezultat = 0;
- }
- Ispit(Ispit & org):_datumOdrzavanja(org._datumOdrzavanja) {
- int vel = strlen(org._predmet) + 1;
- _predmet = new char[vel];
- strcpy_s(_predmet, vel, org._predmet);
- vel = strlen(org._vrijemeOdrzavanja) + 1;
- _vrijemeOdrzavanja = new char[vel];
- strcpy_s(_vrijemeOdrzavanja, vel, org._vrijemeOdrzavanja);
- _trajanje = org._trajanje;
- _maxBrojBodova = org._maxBrojBodova;
- _rezultat = org._rezultat;
- }
- ~Ispit()
- {
- delete[] _predmet;
- _predmet = NULL;
- delete[] _vrijemeOdrzavanja;
- _vrijemeOdrzavanja = NULL;
- }
- };
- template <class T1, class T2, int max>
- class Kolekcija
- {
- T1 _elementi1[max];
- T2 _elementi2[max];
- int _trenutno;
- public:
- Kolekcija() {
- _elementi1[max];
- _elementi2[max];
- _trenutno = 0;
- }
- bool AddElement(T1 text, T2 bod) {
- if (_trenutno > max)
- return false;
- if (bod < 0)
- return false;
- if (_trenutno != 0) {
- for (int i = 0; i < _trenutno; i++) {
- if (strcmp(text, _elementi1[i]) == 0){
- cout << "Text je vec dodan" << endl;
- return false;
- }
- }
- }
- _elementi1[_trenutno] = text;
- _elementi2[_trenutno] = bod;
- _trenutno++;
- return true;
- }
- void IzmjeniBodove(int id, T2 bodovi) {_elementi2[id] = bodovi;}
- //T2 operator[] (int id) {return _elementi2[id];}
- // T1 operator[] (int id) {return _elementi1[id];}
- Kolekcija operator=(Kolekcija<T1, T2, max> & obj) {
- for (int i = 0; i < _trenutno; i++) {
- _elementi1[i] = obj._elementi1[i];
- _elementi2[i] = obj._elementi2[i];
- }
- _trenutno = obj._trenutno;
- return *this;
- }
- friend ostream& operator<< <> (ostream & COUT, Kolekcija<T1, T2, max> & obj);
- T1 getEl1(int i) {
- return _elementi1[i];
- }
- T2 getEl2(int i) {
- return _elementi2[i];
- }
- //Implementirati potrebne funkcije za rad sa kolekcijom
- };
- template <class T1, class T2, int max>
- ostream& operator<< <> (ostream & COUT, Kolekcija<T1, T2, max> & obj) {
- for (int i = 0; i < obj._trenutno; i++) {
- COUT <<" <" << i << "> " << obj._elementi1[i] << " " << obj._elementi2[i] << endl;
- }
- return COUT;
- }
- class PismeniIspit: public Ispit
- {
- Kolekcija<char*, int, 50>* _pitanja; //kolekcija pitanja sa brojem bodova
- Kolekcija<char*, int, 50> _odgovori; //kolekcija odgovora sa brojem osvojenih bodova
- int _brTacnihOdgovora;
- int _brOsvojenihBodova;
- public:
- //Konstruktor i destruktor funkcije
- PismeniIspit(char* predmet = "--", Datum datumOdrzavanja = Datum(), char* vrijemeOdrzavanja = "--", int trajanje = 0)
- :Ispit(predmet, datumOdrzavanja, vrijemeOdrzavanja, trajanje)
- {
- _pitanja = new Kolekcija<char*, int, 50>;
- _brTacnihOdgovora = 0;
- _brOsvojenihBodova = 0; //Broj osvojenih bodova se inicijalno postavlja na 0. Moguće je dodati i prazan tekst kao odgovor.
- }
- ~PismeniIspit() {
- delete _pitanja;
- _pitanja = NULL;
- }
- //Konstruktor kopije
- PismeniIspit(PismeniIspit & org):Ispit(org) {
- _pitanja = new Kolekcija<char*, int, 50>;
- _brTacnihOdgovora = org._brTacnihOdgovora;
- _brOsvojenihBodova = org._brOsvojenihBodova;
- }
- PismeniIspit& operator() (char * pitanje, int bodovi) {//Operator() za dodavanje pitanja u kolekciju uz pripadajući broj bodova.
- //Ispit ne smije sadržavati ista pitanja. Broj bodova na jednom pitanju ne smije biti negativan.
- _pitanja->AddElement(pitanje, bodovi); //provjeru sam uradio u funkciji Add Element
- return *this;
- }
- PismeniIspit& operator+= (char * odgovor) {//Operator+= za dodavanje odgovora na pitanje. Odgovori se dodaju u redoslijedu dodavanja pitanja.
- _odgovori.AddElement(odgovor, 0);
- return *this;
- }
- friend ostream& operator<< (ostream &COUT, PismeniIspit & obj);
- void ocjenaTacnogOdgovora(int id, char* odgovor) {
- if (strcmp(_odgovori.getEl1(id), odgovor) == 0) {
- _brOsvojenihBodova += _pitanja->getEl2(id);
- _odgovori.IzmjeniBodove(id,_pitanja->getEl2(id));
- _brTacnihOdgovora++;
- }
- _brOsvojenihBodova += 0; //ne potrebno ali jbg
- }
- //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)
- //Funkcija treba da pronađe odgovor na traženo pitanje, te da taj odgovor uporedi sa tačnim odgovorom i postavi
- //osvojene bodove. Student može osvojiti 0 ili maksimalan broj bodova na pitanju. U skladu sa rezultatom
- //provjere postaviti vrijednosti odgovarajućih atributa.
- };
- ostream& operator<< (ostream &COUT, PismeniIspit & obj) {
- COUT << "::: PITANJA :::\n";
- COUT << *obj._pitanja;
- COUT << "::: ODGOVORI :::\n";
- COUT << obj._odgovori;
- COUT << "Broj osvojenih bodova: "<< obj._brOsvojenihBodova << endl;
- COUT << "Broj tacnih odgovora: " << obj._brTacnihOdgovora << endl;
- return COUT;
- }
- class PrakticniIspit:public Ispit
- {
- Kolekcija<char*, char*, 3> _alati; //potrebni alati i njihove verzije, npr. alat "Visual Studio", verzija "2013"
- char* _zadatak; //tekst zadatka
- bool _zadovoljeno; //true ako je student zadovoljio na ispitu, u suprotnom false
- public:
- PrakticniIspit(char* zadatak="---",char* predmet = "--", Datum datumOdrzavanja = Datum(), char* vrijemeOdrzavanja = "--", int trajanje = 0)
- :Ispit(predmet, datumOdrzavanja, vrijemeOdrzavanja, trajanje)
- {
- int size = strlen(zadatak) + 1;
- _zadatak = new char[size];
- strcpy_s(_zadatak, size, zadatak);
- _zadovoljeno = false;
- }
- PrakticniIspit(PrakticniIspit & org) :Ispit(org) {
- int size = strlen(org._zadatak) + 1;
- _zadatak = new char[size];
- strcpy_s(_zadatak, size, org._zadatak);
- _zadovoljeno = false;
- }
- PrakticniIspit& operator() (char * alat, char* verzija) {//Operator() za dodavanje zadatak u kolekciju uz pripadajući broj bodova.
- //Ispit ne smije sadržavati ista pitanja. Broj bodova na jednom pitanju ne smije biti negativan.
- _alati.AddElement(alat, verzija); //provjeru sam uradio u funkciji Add Element
- return *this;
- }
- ~PrakticniIspit() {
- delete[] _zadatak;
- _zadatak = NULL;
- }
- friend ostream& operator<< (ostream &COUT, PrakticniIspit & obj);
- //Na osnovu prethodne implementacije klase PismeniIspit osmisliti i implementirati
- //potrebne funkcije za rad sa klasom PrakticniIspit.
- };
- ostream& operator<< (ostream &COUT, PrakticniIspit & obj) {
- COUT<< ":::::::::::PRATKICNI DIO ISPITA:::::::::::::" << endl;
- COUT << "Zadatak glasi:" << obj._zadatak << endl;
- COUT << "Raspolozivi" << endl;
- COUT << obj._alati << endl;
- if (obj._zadovoljeno)
- cout << "Student je zadovolio ispit" << endl;
- else
- cout << "Student nije zadovolji ispit" << endl;
- return COUT;
- }
- void main()
- {
- //Testirati sve dostupne funkcionalnosti putem datih kolekcija.
- //Drugi parametar kolekcije predstavlja broj indeksa studenta.
- Kolekcija<char*, int, 50> _pitanja;
- Datum Danas(13, 9,2017);
- _pitanja.AddElement("Sto ti se ne spava", 150);
- _pitanja.AddElement("A Sto ti se ne spava", 350);
- //cout << _pitanja;
- PismeniIspit prIII("Programiranje 3", Danas, "10:00", 60);
- PismeniIspit prII(prIII);
- prIII("Zasto mi se ne spava", 100);
- prIII += "Zato sto sam se naspavao";
- prIII("Zasto mi se ne uci", 100);
- prIII += "Jer mi se ne da";
- prIII("Zasto profa daje teske zadatke", 100);
- prIII += "Jer moze";
- cout << prIII;
- cout << "::::::::::::::::::::::::::::::::::::::::::::::::::::::" << endl;
- int id;
- char name[500];
- char dalje = 'Y';
- while (dalje == 'Y') {
- cout << "Na koje pitanje zelite dati odgovor: ";
- cin >> id;
- cin.ignore();
- cout << " Vas odgovor je: " << endl;
- cin.getline(name,500);
- prIII.ocjenaTacnogOdgovora(id, name);
- cout << "\nZelite li jos odgovarati, uneiste Y ili N ";
- char odg;
- cin >> odg;
- cin.ignore();
- dalje = toupper(odg);
- }
- cout << endl << endl;
- cout << prIII;
- PrakticniIspit Baze("Trebate napravit bazu podataka","Baze", Danas, "10:00", 60);
- Baze("Visual Studio", "2015");
- Baze("Visual 213 Studio", "2013");
- Baze("Visual Access", "2013");
- cout << Baze;
- system("pause>0");
- }
Add Comment
Please, Sign In to add comment