Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //narednu liniju code-a ignorisite, osim u slucaju da vam bude predstavljala smetnje u radu
- #include <iostream>
- using namespace std;
- #pragma warning(disable:4996)
- enum enumKursevi { HtmlCSSJavaScript, SoftwareEngeneeringFundamentals, MasteringSQL, WindowsSecurity };
- char * charEnumKursevi[] = { "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);
- // _dan=&d, _mjesec=&m, _godina=&g;
- }
- void Ispis() { cout << *_dan << "/" << *_mjesec << "/" << *_godina; }
- void Dealociraj()
- {
- delete _dan; _dan = nullptr;
- delete _mjesec; _mjesec = nullptr;
- delete _godina; _godina = nullptr;
- }
- bool provejraDatuma(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 > 15)
- return true;
- else return false;
- }
- };
- struct Kurs
- {
- enumKursevi _kurs;
- Datum * _pocetak;
- Datum * _kraj;
- char * _imePredavaca;
- float _cijenaKursa;
- void Unos(enumKursevi kurs, Datum pocetak, Datum kraj, char * imePredavaca, float cijenaKursa)
- {
- _kurs = kurs;
- _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);
- _cijenaKursa = cijenaKursa;
- }
- void Ispis()
- {
- cout << "Kurs:" << charEnumKursevi[_kurs] << endl;
- cout << "Ime predavaca: " << _imePredavaca << endl;
- cout << "Cijena kursa:" << _cijenaKursa << endl;
- cout << "Pocetak kursa: ";
- _pocetak->Ispis();
- cout << " Kraj kursa: ";
- _kraj->Ispis();
- cout << crt;
- }
- void Dealociraj()
- {
- delete[] _imePredavaca; _imePredavaca = nullptr;
- _pocetak->Dealociraj();
- _kraj->Dealociraj();
- delete[] _pocetak; _pocetak = nullptr;
- delete[] _kraj; _kraj = nullptr;
- }
- };
- struct Polaznik
- {
- char * _imePrezime;
- Datum * _datumRodjenja;
- void Unos(char * imePrezime, Datum datumRodjenja)
- {
- 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 << "Polaznik: " << _imePrezime << endl;
- cout << "Datum rodjenja: ";
- _datumRodjenja->Ispis();
- cout << crt;
- }
- };
- struct Prijava
- {
- /*za svakog polaznika ce se cuvati podatak o iznosu uplate. uplaceni iznos svakog pojedinog polaznika treba biti jednak punoj cijeni kursa osim u sljedecim slucajevima:
- 1. prijave 2 ili 3 polaznika dobijaju 10% popusta na ukupnu cijenu kursa
- 2. prijave za vise od 3 polaznika dobijaju 15% na ukupnu cijenu kursa
- */
- int _trenutnoPolaznika;
- Kurs * _kurs; //prijava treba cuvati adresu (pokazivati) na postojeci kurs, a ne kreirati novi
- Polaznik * _polaznik; //prijava moze biti pojedinacna ili grupna
- float * _uplaceniIznos;
- void Unos(Kurs * kurs)
- {
- _kurs = kurs;
- _trenutnoPolaznika = 0;
- _polaznik = nullptr;
- _uplaceniIznos = nullptr;
- }
- //700 predstavlja uplatu polaznika koji se prijavljuje na kurs
- //tokom prijave polaznika nije potrebno uplatiti kompletan iznos, ali on mora biti veci od 50% iznosa kojeg je u
- //tom momentu potrebno platiti (u zavisnosti od broja prijavljenih tj. ostvarenog popusta)
- ////onemoguciti dupliranje polaznika na istoj prijavi
- //uplata ne zadovoljava kriterije
- bool DodajPolaznika(Polaznik polaznik, int iznosUplate)
- {
- //cijena kursa za HTML=1000/2=500
- if (iznosUplate<500)
- {
- cout << "Uplata ne zadovoljava kriterije." << endl;
- return false;
- }
- if (_trenutnoPolaznika == 0)
- {
- _polaznik = new Polaznik;
- _polaznik->Unos(polaznik._imePrezime, *polaznik._datumRodjenja);
- _trenutnoPolaznika++;
- cout << "Polaznik uspjeno dodan. -> ";
- return true;
- }
- for (int i = 0; i < _trenutnoPolaznika; i++)
- {
- if (strcmp(_polaznik[i]._imePrezime, polaznik._imePrezime) == 0)
- {
- cout << "Polaznik s imenom: " << polaznik._imePrezime << " vec dodan. " << endl;
- return false;
- }
- }
- if (_trenutnoPolaznika > 0)
- {
- Polaznik * temp = new Polaznik[_trenutnoPolaznika + 1];
- for (int i = 0; i < _trenutnoPolaznika; i++)
- {
- temp[i].Unos(_polaznik[i]._imePrezime, *_polaznik[i]._datumRodjenja);
- }
- temp[_trenutnoPolaznika].Unos(polaznik._imePrezime, *polaznik._datumRodjenja);
- for (int i = 0; i < _trenutnoPolaznika; i++)
- {
- _polaznik[i].Dealociraj();
- }
- delete[] _polaznik;
- _polaznik = temp;
- _trenutnoPolaznika++;
- cout << "Polaznik uspjeno dodan. -> ";
- return true;
- }
- }
- //polaznik mora biti prethodno dodan prijavi da bi mogao dodati novu uplatu
- bool DodajUplatu(Polaznik polaznik, int iznosNoveUplate)
- {
- for (int i = 0; i < _trenutnoPolaznika; i++)
- {
- if (strcmp(_polaznik[i]._imePrezime, polaznik._imePrezime) < 0)
- {
- cout << "Polaznik zadovoljava uvjete za novu uplatu." << endl;
- float temp = 0;
- float suma = 0;
- temp = iznosNoveUplate;
- suma += temp;
- cout << "Uplata u iznosu: " << suma << " KM uspjesno dodana za polaznika: " << polaznik._imePrezime << endl;
- return true;
- }
- else
- {
- cout << "Polaznik prethodno nije dodan prijavi. " << endl;
- return false;
- }
- }
- }
- //ako polaznik duguje novca funkcija vraca negativan iznos potrebne uplate
- float StatusUplate(Polaznik polaznik)
- {
- float statusUplate = 850;
- float cijenaKursa = 1000;
- float suma = 0;
- suma = statusUplate - cijenaKursa;
- return suma;
- }
- void Ispis()
- {
- cout << "Kurs: ";
- _kurs->Ispis();
- cout << "Polaznici: " << endl;
- for (int i = 0; i < _trenutnoPolaznika; i++)
- {
- cout << i + 1 << ": ";
- _polaznik[i].Ispis();
- }
- //cout << "Uplaceni iznos: " << *_uplaceniIznos << endl;
- }
- };
- struct SkillsCentar
- {
- char * _nazivCentra;
- Kurs * _kursevi[50];//JEDAN EDUKACIJSKI CENTAR MOZE NUDITI NAJVISE 50 KURSEVA
- int _trenutnoKurseva;
- Prijava * _prijave;
- int _trenutnoPrijava;
- void Unos(char * nazivCentra)
- {
- int size = strlen(nazivCentra) + 1;
- _nazivCentra = new char[size];
- strcpy_s(_nazivCentra, size, nazivCentra);
- for (int i = 0; i < _trenutnoKurseva; i++)
- {
- _kursevi [i] = nullptr;
- }
- _trenutnoKurseva = 0;
- _prijave = nullptr;
- _trenutnoPrijava = 0;
- }
- //jedan edukacijski centar moze moze nuditi vise istih kurseva (npr. MasteringSQL), ali novi kurs moze poceti tek 15 dana nakon zavrsetka prethodnog kursa npr.
- //ako prethodni kurs MasteringSQL traje 01.03.2016 - 01.04.2016, onda se novi kurs MasteringSQL moze poceti nakon 15.04.2016
- bool DodajKurs(Kurs kurs)
- {
- if (_trenutnoKurseva == 0)
- {
- _kursevi[_trenutnoKurseva] = new Kurs;
- _kursevi[_trenutnoKurseva]->Unos(kurs._kurs, *kurs._pocetak, *kurs._kraj, kurs._imePredavaca, kurs._cijenaKursa);
- _trenutnoKurseva++;
- cout << "Kurs je dodan. ";
- return true;
- }
- for (int i = 0; i < _trenutnoKurseva; i++)
- {
- if (_kursevi[i]->_kurs == kurs._kurs && _kursevi[i]->_kraj->provejraDatuma(*kurs._pocetak))
- {
- cout << "Kurs nije moguce dodati. " << endl;
- return false;
- }
- }
- }
- //nije moguce dodati prijavu onog kursa koji nije evidentiran (registrovan, ponudjen) u tom edukacijskom centru
- //moguce je dodati samo one prijave koje kod kojih ukupna uplata iznosi vise od 80% cijene kursa (za prijavljeni broj polaznika)
- bool DodajPrijavu(Prijava prijava)
- {
- return true;
- }
- //vraca niz polaznika koji nisu izmirili uplate
- Polaznik * PolazniciDugovanja(int brojPolaznika)
- {
- Polaznik * temp = nullptr;
- return temp;
- }
- //ispisuje sve informacije o edukacijskom centru. prije ispisa sortirati sve prijave po visini dugovanja njenih polaznika
- //sort po datumu pocetka kursa:
- void sortNiz()
- {
- for (int i = 0; i < _trenutnoKurseva; i++)
- {
- for (int j = 1; j < _trenutnoKurseva; j++)
- {
- if (*_kursevi[j]->_pocetak._godina < *_kursevi[j - 1]->_pocetak._godina)
- swap(_kursevi[j], _kursevi[j - 1]);
- else if (_kursevi[j]->_pocetak)
- }
- }
- }
- void Ispis()
- {
- /*
- char * _nazivCentra;
- Kurs * _kursevi[50];//JEDAN EDUKACIJSKI CENTAR MOZE NUDITI NAJVISE 50 KURSEVA
- int _trenutnoKurseva;
- Prijava * _prijave;
- int _trenutnoPrijava;
- */
- cout << "Naziv centra: " << _nazivCentra << endl;
- cout << "Kursevi: " << endl;
- for (int i = 0; i < _trenutnoKurseva; i++)
- {
- cout << i + 1<<": ";
- _kursevi[i]->Ispis();
- }
- cout << "Prijave: " << endl;
- for (int i = 0; i < _trenutnoPrijava; i++)
- {
- cout << i + 1 << ": ";
- _prijave[i].Ispis();
- }
- }
- };
- 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, rodjendan;
- 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);
- rodjendan.Unos(15, 6, 1995);
- Kurs softverski, html, sql, security;
- softverski.Unos(SoftwareEngeneeringFundamentals, datum1, datum2, "Emina Junuz", 1800);
- html.Unos(HtmlCSSJavaScript, datum2, datum3, "Larisa Tipura", 1000);
- sql.Unos(MasteringSQL, datum3, datum4, "Jasmin Azemovic", 2230);
- security.Unos(WindowsSecurity, datum3, datum4, "Adel Handzic", 4000);
- Polaznik denis, zanin, indira, dubravka;
- denis.Unos("Denis Music", rodjendan);
- zanin.Unos("Zanin Vejzovic", rodjendan);
- indira.Unos("Indira Hamulic", rodjendan);
- dubravka.Unos("Dubravka Plosko", rodjendan);
- Prijava denisZaninDubravkaHtml, zaninIndiraHtml, indiraSql;
- denisZaninDubravkaHtml.Unos(&html);
- //700 predstavlja uplatu polaznika koji se prijavljuje na kurs
- if (denisZaninDubravkaHtml.DodajPolaznika(denis, 700))//tokom prijave polaznika nije potrebno uplatiti kompletan iznos, ali on mora biti veci od 50% iznosa kojeg je u
- //tom momentu potrebno platiti (u zavisnosti od broja prijavljenih tj. ostvarenog popusta)
- cout << "Polaznik uspjesno dodan!" << endl;
- if (denisZaninDubravkaHtml.DodajPolaznika(zanin, 650))
- cout << "Polaznik uspjesno dodan!" << endl;
- if (denisZaninDubravkaHtml.DodajPolaznika(zanin, 650))//onemoguciti dupliranje polaznika na istoj prijavi
- cout << "Polaznik uspjesno dodan!" << endl;
- if (denisZaninDubravkaHtml.DodajPolaznika(dubravka, 430))//uplata ne zadovoljava kriterije
- cout << "Polaznik uspjesno dodan!" << crt;
- if (denisZaninDubravkaHtml.DodajUplatu(zanin, 200))//polaznik mora biti prethodno dodan prijavi da bi mogao dodati novu uplatu
- cout << "Uplata uspjesno dodana" << crt;
- zaninIndiraHtml.Unos(&html);
- if (zaninIndiraHtml.DodajPolaznika(zanin, 800))
- cout << "Polaznik uspjesno dodan!" << endl;
- if (zaninIndiraHtml.DodajPolaznika(indira, 750))
- cout << "Polaznik uspjesno dodan!" << crt;
- float stanjeUplate = denisZaninDubravkaHtml.StatusUplate(zanin);//ako polaznik duguje novca funkcija vraca negativan iznos potrebne uplate
- cout << "Polaznik "; zanin.Ispis();
- if (stanjeUplate > 0)
- cout << " je u pretplati " << stanjeUplate << " KM" << endl;
- else
- cout << " je duzan uplatiti " << stanjeUplate * -1 << " KM" << endl;
- SkillsCentar mostar;
- mostar.Unos("Skills Center Mostar");
- //jedan edukacijski centar moze moze nuditi vise istih kurseva (npr. MasteringSQL), ali novi kurs moze poceti tek 15 dana nakon zavrsetka prethodnog kursa npr.
- //ako prethodni kurs MasteringSQL traje 01.03.2016 - 01.04.2016, onda se novi kurs MasteringSQL moze poceti nakon 15.04.2016
- if (mostar.DodajKurs(softverski)) {
- cout << crt << "KURS USPJESNO REGISTROVAN" << crt;
- softverski.Ispis();
- cout << crt;
- }
- //nije moguce dodati prijavu onog kursa koji nije evidentiran (registrovan, ponudjen) u tom edukacijskom centru
- //moguce je dodati samo one prijave koje kod kojih ukupna uplata iznosi vise od 80% cijene kursa (za prijavljeni broj polaznika)
- if (mostar.DodajPrijavu(denisZaninDubravkaHtml)) {
- cout << crt << "PRIJAVA EVIDENTIRANA" << crt;
- denisZaninDubravkaHtml.Ispis();
- }
- if (mostar.DodajPrijavu(zaninIndiraHtml)) {
- cout << crt << "PRIJAVA EVIDENTIRANA" << crt;
- zaninIndiraHtml.Ispis();
- }
- int brojPolaznika = 0;
- //vraca niz polaznika koji nisu izmirili uplate
- Polaznik * polazniciDugovanja = mostar.PolazniciDugovanja(brojPolaznika);
- cout << "Pronadjeno " << brojPolaznika << " polaznika koji nisu kompletirali svoje uplate --->>> ";
- for (size_t i = 0; i < brojPolaznika; i++)
- polazniciDugovanja[i].Ispis();
- //PretragaRekurzivno - rekurzivna funkcija pronalazi najveci iznos duga ostvarenog u odredjenom edukacijskom centru
- //cout << "Najveci dug iznosi " << PretragaRekurzivno(/*potrebni parametri*/) << endl;
- //ispisuje sve informacije o edukacijskom centru. prije ispisa sortirati sve prijave po visini dugovanja njenih polaznika
- mostar.Ispis();
- //izvrsiti potrebne dealokacije
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement