Advertisement
adnanj

PR2 - W3 - Zadatak

Nov 1st, 2014
548
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.99 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. char *crtice = "\n====================================================\n";
  5.  
  6. class Clan {
  7.     const int _clanskiBroj;
  8.     char * _imePrezime;
  9.     char _telefon[20];
  10. public:
  11.     // Konstruktor
  12.     Clan(int clanskiBroj, char * imePrezime, char * telefon):  _clanskiBroj(clanskiBroj) {
  13.         int velicina = strlen(imePrezime) + 1;
  14.         _imePrezime = new char[velicina];
  15.         strcpy_s(_imePrezime, velicina, imePrezime);
  16.         strcpy_s(_telefon, 20, telefon);
  17.     }
  18.     // Destruktor
  19.     ~Clan() {
  20.         delete [] _imePrezime; _imePrezime = nullptr;
  21.     }
  22.     // Funkcije geteri klase Clan
  23.     int getClanskiBroj() { return _clanskiBroj; }
  24.     char * getImePrezime() { return _imePrezime; }
  25.     char * getTelefon() { return _telefon; }
  26.     // Ispis informacija o clanu
  27.     void Info() {
  28.         cout << "Clanski broj: " << _clanskiBroj <<endl;
  29.         cout << "Ime i prezime: " << _imePrezime << endl;
  30.         cout << "Telefon: " << _telefon << endl;
  31.     }
  32. }
  33. ;
  34. class Knjiga {
  35.     int& _ISBN; // Međunarodni standardni knjižni broj
  36.     char* _naslov;
  37.     char* _pisac;
  38.     char _zanr[30];
  39.     int* _godinaIzdanja;
  40.     Clan * _clan; // Podaci o članu kod kojeg se knjiga trenutno nalazi
  41.     int _brojDanaZauzetosti;
  42.     int _tempISBN; // dodato za potrebe korištenja reference _ISBN
  43. public:
  44.     // Defaultni konstruktor
  45.     Knjiga() : _tempISBN(-1), _ISBN(_tempISBN) {
  46.         int velicina = strlen("<Naslov nije unesen>") + 1;
  47.         _naslov = new char[velicina];
  48.         strcpy_s(_naslov, velicina, "<Naslov nije unesen>");
  49.         velicina = strlen("<Pisac nije unesen>") + 1;
  50.         _pisac = new char[velicina];
  51.         strcpy_s(_pisac, velicina, "<Pisac nije unesen>");
  52.         strcpy_s(_zanr, 30, "<Zanr nije unesen>");
  53.         _godinaIzdanja = new int(-1);
  54.         _brojDanaZauzetosti = 0;
  55.         _clan = nullptr;
  56.     }
  57.     //Knjiga je slobodna, _clan postavljen na NULL
  58.     Knjiga(int isbn, char* naslov, char* pisac, char* zanr, int godinaIzdanja): _tempISBN(isbn), _ISBN(_tempISBN) {
  59.         int velicina = strlen(naslov) + 1;
  60.         _naslov = new char[velicina];
  61.         strcpy_s(_naslov, velicina, naslov);
  62.         velicina = strlen(pisac) + 1;
  63.         _pisac = new char[velicina];
  64.         strcpy_s(_pisac, velicina, pisac);
  65.         strcpy_s(_zanr, 30, zanr);
  66.         _godinaIzdanja = new int(godinaIzdanja);
  67.         _clan = nullptr;
  68.         _brojDanaZauzetosti = 0;
  69.     }
  70.     ~Knjiga() {
  71.         delete [] _naslov; _naslov = nullptr;
  72.         delete [] _pisac; _pisac = nullptr;
  73.         delete _godinaIzdanja; _godinaIzdanja = nullptr;
  74.         if(_clan != nullptr) {
  75.            delete _clan; _clan = nullptr;
  76.         }
  77.     }
  78.     // Funkcije geteri klase Knjiga
  79.     int getISBN() const {return _ISBN;}
  80.     char * getNaslov() const {return _naslov;}
  81.     char * getPisac() const {return _pisac;}
  82.     char * getZanr() {return _zanr;}
  83.     int * getGodinuIzdanja() const {return _godinaIzdanja;}
  84.     Clan * getClan() {return _clan;}
  85.     int getBrojDanaZauzetosti() {return _brojDanaZauzetosti;}
  86.     // Korisnički definisana funkcija setKnjiga za postavljanje novih vrijednosti objekta klase Knjiga
  87.     void setKnjiga(Knjiga& knjiga) {
  88.         _ISBN = knjiga.getISBN();
  89.         int velicina = strlen(knjiga.getNaslov()) + 1;
  90.         delete [] _naslov;
  91.         _naslov = new char[velicina];
  92.         strcpy_s(_naslov, velicina, knjiga.getNaslov());
  93.         velicina = strlen(knjiga.getPisac()) + 1;
  94.         delete [] _pisac;
  95.         _pisac = new char[velicina];
  96.         strcpy_s(_pisac, velicina, knjiga.getPisac());
  97.         strcpy_s(_zanr, 30, knjiga.getZanr());
  98.         _clan = knjiga.getClan();
  99.         *_godinaIzdanja = * knjiga.getGodinuIzdanja();
  100.     }
  101.    
  102.     void ZaduziKnjigu(Clan& clan) {
  103.         if(_clan != nullptr)
  104.            return;
  105.         _clan = new Clan(clan.getClanskiBroj(), clan.getImePrezime(),  clan.getTelefon());
  106.         _brojDanaZauzetosti++;
  107.     }
  108.     void RazduziKnjigu() {
  109.         if(_clan == nullptr)
  110.            return;
  111.         delete _clan; _clan = nullptr;
  112.         _brojDanaZauzetosti = 0;
  113.     }
  114.     void UvecajBrojDanaZauzetosti() { _brojDanaZauzetosti++; }
  115.     //Funkcija ProvjeriZaduzenost vraća logičku vrijednost “true” ukoliko je knjiga zadužena, a “false” ukoliko nije.
  116.     bool ProvjeriZaduzenost() { return _brojDanaZauzetosti > 0; }
  117.     //Ispisuje na ekran podatke o evidencijskom broju, naslovu, imenu pisca, žanru i godini izdanja knjige.
  118.     void Info() {
  119.         cout << endl << "ISBN: " << _ISBN << endl;
  120.         cout << "Naslov: " <<  _naslov << endl;
  121.         cout << "Pisac: " << _pisac << endl;
  122.         cout << "Zanr: " << _zanr << endl;
  123.         cout << "Godina izdanja: " << * _godinaIzdanja << endl;
  124.         if(_clan != nullptr)
  125.             cout <<  "Clan: " << _clan->getImePrezime() << " (" << _clan->getClanskiBroj() << ")" << endl;
  126.     }
  127. }
  128. ;
  129. class Biblioteka {
  130.     char* _naziv;
  131.     int _maxBrojKnjiga;
  132.     int _trenutniBrojKnjiga;
  133.     Knjiga* _knjige;
  134. public:
  135.     //Konstruktor
  136.     Biblioteka(char naziv[], int * max) {
  137.         int velicina = strlen(naziv) + 1;
  138.         _naziv = new char[velicina];
  139.         strcpy_s(_naziv, velicina, naziv);
  140.         _maxBrojKnjiga = * max;
  141.         _trenutniBrojKnjiga = 0;
  142.         _knjige = new Knjiga[_maxBrojKnjiga];
  143.     }
  144.     //Destruktor
  145.     ~Biblioteka() {
  146.         delete [] _naziv; _naziv = nullptr;
  147.         delete [] _knjige; _knjige = nullptr;
  148.     }
  149.     // Funkcije geteri za klasu Biblioteka
  150.     char * getNaziv() { return _naziv;}
  151.     int getTrenutniBrojKnjiga() { return _trenutniBrojKnjiga; }
  152.     int getMaxBrojKnjiga() { return _maxBrojKnjiga; }
  153.     //Dodaje novu knjigu u kolekciju. Zabraniti dodavanje knjiga sa istim ISBN brojem,
  154.     //te ukoliko je potrebno proširiti niz.
  155.     bool DodajKnjigu(Knjiga& knjiga) {
  156.         for (int i = 0; i < _trenutniBrojKnjiga; i++)
  157.             if(_knjige[i].getISBN() == knjiga.getISBN())
  158.                return false;
  159.         if(_trenutniBrojKnjiga < _maxBrojKnjiga) {
  160.            _knjige[_trenutniBrojKnjiga].setKnjiga(knjiga);
  161.            _trenutniBrojKnjiga++;
  162.            return true;
  163.         } else {
  164.            _maxBrojKnjiga++;
  165.            Knjiga * tempNiz = new Knjiga[_maxBrojKnjiga];
  166.            for (int i = 0; i < _maxBrojKnjiga - 1; i++)
  167.             tempNiz[i].setKnjiga(_knjige[i]);
  168.            delete [] _knjige;
  169.            _knjige = tempNiz;
  170.            _knjige[_trenutniBrojKnjiga].setKnjiga(knjiga);
  171.            _trenutniBrojKnjiga++;
  172.            return true;
  173.         }
  174.     }
  175.     //Prije zaduživanja knjige provjeriti da li je zauzeta.
  176.     void ZaduziKnjigu(int isbn, Clan& clan) {
  177.         for (int i = 0; i < _trenutniBrojKnjiga; i++)
  178.              if(_knjige[i].getISBN() == isbn)
  179.             if(_knjige[i].ProvjeriZaduzenost())
  180.                return; else _knjige[i].ZaduziKnjigu(clan);
  181.     }
  182.     void RazduziKnjigu(int isbn) {
  183.         for (int i = 0; i < _trenutniBrojKnjiga; i++)
  184.              if(_knjige[i].getISBN() == isbn)
  185.             _knjige[i].RazduziKnjigu();
  186.     }
  187.     int GetClanskiBrojCitaoca(int isbn)const {
  188.         for (int i = 0; i < _trenutniBrojKnjiga; i++)
  189.              if(_knjige[i].getISBN() == isbn)
  190.             return _knjige[i].getClan()->getClanskiBroj();
  191.         return -1;
  192.     }
  193.     //Ispisuje podatke o svim slobodnim knjigama, svim zaduženim knjigama, i knjigama koje su na čitanju duže
  194.     //od n dana, pri čemu se n zadaje kao parametar
  195.     void IspisiPodatke(int n)const {
  196.         cout << crtice << "\t::SLOBODNE KNJIGE::" << crtice;
  197.         for (int i = 0; i < _trenutniBrojKnjiga; i++)
  198.              if(_knjige[i].ProvjeriZaduzenost() == false)
  199.             _knjige[i].Info();
  200.         cout << crtice << "\t::ZADUZENE KNJIGE::" << crtice;
  201.         for (int i = 0; i < _trenutniBrojKnjiga; i++)
  202.              if(_knjige[i].ProvjeriZaduzenost())
  203.             _knjige[i].Info();
  204.         cout << crtice << "\t::KNJIGE KOJE SU NA CITANJU DUZE OD " << n << " DANA::" << crtice;
  205.         for (int i = 0; i < _trenutniBrojKnjiga; i++)
  206.              if(_knjige[i].getBrojDanaZauzetosti() > n)
  207.                 _knjige[i].Info();
  208.     }
  209.     //Povećava broj dana zauzetosti svih zaduženih knjiga za jedinicu
  210.     void UvecajZauzetost() {
  211.         for (int i = 0; i < _trenutniBrojKnjiga; i++)
  212.              if(_knjige[i].ProvjeriZaduzenost())
  213.                 _knjige[i].UvecajBrojDanaZauzetosti();
  214.     }
  215.     //Povećava broj dana zauzetosti knjige sa datim ISBN brojem
  216.     void UvecajZauzetost(int isbn) {
  217.         for (int i = 0; i < _trenutniBrojKnjiga; i++)
  218.              if(_knjige[i].getISBN() == isbn)
  219.             _knjige[i].UvecajBrojDanaZauzetosti();
  220.     }
  221. }
  222. ;
  223. void main() {
  224.     int  maxKnjiga = 5;
  225.     Biblioteka b("FIT Biblioteka", &maxKnjiga);
  226.     cout << crtice << "Kreirana biblioteka '" << b.getNaziv() << "'..." << crtice;
  227.  
  228.     Knjiga knjigaPrva(1, "Zlocin i kazna", "Fjodor Dostojevski", "roman", 1866);
  229.     b.DodajKnjigu(knjigaPrva);
  230.     cout << "Dodata knjiga '" << knjigaPrva.getNaslov() << "' u biblioteku '" << b.getNaziv() <<"'..." << endl;
  231.  
  232.     Knjiga knjigaDruga(2, "Ana Karenjina", "Lav Tolstoj", "roman", 1878);
  233.     b.DodajKnjigu(knjigaDruga);
  234.     cout << "Dodata knjiga '" << knjigaDruga.getNaslov() << "' u biblioteku '" << b.getNaziv() <<"'..." << endl;
  235.  
  236.     Knjiga knjigaTreca(3, "Tvrdjava", "Mesa Selimovic", "roman", 1970);
  237.     b.DodajKnjigu(knjigaTreca);
  238.     cout << "Dodata knjiga '" << knjigaTreca.getNaslov() << "' u biblioteku '" << b.getNaziv() <<"'..." << endl;
  239.  
  240.     Knjiga knjigaCetvrta(4, "Sentimentalni odgoj", "Gustave Flaubert", "roman", 1869);
  241.     b.DodajKnjigu(knjigaCetvrta);
  242.     cout << "Dodata knjiga '" << knjigaCetvrta.getNaslov() << "' u biblioteku '" << b.getNaziv() <<"'..." << endl;
  243.  
  244.     Knjiga knjigaPeta(5, "Stepski vuk", "Hermann Hesse", "roman", 1927);
  245.     b.DodajKnjigu(knjigaPeta);
  246.     cout << "Dodata knjiga '" << knjigaPeta.getNaslov() << "' u biblioteku '" << b.getNaziv() <<"'..." << endl;
  247.  
  248.     cout << endl << "Trenutno je u biblioteci " << b.getTrenutniBrojKnjiga() << " knjiga od maksimalno " << b.getMaxBrojKnjiga()  << endl;
  249.     cout << "Dodajemo sestu knjigu da pokazemo automatizovano prosirenje niza." << endl;
  250.  
  251.     Knjiga knjigaSesta(6, "Hamlet", "William Shakespeare", "tragedija", 1602);
  252.     b.DodajKnjigu(knjigaSesta);
  253.     cout << endl << "Dodata knjiga '" << knjigaSesta.getNaslov() << "' u biblioteku '" << b.getNaziv() <<"'..." << endl;
  254.  
  255.     cout << endl << "Trenutno je u biblioteci " << b.getTrenutniBrojKnjiga() << " knjiga od maksimalno " << b.getMaxBrojKnjiga() << crtice;
  256.  
  257.     Clan clan(7, "J. Adnan", "387/XXX-XXX");
  258.     cout << "Dodat clan " << clan.getImePrezime() << " u biblioteku..." << endl;
  259.     b.ZaduziKnjigu(5, clan);
  260.     cout << "Clan " << clan.getImePrezime() << " zaduzuje knjigu " << knjigaPeta.getNaslov() << " na 4 dana..." << endl;
  261.     b.UvecajZauzetost();
  262.     b.UvecajZauzetost();
  263.     b.UvecajZauzetost();
  264.  
  265.     b.IspisiPodatke(3);
  266.  
  267.     cout << "Razduzujem knjigu '" << knjigaPeta.getNaslov() <<"' te ponovo ispisujemo..." << endl;
  268.     b.RazduziKnjigu(5);
  269.  
  270.     b.IspisiPodatke(3);
  271.  
  272.     system("pause>0");
  273. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement