Advertisement
limun11

Kursevi - Konacna

Jun 9th, 2017
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 12.63 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. //narednu liniju code-a ignorisite, osim u slucaju da vam bude predstavljala smetnje u radu
  5. #pragma warning(disable:4996)
  6.  
  7. enum enumKursevi { HtmlCSSJavaScript, SoftwareEngeneeringFundamentals, MasteringSQL, WindowsSecurity };
  8. char * kurseviChar[] = { "HtmlCSSJavaScript", "SoftwareEngeneeringFundamentals", "MasteringSQL", "WindowsSecurity" };
  9.  
  10. char *crt = "\n--------------------------------------------\n";
  11.  
  12. struct Datum
  13. {
  14.     int * _dan, *_mjesec, *_godina;
  15.     void Unos(int d, int m, int g) {
  16.         _dan = new int(d);
  17.         _mjesec = new int(m);
  18.         _godina = new int(g);
  19. }
  20.     void Ispis()
  21.     {
  22.         cout << *_dan << "/" << *_mjesec << "/" << *_godina << endl;
  23.     }
  24.     void Dealociraj()
  25.     {
  26.         delete _dan; delete _mjesec; delete _godina;
  27.     }
  28.     bool pocetak(Datum datum)
  29.     {
  30.         if (*datum._godina != *_godina)
  31.         {
  32.             return true;
  33.         }
  34.         else if (*datum._godina ==* _godina &&* datum._mjesec != *_mjesec)
  35.         {
  36.             return true;
  37.         }
  38.         else if (*datum._godina ==* _godina && *datum._mjesec == *_mjesec && *datum._dan != *_dan)
  39.         {
  40.             return true;
  41.         }
  42.         else return false;
  43.     }
  44.  
  45.     bool prije5Dana(Datum datum)
  46.     {
  47.         if (*datum._godina > *_godina)
  48.             return true;
  49.         else if (*datum._godina == *_godina && *datum._mjesec > *_mjesec)
  50.             return true;
  51.         else if (*datum._mjesec == *_mjesec && *datum._dan - *_dan >5)
  52.             return true;
  53.         else
  54.             return false;
  55.     }
  56.     bool datumODDO(Datum datum)
  57.     {
  58.         if (*datum._godina > *_godina)
  59.             return true;
  60.         else if (*datum._godina == *_godina && *datum._mjesec > *_mjesec)
  61.             return true;
  62.         else if (*datum._mjesec == *_mjesec && *datum._dan > *_dan)
  63.             return true;
  64.         else
  65.             return false;
  66.     }
  67. };
  68.  
  69. struct Kurs
  70. {
  71.     enumKursevi _kurs;
  72.     Datum _pocetak;
  73.     Datum _kraj;
  74.     char * _imePredavaca;
  75.     bool _aktivan;//SVAKI KURS JE NA POCETKU AKTIVAN
  76.  
  77.     void Unos(enumKursevi kurs, Datum pocetak, Datum kraj, char *imePrezime )
  78.     {
  79.         _kurs = kurs;
  80.         _pocetak = pocetak;
  81.         _kraj = kraj;
  82.         int size = strlen(imePrezime) + 1;
  83.         _imePredavaca = new char[size];
  84.         strcpy_s(_imePredavaca, size, imePrezime);
  85.     }
  86.     void Ispis()
  87.     {
  88.         cout << "Kurs: " << kurseviChar[_kurs] << endl;
  89.         cout << "Datum pocetka: ";
  90.         _pocetak.Ispis();
  91.         cout << "Datum zavrsetka: ";
  92.         _kraj.Ispis();
  93.         cout << "Ime predavaca: " << _imePredavaca << endl;
  94.     }
  95.  
  96.     void Dealociraj()
  97.     {
  98.         delete[] _imePredavaca; _imePredavaca = nullptr;
  99.     }
  100. };
  101. struct Polaznik
  102. {
  103.     int _polaznikID;
  104.     char * _imePrezime;
  105.  
  106.     void Unos(int polaznikID, char * imePrezime)
  107.     {
  108.         _polaznikID = polaznikID;
  109.         int size = strlen(imePrezime) + 1;
  110.         _imePrezime = new char[size];
  111.         strcpy_s(_imePrezime, size, imePrezime);
  112.     }
  113.     void Ispis()
  114.     {
  115.         cout << _polaznikID << " " << _imePrezime << endl;
  116.     }
  117.     void Dealociraj()
  118.     {
  119.         delete[] _imePrezime; _imePrezime = nullptr;
  120.     }
  121. };
  122. struct Polaganja
  123. {
  124.     Polaznik _polaznik;
  125.     Kurs _kurs;
  126.     Datum _datumPolaganja;
  127.     float _ostvareniUspjeh;
  128.  
  129.     void Unos(Polaznik polaznik, Kurs kurs, Datum datum, float procenat)
  130.     {
  131.         _polaznik = polaznik;
  132.         _kurs = kurs;
  133.         _datumPolaganja = datum;
  134.         _ostvareniUspjeh = procenat;
  135.  
  136.     }
  137.     void Ispis()
  138.     {
  139.         cout << "Polaznik: ";
  140.         _polaznik.Ispis();
  141.         _kurs.Ispis();
  142.         cout << "Datum polaganja: ";
  143.         _datumPolaganja.Ispis();
  144.         cout << "Ostvareni uspjeh: " << _ostvareniUspjeh << endl;
  145.     }
  146.     void Dealociraj()
  147.     {
  148.         _polaznik.Dealociraj();
  149.         _kurs.Dealociraj();
  150.         _datumPolaganja.Dealociraj();
  151.     }
  152.    
  153. };
  154. struct SkillsCentar
  155. {
  156.     char * _nazivCentra;
  157.     Kurs * _kursevi[50];//JEDAN EDUKACIJSKI CENTAR MOZE NUDITI NAJVISE 50 KURSEVA
  158.     int _trenutnoKurseva;
  159.     Polaganja * _polaganja;
  160.     int _trenutnoPolaganja;
  161.  
  162.     void Unos(char * imeCentra)
  163.     {
  164.         int size = strlen(imeCentra) + 1;
  165.         _nazivCentra = new char[size];
  166.         strcpy_s(_nazivCentra, size, imeCentra);
  167.  
  168.         _trenutnoKurseva = 0;
  169.         _trenutnoPolaganja = 0;
  170.     }
  171.     void Dealociraj()
  172.     {
  173.         delete[] _nazivCentra; _nazivCentra = nullptr;
  174.         for (int i = 0; i < _trenutnoKurseva; i++)
  175.         {
  176.             _kursevi[i]->Dealociraj();
  177.         }
  178.         //delete[] _kursevi; _kursevi = nullptr;
  179.         delete[] _polaganja; _polaganja = nullptr;
  180.     }
  181.  
  182.     bool DodajKurs(Kurs kurs)
  183.     {
  184.         //jedan edukacijski centar moze nuditi vise istih kurseva (npr. MasteringSQL),
  185.         //ali se oni moraju realizovati u razlictim periodima (pocetak-kraj) tj. ne smiju se preklapati
  186.         //novi kurs istog tipa (npr. MasteringSQL) se mora realizovati nakon prethodno dodanog
  187.         //npr. ako prethodni kurs MasteringSQL traje 01.03.2016 - 01.04.2016, onda se novi kurs MasteringSQL moze dodati jedino ako pocinje nakon 01.04.2016
  188.         if (_trenutnoKurseva > 50)
  189.         {
  190.             return false;
  191.         }
  192.         if (_trenutnoKurseva == 0)
  193.         {
  194.             _kursevi[_trenutnoKurseva] = new Kurs;
  195.             _kursevi[_trenutnoKurseva]->Unos(kurs._kurs, kurs._pocetak, kurs._kraj, kurs._imePredavaca);
  196.             _trenutnoKurseva++;
  197.             return true;
  198.         }
  199.         else if (_trenutnoKurseva>0)
  200.         {
  201.             for (int i = 0; i < _trenutnoKurseva; i++)
  202.             {
  203.                 if (_kursevi[i]->_kurs == kurs._kurs && !_kursevi[i]->_kraj.pocetak(kurs._pocetak))
  204.                     return false;
  205.             }
  206.         }
  207.     }
  208.  
  209.    
  210.     bool DodajPolaganje(Polaganja polaganje)
  211.     {
  212.         //nije moguce dodati polaganje onog kursa koji nije evidentiran(registrovan, ponudjen) u tom edukacijskom centru
  213.         //moguce je polagati samo aktivne kurseve i to najkasnije 5 dana od dana zavrsetka (kraja) posljednje dodanog (aktivnog) kursa iste vrste (npr. MasteringSQL)
  214.         //jedan polaznik moze vise puta polagati isti kurs, ali novi procenat mora biti veci od prethodno dodanog (na istom kursu)
  215.         if (_trenutnoPolaganja == 0)
  216.         {
  217.             _polaganja = new Polaganja;
  218.             _polaganja->Unos(polaganje._polaznik, polaganje._kurs, polaganje._datumPolaganja, polaganje._ostvareniUspjeh);
  219.             _trenutnoPolaganja++;
  220.             return true;
  221.         }
  222.         if (_trenutnoPolaganja > 0)
  223.         {
  224.             for (int i = 0; i < _trenutnoPolaganja; i++)
  225.             {
  226.                 if (polaganje._kurs._aktivan == false)
  227.                     return false;
  228.                 else if (_polaganja[i]._kurs._kurs != polaganje._kurs._kurs)
  229.                     return false;
  230.                 else if(_polaganja[i]._kurs._kurs == polaganje._kurs._kurs && _polaganja[i]._kurs._kraj.prije5Dana(polaganje._kurs._pocetak)==false)
  231.                     return false;
  232.                 else if (_polaganja[i]._polaznik._polaznikID == polaganje._polaznik._polaznikID  && _polaganja[i]._ostvareniUspjeh < polaganje._ostvareniUspjeh)
  233.                 {
  234.                     _polaganja[i]._ostvareniUspjeh = polaganje._ostvareniUspjeh;
  235.                     return true;
  236.                 }
  237.             }
  238.         }
  239.         Polaganja * temp = new Polaganja[_trenutnoPolaganja + 1];
  240.         for (int i = 0; i < _trenutnoPolaganja; i++)
  241.         {
  242.             temp[i].Unos(_polaganja[i]._polaznik, _polaganja[i]._kurs, _polaganja[i]._datumPolaganja, _polaganja[i]._ostvareniUspjeh);
  243.         }
  244.         temp[_trenutnoPolaganja].Unos(polaganje._polaznik, polaganje._kurs, polaganje._datumPolaganja, polaganje._ostvareniUspjeh);
  245.  
  246.         for (int i = 0; i < _trenutnoPolaganja + 1; i++)
  247.         {
  248.             _polaganja[i].Dealociraj();
  249.         }
  250.         delete[] _polaganja;
  251.         _polaganja = temp;
  252.         _trenutnoPolaganja++;
  253.         return true;
  254.     }
  255.  
  256.     //prije ispisa sortirati sve kurseve na osnovu pocetka odrzavanja kursa!!!
  257.     void sortNiz()
  258.     {
  259.         for (int i = 0; i < _trenutnoKurseva; i++)
  260.         {
  261.             for (int j = 1; j < _trenutnoKurseva; j++)
  262.             {
  263.                 if (_kursevi[j]->_pocetak._godina < _kursevi[j - 1]->_pocetak._godina)
  264.                     swap(_kursevi[j], _kursevi[j - 1]);
  265.                 else if (_kursevi[j]->_pocetak._godina == _kursevi[j - 1]->_pocetak._godina)
  266.                 {
  267.                     if (_kursevi[j]->_pocetak._mjesec < _kursevi[j - 1]->_pocetak._mjesec)
  268.                         swap(_kursevi[j], _kursevi[j - 1]);
  269.                     else if(_kursevi[j]->_pocetak._mjesec==_kursevi[j-1]->_pocetak._mjesec)
  270.                         if(_kursevi[j]->_pocetak._dan<_kursevi[j-1]->_pocetak._dan)
  271.                             swap(_kursevi[j], _kursevi[j - 1]);
  272.                 }
  273.             }
  274.         }
  275.     }
  276.     void Ispis()
  277.     {
  278.         sortNiz();
  279.         cout << "Naziv centra: " << _nazivCentra << endl;
  280.         cout << "--Kursevi-- " << endl;
  281.         for (int i = 0; i < _trenutnoKurseva; i++)
  282.         {
  283.             _kursevi[i]->Ispis();
  284.         }
  285.  
  286.         cout << "--Polaganja-- " << endl;
  287.         _polaganja->Ispis();
  288.  
  289.     }
  290.         Polaganja * PolaganjaByDatum(Datum od, Datum DO, int & brojPolagnja)
  291.         {
  292.             //PolaganjaByDatum – vraca niz polaganja koja su uspjesno realizovana u periodu OD-DO
  293.            
  294.             for (int i = 0; i < _trenutnoPolaganja; i++)
  295.             {
  296.                 if (od.datumODDO(_polaganja[i]._datumPolaganja) == true && DO.datumODDO(_polaganja[i]._datumPolaganja) == false)
  297.                     brojPolagnja++;
  298.             }
  299.             Polaganja * niz = new Polaganja[brojPolagnja + 1];
  300.             for (int i = 0; i < brojPolagnja; i++)
  301.             {
  302.                 niz[i].Unos(_polaganja[i]._polaznik, _polaganja[i]._kurs, _polaganja[i]._datumPolaganja, _polaganja[i]._ostvareniUspjeh);
  303.             }
  304.             return niz;
  305.         }
  306.    
  307. };
  308.  
  309.     void main()
  310.     {
  311.  
  312.         /*
  313.         1. BROJ I TIPOVI PARAMETARA MORAJU BITI IDENTICNI ONIMA U TESTNOM CODE-U (OSIM UKOLIKO IMATE OPRAVDANU POTREBU ZA
  314.         MODIFIKACIJOM). U SUPROTNOM SE RAD NEĆE BODOVATI
  315.         2. KREIRAJTE .DOC FAJL SA VAŠIM BROJEM INDEKSA ( NPR. IB130030.DOC BEZ IMENA I PREZIMENA), TE NA KRAJU ISPITA U NJEGA KOPIRAJTE
  316.         RJEŠENJA VAŠIH ZADATAKA. NE PREDAVATI .TXT ILI .CPP FAJLOVE. TAKOĐER, UKLONITE SVE DIJELOVE CODE-A KOJI NISU IMPLEMENTIRANI
  317.         3. TOKOM IZRADE ISPITA NIJE DOZVOLJENO KORIŠTENJE HELP-A
  318.         4. TOKOM IZRADE ISPITA MOGU BITI POKRENUTA SAMO TRI PROGRAMA: PDF READER (ISPITNI ZADACI), MS VISUAL STUDIO,
  319.         MS WORD (U KOJI ĆETE KOPIRATI VAŠA RJEŠENJA)
  320.         5. BEZ OBZIRA NA TO DA LI SU ISPITNI ZADACI URAĐENI, SVI STUDENTI KOJI SU PRISTUPILI ISPITU MORAJU PREDATI SVOJ RAD
  321.         */
  322.  
  323.         Datum datum1, datum2, datum3, datum4, datum5, datum6;
  324.         datum1.Unos(26, 11, 2015);
  325.         datum2.Unos(29, 5, 2016);
  326.         datum3.Unos(5, 6, 2016);
  327.         datum4.Unos(15, 8, 2016);
  328.         datum5.Unos(13, 7, 2016);
  329.         datum6.Unos(22, 9, 2016);
  330.  
  331.         Kurs softverski, html, sql, security;
  332.         softverski.Unos(SoftwareEngeneeringFundamentals, datum1, datum2, "Emina Junuz");
  333.         html.Unos(HtmlCSSJavaScript, datum2, datum3, "Larisa Tipura");
  334.         sql.Unos(MasteringSQL, datum3, datum4, "Jasmin Azemovic");
  335.         security.Unos(WindowsSecurity, datum3, datum4, "Adel Handzic");
  336.  
  337.         Polaznik denis, zanin, indira;
  338.         denis.Unos(1, "Denis Music");
  339.         zanin.Unos(2, "Zanin Vejzovic");
  340.         indira.Unos(3, "Indira Hamulic");
  341.  
  342.         Polaganja denisHtml, zaninHtml, indiraSql;
  343.         denisHtml.Unos(denis, html, datum5, 61);
  344.         //61 predstavlja ostvareni uspjeh/procenat, a uspjesno polozenim se smatra svaki kurs na kome je polaznik ostvari vise od 55%
  345.         zaninHtml.Unos(zanin, html, datum6, 93);
  346.  
  347.         SkillsCentar mostar;
  348.         mostar.Unos("Skills Center Mostar");
  349.         //jedan edukacijski centar moze nuditi vise istih kurseva (npr. MasteringSQL), ali se oni moraju realizovati u razlictim periodima (pocetak-kraj) tj. ne smiju se preklapati
  350.         //novi kurs istog tipa (npr. MasteringSQL) se mora realizovati nakon prethodno dodanog npr. ako prethodni kurs MasteringSQL traje 01.03.2016 - 01.04.2016, onda se novi kurs MasteringSQL moze dodati jedino ako pocinje nakon 01.04.2016
  351.         if (mostar.DodajKurs(softverski))
  352.         {
  353.             cout << crt << "KURS USPJESNO REGISTROVAN" << crt;
  354.             softverski.Ispis();
  355.             cout << crt;
  356.         }
  357.         //nije moguce dodati polaganje onog kursa koji nije evidentiran (registrovan, ponudjen) u tom edukacijskom centru
  358.         //moguce je polagati samo aktivne kurseve i to najkasnije 5 dana od dana zavrsetka (kraja) posljednje dodanog (aktivnog) kursa iste vrste (npr. MasteringSQL)
  359.         //jedan polaznik moze vise puta polagati isti kurs, ali novi procenat mora biti veci od prethodno dodanog (na istom kursu)
  360.         if (mostar.DodajPolaganje(denisHtml))
  361.         {
  362.             cout << crt << "POLAGANJE EVIDENTIRANO" << crt;
  363.             denisHtml.Ispis();
  364.         }
  365.         Datum OD, DO;
  366.         int brojPolaganja = 0;
  367.         OD.Unos(1, 6, 2016);
  368.         DO.Unos(1, 8, 2016);
  369.  
  370.  
  371.         //PolaganjaByDatum – vraca niz polaganja koja su uspjesno realizovana u periodu OD-DO
  372.         Polaganja * polaganjaByDatum = mostar.PolaganjaByDatum(OD, DO, brojPolaganja);
  373.         cout << "U periodu od ";
  374.         OD.Ispis();
  375.         cout << " do ";
  376.         DO.Ispis();
  377.         cout << " uspjesno je realizovano " << brojPolaganja << " polaganja--->>>";
  378.         for (size_t i = 0; i < brojPolaganja; i++)
  379.             polaganjaByDatum[i].Ispis();
  380.  
  381.             //PretragaRekurzivno - rekurzivna funkcija pronalazi prosjecni uspjeh koji su polaznici tokom godine (npr.2016) ostvarili na odredjenom kursu (npr. MasteringSQL)
  382.             //cout << "Prosjecan uspjeh na kursu MasteringSQL u 2016 godini je " << PretragaRekurzivno(/*potrebni parametri*/) << endl;
  383.  
  384.             //Ispis - ispisuje sve informacije o edukacijskom centru. prije ispisa sortirati sve kurseve na osnovu pocetka odrzavanja kursa
  385.         mostar.Ispis();
  386.  
  387.         //izvrsiti potrebne dealokacije
  388.         datum1.Dealociraj(); datum2.Dealociraj(); datum3.Dealociraj(); datum4.Dealociraj(); datum5.Dealociraj(); datum6.Dealociraj();
  389.         softverski.Dealociraj(); html.Dealociraj(); sql.Dealociraj(); security.Dealociraj();
  390.         denis.Dealociraj(); zanin.Dealociraj(); indira.Dealociraj();
  391.         mostar.Dealociraj();
  392.         OD.Dealociraj(); DO.Dealociraj();
  393.         system("pause");
  394.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement