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 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; }
- 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;
- else return false;
- }
- void Dealociraj() { delete _dan; delete _mjesec; delete _godina; }
- };
- struct Kurs {
- enumKursevi _kurs;
- Datum * _pocetak;
- Datum * _kraj;
- char * _imePredavaca;
- float _cijenaKursa;
- bool _aktivan; //svaki kurs na pocetku je aktivan
- 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 << kurseviChar[ _kurs] << " " << _imePredavaca << " " << _cijenaKursa << " (";
- _pocetak->Ispis(); cout << " - "; _kraj->Ispis(); cout << ")";
- }
- 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;
- delete _datumRodjenja; _datumRodjenja = nullptr;
- }
- void Ispis() { cout << _imePrezime << "("; _datumRodjenja->Ispis(); cout << ")"; }
- };
- struct Prijava {
- Polaznik * _polaznik; //prijava moze biti pojedinacna ili grupna
- float * _uplaceniIznos;
- /*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
- void Dealociraj()
- {
- _polaznik->Dealociraj();
- delete[] _polaznik; _polaznik = nullptr;
- delete[] _uplaceniIznos; _uplaceniIznos = nullptr;
- _kurs->Dealociraj();
- delete[] _kurs; _kurs = nullptr;
- }
- void provjera()
- {
- for (int i = 0; i < _trenutnoPolaznika; i++)
- {
- if (_trenutnoPolaznika <= 1) //manje od jednog ili jedan polaznik
- {
- *_uplaceniIznos=_kurs[i]._cijenaKursa;
- }
- else if (_trenutnoPolaznika > 1 && _trenutnoPolaznika <= 3)
- {
- float popust10Posto = 0;
- _kurs[i]._cijenaKursa = (_kurs[i]._cijenaKursa*0.1) / _trenutnoPolaznika;
- *_uplaceniIznos = _kurs[i]._cijenaKursa;
- }
- else if (_trenutnoPolaznika > 3)
- {
- float popust15Posto = 0;
- _kurs[i]._cijenaKursa = (_kurs[i]._cijenaKursa*0.15) / _trenutnoPolaznika;
- *_uplaceniIznos = _kurs[i]._cijenaKursa;
- }
- }
- }
- bool DodajPolaznika(Polaznik polaznik, int uplata)
- {
- //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(430)->int uplata
- if (_trenutnoPolaznika == 0)//nema niti jednog polaznika, dodaj polaznika
- {
- _polaznik = new Polaznik;
- _polaznik->Unos(polaznik._imePrezime, *polaznik._datumRodjenja);
- _trenutnoPolaznika++;
- return true;
- }
- if (_trenutnoPolaznika > 0)
- {
- for (int i = 0; i < _trenutnoPolaznika; i++)
- {
- if (strcmp(_polaznik[i]._imePrezime, polaznik._imePrezime) == 0) //isti polaznik
- return false;
- if (uplata < (_kurs[i]._cijenaKursa/2))//uplaceni iznos veci od 50%
- return false;
- }
- 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++;
- return true;
- }
- }
- bool DodajUplatu(Polaznik polaznik, int novaUplata)
- {
- //polaznik mora biti prethodno dodan prijavi da bi mogao dodati novu uplatu
- for (int i = 0; i < _trenutnoPolaznika; i++)
- {
- if (strcmp(_polaznik[i]._imePrezime, polaznik._imePrezime)==0 && _polaznik[i]._datumRodjenja==polaznik._datumRodjenja)
- {
- _uplaceniIznos = _uplaceniIznos + novaUplata;
- return true;
- }
- }
- return false;
- }
- void Ispis()
- {
- _polaznik->Ispis();
- _kurs->Ispis();
- cout << "Uplaceni iznos: " << _uplaceniIznos << endl;
- }
- float StatusUplate(Polaznik polaznik)
- {
- //ako polaznik duguje novca funkcija vraca negativan iznos potrebne uplate
- float dug = 0;
- if (_kurs->_cijenaKursa < *_uplaceniIznos)
- {
- dug = _kurs->_cijenaKursa - *_uplaceniIznos;
- }
- return dug;
- }
- void Unos(Kurs * kurs)
- {
- //prijava treba cuvati adresu (pokazivati) na postojeci kurs, a ne kreirati novi
- _kurs = kurs;
- _uplaceniIznos = new float;
- *_uplaceniIznos = 0;
- _trenutnoPolaznika = 0;
- }
- };
- struct SkillsCentar {
- char * _nazivCentra;
- Kurs * _kursevi[50];//JEDAN EDUKACIJSKI CENTAR MOZE NUDITI NAJVISE 50 KURSEVA
- int _trenutnoKurseva;
- Prijava * _prijave;
- int _trenutnoPrijava;
- bool DodajKurs(Kurs kurs)
- {
- //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 (_trenutnoKurseva>50)
- return false;
- for (int i = 0; i < _trenutnoKurseva; i++)
- {
- if (_kursevi[i]->_kraj->provjera15Dana(*kurs._pocetak) == false)
- return false;
- }
- _kursevi[_trenutnoKurseva] = new Kurs;
- _kursevi[_trenutnoKurseva]->Unos(kurs._kurs, *kurs._pocetak, *kurs._kraj, kurs._imePredavaca, kurs._cijenaKursa);
- _trenutnoKurseva++;
- return true;
- }
- bool DodajPrijavu(Prijava prijava) //dodati prijavu s
- {
- //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)
- return false;
- }
- void Ispis()
- {
- cout <<"Naziv centra: "<< _nazivCentra << endl;
- for (int i = 0; i < _trenutnoKurseva; i++)
- {
- _kursevi[i]->Ispis();
- }
- for (int i = 0; i < _trenutnoPrijava; i++)
- {
- _prijave[i].Ispis();
- }
- }
- Polaznik * PolazniciDugovanja(int brojpolaznika)
- {
- //vraca niz polaznika koji nisu izmirili uplate
- for (int i=0; i <_trenutnoPrijava; i++)
- {
- if (*_prijave[i]._uplaceniIznos < _kursevi[i]->_cijenaKursa)
- brojpolaznika++;
- }
- Polaznik * niz = new Polaznik[brojpolaznika + 1];
- for (int i = 0; i < brojpolaznika; i++)
- {
- niz[i].Unos(_prijave[i]._polaznik->_imePrezime, *_prijave[i]._polaznik->_datumRodjenja);
- }
- return niz;
- }
- void Unos(char * nazivCentra)
- {
- int size = strlen(nazivCentra) + 1;
- _nazivCentra = new char[size];
- strcpy_s(_nazivCentra, size, nazivCentra);
- _trenutnoKurseva = 0;
- _trenutnoPrijava = 0;
- }
- };
- //PretragaRekurzivno - rekurzivna funkcija pronalazi najveci iznos duga ostvarenog u odredjenom edukacijskom centru
- float PretragaRekurzivno(SkillsCentar edukacijskiCentar,Kurs kurs,int trenutnoKurseva ,Prijava prijava,int dug)
- {
- float suma = 0;
- /*if (dug == kurs._cijenaKursa)
- {
- return dug;
- }
- else
- {
- if ()
- {
- dug++;
- suma += prijava[dug]._uplaceniIznos;
- }
- PretragaRekurzivno(edukacijskiCentar, kurs, trenutnoKurseva-1,dug);
- }*/
- return suma;
- }
- 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!" <<denis._imePrezime<< endl;
- if (denisZaninDubravkaHtml.DodajPolaznika(zanin, 650))
- cout << "Polaznik uspjesno dodan!" << zanin._imePrezime << endl;
- if (denisZaninDubravkaHtml.DodajPolaznika(zanin, 650))//onemoguciti dupliranje polaznika na istoj prijavi
- cout << "Polaznik uspjesno dodan!" << zanin._imePrezime << endl;
- if (denisZaninDubravkaHtml.DodajPolaznika(dubravka, 430))//uplata ne zadovoljava kriterije
- cout << "Polaznik uspjesno dodan!" << dubravka._imePrezime << endl;
- if (denisZaninDubravkaHtml.DodajUplatu(zanin, 200))//polaznik mora biti prethodno dodan prijavi da bi mogao dodati novu uplatu
- cout << "Uplata uspjesno dodana" << endl;
- zaninIndiraHtml.Unos(&html);
- if (zaninIndiraHtml.DodajPolaznika(zanin, 800))
- cout << "Polaznik uspjesno dodan!" << zanin._imePrezime << endl;
- if (zaninIndiraHtml.DodajPolaznika(indira, 750))
- cout << "Polaznik uspjesno dodan!" << indira._imePrezime << endl;
- 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(mostar,softverski,0,denisZaninDubravkaHtml,0 ) << 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