Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<fstream>
- using namespace std;
- //narednu liniju code-a ignorisite, osim u slucaju da vam bude predstavljala smetnje u radu
- #pragma warning(disable:4996)
- enum enumKursevi { HtmlCSSJavaScript, SoftwareEngeneeringFundamentals, MasteringSQL, WindowsSecurity };
- char* enumKurseviTekst[] = { "HtmlCSSJavaScript", "SoftwareEngeneeringFundamentals", "MasteringSQL", "WindowsSecurity" };
- char *crt = "\n--------------------------------------------\n";
- struct Datum {
- int * _dan, *_mjesec, *_godina;
- void Unos(int d, int m, int g) {
- _dan = new int(d);
- _mjesec = new int(m);
- _godina = new int(g);
- }
- void Ispis() { cout << *_dan << "/" << *_mjesec << "/" << *_godina << endl; }
- void Dealociraj() { delete _dan; delete _mjesec; delete _godina; }
- };
- template <typename t>
- void zamjeni(t &prvi, t &drugi) {
- t pomocna = prvi;
- prvi = drugi;
- drugi = pomocna;
- }
- int pretvoriUDane(Datum datum) {
- int brojDana = *datum._dan;
- bool prestupnaGodina = (*datum._godina % 4 == 0) && (*datum._godina % 100 == 0);
- for (int i = 1; i < *datum._mjesec; i++) {
- if (i == 4 || i == 6 || i == 9 || i == 11)
- brojDana += 30;
- else if (i == 2)
- {
- if (prestupnaGodina)
- brojDana += 29;
- else
- brojDana += 28;
- }
- else
- brojDana += 31;
- }
- // reci cemo da je skillscentar osnovan 2014g
- for (int i = 2014; i < *datum._godina; i++)
- if (i % 4 == 0 && i % 100 == 0)
- brojDana += 366;
- else
- brojDana += 365;
- return brojDana;
- }
- struct Kurs {
- enumKursevi _kurs;
- Datum _pocetak;
- Datum _kraj;
- char * _imePredavaca;
- bool _aktivan;//SVAKI KURS JE NA POCETKU AKTIVAN
- void Unos(enumKursevi k, Datum d1, Datum d2, char * pr)
- {
- _kurs = k;
- _pocetak = d1;
- _kraj = d2;
- _pocetak.Unos(*(d1)._dan, *(d1)._mjesec, *(d1)._godina);
- _kraj.Unos(*(d2)._dan, *(d2)._mjesec, *(d2)._godina);
- int size = strlen(pr) + 1;
- _imePredavaca = new char[size];
- strcpy_s(_imePredavaca, size, pr);
- _aktivan = true;
- }
- void Ispis()
- {
- cout << enumKurseviTekst[_kurs] << " " << endl;
- _pocetak.Ispis();
- _kraj.Ispis();
- cout << _imePredavaca << endl;
- }
- void Dealociraj() {
- delete[] _imePredavaca; _imePredavaca = nullptr;
- }
- };
- struct Polaznik {
- int _polaznikID;
- char * _imePrezime;
- void Unos(int polaznikID, char * imePrezime) {
- _polaznikID = polaznikID;
- int size = strlen(imePrezime) + 1;
- _imePrezime = new char[size];
- strcpy_s(_imePrezime, size, imePrezime);
- }
- void Ispis() { cout << _polaznikID << " " << _imePrezime << endl; }
- void Dealociraj() {
- delete[] _imePrezime; _imePrezime = nullptr;
- }
- };
- struct Polaganja {
- Polaznik _polaznik;
- Kurs _kurs;
- Datum _datumPolaganja;
- float _ostvareniUspjeh;
- void Unos(Polaznik polaznik, Kurs kurs, Datum datumPolaganja, float ostvareniUspjeh)
- {
- _polaznik.Unos(polaznik._polaznikID, polaznik._imePrezime);
- _kurs.Unos(kurs._kurs, kurs._pocetak, kurs._kraj, kurs._imePredavaca);
- _datumPolaganja.Unos(*datumPolaganja._dan, *datumPolaganja._mjesec, *datumPolaganja._godina);
- _ostvareniUspjeh = ostvareniUspjeh;
- }
- void Ispis() {
- _polaznik.Ispis();
- cout << crt;
- _kurs.Ispis();
- cout << "Datum Polaganja: ";
- _datumPolaganja.Ispis();
- cout << "Ostvareni uspjeh na polaganju: " << _ostvareniUspjeh << crt;
- }
- };
- struct SkillsCentar {
- char * _nazivCentra;
- Kurs * _kursevi[50];//JEDAN EDUKACIJSKI CENTAR MOZE NUDITI NAJVISE 50 KURSEVA
- int _trenutnoKurseva;
- Polaganja * _polaganja;
- int _trenutnoPolaganja;
- void Unos(char *nazivCentra) {
- _trenutnoKurseva = 0;
- _trenutnoPolaganja = 0;
- int size = strlen(nazivCentra) + 1;
- _nazivCentra = new char[size];
- strcpy_s(_nazivCentra, size, nazivCentra);
- _polaganja = nullptr;
- }
- bool DodajKurs(Kurs kursevi) {
- if (_trenutnoKurseva == 50)
- return false;
- bool provjera = false;
- int pozicija = -1;
- for (int i = 0; i < _trenutnoKurseva; i++) {
- if (enumKursevi(kursevi._kurs) == enumKursevi(_kursevi[i]->_kurs))
- pozicija = i;
- }
- if (pozicija == -1) {
- _kursevi[_trenutnoKurseva] = new Kurs;
- _kursevi[_trenutnoKurseva]->Unos(kursevi._kurs, kursevi._pocetak, kursevi._kraj, kursevi._imePredavaca);
- _trenutnoKurseva++;
- provjera = true;
- }
- else
- {
- int krajPostojecegKursa = pretvoriUDane(_kursevi[pozicija]->_kraj);
- int PocetakNovogKursa = pretvoriUDane(kursevi._pocetak);
- if (PocetakNovogKursa > krajPostojecegKursa)
- {
- _kursevi[pozicija]->_aktivan = false;
- _kursevi[_trenutnoKurseva] = new Kurs;
- _kursevi[_trenutnoKurseva]->Unos(kursevi._kurs, kursevi._pocetak, kursevi._kraj, kursevi._imePredavaca);
- _trenutnoKurseva++;
- provjera = true;
- }
- }
- return provjera;
- }
- bool DodajPolaganje(Polaganja polaganja) {
- bool provjera = false, provjeraImena = false;
- int pozicija = 0;
- for (int i = 0; i < _trenutnoKurseva; i++)
- if (enumKursevi(polaganja._kurs._kurs) == enumKursevi(_kursevi[i]->_kurs)) {
- provjeraImena = true;
- pozicija = i;
- }
- if (provjeraImena == false)
- return false;
- if (_kursevi[pozicija]->_aktivan == false)
- return false;
- int danPolaganja = pretvoriUDane(polaganja._datumPolaganja);
- int danZavrsetkaKursa = pretvoriUDane(_kursevi[pozicija]->_kraj);
- int razlika = danPolaganja - danZavrsetkaKursa;
- if ((razlika <= 5) && (razlika >= 0)) {
- float prethodniUspjeh = 0;
- for (int i = 0; i < _trenutnoPolaganja; i++)
- if (((strcmp(polaganja._polaznik._imePrezime, _polaganja[i]._polaznik._imePrezime) == 0) && (enumKursevi(_polaganja[i]._kurs._kurs) == enumKursevi(polaganja._kurs._kurs))))
- prethodniUspjeh = _polaganja[i]._ostvareniUspjeh;
- if (polaganja._ostvareniUspjeh > prethodniUspjeh) {
- provjera = true;
- Polaganja *temp = new Polaganja[_trenutnoPolaganja + 1];
- for (int i = 0; i < _trenutnoPolaganja; i++) {
- temp[i].Unos(_polaganja[i]._polaznik, _polaganja[i]._kurs, _polaganja[i]._datumPolaganja, _polaganja[i]._ostvareniUspjeh);
- }
- delete[]_polaganja;
- _polaganja = temp;
- _polaganja[_trenutnoPolaganja].Unos(polaganja._polaznik, polaganja._kurs, polaganja._datumPolaganja, polaganja._ostvareniUspjeh);
- _trenutnoPolaganja++;
- }
- }
- return provjera;
- }
- Polaganja *PolaganjaByDatum(Datum OD, Datum DO, int &brojPolaganja) {
- int danOD = pretvoriUDane(OD);
- int danDO = pretvoriUDane(DO);
- int temp;
- for (int i = 0; i < _trenutnoPolaganja; i++) {
- temp = pretvoriUDane(_polaganja[i]._datumPolaganja);
- if (temp >= danOD && temp <= danDO)
- {
- if (_polaganja[i]._ostvareniUspjeh >= 55)
- brojPolaganja++;
- }
- }
- if (brojPolaganja == 0)
- return nullptr;
- Polaganja * polaganjaByDatum = new Polaganja[brojPolaganja + 1];
- int brojac = 0;
- for (int i = 0; i < _trenutnoPolaganja; i++) {
- temp = pretvoriUDane(_polaganja[i]._datumPolaganja);
- if (temp >= danOD && temp <= danDO)
- {
- if (_polaganja[i]._ostvareniUspjeh > 55) {
- polaganjaByDatum[brojac].Unos(_polaganja[i]._polaznik, _polaganja[i]._kurs, _polaganja[i]._datumPolaganja, _polaganja[i]._ostvareniUspjeh);
- brojac++;
- }
- }
- }
- return polaganjaByDatum;
- }
- void sortiraj() {
- bool sortirano = true;
- int temp1, temp2;
- while (sortirano)
- {
- sortirano = false;
- for (int i = 0; i < _trenutnoKurseva - 1; i++)
- {
- temp1 = pretvoriUDane(_kursevi[i]->_pocetak);
- temp2 = pretvoriUDane(_kursevi[i + 1]->_pocetak);
- if (temp1 > temp2) {
- zamjeni(_kursevi[i], _kursevi[i + 1]);
- sortirano = true;
- }
- }
- }
- }
- void Ispis() {
- sortiraj(); // poredaj po datumu
- cout << crt << "\t\t\t:::INFO:::" << crt;
- cout << _nazivCentra << crt;
- cout << "Trenutno kurseva: " << crt;
- for (int i = 0; i < _trenutnoKurseva; i++) {
- _kursevi[i]->Ispis();
- cout << crt;
- }
- }
- };
- float PretragaRekurzivno(SkillsCentar skillscentar, int godina, Kurs odabraniKurs, int pozicija, float &sumirano) {
- if (pozicija == skillscentar._trenutnoPolaganja - 1)
- {
- if ((skillscentar._polaganja[pozicija]._kurs._kurs != odabraniKurs._kurs) || (godina != *odabraniKurs._pocetak._godina))
- return 0;
- else {
- sumirano++;
- return skillscentar._polaganja[pozicija]._ostvareniUspjeh;
- }
- }
- if ((skillscentar._polaganja[pozicija]._kurs._kurs != odabraniKurs._kurs) || (godina != *odabraniKurs._pocetak._godina))
- return PretragaRekurzivno(skillscentar, godina, odabraniKurs, pozicija + 1, sumirano);
- else {
- sumirano++;
- return skillscentar._polaganja[pozicija]._ostvareniUspjeh + PretragaRekurzivno(skillscentar, godina, odabraniKurs, pozicija + 1, sumirano);
- }
- }
- void main(){
- /*
- 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
- 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
- 3. TOKOM IZRADE ISPITA NIJE DOZVOLJENO KORIŠTENJE HELP-A
- 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)
- 5. BEZ OBZIRA NA TO DA LI SU ISPITNI ZADACI URAÐENI, SVI STUDENTI KOJI SU PRISTUPILI ISPITU MORAJU PREDATI SVOJ RAD
- */
- Datum datum1, datum2, datum3, datum4, datum5, datum6;
- datum1.Unos(26, 11, 2015);
- datum2.Unos(29, 5, 2016);
- datum3.Unos(5, 6, 2016);
- datum4.Unos(15, 8, 2016);
- datum5.Unos(13, 7, 2016);
- datum6.Unos(22, 9, 2016);
- Kurs softverski, html, sql, security;
- softverski.Unos(SoftwareEngeneeringFundamentals, datum1, datum2, "Emina Junuz");
- html.Unos(HtmlCSSJavaScript, datum2, datum3, "Larisa Tipura");
- sql.Unos(MasteringSQL, datum3, datum4, "Jasmin Azemovic");
- security.Unos(WindowsSecurity, datum3, datum4, "Adel Handzic");
- Polaznik denis, zanin, indira;
- denis.Unos(1, "Denis Music");
- zanin.Unos(2, "Zanin Vejzovic");
- indira.Unos(3, "Indira Hamulic");
- Polaganja denisHtml, zaninHtml, indiraSql;
- denisHtml.Unos(denis, html, datum5, 61);
- //61 predstavlja ostvareni uspjeh/procenat, a uspjesno polozenim se smatra svaki kurs na kome je polaznik ostvari vise od 55%
- zaninHtml.Unos(zanin, html, datum6, 93);
- SkillsCentar mostar;
- mostar.Unos("Skills Center Mostar");
- //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
- //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
- if (mostar.DodajKurs(softverski)) {
- cout << crt << "KURS USPJESNO REGISTROVAN" << crt;
- softverski.Ispis();
- cout << crt;
- }
- //nije moguce dodati polaganje onog kursa koji nije evidentiran (registrovan, ponudjen) u tom edukacijskom centru
- //moguce je polagati samo aktivne kurseve i to najkasnije 5 dana od dana zavrsetka (kraja) posljednje dodanog (aktivnog) kursa iste vrste (npr. MasteringSQL)
- //jedan polaznik moze vise puta polagati isti kurs, ali novi procenat mora biti veci od prethodno dodanog (na istom kursu)
- if (mostar.DodajPolaganje(denisHtml)) {
- cout << crt << "POLAGANJE EVIDENTIRANO" << crt;
- denisHtml.Ispis();
- }
- Datum OD, DO;
- int brojPolaganja = 0;
- OD.Unos(1, 6, 2016);
- DO.Unos(1, 8, 2016);
- //PolaganjaByDatum – vraca niz polaganja koja su uspjesno realizovana u periodu OD-DO
- Polaganja * polaganjaByDatum = mostar.PolaganjaByDatum(OD, DO, brojPolaganja);
- cout << "U periodu od ";
- OD.Ispis();
- cout << " do ";
- DO.Ispis();
- cout << " uspjesno je realizovano " << brojPolaganja << " polaganja--->>>";
- for (int i = 0; i < brojPolaganja; i++)
- polaganjaByDatum[i].Ispis();
- //PretragaRekurzivno - rekurzivna funkcija pronalazi prosjecni uspjeh koji su polaznici tokom godine (npr.2016) ostvarili na odredjenom kursu (npr. MasteringSQL)
- //cout << "Prosjecan uspjeh na kursu MasteringSQL u 2016 godini je " << PretragaRekurzivno(/*parametri*/)<< endl;
- //Ispis - ispisuje sve informacije o edukacijskom centru. prije ispisa sortirati sve kurseve na osnovu pocetka odrzavanja kursa
- mostar.Ispis();
- //izvrsiti potrebne dealokacije
- datum1.Dealociraj();
- datum2.Dealociraj();
- datum3.Dealociraj();
- datum4.Dealociraj();
- datum5.Dealociraj();
- datum6.Dealociraj();
- softverski.Dealociraj();
- html.Dealociraj();
- sql.Dealociraj();
- security.Dealociraj();
- denis.Dealociraj();
- zanin.Dealociraj();
- indira.Dealociraj();
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement