Advertisement
Guest User

Untitled

a guest
Oct 30th, 2014
281
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.36 KB | None | 0 0
  1. #include<iostream>
  2. using namespace std;
  3.  
  4. class Clan
  5. {
  6.     const int _clanskiBroj;
  7.     char*_imePrezime;
  8.     char _telefon[20];
  9. public:
  10.  
  11.     Clan(int clanskiBroj, char *imePrezime, char *telefon) : _clanskiBroj(clanskiBroj){
  12.         int velicina = strlen(imePrezime) + 1;
  13.         _imePrezime = new char[velicina];
  14.         strcpy_s(_imePrezime, velicina, imePrezime);
  15.  
  16.         strcpy_s(_telefon, 20, telefon);
  17.     }
  18.     ~Clan(){
  19.         delete[] _imePrezime;
  20.         _imePrezime = NULL;
  21.     }
  22.     void info(){
  23.         cout << "Ime prezime:" << _imePrezime << endl;
  24.         cout << "Clanski broj: " << _clanskiBroj << endl;
  25.         cout << "Telefon: " << _telefon << endl;
  26.     }
  27.  
  28.  
  29.  
  30.     int GetClanskiBroj()const{ return _clanskiBroj; }
  31.     char *GetImePrezime()const{ return _imePrezime; }
  32.     char *GetTelefon(){ return _telefon; }
  33.  
  34. };
  35. class Knjiga
  36. {
  37.     int& _ISBN;
  38.     char* _naslov;
  39.     char* _pisac;
  40.     char _zanr[30];
  41.     int* _godinaIzdanja;
  42.     Clan* _clan; //Podaci o članu kod kojeg se knjiga trenutno nalazi
  43.     int _brojDanaZauzetosti;
  44.     int _tempISBN;//dodano naknadno
  45. public:
  46.     Knjiga() :_tempISBN(-1), _ISBN(_tempISBN)
  47.     {
  48.         _naslov = NULL;
  49.         _pisac = NULL;
  50.         for (int i = 0; i < 30; i++){
  51.             _zanr[i] = NULL;
  52.         }
  53.         _godinaIzdanja = NULL;
  54.         _clan = NULL;
  55.         _brojDanaZauzetosti = 0;
  56.         _tempISBN = -1;
  57.     }
  58.     //Knjiga je slobodna, _clan postaviti na NULL
  59.     Knjiga(int isbn, char* naslov, char* pisac, char* zanr, int godinaIzdanja):_tempISBN(isbn), _ISBN(_tempISBN), _naslov(naslov), _pisac(pisac){
  60.         _godinaIzdanja = new int(godinaIzdanja);
  61.         _clan = NULL;
  62.         _brojDanaZauzetosti = 0;
  63.         strcpy_s(_zanr, 30, zanr);
  64.         _naslov = new char[strlen(naslov) + 1];
  65.         strcpy_s(_naslov, strlen(naslov) + 1, naslov);
  66.         _pisac = new char[strlen(pisac) + 1];
  67.         strcpy_s(_pisac, strlen(pisac) + 1, pisac);
  68.     }
  69.  
  70.     ~Knjiga(){
  71.  
  72.         delete[] _naslov;
  73.         _naslov = NULL;
  74.        
  75.         delete[] _pisac;
  76.         _pisac = NULL;
  77.        
  78.         _godinaIzdanja = NULL;
  79.        
  80.         if (_clan != NULL)
  81.             delete _clan;
  82.     }
  83.  
  84.     void ZaduziKnjigu(Clan& clan){
  85.         if (_clan != NULL)
  86.             _clan->~Clan();
  87.         _clan = new Clan(clan.GetClanskiBroj(), clan.GetImePrezime(), clan.GetTelefon());
  88.         _brojDanaZauzetosti = 1;
  89.     }
  90.  
  91.     void RazduziKnjigu(){
  92.         delete _clan;
  93.         _clan = NULL;
  94.         _brojDanaZauzetosti = 0;
  95.     }
  96.  
  97.     //Funkcija ProvjeriZaduzenost vraća logičku vrijednost “true” ukoliko je knjiga zadužena, a “false” ukoliko nije.
  98.     bool ProvjeriZaduzenost(){
  99.         if (_brojDanaZauzetosti == 0)
  100.             return false;
  101.         else
  102.             return true;
  103.     }
  104.  
  105.     //Ispisuje na ekran podatke o evidencijskom broju, naslovu, imenu pisca, žanru i godini izdanja knjige.
  106.     void Info()const {
  107.         cout << "ISBN: " << _ISBN << endl;
  108.         cout << "Naslov: " << _naslov << endl;
  109.         cout << "Pisac: " << _pisac << endl;
  110.         cout << "Zanr: " << _zanr << endl;
  111.         cout << "GodIzdanja: " << *_godinaIzdanja << endl;
  112.         cout << "Zauzeto vec " << _brojDanaZauzetosti << " dana." << endl;
  113.     }
  114.  
  115.  
  116.     void SetKnjiga(int isbn, char* naslov, char* pisac, char* zanr, int godinaIzdanja){
  117.         _ISBN = isbn;
  118.         _naslov = new char[strlen(naslov) + 1];
  119.         strcpy_s(_naslov, strlen(naslov) + 1, naslov);
  120.         _pisac = new char[strlen(pisac) + 1];
  121.         strcpy_s(_pisac, strlen(pisac) + 1, pisac);
  122.         for (int i = 0; i < strlen(zanr); i++)
  123.             _zanr[i] = zanr[i];
  124.         _godinaIzdanja = new int(godinaIzdanja);
  125.     }
  126.     void SetClan(int clanskiBroj, char *imePrezime, char *telefon){
  127.         _clan = new Clan(clanskiBroj, imePrezime, telefon);
  128.     }
  129.  
  130.  
  131.     int GetISBN()const{ return _ISBN; }
  132.     char *GetNaslov()const{ return _naslov; }
  133.     char *GetPisac()const{ return _pisac; }
  134.     char *GetZanr(){ return _zanr; }
  135.     int GetGodinaIzdanja()const{ return *_godinaIzdanja; }
  136.     int GetBrojDanaZauzetosti()const{ return _brojDanaZauzetosti; }
  137.     Clan *GetClan(){ return _clan; }
  138.  
  139. };
  140.  
  141. class Biblioteka
  142. {
  143.     char* _naziv;
  144.     int _maxBrojKnjiga;
  145.     int _trenutniBrojKnjiga;
  146.     Knjiga* _knjige;
  147. public:
  148.     //Konstruktor
  149.     Biblioteka(char naziv[], int* max){
  150.         int vel = strlen(naziv) + 1;
  151.         _naziv = new char[vel];
  152.         strcpy_s(_naziv, vel, naziv);
  153.         _maxBrojKnjiga = *max;
  154.         _trenutniBrojKnjiga = 0;
  155.         _knjige = new Knjiga[*max];
  156.     }
  157.  
  158.     //Destruktor
  159.     ~Biblioteka(){
  160.         delete[] _naziv;
  161.         _naziv = NULL;
  162.         _knjige->~Knjiga();
  163.     }
  164.  
  165.     //Dodaje novu knjigu u kolekciju. Zabraniti dodavanje knjiga sa istim ISBN brojem,
  166.     //te ukoliko je potrebno proširiti niz.
  167.     bool DodajKnjigu(Knjiga& knjiga){
  168.         if (_trenutniBrojKnjiga < _maxBrojKnjiga){
  169.             for (int i = 0; i < _trenutniBrojKnjiga; i++){
  170.                 if (_knjige[i].GetISBN() == knjiga.GetISBN()){
  171.                     cout << "Knjiga sa tim ISBN vec postoji u biblioteci" << endl;
  172.                     return false;
  173.                 }
  174.             }
  175.             _knjige[_trenutniBrojKnjiga].SetKnjiga(knjiga.GetISBN(), knjiga.GetNaslov(),
  176.                 knjiga.GetPisac(), knjiga.GetZanr(), knjiga.GetGodinaIzdanja());
  177.             _trenutniBrojKnjiga++;
  178.             return true;
  179.         }
  180.         else{
  181.             cout << "Library FULL!!!" << endl;
  182.             return false;
  183.         }
  184.     }
  185.  
  186.     //Prije zaduživanja knjige provjeriti da li je zauzeta.
  187.     void ZaduziKnjigu(int isbn, Clan& clan){
  188.         if (_trenutniBrojKnjiga != 0){
  189.             for (int i = 0; i < _trenutniBrojKnjiga; i++){
  190.                 if (_knjige[i].GetISBN() == isbn){
  191.                     if (_knjige[i].GetBrojDanaZauzetosti() > 0){
  192.                         cout << "Knjiga je trenutno zauzeta." << endl;
  193.                         return;
  194.                     }
  195.                     else{
  196.                         //_knjige[i].SetClan(clan.GetClanskiBroj(), clan.GetImePrezime(), clan.GetTelefon());
  197.                         _knjige[i].ZaduziKnjigu(clan);
  198.                         return;
  199.                     }
  200.                 }
  201.             }
  202.         }
  203.     }
  204.     void RazduziKnjigu(int isbn){
  205.         for (int i = 0; i < _trenutniBrojKnjiga; i++){
  206.             if (_knjige[i].GetISBN() == isbn){
  207.                 _knjige[i].RazduziKnjigu();
  208.             }
  209.         }
  210.     }
  211.  
  212.     int GetClanskiBrojCitaoca(int isbn)const{
  213.         for (int i = 0; i < _trenutniBrojKnjiga; i++){
  214.             if (_knjige[i].GetISBN() == isbn){
  215.                 return _knjige[i].GetClan()->GetClanskiBroj();
  216.             }
  217.         }
  218.         return -1;
  219.     }
  220.  
  221.     //Ispisuje podatke o svim slobodnim knjigama, svim zaduženim knjigama, i knjigama koje su na čitanju duže
  222.     //od n dana, pri čemu se n zadaje kao parametar
  223.     void IspisiPodatke(int n)const{
  224.         cout << "Slobodne knjige: " << endl;
  225.         for (int i = 0; i < _trenutniBrojKnjiga; i++){
  226.             if (_knjige[i].ProvjeriZaduzenost() == false)
  227.                 _knjige[i].Info();
  228.         }
  229.  
  230.         cout << "\nZaduzene knjige: " << endl;
  231.         for (int i = 0; i < _trenutniBrojKnjiga; i++){
  232.             if (_knjige[i].ProvjeriZaduzenost() == true)
  233.                 _knjige[i].Info();
  234.         }
  235.  
  236.         cout << "\nKnjige na citanju duze od " << n << " dana: " << endl;
  237.         for (int i = 0; i < _trenutniBrojKnjiga; i++){
  238.             if (_knjige[i].GetBrojDanaZauzetosti() > n)
  239.                 _knjige[i].Info();
  240.         }
  241.     }
  242.  
  243.  
  244.     int GetTrenutnoKnjiga()const{ return _trenutniBrojKnjiga; }
  245.  
  246.     //Povećava broj dana zauzetosti svih zaduženih knjiga za jedinicu
  247.     void UvecajZauzetost();
  248.  
  249.     //Povećava broj dana zauzetosti knjige sa datim ISBN brojem
  250.     void UvecajZauzetost(int isbn);
  251. };
  252.  
  253. void main()
  254. {
  255.     //Testirati sve dostupne funkcionalnosti
  256.  
  257.     Knjiga knjiga(1234, "Crveno", "Tomo", "Triler", 1900);
  258.     Knjiga knjiga2(5678, "Zeleno", "Tomo Tomic", "Komedija", 1986);
  259.     knjiga.SetClan(1, "Almir Husic", "1111");
  260.     Clan *clan = knjiga.GetClan();
  261.     //clan->info();
  262.    
  263.  
  264.     Clan clan1(2, "Meho", "2222");
  265.     char naziv[] = { "UNMO" };
  266.     int *max = new int(3);
  267.     Biblioteka b(naziv, max);
  268.     b.DodajKnjigu(knjiga);
  269.     b.DodajKnjigu(knjiga2);
  270.     b.ZaduziKnjigu(1234, clan1);
  271.     b.IspisiPodatke(0);
  272.     b.RazduziKnjigu(1234);
  273.     cout << "------------------------------------" << endl;
  274.     b.IspisiPodatke(0);
  275.  
  276.     //Dopuniti i izmijeniti rješenje na način da se svako izdavanje knjige posebno evidentira
  277.  
  278.     system("pause");
  279. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement