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 * Predmeti[] = { "Matematika", "Historija", "Geografia", "Hemija", "Biologija", "Engleski" };
- enum enumRazredi { I, II, III, IV };
- char * Razredi[] = { "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);
- }
- bool ProvjeraIsti(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;
- return false;
- }
- bool Provjera15Dana(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;
- return false;
- }
- void Ispis() { cout << *_dan << "/" << *_mjesec << "/" << *_godina << endl; }
- void Dealociraj() { delete _dan; delete _mjesec; delete _godina; _dan = nullptr; _mjesec = nullptr; _godina = nullptr; }
- };
- 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 << "Predmet: " << Predmeti[_predmet] << endl;
- cout << "Razred: " << Razredi[_razredi] << endl;
- cout << "Ime predavaca: " << _imePredavaca << endl;
- cout << "Datum pocetka: ";
- _pocetak->Ispis();
- cout << "Datum kraja: ";
- _kraj->Ispis();
- }
- 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];
- strcpy_s(_imePrezime, size, imePrezime);
- _datumRodjenja = new Datum;
- _datumRodjenja->Unos(*datumRodjenja._dan, *datumRodjenja._mjesec, *datumRodjenja._godina);
- }
- void Dealociraj()
- {
- _datumRodjenja->Dealociraj();
- delete _datumRodjenja; _datumRodjenja = nullptr;
- delete[] _imePrezime; _imePrezime = nullptr;
- }
- void Ispis()
- {
- 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
- //3 predstavlja ostvareni uspjeh/ocjenu, a uspjesno polozenim se smatra svaki kurs na kome je polaznik ostvario ocjenu veću od 1
- bool Uspjeh;
- 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;
- if (_ocjena <= 1)
- Uspjeh = false;
- else
- Uspjeh = true;
- }
- void Ispis()
- {
- cout << "Polaznik: ";
- _polaznik->Ispis();
- cout << "Kurs: ";
- _kurs->Ispis();
- cout << "Datum polaganja: ";
- _datumPolaganja->Ispis();
- cout << "Ocjena: " << _ocjena << 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;
- }
- //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
- bool DodajKurs(Kurs kurs)
- {
- if (_trenutnoKurseva > 50)
- return false;
- if (_trenutnoKurseva > 0)
- {
- for (int i = 0; i < _trenutnoKurseva; i++)
- {
- if (_kursevi[i]->_predmet == kurs._predmet && _kursevi[i]->_kraj->ProvjeraIsti(*kurs._pocetak)==false)
- return false;
- }
- }
- _kursevi[_trenutnoKurseva] = new Kurs;
- _kursevi[_trenutnoKurseva]->Unos(kurs._predmet, kurs._razredi, *kurs._pocetak, *kurs._kraj, kurs._imePredavaca);
- _trenutnoKurseva++;
- return true;
- }
- //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
- bool DodajPolaganje(Polaganja polaganja)
- {
- for (int i = 0; i < _trenutnoPolaganja; i++)
- {
- if (polaganja._kurs->_predmet != _polaganja[i]._kurs->_predmet)
- {
- return false;
- }
- if (_polaganja[i]._kurs->_predmet == polaganja._kurs->_predmet &&
- _polaganja[i]._kurs->_kraj->Provjera15Dana(*polaganja._kurs->_pocetak) == false)
- {
- return false;
- }
- if (strcmp(_polaganja[i]._polaznik->_imePrezime, polaganja._polaznik->_imePrezime) == 0 && polaganja._ocjena>_polaganja[i]._ocjena)
- {
- _polaganja[i]._ocjena = polaganja._ocjena;
- return 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]._ocjena);
- temp[_trenutnoPolaganja] = polaganja;
- if (_trenutnoPolaganja > 0)
- {
- for (int i = 0; i < _trenutnoPolaganja; i++)
- {
- _polaganja[i].Dealociraj();
- }
- delete[]_polaganja; _polaganja = nullptr;
- }
- _polaganja = temp;
- _trenutnoPolaganja++;
- return true;
- }
- //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(Datum OD, Datum DO, enumRazredi razred, int &brojPolaganja)
- {
- for (int i = 0; i <_trenutnoPolaganja; i++)
- {
- if (OD.ProvjeraIsti(*_polaganja[i]._datumPolaganja) == true && DO.ProvjeraIsti(*_polaganja[i]._datumPolaganja) == false
- || _polaganja[i]._kurs->_razredi == razred)
- {
- brojPolaganja++;
- }
- }
- Polaganja * temp = new Polaganja[brojPolaganja + 1];
- for (int i = 0; i < brojPolaganja; i++)
- temp[i].Unos(*_polaganja[i]._polaznik,* _polaganja[i]._kurs,* _polaganja[i]._datumPolaganja, _polaganja[i]._ocjena);
- return temp;
- }
- //ispisuje sve informacije o edukacijskom centru. prije ispisa sortirati sve kurseve
- void Ispis()
- {
- for (int i = 0; i < _trenutnoKurseva - 1; i++)
- {
- for (int j = 0; j < _trenutnoKurseva; j++)
- {
- if (*_kursevi[j]->_pocetak->_godina < *_kursevi[j]->_pocetak->_godina)
- swap(_kursevi[j], _kursevi[j - 1]);
- else if (*_kursevi[j]->_pocetak->_godina == *_kursevi[j]->_pocetak->_godina)
- if (*_kursevi[j]->_pocetak->_mjesec < *_kursevi[j]->_pocetak->_mjesec)
- swap(_kursevi[j], _kursevi[j - 1]);
- else if (*_kursevi[j]->_pocetak->_mjesec == *_kursevi[j - 1]->_pocetak->_mjesec)
- if (*_kursevi[j]->_pocetak->_dan < *_kursevi[j - 1]->_pocetak->_dan)
- swap(_kursevi[j], _kursevi[j - 1]);
- }
- cout << "Naziv centra: " << _nazivCentra << endl;
- for (int i = 0; i < _trenutnoKurseva; i++)
- _kursevi[i]->Ispis();
- 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;
- }
- for (int i = 0; i < _trenutnoPolaganja; i++)
- {
- _polaganja[i].Dealociraj();
- }
- 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, 1970);
- 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
- mostar.Dealociraj(); OD.Dealociraj(); DO.Dealociraj();
- for(int i = 0; i < brojPolaganja; i++)
- {
- polaganjaByDatumiRazred[i].Dealociraj();
- }
- delete[] polaganjaByDatumiRazred; polaganjaByDatumiRazred = nullptr;
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment