Advertisement
developer10

fsdfsdfsdfds

Jun 25th, 2016
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include<iostream>
  2. #include<vector>
  3. #include<string>
  4. #include<algorithm>
  5.  
  6. using namespace std;
  7.  
  8.  
  9. class Izuzetak :public exception
  10. {
  11.     string _datum;
  12.     int _linija;
  13.  
  14. public:
  15.     Izuzetak(char* poruka ="<opis greske>", string datum ="<datum>", int linija = -1) :exception(poruka)
  16.     {
  17.         _datum = datum;
  18.         _linija = linija;
  19.     }
  20.  
  21.     friend ostream& operator<<(ostream&, const Izuzetak&);
  22.  
  23. };
  24.  
  25. ostream& operator<<(ostream& COUT, const Izuzetak& obj)
  26. {
  27.     COUT << "GRESKA >>> " << " u liniji " << obj._linija << " na dan " << obj._datum << ", opis: " << obj.what() << endl;
  28.  
  29.     return COUT;
  30. }
  31.  
  32.  
  33. template<class T1, class T2, int max>
  34. class Kolekcija
  35. {
  36.     T1 * _elementi1[max];
  37.     T2 * _elementi2[max];
  38.     int * _trenutno;
  39.  
  40. public:
  41.     Kolekcija()
  42.     {
  43.        
  44.         for (int i = 0; i < max; i++)
  45.         {
  46.             _elementi1[i] = nullptr;
  47.             _elementi2[i] = nullptr;
  48.         }
  49.  
  50.         _trenutno = new int(0);
  51.     }
  52.  
  53.     ~Kolekcija()
  54.     {
  55.         for (int i = 0; i < *_trenutno; i++)
  56.         {
  57.             delete _elementi1[i]; _elementi1[i] = nullptr;
  58.             delete _elementi2[i]; _elementi2[i] = nullptr;
  59.         }
  60.         delete _trenutno; _trenutno = nullptr;
  61.     }
  62.  
  63.     Kolekcija(const Kolekcija<T1, T2, max>& obj)
  64.     {
  65.         _trenutno = new int(*obj._trenutno);
  66.  
  67.         for (int i = 0; i < *obj._trenutno; i++)
  68.         {
  69.             _elementi1[i] = new T1(*obj._elementi1[i]);
  70.             _elementi2[i] = new T2(*obj._elementi2[i]);
  71.  
  72.             this->AddElement(*_elementi1[i], *_elementi2[i]);
  73.         }
  74.     }
  75.  
  76.     Kolekcija& operator=(const Kolekcija<T1, T2, max>& obj)
  77.     {
  78.         if (this != &obj)
  79.         {
  80.             *_trenutno = *obj._trenutno;
  81.  
  82.             for (int i = 0; i < *_trenutno; i++)
  83.             {
  84.                 delete _elementi1[i];
  85.                 //_elementi1[i] = new T1(*obj._elementi1[i]);
  86.                 delete _elementi2[i];
  87.                 //_elementi2[i] = new T2(*obj._elementi2[i]);
  88.  
  89.                 this->AddElement(*_elementi1[i], *_elementi2[i]);
  90.             }
  91.  
  92.         }
  93.         return *this;
  94.     }
  95.  
  96.  
  97.  
  98.     bool AddElement(const T1& e1, const T2& e2)
  99.     {
  100.         for (int i = 0; i < *_trenutno; i++)
  101.             if (*_elementi1[i] == e1)
  102.                 return false;
  103.        
  104.         _elementi1[*_trenutno] = new T1(e1);
  105.         _elementi2[*_trenutno] = new T2(e2);
  106.  
  107.         (*_trenutno)++;
  108.  
  109.         return true;
  110.     }
  111.  
  112.  
  113.  
  114.  
  115.     friend ostream& operator<< <>(ostream&, const Kolekcija<T1, T2, max>&);
  116.  
  117.  
  118.     int GetMax()const { return max; }
  119.     int GetTrenutno()const { return *_trenutno; }
  120.     T1& GetElement1(int indeks)const { return *_elementi1[indeks]; }
  121.     T2& GetElement2(int indeks)const { return *_elementi2[indeks]; }
  122.  
  123. };
  124.  
  125. template<class T1, class T2, int max>
  126. ostream& operator<< <>(ostream& COUT, const Kolekcija<T1, T2, max>& obj)
  127. {
  128.     for (int i = 0; i < *obj._trenutno; i++)
  129.     {
  130.         COUT << obj.GetElement1(i) << " :: " << obj.GetElement2(i) << endl;
  131.     }
  132.  
  133.     return COUT;
  134. }
  135.  
  136.  
  137.  
  138. class Datum {
  139.     int *_dan, *_mjesec, *_godina;
  140. public:
  141.     Datum(int dan = 1, int mjesec = 1, int godina = 2000) {
  142.         _dan = new int(dan);
  143.         _mjesec = new int(mjesec);
  144.         _godina = new int(godina);
  145.     }
  146.     ~Datum() {
  147.         delete _dan; _dan = nullptr;
  148.         delete _mjesec; _mjesec = nullptr;
  149.         delete _godina; _godina = nullptr;
  150.     }
  151.  
  152.     Datum(const Datum& obj)
  153.     {
  154.         _dan = new int(*obj._dan);
  155.         _mjesec = new int(*obj._mjesec);
  156.         _godina = new int(*obj._godina);
  157.     }
  158.  
  159.     Datum& operator=(const Datum& obj)
  160.     {
  161.         if (this != &obj)
  162.         {
  163.             *_dan = *obj._dan;
  164.             *_mjesec = *obj._mjesec;
  165.             *_godina = *obj._godina;
  166.         }
  167.  
  168.         return *this;
  169.     }
  170.  
  171.     bool operator==(const Datum& obj)
  172.     {
  173.         return (*_dan == *obj._dan && *_mjesec == *obj._mjesec && *_godina == *obj._godina);
  174.     }
  175.  
  176.     friend ostream& operator<< (ostream &COUT, Datum &obj)
  177.     {
  178.         COUT << *obj._dan << " " << *obj._mjesec << " " << *obj._godina;
  179.         return COUT;
  180.     }
  181. };
  182.  
  183.  
  184. enum ListaKurseva { HtmlCSSJavaScript, SoftwareEngeneeringFundamentals, MasteringSQL, WindowsSecurity };
  185. string IspisKurseva[4] = { "HtmlCSSJavaScript", "SoftwareEngeneeringFundamentals", "MasteringSQL", "WindowsSecurity" };
  186.  
  187.  
  188. class Kurs
  189. {
  190.     ListaKurseva _kurs;
  191.     Datum * _pocetak;
  192.     Datum * _kraj;
  193.     char * _imePredavaca;
  194. public:
  195.     // Kurs sef(SoftwareEngeneeringFundamentals, "Jasmin Azemovic", Datum(28, 1, 2016), Datum(15, 2, 2016));
  196.     Kurs(ListaKurseva kurs = HtmlCSSJavaScript, char* imePredavaca = "<ime predavaca>", Datum pocetak = Datum(), Datum kraj = Datum())
  197.     {
  198.         _kurs = kurs;
  199.  
  200.         int size = strlen(imePredavaca) + 1;
  201.         _imePredavaca = new char[size];
  202.         strcpy_s(_imePredavaca, size, imePredavaca);
  203.  
  204.         _pocetak = new Datum(pocetak);
  205.         _kraj = new Datum(kraj);
  206.     }
  207.  
  208.  
  209.     ~Kurs()
  210.     {
  211.         delete _pocetak; _pocetak = nullptr;
  212.         delete _kraj; _kraj = nullptr;
  213.         delete[] _imePredavaca; _imePredavaca = nullptr;
  214.     }
  215.  
  216.  
  217.     Kurs(const Kurs& obj)
  218.     {
  219.         _kurs = obj._kurs;
  220.  
  221.         _pocetak = new Datum(*obj._pocetak);
  222.         _kraj = new Datum(*obj._kraj);
  223.  
  224.         int size = strlen(obj._imePredavaca) + 1;
  225.         _imePredavaca = new char[size];
  226.         strcpy_s(_imePredavaca, size, obj._imePredavaca);
  227.     }
  228.  
  229.     Kurs& operator=(const Kurs& obj)
  230.     {
  231.         if (this != &obj)
  232.         {
  233.             _kurs = obj._kurs;
  234.  
  235.             delete _pocetak;
  236.             _pocetak = new Datum(*obj._pocetak);
  237.             delete _kraj;
  238.             _kraj = new Datum(*obj._kraj);
  239.  
  240.             delete[] _imePredavaca;
  241.             int size = strlen(obj._imePredavaca) + 1;
  242.             _imePredavaca = new char[size];
  243.             strcpy_s(_imePredavaca, size, obj._imePredavaca);
  244.  
  245.         }
  246.         return *this;
  247.     }
  248.  
  249.  
  250.     bool operator==(const Kurs& obj)
  251.     {
  252.         return (_kurs == obj._kurs && *_pocetak == *obj._pocetak && *_kraj == *obj._kraj && strcmp(_imePredavaca, obj._imePredavaca)==0);
  253.     }
  254.  
  255.  
  256.     friend ostream& operator<<(ostream&, const Kurs&);
  257.  
  258. };
  259.  
  260. ostream& operator<<(ostream& COUT, const Kurs& obj)
  261. {
  262.     COUT << IspisKurseva[obj._kurs] << " <" << obj._imePredavaca << ">" << endl;
  263.  
  264.     return COUT;
  265. }
  266.  
  267.  
  268. class Polaznik
  269. {
  270.     static int ID;
  271.     const int _polaznikID; //svakom novom studentu automatski dodijeliti novi ID (autoincrement)
  272.     char * _imePrezime;
  273.     vector<Kurs> _pohadjaniKursevi;
  274.  
  275. public:
  276.     Polaznik(char * imePrezime) :_polaznikID(ID++)
  277.     {
  278.         int size = strlen(imePrezime) + 1;
  279.         _imePrezime = new char[size];
  280.         strcpy_s(_imePrezime, size, imePrezime);
  281.     }
  282.  
  283.  
  284.     ~Polaznik(){ delete[] _imePrezime; _imePrezime = nullptr; }
  285.  
  286.  
  287.     Polaznik& operator=(const Polaznik& obj)
  288.     {
  289.         if (this != &obj)
  290.         {
  291.             int size = strlen(obj._imePrezime) + 1;
  292.             _imePrezime = new char[size];
  293.             strcpy_s(_imePrezime, size, obj._imePrezime);
  294.  
  295.             _pohadjaniKursevi.clear();
  296.  
  297.             for (int i = 0; i < (int) obj._pohadjaniKursevi.size(); i++)
  298.                 _pohadjaniKursevi.push_back(obj._pohadjaniKursevi[i]);
  299.         }
  300.         return *this;
  301.     }
  302.  
  303.  
  304.     bool operator==(Polaznik& obj)
  305.     {
  306.         bool match = strcmp(_imePrezime, obj._imePrezime) == 0 && _pohadjaniKursevi.size() == obj._pohadjaniKursevi.size();
  307.        
  308.         if (match){
  309.             for (int i = 0; i < (int)_pohadjaniKursevi.size(); i++){
  310.                 if(!(_pohadjaniKursevi[i] == obj._pohadjaniKursevi[i]))
  311.                     return false;
  312.             }
  313.         }
  314.  
  315.         return match;
  316.     }
  317.  
  318.  
  319.     friend ostream& operator<<(ostream&, const Polaznik&);
  320.  
  321. };
  322.  
  323. ostream& operator<<(ostream& COUT, const Polaznik& obj)
  324. {
  325.     COUT << "<" << obj._polaznikID << "> " << obj._imePrezime;
  326.  
  327.     return COUT;
  328. }
  329.  
  330. int Polaznik::ID = 1;
  331.  
  332.  
  333.  
  334. class SkillsCentar
  335. {
  336.     string _nazivCentra;
  337.     vector<Kurs> _kursevi;//kursevi koje nudi odredjeni centar
  338.     Kolekcija<Kurs*, Polaznik*, 150> _aplikanti;
  339. public:
  340.     SkillsCentar(string naziv) { _nazivCentra = naziv; }
  341.  
  342.     SkillsCentar(const SkillsCentar & obj) :_kursevi(obj._kursevi), _aplikanti(obj._aplikanti) {
  343.         _nazivCentra = obj._nazivCentra;
  344.     }
  345.  
  346. };
  347.  
  348.  
  349. char *crt = "\n---------------------------------------\n";
  350.  
  351.  
  352. void main()
  353. {
  354.     /****************************************************************************
  355.     1. SVE KLASE TREBAJU POSJEDOVATI ADEKVATAN DESTRUKTOR
  356.     2. NAMJERNO IZOSTAVLJANJE KOMPLETNIH I/ILI POJEDINIH DIJELOVA DESTRUKTORA KOJI UZROKUJU RUNTIME ERROR CE BITI OZNACENO KAO "RE"
  357.     3. SPASAVAJTE PROJEKAT KAKO BI SE SPRIJECILO GUBLJENJE URADJENOG ZADATKA
  358.     4. PROGRAMSKI CODE SE TAKODJER NALAZI U FAJLU CODE_.TXT
  359.     5. NAZIVI FUNKCIJA MORAJU BITI IDENTIČNI ONIMA KOJI SU KORIŠTENI U TESTNOM CODE-U.OSTALE, POMOĆNE FUNKCIJE MOŽETE IMENOVATI PO ŽELJI.
  360.     6. IZUZETAK BACITE KAD GOD JE TO POTREBNO.
  361.     ****************************************************************************/
  362.  
  363. #pragma region TestiranjeDatuma
  364.  
  365.     Datum danas(26, 11, 2015);
  366.     Datum sutra(danas);
  367.     Datum prekosutra;
  368.     prekosutra = danas;
  369.     cout << danas << endl << sutra << endl << prekosutra << crt;
  370.  
  371. #pragma endregion
  372.  
  373. #pragma region TestiranjeKolekcije
  374.  
  375.     //Kolekcija<int, int, 10> kolekcija1;
  376.     //for (size_t i = 0; i < (size_t) kolekcija1.GetMax(); i++)
  377.     //  kolekcija1.AddElement(i, i + 2);
  378.  
  379.     //cout << kolekcija1.GetElement1(0) << " " << kolekcija1.GetElement2(0) << endl;
  380.     //cout << kolekcija1 << endl;
  381.  
  382.     //Kolekcija<int, int, 10> kolekcija2;
  383.  
  384.     //kolekcija2 = kolekcija1;
  385.     //cout << kolekcija2 << crt;
  386.     //if (kolekcija1.GetTrenutno() == kolekcija2.GetTrenutno())
  387.     //  cout << "ISTI BROJ ELEMENATA" << endl;
  388.  
  389.     //Kolekcija<int, int, 10> kolekcija3(kolekcija2);
  390.     //cout << kolekcija3 << crt;
  391.  
  392. #pragma endregion
  393.  
  394. #pragma region TestiranjeKursa
  395.  
  396.     Kurs sef(SoftwareEngeneeringFundamentals, "Jasmin Azemovic", Datum(28, 1, 2016), Datum(15, 2, 2016));
  397.     cout << sef << endl;
  398.  
  399.     Kurs msql(MasteringSQL, "Adel Handzic", Datum(28, 2, 2016), Datum(15, 3, 2016));
  400.     sef = msql;
  401.  
  402.     //cout << sef << endl;
  403.  
  404.     if (sef == msql)//kursevi su isti ako posjeduju identicne vrijednosti svih atributa
  405.         cout << "ISTI SU KURSEVI" << endl;
  406.  
  407.     Kurs msql2(msql);
  408.     cout << msql2 << endl;
  409.  
  410. #pragma endregion
  411.  
  412. #pragma region TestiranjePolaznika
  413.  
  414.     Polaznik denis("Denis Music");
  415.     Polaznik denis2("Denis2 Music2");
  416.  
  417.     try{
  418.         //if (denis.AddKurs(sef)) //<<<< NAKON DODAVANJA SVAKOG NOVOG KURSA IZVRSITI NJIHOVO SORTIRANJE - NACIN SORTIRANJA PO VASEM IZBORU
  419.         //  cout << "Polazniku " << denis << " uspjesno dodat kurs " << sef << endl;
  420.         //if (denis.AddKurs(msql))
  421.         //  cout << "Polazniku " << denis << " uspjesno dodat kurs " << msql << endl;
  422.         //if (denis.AddKurs(msql))//<<<< NIJE DOZVOLJENO DODATI IDENTICNE KURSEVE, PRILIKOM PROVJERE KORISTITI ITERATOR
  423.         //  cout << "Polazniku " << denis << " uspjesno dodat kurs " << msql << endl;
  424.         //if (denis.RemoveKurs(msql))
  425.         //  cout << "Polazniku " << denis << " uspjesno uklonjen kurs " << msql << endl;
  426.         //if (denis.RemoveKurs(sef))
  427.         //  cout << "Polazniku " << denis << " uspjesno uklonjen kurs " << sef << endl;
  428.  
  429.         cout << denis2 << endl;//<<<<<KORISTITI OSTREAM_ITERATOR
  430.         denis2 = denis;
  431.  
  432.         if (denis == denis2)//polaznici su isti ako imaju isto ime i ako su pohadjali iste kurseve
  433.             cout << "ISTI SU" << endl;
  434.     }
  435.     catch (Izuzetak & err) {
  436.         cout << err << endl;
  437.     }
  438.  
  439. #pragma endregion
  440.  
  441. #pragma region TestiranjeCentra
  442.  
  443.     //try{
  444.     //  SkillsCentar mostar("Skills Center Mostar");
  445.     //  if (mostar.ProvjeriKoliziju(sef))//<<<JEDAN KURS NE SMIJE POCETI DOK DRUGI TRAJE TJ. VRIJEME ODRZAVANJA KURSA SE NE SMIJE POKLAPATI
  446.     //      mostar.AddKurs(sef);
  447.     //  if (mostar.ProvjeriKoliziju(msql))
  448.     //      mostar.AddKurs(msql);
  449.     //  if (mostar.ProvjeriKoliziju(msql2))
  450.     //      mostar.AddKurs(msql2);//<<<< ONEMOGUCITI DODAVANJE IDENTICNIH KURSEVA
  451.  
  452.     //  mostar.AddAplikaciju(sef, denis);//<<< ONEMOGUCITI APLICIRANJE ZA KURSEVE KOJI NISU REGISTROVANI U CENTRU
  453.     //  mostar.AddAplikaciju(msql, denis);
  454.     //  mostar.AddAplikaciju(msql, denis);//<<< ONEMOGUCITI APLICIRANJE ZA ISTI KURS
  455.  
  456.     //  mostar.DodajUspjesnoOkoncanKurs(1, sef);//BROJ 1 OZNACAVA id STUDENTA. FUNKCIJA JE ZADUZENA DA STUDENTU DODA KURS KOJI JE POSLAT KAO PARAMETAR. PREDUSLOV ZA DODAVANJE JE DA JE STUDENT PRETHODNO APLICIRAO ZA TAJ KURS
  457.     //  vector<Polaznik> listaPolaznika = mostar.GetPolazniciByPredavac("Jasmin Azemovic");//VRACA INFORMACIJE O POLAZNICIMA KOJI SU KOD ODREDJENOG PREDAVACA USPJESNO OKONCALI KURS
  458.  
  459.     //  if (mostar.RemoveKurs(sef))//ONEMOGUCITI UKLANJANJE KURSA KOJI SU VEC PRIJAVILI NEKI OD POLAZNIKA
  460.     //      cout << "Kurs " << sef << " uspjesno uklonjen iz cetra " << mostar << endl;
  461.  
  462.     //  SkillsCentar sarajevo = mostar;
  463.     //  cout << sarajevo << endl;
  464.     //}
  465.     //catch (Izuzetak & err) {
  466.     //  cout << err << endl;
  467.     //}
  468.  
  469. #pragma endregion
  470.  
  471.  
  472.  
  473.  
  474.     //system("pause");
  475. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement