elica123

Untitled

Jun 2nd, 2019
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.15 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){ // ovaj dio je antonela stavila .h !?
  61. return -1;
  62. }
  63.  
  64. int radnaBiljeznica :: prouci_stranicu(int broj){
  65.  
  66. if( broj >= br_str ) return 0; //ta stranica ne postoji
  67.  
  68. if( br_prou_str[broj] == 1) return 0; //vec je unistena
  69.  
  70. br_prou_str[broj]=br_prou_str[broj]+1;
  71.  
  72. if(br_prou_str[broj] == 1) unistena=1;
  73.  
  74. return 1;
  75. }
  76.  
  77. int udzbenik:: prouci_stranicu(int broj){
  78.  
  79. if( broj >= br_str ) return 0; //ta stranica ne postoji
  80.  
  81. if( br_prou_str[broj] == 3 ) return 0; //vec je unistena
  82.  
  83. br_prou_str[broj]=br_prou_str[broj]+1;
  84.  
  85. if(br_prou_str[broj] == 3) unistena=1;
  86.  
  87. return 1;
  88. }
  89.  
  90. void knjiga :: vrati(){
  91. list<pair<knjiga*, int>> :: iterator li;
  92. for (li = knjiga :: knjige_na_raspolaganju.begin(); li != knjiga:: knjige_na_raspolaganju.end(); li++){
  93. if(li->first == this)
  94. li->second=1; //knjiga je dostupna za bilo koju skolu
  95. }
  96. }
  97.  
  98. skola :: skola(){ //konstruktor za skolu
  99.  
  100. broj_skola++;
  101. id=broj_skola-1;
  102. popis_skola.push_back(this);
  103.  
  104. }
  105.  
  106.  
  107. knjiga* skola :: posudi(string ime2){
  108.  
  109. udzbenik *novi;
  110. radnaBiljeznica *nova;
  111. int postoji=0;
  112. int prvi_put=1;
  113. pair <knjiga*, int> A;
  114. list<knjiga* > :: iterator li;
  115.  
  116. //prvo prolazim globalnom listom
  117. for (li = knjiga :: popis_knjiga.begin(); li != knjiga :: popis_knjiga.end(); li++)
  118. if((*li)->ime == ime2)
  119. postoji=1;
  120.  
  121. //ako je nema odma vracam null pointer
  122. if(postoji == 0) return NULL;
  123.  
  124. //prolazim po popisu knjiga svoje skole i ako je imam i dostupna je vracam je
  125. list<knjiga*> :: iterator li2;
  126. list<pair< knjiga*, int>> :: iterator li3;
  127. for (li2 = skola:: popis_knjiga_u_sk.begin(); li2 != skola:: popis_knjiga_u_sk.end(); li2++){
  128. if((*li2)->ime == ime2 && (*li2)->unistena == 0){
  129. prvi_put=0;
  130. for (li3 = knjiga :: knjige_na_raspolaganju.begin(); li3 != knjiga :: knjige_na_raspolaganju.end(); li3++)
  131. if(li3->second == 1){ //knjiga je dostupna
  132. li3->second=0;
  133. return (*li2);
  134. }
  135. }
  136. }
  137.  
  138.  
  139. //sada posudujem iz neke druge skole
  140. list<skola* > :: iterator li4;
  141. list<skola* > :: iterator li5;
  142. int prvi=0;
  143. int zadnji=0;
  144. for (li4 = skola:: popis_skola.begin(); li4 != skola:: popis_skola.end(); li4++){
  145. if(this == (*li4) )
  146. break; //zapamtila sam poziciju svoje skole u popisu_skola
  147. prvi++;
  148. zadnji++;
  149. }
  150. if(zadnji==skola::popis_skola.size()-1) zadnji=1;
  151.  
  152. li5=li4;
  153. li5--;
  154. cout << prvi << endl;
  155. for (li4 = li5; prvi ==0 && li4 != skola:: popis_skola.begin(); li4--){ //za svaku skolu provjeravam njen popis kolekcija, ali idem od svoje pozcije do unatrag
  156. cout << "usao" << endl;
  157. list<knjiga*> :: iterator li6;
  158. /*
  159. for (li6 = ((*li4)->popis_knjiga_u_sk).begin(); li6 != (*li4)->popis_knjiga_u_sk.end(); li6++){
  160. if(ime2 == (*li6)->ime ){
  161. for (li3 = knjiga :: knjige_na_raspolaganju.begin(); li3 != knjiga :: knjige_na_raspolaganju.end(); li3++)
  162. if(li3->second == 1 && (*li6)== (li3)->first && li3->first->unistena == 0){ //knjiga je dostupna
  163. li3->second=0;
  164. return (li3)->first;
  165. }
  166. }
  167. }
  168. */
  169. for(li3 = knjiga::knjige_na_raspolaganju.begin();li3!=knjiga::knjige_na_raspolaganju.end();li3++ ){
  170.  
  171. if(li3->first->skola_==this && li3->first->ime == ime2 && li3->first->unistena==0 && li3->second==1){
  172. li3->second=0;
  173. return li3->first;
  174. }
  175. }
  176. }
  177. //trebam li prvojeriti prvu i kasnije zadnju, obrati paznju
  178. for(li3 = knjiga::knjige_na_raspolaganju.begin();li3!=knjiga::knjige_na_raspolaganju.end();li3++ ){
  179.  
  180. if(li3->first->skola_==this && li3->first->ime == ime2 && li3->first->unistena==0 && li3->second==1){
  181. li3->second=0;
  182. return li3->first;
  183. }
  184. }
  185. }
  186. //cout << "KUPLJENO RMAT2-funkcija" << kupljeno_knjiga("rmat2") << endl;
  187. //li5++;
  188. //li5++;
  189. for (li4 = li5; zadnji == 1 && li4 != skola:: popis_skola.end(); li4++){
  190. list<knjiga*> :: iterator li6;
  191. for (li6 = (*li4)->popis_knjiga_u_sk.begin(); li6 != (*li4)->popis_knjiga_u_sk.end(); li6++)
  192. if(ime2 == (*li6)->ime ){
  193. for (li3 = knjiga :: knjige_na_raspolaganju.begin(); li3 != knjiga ::knjige_na_raspolaganju.end(); li3++)
  194. if(li3->second == 1 && (*li6)== (li3)->first && li3->first->unistena == 0){ //knjiga je dostupna
  195. li3->second=0;
  196. return (li3)->first;
  197. }
  198. }
  199. }
  200.  
  201. //cout << "KUPLJENO RMAT2-funkcija-final" << kupljeno_knjiga("rmat2") << endl;
  202. //sada kupujem novu knjigu iz popisa_knjiga koji je globalan
  203. cout << "KUPUJEM" << endl;
  204. list<knjiga* > :: iterator li7;
  205. list<pair<knjiga*, int> > :: iterator li8;
  206. list<pair<string, int>> :: iterator li9;
  207.  
  208. int uvjet2=0;
  209.  
  210. for(li7 = knjiga:: popis_knjiga.begin(); li7 != knjiga:: popis_knjiga.end(); li7++){
  211. if(ime2 == (*li7)->ime){
  212. for(li8 = knjiga:: knjige_na_raspolaganju.begin(); li8 != knjiga:: knjige_na_raspolaganju.end(); li8++){
  213. if(li8->first == (*li7)){
  214. if(li8->first->U == 1){
  215. cout << "kontrola" << endl;
  216. novi= new udzbenik(ime2, li8->first->br_str);
  217. popis_knjiga_u_sk.push_back(novi);
  218. li8->second=0;
  219. for(li9 = skola:: narucene.begin(); li9 != skola:: narucene.end(); li9++)
  220. if(li9->first == ime2) {
  221. li9->second++;
  222. return li8->first;
  223. }
  224. pair<string, int> A;
  225. A.first=li8->first->ime;
  226. A.second=1;
  227. narucene.push_back(A);
  228.  
  229. }
  230. else{
  231.  
  232. nova= new radnaBiljeznica(ime2, li8->first->br_str);
  233. popis_knjiga_u_sk.push_back(nova);
  234. li8->second=0;
  235. for(li9 = skola:: narucene.begin(); li9 != skola:: narucene.end(); li9++)
  236. if(li9->first == ime2){
  237. li9->second++;
  238. return li8->first;
  239. }
  240.  
  241. pair<string, int> B;
  242. B.first=li8->first->ime;
  243. B.second=1;
  244. narucene.push_back(B);
  245. }
  246. }
  247.  
  248. }
  249. }
  250. }
  251.  
  252. list<knjiga*> :: iterator li10;
  253. for (li10 = knjiga :: popis_knjiga.begin(); li10 != knjiga :: popis_knjiga.end(); li10++){
  254. if(ime2 == (*li10)->ime){
  255. pair<knjiga*,int> par;
  256. par.first=*li10;
  257. par.second=0;
  258. knjiga::knjige_na_raspolaganju.push_back(par);
  259. for(li9 = skola:: narucene.begin(); li9 != skola:: narucene.end(); li9++)
  260. if(li9->first == ime2) {
  261. li9->second++;
  262. return *li10;
  263. }
  264. pair<string, int> C;
  265. C.first=(*li10)->ime;
  266. C.second=1;
  267. narucene.push_back(C);
  268. }
  269. }
  270.  
  271. }
  272.  
  273.  
  274. int skola :: kupljeno_knjiga(string ime_knjige){ //vraca broj koliko je do sada ta skola narucila odreΔ‘ene knjige
  275. list<pair<string, int>> :: iterator li;
  276. for (li = narucene.begin(); li != narucene.end(); li++)
  277. if( ime_knjige == (*li).first)
  278. return (*li).second;
  279. return 0;
  280. }
Add Comment
Please, Sign In to add comment