Advertisement
elica123

zadaca3-rp1

Jun 1st, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.21 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. list<knjiga*> udzbenik;
  20. list<knjiga*> radnaBiljeznica;
  21.  
  22. knjiga :: knjiga(){
  23. }
  24.  
  25.  
  26. knjiga :: knjiga(string ime_, int br_str_){
  27.  
  28. ime = ime_;
  29. br_str = br_str_;
  30. br_prou_str[100]={0};
  31.  
  32. unistena=0; //na pocetku nije unistena
  33.  
  34. broj_knjiga++;
  35. popis_knjiga.push_back(this);
  36. }
  37.  
  38. udzbenik::udzbenik(){
  39.  
  40. }
  41.  
  42. radnaBiljeznica::radnaBiljeznica(){
  43.  
  44. }
  45.  
  46. udzbenik::udzbenik(string ime_, int br_str_) : knjiga(ime_, br_str_){
  47. U=1;
  48. }
  49.  
  50.  
  51. radnaBiljeznica::radnaBiljeznica(string ime_, int br_str_) : knjiga(ime_, br_str_){
  52. U=0;
  53. }
  54.  
  55. string knjiga :: get_ime(){
  56. return ime;
  57. }
  58.  
  59. int knjiga :: broj_stranica(){
  60. return br_str;
  61. }
  62.  
  63. int knjiga :: prouci_stranicu(int broj){ // ovaj dio je antonela stavila .h !?
  64. return -1;
  65. }
  66.  
  67. int radnaBiljeznica :: prouci_stranicu(int broj){
  68.  
  69. if( broj >= br_str ) return 0; //ta stranica ne postoji
  70.  
  71. if( br_prou_str[broj] == 1) return 0; //vec je unistena
  72.  
  73. br_prou_str[broj]=br_prou_str[broj]+1;
  74.  
  75. if(br_prou_str[broj] == 1) unistena=1;
  76.  
  77. return 1;
  78. }
  79.  
  80. int udzbenik:: prouci_stranicu(int broj){
  81.  
  82. if( broj >= br_str ) return 0; //ta stranica ne postoji
  83.  
  84. if( br_prou_str[broj] == 3 ) return 0; //vec je unistena
  85.  
  86. br_prou_str[broj]=br_prou_str[broj]+1;
  87.  
  88. if(br_prou_str[broj] == 3) unistena=1;
  89.  
  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 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. knjiga *novi;
  112. knjiga *nova;
  113. int postoji=0;
  114. int prvi_put=1;
  115. pair <knjiga*, int> A;
  116. list<knjiga* > :: iterator li;
  117. //prvo prolazim globalnom listom
  118. for (li = knjiga :: popis_knjiga.begin(); li != knjiga :: popis_knjiga.end(); li++)
  119. if((*li)->ime == ime2)
  120. postoji=1;
  121.  
  122.  
  123. //ako je nema odma vracam null pointer
  124. if(postoji == 0) return NULL;
  125.  
  126. //prolazim po popisu knjiga svoje skole i ako je imam i dostupna je vracam je
  127. list<knjiga*> :: iterator li2;
  128. list<pair< knjiga*, int>> :: iterator li3;
  129. for (li2 = skola:: popis_knjiga_u_sk.begin(); li2 != skola:: popis_knjiga_u_sk.end(); li2++){
  130. if((*li2)->ime == ime2 && (*li2)->unistena == 0){
  131. prvi_put=0;
  132.  
  133. for (li3 = knjiga :: knjige_na_raspolaganju.begin(); li3 != knjiga :: knjige_na_raspolaganju.end(); li3++)
  134. if(li3->second == 1){ //knjiga je dostupna
  135. li3->second=0;
  136. return (*li2);
  137. }
  138. }
  139. }
  140.  
  141. //sada posudujem iz neke druge skole
  142. list<skola* > :: iterator li4;
  143. list<skola* > :: iterator li5;
  144.  
  145. for (li4 = skola:: popis_skola.begin(); li4 != skola:: popis_skola.end(); li4++){ //jeli ovo okej?
  146. if(this == (*li4) )
  147. break; //zapamtila sam poziciju svoje skole u popisu_skola
  148.  
  149. }
  150.  
  151. li5=li4;
  152. li5--;
  153.  
  154. for (li4 = li5; li4 != skola:: popis_skola.begin(); li4--){ //za svaku skolu provjeravam njen popis kolekcija, ali idem od svoje pozcije do unatrag
  155. list<knjiga*> :: iterator li6;
  156. for (li6 = (*li4)->popis_knjiga_u_sk.begin(); li6 != (*li4)->popis_knjiga_u_sk.end(); li6++)
  157. if(ime2 == (*li6)->ime ){
  158. for (li3 = knjiga :: knjige_na_raspolaganju.begin(); li3 != knjiga :: knjige_na_raspolaganju.end(); li3++)
  159. if(li3->second == 1 && (*li6)== (li3)->first && li3->first->unistena == 0){ //knjiga je dostupna
  160. li3->second=0;
  161. return (li3)->first;
  162. }
  163. }
  164.  
  165. }
  166. //trebam li prvojeriti prvu i kasnije zadnju, obrati paznju
  167.  
  168.  
  169. li5++;
  170. li5++;
  171. for (li4 = li5; li4 != skola:: popis_skola.end(); li4++){
  172. list<knjiga*> :: iterator li6;
  173. for (li6 = (*li4)->popis_knjiga_u_sk.begin(); li6 != (*li4)->popis_knjiga_u_sk.end(); li6++)
  174. if(ime2 == (*li6)->ime ){
  175. for (li3 = knjiga :: knjige_na_raspolaganju.begin(); li3 != knjiga ::knjige_na_raspolaganju.end(); li3++)
  176. if(li3->second == 1 && (*li6)== (li3)->first && li3->first->unistena == 0){ //knjiga je dostupna
  177. li3->second=0;
  178. return (li3)->first;
  179. }
  180. }
  181. }
  182.  
  183.  
  184. //sada kupujem novu knjigu iz popisa_knjiga koji je globalan
  185.  
  186. list<knjiga* > :: iterator li7;
  187. list<pair<knjiga*, int> > :: iterator li8;
  188. list<pair<string, int>> :: iterator li9;
  189.  
  190. int uvjet2=0;
  191.  
  192. for(li7 = knjiga:: popis_knjiga.begin(); li7 != knjiga:: popis_knjiga.end(); li++){
  193. if(ime2 == (*li7)->ime){ //ne prolazi -i7->ime
  194. for(li8 = knjiga:: knjige_na_raspolaganju.begin(); li8 != knjiga:: knjige_na_raspolaganju.end(); li8++){
  195. if(li8->first == (*li7)){ //ne radi
  196. if(li8->first->U == 1){
  197.  
  198. udzbenik::udzbenik proba(ime2, li8->first->br_str);
  199. *novi=&proba;
  200. popis_knjiga_u_sk.push_back(novi);
  201. li8->second=0;
  202. for(li9 = skola:: narucene.begin(); li9 != skola:: narucene.end(); li9++)
  203. if(li9->first == ime2) {
  204. li9->second++;
  205. return li8->first;
  206. }
  207. pair<string, int> A;
  208. A.first=li8->first->ime;
  209. A.second=1;
  210. narucene.push_back(A);
  211.  
  212. }
  213. else{
  214.  
  215. nova= new radnaBiljeznica(ime2, li8->first->br_str);
  216. popis_knjiga_u_sk.push_back(nova);
  217. li8->second=0;
  218. for(li9 = skola:: narucene.begin(); li9 != skola:: narucene.end(); li9++)
  219. if(li9->first == ime2){
  220. li9->second++;
  221. return li8->first;
  222. }
  223. pair<string, int> B;
  224. B.first=li8->first->ime;
  225. B.second=1;
  226. narucene.push_back(B);
  227. }
  228. }
  229.  
  230. }
  231. }
  232. list<knjiga*> :: iterator li10;
  233. for (li10 = knjiga :: popis_knjiga.begin(); li10 != knjiga :: popis_knjiga.end(); li10++){
  234. if(ime2 == (*li10)->ime){
  235. // ?!?!?!?!?! knjiga::knjige_na_raspolaganju.first=li10;
  236. // ?!?!!!?!?!?!?!?! knjiga::knjige_na_raspolaganju.seconed=0;
  237. for(li9 = skola:: narucene.begin(); li9 != skola:: narucene.end(); li9++)
  238. if(li9->first == ime2) {
  239. li9->second++;
  240. return *li10;
  241. }
  242. pair<string, int> C;
  243. C.first=(*li10)->ime; //otkud osmica ovdje ?!!?!
  244. C.second=1;
  245. narucene.push_back(C);
  246. }
  247. }
  248.  
  249. }
  250.  
  251. }
  252.  
  253. int skola :: kupljeno_knjiga(string ime_knjige){ //vraca broj koliko je do sada ta skola narucila odreΔ‘ene knjige
  254. list<pair<string, int>> :: iterator li;
  255. for (li = narucene.begin(); li != narucene.end(); li++)
  256. if( ime_knjige == (*li).first)
  257. return (*li).second;
  258.  
  259. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement