Untitled

mail@pastecode.io avatar
unknown
plain_text
2 years ago
12 kB
5
Indexable
Never
//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;
        }
    }
};