Advertisement
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)
- enum enumPredmeti { Matematika, Historija, Geografia, Hemija, Biologija, Engleski };
- char * predmetiChar[] = { "Matematika", "Historija", "Geografia", "Hemija", "Biologija", "Engleski" };
- enum enumRazredi { I, II, III, IV };
- char * razrediChar[] = { "I", "II", "III", "IV" };
- 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; _dan = nullptr;
- delete _mjesec; _mjesec = nullptr;
- delete _godina; _godina = nullptr;
- }
- bool ProvjeraDatuma(Datum datum)
- {
- if (*datum._godina != *_godina)
- {
- return true;
- }
- else if (*datum._godina == *_godina && *datum._mjesec != *_mjesec)
- {
- return true;
- }
- else if (*datum._godina == *_godina && *datum._mjesec == *_mjesec &&* datum._dan != *_dan)
- {
- return true;
- }
- else return false;
- }
- bool ProvjeraDatuma15Dana(Datum datum)
- {
- if (*datum._godina > *_godina)
- return true;
- else if (*datum._godina == *_godina &&* datum._mjesec >* _mjesec)
- return true;
- else if (*datum._mjesec == *_mjesec && *datum._dan - *_dan > 15)
- return true;
- else return false;
- }
- bool provjeraODDO(Datum datum)
- {
- if (*datum._godina < *_godina)
- return true;
- else if (*datum._godina == *_godina && *datum._mjesec < *_mjesec)
- return true;
- else if (*datum._mjesec == *_mjesec && *datum._dan < *_dan)
- return true;
- else return false;
- }
- };
- struct Kurs
- {
- enumPredmeti _predmet;
- enumRazredi _razredi;
- Datum * _pocetak;
- Datum * _kraj;
- char * _imePredavaca;
- bool _aktivan; //kurs je aktivan
- void Unos(enumPredmeti predmet, enumRazredi razred, Datum pocetak, Datum kraj, char * imePredavaca)
- {
- _predmet = predmet;
- _razredi = razred;
- _pocetak = new Datum;
- _pocetak->Unos(*pocetak._dan, *pocetak._mjesec, *pocetak._godina);
- _kraj = new Datum;
- _kraj->Unos(*kraj._dan, *kraj._mjesec, *kraj._godina);
- /*int size = strlen(imePredavaca) + 1;
- imePredavaca = new char[size];
- strcpy_s(imePredavaca, size, _imePredavaca);*/
- int size = strlen(imePredavaca) + 1;
- _imePredavaca = new char[size];
- strcpy_s(_imePredavaca, size, imePredavaca);
- }
- void Ispis()
- {
- cout << crt;
- cout << "Predmet: " << predmetiChar[_predmet] << endl;
- cout << "Razred: " << razrediChar[_razredi] << endl;
- cout << "Datum pocetka: ";
- _pocetak->Ispis();
- cout << "Datum kraja: ";
- _kraj->Ispis();
- cout << "Ime predavaca: " << _imePredavaca << endl;
- }
- void Dealociraj()
- {
- delete[] _imePredavaca; _imePredavaca = nullptr;
- _pocetak->Dealociraj(); delete[] _pocetak; _pocetak = nullptr;
- _kraj->Dealociraj(); delete[] _kraj; _kraj = nullptr;
- }
- };
- struct Polaznik
- {
- Datum * _datumRodjenja;
- char * _imePrezime;
- void Unos(Datum datumRodjenja, char * imePrezime)
- {
- int size = strlen(imePrezime) + 1;
- _imePrezime = new char[size];
- strcpy_s(_imePrezime, size, imePrezime);
- _datumRodjenja = new Datum;
- _datumRodjenja->Unos(*datumRodjenja._dan, *datumRodjenja._mjesec, *datumRodjenja._godina);
- }
- void Dealociraj()
- {
- delete[] _imePrezime; _imePrezime = nullptr;
- _datumRodjenja->Dealociraj(); delete[] _datumRodjenja; _datumRodjenja = nullptr;
- }
- void Ispis()
- {
- cout << crt;
- cout << "Ime i prezime polaznika: " << _imePrezime << endl;
- cout << "Datum rodjenja polaznika: ";
- _datumRodjenja->Ispis();
- }
- };
- struct Polaganja
- {
- Polaznik * _polaznik;
- Kurs * _kurs;
- Datum * _datumPolaganja;
- int _ocjena; //ocjene su u rasponu od 1 do 5
- void Unos(Polaznik polaznik, Kurs kurs, Datum datum, int ocjena)
- {
- _polaznik = new Polaznik;
- _polaznik->Unos(*polaznik._datumRodjenja, polaznik._imePrezime);
- _kurs = new Kurs;
- _kurs->Unos(kurs._predmet, kurs._razredi, *kurs._pocetak, *kurs._kraj, kurs._imePredavaca);
- _datumPolaganja = new Datum;
- _datumPolaganja->Unos(*datum._dan, *datum._mjesec, *datum._godina);
- _ocjena = ocjena;
- }
- void Ispis()
- {
- cout << "-- Polaznik -- ";
- _polaznik->Ispis();
- cout << "-- Kurs -- ";
- _kurs->Ispis();
- cout << "Datum polaganja: ";
- _datumPolaganja->Ispis();
- cout << "Ocjena: " << _ocjena << endl;
- //3 predstavlja ostvareni uspjeh / ocjenu,
- //a uspjesno polozenim se smatra svaki kurs na kome je polaznik ostvario ocjenu veću od 1
- if (_ocjena > 1)
- cout << "Uspjesno polozeno! " << endl;
- else
- cout << "Nije polozeno! " << endl;
- }
- void Dealociraj()
- {
- _polaznik->Dealociraj(); delete[]_polaznik; _polaznik = nullptr;
- _kurs->Dealociraj(); delete[] _kurs; _kurs = nullptr;
- _datumPolaganja->Dealociraj(); delete[] _datumPolaganja; _datumPolaganja = nullptr;
- }
- };
- struct EdukacijskiCentar
- {
- char * _nazivCentra;
- Kurs * _kursevi[50];//JEDAN EDUKACIJSKI CENTAR MOZE NUDITI NAJVISE 50 KURSEVA
- int _trenutnoKurseva;
- Polaganja * _polaganja;
- int _trenutnoPolaganja;
- void Unos(char * nazivCentra)
- {
- int size = strlen(nazivCentra) + 1;
- _nazivCentra = new char[size];
- strcpy_s(_nazivCentra, size, nazivCentra);
- _trenutnoKurseva = 0;
- _trenutnoPolaganja = 0;
- }
- bool DodajKurs(Kurs kurs)
- {
- //jedan edukacijski centar moze nuditi vise istih kurseva (npr. Matematika),
- //ali se oni moraju realizovati u razlictim periodima (pocetak-kraj) tj. ne smiju se preklapati
- //novi kurs istog tipa (npr. Matematika) se mora realizovati nakon prethodno dodanog
- //npr. ako prethodni kurs Matematika traje 01.03.2016 - 01.04.2016, onda se novi kurs Matematika moze dodati jedino ako pocinje nakon 01.04.2016
- if (_trenutnoKurseva > 50)
- return false;
- if (_trenutnoKurseva == 0)
- {
- _kursevi[_trenutnoKurseva] = new Kurs;
- _kursevi[_trenutnoKurseva]->Unos(kurs._predmet, kurs._razredi, *kurs._pocetak, *kurs._kraj, kurs._imePredavaca);
- _trenutnoKurseva++;
- return true;
- }
- else if (_trenutnoKurseva > 0)
- {
- for (int i = 0; i < _trenutnoKurseva; i++)
- {
- if (_kursevi[i]->_predmet == kurs._predmet && _kursevi[i]->_kraj->ProvjeraDatuma(*kurs._pocetak) == false);
- return false;
- }
- }
- }
- bool DodajPolaganje(Polaganja polaganje)
- {
- //nije moguce dodati polaganje onog kursa koji nije evidentiran (registrovan, ponudjen) u tom edukacijskom centru
- //kurseve je moguce najkasnije 15 dana od dana zavrsetka (kraja) posljednje dodanog kursa
- //jedan polaznik moze vise puta polagati isti kurs, ali nova ocjena mora biti veca od prethodne ocjene na tom istom kursu
- if (_trenutnoPolaganja == 0)
- {
- _polaganja = new Polaganja;
- _polaganja->Unos(*polaganje._polaznik, *polaganje._kurs, *polaganje._datumPolaganja, polaganje._ocjena);
- _trenutnoPolaganja++;
- return true;
- }
- if (polaganje._kurs->_aktivan == false)
- return false;
- for (int i = 0; i < _trenutnoPolaganja; i++)
- {
- if (strcmp(_polaganja[i]._polaznik->_imePrezime, polaganje._polaznik->_imePrezime) == 0 && _polaganja[i]._ocjena < polaganje._ocjena)
- {
- _polaganja[i]._ocjena = polaganje._ocjena;
- return true;
- }
- else if (_polaganja[i]._datumPolaganja->ProvjeraDatuma15Dana(*polaganje._datumPolaganja) == false)
- return false;
- }
- 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]._ocjena);
- }
- temp[_trenutnoPolaganja].Unos(*polaganje._polaznik, *polaganje._kurs, *polaganje._datumPolaganja, polaganje._ocjena);
- for (int i = 0; i < _trenutnoPolaganja; i++)
- {
- _polaganja[i].Dealociraj();
- }
- delete[] _polaganja;
- _polaganja = temp;
- _trenutnoPolaganja++;
- return true;
- }
- Polaganja * PolaganjaByDatumIRazred(Datum OD, Datum DO, enumRazredi razred, int &brojPolaganja)
- {
- //PolaganjaByDatumIRazred - funkcija vraca niz uspjesnih polaganja koja su realizovana u periodu OD - DO,
- //a odnose se na bilo koji predmet u definisanom razredu (npr. II)
- for (int i = 0; i < _trenutnoPolaganja; i++)
- {
- if ((OD.provjeraODDO(*_polaganja[i]._kurs->_pocetak) == false && DO.provjeraODDO(*_polaganja[i]._kurs->_kraj) == true)
- || _polaganja[i]._kurs->_razredi == razred)
- {
- brojPolaganja++;
- }
- }
- Polaganja * niz = new Polaganja[brojPolaganja + 1];
- for (int i = 0; i < brojPolaganja; i++)
- {
- niz[i].Unos(*_polaganja[i]._polaznik, *_polaganja[i]._kurs, *_polaganja[i]._datumPolaganja, _polaganja[i]._ocjena);
- }
- return niz;
- }
- void sortNiz()
- {
- for (int i = 0; i < _trenutnoKurseva; i++)
- {
- for (int j = 1; j < _trenutnoKurseva; j++)
- {
- if (_kursevi[j]->_predmet < _kursevi[j - 1]->_predmet)
- swap(_kursevi[j], _kursevi[j - 1]);
- }
- }
- }
- void Ispis()
- {
- //ispisuje sve informacije o edukacijskom centru. prije ispisa sortirati sve kurseve
- sortNiz();
- cout << "Naziv centra: " << _nazivCentra << endl;
- cout << "-- Kursevi --";
- for (int i = 0; i < _trenutnoKurseva; i++)
- {
- _kursevi[i]->Ispis();
- }
- cout << "-- Polaganja -- " << endl;
- for (int i = 0; i < _trenutnoPolaganja; i++)
- {
- _polaganja[i].Ispis();
- }
- }
- void Dealociraj()
- {
- delete[] _nazivCentra; _nazivCentra = nullptr;
- for (int i = 0; i < _trenutnoKurseva; i++)
- {
- _kursevi[i]->Dealociraj();
- delete[] _kursevi[i]; _kursevi[i] = nullptr;
- }
- delete[] _polaganja; _polaganja = nullptr;
- }
- };
- 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 matematika, hemija, biologija, engleski;
- matematika.Unos(Matematika, III, datum1, datum2, "Nina Bijedic");
- hemija.Unos(Hemija, III, datum2, datum3, "Murat Praso");
- biologija.Unos(Biologija, IV, datum3, datum4, "Jasmin Azemovic");
- engleski.Unos(Engleski, II, datum3, datum4, "Iris Memic");
- Datum rodjenje1, rodjenje2;
- rodjenje1.Unos(22, 8, 1982);
- rodjenje2.Unos(23, 3, 1977);
- Polaznik denis, zanin, indira;
- denis.Unos(rodjenje1, "Denis Music");
- zanin.Unos(rodjenje2, "Zanin Vejzovic");
- Polaganja denisMatematika, zaninHemija, denisBiologija;
- denisMatematika.Unos(denis, matematika, datum5, 3);//3 predstavlja ostvareni uspjeh/ocjenu,
- //a uspjesno polozenim se smatra svaki kurs na kome je polaznik ostvario ocjenu veću od 1
- zaninHemija.Unos(zanin, hemija, datum6, 93);
- EdukacijskiCentar mostar;
- mostar.Unos("ECM - Edukacijski Center Mostar");
- //jedan edukacijski centar moze nuditi vise istih kurseva (npr. Matematika), ali se oni moraju realizovati u razlictim periodima (pocetak-kraj) tj. ne smiju se preklapati
- //novi kurs istog tipa (npr. Matematika) se mora realizovati nakon prethodno dodanog npr. ako prethodni kurs Matematika traje 01.03.2016 - 01.04.2016, onda se novi kurs Matematika moze dodati jedino ako pocinje nakon 01.04.2016
- if (mostar.DodajKurs(matematika)) {
- cout << crt << "KURS USPJESNO REGISTROVAN" << crt;
- matematika.Ispis();
- cout << crt;
- }
- //nije moguce dodati polaganje onog kursa koji nije evidentiran (registrovan, ponudjen) u tom edukacijskom centru
- //kurseve je moguce najkasnije 15 dana od dana zavrsetka (kraja) posljednje dodanog kursa
- //jedan polaznik moze vise puta polagati isti kurs, ali nova ocjena mora biti veca od prethodne ocjene na tom istom kursu
- if (mostar.DodajPolaganje(denisMatematika)) {
- cout << crt << "POLAGANJE EVIDENTIRANO" << crt;
- denisMatematika.Ispis();
- }
- Datum OD, DO;
- int brojPolaganja = 0;
- OD.Unos(1, 6, 2016);
- DO.Unos(1, 8, 2016);
- //PolaganjaByDatumIRazred - funkcija vraca niz uspjesnih polaganja koja su realizovana u periodu OD - DO, a odnose se na bilo koji predmet u definisanom razredu (npr. II)
- Polaganja * polaganjaByDatumiRazred = mostar.PolaganjaByDatumIRazred(OD, DO, II, brojPolaganja);
- cout << "U periodu od ";
- OD.Ispis();
- cout << " do ";
- DO.Ispis();
- cout << " uspjesno je polozeno " << brojPolaganja << " predmeta --->>> ";
- for (size_t i = 0; i < brojPolaganja; i++)
- polaganjaByDatumiRazred[i].Ispis();
- //PretragaRekurzivno - rekurzivna funkcija koja pronalazi prosjecni uspjeh koji su polaznici tokom godine (npr.2016) ostvarili na odredjenom kursu (npr. Matematika)
- //cout << "Prosjecan uspjeh na kursu iz predmeta Matematika u 2016 godini je " << PretragaRekurzivno(/*potrebni parametri*/) << endl;
- //ispisuje sve informacije o edukacijskom centru. prije ispisa sortirati sve kurseve
- mostar.Ispis();
- //izvrsiti potrebne dealokacije
- datum1.Dealociraj(); datum2.Dealociraj(); datum3.Dealociraj(); datum4.Dealociraj(); datum5.Dealociraj(); datum6.Dealociraj();
- matematika.Dealociraj(); hemija.Dealociraj(); biologija.Dealociraj(); engleski.Dealociraj();
- rodjenje1.Dealociraj(); rodjenje2.Dealociraj();
- mostar.Dealociraj();
- OD.Dealociraj(); DO.Dealociraj();
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement