Advertisement
Guest User

Untitled

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