Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- //narednu liniju code-a ignorisite, osim u slucaju da vam bude predstavljala smetnje u radu
- #pragma warning(disable:4996)
- #pragma warning(disable:4244)
- enum enumKursevi { HtmlCSSJavaScript, SoftwareEngeneeringFundamentals, MasteringSQL, WindowsSecurity };
- char *KurseviChar[] = { "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; }
- bool Period(Datum pocetak) {
- if (*_godina != *pocetak._godina)
- return true;
- else if (*_godina == *pocetak._godina && *_mjesec != *pocetak._mjesec)
- return true;
- else if (*_mjesec == *pocetak._mjesec && *_dan != *pocetak._dan)
- return true;
- return false;
- }
- bool ODDO(Datum OD, Datum DO) {
- if (*_godina < *OD._godina || *_godina > *DO._godina)
- return false;
- else if ((*_godina < *OD._godina || *_godina > *DO._godina) && (*_mjesec < *OD._mjesec || *_mjesec > *DO._mjesec))
- return false;
- else if ((*_mjesec < *OD._mjesec || *_mjesec > *DO._mjesec) && (*_dan < *OD._dan || *_dan > *DO._dan))
- return false;
- return true;
- }
- };
- struct Kurs {
- enumKursevi _kurs;
- Datum _pocetak;
- Datum _kraj;
- char * _imePredavaca;
- bool _aktivan;//SVAKI KURS JE NA POCETKU AKTIVAN
- void Dealociraj() {
- _pocetak.Dealociraj();
- _kraj.Dealociraj();
- delete[] _imePredavaca; _imePredavaca = nullptr;
- }
- void Unos(enumKursevi KursUnos, Datum pocetak, Datum kraj, char *ime) {
- _kurs = KursUnos;
- _pocetak.Unos(*pocetak._dan, *pocetak._mjesec, *pocetak._godina);
- _kraj.Unos(*kraj._dan, *kraj._mjesec, *kraj._godina);
- int vel = strlen(ime) + 1;
- _imePredavaca = new char[vel];
- strcpy(_imePredavaca, ime);
- _aktivan = true;
- }
- void Ispis() {
- cout << "Kurs:" << KurseviChar[_kurs] << endl;
- _pocetak.Ispis();
- _kraj.Ispis();
- cout << "Ime predavaca:" << _imePredavaca << endl;
- if (_aktivan)
- cout << "Kurs je jos aktivan." << endl;
- else
- cout << "Kurs nije aktivan." << endl;
- }
- };
- 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 polaznikUnos, Kurs KursUnos, Datum datumPolaganja, int uspijeh) {
- _polaznik.Unos(polaznikUnos._polaznikID, polaznikUnos._imePrezime);
- _kurs = KursUnos;
- _datumPolaganja.Unos(*datumPolaganja._dan, *datumPolaganja._mjesec, *datumPolaganja._godina);
- _ostvareniUspjeh = uspijeh;
- }
- void Dealokacija() {
- _polaznik.Dealociraj();
- _kurs.Dealociraj();
- _datumPolaganja.Dealociraj();
- }
- void Ispis() {
- _polaznik.Ispis();
- _datumPolaganja.Ispis();
- cout << "Uspijeh:" << _ostvareniUspjeh << "%" << endl;
- }
- };
- struct SkillsCentar {
- char * _nazivCentra;
- Kurs * _kursevi[50];//JEDAN EDUKACIJSKI CENTAR MOZE NUDITI NAJVISE 50 KURSEVA
- int _trenutnoKurseva;
- Polaganja * _polaganja;
- int _trenutnoPolaganja;
- void Unos(char *imeCentra) {
- int vel = strlen(imeCentra) + 1;
- _nazivCentra = new char[vel];
- strcpy(_nazivCentra, imeCentra);
- _trenutnoKurseva = 0;
- _trenutnoPolaganja = 0;
- }
- bool DodajKurs(Kurs k) {
- if (_trenutnoKurseva > 0) {
- for (int i = 0; i < _trenutnoKurseva; i++)
- {
- if (_kursevi[i]->_kurs == k._kurs && !_kursevi[i]->_kraj.Period(k._pocetak))
- return false;
- }
- }
- _kursevi[_trenutnoKurseva] = new Kurs;
- _kursevi[_trenutnoKurseva]->Unos(k._kurs, k._pocetak, k._kraj, k._imePredavaca);
- _trenutnoKurseva++;
- return true;
- }
- bool DodajPolaganje(Polaganja p) {
- if (_trenutnoPolaganja > 0) {
- for (int i = 0; i < _trenutnoKurseva; i++)
- {
- if (_polaganja[i]._polaznik._polaznikID == p._polaznik._polaznikID && _polaganja[i]._ostvareniUspjeh > p._ostvareniUspjeh)
- return false;
- if (!_kursevi[i]->_aktivan)
- return false;
- if (!(_kursevi[i]->_kraj._dan + 5 > p._datumPolaganja._dan))
- return false;
- if (_kursevi[i]->_kurs == p._kurs._kurs && !p._datumPolaganja.ODDO(_kursevi[i]->_pocetak, _kursevi[i]->_kraj))
- return false;
- }
- }
- for (int i = 0; i < _trenutnoKurseva; i++)
- {
- if (p._kurs._kurs == _kursevi[i]->_kurs) {
- Povecaj();
- _polaganja[_trenutnoPolaganja].Unos(p._polaznik, p._kurs, p._datumPolaganja, p._ostvareniUspjeh);
- _trenutnoPolaganja++;
- return true;
- }
- }
- return false;
- }
- void Povecaj() {
- if (_trenutnoPolaganja == 0)
- _polaganja = new Polaganja[1];
- else {
- Polaganja *novo = new Polaganja[_trenutnoPolaganja];
- for (int i = 0; i < _trenutnoPolaganja; i++)
- novo->Unos(_polaganja[i]._polaznik, _polaganja[i]._kurs, _polaganja[i]._datumPolaganja, _polaganja[i]._ostvareniUspjeh);
- for (int i = 0; i < _trenutnoPolaganja; i++)
- _polaganja[i].Dealokacija();
- _polaganja = new Polaganja[_trenutnoPolaganja + 1];
- for (int i = 0; i < _trenutnoPolaganja; i++)
- _polaganja->Unos(novo[i]._polaznik, novo[i]._kurs, novo[i]._datumPolaganja, novo[i]._ostvareniUspjeh);
- for (int i = 0; i < _trenutnoPolaganja; i++)
- novo[i].Dealokacija();
- novo = nullptr;
- }
- }
- Polaganja *PolaganjaByDatum(Datum OD, Datum DO, int &brojPolaganja) {
- for (int i = 0; i < _trenutnoPolaganja; i++)
- {
- if (_polaganja[i]._datumPolaganja.ODDO(OD, DO))
- brojPolaganja++;
- }
- if (brojPolaganja > 0) {
- Polaganja *vrati = new Polaganja[brojPolaganja];
- int j = 0;
- for (int i = 0; i < _trenutnoPolaganja; i++)
- {
- if (_polaganja[i]._datumPolaganja.ODDO(OD, DO)) {
- vrati[j].Unos(_polaganja[i]._polaznik, _polaganja[i]._kurs, _polaganja[i]._datumPolaganja, _polaganja[i]._ostvareniUspjeh);
- j++;
- }
- }
- return vrati;
- }
- return NULL;
- }
- void Dealokacija() {
- delete[]_nazivCentra; _nazivCentra = nullptr;
- for (int i = 0; i < _trenutnoKurseva; i++)
- _kursevi[i]->Dealociraj();
- for (int i = 0; i < _trenutnoPolaganja; i++)
- _polaganja[i].Dealokacija();
- }
- void Ispis() {
- cout << crt << "KURSEVI" << crt;
- for (int i = 0; i < _trenutnoKurseva; i++){
- cout << crt;
- _kursevi[i]->Ispis();
- }
- cout << crt << "POLAGANJA" << crt;
- for (int i = 0; i < _trenutnoPolaganja; i++){
- _polaganja[i].Ispis();
- }
- }
- };
- float PretragaRekurzivno(Polaganja *p, int brojac, float uspijeh, int broj, enumKursevi kurs) {
- if (brojac < 0)
- return uspijeh / broj;
- else {
- if (p[brojac]._kurs._kurs == kurs) {
- uspijeh += p[brojac]._ostvareniUspjeh;
- broj++;
- return PretragaRekurzivno(p, brojac - 1, uspijeh, broj, kurs);
- }
- else
- return PretragaRekurzivno(p, brojac - 1, uspijeh, broj, kurs);
- }
- }
- 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);
- indiraSql.Unos(indira, sql, datum4, 85);
- 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;
- }
- if (mostar.DodajKurs(html)) {
- cout << crt << "KURS USPJESNO REGISTROVAN" << crt;
- html.Ispis();
- cout << crt;
- }
- if (mostar.DodajKurs(sql)) {
- cout << crt << "KURS USPJESNO REGISTROVAN" << crt;
- sql.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();
- }
- if (mostar.DodajPolaganje(indiraSql)) {
- cout << crt << "POLAGANJE EVIDENTIRANO" << crt;
- indiraSql.Ispis();
- }
- if (mostar.DodajPolaganje(zaninHtml)) {
- cout << crt << "POLAGANJE EVIDENTIRANO" << crt;
- zaninHtml.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 "<<endl;
- OD.Ispis();
- cout << " do ";
- DO.Ispis();
- cout << " uspjesno je realizovano " << brojPolaganja << " polaganja--->>>"<<endl;
- for (size_t 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(mostar._polaganja, mostar._trenutnoPolaganja - 1, 0, 0, MasteringSQL) << endl;
- ////Ispis - ispisuje sve informacije o edukacijskom centru. prije ispisa sortirati sve kurseve na osnovu pocetka odrzavanja kursa
- mostar.Ispis();
- mostar.Dealokacija();
- ////izvrsiti potrebne dealokacije
- system("pause");
- }
Add Comment
Please, Sign In to add comment