Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <memory>
- using namespace std;
- #pragma warning(disable:4996)
- char *crt = "\n-------------------------------------------\n";
- enum eNacinStudiranja { REDOVAN, DL };
- enum eClass { PRVI = 1, DRUGI, TRECI, CETVRTI };
- struct DatumVrijeme {
- int *_dan, *_mjesec, *_godina, *_sati, *_minuti;
- void Unos(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);
- }
- void Deallocate() {
- delete _dan; _dan = nullptr;
- delete _mjesec; _mjesec = nullptr;
- delete _godina; _godina = nullptr;
- delete _sati; _sati = nullptr;
- delete _minuti; _minuti = nullptr;
- }
- void Output() {
- cout << *_dan << "." << *_mjesec << "." << *_godina << " " << *_sati << ":" << *_minuti << endl;
- }
- void GetDatumKaoNizKaraktera()
- {
- cout << *_dan << "." << *_mjesec << "." << *_godina << " " << *_sati << ":" << *_minuti << endl;
- }
- bool VeciOdIliJednak(DatumVrijeme d) {
- if (_godina > d._godina)
- return true;
- if (_godina == d._godina) {
- if (_mjesec > d._mjesec)
- return true;
- if (_mjesec == d._mjesec && _dan >= d._dan)
- return true;
- }
- return false;
- }
- };
- const DatumVrijeme rokZaPrijavu = { new int(5), new int(7), new int(2017), new int(12), new int(30) };
- struct Subject {
- char* _name;
- int _mark;
- DatumVrijeme* _datumUnosa;
- void Unos(char * name, int ocjena, DatumVrijeme datumUnosa) {
- int vel = strlen(name) + 1;
- _name = new char[vel];
- strcpy_s(_name, vel, name);
- _mark = ocjena;
- _datumUnosa = new DatumVrijeme;
- _datumUnosa->Unos(*datumUnosa._dan, *datumUnosa._mjesec, *datumUnosa._godina, *datumUnosa._sati, *datumUnosa._minuti);
- }
- void Deallocate() {
- delete[] _name; _name = nullptr;
- _datumUnosa->Deallocate(); delete _datumUnosa;
- }
- void Output() {
- cout << _name << " (" << _mark << ") ";
- _datumUnosa->GetDatumKaoNizKaraktera();
- }
- };
- struct Success {
- eClass _Class;
- Subject* subjects;
- int counterSubjects;
- void Unos(eClass Class) {
- _Class = Class;
- subjects = nullptr;
- counterSubjects = 0;
- }
- void Deallocate() {
- for (int i = 0; i < counterSubjects; i++)
- subjects[i].Deallocate();
- delete[] subjects; subjects = nullptr;
- }
- void Output() {
- cout << crt << "Class -> " << _Class << crt;
- for (int i = 0; i < counterSubjects; i++)
- subjects[i].Output();
- }
- bool DodajSubject(Subject p) {
- Subject* temp = new Subject[counterSubjects + 1];
- for (int i = 0; i < counterSubjects; i++)
- {
- temp[i].Unos(subjects[i]._name, subjects[i]._mark, *subjects[i]._datumUnosa);
- subjects[i].Deallocate();
- }
- temp[counterSubjects].Unos(p._name, p._mark, *p._datumUnosa);
- delete[] subjects;
- subjects = temp;
- counterSubjects++;
- return true;
- }
- };
- struct Candidate {
- eNacinStudiranja _nacinStudiranja;
- char* _imePrezime;
- shared_ptr<Success> _Success[4];
- void Unos(eNacinStudiranja nacinStudiranja, char* imePrezime) {
- int vel = strlen(imePrezime) + 1;
- _imePrezime = new char[vel];
- strcpy_s(_imePrezime, vel, imePrezime);
- _nacinStudiranja = nacinStudiranja;
- for (size_t i = 0; i < 4; i++)
- _Success[i] = nullptr;
- }
- void Deallocate() {
- delete[] _imePrezime; _imePrezime = nullptr;
- for (size_t i = 0; i < 4; i++)
- _Success[i]->Deallocate();
- }
- void Output() {
- cout << crt << _imePrezime << " " << _nacinStudiranja;
- for (size_t i = 0; i < 4; i++)
- _Success[i]->Output();
- }
- bool DodajSubject(eClass e, Subject p)
- {
- int position = e - 1;
- if (_Success[position] == nullptr)
- {
- _Success[position] = make_shared<Success>();
- _Success[position]->Unos(e);
- //_Success[position]->DodajSubject(p);
- }
- int counter = 0;
- for (int i = 0; i < 4; i++)
- {
- if (_Success[i] == nullptr)
- continue;
- for (int j = 0; j < _Success[i]->counterSubjects; j++)
- {
- if (strcmp(_Success[i]->subjects[j]._name, p._name) == 0)
- counter++;
- }
- }
- if (counter >= 2)
- cout << crt;
- else {
- _Success[position]->DodajSubject(p);
- return true;
- }
- return false;
- }
- };
- int main()
- {
- DatumVrijeme datum19062017_1015, datum20062017_1115, datum30062017_1215, datum05072017_1231;
- datum19062017_1015.Unos(19, 6, 2017, 10, 15);
- datum20062017_1115.Unos(20, 6, 2017, 11, 15);
- datum30062017_1215.Unos(30, 6, 2017, 12, 15);
- datum05072017_1231.Unos(5, 7, 2017, 12, 31);
- datum19062017_1015.GetDatumKaoNizKaraktera();//9.6.2017 10:15
- Subject Matematika, Fizika, Hemija, Engleski;
- //2 - ocjena na Subjectu; datum - datum evidentiranja Successa na Subjectu jer postoji krajnji rok za evidentiranje
- Matematika.Unos("Matematika", 2, datum19062017_1015);
- Fizika.Unos("Fizika", 5, datum20062017_1115);
- Hemija.Unos("Hemija", 2, datum20062017_1115);
- Engleski.Unos("Engleski", 5, datum05072017_1231);
- int counterCandidate = 2;
- Candidate * student = new Candidate[counterCandidate];
- student[0].Unos(DL, "Jasmin Azemovic");
- student[1].Unos(REDOVAN, "Indira Hamulic");
- /*
- Success (tokom srednjoskolskog obrazovanja) se dodaje za svaki Subject na nivou Classa.
- prilikom dodavanja onemoguciti:
- - dodavanje Subjecta za Classe koji nisu definisani enumeracijom,
- - dodavanje istoimenih Subjecta na nivou jednog Classa,
- - dodavanje Subjecta nakon dozvoljenog roka za prijavu (rokZaPrijavu).
- Classi (Subjecti ili Success) ne moraju biti dodavani sortiranim redoslijedom (npr. prvo se moze dodati Success za II Class, pa onda za I Class i sl.). Funkcija vraca true ili false u zavisnosti od (ne)uspjesnost izvrsenja
- */
- if (student[0].DodajSubject(DRUGI, Engleski))//ne bi trebao dodati jer je prosao postavljeni rok za dodavanje Subjecta
- cout << "Subject uspjesno dodan!" << crt;
- if (student[0].DodajSubject(DRUGI, Matematika))
- cout << "Subject uspjesno dodan!" << crt;
- if (student[0].DodajSubject(PRVI, Fizika))
- cout << "Subject uspjesno dodan!" << crt;
- if (student[0].DodajSubject(PRVI, Hemija))
- cout << "Subject uspjesno dodan!" << crt;
- Matematika._mark = 5;
- Hemija._mark = 3;
- if (student[1].DodajSubject(PRVI, Matematika))
- cout << "Subject uspjesno dodan!" << crt;
- if (student[1].DodajSubject(PRVI, Matematika))//ne bi trebalo ponovo dodati Matematiku!
- cout << "Subject uspjesno dodan!" << crt;
- if (student[1].DodajSubject(TRECI, Hemija))
- cout << "Subject uspjesno dodan!" << crt;
- if (student[1].DodajSubject(DRUGI, Engleski))
- cout << "Subject uspjesno dodan!" << crt;
- cout << endl << "Candidate sa najvecim prosjekom u drugom Classu: ";
- for (int i = 0; i < counterCandidate; i++)
- {
- student[i].Output();
- student[i].Deallocate();
- }
- delete[] student;
- student = nullptr;
- system("pause>0");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement