Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<string>
- #include<regex>
- using namespace std;
- //Koristiti klasu NedozvoljenaOperacija za bacanje izuzetaka u cijelom programu
- class NedozvoljenaOperacija : public exception
- {
- int _linijaKoda;
- public:
- NedozvoljenaOperacija(const char* poruka, int linijaKoda) : exception(poruka)
- {
- _linijaKoda = linijaKoda;
- }
- void Info()
- {
- cout << "Greska u liniji koda " << _linijaKoda << ": " << exception::what() << endl;
- }
- };
- template<class T1, class T2>
- class FITKolekcija
- {
- T1* _elementi1;
- T2* _elementi2;
- int _trenutno;
- public:
- //Konstruktor, destruktor i ostale funkcije potrebne za rad sa klasom
- FITKolekcija()
- {
- _elementi1 = nullptr;
- _elementi2 = nullptr;
- _trenutno = 0;
- }
- void addEl(T1 el1, T2 el2) {
- T1* temp1 = new T1[_trenutno + 1];
- T2* temp2 = new T2[_trenutno + 1];
- for (int i = 0; i < _trenutno; i++)
- {
- temp1[i] = _elementi1[i];
- temp2[i] = _elementi2[i];
- }
- temp1[_trenutno] = el1;
- temp2[_trenutno] = el2;
- delete _elementi1;
- delete _elementi2;
- _elementi1 = new T1[_trenutno];
- _elementi2 = new T2[_trenutno];
- _elementi1 = temp1;
- _elementi2 = temp2;
- _trenutno++;
- }
- };
- enum Kategorija { GameChallenge, InnovationChallenge, MobileChallenge, SQLChallenge, CodingChallenge };
- //Klasu proglasiti apstraktnom
- class Osoba
- {
- protected:
- char* _ime;
- char* _prezime;
- int _godiste;
- public:
- Osoba(const char* ime="Nan", const char* prezime = "Nan", int godiste = 2000)
- {
- int vel = strlen(ime) + 1;
- _ime = new char[vel];
- strcpy_s(_ime, vel, ime);
- vel = strlen(prezime) + 1;
- _prezime = new char[vel];
- strcpy_s(_prezime, vel, prezime);
- _godiste = godiste;
- }
- Osoba& operator = (Osoba& o) {
- int vel = strlen(o._ime) + 1;
- _ime = new char[vel];
- strcpy_s(_ime, vel, o._ime);
- vel = strlen(o._prezime) + 1;
- _prezime = new char[vel];
- strcpy_s(_prezime, vel, o._prezime);
- _godiste = o._godiste;
- return *this;
- }
- ~Osoba()
- {
- delete[] _ime;
- _ime = nullptr;
- delete[] _prezime;
- _prezime = nullptr;
- }
- };
- //Prepoznati nasljedjivanje izmedju odgovarajući klasa
- //I ucesnici i clanovi komisije trebaju imati podatke za pristup sistemu (email i password)
- class Ucesnik : public Osoba
- {
- protected:
- char* _email;
- string password; //Najmanje 5 karaktera, kombinacija brojeva i velikih slova
- string _obrazovnaInstitucija;
- public:
- //Potrebne funkcije za rad sa klasom
- Ucesnik()
- {
- _email = nullptr;
- password = "------";
- _obrazovnaInstitucija = "------";
- }
- Ucesnik(const char* ime = "Nan", const char* prezime = "Nan", int godiste = 2000,string obrazovnaInstitucija = "------",string pass="------",char* email="------"): Osoba(ime,prezime,godiste)
- {
- _obrazovnaInstitucija = obrazovnaInstitucija;
- _email = new char[strlen(email) + 1];
- strcpy_s(_email, strlen(email) + 1, email);
- password = pass;
- }
- };
- class ClanKomisije: public Ucesnik {
- char* _pozicija; //Radno mjesto u firmi
- string _firma;
- public:
- //Potrebne funkcije za rad sa klasom
- };
- //Prijave koje ne ukljucuju izradu i predaju projekata (kategorije: SQLChallenge i CodingChallenge)
- class Prijava {
- string _datum; //Podrzani format: dd.MM.yyyy
- Kategorija _kategorija;
- FITKolekcija<Ucesnik, bool> _tim; //Tim se sastoji od jednog ili vise ucesnika, drugi paramtetar oznacava predstavnika tima
- public:
- //Konstruktor
- //Funkciju za dodavanje clanova tima uz postivanje ogranicenja maksimalno dozvoljenog broja clanova u timu.
- //SQLChallenge i CodingChallenge: 2
- //GameChallenge i MobileChallenge: 3
- //InnovationChallenge: 4
- //Onemoguciti dodavanje istog ucesnika vise puta. Tim moze imati najvise jednog predstavnika.
- //Funkciju za promjenu predstavnika tima.
- };
- //Prijave koje ukljucuju izradu projekata (kategorije: GameChallenge, InnovationChallenge i MobileChallenge)
- class PrijavaProjekta : public Prijava {
- char* _nazivProjekta;
- string _opisProjekta;
- bool _finalizirano; //Atribut oznacava da li je projekat zavrsen i predan u predvidjenom roku
- bool _prezentacija; //Projekti koji se prezentuju i ocjenjuju
- public:
- //Konstruktor i destruktor
- //Ostale potrebne funkcije za rad sa klasom
- };
- class FITCodingChallenge
- {
- int godina;
- string _prijaveDo; //Podrzani format unosa: dd.MM.yyyy (koristiti regex)
- vector<Prijava*> _prijave;
- FITKolekcija<ClanKomisije, Kategorija> _komisija;
- FITKolekcija<Prijava*, FITKolekcija<ClanKomisije*, double>> _ocjene;
- public:
- //Konstruktor
- //Operator += za dodavanje novih prijava. Isti ucesnik ne moze imati vise prijava u sklopu iste kategorije.
- //Postovati ogranicenje roka za prijave (_prijaveDo).
- //Voditi racuna o alokaciji memorije za prijave (ne zadrzavati adresu proslijedjenog objekta)
- //Funkciju koja odredjenu prijavu oznacava kao finaliziranu i odabranu za prezentaciju ili ne.
- //Operator () za dodavanje clanova komisije po kategorijama. Sprijeciti dodavanje istih clanova u sklopu jedne kategorije.
- //Funkciju za ispis svih prijava po kategorijama. Funkcija neobavezno prima parametar kategoriju.
- //Ispis treba da ukljuci i podatke o ucesnicima, odnosno clanovima tima.
- //Ukoliko kategorija nije proslijedjena, podaci treba da budu grupisani po kategorijama.
- //Funkciju za ocjenu projekata (radova) od strane clanova komisije (kolekcija _ocjene).
- //Kolekcija sadrzi samo pokazivace (bez alokacije nove memorije) na postojece prijave i vec definisane clanove komisije.
- //Voditi racuna da se ne mogu ocijeniti projekti koji nisu finalizirani i nisu odabrani za prezentaciju, niti da ocjenu mogu dati clanovi komisije koji
- //nisu pridruzeni odgovarajucoj kategoriji prijave. Svaki clan komisije daje ocjenu za svaki projekat, odnosno rad, u
- //kategoriji gdje je dodijeljen. Ocjene se krecu u rasponu od 1 do 10 za projekte, a za radove u kategoriji SQL ili CodingChallenge
- //u rasponu osvojenih bodova od 0 do 100. Pretpostaviti da su svi ucesnici prijavljeni u kategorijama SQL i CodingChallenge predali radove.
- //Funkcija koja na osnovu imena i prezimena clana komisije ispisuje podatke o njegovim ocjenama uključujući
- //prijave na koje se one odnose.
- //Funkcija koja na osnovu imena i prezimena ucesnika ispisuje podatke o njegovim prijavama na takmicenju, zajedno sa
- //ocjenama, ukoliko su one definisane za prijavu/e datog ucenika.
- //Funkciju za rangiranje kandidata na osnovu kategorije proslijedjene kao parametar.
- //Funkcija treba da na osnovu ocjena clanova komisije ispise rang liste timova zajedno sa prosjecnim ocjenama njihovih projekata (radova).
- //Dakle, konacna rang lista ukljucuje nazive timova (u zavisnosti od kategorije i naziv projekta), te prosjecnu ocjenu.
- //Funkciju Info koja ispisuje sve podatke o takmicenju: prijave i clanove komisije po kategorijama, projekte i
- };
- int main()
- {
- //Kreirati objekat klase FITCodingChallenge, te demonstrirati sve implementirane funkcionalnosti.
- Osoba *o = new Osoba("Emrah", "Okic", 1996);
- Ucesnik *u = new Ucesnik("Emrah", "Okic", 1996, "FIT", "123EMRAH", "emrahokic96@hotmail.com");
- FITKolekcija<Osoba, bool> kol;
- kol.addEl(*o, true);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement