Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- #pragma warning(disable:4996)
- const char *crt = "\n-------------------------------------------\n";
- enum eRazred { PRVI = 1, DRUGI, TRECI, CETVRTI };
- const char* razred[] = { "Prvi", "Drugi", "Treci", "Cetvrti" };
- const float minimalan_prosjek = 4.5;
- char * AlocirajNizKaraktera(const char * sadrzaj) {
- if (sadrzaj == nullptr)
- return nullptr;
- int vel = strlen(sadrzaj) + 1;
- char * temp = new char[vel];
- strcpy_s(temp, vel, sadrzaj);
- return temp;
- }
- template<class T1, class T2>
- class Kolekcija {
- T1 * _elementi1;
- T2 * _elementi2;
- int _trenutno;
- public:
- Kolekcija() {
- _elementi1 = nullptr;
- _elementi2 = nullptr;
- _trenutno = 0;
- }
- Kolekcija(Kolekcija &temp) {
- _trenutno = temp._trenutno;
- _elementi1 = new T1[_trenutno];
- _elementi2 = new T2[_trenutno];
- for (int i = 0; i < _trenutno; i++) {
- _elementi1[i] = temp._elementi1[i];
- _elementi2[i] = temp._elementi2[i];
- }
- }
- Kolekcija& operator=(Kolekcija &temp) {
- if (this != &temp) {
- _trenutno = temp._trenutno;
- if (_elementi1 != nullptr) delete[] _elementi1;
- if (_elementi2 != nullptr) delete[] _elementi2;
- _elementi1 = new T1[_trenutno];
- _elementi2 = new T2[_trenutno];
- for (int i = 0; i < _trenutno; i++) {
- _elementi1[i] = temp._elementi1[i];
- _elementi2[i] = temp._elementi2[i];
- }
- }
- return *this;
- }
- ~Kolekcija() {
- delete[]_elementi1; _elementi1 = nullptr;
- delete[]_elementi2; _elementi2 = nullptr;
- }
- void AddElement(T1 first, T2 second) {
- T1 *tempElementi1 = new T1[_trenutno + 1];
- T2 *tempElementi2 = new T2[_trenutno + 1];
- for (int i = 0; i < _trenutno; i++) {
- tempElementi1[i] = _elementi1[i];
- tempElementi2[i] = _elementi2[i];
- }
- tempElementi1[_trenutno] = first;
- tempElementi2[_trenutno] = second;
- _trenutno++;
- delete[] _elementi1;
- delete[] _elementi2;
- _elementi1 = tempElementi1;
- _elementi2 = tempElementi2;
- }
- void SortOpadajuciByT2() {
- for (int i = 0; i < _trenutno - 1; i++) {
- int minIndex = i;
- for (int j = i + 1; j < _trenutno; j++)
- if (_elementi2[minIndex] < _elementi2[j])
- minIndex = j;
- if (minIndex != i) {
- T1 temp = _elementi1[minIndex];
- _elementi1[minIndex] = _elementi1[i];
- _elementi1[i] = temp;
- T2 temp2 = _elementi2[minIndex];
- _elementi2[minIndex] = _elementi2[i];
- _elementi2[i] = temp2;
- }
- }
- }
- T1& getElement1(int lokacija) { return _elementi1[lokacija]; }
- T2& getElement2(int lokacija) { return _elementi2[lokacija]; }
- int getTrenutno() { return _trenutno; }
- friend ostream& operator<< (ostream &COUT, Kolekcija &obj) {
- for (size_t i = 0; i < obj._trenutno; i++)
- COUT << obj.getElement1(i) << " " << obj.getElement2(i) << endl;
- return COUT;
- }
- };
- class DatumVrijeme {
- int *_dan, *_mjesec, *_godina, *_sati, *_minuti;
- public:
- DatumVrijeme(int dan = 1, int mjesec = 1, int godina = 2000, int sati = 0, int minuti = 0) {
- _dan = new int(dan);
- _mjesec = new int(mjesec);
- _godina = new int(godina);
- _sati = new int(sati);
- _minuti = new int(minuti);
- }
- DatumVrijeme(DatumVrijeme &temp) {
- cout << "ulaz u konst kopije za datum" << endl;
- _dan = new int(*temp._dan);
- cout << "dan" << endl;
- _mjesec = new int(*temp._mjesec);
- cout << "mjesec" << endl;
- _godina = new int(*temp._godina);
- cout << "godina" << endl;
- _sati = new int(*temp._sati);
- cout << "sati" << endl;
- _minuti = new int(*temp._minuti);
- cout << "minuti" << endl;
- cout << "KonstruktorKopijeDatum" << endl;
- }
- DatumVrijeme& operator=(DatumVrijeme &temp) {
- if (this != &temp) {
- *_dan = *temp._dan;
- *_mjesec = *temp._mjesec;
- *_godina = *temp._godina;
- *_sati = *temp._sati;
- *_minuti = *temp._minuti;
- }
- return *this;
- }
- ~DatumVrijeme() {
- cout << "datum pocetak" << endl;
- delete _dan; _dan = nullptr;
- delete _mjesec; _mjesec = nullptr;
- delete _godina; _godina = nullptr;
- delete _sati; _sati = nullptr;
- delete _minuti; _minuti = nullptr;
- cout << "datum kraj" << endl;
- }
- friend ostream& operator<< (ostream &COUT, DatumVrijeme &obj) {
- COUT << *obj._dan << "." << *obj._mjesec << "." << *obj._godina << " " << *obj._sati << ":" << *obj._minuti << endl;
- return COUT;
- }
- };
- class Predmet {
- char * _naziv;
- int _ocjena;
- char* _napomena;
- public:
- Predmet(const char * naziv, int ocjena, const char* napomena = "") :_ocjena(ocjena) {
- _naziv = AlocirajNizKaraktera(naziv);
- _napomena = AlocirajNizKaraktera(napomena);
- }
- Predmet(Predmet &temp) : _ocjena(temp._ocjena) {
- _naziv = new char(strlen(temp._naziv) + 1);
- strcpy(_naziv, temp._naziv);
- _napomena = new char(strlen(temp._napomena) + 1);
- strcpy(_napomena, temp._napomena);
- cout << "KonstruktorKopijePredmet" << endl;
- }
- Predmet& operator=(Predmet &temp) {
- if (this != &temp) {
- delete[] _naziv;
- delete[] _napomena;
- _naziv = new char(strlen(temp._naziv) + 1);
- strcpy(_naziv, temp._naziv);
- _napomena = new char(strlen(temp._napomena) + 1);
- strcpy(_napomena, temp._napomena);
- _ocjena = temp._ocjena;
- }
- return *this;
- }
- ~Predmet() {
- delete[] _naziv; _naziv = nullptr;
- if (_napomena != nullptr) delete[] _napomena;
- }
- friend ostream& operator<< (ostream &COUT, Predmet &obj) {
- COUT << obj._naziv << " (" << obj._ocjena << ") " << obj._napomena << endl;
- return COUT;
- }
- char * GetNaziv() { return _naziv; }
- char* GetNapomena() { return _napomena; }
- friend bool operator==(Predmet &first, Predmet& second) { //testiraj da li su dva predmeta jednaka po nazivu
- return !(strcmp(first.GetNaziv(), second.GetNaziv()));
- }
- //Format napomena: napomena1; napomena2; napomena3;
- void DodajNapomenu(const char* napomena) {
- char *novaNapomena = new char[strlen(_napomena) + strlen(napomena) + 3];
- strcpy(novaNapomena, _napomena);
- strcat(novaNapomena, napomena);
- strcat(novaNapomena, "; ");
- delete[] _napomena;
- _napomena = novaNapomena;
- }
- };
- struct Uspjeh {
- eRazred _razred;
- //datumvrijeme se odnosi na vrijeme evidentiranja polozenog predmeta
- Kolekcija<Predmet*, DatumVrijeme> * _predmeti;
- public:
- Uspjeh() : _predmeti(new Kolekcija<Predmet*, DatumVrijeme>) {};
- Uspjeh(eRazred razred) :_razred(razred), _predmeti(new Kolekcija<Predmet*, DatumVrijeme>()) {}
- Uspjeh(Uspjeh &temp) : _razred(temp._razred), _predmeti(nullptr) {
- if (temp._predmeti != nullptr) {
- _predmeti = new Kolekcija<Predmet*, DatumVrijeme>();
- for (int i = 0; i < temp._predmeti->getTrenutno(); i++)
- _predmeti->AddElement(new Predmet(*temp._predmeti->getElement1(i)), temp._predmeti->getElement2(i));
- }
- }
- Uspjeh& operator=(Uspjeh &temp) {
- if (this != &temp) {
- if(_predmeti != nullptr)
- for (int i = 0; i < _predmeti->getTrenutno(); i++)
- delete _predmeti->getElement1(i);
- _razred = temp._razred;
- if (temp._predmeti != nullptr) {
- if (_predmeti == nullptr)
- _predmeti = new Kolekcija<Predmet*, DatumVrijeme>;
- for (int i = 0; i < temp._predmeti->getTrenutno(); i++)
- _predmeti->AddElement(new Predmet(*temp._predmeti->getElement1(i)), temp._predmeti->getElement2(i));
- }
- }
- return *this;
- }
- ~Uspjeh() {
- for (size_t i = 0; i < _predmeti->getTrenutno(); i++)
- delete _predmeti->getElement1(i);
- delete _predmeti; _predmeti = nullptr;
- }
- void DodajPredmet(Predmet &tempPredmet, DatumVrijeme &tempDatumVrijeme) {
- cout << "DodajPredmet" << endl;
- _predmeti->AddElement(new Predmet(tempPredmet), tempDatumVrijeme);
- }
- eRazred GetRazred() { return _razred; }
- Kolekcija<Predmet*, DatumVrijeme> * GetPredmeti() { return _predmeti; }
- friend ostream& operator<< (ostream &COUT, const Uspjeh &obj) {
- COUT << razred[obj._razred - 1] << *obj._predmeti << endl;
- return COUT;
- }
- };
- class Kandidat {
- char * _imePrezime;
- char* _brojTelefona;
- int _trenutno;
- Uspjeh * _uspjeh;
- public:
- Kandidat(char * imePrezime, char* brojTelefona) :_trenutno(0), _uspjeh(nullptr) {
- _imePrezime = AlocirajNizKaraktera(imePrezime);
- _brojTelefona = AlocirajNizKaraktera(brojTelefona);
- }
- Kandidat(const char * imePrezime, const char* brojTelefona) :_trenutno(0), _uspjeh(nullptr) {
- _imePrezime = AlocirajNizKaraktera(imePrezime);
- _brojTelefona = AlocirajNizKaraktera(brojTelefona);
- }
- Kandidat(Kandidat &temp) : _trenutno(temp._trenutno) {
- _imePrezime = AlocirajNizKaraktera(temp._imePrezime);
- _brojTelefona = AlocirajNizKaraktera(temp._brojTelefona);
- _uspjeh = new Uspjeh[temp._trenutno];
- for (int i = 0; i < temp._trenutno; i++)
- _uspjeh[i] = temp._uspjeh[i];
- }
- Kandidat& operator=(Kandidat &temp) {
- delete[] _imePrezime;
- delete[] _brojTelefona;
- delete[] _uspjeh;
- _trenutno = temp._trenutno;
- _uspjeh = new Uspjeh[_trenutno];
- for (size_t i = 0; i < _trenutno; i++)
- _uspjeh[i] = temp._uspjeh[i];
- return *this;
- }
- void DodajUspjeh(eRazred tempRazred) {
- bool postojiRazred = false;
- for (size_t i = 0; i < _trenutno; i++)
- if (_uspjeh[i].GetRazred() == tempRazred)
- postojiRazred = true;
- if (!postojiRazred) {
- Uspjeh *tempUspjeh = new Uspjeh[_trenutno + 1];
- for (int i = 0; i < _trenutno; i++)
- tempUspjeh[i] = _uspjeh[i];
- Uspjeh noviUspjeh(tempRazred);
- tempUspjeh[_trenutno] = noviUspjeh;
- _trenutno++;
- delete[] _uspjeh;
- _uspjeh = tempUspjeh;
- }
- }
- bool AddPredmet(eRazred tempRazred, Predmet &noviPredmet, DatumVrijeme &tempDatum) {
- DodajUspjeh(tempRazred);
- int index = (-1);
- for (int i = 0; i < _trenutno; i++)
- if (_uspjeh[i].GetRazred() == tempRazred)
- index = i;
- /*
- if (_uspjeh[index].GetPredmeti()->getTrenutno() == 6) return false; //vise od 6 ne moze
- if(_uspjeh[index].GetPredmeti() != nullptr)
- for (int i = 0; i < _uspjeh[index].GetPredmeti()->getTrenutno(); i++) {//prodi kroz svaki predmet
- Predmet *trenutniPredmet = _uspjeh[index].GetPredmeti()->getElement1(i);
- if (*trenutniPredmet == noviPredmet) return false;
- }
- */
- _uspjeh[index].DodajPredmet(noviPredmet, tempDatum);
- return true;
- }
- ~Kandidat() {
- delete[] _imePrezime; _imePrezime = nullptr;
- delete[] _uspjeh;
- }
- friend ostream& operator<< (ostream &COUT, Kandidat &obj) {
- COUT << obj._imePrezime << " " << obj._brojTelefona << endl;
- for (size_t i = 0; i < obj._trenutno; i++)
- COUT << obj._uspjeh[i] << endl;
- return COUT;
- }
- Uspjeh * GetUspjeh() { return _uspjeh; }
- };
- void main() {
- /****************************************************************************
- 1. SVE KLASE TREBAJU POSJEDOVATI ADEKVATAN DESTRUKTOR
- 2. NAMJERNO IZOSTAVLJANJE KOMPLETNIH I/ILI POJEDINIH DIJELOVA DESTRUKTORA KOJI UZROKUJU RUNTIME ERROR CE BITI OZNACENO KAO "RE"
- 3. SPAŠAVAJTE PROJEKAT KAKO BI SE SPRIJECILO GUBLJENJE URAÐENOG ZADATKA
- 4. PROGRAMSKI CODE SE TAKOÐER NALAZI U FAJLU CODE.TXT
- 5. NAZIVI FUNKCIJA, TE BROJ I TIP PARAMETARA MORAJU BITI IDENTICNI ONIMA KOJI SU KORIŠTENI U TESTNOM CODE-U, OSIM U SLUCAJU DA POSTOJI ADEKVATAN RAZLOG ZA NJIHOVU MODIFIKACIJU. OSTALE, POMOCNE FUNKCIJE MOŽETE IMENOVATI I DODAVATI PO ŽELJI.
- 6. IZUZETAK BACITE U FUNKCIJAMA U KOJIMA JE TO NAZNACENO.
- ****************************************************************************/
- DatumVrijeme temp,
- datum19062018_1015(19, 6, 2018, 10, 15),
- datum20062018_1115(20, 6, 2018, 11, 15),
- datum30062018_1215(30, 6, 2018, 12, 15),
- datum05072018_1231(5, 7, 2018, 12, 31),
- datum20062018_1115_Copy(datum20062018_1115);
- cout << datum20062018_1115;
- //const int kolekcijaTestSize = 10;
- //Kolekcija<int, int> kolekcija1;
- //for (size_t i = 0; i < kolekcijaTestSize; i++)
- // kolekcija1.AddElement(i + 1, i * i);
- //cout << kolekcija1 << endl;
- //Kolekcija<int, int> kolekcija2 = kolekcija1;
- //cout << kolekcija2 << crt;
- //Kolekcija<int, int> kolekcija3;
- //kolekcija3 = kolekcija1;
- //kolekcija3.SortOpadajuciByT2(); //od najvece prema najmanjoj vrijednosti
- //cout << kolekcija3 << crt;
- ////napomena se moze dodati i prilikom kreiranja objekta
- Predmet Matematika("Matematika", 5, "Ucesce na takmicenju"), Fizika("Fizika", 5), Hemija("Hemija", 2), Engleski("Engleski", 5);
- Fizika.DodajNapomenu("Pohvala za ostvareni uspjeh"); // dodaje novu napomenu
- Fizika.DodajNapomenu("Pohvala za uspjeh na takmicenju!");
- cout << Fizika << endl;
- cout << Matematika << endl;
- Kandidat jasmin("Jasmin Azemovic", "033 281 172");
- Kandidat adel("Adel Handzic", "033 281 170");
- cout << "proslo 1" << endl;
- /*
- uspjeh (tokom srednjoskolskog obrazovanja) se dodaje za svaki predmet na nivou razreda.
- tom prilikom onemoguciti:
- - dodavanje vise od 6 predmeta za jedan razred
- - dodavanje istoimenih predmeta na nivou jednog razreda,
- razredi (predmeti ili uspjeh) ne moraju biti dodavani sortiranim redoslijedom (npr. prvo se moze dodati uspjeh za II
- razred, pa onda za I razred i sl.). Funkcija vraca true ili false u zavisnosti od (ne)uspjesnost izvrsenja
- */
- if (jasmin.AddPredmet(DRUGI, Fizika, datum20062018_1115))
- cout << "Predmet uspjesno dodan!" << crt;
- else
- cout << "Fizika nije uspjesno dodana!" << endl;
- /*if (jasmin.AddPredmet(DRUGI, Hemija, datum30062018_1215))
- cout << "Predmet uspjesno dodan!" << crt;
- else
- cout << "predmet nije uspjesno dodan" << endl;*/
- //cout << "vani" << endl;
- //cout << "proslo 2" << endl;
- //
- //
- //if (jasmin.AddPredmet(PRVI, Engleski, datum19062018_1015))
- // cout << "Predmet uspjesno dodan!" << crt;
- //cout << "proslo 3" << endl;
- //if (jasmin.AddPredmet(PRVI, Matematika, datum20062018_1115))
- // cout << "Predmet uspjesno dodan!" << crt;
- //cout << "proslo 4" << endl;
- ////ne treba dodati Matematiku jer je vec dodana u prvom razredu
- //if (jasmin.AddPredmet(PRVI, Matematika, datum05072018_1231))
- // cout << "Predmet uspjesno dodan!" << crt;
- //cout << "proslo 5" << endl;
- //if (jasmin.AddPredmet(PRVI, Fizika, datum20062018_1115_Copy))
- // cout << "Predmet uspjesno dodan!" << crt;
- //
- //cout << "proslo 6" << endl;
- //
- ///*pretpostavka je da na nivou jednog razreda kandidati imaju 6 predmeta.
- //upravo zbog toga, nakon evidentiranja 6 predmeta na nivou jednog razreda kandidatu se evidentira uspjeh za odredjeni razred
- //*/
- ///*
- //Uspjeh * u = jasmin(PRVI);//vraca uspjeh kandidata ostvaren u prvom razredu
- //if (u != nullptr)
- // cout << *u << endl;
- //*/
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement