Untitled
unknown
plain_text
4 years ago
12 kB
8
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...