Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- char *crtice = "\n====================================================\n";
- class Clan {
- const int _clanskiBroj;
- char * _imePrezime;
- char _telefon[20];
- public:
- // Konstruktor
- Clan(int clanskiBroj, char * imePrezime, char * telefon): _clanskiBroj(clanskiBroj) {
- int velicina = strlen(imePrezime) + 1;
- _imePrezime = new char[velicina];
- strcpy_s(_imePrezime, velicina, imePrezime);
- strcpy_s(_telefon, 20, telefon);
- }
- // Destruktor
- ~Clan() {
- delete [] _imePrezime; _imePrezime = nullptr;
- }
- // Funkcije geteri klase Clan
- int getClanskiBroj() { return _clanskiBroj; }
- char * getImePrezime() { return _imePrezime; }
- char * getTelefon() { return _telefon; }
- // Ispis informacija o clanu
- void Info() {
- cout << "Clanski broj: " << _clanskiBroj <<endl;
- cout << "Ime i prezime: " << _imePrezime << endl;
- cout << "Telefon: " << _telefon << endl;
- }
- }
- ;
- class Knjiga {
- int& _ISBN; // Međunarodni standardni knjižni broj
- char* _naslov;
- char* _pisac;
- char _zanr[30];
- int* _godinaIzdanja;
- Clan * _clan; // Podaci o članu kod kojeg se knjiga trenutno nalazi
- int _brojDanaZauzetosti;
- int _tempISBN; // dodato za potrebe korištenja reference _ISBN
- public:
- // Defaultni konstruktor
- Knjiga() : _tempISBN(-1), _ISBN(_tempISBN) {
- int velicina = strlen("<Naslov nije unesen>") + 1;
- _naslov = new char[velicina];
- strcpy_s(_naslov, velicina, "<Naslov nije unesen>");
- velicina = strlen("<Pisac nije unesen>") + 1;
- _pisac = new char[velicina];
- strcpy_s(_pisac, velicina, "<Pisac nije unesen>");
- strcpy_s(_zanr, 30, "<Zanr nije unesen>");
- _godinaIzdanja = new int(-1);
- _brojDanaZauzetosti = 0;
- _clan = nullptr;
- }
- //Knjiga je slobodna, _clan postavljen na NULL
- Knjiga(int isbn, char* naslov, char* pisac, char* zanr, int godinaIzdanja): _tempISBN(isbn), _ISBN(_tempISBN) {
- int velicina = strlen(naslov) + 1;
- _naslov = new char[velicina];
- strcpy_s(_naslov, velicina, naslov);
- velicina = strlen(pisac) + 1;
- _pisac = new char[velicina];
- strcpy_s(_pisac, velicina, pisac);
- strcpy_s(_zanr, 30, zanr);
- _godinaIzdanja = new int(godinaIzdanja);
- _clan = nullptr;
- _brojDanaZauzetosti = 0;
- }
- ~Knjiga() {
- delete [] _naslov; _naslov = nullptr;
- delete [] _pisac; _pisac = nullptr;
- delete _godinaIzdanja; _godinaIzdanja = nullptr;
- if(_clan != nullptr) {
- delete _clan; _clan = nullptr;
- }
- }
- // Funkcije geteri klase Knjiga
- int getISBN() const {return _ISBN;}
- char * getNaslov() const {return _naslov;}
- char * getPisac() const {return _pisac;}
- char * getZanr() {return _zanr;}
- int * getGodinuIzdanja() const {return _godinaIzdanja;}
- Clan * getClan() {return _clan;}
- int getBrojDanaZauzetosti() {return _brojDanaZauzetosti;}
- // Korisnički definisana funkcija setKnjiga za postavljanje novih vrijednosti objekta klase Knjiga
- void setKnjiga(Knjiga& knjiga) {
- _ISBN = knjiga.getISBN();
- int velicina = strlen(knjiga.getNaslov()) + 1;
- delete [] _naslov;
- _naslov = new char[velicina];
- strcpy_s(_naslov, velicina, knjiga.getNaslov());
- velicina = strlen(knjiga.getPisac()) + 1;
- delete [] _pisac;
- _pisac = new char[velicina];
- strcpy_s(_pisac, velicina, knjiga.getPisac());
- strcpy_s(_zanr, 30, knjiga.getZanr());
- _clan = knjiga.getClan();
- *_godinaIzdanja = * knjiga.getGodinuIzdanja();
- }
- void ZaduziKnjigu(Clan& clan) {
- if(_clan != nullptr)
- return;
- _clan = new Clan(clan.getClanskiBroj(), clan.getImePrezime(), clan.getTelefon());
- _brojDanaZauzetosti++;
- }
- void RazduziKnjigu() {
- if(_clan == nullptr)
- return;
- delete _clan; _clan = nullptr;
- _brojDanaZauzetosti = 0;
- }
- void UvecajBrojDanaZauzetosti() { _brojDanaZauzetosti++; }
- //Funkcija ProvjeriZaduzenost vraća logičku vrijednost “true” ukoliko je knjiga zadužena, a “false” ukoliko nije.
- bool ProvjeriZaduzenost() { return _brojDanaZauzetosti > 0; }
- //Ispisuje na ekran podatke o evidencijskom broju, naslovu, imenu pisca, žanru i godini izdanja knjige.
- void Info() {
- cout << endl << "ISBN: " << _ISBN << endl;
- cout << "Naslov: " << _naslov << endl;
- cout << "Pisac: " << _pisac << endl;
- cout << "Zanr: " << _zanr << endl;
- cout << "Godina izdanja: " << * _godinaIzdanja << endl;
- if(_clan != nullptr)
- cout << "Clan: " << _clan->getImePrezime() << " (" << _clan->getClanskiBroj() << ")" << endl;
- }
- }
- ;
- class Biblioteka {
- char* _naziv;
- int _maxBrojKnjiga;
- int _trenutniBrojKnjiga;
- Knjiga* _knjige;
- public:
- //Konstruktor
- Biblioteka(char naziv[], int * max) {
- int velicina = strlen(naziv) + 1;
- _naziv = new char[velicina];
- strcpy_s(_naziv, velicina, naziv);
- _maxBrojKnjiga = * max;
- _trenutniBrojKnjiga = 0;
- _knjige = new Knjiga[_maxBrojKnjiga];
- }
- //Destruktor
- ~Biblioteka() {
- delete [] _naziv; _naziv = nullptr;
- delete [] _knjige; _knjige = nullptr;
- }
- // Funkcije geteri za klasu Biblioteka
- char * getNaziv() { return _naziv;}
- int getTrenutniBrojKnjiga() { return _trenutniBrojKnjiga; }
- int getMaxBrojKnjiga() { return _maxBrojKnjiga; }
- //Dodaje novu knjigu u kolekciju. Zabraniti dodavanje knjiga sa istim ISBN brojem,
- //te ukoliko je potrebno proširiti niz.
- bool DodajKnjigu(Knjiga& knjiga) {
- for (int i = 0; i < _trenutniBrojKnjiga; i++)
- if(_knjige[i].getISBN() == knjiga.getISBN())
- return false;
- if(_trenutniBrojKnjiga < _maxBrojKnjiga) {
- _knjige[_trenutniBrojKnjiga].setKnjiga(knjiga);
- _trenutniBrojKnjiga++;
- return true;
- } else {
- _maxBrojKnjiga++;
- Knjiga * tempNiz = new Knjiga[_maxBrojKnjiga];
- for (int i = 0; i < _maxBrojKnjiga - 1; i++)
- tempNiz[i].setKnjiga(_knjige[i]);
- delete [] _knjige;
- _knjige = tempNiz;
- _knjige[_trenutniBrojKnjiga].setKnjiga(knjiga);
- _trenutniBrojKnjiga++;
- return true;
- }
- }
- //Prije zaduživanja knjige provjeriti da li je zauzeta.
- void ZaduziKnjigu(int isbn, Clan& clan) {
- for (int i = 0; i < _trenutniBrojKnjiga; i++)
- if(_knjige[i].getISBN() == isbn)
- if(_knjige[i].ProvjeriZaduzenost())
- return; else _knjige[i].ZaduziKnjigu(clan);
- }
- void RazduziKnjigu(int isbn) {
- for (int i = 0; i < _trenutniBrojKnjiga; i++)
- if(_knjige[i].getISBN() == isbn)
- _knjige[i].RazduziKnjigu();
- }
- int GetClanskiBrojCitaoca(int isbn)const {
- for (int i = 0; i < _trenutniBrojKnjiga; i++)
- if(_knjige[i].getISBN() == isbn)
- return _knjige[i].getClan()->getClanskiBroj();
- return -1;
- }
- //Ispisuje podatke o svim slobodnim knjigama, svim zaduženim knjigama, i knjigama koje su na čitanju duže
- //od n dana, pri čemu se n zadaje kao parametar
- void IspisiPodatke(int n)const {
- cout << crtice << "\t::SLOBODNE KNJIGE::" << crtice;
- for (int i = 0; i < _trenutniBrojKnjiga; i++)
- if(_knjige[i].ProvjeriZaduzenost() == false)
- _knjige[i].Info();
- cout << crtice << "\t::ZADUZENE KNJIGE::" << crtice;
- for (int i = 0; i < _trenutniBrojKnjiga; i++)
- if(_knjige[i].ProvjeriZaduzenost())
- _knjige[i].Info();
- cout << crtice << "\t::KNJIGE KOJE SU NA CITANJU DUZE OD " << n << " DANA::" << crtice;
- for (int i = 0; i < _trenutniBrojKnjiga; i++)
- if(_knjige[i].getBrojDanaZauzetosti() > n)
- _knjige[i].Info();
- }
- //Povećava broj dana zauzetosti svih zaduženih knjiga za jedinicu
- void UvecajZauzetost() {
- for (int i = 0; i < _trenutniBrojKnjiga; i++)
- if(_knjige[i].ProvjeriZaduzenost())
- _knjige[i].UvecajBrojDanaZauzetosti();
- }
- //Povećava broj dana zauzetosti knjige sa datim ISBN brojem
- void UvecajZauzetost(int isbn) {
- for (int i = 0; i < _trenutniBrojKnjiga; i++)
- if(_knjige[i].getISBN() == isbn)
- _knjige[i].UvecajBrojDanaZauzetosti();
- }
- }
- ;
- void main() {
- int maxKnjiga = 5;
- Biblioteka b("FIT Biblioteka", &maxKnjiga);
- cout << crtice << "Kreirana biblioteka '" << b.getNaziv() << "'..." << crtice;
- Knjiga knjigaPrva(1, "Zlocin i kazna", "Fjodor Dostojevski", "roman", 1866);
- b.DodajKnjigu(knjigaPrva);
- cout << "Dodata knjiga '" << knjigaPrva.getNaslov() << "' u biblioteku '" << b.getNaziv() <<"'..." << endl;
- Knjiga knjigaDruga(2, "Ana Karenjina", "Lav Tolstoj", "roman", 1878);
- b.DodajKnjigu(knjigaDruga);
- cout << "Dodata knjiga '" << knjigaDruga.getNaslov() << "' u biblioteku '" << b.getNaziv() <<"'..." << endl;
- Knjiga knjigaTreca(3, "Tvrdjava", "Mesa Selimovic", "roman", 1970);
- b.DodajKnjigu(knjigaTreca);
- cout << "Dodata knjiga '" << knjigaTreca.getNaslov() << "' u biblioteku '" << b.getNaziv() <<"'..." << endl;
- Knjiga knjigaCetvrta(4, "Sentimentalni odgoj", "Gustave Flaubert", "roman", 1869);
- b.DodajKnjigu(knjigaCetvrta);
- cout << "Dodata knjiga '" << knjigaCetvrta.getNaslov() << "' u biblioteku '" << b.getNaziv() <<"'..." << endl;
- Knjiga knjigaPeta(5, "Stepski vuk", "Hermann Hesse", "roman", 1927);
- b.DodajKnjigu(knjigaPeta);
- cout << "Dodata knjiga '" << knjigaPeta.getNaslov() << "' u biblioteku '" << b.getNaziv() <<"'..." << endl;
- cout << endl << "Trenutno je u biblioteci " << b.getTrenutniBrojKnjiga() << " knjiga od maksimalno " << b.getMaxBrojKnjiga() << endl;
- cout << "Dodajemo sestu knjigu da pokazemo automatizovano prosirenje niza." << endl;
- Knjiga knjigaSesta(6, "Hamlet", "William Shakespeare", "tragedija", 1602);
- b.DodajKnjigu(knjigaSesta);
- cout << endl << "Dodata knjiga '" << knjigaSesta.getNaslov() << "' u biblioteku '" << b.getNaziv() <<"'..." << endl;
- cout << endl << "Trenutno je u biblioteci " << b.getTrenutniBrojKnjiga() << " knjiga od maksimalno " << b.getMaxBrojKnjiga() << crtice;
- Clan clan(7, "J. Adnan", "387/XXX-XXX");
- cout << "Dodat clan " << clan.getImePrezime() << " u biblioteku..." << endl;
- b.ZaduziKnjigu(5, clan);
- cout << "Clan " << clan.getImePrezime() << " zaduzuje knjigu " << knjigaPeta.getNaslov() << " na 4 dana..." << endl;
- b.UvecajZauzetost();
- b.UvecajZauzetost();
- b.UvecajZauzetost();
- b.IspisiPodatke(3);
- cout << "Razduzujem knjigu '" << knjigaPeta.getNaslov() <<"' te ponovo ispisujemo..." << endl;
- b.RazduziKnjigu(5);
- b.IspisiPodatke(3);
- system("pause>0");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement