Advertisement
Guest User

Untitled

a guest
Jan 18th, 2017
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 34.72 KB | None | 0 0
  1. #include <iostream>
  2. #include <conio.h>
  3. #include <string>
  4. #include <vector>
  5. #include <regex>
  6. #include <iomanip>
  7. using namespace std;
  8.  
  9. const string ln = "\n-----------------------------------------------------------\n";
  10.  
  11. //Koristiti klasu NedozvoljenaOperacija za bacanje izuzetaka u cijelom programu
  12. class NedozvoljenaOperacija : public exception
  13. {
  14.     int _linijaKoda;
  15. public:
  16.     NedozvoljenaOperacija(char* poruka, int linijaKoda) : exception(poruka)
  17.     {
  18.         _linijaKoda = linijaKoda;
  19.     }
  20.  
  21.     void Info()
  22.     {
  23.         cout << "Greska u liniji koda " << _linijaKoda << ": " << exception::what() << endl;
  24.     }
  25. };
  26.  
  27. bool ValidirajPodatak(const string & podatak, const string & pravilo, string funkcija = "match")
  28. {
  29.     if (funkcija == "match")
  30.         return regex_match(podatak, regex(pravilo));
  31.     return regex_search(podatak, regex(pravilo));
  32. }
  33.  
  34. template<class T>
  35. void Swap(T & prvi, T & drugi)
  36. {
  37.     T temp = prvi;
  38.     prvi = drugi;
  39.     drugi = temp;
  40. }
  41.  
  42. template<class T1, class T2>
  43. class Kolekcija
  44. {
  45.     T1* _elementi1;
  46.     T2* _elementi2;
  47.     int _trenutno;
  48. public:
  49.     Kolekcija()
  50.     {
  51.         _trenutno = 0;
  52.  
  53.         _elementi1 = nullptr;
  54.         _elementi2 = nullptr;
  55.     }
  56.  
  57.     Kolekcija(const Kolekcija & obj)
  58.     {
  59.         _trenutno = obj._trenutno;
  60.  
  61.         _elementi1 = new T1[_trenutno];
  62.         _elementi2 = new T2[_trenutno];
  63.  
  64.         for (size_t i = 0; i < _trenutno; i++)
  65.         {
  66.             _elementi1[i] = obj._elementi1[i];
  67.             _elementi2[i] = obj._elementi2[i];
  68.         }
  69.     }
  70.  
  71.     ~Kolekcija()
  72.     {
  73.         delete[]_elementi1;
  74.         _elementi1 = nullptr;
  75.         delete[]_elementi2;
  76.         _elementi2 = nullptr;
  77.     }
  78.  
  79.     Kolekcija & operator =(const Kolekcija & right)
  80.     {
  81.         if (this != &right)
  82.         {
  83.             delete[]_elementi1;
  84.             delete[]_elementi2;
  85.  
  86.             _trenutno = right._trenutno;
  87.  
  88.             _elementi1 = new T1[_trenutno];
  89.             _elementi2 = new T2[_trenutno];
  90.  
  91.             for (size_t i = 0; i < _trenutno; i++)
  92.             {
  93.                 _elementi1[i] = right._elementi1[i];
  94.                 _elementi2[i] = right._elementi2[i];
  95.             }
  96.         }
  97.         return *this;
  98.     }
  99.  
  100.     void Add(const T1 & element_1, const T2 & element_2)
  101.     {
  102.         for (size_t i = 0; i < _trenutno; i++)
  103.             if (_elementi1[i] == element_1 && _elementi2[i] == element_2)
  104.                 throw NedozvoljenaOperacija("Ne mozete dodavati iste elemente u kolekciju", __LINE__);
  105.  
  106.         T1 * temp_1 = new T1[_trenutno + 1];
  107.         T2 * temp_2 = new T2[_trenutno + 1];
  108.  
  109.         for (size_t i = 0; i < _trenutno; i++)
  110.         {
  111.             temp_1[i] = _elementi1[i];
  112.             temp_2[i] = _elementi2[i];
  113.         }
  114.         temp_1[_trenutno] = element_1;
  115.         temp_2[_trenutno++] = element_2;
  116.  
  117.         delete[]_elementi1;
  118.         delete[]_elementi2;
  119.  
  120.         _elementi1 = temp_1;
  121.         _elementi2 = temp_2;
  122.     }
  123.  
  124.     int size()const
  125.     {
  126.         return _trenutno;
  127.     }
  128.  
  129.     void sort(int NaOsnovuKojegElementa = 2)
  130.     {
  131.         int indikatorZamjene = 0;
  132.         int length = _trenutno;
  133.  
  134.         do
  135.         {
  136.             indikatorZamjene = 1;
  137.             for (size_t i = 0; i < length - 1; i++)
  138.             {
  139.                 if (_elementi2[i] < _elementi2[i + 1])
  140.                 {
  141.                     Swap(_elementi1[i], _elementi1[i + 1]);
  142.                     Swap(_elementi2[i], _elementi2[i + 1]);
  143.                     indikatorZamjene = 0;
  144.                 }
  145.             }
  146.             length--;
  147.         } while (length > 1 && indikatorZamjene == 0);
  148.     }
  149.  
  150.     T1 & operator [](int index)const
  151.     {
  152.         if (index >= 0 && index < _trenutno)
  153.             return _elementi1[index];
  154.         throw NedozvoljenaOperacija("Index lokacija nije validna", __LINE__);
  155.     }
  156.  
  157.     T2 & GetElement_2(int index)const
  158.     {
  159.         if (index >= 0 && index < _trenutno)
  160.             return _elementi2[index];
  161.         throw NedozvoljenaOperacija("Index lokacija nije validna", __LINE__);
  162.     }
  163.  
  164.     friend bool operator == <>(const Kolekcija &, const Kolekcija &);
  165.     friend bool operator != <>(const Kolekcija &, const Kolekcija &);
  166. };
  167. template<class T1, class T2>
  168. bool operator == <>(const Kolekcija<T1, T2> & left, const Kolekcija<T1, T2> & right)
  169. {
  170.     if (left._trenutno != right._trenutno)
  171.         return false;
  172.     else
  173.     {
  174.         for (size_t i = 0; i < left._trenutno; i++)
  175.             if (left._elementi1[i] != right._elementi1[i] || left._elementi2[i] != right._elementi2[i])
  176.                 return false;
  177.     }
  178.     return true;
  179. }
  180. template<class T1, class T2>
  181. bool operator != <>(const Kolekcija<T1, T2> & left, const Kolekcija<T1, T2> & right)
  182. {
  183.     return !(left == right);
  184. }
  185.  
  186. enum Kategorija { GameChallenge, InnovationChallenge, MobileChallenge, SQLChallenge, CodingChallenge };
  187. char * ispisKategorije[] = { "GameChallenge", "InnovationChallenge", "MobileChallenge", "SQLChallenge", "CodingChallenge" };
  188.  
  189. class Osoba
  190. {
  191.     char* _ime;
  192.     char* _prezime;
  193.     int _godiste;
  194. public:
  195.     Osoba()
  196.     {
  197.         _ime = _prezime = nullptr;
  198.         _godiste = 1997;
  199.     }
  200.  
  201.     Osoba(char* ime, char* prezime, int godiste)
  202.     {
  203.         int vel = strlen(ime) + 1;
  204.         _ime = new char[vel];
  205.         strcpy_s(_ime, vel, ime);
  206.  
  207.         vel = strlen(prezime) + 1;
  208.         _prezime = new char[vel];
  209.         strcpy_s(_prezime, vel, prezime);
  210.  
  211.         _godiste = godiste;
  212.     }
  213.  
  214.     Osoba(const Osoba & obj)
  215.     {
  216.         int vel = strlen(obj._ime) + 1;
  217.         _ime = new char[vel];
  218.         strcpy_s(_ime, vel, obj._ime);
  219.  
  220.         vel = strlen(obj._prezime) + 1;
  221.         _prezime = new char[vel];
  222.         strcpy_s(_prezime, vel, obj._prezime);
  223.  
  224.         _godiste = obj._godiste;
  225.     }
  226.  
  227.     virtual ~Osoba() = 0
  228.     {
  229.         delete[] _ime;
  230.         _ime = nullptr;
  231.  
  232.         delete[] _prezime;
  233.         _prezime = nullptr;
  234.     }
  235.  
  236.     Osoba & operator =(const Osoba & right)
  237.     {
  238.         if (this != &right)
  239.         {
  240.             delete[] _ime;
  241.             delete[] _prezime;
  242.  
  243.             int vel = strlen(right._ime) + 1;
  244.             _ime = new char[vel];
  245.             strcpy_s(_ime, vel, right._ime);
  246.  
  247.             vel = strlen(right._prezime) + 1;
  248.             _prezime = new char[vel];
  249.             strcpy_s(_prezime, vel, right._prezime);
  250.  
  251.             _godiste = right._godiste;
  252.         }
  253.         return *this;
  254.     }
  255.  
  256.     const char * GetIme() const
  257.     {
  258.         return _ime;
  259.     }
  260.     const char * GetPrezime() const
  261.     {
  262.         return _prezime;
  263.     }
  264.     string GetImePrezime()const
  265.     {
  266.         return string(_ime) + " " + string(_prezime);
  267.     }
  268.     int GetGodiste()const
  269.     {
  270.         return _godiste;
  271.     }
  272. };
  273.  
  274. //I ucesnici i clanovi komisije trebaju imati podatke za pristup sistemu (email i password)
  275. class Ucesnik : public Osoba
  276. {
  277.     char* _email;
  278.     string _password; //Najmanje 5 karaktera, kombinacija brojeva i velikih slova
  279.     string _obrazovnaInstitucija;
  280. public:
  281.     Ucesnik()
  282.     {
  283.         _email = nullptr;
  284.     }
  285.  
  286.     Ucesnik(char* ime, char* prezime, int godiste, char * email, string password, string obrzInst) : Osoba(ime, prezime, godiste)
  287.     {
  288.         if (ValidirajPodatak(password, "(?=.{5,})(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])", "search"))
  289.         {
  290.             int size = strlen(email) + 1;
  291.             _email = new char[size];
  292.             strcpy_s(_email, size, email);
  293.  
  294.             _password = password;
  295.             _obrazovnaInstitucija = obrzInst;
  296.         }
  297.         else
  298.             throw NedozvoljenaOperacija("Procitatjte uslove koje vasa lozinka mora ispuniti", __LINE__);
  299.     }
  300.  
  301.     Ucesnik(const Ucesnik & obj) : Osoba(obj)
  302.     {
  303.         int size = strlen(obj._email) + 1;
  304.         _email = new char[size];
  305.         strcpy_s(_email, size, obj._email);
  306.  
  307.         _password = obj._password;
  308.         _obrazovnaInstitucija = obj._obrazovnaInstitucija;
  309.     }
  310.  
  311.     ~Ucesnik()
  312.     {
  313.         delete[] _email;
  314.         _email = nullptr;
  315.     }
  316.  
  317.     Ucesnik & operator =(const Ucesnik & right)
  318.     {
  319.         if (this != &right)
  320.         {
  321.             delete[]_email;
  322.  
  323.             Osoba::operator=(right);
  324.  
  325.             int size = strlen(right._email) + 1;
  326.             _email = new char[size];
  327.             strcpy_s(_email, size, right._email);
  328.  
  329.             _password = right._password;
  330.             _obrazovnaInstitucija = right._obrazovnaInstitucija;
  331.         }
  332.         return *this;
  333.     }
  334.  
  335.     const char * GetEmail()const
  336.     {
  337.         return _email;
  338.     }
  339.     string GetPassword()const
  340.     {
  341.         return _password;
  342.     }
  343.     string GetInstitucija()const
  344.     {
  345.         return _obrazovnaInstitucija;
  346.     }
  347.  
  348.     friend bool operator ==(const Ucesnik &, const Ucesnik &);
  349.     friend bool operator !=(const Ucesnik &, const Ucesnik &);
  350.     friend ostream & operator <<(ostream &, const Ucesnik &);
  351. };
  352.  
  353. ostream & operator <<(ostream & cout, const Ucesnik & obj)
  354. {
  355.     cout << "Ime i prezime: " << obj.GetImePrezime() << " - " << obj.GetGodiste() << endl;
  356.     cout << "Obrazovna institucija: " << obj._obrazovnaInstitucija << endl;
  357.     cout << "Email: " << obj._email << endl;
  358.  
  359.     return cout;
  360. }
  361.  
  362. bool operator ==(const Ucesnik & left, const Ucesnik & right)
  363. {
  364.     if (left.GetImePrezime() != right.GetImePrezime())
  365.         return false;
  366.     else if (left.GetGodiste() != right.GetGodiste())
  367.         return false;
  368.     else if (left._obrazovnaInstitucija != right._obrazovnaInstitucija)
  369.         return false;
  370.     else if (strcmp(left._email, right._email) != 0)
  371.         return false;
  372.     else if (left._password != right._password)
  373.         return false;
  374.     return true;
  375. }
  376. bool operator !=(const Ucesnik & left, const Ucesnik & right)
  377. {
  378.     return !(left == right);
  379. }
  380.  
  381. class ClanKomisije : public Ucesnik
  382. {
  383.     char* _pozicija; //Radno mjesto u firmi
  384.     string _firma;
  385. public:
  386.     ClanKomisije()
  387.     {
  388.         _pozicija = nullptr;
  389.     }
  390.  
  391.     ClanKomisije(char* ime, char* prezime, int godiste, char * pozicija, char * email, string password, string obrzInst, string firma) :
  392.         Ucesnik(ime, prezime, godiste, email, password, obrzInst)
  393.     {
  394.         int size = strlen(pozicija) + 1;
  395.         _pozicija = new char[size];
  396.         strcpy_s(_pozicija, size, pozicija);
  397.  
  398.         _firma = firma;
  399.     }
  400.  
  401.     ClanKomisije(const ClanKomisije & obj) : Ucesnik(obj)
  402.     {
  403.         int size = strlen(obj._pozicija) + 1;
  404.         _pozicija = new char[size];
  405.         strcpy_s(_pozicija, size, obj._pozicija);
  406.  
  407.         _firma = obj._firma;
  408.     }
  409.  
  410.     ~ClanKomisije()
  411.     {
  412.         delete[] _pozicija;
  413.         _pozicija = nullptr;
  414.     }
  415.  
  416.     ClanKomisije & operator =(const ClanKomisije & right)
  417.     {
  418.         if (this != &right)
  419.         {
  420.             delete[] _pozicija;
  421.  
  422.             Ucesnik::operator=(right);
  423.  
  424.             int size = strlen(right._pozicija) + 1;
  425.             _pozicija = new char[size];
  426.             strcpy_s(_pozicija, size, right._pozicija);
  427.  
  428.             _firma = right._firma;
  429.         }
  430.         return *this;
  431.     }
  432.  
  433.     const char * GetPozicija()const
  434.     {
  435.         return _pozicija;
  436.     }
  437.     string GetFirma()const
  438.     {
  439.         return _firma;
  440.     }
  441.  
  442.     friend ostream & operator <<(ostream &, const ClanKomisije &);
  443. };
  444.  
  445. ostream & operator <<(ostream & cout, const ClanKomisije & obj)
  446. {
  447.     cout << ClanKomisije(obj);
  448.     cout << "Pozicija: " << obj._pozicija << endl;
  449.     cout << "Firma: " << obj._firma << endl;
  450.  
  451.     return cout;
  452. }
  453.  
  454. //Prijave koje ne ukljucuju izradu i predaju projekata (kategorije: SQLChallenge i CodingChallenge)
  455. class Prijava
  456. {
  457.     string _datum; //Podrzani format: dd.MM.yyyy
  458.     Kategorija _kategorija;
  459.     Kolekcija<Ucesnik, bool> _tim; //Tim se sastoji od jednog ili vise ucesnika, drugi paramtetar oznacava predstavnika tima
  460.  
  461.     bool ImaLiPredstavnika()const
  462.     {
  463.         for (size_t i = 0; i < _tim.size(); i++)
  464.             if (_tim.GetElement_2(i))
  465.                 return true;
  466.         return false;
  467.     }
  468.     void PonistiPredstavnika()
  469.     {
  470.         for (size_t i = 0; i < _tim.size(); i++)
  471.         {
  472.             if (_tim.GetElement_2(i))
  473.                 _tim.GetElement_2(i) = false;
  474.         }
  475.     }
  476. public:
  477.     Prijava(string datum, Kategorija kategorija)
  478.     {
  479.         if (ValidirajPodatak(datum, "(\\d{2})\\.(\\d{2})\\.(\\d{4})"))
  480.         {
  481.             _datum = datum;
  482.             _kategorija = kategorija;
  483.         }
  484.         else
  485.             throw NedozvoljenaOperacija("Niste unijeli datum u trazenom formatu", __LINE__);
  486.     }
  487.     virtual ~Prijava()
  488.     {
  489.  
  490.     }
  491.     //Funkciju za dodavanje clanova tima uz postivanje ogranicenja maksimalno dozvoljenog broja clanova u timu.
  492.     //SQLChallenge i CodingChallenge: 2
  493.     //GameChallenge i MobileChallenge: 3
  494.     //InnovationChallenge: 4
  495.     //Onemoguciti dodavanje istog ucesnika vise puta. Tim moze imati najvise jednog predstavnika.
  496.    
  497.     void DodajClana(const Ucesnik & ucesnik, bool predstavnik = false)
  498.     {
  499.         for (size_t i = 0; i < _tim.size(); i++)
  500.             if (_tim[i] == ucesnik)
  501.                 throw NedozvoljenaOperacija("Ne mozete dodati istog ucesnika vise puta", __LINE__);
  502.  
  503.         int ukupnoClanova = _tim.size();
  504.  
  505.         if (_kategorija == SQLChallenge || _kategorija == CodingChallenge)
  506.         {
  507.             if (ukupnoClanova < 2)
  508.             {
  509.                 if (ImaLiPredstavnika() && predstavnik)
  510.                     throw NedozvoljenaOperacija("Ovaj tim vec ima predstavnika", __LINE__);
  511.  
  512.                 if (ukupnoClanova == 1 && !ImaLiPredstavnika() && !predstavnik)
  513.                     throw NedozvoljenaOperacija("Neko u timu mora biti predstavnik", __LINE__);
  514.  
  515.                 //cout << ucesnik.GetImePrezime() << " uspjesno dodan u tim" << endl;
  516.                 _tim.Add(ucesnik, predstavnik);
  517.             }
  518.             else
  519.                 throw NedozvoljenaOperacija("Tim moze imati maksimalno 2 clana", __LINE__);
  520.         }
  521.         else if (_kategorija == GameChallenge || _kategorija == MobileChallenge)
  522.         {
  523.             if (ukupnoClanova < 3)
  524.             {
  525.                 if (ImaLiPredstavnika() && predstavnik)
  526.                     throw NedozvoljenaOperacija("Ovaj tim vec ima predstavnika", __LINE__);
  527.  
  528.                 if (ukupnoClanova == 2 && !ImaLiPredstavnika() && !predstavnik)
  529.                     throw NedozvoljenaOperacija("Neko u timu mora biti predstavnik", __LINE__);
  530.  
  531.                 //cout << ucesnik.GetImePrezime() << " uspjesno dodan u tim" << endl;
  532.                 _tim.Add(ucesnik, predstavnik);
  533.             }
  534.             else
  535.                 throw NedozvoljenaOperacija("Tim moze imati maksimalno 3 clana", __LINE__);
  536.         }
  537.         else
  538.         {
  539.             if (ukupnoClanova < 4)
  540.             {
  541.                 if (ImaLiPredstavnika() && predstavnik)
  542.                     throw NedozvoljenaOperacija("Ovaj tim vec ima predstavnika", __LINE__);
  543.  
  544.                 if (ukupnoClanova == 3 && !ImaLiPredstavnika() && !predstavnik)
  545.                     throw NedozvoljenaOperacija("Neko u timu mora biti predstavnik", __LINE__);
  546.  
  547.                 //cout << ucesnik.GetImePrezime() << " uspjesno dodan u tim" << endl;
  548.                 _tim.Add(ucesnik, predstavnik);
  549.             }
  550.             else
  551.                 throw NedozvoljenaOperacija("Tim moze imati maksimalno 4 clana", __LINE__);
  552.         }
  553.  
  554.     }
  555.     //Funkciju za promjenu predstavnika tima.
  556.     void PromjeniPredstavnikaTima(const Ucesnik & ucesnik)
  557.     {
  558.         if (!ImaLiPredstavnika())
  559.             throw NedozvoljenaOperacija("Tim jos uvijek nema predstavnika", __LINE__);
  560.  
  561.         bool pronadjen = false;
  562.         for (size_t i = 0; i < _tim.size(); i++)
  563.         {
  564.             if (_tim[i] == ucesnik)
  565.             {
  566.                 PonistiPredstavnika();
  567.                 _tim.GetElement_2(i) = true;
  568.                 pronadjen = true;
  569.             }
  570.         }
  571.         if (!pronadjen)
  572.             throw NedozvoljenaOperacija("Ovaj ucesnik nije registrovan u timu", __LINE__);
  573.     }
  574.  
  575.     string GetDatumKategorija()const
  576.     {
  577.         return string(ispisKategorije[_kategorija]) + " (" + _datum + ")";
  578.     }
  579.     string GetDatum()const
  580.     {
  581.         return _datum;
  582.     }
  583.     Kategorija GetKategorija()const
  584.     {
  585.         return _kategorija;
  586.     }
  587.     Kolekcija<Ucesnik, bool> GetTim()const
  588.     {
  589.         return _tim;
  590.     }
  591.  
  592.     friend ostream & operator <<(ostream &, const Prijava &);
  593.     friend bool operator ==(const Prijava &, const Prijava &);
  594.     friend bool operator !=(const Prijava &, const Prijava &);
  595. };
  596. bool operator ==(const Prijava & left, const Prijava & right)
  597. {
  598.     if (left._datum != right._datum)
  599.         return false;
  600.     else if (left._kategorija != right._kategorija)
  601.         return false;
  602.     else if (left._tim != right._tim)
  603.         return false;
  604.     return true;
  605. }
  606. bool operator !=(const Prijava & left, const Prijava & right)
  607. {
  608.     return !(left == right);
  609. }
  610.  
  611. ostream & operator <<(ostream & cout, const Prijava & obj)
  612. {
  613.     cout << "Datum prijave: " << obj._datum << endl;
  614.     cout << "Kategorija: " << ispisKategorije[obj._kategorija] << endl;
  615.     cout << "\t:::TIM INFO:::\n";
  616.     for (size_t i = 0; i < obj._tim.size(); i++)
  617.     {
  618.         cout << i + 1 << ". " << obj._tim[i].GetImePrezime();
  619.         if (obj._tim.GetElement_2(i))
  620.             cout << " - Predstavnik tima" << endl;
  621.         else
  622.             cout << endl;
  623.     }
  624.  
  625.     return cout;
  626. }
  627.  
  628. //Prijave koje ukljucuju izradu projekata (kategorije: GameChallenge, InnovationChallenge i MobileChallenge)
  629. class PrijavaProjekta : public Prijava
  630. {
  631.     char* _nazivProjekta;
  632.     string _opisProjekta;
  633.     bool _finalizirano; //Atribut oznacava da li je projekat zavrsen i predan u predvidjenom roku
  634.     bool _prezentacija; //Projekti koji se prezentuju i ocjenjuju
  635.  
  636. public:
  637.     PrijavaProjekta(char * nazivProjekta, string opisProjekta, string datum, Kategorija kategorija) : Prijava(datum, kategorija)
  638.     {
  639.         int size = strlen(nazivProjekta) + 1;
  640.         _nazivProjekta = new char[size];
  641.         strcpy_s(_nazivProjekta, size, nazivProjekta);
  642.  
  643.         _opisProjekta = opisProjekta;
  644.  
  645.         _finalizirano = _prezentacija = false;
  646.     }
  647.  
  648.     PrijavaProjekta(const PrijavaProjekta & obj) : Prijava(obj)
  649.     {
  650.         int size = strlen(obj._nazivProjekta) + 1;
  651.         _nazivProjekta = new char[size];
  652.         strcpy_s(_nazivProjekta, size, obj._nazivProjekta);
  653.  
  654.         _opisProjekta = obj._opisProjekta;
  655.  
  656.         _finalizirano = obj._finalizirano;
  657.  
  658.         _prezentacija = obj._prezentacija;
  659.     }
  660.  
  661.     ~PrijavaProjekta()
  662.     {
  663.         delete[] _nazivProjekta;
  664.         _nazivProjekta = nullptr;
  665.     }
  666.  
  667.     void Finaliziraj(bool odabranoZaPrezentaciju)
  668.     {
  669.         _finalizirano = true;
  670.         _prezentacija = odabranoZaPrezentaciju;
  671.     }
  672.  
  673.     bool GetFinalizirano()const
  674.     {
  675.         return _finalizirano;
  676.     }
  677.     bool GetPrezentacija()const
  678.     {
  679.         return _prezentacija;
  680.     }
  681.     const char * GetNazivProjekta()const
  682.     {
  683.         return _nazivProjekta;
  684.     }
  685.  
  686.     friend ostream & operator <<(ostream &, const PrijavaProjekta &);
  687.     friend bool operator ==(const PrijavaProjekta &, const PrijavaProjekta &);
  688.     friend bool operator !=(const PrijavaProjekta &, const PrijavaProjekta &);
  689. };
  690.  
  691. ostream & operator <<(ostream & cout, const PrijavaProjekta & obj)
  692. {
  693.     cout << "Naziv projekta: " << obj._nazivProjekta << endl;
  694.     cout << "Kratak opis projekta: " << obj._opisProjekta << endl;
  695.     cout << "Odabrano za prezentaciju: " << boolalpha << obj._prezentacija << endl;
  696.     cout << "Finalizirano: " << boolalpha << obj._finalizirano << endl;
  697.     cout << Prijava(obj);
  698.  
  699.     return cout;
  700. }
  701.  
  702. bool operator ==(const PrijavaProjekta & left, const PrijavaProjekta & right)
  703. {
  704.     if (Prijava(left) != Prijava(right))
  705.         return false;
  706.     else if (strcmp(left._nazivProjekta, right._nazivProjekta) != 0)
  707.         return false;
  708.     else if (left._opisProjekta != right._opisProjekta)
  709.         return false;
  710.     else if (left._finalizirano != right._finalizirano)
  711.         return false;
  712.     else if (left._prezentacija != right._prezentacija)
  713.         return false;
  714.     return true;
  715. }
  716. bool operator !=(const PrijavaProjekta & left, const PrijavaProjekta & right)
  717. {
  718.     return !(left == right);
  719. }
  720.  
  721. class FITCodingChallenge
  722. {
  723.     int _godina;                              //01.34.6789
  724.     string _prijaveDo; //Podrzani format unosa: dd.MM.yyyy (koristiti regex)
  725.     vector<Prijava*> _prijave;
  726.     Kolekcija<ClanKomisije, Kategorija> _komisija;
  727.     Kolekcija<Prijava*, Kolekcija<ClanKomisije*, double>> _ocjene;
  728.  
  729.     int GetDan(string datum)
  730.     {
  731.         char dan[3] = { datum[0], datum[1], '\0' };
  732.  
  733.         return atoi(dan);
  734.     }
  735.     int GetMjesec(string datum)
  736.     {
  737.         char mjesec[3] = { datum[3], datum[4], '\0' };
  738.  
  739.         return atoi(mjesec);
  740.     }
  741.     int GetGodina(string datum)
  742.     {
  743.         char godina[5] = { datum[6], datum[7], datum[8],datum[9], '\0' };
  744.  
  745.         return atoi(godina);
  746.     }
  747.  
  748.     bool ProvjeriDatumPrijave(string datum)
  749.     {
  750.         int _dan = GetDan(_prijaveDo);
  751.         int _mjesec = GetMjesec(_prijaveDo);
  752.         int _godina = GetGodina(_prijaveDo);
  753.  
  754.         int dan = GetDan(datum);
  755.         int mjesec = GetMjesec(datum);
  756.         int godina = GetGodina(datum);
  757.  
  758.         if (_godina > godina)
  759.             return true;
  760.         else if (_godina == godina)
  761.         {
  762.             if (_mjesec > mjesec)
  763.                 return true;
  764.             else if (_mjesec == mjesec)
  765.             {
  766.                 if (_dan > dan)
  767.                     return true;
  768.             }
  769.         }
  770.         return false;
  771.     }
  772.     void PrikaziOcjeneProjekta(Prijava & prijava)
  773.     {
  774.         for (size_t i = 0; i < _ocjene.size(); i++)
  775.         {
  776.             for (size_t j = 0; j < _ocjene.GetElement_2(i).size(); j++)
  777.                 if (*_ocjene[i] == prijava)
  778.                     cout << _ocjene.GetElement_2(i)[j]->GetImePrezime() << " je ocjenio/la rad ocjenom " << _ocjene.GetElement_2(i).GetElement_2(j) << endl;
  779.         }
  780.     }
  781.     double GetProsjecnaOcjena(Prijava & prijava)
  782.     {
  783.         int suma = 0;
  784.         int brojOcjena = 0;
  785.         for (size_t i = 0; i < _ocjene.size(); i++)
  786.         {
  787.             for (size_t j = 0; j < _ocjene.GetElement_2(i).size(); j++)
  788.             {
  789.                 if (*_ocjene[i] == prijava)
  790.                 {
  791.                     suma += _ocjene.GetElement_2(i).GetElement_2(j);
  792.                     brojOcjena++;
  793.                 }
  794.             }
  795.         }
  796.         return (double)suma / brojOcjena;
  797.     }
  798. public:
  799.     FITCodingChallenge(int godina, string prijaveDo)
  800.     {
  801.         if (ValidirajPodatak(prijaveDo, "(\\d{2})\\.(\\d{2})\\.(\\d{4})"))
  802.         {
  803.             _prijaveDo = prijaveDo;
  804.             _godina = godina;
  805.         }
  806.         else
  807.             throw NedozvoljenaOperacija("Niste unijeli datum u trazenom formatu", __LINE__);
  808.     }
  809.  
  810.     ~FITCodingChallenge()
  811.     {
  812.         for (size_t i = 0; i < _prijave.size(); i++)
  813.         {
  814.             delete _prijave[i];
  815.             _prijave[i] = nullptr;
  816.         }
  817.     }
  818.     //Operator += za dodavanje novih prijava. Isti ucesnik ne moze imati vise prijava u sklopu iste kategorije.
  819.     //Postovati ogranicenje roka za prijave (_prijaveDo).
  820.     //Voditi racuna o alokaciji memorije za prijave (ne zadrzavati adresu proslijedjenog objekta)
  821.     FITCodingChallenge & operator +=(Prijava & prijava)
  822.     {
  823.         if (!ProvjeriDatumPrijave(prijava.GetDatum()))
  824.             throw NedozvoljenaOperacija("Kasno ste prijavili projekat", __LINE__);
  825.  
  826.         for (size_t i = 0; i < _prijave.size(); i++)
  827.         {
  828.             for (size_t j = 0; j < _prijave[i]->GetTim().size(); j++)
  829.             {
  830.                 for (size_t k = 0; k < prijava.GetTim().size(); k++)
  831.                 {
  832.                     if (_prijave[i]->GetTim()[j] == prijava.GetTim()[k] && _prijave[i]->GetKategorija() == prijava.GetKategorija())
  833.                         throw NedozvoljenaOperacija("Isti ucesnik ne moze imati vise prijava u sklopu iste kategorije", __LINE__);
  834.                 }
  835.             }
  836.         }
  837.  
  838.         PrijavaProjekta * pp = dynamic_cast<PrijavaProjekta*>(&prijava);
  839.  
  840.         if (pp != nullptr)
  841.             _prijave.push_back(new PrijavaProjekta(*pp));
  842.         else
  843.             _prijave.push_back(new Prijava(prijava));
  844.  
  845.         return *this;
  846.     }
  847.     //Funkciju koja odredjenu prijavu oznacava kao finaliziranu i odabranu za prezentaciju ili ne.
  848.     void FinalizirajPrijavu(PrijavaProjekta & prijavaProjekta, bool odabranaZaPrezentaciju)
  849.     {
  850.         PrijavaProjekta * pp = nullptr;
  851.  
  852.         bool pronadjena = false;
  853.         for (size_t i = 0; i < _prijave.size(); i++)
  854.         {
  855.             pp = dynamic_cast<PrijavaProjekta*>(_prijave[i]);
  856.             if (pp != nullptr)
  857.             {
  858.                 if (prijavaProjekta == *pp)
  859.                 {
  860.                     pp->Finaliziraj(odabranaZaPrezentaciju);
  861.                     //prijavaProjekta.Finaliziraj(odabranaZaPrezentaciju);
  862.                     pronadjena = true;
  863.                 }
  864.                    
  865.             }
  866.         }
  867.         if(!pronadjena)
  868.             throw NedozvoljenaOperacija("Nismo uspjeli pronaci trazenu prijavu", __LINE__);
  869.     };
  870.     //Operator () za dodavanje clanova komisije po kategorijama. Sprijeciti dodavanje istih clanova u sklopu jedne kategorije.
  871.     FITCodingChallenge & operator()(const ClanKomisije & clanKomisije, Kategorija kategorija)
  872.     {
  873.         for (size_t i = 0; i < _komisija.size(); i++)
  874.             if (_komisija[i] == clanKomisije && _komisija.GetElement_2(i) == kategorija)
  875.                 throw NedozvoljenaOperacija("Nije dozvoljeno dodavati iste clanove u sklopu jedne kategorije", __LINE__);
  876.  
  877.         _komisija.Add(clanKomisije, kategorija);
  878.         //cout << clanKomisije.GetImePrezime() << " uspjesno dodan/a u komisiju za kategoriju " << ispisKategorije[kategorija] << endl;
  879.         return *this;
  880.     }
  881.     //Funkciju za ispis svih prijava po kategorijama. Funkcija neobavezno prima parametar kategoriju.
  882.     //Ispis treba da ukljuci i podatke o ucesnicima, odnosno clanovima tima.
  883.     //Ukoliko kategorija nije proslijedjena, podaci treba da budu grupisani po kategorijama.
  884.     void IspisPoKategorijama(Kategorija kategorija = SQLChallenge)
  885.     {
  886.         //Prijave koje ukljucuju izradu projekata (kategorije: GameChallenge, InnovationChallenge i MobileChallenge)
  887.  
  888.         vector<Prijava*> sqlc;
  889.         vector<Prijava*> cc;
  890.         vector<Prijava*> gc;
  891.         vector<Prijava*> mc;
  892.         vector<Prijava*> ic;
  893.  
  894.         for (size_t i = 0; i < _prijave.size(); i++)
  895.         {
  896.             if (_prijave[i]->GetKategorija() == SQLChallenge)
  897.                 sqlc.push_back(_prijave[i]);
  898.             else if (_prijave[i]->GetKategorija() == CodingChallenge)
  899.                 cc.push_back(_prijave[i]);
  900.             else if (_prijave[i]->GetKategorija() == GameChallenge)
  901.                 gc.push_back(_prijave[i]);
  902.             else if (_prijave[i]->GetKategorija() == MobileChallenge)
  903.                 mc.push_back(_prijave[i]);
  904.             else
  905.                 ic.push_back(_prijave[i]);
  906.         }
  907.  
  908.         PrijavaProjekta * pp = nullptr;
  909.  
  910.         cout << "\t\t:::SQL Challenge:::\n";
  911.         cout << "Ukupno projekata: " << sqlc.size() << endl;
  912.         for (size_t i = 0; i < sqlc.size(); i++)
  913.             cout << sqlc[i];
  914.         cout << ln;
  915.         cout << "\t\t:::Coding Challenge:::\n";
  916.         cout << "Ukupno projekata: " << cc.size() << endl;
  917.         for (size_t i = 0; i < cc.size(); i++)
  918.             cout << cc[i];
  919.         cout << ln;
  920.         cout << "\t\t:::Game Challenge:::\n";
  921.         cout << "Ukupno projekata: " << gc.size() << endl;
  922.         for (size_t i = 0; i < gc.size(); i++)
  923.         {
  924.             pp = dynamic_cast<PrijavaProjekta*>(gc[i]);
  925.             if (pp != nullptr)
  926.                 cout << "\t\t\t>>PROJEKAT BROJ " << i + 1 << "<<\n" << *pp;
  927.         }
  928.         cout << ln;
  929.         cout << "\t\t:::Mobile Challenge:::\n";
  930.         cout << "Ukupno projekata: " << mc.size() << endl;
  931.         for (size_t i = 0; i < mc.size(); i++)
  932.         {
  933.             pp = dynamic_cast<PrijavaProjekta*>(mc[i]);
  934.             if (pp != nullptr)
  935.                 cout << "\t\t\t>>PROJEKAT BROJ " << i + 1 << "<<\n" << *pp;
  936.         }
  937.         cout << ln;
  938.         cout << "\t\t:::Innovation Challenge:::\n";
  939.         cout << "Ukupno projekata: " << ic.size() << endl;
  940.         for (size_t i = 0; i < ic.size(); i++)
  941.         {
  942.             pp = dynamic_cast<PrijavaProjekta*>(ic[i]);
  943.             if(pp!=nullptr)
  944.                 cout << "\t\t\t>>PROJEKAT BROJ " << i+1<<"<<\n"<<*pp;
  945.         }
  946.         cout << ln;
  947.     }
  948.     //Funkciju za ocjenu projekata (radova) od strane clanova komisije (kolekcija _ocjene).
  949.     //Kolekcija sadrzi samo pokazivace (bez alokacije nove memorije) na postojece prijave i vec definisane clanove komisije.
  950.     //Voditi racuna da se ne mogu ocijeniti projekti koji nisu finalizirani i nisu odabrani za prezentaciju,
  951.     //niti da ocjenu mogu dati clanovi komisije koji
  952.     //nisu pridruzeni odgovarajucoj kategoriji prijave. Svaki clan komisije daje ocjenu za svaki projekat, odnosno rad, u
  953.     //kategoriji gdje je dodijeljen. Ocjene se krecu u rasponu od 1 do 10 za projekte, a za radove u kategoriji SQL ili CodingChallenge
  954.     //u rasponu osvojenih bodova od 0 do 100. Pretpostaviti da su svi ucesnici prijavljeni u kategorijama SQL i CodingChallenge predali radove.
  955.     void OcijeniProjekte(Prijava & prijava, ClanKomisije & clanKomisije, double ocjena)
  956.     {
  957.         PrijavaProjekta * pp = nullptr;
  958.         Kolekcija<ClanKomisije*, double> ocjenaClan;
  959.        
  960.         pp = dynamic_cast<PrijavaProjekta*>(&prijava);
  961.  
  962.         if (pp != nullptr)
  963.         {
  964.             if (!pp->GetFinalizirano() || !pp->GetPrezentacija())
  965.                 throw NedozvoljenaOperacija("Projekti koji nisu finalizirani i odabrani za prezentaciju se ne mogu ocijenjivati", __LINE__);
  966.             else if (ocjena < 1 || ocjena > 10)
  967.                 throw NedozvoljenaOperacija("Ocjene za projekte se krecu od 1 do 10", __LINE__);
  968.             else
  969.             {
  970.                 bool mozeOcjenjivati = false;
  971.                 for (size_t i = 0; i < _komisija.size(); i++)
  972.                 {
  973.                     if (clanKomisije == _komisija[i] && prijava.GetKategorija() == _komisija.GetElement_2(i))
  974.                         mozeOcjenjivati = true;
  975.                 }
  976.                 if (!mozeOcjenjivati)
  977.                     throw NedozvoljenaOperacija("Ovaj clan ne moze ocjenjivati ovu kategoriju", __LINE__);
  978.             }
  979.         }
  980.         else
  981.         {
  982.             if (ocjena < 0 || ocjena > 100)
  983.                 throw NedozvoljenaOperacija("Ocjene za radove se krecu od 0 do 100", __LINE__);
  984.             else
  985.             {
  986.                 bool mozeOcjenjivati = false;
  987.                 for (size_t i = 0; i < _komisija.size(); i++)
  988.                 {
  989.                     if (clanKomisije == _komisija[i] && prijava.GetKategorija() == _komisija.GetElement_2(i))
  990.                         mozeOcjenjivati = true;
  991.                 }
  992.                 if (!mozeOcjenjivati)
  993.                     throw NedozvoljenaOperacija("Ovaj clan ne moze ocjenjivati ovu kategoriju", __LINE__);
  994.             }
  995.         }
  996.  
  997.         //cout << "Pala je ocjena za projekat " << prijava << "Ocjena: " << ocjena << " od " << clanKomisije.GetImePrezime() << endl;
  998.        
  999.         ocjenaClan.Add(&clanKomisije, ocjena);
  1000.  
  1001.         _ocjene.Add(&prijava, ocjenaClan);     
  1002.     }
  1003.     //Funkcija koja na osnovu imena i prezimena clana komisije ispisuje podatke o njegovim ocjenama uključujući
  1004.     //prijave na koje se one odnose.
  1005.     void InfoClanKomisije(const string & imePrezime)
  1006.     {
  1007.         bool pronadjen = false;
  1008.         for (size_t i = 0; i < _komisija.size(); i++)
  1009.             if (_komisija[i].GetImePrezime() == imePrezime)
  1010.                 pronadjen = true;
  1011.         if (!pronadjen)
  1012.             throw NedozvoljenaOperacija("Ne postoji clan komisije sa imenom koje ste unijeli", __LINE__);
  1013.  
  1014.         cout << "Clan komisije " << imePrezime << " je ocjenio sljedece projekte:\n";
  1015.         PrijavaProjekta * pp = nullptr;
  1016.         for (size_t i = 0; i < _ocjene.size(); i++)
  1017.         {
  1018.             pp = dynamic_cast<PrijavaProjekta*>(_ocjene[i]);
  1019.             for (size_t j = 0; j < _ocjene.GetElement_2(i).size(); j++)
  1020.             {
  1021.                 if (_ocjene.GetElement_2(i)[j]->GetImePrezime() == imePrezime)
  1022.                 {
  1023.                     if (pp != nullptr)
  1024.                         cout << pp->GetNazivProjekta() << " - Ocjena: " << _ocjene.GetElement_2(i).GetElement_2(j) << endl;
  1025.                     else
  1026.                         cout << _ocjene[i]->GetDatumKategorija()<< " - Ocjena: " << _ocjene.GetElement_2(i).GetElement_2(j) << endl;
  1027.                 }      
  1028.             }          
  1029.         }
  1030.         cout << "---------------------------------------------------------\n";     
  1031.     }
  1032.     //Funkcija koja na osnovu imena i prezimena ucesnika ispisuje podatke o njegovim prijavama na takmicenju, zajedno sa
  1033.     //ocjenama, ukoliko su one definisane za prijavu/e datog ucenika.
  1034.     void InfoUcesnik(const string & imePrezime)
  1035.     {
  1036.         bool pronadjen = false;
  1037.         for (size_t i = 0; i < _prijave.size(); i++)
  1038.         {
  1039.             for (size_t j = 0; j < _prijave[i]->GetTim().size(); j++)
  1040.                 if (_prijave[i]->GetTim()[j].GetImePrezime() == imePrezime)
  1041.                     pronadjen = true;
  1042.         }
  1043.         if(!pronadjen)
  1044.             throw NedozvoljenaOperacija("Ne postoji ucesnik sa imenom koje ste unijeli", __LINE__);
  1045.  
  1046.         PrijavaProjekta * pp = nullptr;
  1047.         cout << "Ucesnik " << imePrezime << " je ucestvovao na sljedecim projektima:\n";
  1048.         int brojac = 1;
  1049.         for (size_t i = 0; i < _prijave.size(); i++)
  1050.         {
  1051.             pp = dynamic_cast<PrijavaProjekta*>(_prijave[i]);
  1052.             if (pp != nullptr)
  1053.             {
  1054.                 for (size_t j = 0; j < pp->GetTim().size(); j++)
  1055.                 {
  1056.                     if (pp->GetTim()[j].GetImePrezime() == imePrezime)
  1057.                     {
  1058.                         cout << "\t==== " << pp->GetNazivProjekta() << " ====" << endl;
  1059.                         PrikaziOcjeneProjekta(*pp);
  1060.                     }                      
  1061.                 }
  1062.             }
  1063.             else
  1064.             {
  1065.                 for (size_t j = 0; j < _prijave[i]->GetTim().size(); j++)
  1066.                 {
  1067.                     if (_prijave[i]->GetTim()[j].GetImePrezime() == imePrezime)
  1068.                     {
  1069.                         cout << "\t==== " << _prijave[i]->GetDatumKategorija() << " ====" << endl;
  1070.                         PrikaziOcjeneProjekta(*_prijave[i]);
  1071.                     }                      
  1072.                 }
  1073.             }              
  1074.         }
  1075.  
  1076.     }
  1077.     //Funkciju za rangiranje kandidata na osnovu kategorije proslijedjene kao parametar.
  1078.     //Funkcija treba da na osnovu ocjena clanova komisije ispise rang liste timova zajedno sa prosjecnim ocjenama njihovih projekata (radova).
  1079.     //Dakle, konacna rang lista ukljucuje nazive timova (u zavisnosti od kategorije i naziv projekta), te prosjecnu ocjenu.
  1080.     void RangirajKandidate(Kategorija kategorija)
  1081.     {
  1082.         Kolekcija<string, double> rezultat;
  1083.  
  1084.         vector<Prijava*> timovi;
  1085.         PrijavaProjekta * pp = nullptr;
  1086.  
  1087.         for (size_t i = 0; i < _prijave.size(); i++)
  1088.         {
  1089.             if (_prijave[i]->GetKategorija() == kategorija)
  1090.             {
  1091.                 pp = dynamic_cast<PrijavaProjekta*>(_prijave[i]);
  1092.  
  1093.                 if (pp != nullptr)
  1094.                 {
  1095.                     timovi.push_back(pp);
  1096.                     rezultat.Add(pp->GetNazivProjekta(), GetProsjecnaOcjena(*pp));
  1097.                 }
  1098.                 else
  1099.                 {
  1100.                     timovi.push_back(_prijave[i]);
  1101.                     rezultat.Add(_prijave[i]->GetDatumKategorija(), GetProsjecnaOcjena(*_prijave[i]));
  1102.                 }
  1103.             }              
  1104.         }
  1105.  
  1106.         rezultat.sort();
  1107.  
  1108.         for (size_t i = 0; i < rezultat.size(); i++)
  1109.             cout << rezultat[i] << " - " << rezultat.GetElement_2(i) << endl;
  1110.     }
  1111.     //Funkciju Info koja ispisuje sve podatke o takmicenju: prijave i clanove komisije po kategorijama, projekte i
  1112.     void InfoTakmicenje()
  1113.     {
  1114.         cout << "\t\t>>>>> FIT Coding Challenge " << to_string(_godina) << " <<<<<"<< endl;
  1115.         cout << ln << "Prijave se mogu vrsiti do: " << _prijaveDo << endl;
  1116.  
  1117.         PrijavaProjekta * pp = nullptr;
  1118.  
  1119.         int izbor = 0;
  1120.         do
  1121.         {
  1122.             cout << "Izbornik:\n\t1. Prikazi sve prijave\n\t2. Prikazi clanove komisije\n\t3. Prikazi pojedinacne ocjene projekata\n";
  1123.             cout << "Vas izbor: ";
  1124.             cin >> izbor;
  1125.             cin.ignore();
  1126.             system("cls");
  1127.         } while (izbor < 1 || izbor > 3);
  1128.  
  1129.         switch (izbor)
  1130.         {
  1131.         case 1:
  1132.             system("cls");
  1133.             cout << "\t:::Prikaz svih prijava na ovogodisnji FITCC:::\n";
  1134.             cout << "Ukupan broj prijava: " << _prijave.size() << endl;
  1135.  
  1136.             for (size_t i = 0; i < _prijave.size(); i++)
  1137.             {
  1138.                 pp = dynamic_cast<PrijavaProjekta*>(_prijave[i]);
  1139.                 cout << "\tPROJEKAT[" << i + 1 << "/" << _prijave.size() << "]\n\n";
  1140.                 if (pp != nullptr)
  1141.                     cout << *pp << endl;
  1142.                 else
  1143.                     cout << *_prijave[i] << endl;
  1144.             }
  1145.             break;
  1146.         case 2:
  1147.             system("cls");
  1148.             cout << "\t:::Prikaz clanova komisije:::\n\n";
  1149.             for (size_t i = 0; i < _komisija.size(); i++)
  1150.                 cout << i + 1 << ". "<< _komisija[i].GetImePrezime() << " - " << ispisKategorije[_komisija.GetElement_2(i)] << "\n";
  1151.             break;
  1152.         case 3:
  1153.             system("cls");
  1154.             cout << "\t:::Prikaz ocjena na projektima:::\n";
  1155.             for (size_t i = 0; i < _ocjene.size(); i++)
  1156.             {
  1157.                 pp = dynamic_cast<PrijavaProjekta*>(_ocjene[i]);
  1158.                 if (pp != nullptr)
  1159.                 {
  1160.                     cout << pp->GetNazivProjekta() << endl;
  1161.                     PrikaziOcjeneProjekta(*pp);
  1162.                 }
  1163.                 else
  1164.                 {
  1165.                     cout << _ocjene[i]->GetDatumKategorija() << endl;
  1166.                     PrikaziOcjeneProjekta(*_ocjene[i]);
  1167.                 }
  1168.             }
  1169.             break;
  1170.         }
  1171.     }
  1172. };
  1173.  
  1174.  
  1175. void main()
  1176. {
  1177. #pragma region DodavanjeUcesnika
  1178.  
  1179.     Ucesnik nisvet("Nisvet", "Mujkic", 1996, "nisvet.mujkic@edu.fit.ba", "n1sveT", "FIT");
  1180.     Ucesnik sahzudin("Sahzudin", "Mahmic", 1996, "sahzudin.mahmic@edu.fit.ba", "S4hz0", "FIT");
  1181.     Ucesnik adnan("Adnan", "Pasic", 1994, "adnan.pasic@edu.fit.ba", "4dN4n", "FIT");
  1182.     Ucesnik eman("Eman", "Basic", 1997, "eman.basic@tu.au", "B4sic", "TU");
  1183.     Ucesnik elvedin("Elvedin", "Dzihanovic", 1993, "elvedin.dzihanovic@edu.fit.ba", "3Lv3DiN", "FIT");
  1184.  
  1185.     ClanKomisije mirza("Mirza", "Muratovic", 1997, "Full stack dev", "mirza.murat@tu.au", "M1rz4", "TU", "MMdev");
  1186.     ClanKomisije ahmed("Ahmed", "Arnaut", 1997, "Developer", "ahmed.arnaut@tu.au", "4hmEd", "TU", "DevDevs");
  1187.     ClanKomisije eldin("Eldin", "Husic", 1998, "Beta tester", "eldin.husic@etr.slo", "3ld1N", "ETR", "CrnaMunja");
  1188.     ClanKomisije emina("Emina", "Junuz", 1977, "SQL PRO", "emina@fit.ba", "3Mina", "FIT", "Profesor"); // sql
  1189.     ClanKomisije admir("Admir", "Sehidic", 1985, "SQL PRO", "admir@fit.ba", "4dm1R", "FIT", "Asistent"); // sql
  1190.     ClanKomisije denis("Denis", "Music", 1983, "C# Pro", "denis@fit.ba", "d3n1S", "FIT", "Profesor"); // innovation
  1191.     ClanKomisije larisa("Larisa", "Dedovic", 1986, "Web dev", "larisa@fit.ba", "LaR1sa", "FIT", "Asistent"); // innovation
  1192. #pragma endregion
  1193.  
  1194.     PrijavaProjekta brzaPosta("Brza Posta", "SpeedyExpress", "20.05.2017", InnovationChallenge);
  1195.  
  1196.     brzaPosta.DodajClana(sahzudin);
  1197.     brzaPosta.DodajClana(adnan, true);
  1198.     brzaPosta.DodajClana(nisvet);
  1199.  
  1200.     PrijavaProjekta GTA("Grand Theft Auto 7", "GTA7", "26.05.2017", InnovationChallenge);
  1201.     GTA.DodajClana(elvedin, true);
  1202.     GTA.DodajClana(eman);
  1203.  
  1204.     Prijava ccPrijava("27.05.2017", CodingChallenge);
  1205.  
  1206.     ccPrijava.DodajClana(nisvet);
  1207.  
  1208.     FITCodingChallenge CC(2017, "31.05.2017");
  1209.  
  1210.     CC(emina, SQLChallenge);
  1211.     CC(admir, SQLChallenge);
  1212.     CC(denis, InnovationChallenge);
  1213.     CC(denis, CodingChallenge);
  1214.     CC(larisa, InnovationChallenge);
  1215.     CC(larisa, CodingChallenge);
  1216.     CC(ahmed, GameChallenge);
  1217.    
  1218.     CC += brzaPosta;
  1219.     CC += GTA;
  1220.     CC += ccPrijava;
  1221.  
  1222.     //CC.IspisPoKategorijama();
  1223.    
  1224.     try
  1225.     {
  1226.         CC.FinalizirajPrijavu(brzaPosta, true);
  1227.         CC.FinalizirajPrijavu(GTA, true);
  1228.  
  1229.         CC.OcijeniProjekte(brzaPosta, denis, 10);
  1230.         CC.OcijeniProjekte(brzaPosta, larisa, 7);
  1231.         CC.OcijeniProjekte(ccPrijava, larisa, 70);
  1232.         CC.OcijeniProjekte(ccPrijava, denis, 73);
  1233.         CC.OcijeniProjekte(GTA, denis, 9);
  1234.         CC.OcijeniProjekte(GTA, larisa, 6);
  1235.  
  1236.         //CC.InfoUcesnik("Nisvet Mujkic");
  1237.  
  1238.         //cout << brzaPosta << endl;
  1239.     }
  1240.     catch (NedozvoljenaOperacija e)
  1241.     {
  1242.         e.Info();
  1243.     }
  1244.  
  1245.     CC.InfoTakmicenje();
  1246.  
  1247.  
  1248.     //CC.RangirajKandidate(InnovationChallenge);
  1249.  
  1250.     _getch();
  1251. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement