Advertisement
elica123

knjige.cpp

Jun 2nd, 2019
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.96 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<iostream>
  4. #include"knjige.h"
  5. #include<string>
  6. #include<list>
  7. #include <utility>
  8.  
  9. using namespace std;
  10.  
  11. int knjiga :: broj_knjiga = 0;
  12. list <knjiga *> knjiga :: popis_knjiga; //mora sadrzavati pokazivace !!
  13.  
  14. int skola :: broj_skola = 0;
  15. list<skola*> skola :: popis_skola; //mora sadrzavati pokazivace !!
  16.  
  17. list<pair< knjiga*, int>> knjiga :: knjige_na_raspolaganju; //dostupna knjiga 1, nedostupna 0
  18.  
  19. knjiga :: knjiga(){
  20. }
  21.  
  22.  
  23. knjiga :: knjiga(string ime_, int br_str_){
  24.  
  25. ime = ime_;
  26. br_str = br_str_;
  27. br_prou_str[100]={0};
  28.  
  29. unistena=0; //na pocetku nije unistena
  30.  
  31. broj_knjiga++;
  32. popis_knjiga.push_back(this);
  33. }
  34.  
  35. udzbenik::udzbenik(){
  36.  
  37. }
  38.  
  39. radnaBiljeznica::radnaBiljeznica(){
  40.  
  41. }
  42.  
  43. udzbenik::udzbenik(string ime_, int br_str_) : knjiga(ime_, br_str_){
  44. U=1;
  45. }
  46.  
  47.  
  48. radnaBiljeznica::radnaBiljeznica(string ime_, int br_str_) : knjiga(ime_, br_str_){
  49. U=0;
  50. }
  51.  
  52. string knjiga :: get_ime(){
  53. return ime;
  54. }
  55.  
  56. int knjiga :: broj_stranica(){
  57. return br_str;
  58. }
  59.  
  60. int knjiga :: prouci_stranicu(int broj){
  61. return -1;
  62. }
  63.  
  64. int radnaBiljeznica :: prouci_stranicu(int broj){
  65.  
  66.  
  67. if( broj >= br_str ) return 0; //ta stranica ne postoji
  68.  
  69. if( br_prou_str[broj] == 1) return 0; //vec je unistena
  70.  
  71. br_prou_str[broj]=br_prou_str[broj]+1;
  72.  
  73. if(br_prou_str[broj] == 1) unistena=1;
  74.  
  75.  
  76. return 1;
  77. }
  78.  
  79. int udzbenik:: prouci_stranicu(int broj){
  80. // cout <<"u funkciji prije : "<< br_prou_str[broj]<< endl;
  81.  
  82. if( broj >= br_str ) return 0; //ta stranica ne postoji
  83.  
  84. if(br_prou_str[broj] == 3 ) return 0;
  85.  
  86. br_prou_str[broj]=br_prou_str[broj]+1;
  87.  
  88. if( br_prou_str[broj] == 3 ) unistena=1;
  89. // cout <<"u funkciji nakon: "<< br_prou_str[broj]<< endl;
  90. return 1;
  91. }
  92.  
  93. void knjiga :: vrati(){
  94. list<pair<knjiga*, int>> :: iterator li;
  95. for (li = knjiga :: knjige_na_raspolaganju.begin(); li != knjiga:: knjige_na_raspolaganju.end(); li++){
  96. if(li->first == this)
  97. li->second=1; //knjiga je dostupna za bilo koju skolu
  98. }
  99. }
  100.  
  101. skola :: skola(){ //konstruktor za skolu
  102.  
  103. broj_skola++;
  104. id=broj_skola-1;
  105. popis_skola.push_back(this);
  106.  
  107. }
  108.  
  109.  
  110. knjiga* skola :: posudi(string ime2){
  111.  
  112. udzbenik *novi;
  113. radnaBiljeznica *nova;
  114. int postoji=0;
  115. int prvi_put=1;
  116. pair <knjiga*, int> A;
  117. list<knjiga* > :: iterator li; //li je po popisu knjiga
  118.  
  119.  
  120. //prvo prolazim globalnom listom
  121. for (li = knjiga :: popis_knjiga.begin(); li != knjiga :: popis_knjiga.end(); li++)
  122. if((*li)->ime == ime2)
  123. postoji=1;
  124.  
  125. //ako je nema odma vracam null pointer
  126. if(postoji == 0) return NULL;
  127.  
  128. //prolazim po popisu knjiga svoje skole i ako je imam i dostupna je vracam je
  129. list<pair<knjiga*, int>> :: iterator li_dostu;
  130. for (li = skola:: popis_knjiga_u_sk.begin(); li != skola:: popis_knjiga_u_sk.end(); li++){
  131. if((*li)->ime == ime2 && (*li)->unistena == 0){
  132. prvi_put=0;
  133. for (li_dostu = knjiga :: knjige_na_raspolaganju.begin(); li_dostu != knjiga :: knjige_na_raspolaganju.end(); li_dostu++)
  134. if( li_dostu->second == 1){ //knjiga je dostupna, treba dodati dio di se provjera ime
  135. li_dostu->second=0;
  136. return (*li);
  137. }
  138. }
  139. }
  140.  
  141. //sada posudujem iz neke druge skole
  142. list<skola* > :: iterator li_popis_skola;
  143. list<skola* > :: iterator moja_pozicija;
  144. int prvi=0;
  145. int zadnji=0;
  146. for (li_popis_skola = skola:: popis_skola.begin(); li_popis_skola != skola:: popis_skola.end(); li_popis_skola++){
  147. if(this == (*li_popis_skola) )
  148. break; //zapamtila sam poziciju svoje skole u popisu_skola
  149. prvi++;
  150. zadnji++;
  151. }
  152. if(zadnji==skola::popis_skola.size()-1) zadnji=1;
  153.  
  154. moja_pozicija=li_popis_skola; //moje mjesto u globalnoj listi skola
  155. moja_pozicija--; //ovo moram napraviti
  156.  
  157. //za svaku skolu provjeravam njen popis knjiga, al krecem se od svoje skole prvo prema natrag pa prema naprijed
  158. if(prvi !=0){
  159. for (li_popis_skola = moja_pozicija; ; li_popis_skola--){
  160. for(li_dostu = knjiga::knjige_na_raspolaganju.begin(); li_dostu !=knjiga::knjige_na_raspolaganju.end(); li_dostu++){
  161. 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
  162. li_dostu->second=0;
  163. return li_dostu->first;
  164. }
  165. }
  166. if(li_popis_skola == skola:: popis_skola.begin()) break;
  167. }
  168. }
  169.  
  170. //trebam li prvojeriti prvu i kasnije zadnju, obrati paznju
  171. /*for(li3 = knjiga::knjige_na_raspolaganju.begin();li3!=knjiga::knjige_na_raspolaganju.end();li3++ ){
  172.  
  173. if(li3->first->skola_==this && li3->first->ime == ime2 && li3->first->unistena==0 && li3->second==1){
  174. li3->second=0;
  175. return li3->first;
  176. }
  177. }
  178. }
  179. */
  180. moja_pozicija++;
  181. moja_pozicija++;
  182.  
  183. for (li_popis_skola = moja_pozicija; li_popis_skola != skola:: popis_skola.end(); li_popis_skola++){
  184. for(li_dostu = knjiga::knjige_na_raspolaganju.begin(); li_dostu !=knjiga::knjige_na_raspolaganju.end(); li_dostu++){
  185. 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
  186. li_dostu->second=0;
  187. return li_dostu->first;
  188. }
  189. }
  190.  
  191. }
  192.  
  193. //sada kupujem novu knjigu iz popisa_knjiga koji je globalan, ako sam knjigu posudila ovdje mi ensmije doc
  194. list<pair<string, int>> :: iterator li_narucene;
  195. int uvjet2=0;
  196.  
  197. for(li = knjiga:: popis_knjiga.begin(); li != knjiga:: popis_knjiga.end(); li++){ //li7
  198.  
  199. if(ime2 == (*li)->ime){
  200. for(li_dostu = knjiga:: knjige_na_raspolaganju.begin(); li_dostu != knjiga:: knjige_na_raspolaganju.end(); li_dostu++){
  201. if(li_dostu->first == (*li)){ //moram napraviti novu
  202. if(li_dostu->first->U == 1){
  203. novi= new udzbenik(ime2, li_dostu->first->br_str);
  204. popis_knjiga_u_sk.push_back(novi);
  205. li_dostu->second=0;
  206. for(li_narucene = skola:: narucene.begin(); li_narucene != skola:: narucene.end(); li_narucene++)
  207. if(li_narucene->first == ime2) {
  208. li_narucene->second++;
  209. return novi;
  210. }
  211. pair<string, int> A;
  212. A.first=li_dostu->first->ime;
  213. A.second=1;
  214. narucene.push_back(A);
  215.  
  216. }
  217. else{
  218.  
  219. nova= new radnaBiljeznica(ime2, li_dostu->first->br_str);
  220. popis_knjiga_u_sk.push_back(nova);
  221. li_dostu->second=0;
  222. for(li_narucene = skola:: narucene.begin(); li_narucene != skola:: narucene.end(); li_narucene++)
  223. if(li_narucene->first == ime2){
  224. li_narucene->second++;
  225. return nova;
  226. }
  227.  
  228. pair<string, int> B;
  229. B.first=li_dostu->first->ime;
  230. B.second=1;
  231. narucene.push_back(B);
  232. }
  233. }
  234.  
  235. }
  236. }
  237. }
  238. // u ovom djelu koda je neka greska, knjiga nije na raspolaganju, prvi put je uzimam
  239. for (li = knjiga :: popis_knjiga.begin(); li != knjiga :: popis_knjiga.end(); li++){
  240. if(ime2 == (*li)->ime){
  241. pair<knjiga*,int> par;
  242. par.first=*li;
  243. par.second=0;
  244. knjiga::knjige_na_raspolaganju.push_back(par);
  245. for(li_narucene = skola:: narucene.begin(); li_narucene != skola:: narucene.end(); li_narucene++)
  246. if(li_narucene->first == ime2) {
  247. li_narucene->second=1; //jer uzimam prvi put
  248. return *li;
  249. }
  250. pair<string, int> C;
  251. C.first=(*li)->ime;
  252. C.second=1;
  253. narucene.push_back(C);
  254. return (*li);
  255. }
  256. }
  257. }
  258.  
  259.  
  260. int skola :: kupljeno_knjiga(string ime_knjige){ //vraca broj koliko je do sada ta skola narucila odreΔ‘ene knjige
  261. list<pair<string, int>> :: iterator li;
  262. for (li = narucene.begin(); li != narucene.end(); li++)
  263. if( ime_knjige == (*li).first)
  264. return (*li).second;
  265. return 0;
  266. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement