Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- enum enumPredmeti { Matematika, Historija, Geografia, Hemija, Biologija, Engleski };
- char *Predmeti[6] = { "Matematika" , "Historija" , "Geografia" , "Hemija" , "Biologija", "Engleski" };
- enum enumRazredi { I, II, III, IV };
- char *Razredi[5] = { "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; delete _mjesec; delete _godina; }
- };
- struct Kurs
- {
- enumPredmeti _predmet;
- enumRazredi _razredi;
- Datum * _pocetak;
- Datum * _kraj;
- char * _imePredavaca;
- 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);
- }
- void Ispis() {
- cout << "Naziv predmeta -> " << Predmeti [(int)_predmet] << endl;
- cout << "Rared-> " << Razredi[(int) _razredi] << endl;
- cout << "Pocetak kursa -> "; _pocetak->Ispis(); cout << endl;
- cout << "Kraj kursa -> "; _kraj->Ispis(); cout << endl;
- cout << "Ime predavaca -> " << _imePredavaca << endl;
- }
- void Dealociraj()
- {
- delete[] _imePredavaca; _imePredavaca = nullptr;
- _pocetak->Dealociraj();
- _kraj->Dealociraj();
- }
- };
- struct Polaznik
- {
- Datum * _datumRodjenja;
- char * _imePrezime;
- void Unos(Datum datumRodjenja, char * imePrezime)
- {
- int size = strlen(imePrezime) + 1;
- _imePrezime = new char[size];
- _datumRodjenja = new Datum;
- strcpy_s(_imePrezime, size, imePrezime);
- _datumRodjenja->Unos(*datumRodjenja._dan, *datumRodjenja._mjesec, *datumRodjenja._godina);
- }
- void Dealociraj() { delete[] _imePrezime; _imePrezime = nullptr; }
- void Ispis() {
- cout << "Ime prezime -> " << _imePrezime << endl;
- cout << "Datum rodjenja ->"; _datumRodjenja->Ispis();
- }
- };
- struct Polaganja
- {
- Polaznik * _polaznik;
- Kurs * _kurs;
- Datum * _datumPolaganja;
- int _ocjena; //ocjene su u rasponu od 1 do 5
- void Unos(Polaznik p, Kurs k, Datum date, int ocjena) {
- _polaznik = new Polaznik;
- _polaznik->Unos(*p._datumRodjenja, p._imePrezime);
- _kurs = new Kurs;
- _kurs->Unos(k._predmet, k._razredi, *k._pocetak, *k._kraj, k._imePredavaca);
- _datumPolaganja = new Datum;
- _datumPolaganja->Unos(*date._dan, *date._mjesec, *date._godina);
- _ocjena = ocjena;
- }
- void Dealociraj() {
- _polaznik->Dealociraj();
- _kurs->Dealociraj();
- _datumPolaganja->Dealociraj();
- delete[] _polaznik; _polaznik = nullptr;
- delete[] _kurs; _kurs = nullptr;
- delete[] _datumPolaganja; _datumPolaganja = nullptr;
- }
- void Ispis() {
- _polaznik->Ispis();
- cout << endl;
- _kurs->Ispis();
- cout << endl;
- _datumPolaganja->Ispis();
- cout << endl;
- cout << "Ocjena -> " << _ocjena << endl;
- }
- };
- struct EdukacijskiCentar
- {
- char * _nazivCentra;
- Kurs * _kursevi[50];//JEDAN EDUKACIJSKI CENTAR MOZE NUDITI NAJVISE 50 KURSEVA
- int _trenutnoKurseva;
- Polaganja * _polaganja;
- int _trenutnoPolaganja;
- void Unos(char *nazivKursa) {
- _nazivCentra = new char[strlen(nazivKursa) + 1];
- strcpy_s(_nazivCentra, strlen(nazivKursa) + 1, nazivKursa);
- for (int i = 0; i < 50; i++)
- {
- _kursevi[i] = nullptr;
- }
- _polaganja = nullptr;
- _trenutnoPolaganja = 0;
- _trenutnoKurseva = 0;
- }
- int prebrojiDane(Datum d) {
- return *d._dan + *d._mjesec * 30 + *d._godina * 365;
- }
- bool DodajKurs(Kurs k)
- {
- for (int i = 0; i < _trenutnoKurseva; i++)
- {
- if (_kursevi[i] != nullptr && prebrojiDane(*_kursevi[i]->_kraj) > prebrojiDane(*k._pocetak)) {
- return false;
- }
- }
- _kursevi[_trenutnoKurseva] = new Kurs;
- _kursevi[_trenutnoKurseva]->Unos(k._predmet, k._razredi, *k._pocetak, *k._kraj, k._imePredavaca);
- _trenutnoKurseva++;
- return true;
- }
- bool DodajPolaganje(Polaganja p) {
- bool imaNema = false;
- for (int i = 0; i < 50; i++)
- {
- if (_kursevi[i]->_predmet == p._kurs[i]._predmet) {
- imaNema = true;
- break;
- }
- }
- if (!imaNema) {
- return false;
- }
- for (int i = 0; i < _trenutnoPolaganja; i++)
- {
- if (_polaganja[i]._kurs[i]._predmet == p._kurs[i]._predmet && _polaganja[i]._ocjena > p._ocjena) {
- 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);
- _polaganja[i].Dealociraj();
- }
- delete[]_polaganja; _polaganja = nullptr;
- temp[_trenutnoPolaganja].Unos(*p._polaznik, *p._kurs, *p._datumPolaganja, p._ocjena);
- _polaganja = temp;
- temp = nullptr;
- _trenutnoPolaganja++;
- }
- Polaganja *PolaganjaByDatumIRazred(Datum OD, Datum DO, enumRazredi r, int &brojPolaganja)
- {
- brojPolaganja = 0;
- Polaganja *niz = new Polaganja[_trenutnoPolaganja];
- for (int i = 0; i < _trenutnoPolaganja; i++)
- {
- if (prebrojiDane(OD) < prebrojiDane(*_polaganja[i]._datumPolaganja) && prebrojiDane(DO) > prebrojiDane(*_polaganja[i]._datumPolaganja))
- {
- cout << *_polaganja[i]._polaznik->_imePrezime << endl;
- niz[brojPolaganja++].Unos(*_polaganja[i]._polaznik, *_polaganja[i]._kurs, *_polaganja[i]._datumPolaganja, _polaganja[i]._ocjena);
- }
- }
- return niz;
- }
- };
- void main()
- {
- /*Informacije o ispitu
- 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(22, 4, 1992); // ovoga nije bilo, ali morao sam sam dodati kako bi radilo, vjv je profa zaboravio
- 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 polagati 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
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement