Advertisement
harme

PR3/5/1/2018

Jan 5th, 2018
333
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.08 KB | None | 0 0
  1. #include<iostream>
  2. #include<string>
  3. #include<regex>
  4.  
  5. using namespace std;
  6.  
  7. //Koristiti klasu NedozvoljenaOperacija za bacanje izuzetaka u cijelom programu
  8. class NedozvoljenaOperacija : public exception
  9. {
  10.     int _linijaKoda;
  11. public:
  12.     NedozvoljenaOperacija(const char* poruka, int linijaKoda) : exception(poruka)
  13.     {
  14.         _linijaKoda = linijaKoda;
  15.     }
  16.  
  17.     void Info()
  18.     {
  19.         cout << "Greska u liniji koda " << _linijaKoda << ": " << exception::what() << endl;
  20.     }
  21. };
  22.  
  23. template<class T1, class T2>
  24. class FITKolekcija
  25. {
  26.     T1* _elementi1;
  27.     T2* _elementi2;
  28.     int _trenutno;
  29. public:
  30.     //Konstruktor, destruktor i ostale funkcije potrebne za rad sa klasom
  31.     FITKolekcija()
  32.     {
  33.         _elementi1 = nullptr;
  34.         _elementi2 = nullptr;
  35.         _trenutno = 0;
  36.     }
  37.  
  38.     void addEl(T1 el1, T2 el2) {
  39.         T1* temp1 = new T1[_trenutno + 1];
  40.         T2* temp2 = new T2[_trenutno + 1];
  41.  
  42.         for (int i = 0; i < _trenutno; i++)
  43.         {
  44.             temp1[i] = _elementi1[i];
  45.             temp2[i] = _elementi2[i];
  46.         }
  47.  
  48.         temp1[_trenutno] = el1;
  49.         temp2[_trenutno] = el2;
  50.  
  51.         delete _elementi1;
  52.         delete _elementi2;
  53.         _elementi1 = new T1[_trenutno];
  54.         _elementi2 = new T2[_trenutno];
  55.  
  56.         _elementi1 = temp1;
  57.         _elementi2 = temp2;
  58.  
  59.         _trenutno++;
  60.  
  61.     }
  62. };
  63.  
  64. enum Kategorija { GameChallenge, InnovationChallenge, MobileChallenge, SQLChallenge, CodingChallenge };
  65.  
  66. //Klasu proglasiti apstraktnom
  67. class Osoba
  68. {
  69. protected:
  70.     char* _ime;
  71.     char* _prezime;
  72.     int _godiste;
  73. public:
  74.     Osoba(const char* ime="Nan", const char* prezime = "Nan", int godiste = 2000)
  75.     {
  76.         int vel = strlen(ime) + 1;
  77.         _ime = new char[vel];
  78.         strcpy_s(_ime, vel, ime);
  79.  
  80.         vel = strlen(prezime) + 1;
  81.         _prezime = new char[vel];
  82.         strcpy_s(_prezime, vel, prezime);
  83.  
  84.         _godiste = godiste;
  85.     }
  86.     Osoba& operator = (Osoba& o) {
  87.  
  88.         int vel = strlen(o._ime) + 1;
  89.         _ime = new char[vel];
  90.         strcpy_s(_ime, vel, o._ime);
  91.  
  92.         vel = strlen(o._prezime) + 1;
  93.         _prezime = new char[vel];
  94.         strcpy_s(_prezime, vel, o._prezime);
  95.  
  96.         _godiste = o._godiste;
  97.         return *this;
  98.     }
  99.     ~Osoba()
  100.     {
  101.         delete[] _ime;
  102.         _ime = nullptr;
  103.  
  104.         delete[] _prezime;
  105.         _prezime = nullptr;
  106.     }
  107.  
  108.  
  109. };
  110.  
  111. //Prepoznati nasljedjivanje izmedju odgovarajući klasa
  112. //I ucesnici i clanovi komisije trebaju imati podatke za pristup sistemu (email i password)
  113. class Ucesnik : public Osoba
  114. {
  115. protected:
  116.     char* _email;
  117.     string password; //Najmanje 5 karaktera, kombinacija brojeva i velikih slova
  118.     string _obrazovnaInstitucija;
  119. public:
  120.     //Potrebne funkcije za rad sa klasom
  121.     Ucesnik()
  122.     {
  123.         _email = nullptr;
  124.         password = "------";
  125.         _obrazovnaInstitucija = "------";
  126.     }
  127.     Ucesnik(const char* ime = "Nan", const char* prezime = "Nan", int godiste = 2000,string obrazovnaInstitucija = "------",string pass="------",char* email="------"): Osoba(ime,prezime,godiste)
  128.     {
  129.         _obrazovnaInstitucija = obrazovnaInstitucija;
  130.         _email = new char[strlen(email) + 1];
  131.         strcpy_s(_email, strlen(email) + 1, email);
  132.         password = pass;
  133.     }
  134. };
  135.  
  136. class ClanKomisije: public Ucesnik {
  137.     char* _pozicija; //Radno mjesto u firmi
  138.     string _firma;
  139. public:
  140.     //Potrebne funkcije za rad sa klasom
  141. };
  142.  
  143. //Prijave koje ne ukljucuju izradu i predaju projekata (kategorije: SQLChallenge i CodingChallenge)
  144. class Prijava {
  145.     string _datum; //Podrzani format: dd.MM.yyyy
  146.     Kategorija _kategorija;
  147.     FITKolekcija<Ucesnik, bool> _tim; //Tim se sastoji od jednog ili vise ucesnika, drugi paramtetar oznacava predstavnika tima
  148. public:
  149.     //Konstruktor
  150.  
  151.     //Funkciju za dodavanje clanova tima uz postivanje ogranicenja maksimalno dozvoljenog broja clanova u timu.
  152.     //SQLChallenge i CodingChallenge: 2
  153.     //GameChallenge i MobileChallenge: 3
  154.     //InnovationChallenge: 4
  155.     //Onemoguciti dodavanje istog ucesnika vise puta. Tim moze imati najvise jednog predstavnika.
  156.  
  157.     //Funkciju za promjenu predstavnika tima.
  158. };
  159.  
  160. //Prijave koje ukljucuju izradu projekata (kategorije: GameChallenge, InnovationChallenge i MobileChallenge)
  161. class PrijavaProjekta : public Prijava {
  162.     char* _nazivProjekta;
  163.     string _opisProjekta;
  164.     bool _finalizirano; //Atribut oznacava da li je projekat zavrsen i predan u predvidjenom roku
  165.     bool _prezentacija; //Projekti koji se prezentuju i ocjenjuju
  166. public:
  167.     //Konstruktor i destruktor
  168.  
  169.     //Ostale potrebne funkcije za rad sa klasom
  170.  
  171. };
  172.  
  173. class FITCodingChallenge
  174. {
  175.     int godina;
  176.     string _prijaveDo; //Podrzani format unosa: dd.MM.yyyy (koristiti regex)
  177.     vector<Prijava*> _prijave;
  178.     FITKolekcija<ClanKomisije, Kategorija> _komisija;
  179.     FITKolekcija<Prijava*, FITKolekcija<ClanKomisije*, double>> _ocjene;
  180. public:
  181.     //Konstruktor
  182.  
  183.     //Operator += za dodavanje novih prijava. Isti ucesnik ne moze imati vise prijava u sklopu iste kategorije.
  184.     //Postovati ogranicenje roka za prijave (_prijaveDo).
  185.     //Voditi racuna o alokaciji memorije za prijave (ne zadrzavati adresu proslijedjenog objekta)
  186.  
  187.     //Funkciju koja odredjenu prijavu oznacava kao finaliziranu i odabranu za prezentaciju ili ne.
  188.  
  189.     //Operator () za dodavanje clanova komisije po kategorijama. Sprijeciti dodavanje istih clanova u sklopu jedne kategorije.
  190.  
  191.     //Funkciju za ispis svih prijava po kategorijama. Funkcija neobavezno prima parametar kategoriju.
  192.     //Ispis treba da ukljuci i podatke o ucesnicima, odnosno clanovima tima.
  193.     //Ukoliko kategorija nije proslijedjena, podaci treba da budu grupisani po kategorijama.
  194.  
  195.     //Funkciju za ocjenu projekata (radova) od strane clanova komisije (kolekcija _ocjene).
  196.     //Kolekcija sadrzi samo pokazivace (bez alokacije nove memorije) na postojece prijave i vec definisane clanove komisije.
  197.     //Voditi racuna da se ne mogu ocijeniti projekti koji nisu finalizirani i nisu odabrani za prezentaciju, niti da ocjenu mogu dati clanovi komisije koji
  198.     //nisu pridruzeni odgovarajucoj kategoriji prijave. Svaki clan komisije daje ocjenu za svaki projekat, odnosno rad, u
  199.     //kategoriji gdje je dodijeljen. Ocjene se krecu u rasponu od 1 do 10 za projekte, a za radove u kategoriji SQL ili CodingChallenge
  200.     //u rasponu osvojenih bodova od 0 do 100. Pretpostaviti da su svi ucesnici prijavljeni u kategorijama SQL i CodingChallenge predali radove.
  201.  
  202.     //Funkcija koja na osnovu imena i prezimena clana komisije ispisuje podatke o njegovim ocjenama uključujući
  203.     //prijave na koje se one odnose.
  204.  
  205.     //Funkcija koja na osnovu imena i prezimena ucesnika ispisuje podatke o njegovim prijavama na takmicenju, zajedno sa
  206.     //ocjenama, ukoliko su one definisane za prijavu/e datog ucenika.
  207.  
  208.     //Funkciju za rangiranje kandidata na osnovu kategorije proslijedjene kao parametar.
  209.     //Funkcija treba da na osnovu ocjena clanova komisije ispise rang liste timova zajedno sa prosjecnim ocjenama njihovih projekata (radova).
  210.     //Dakle, konacna rang lista ukljucuje nazive timova (u zavisnosti od kategorije i naziv projekta), te prosjecnu ocjenu.
  211.  
  212.     //Funkciju Info koja ispisuje sve podatke o takmicenju: prijave i clanove komisije po kategorijama, projekte i
  213.  
  214. };
  215.  
  216.  
  217. int main()
  218. {
  219.     //Kreirati objekat klase FITCodingChallenge, te demonstrirati sve implementirane funkcionalnosti.
  220.     Osoba *o = new Osoba("Emrah", "Okic", 1996);
  221.     Ucesnik *u = new Ucesnik("Emrah", "Okic", 1996, "FIT", "123EMRAH", "emrahokic96@hotmail.com");
  222.     FITKolekcija<Osoba, bool> kol;
  223.     kol.addEl(*o, true);
  224.  
  225.     return 0;
  226. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement