Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- using namespace std;
- class Clan
- {
- const int _clanskiBroj;
- char*_imePrezime;
- char _telefon[20];
- public:
- 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);
- }
- ~Clan(){
- delete[] _imePrezime;
- _imePrezime = NULL;
- }
- void info(){
- cout << "Ime prezime:" << _imePrezime << endl;
- cout << "Clanski broj: " << _clanskiBroj << endl;
- cout << "Telefon: " << _telefon << endl;
- }
- int GetClanskiBroj()const{ return _clanskiBroj; }
- char *GetImePrezime()const{ return _imePrezime; }
- char *GetTelefon(){ return _telefon; }
- };
- class Knjiga
- {
- int& _ISBN;
- char* _naslov;
- char* _pisac;
- char _zanr[30];
- int* _godinaIzdanja;
- Clan* _clan; //Podaci o članu kod kojeg se knjiga trenutno nalazi
- int _brojDanaZauzetosti;
- int _tempISBN;//dodano naknadno
- public:
- Knjiga() :_tempISBN(-1), _ISBN(_tempISBN)
- {
- _naslov = NULL;
- _pisac = NULL;
- for (int i = 0; i < 30; i++){
- _zanr[i] = NULL;
- }
- _godinaIzdanja = NULL;
- _clan = NULL;
- _brojDanaZauzetosti = 0;
- _tempISBN = -1;
- }
- //Knjiga je slobodna, _clan postaviti na NULL
- Knjiga(int isbn, char* naslov, char* pisac, char* zanr, int godinaIzdanja):_tempISBN(isbn), _ISBN(_tempISBN), _naslov(naslov), _pisac(pisac){
- _godinaIzdanja = new int(godinaIzdanja);
- _clan = NULL;
- _brojDanaZauzetosti = 0;
- strcpy_s(_zanr, 30, zanr);
- _naslov = new char[strlen(naslov) + 1];
- strcpy_s(_naslov, strlen(naslov) + 1, naslov);
- _pisac = new char[strlen(pisac) + 1];
- strcpy_s(_pisac, strlen(pisac) + 1, pisac);
- }
- ~Knjiga(){
- delete[] _naslov;
- _naslov = NULL;
- delete[] _pisac;
- _pisac = NULL;
- _godinaIzdanja = NULL;
- if (_clan != NULL)
- delete _clan;
- }
- void ZaduziKnjigu(Clan& clan){
- if (_clan != NULL)
- _clan->~Clan();
- _clan = new Clan(clan.GetClanskiBroj(), clan.GetImePrezime(), clan.GetTelefon());
- _brojDanaZauzetosti = 1;
- }
- void RazduziKnjigu(){
- delete _clan;
- _clan = NULL;
- _brojDanaZauzetosti = 0;
- }
- //Funkcija ProvjeriZaduzenost vraća logičku vrijednost “true” ukoliko je knjiga zadužena, a “false” ukoliko nije.
- bool ProvjeriZaduzenost(){
- if (_brojDanaZauzetosti == 0)
- return false;
- else
- return true;
- }
- //Ispisuje na ekran podatke o evidencijskom broju, naslovu, imenu pisca, žanru i godini izdanja knjige.
- void Info()const {
- cout << "ISBN: " << _ISBN << endl;
- cout << "Naslov: " << _naslov << endl;
- cout << "Pisac: " << _pisac << endl;
- cout << "Zanr: " << _zanr << endl;
- cout << "GodIzdanja: " << *_godinaIzdanja << endl;
- cout << "Zauzeto vec " << _brojDanaZauzetosti << " dana." << endl;
- }
- void SetKnjiga(int isbn, char* naslov, char* pisac, char* zanr, int godinaIzdanja){
- _ISBN = isbn;
- _naslov = new char[strlen(naslov) + 1];
- strcpy_s(_naslov, strlen(naslov) + 1, naslov);
- _pisac = new char[strlen(pisac) + 1];
- strcpy_s(_pisac, strlen(pisac) + 1, pisac);
- for (int i = 0; i < strlen(zanr); i++)
- _zanr[i] = zanr[i];
- _godinaIzdanja = new int(godinaIzdanja);
- }
- void SetClan(int clanskiBroj, char *imePrezime, char *telefon){
- _clan = new Clan(clanskiBroj, imePrezime, telefon);
- }
- int GetISBN()const{ return _ISBN; }
- char *GetNaslov()const{ return _naslov; }
- char *GetPisac()const{ return _pisac; }
- char *GetZanr(){ return _zanr; }
- int GetGodinaIzdanja()const{ return *_godinaIzdanja; }
- int GetBrojDanaZauzetosti()const{ return _brojDanaZauzetosti; }
- Clan *GetClan(){ return _clan; }
- };
- class Biblioteka
- {
- char* _naziv;
- int _maxBrojKnjiga;
- int _trenutniBrojKnjiga;
- Knjiga* _knjige;
- public:
- //Konstruktor
- Biblioteka(char naziv[], int* max){
- int vel = strlen(naziv) + 1;
- _naziv = new char[vel];
- strcpy_s(_naziv, vel, naziv);
- _maxBrojKnjiga = *max;
- _trenutniBrojKnjiga = 0;
- _knjige = new Knjiga[*max];
- }
- //Destruktor
- ~Biblioteka(){
- delete[] _naziv;
- _naziv = NULL;
- _knjige->~Knjiga();
- }
- //Dodaje novu knjigu u kolekciju. Zabraniti dodavanje knjiga sa istim ISBN brojem,
- //te ukoliko je potrebno proširiti niz.
- bool DodajKnjigu(Knjiga& knjiga){
- if (_trenutniBrojKnjiga < _maxBrojKnjiga){
- for (int i = 0; i < _trenutniBrojKnjiga; i++){
- if (_knjige[i].GetISBN() == knjiga.GetISBN()){
- cout << "Knjiga sa tim ISBN vec postoji u biblioteci" << endl;
- return false;
- }
- }
- _knjige[_trenutniBrojKnjiga].SetKnjiga(knjiga.GetISBN(), knjiga.GetNaslov(),
- knjiga.GetPisac(), knjiga.GetZanr(), knjiga.GetGodinaIzdanja());
- _trenutniBrojKnjiga++;
- return true;
- }
- else{
- cout << "Library FULL!!!" << endl;
- return false;
- }
- }
- //Prije zaduživanja knjige provjeriti da li je zauzeta.
- void ZaduziKnjigu(int isbn, Clan& clan){
- if (_trenutniBrojKnjiga != 0){
- for (int i = 0; i < _trenutniBrojKnjiga; i++){
- if (_knjige[i].GetISBN() == isbn){
- if (_knjige[i].GetBrojDanaZauzetosti() > 0){
- cout << "Knjiga je trenutno zauzeta." << endl;
- return;
- }
- else{
- //_knjige[i].SetClan(clan.GetClanskiBroj(), clan.GetImePrezime(), clan.GetTelefon());
- _knjige[i].ZaduziKnjigu(clan);
- return;
- }
- }
- }
- }
- }
- 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 << "Slobodne knjige: " << endl;
- for (int i = 0; i < _trenutniBrojKnjiga; i++){
- if (_knjige[i].ProvjeriZaduzenost() == false)
- _knjige[i].Info();
- }
- cout << "\nZaduzene knjige: " << endl;
- for (int i = 0; i < _trenutniBrojKnjiga; i++){
- if (_knjige[i].ProvjeriZaduzenost() == true)
- _knjige[i].Info();
- }
- cout << "\nKnjige na citanju duze od " << n << " dana: " << endl;
- for (int i = 0; i < _trenutniBrojKnjiga; i++){
- if (_knjige[i].GetBrojDanaZauzetosti() > n)
- _knjige[i].Info();
- }
- }
- int GetTrenutnoKnjiga()const{ return _trenutniBrojKnjiga; }
- //Povećava broj dana zauzetosti svih zaduženih knjiga za jedinicu
- void UvecajZauzetost();
- //Povećava broj dana zauzetosti knjige sa datim ISBN brojem
- void UvecajZauzetost(int isbn);
- };
- void main()
- {
- //Testirati sve dostupne funkcionalnosti
- Knjiga knjiga(1234, "Crveno", "Tomo", "Triler", 1900);
- Knjiga knjiga2(5678, "Zeleno", "Tomo Tomic", "Komedija", 1986);
- knjiga.SetClan(1, "Almir Husic", "1111");
- Clan *clan = knjiga.GetClan();
- //clan->info();
- Clan clan1(2, "Meho", "2222");
- char naziv[] = { "UNMO" };
- int *max = new int(3);
- Biblioteka b(naziv, max);
- b.DodajKnjigu(knjiga);
- b.DodajKnjigu(knjiga2);
- b.ZaduziKnjigu(1234, clan1);
- b.IspisiPodatke(0);
- b.RazduziKnjigu(1234);
- cout << "------------------------------------" << endl;
- b.IspisiPodatke(0);
- //Dopuniti i izmijeniti rješenje na način da se svako izdavanje knjige posebno evidentira
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement