Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- using namespace std;
- typedef char tekst[30];
- struct Datum {
- int *_dan, *_mjesec, *_godina;
- bool neispravanDatum() {
- int brDana[] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
- if (*_godina % 4 == 0 && *_godina % 100 != 0 && *_godina % 400 == 0)
- brDana[1]++;
- if (*_godina < 1 ||*_mjesec < 1 || *_mjesec > 12 || *_dan < 1 || *_dan > brDana[*_mjesec-1])
- return false;
- else return true;
- }
- void unosDatuma() {
- _dan = new int(0);
- _mjesec = new int(0);
- _godina = new int(0);
- do {
- cout << "Unesite datum (dd/mm/gggg) : ";
- cin >> *_dan >> *_mjesec >> *_godina;
- cin.ignore();
- } while (neispravanDatum() == false);
- }
- void ispisDatuma() {
- cout << "Datum : " << *_dan << "/" << *_mjesec << "/" << *_godina << endl;
- }
- void dealloc() {
- delete _dan;
- _dan = nullptr;
- delete _mjesec;
- _mjesec = nullptr;
- delete _godina;
- _godina = nullptr;
- }
- };
- struct PolozeniPredmeti {
- char * _naziv;
- Datum _datumPolaganja;
- int _ocjena;
- char * _nastavnik;
- void unosPredmeta() {
- tekst naziv, nastavnik;
- cout << "Unesite naziv Polozenog Predmeta : ";
- cin.getline(naziv, 29);
- _naziv = new char[strlen(naziv)+1];
- strcpy_s(_naziv, strlen(naziv)+1, naziv);
- _datumPolaganja.unosDatuma();
- cout << "Unesite ocjenu za Predmet : ";
- cin >> _ocjena;
- cin.ignore();
- cout << "Unesite Ime i Prezime Nastavnika : ";
- cin.getline(nastavnik, 29);
- _nastavnik = new char[strlen(nastavnik)+1];
- strcpy_s(_nastavnik, strlen(nastavnik)+1, nastavnik);
- }
- void ispisPredmeta() {
- cout << "Naziv Predmeta : " << _naziv << endl;
- _datumPolaganja.ispisDatuma();
- cout << "Ocjena : " << _ocjena << endl;
- cout << "Nastavnik : " << _nastavnik << endl;
- }
- void dealloc() {
- delete[] _naziv;
- _naziv = nullptr;
- delete[] _nastavnik;
- _nastavnik = nullptr;
- _datumPolaganja.dealloc();
- }
- };
- struct Student {
- int _indeks;
- char * _imePrezime;
- Datum _datumRodjenja;
- PolozeniPredmeti * _predmeti;
- int _brojPolozenih;
- void unosStudenta() {
- tekst ime;
- cout << "Unesite Ime i Prezime Studenta : ";
- cin.getline(ime, 29);
- _imePrezime = new char[strlen(ime)+1];
- strcpy_s(_imePrezime, strlen(ime)+1, ime);
- cout << "Unesite broj indexa Studenta : ";
- cin >> _indeks;
- cin.ignore();
- _datumRodjenja.unosDatuma();
- _predmeti = new PolozeniPredmeti[10];
- _brojPolozenih = 0;
- }
- void ispis() {
- cout << "Ime i Prezime Studenta : " << _imePrezime << endl;
- cout << "Broj Indeksa : " << _indeks << endl;
- _datumRodjenja.ispisDatuma();
- cout << "Broj Polozenih Predmeta : " << _brojPolozenih << endl;
- }
- void dealloc() {
- delete[] _imePrezime;
- _imePrezime = nullptr;
- for (int i = 0; i < _brojPolozenih; i++)
- _predmeti[i].dealloc();
- delete[] _predmeti;
- _predmeti = nullptr;
- }
- void DodajPolozeni() {
- _predmeti[_brojPolozenih++].unosPredmeta();
- if (_brojPolozenih == 10)
- cout << "Student je polozio sve predmete !" << endl;
- }
- void GetPredmetiUPeriod() {
- bool pronadjen = false;
- int dan1, dan2, mjesec1, mjesec2, godina1, godina2;
- int brDana[] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
- do {
- cout << "Unesite pocetni datum : ";
- cin >> dan1 >> mjesec1 >> godina1;
- cin.ignore();
- cout << "Unesite krajnji datum : ";
- cin >> dan2 >> mjesec2 >> godina2;
- cin.ignore();
- } while (godina2 < godina1 || (godina2 == godina1 && mjesec2 < mjesec1) || (godina2==godina1 && mjesec2 == mjesec1 && dan2 < dan1));
- cout << endl;
- if (godina1 % 4 == 0 && godina1 % 100 != 0 && godina1 % 400 == 0)
- brDana[1]++;
- do {
- if (dan1 == brDana[mjesec1-1]) {
- mjesec1++;
- dan1 = 1;
- }
- if (mjesec1 == 13) {
- dan1 = 1;
- mjesec1 = 1;
- godina1++;
- if (godina1 % 4 == 0 && godina1 % 100 != 0 && godina1 % 400 == 0)
- brDana[1] = 29;
- else
- brDana[1] = 28;
- }
- if (godina1 == godina2 && mjesec1 == mjesec2 && dan1 == dan2)
- pronadjen = true;
- for (int i = 0; i < _brojPolozenih; i++)
- if (*_predmeti[i]._datumPolaganja._godina == godina1 && *_predmeti[i]._datumPolaganja._mjesec == mjesec1 && *_predmeti[i]._datumPolaganja._dan == dan1) {
- _predmeti[i].ispisPredmeta();
- cout << endl;
- }
- dan1++;
- } while (pronadjen == false);
- }
- void sortNaziv() {
- int brojac; // kontrolna prolaza
- for (int e = 0; e < _brojPolozenih; e++) {
- brojac = 0;
- for (int i = 1; i < _brojPolozenih; i++) {
- for (int j = 0; j < strlen(_predmeti[i]._naziv) + 1; j++) {
- if (_predmeti[i]._naziv[j] < _predmeti[i - 1]._naziv[j]) {
- brojac++;
- swap(_predmeti[i], _predmeti[i - 1]);
- j = strlen(_predmeti[i]._naziv) + 1;
- } else if (_predmeti[i]._naziv[j] > _predmeti[i - 1]._naziv[j])
- j = strlen(_predmeti[i]._naziv) + 1;
- }
- }
- if (brojac == 0) // ako nakon prolaza kroz niz nije doslo do zamjene mjesta - zavrsi petlju
- e = _brojPolozenih;
- }
- }
- PolozeniPredmeti *BinarnaPretraga(char *naziv) {
- int prvi = 0, zadnji = _brojPolozenih, srednji = 0;
- bool pronadjen = false;
- while (pronadjen == false && prvi <= zadnji) {
- srednji = (prvi + zadnji) / 2;
- if (strcmp(naziv, _predmeti[srednji]._naziv) < 0)
- zadnji = srednji - 1;
- else if (strcmp(naziv, _predmeti[srednji]._naziv) == 0)
- pronadjen = true;
- else if (strcmp(naziv, _predmeti[srednji]._naziv) > 0)
- prvi = srednji + 1;
- }
- if (pronadjen)
- return &_predmeti[srednji];
- else return nullptr;
- }
- };
- void main() {
- Student *pokemon = new Student;
- char znak;
- pokemon->unosStudenta();
- system("cls");
- do {
- do {
- cout << "Da li zelite dodati Polozeni Predmet ? [D/N] : ";
- cin >> znak;
- znak = toupper(znak);
- cin.ignore();
- } while (znak != 'D' && znak != 'N');
- if (znak == 'D') pokemon->DodajPolozeni();
- } while (znak == 'D' && pokemon->_brojPolozenih < 10);
- system("pause>0");
- system("cls");
- pokemon->GetPredmetiUPeriod();
- cout << "\n";
- pokemon->ispis();
- cout << "\n";
- pokemon->sortNaziv();
- cout << "..:: SORT ::... \n\n";
- for (int i = 0; i < pokemon->_brojPolozenih; i++) {
- pokemon->_predmeti[i].ispisPredmeta();
- cout << endl;
- }
- tekst pretraga;
- cout << "\nUnesite naziv predmeta koji pretrazujete : ";
- cin.getline(pretraga, 29);
- if (pokemon->BinarnaPretraga(pretraga) == nullptr)
- cout << "\nGreska! Ne postoji slican predmet u Bazi podataka!" << endl;
- else {
- cout << "\nPredmet pronadjen!\n\n";
- pokemon->BinarnaPretraga(pretraga)->ispisPredmeta();
- }
- pokemon->dealloc();
- delete pokemon;
- pokemon = nullptr;
- system("pause>0");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement