Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdlib.h>
- #include<iostream>
- #include"knjige.h"
- #include<string>
- #include<list>
- #include <utility>
- using namespace std;
- int knjiga :: broj_knjiga = 0;
- list <knjiga *> knjiga :: popis_knjiga; //mora sadrzavati pokazivace !!
- int skola :: broj_skola = 0;
- list<skola*> skola :: popis_skola; //mora sadrzavati pokazivace !!
- list<pair< knjiga*, int>> knjiga :: knjige_na_raspolaganju; //dostupna knjiga 1, nedostupna 0
- knjiga :: knjiga(){
- }
- knjiga :: knjiga(string ime_, int br_str_){
- ime = ime_;
- br_str = br_str_;
- br_prou_str[100]={0};
- unistena=0; //na pocetku nije unistena
- broj_knjiga++;
- popis_knjiga.push_back(this);
- }
- udzbenik::udzbenik(){
- }
- radnaBiljeznica::radnaBiljeznica(){
- }
- udzbenik::udzbenik(string ime_, int br_str_) : knjiga(ime_, br_str_){
- U=1;
- }
- radnaBiljeznica::radnaBiljeznica(string ime_, int br_str_) : knjiga(ime_, br_str_){
- U=0;
- }
- string knjiga :: get_ime(){
- return ime;
- }
- int knjiga :: broj_stranica(){
- return br_str;
- }
- int knjiga :: prouci_stranicu(int broj){
- return -1;
- }
- int radnaBiljeznica :: prouci_stranicu(int broj){
- if( broj >= br_str ) return 0; //ta stranica ne postoji
- if( br_prou_str[broj] == 1) return 0; //vec je unistena
- br_prou_str[broj]=br_prou_str[broj]+1;
- if(br_prou_str[broj] == 1) unistena=1;
- return 1;
- }
- int udzbenik:: prouci_stranicu(int broj){
- // cout <<"u funkciji prije : "<< br_prou_str[broj]<< endl;
- if( broj >= br_str ) return 0; //ta stranica ne postoji
- if(br_prou_str[broj] == 3 ) return 0;
- br_prou_str[broj]=br_prou_str[broj]+1;
- if( br_prou_str[broj] == 3 ) unistena=1;
- // cout <<"u funkciji nakon: "<< br_prou_str[broj]<< endl;
- return 1;
- }
- void knjiga :: vrati(){
- list<pair<knjiga*, int>> :: iterator li;
- for (li = knjiga :: knjige_na_raspolaganju.begin(); li != knjiga:: knjige_na_raspolaganju.end(); li++){
- if(li->first == this)
- li->second=1; //knjiga je dostupna za bilo koju skolu
- }
- }
- skola :: skola(){ //konstruktor za skolu
- broj_skola++;
- id=broj_skola-1;
- popis_skola.push_back(this);
- }
- knjiga* skola :: posudi(string ime2){
- udzbenik *novi;
- radnaBiljeznica *nova;
- int postoji=0;
- int prvi_put=1;
- pair <knjiga*, int> A;
- list<knjiga* > :: iterator li; //li je po popisu knjiga
- //prvo prolazim globalnom listom
- for (li = knjiga :: popis_knjiga.begin(); li != knjiga :: popis_knjiga.end(); li++)
- if((*li)->ime == ime2)
- postoji=1;
- //ako je nema odma vracam null pointer
- if(postoji == 0) return NULL;
- //prolazim po popisu knjiga svoje skole i ako je imam i dostupna je vracam je
- list<pair<knjiga*, int>> :: iterator li_dostu;
- for (li = skola:: popis_knjiga_u_sk.begin(); li != skola:: popis_knjiga_u_sk.end(); li++){
- if((*li)->ime == ime2 && (*li)->unistena == 0){
- prvi_put=0;
- for (li_dostu = knjiga :: knjige_na_raspolaganju.begin(); li_dostu != knjiga :: knjige_na_raspolaganju.end(); li_dostu++)
- if( li_dostu->second == 1){ //knjiga je dostupna, treba dodati dio di se provjera ime
- li_dostu->second=0;
- return (*li);
- }
- }
- }
- //sada posudujem iz neke druge skole
- list<skola* > :: iterator li_popis_skola;
- list<skola* > :: iterator moja_pozicija;
- int prvi=0;
- int zadnji=0;
- for (li_popis_skola = skola:: popis_skola.begin(); li_popis_skola != skola:: popis_skola.end(); li_popis_skola++){
- if(this == (*li_popis_skola) )
- break; //zapamtila sam poziciju svoje skole u popisu_skola
- prvi++;
- zadnji++;
- }
- if(zadnji==skola::popis_skola.size()-1) zadnji=1;
- moja_pozicija=li_popis_skola; //moje mjesto u globalnoj listi skola
- moja_pozicija--; //ovo moram napraviti
- //za svaku skolu provjeravam njen popis knjiga, al krecem se od svoje skole prvo prema natrag pa prema naprijed
- if(prvi !=0){
- for (li_popis_skola = moja_pozicija; ; li_popis_skola--){
- for(li_dostu = knjiga::knjige_na_raspolaganju.begin(); li_dostu !=knjiga::knjige_na_raspolaganju.end(); li_dostu++){
- if( li_dostu->first->ime == ime2 && li_dostu->first->unistena == 0 && li_dostu->second==1){ //izbrisala sam uvjet li_dostu->first->skola_==this jer ne kuzim cemu to
- li_dostu->second=0;
- return li_dostu->first;
- }
- }
- if(li_popis_skola == skola:: popis_skola.begin()) break;
- }
- }
- //trebam li prvojeriti prvu i kasnije zadnju, obrati paznju
- /*for(li3 = knjiga::knjige_na_raspolaganju.begin();li3!=knjiga::knjige_na_raspolaganju.end();li3++ ){
- if(li3->first->skola_==this && li3->first->ime == ime2 && li3->first->unistena==0 && li3->second==1){
- li3->second=0;
- return li3->first;
- }
- }
- }
- */
- moja_pozicija++;
- moja_pozicija++;
- for (li_popis_skola = moja_pozicija; li_popis_skola != skola:: popis_skola.end(); li_popis_skola++){
- for(li_dostu = knjiga::knjige_na_raspolaganju.begin(); li_dostu !=knjiga::knjige_na_raspolaganju.end(); li_dostu++){
- if(li_dostu->first->ime == ime2 && li_dostu->first->unistena==0 && li_dostu->second==1){ //ponovo sam obrisala li_dostu->first->skola_==this , ako to imam nikad mi nece uc u if
- li_dostu->second=0;
- return li_dostu->first;
- }
- }
- }
- //sada kupujem novu knjigu iz popisa_knjiga koji je globalan, ako sam knjigu posudila ovdje mi ensmije doc
- list<pair<string, int>> :: iterator li_narucene;
- int uvjet2=0;
- for(li = knjiga:: popis_knjiga.begin(); li != knjiga:: popis_knjiga.end(); li++){ //li7
- if(ime2 == (*li)->ime){
- for(li_dostu = knjiga:: knjige_na_raspolaganju.begin(); li_dostu != knjiga:: knjige_na_raspolaganju.end(); li_dostu++){
- if(li_dostu->first == (*li)){ //moram napraviti novu
- if(li_dostu->first->U == 1){
- novi= new udzbenik(ime2, li_dostu->first->br_str);
- popis_knjiga_u_sk.push_back(novi);
- li_dostu->second=0;
- for(li_narucene = skola:: narucene.begin(); li_narucene != skola:: narucene.end(); li_narucene++)
- if(li_narucene->first == ime2) {
- li_narucene->second++;
- return novi;
- }
- pair<string, int> A;
- A.first=li_dostu->first->ime;
- A.second=1;
- narucene.push_back(A);
- }
- else{
- nova= new radnaBiljeznica(ime2, li_dostu->first->br_str);
- popis_knjiga_u_sk.push_back(nova);
- li_dostu->second=0;
- for(li_narucene = skola:: narucene.begin(); li_narucene != skola:: narucene.end(); li_narucene++)
- if(li_narucene->first == ime2){
- li_narucene->second++;
- return nova;
- }
- pair<string, int> B;
- B.first=li_dostu->first->ime;
- B.second=1;
- narucene.push_back(B);
- }
- }
- }
- }
- }
- // u ovom djelu koda je neka greska, knjiga nije na raspolaganju, prvi put je uzimam
- for (li = knjiga :: popis_knjiga.begin(); li != knjiga :: popis_knjiga.end(); li++){
- if(ime2 == (*li)->ime){
- pair<knjiga*,int> par;
- par.first=*li;
- par.second=0;
- knjiga::knjige_na_raspolaganju.push_back(par);
- for(li_narucene = skola:: narucene.begin(); li_narucene != skola:: narucene.end(); li_narucene++)
- if(li_narucene->first == ime2) {
- li_narucene->second=1; //jer uzimam prvi put
- return *li;
- }
- pair<string, int> C;
- C.first=(*li)->ime;
- C.second=1;
- narucene.push_back(C);
- return (*li);
- }
- }
- }
- int skola :: kupljeno_knjiga(string ime_knjige){ //vraca broj koliko je do sada ta skola narucila odreΔene knjige
- list<pair<string, int>> :: iterator li;
- for (li = narucene.begin(); li != narucene.end(); li++)
- if( ime_knjige == (*li).first)
- return (*li).second;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement