Untitled
unknown
plain_text
3 years ago
12 kB
6
Indexable
//DATUM #pragma once #include <iostream> using namespace std; class Datum { private: int _dan; int _mjesec; int _godina; public: //Z1.1 Dflt. ctor [Postaviti na dflt. vrijednosti (1.1.2021)] Datum() { _dan = 1; _mjesec = 1; _godina = 2021; } //Z1.2 User-def. ctor Datum(int d, int m, int g) { _dan = d; _mjesec = m; _godina = g; } //Z1.3 int GetDan() const { return _dan; } int GetMjesec() const { return _mjesec; } int GetGodina() const { return _godina; } void SetDan(int dan) { _dan = dan; } void SetMjesec(int mjesec) { _mjesec = mjesec; } void SetGodina(int godina) { _godina = godina; } //Z1.4 void Ispis() { cout << _dan << "." << _mjesec << "." << _godina; } //Z1.5 ~Datum() { } }; //SALA #pragma once #include <iostream> #include "PomocneFunkcije.h" #include "Sjediste.h" using namespace std; class Sala { private: char* _naziv; int _brojRedova; //max.26 [A-Z] int _brojKolona; Sjediste** _sjedista; //2D matrica objekata tipa Sjediste. Dimenzije matrice su: (_brojRedova x _brojKolona) public: //Z2.7 Sala() { _naziv = nullptr; _brojRedova = 0; _brojKolona = 0; _sjedista = nullptr; } //Z2.8 //Uraditi dinamicku alokaciju 2D matrice sjedista pomocu pokazivaca na niz pokazivaca (_sjedista) //Podesiti vrijednosti atributa objekata matrice na sljedeci nacin --> //Polje [0][0] => _red : A, _kolona : 1 //Polje [0][1] => _red : A, _kolona : 2 //Polje [0][2] => _red : A, _kolona : 3 //... //Polje [1][0] => _red : B, _kolona : 1 //itd. Sala(const char* naziv, int brojRedova, int brojKolona) { _naziv = AlocirajIKopiraj(naziv); _brojRedova = brojRedova; _brojKolona = brojKolona; _sjedista = new Sjediste * [brojRedova]; for (int i = 0; i < brojRedova; i++) { _sjedista [i] = new Sjediste[brojKolona]; for (size_t j = 0; j < brojKolona; j++) { _sjedista[i][j].SetKolona(j + 1); _sjedista[i][j].SetRed((char)(i + 65)); } } } //Z2.9 void SetNaziv(const char* naziv) { if (_naziv != nullptr) delete[] _naziv; _naziv = AlocirajIKopiraj(naziv); } const char* GetNaziv() const { return _naziv; } int GetBrojRedova() const { return _brojRedova; } int GetBrojKolona() const { return _brojKolona; } //Z2.10 //Uraditi dealokaciju alocirane matrice sjedista, te zatim uraditi ponovnu alokaciju na osnovu novih dimenzija void SetSjedista(int brojRedova, int brojKolona) { //dealociranje niza objekata tipa Sjedista for (size_t i = 0; i < _brojRedova; i++) { delete[] _sjedista[i]; _sjedista[i] = nullptr; } //dealociranje niza pokazivaca delete[] _sjedista; _sjedista = nullptr; //Podesavanje atributa na nove vrijednosti _brojRedova = brojRedova; _brojKolona = brojKolona; //Ponovna alokacija //alokacija niza pokazivaca //alokacija niza objekata za i-ti pokazivac u nizu _sjedista = new Sjediste * [brojRedova]; for (int i = 0; i < brojRedova; i++) { _sjedista[i] = new Sjediste[brojKolona]; for (size_t j = 0; j < brojKolona; j++) { _sjedista[i][j].SetKolona(j + 1); _sjedista[i][j].SetRed((char)(i + 65)); } } } //Z2.11 //Vratiti adresu objekta sjediste, koje odgovara proslijedjenim vrijednostima //Ukoliko nije pronadjeno, vratiti nullptr Sjediste* GetSjediste(char red, int kolona) { for (int i = 0; i < _brojRedova; i++) { _sjedista[i] = new Sjediste[_brojKolona]; for (size_t j = 0; j < _brojKolona; j++) { if (_sjedista[i][j].GetRed() == red && _sjedista[i][j].GetKolona() == kolona) return &_sjedista[i][j]; } } return nullptr; } //Z2.12 //Uraditi ispis na sljedeci nacin ---> //Sala: Sala 7 Extreme //Redova: 11 //Kolona: 20 // ----------------------------- // [A-1] [A-2] [A-3] .... [A-20] // [B-1] [B-2] [B-3] .... [B-20] // . // . // . // [K-1] [K-2] [K-3] .... [K-20] // ----------------------------- void Ispis() { cout << "Sala: " << _naziv << endl; cout << "Redova: " << _brojRedova << endl; cout << "Kolona: " << _brojKolona << endl; cout << "-----------------------------" << endl; for (size_t i = 0; i < _brojRedova; i++) { for(int j=0; j<_brojKolona; j++) { _sjedista[i][j].Ispis(); cout << " "; } cout << endl; } cout << "-----------------------------" << endl; } //Z2.13 ~Sala() { delete _naziv; _naziv = nullptr; for (size_t i = 0; i < _brojRedova; i++) { delete[] _sjedista[i]; _sjedista[i] = nullptr; } delete[] _sjedista; _sjedista = nullptr; } }; //SJEDISTE #pragma once #include <iostream> #include "PomocneFunkcije.h" using namespace std; class Sjediste { private: char* _sjedisteId; // Koristiti GetRandomString funkciju prilikom inicijalizacije [neka je duzina stringa 10] char _red; //A-Z int _kolona; //1,2,3,..., 100 public: //Z2.1 //Dflt. ctor //Postaviti red na ' ' a kolonu na 0 Sjediste() { _sjedisteId = GetRandomString(10); _red = ' '; _kolona = 0; } //Z2.2 //User-def. ctor Sjediste(char red, int kolona) { _sjedisteId = GetRandomString(10); _red = red; _kolona = kolona; } //Z2.3 char GetRed() const { return _red; } int GetKolona() const { return _kolona; } //Z2.4 void SetRed(char red) { _red = red; } void SetKolona(int kolona) { _kolona = kolona; } //Z2.5 //Ispisati sjediste u formatu: "[A-13]" void Ispis() { cout << "[" << _red << "-" << _kolona << "]"; } //Z2.6 ~Sjediste() { delete[] _sjedisteId; _sjedisteId = nullptr; } }; //RADNIK #pragma once #include <iostream> #include "PomocneFunkcije.h" #include "Datum.h" using namespace std; class Radnik { private: char* _ime; char* _prezime; Datum* _datumRodjenja; bool* _spol; char _radnoMjesto[100]; char* _grad; char _email[100]; public: //Z3.1 Radnik() { _ime = nullptr; _prezime = nullptr; _datumRodjenja = nullptr; _spol = nullptr; strcpy_s(_radnoMjesto, 100, "nema radnog mjesta"); _grad = nullptr; strcpy_s(_email, 100, "nema e adrese"); } //Z3.2 Radnik(const char* ime, const char* prezime, Datum datum, bool spol, const char* radnoM, const char* grad, const char* email) { _ime = AlocirajIKopiraj(ime); _prezime = AlocirajIKopiraj(prezime); _datumRodjenja = new Datum (datum.GetDan(), datum.GetMjesec(), datum.GetGodina()); _spol = new bool(spol); strcpy_s(_radnoMjesto, 100,radnoM); _grad = AlocirajIKopiraj(grad); strcpy_s(_email, 100, email); } //Z3.3 char* GetIme() const { return _ime; } char* GetPrezime() const { return _prezime; } Datum GetDatumRodjenja() const { return *_datumRodjenja; } bool GetSpol() const { return *_spol; } const char* GetRadnoMjesto() const { return _radnoMjesto; } char* GetGrad() const { return _grad; } const char* GetEmail() const { return _email; } //Z3.4 void SetIme(const char* ime) { _ime = AlocirajIKopiraj(ime); } void SetPrezime(const char* prezime) { _prezime = AlocirajIKopiraj(prezime); } void SetDatumRodjenja(Datum datum) { _datumRodjenja = new Datum(datum.GetDan(), datum.GetMjesec(), datum.GetGodina()); } void SetSpol(bool spol) { _spol = new bool(spol); } void SetRadnoMjesto(const char* radnoMjesto) { strcpy_s(_radnoMjesto, 100, radnoMjesto); } void SetGrad(const char* grad) { _grad = AlocirajIKopiraj(grad); } void SetEmail(const char* email) { strcpy_s(_email, 100, email); } //Z3.5 void Ispis() { cout << "Ime: " << _ime << endl; cout << "Prezime: " << _prezime << endl; cout << "Datum Ridjenja: " << _datumRodjenja << endl; cout << "Spol: " << _spol << endl; cout << "Radno mjesto: " << _radnoMjesto << endl; cout << "Grad: " << _grad << endl; cout << "Email: " << _email << endl; } //Z3.6 ~Radnik() { delete[] _ime; _ime = nullptr; delete[] _prezime; _prezime = nullptr; delete[] _datumRodjenja; _datumRodjenja = nullptr; delete[] _spol; _spol = nullptr; delete[] _grad; _grad = nullptr; } }; //BIOSKOP #pragma once #include <iostream> #include "PomocneFunkcije.h" #include "Sala.h" #include "Radnik.h" using namespace std; class Bioskop { private: char* _naziv; char _adresa[100]; int* _maxBrojDvorana; // pokazivac na varijablu (obezbijediti da sadrzi vrijednost velicine niza) int _trenutnoDvorana; //brojac objekata u dinamickom nizu (pocinje od 0) Sala* _dvorane; // pokazivac na niz objekata int _trenutnoUposlenika; //brojac Radnik* _uposlenici[50] = { nullptr }; // niz pokazivaca na objekte tipa Radnik public: //Z4.1 Bioskop(const char* naziv, const char* adresa, int maxBrojDvorana) { _naziv = AlocirajIKopiraj(naziv); strcpy_s(_adresa, 100, adresa); _maxBrojDvorana = new int; *_maxBrojDvorana = maxBrojDvorana; _trenutnoDvorana = 0; _dvorane = new Sala[*_maxBrojDvorana]; _trenutnoUposlenika = 0; } //Z4.3 void SetNaziv(const char* naziv) { delete[] _naziv; _naziv = AlocirajIKopiraj(naziv); } //Z4.4 char* GetNaziv() const { return _naziv; } const char* GetAdresa() const { return _adresa; } int GetMaxBrojDvorana() const { return *_maxBrojDvorana; } int GetTrenutnoDvorana() const { return _trenutnoDvorana; } //Z4.5 bool DodajDvoranu(Sala& dvorana) { if (_trenutnoDvorana == *_maxBrojDvorana) return false; _dvorane[_trenutnoDvorana].SetNaziv(dvorana.GetNaziv()); _dvorane[_trenutnoDvorana].SetSjedista(dvorana.GetBrojRedova(), dvorana.GetBrojKolona()); _trenutnoDvorana++; return true; } //Z4.6 bool DodajUposlenika(Radnik& uposlenik) { if (_trenutnoUposlenika == 50) return false; const char* ime = uposlenik.GetIme(); const char* prezime = uposlenik.GetPrezime(); Datum datum = uposlenik.GetDatumRodjenja(); bool spol = uposlenik.GetSpol(); const char* radnoMjesto = uposlenik.GetRadnoMjesto(); const char* grad = uposlenik.GetGrad(); const char* email = uposlenik.GetEmail(); _uposlenici[_trenutnoUposlenika] = new Radnik(ime, prezime, datum, spol, radnoMjesto, grad, email); _trenutnoUposlenika++; return true; } //Z4.7 //Ispisati naziv kina, adresu, nazive dvorana, te imena i prezimena uposlenika void Ispis() { cout << "Naziv: " << _naziv << endl; cout << "Adresa: " << _adresa << endl; cout << "*******************DVORANE**********************\n"; for (int i = 0; i < _trenutnoDvorana; i++) cout << _dvorane[i].GetNaziv() << endl; cout << "*******************UPOSLENICI*******************\n"; for (int i = 0; i < _trenutnoUposlenika; i++) cout << _uposlenici[i]->GetIme() << " " << _uposlenici[i]->GetPrezime() << endl; } //Z4.8 ~Bioskop() { delete[] _naziv; _naziv = nullptr; delete _maxBrojDvorana; _maxBrojDvorana = nullptr; delete[] _dvorane; _dvorane = nullptr; for (int i = 0; i < _trenutnoUposlenika; i++) { delete _uposlenici[i]; //Poziva se dtor za objekat na kojeg pokazuje pokazivac '_uposlenici[i]' _uposlenici[i] = nullptr; } } };
Editor is loading...