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
- list<knjiga*> udzbenik;
- list<knjiga*> radnaBiljeznica;
- 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){ // ovaj dio je antonela stavila .h !?
- 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){
- if( broj >= br_str ) return 0; //ta stranica ne postoji
- if( br_prou_str[broj] == 3 ) return 0; //vec je unistena
- br_prou_str[broj]=br_prou_str[broj]+1;
- if(br_prou_str[broj] == 3) unistena=1;
- 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 skolu
- }
- }
- skola :: skola(){ //konstruktor za skolu
- broj_skola++;
- id=broj_skola-1;
- popis_skola.push_back(this);
- }
- knjiga* skola :: posudi(string ime2){
- knjiga *novi;
- knjiga *nova;
- int postoji=0;
- int prvi_put=1;
- pair <knjiga*, int> A;
- list<knjiga* > :: iterator li;
- //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<knjiga*> :: iterator li2;
- list<pair< knjiga*, int>> :: iterator li3;
- for (li2 = skola:: popis_knjiga_u_sk.begin(); li2 != skola:: popis_knjiga_u_sk.end(); li2++){
- if((*li2)->ime == ime2 && (*li2)->unistena == 0){
- prvi_put=0;
- for (li3 = knjiga :: knjige_na_raspolaganju.begin(); li3 != knjiga :: knjige_na_raspolaganju.end(); li3++)
- if(li3->second == 1){ //knjiga je dostupna
- li3->second=0;
- return (*li2);
- }
- }
- }
- //sada posudujem iz neke druge skole
- list<skola* > :: iterator li4;
- list<skola* > :: iterator li5;
- for (li4 = skola:: popis_skola.begin(); li4 != skola:: popis_skola.end(); li4++){ //jeli ovo okej?
- if(this == (*li4) )
- break; //zapamtila sam poziciju svoje skole u popisu_skola
- }
- li5=li4;
- li5--;
- for (li4 = li5; li4 != skola:: popis_skola.begin(); li4--){ //za svaku skolu provjeravam njen popis kolekcija, ali idem od svoje pozcije do unatrag
- list<knjiga*> :: iterator li6;
- for (li6 = (*li4)->popis_knjiga_u_sk.begin(); li6 != (*li4)->popis_knjiga_u_sk.end(); li6++)
- if(ime2 == (*li6)->ime ){
- for (li3 = knjiga :: knjige_na_raspolaganju.begin(); li3 != knjiga :: knjige_na_raspolaganju.end(); li3++)
- if(li3->second == 1 && (*li6)== (li3)->first && li3->first->unistena == 0){ //knjiga je dostupna
- li3->second=0;
- return (li3)->first;
- }
- }
- }
- //trebam li prvojeriti prvu i kasnije zadnju, obrati paznju
- li5++;
- li5++;
- for (li4 = li5; li4 != skola:: popis_skola.end(); li4++){
- list<knjiga*> :: iterator li6;
- for (li6 = (*li4)->popis_knjiga_u_sk.begin(); li6 != (*li4)->popis_knjiga_u_sk.end(); li6++)
- if(ime2 == (*li6)->ime ){
- for (li3 = knjiga :: knjige_na_raspolaganju.begin(); li3 != knjiga ::knjige_na_raspolaganju.end(); li3++)
- if(li3->second == 1 && (*li6)== (li3)->first && li3->first->unistena == 0){ //knjiga je dostupna
- li3->second=0;
- return (li3)->first;
- }
- }
- }
- //sada kupujem novu knjigu iz popisa_knjiga koji je globalan
- list<knjiga* > :: iterator li7;
- list<pair<knjiga*, int> > :: iterator li8;
- list<pair<string, int>> :: iterator li9;
- int uvjet2=0;
- for(li7 = knjiga:: popis_knjiga.begin(); li7 != knjiga:: popis_knjiga.end(); li++){
- if(ime2 == (*li7)->ime){ //ne prolazi -i7->ime
- for(li8 = knjiga:: knjige_na_raspolaganju.begin(); li8 != knjiga:: knjige_na_raspolaganju.end(); li8++){
- if(li8->first == (*li7)){ //ne radi
- if(li8->first->U == 1){
- udzbenik::udzbenik proba(ime2, li8->first->br_str);
- *novi=&proba;
- popis_knjiga_u_sk.push_back(novi);
- li8->second=0;
- for(li9 = skola:: narucene.begin(); li9 != skola:: narucene.end(); li9++)
- if(li9->first == ime2) {
- li9->second++;
- return li8->first;
- }
- pair<string, int> A;
- A.first=li8->first->ime;
- A.second=1;
- narucene.push_back(A);
- }
- else{
- nova= new radnaBiljeznica(ime2, li8->first->br_str);
- popis_knjiga_u_sk.push_back(nova);
- li8->second=0;
- for(li9 = skola:: narucene.begin(); li9 != skola:: narucene.end(); li9++)
- if(li9->first == ime2){
- li9->second++;
- return li8->first;
- }
- pair<string, int> B;
- B.first=li8->first->ime;
- B.second=1;
- narucene.push_back(B);
- }
- }
- }
- }
- list<knjiga*> :: iterator li10;
- for (li10 = knjiga :: popis_knjiga.begin(); li10 != knjiga :: popis_knjiga.end(); li10++){
- if(ime2 == (*li10)->ime){
- // ?!?!?!?!?! knjiga::knjige_na_raspolaganju.first=li10;
- // ?!?!!!?!?!?!?!?! knjiga::knjige_na_raspolaganju.seconed=0;
- for(li9 = skola:: narucene.begin(); li9 != skola:: narucene.end(); li9++)
- if(li9->first == ime2) {
- li9->second++;
- return *li10;
- }
- pair<string, int> C;
- C.first=(*li10)->ime; //otkud osmica ovdje ?!!?!
- C.second=1;
- narucene.push_back(C);
- }
- }
- }
- }
- 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;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement