Posted By

majcen555 on 11/12/12


Tagged

pokazivac Strukture polje zivotinje podatka algoritam


Versions (?)

SP_Zadatak1_main_MM


 / Published in: C++
 

URL: http://e.foi.hr/wiki/strukture_podataka/index.php/Zadatak_1_Majcen_Marko

Program koji će evidentirati životinje u trgovini sa kućnim ljubimcima. Zapis treba sadržavati sljedeće podatke: šifru, vrstu, naziv, cijenu i datum dostave. Na početku testiranja programa potrebno je pohraniti minimalno pet različitih zapisa u listu pri čemu naziv i vrstu životinja odabirete samostalno. Program treba raditi neovisno o implementaciji liste.

  1. #include <cstdlib>
  2. #include <iostream>
  3.  
  4. //#include "lista_polje_mm.h"
  5. #include "lista_pokazivac_mm.h"
  6.  
  7. using namespace std;
  8.  
  9. int upisi() {
  10. objekt novi;
  11. cout<<"Vrsta zivotinje: ";
  12. cin.ignore();
  13. cin.getline(novi.vrsta,30);
  14.  
  15. cout<<"Naziv zivotinje: ";
  16. cin.getline(novi.naziv,30);
  17.  
  18. novi.sifra=sifra++;
  19. cout<<"Cijena zivotinje: ";
  20. cin>>novi.cijena;
  21. if(novi.cijena<=0) {
  22. sifra--;
  23. return 0;}
  24.  
  25. cout<<"Datum dostave:"<<endl;
  26. cout<<"Unesite dan: ";
  27. cin>>novi.datum.dan;
  28. if(novi.datum.dan<=0||novi.datum.dan>31) {
  29. sifra--;
  30. return 0;}
  31. cout<<"Unesite mjesec: ";
  32. cin>>novi.datum.mjesec;
  33. if(novi.datum.mjesec<=0||novi.datum.mjesec>12) {
  34. sifra--;
  35. return 0;}
  36. cout<<"Unesite godinu: ";
  37. cin>>novi.datum.godina;
  38. if(novi.datum.godina>2012) {
  39. sifra--;
  40. return 0;}
  41.  
  42. InsertL(novi,br_objekt,LA);
  43. br_objekt++;
  44. return 1;
  45. }
  46.  
  47. void ispis_zivotinja() {
  48. objekt ziv;
  49. int brojac=0;
  50. int p = PreviousL(EndL(LA),LA);
  51. while(brojac<br_objekt){
  52. ziv=RetrieveL(p,LA);
  53. cout<<"=====================\n";
  54. cout<<"Sifra zivotinje: ";
  55. cout<<ziv.sifra<<endl;
  56. cout<<"Vrsta zivotinje: ";
  57. cout<<ziv.vrsta<<endl;
  58. cout<<"Naziv zivotinje: ";
  59. cout<<ziv.naziv<<endl;
  60. cout<<"Cijena zivotinje: ";
  61. cout<<ziv.cijena<<endl;
  62. cout<<"Datum: ";
  63. cout<<ziv.datum.dan<<".";
  64. cout<<ziv.datum.mjesec<<".";
  65. cout<<ziv.datum.godina<<endl;
  66. cout<<"=====================\n";
  67. p = PreviousL(p,LA);
  68. brojac++;
  69. } //while
  70. } //ispis_zivotinja
  71.  
  72. void jesensko_vrijeme() {
  73. int brojac=0;
  74. objekt ziv;
  75. int p = FirstL(LA);
  76. while(p!=EndL(LA)) {
  77. ziv = RetrieveL(p,LA);
  78. if((ziv.datum.godina==2012&&ziv.datum.mjesec==9&&ziv.datum.dan>23)
  79. ||ziv.datum.godina==2012&&ziv.datum.mjesec>9)
  80. {
  81. cout<<"Sifra zivotinje: ";
  82. cout<<ziv.sifra<<endl;
  83. cout<<"Vrsta zivotinje: ";
  84. cout<<ziv.vrsta<<endl;
  85. cout<<"Naziv zivotinje: ";
  86. cout<<ziv.naziv<<endl;
  87. cout<<"Cijena zivotinje: ";
  88. cout<<ziv.cijena<<endl;
  89. cout<<"Datum zivotinje: ";
  90. cout<<ziv.datum.dan;
  91. cout<<"."<<ziv.datum.mjesec;
  92. cout<<"."<<ziv.datum.godina<<endl;
  93. cout<<"================"<<endl;
  94. brojac++;
  95. } //if
  96. p = NextL(p,LA);
  97. } //while
  98. cout<<"Ukupan broj zivotinja dostavljenih nakon 23. rujna 2012: ";
  99. cout<<brojac<<endl<<endl;
  100. } //ispis_datum
  101.  
  102. int obrisi_naziv() {
  103. char naziv[30];
  104. objekt ziv;
  105. cout<<"Unesite naziv zivotinje koju zelite obrisati: ";
  106. cin.ignore();
  107. cin.getline(naziv,30);
  108. int p = LocateL(naziv,LA);
  109. if(p==EndL(LA)) return 0;
  110. else {
  111. DeleteL(p,LA);
  112. br_objekt--;
  113. return 1;
  114. }
  115. }
  116.  
  117. int obrisi_vrstu() {
  118. char vrsta[30];
  119. objekt ziv;
  120. int p;
  121. bool obrisan=0;
  122. v=1;
  123. cout<<"Unesite vrstu zivotinje koju zelite obrisati: ";
  124. cin.ignore();
  125. cin.getline(vrsta,30);
  126. while (LocateL(vrsta,LA)!=EndL(LA)) {
  127. p = LocateL(vrsta,LA);
  128. DeleteL(p,LA);
  129. br_objekt--;
  130. obrisan=1;
  131. }
  132. if(!obrisan) return 0;
  133. else return 1;
  134. }
  135.  
  136. void ispis() {
  137. objekt ziv;
  138. int p=FirstL(LA);
  139. while (p!=EndL(LA)){
  140. ziv=RetrieveL(p,LA);
  141. cout<<"Sifra zivotinje: ";
  142. cout<<ziv.sifra<<endl;
  143. cout<<"Vrsta zivotinje: ";
  144. cout<<ziv.vrsta<<endl;
  145. cout<<"Naziv zivotinje: ";
  146. cout<<ziv.naziv<<endl;
  147. cout<<"Cijena zivotinje: ";
  148. cout<<ziv.cijena<<endl;
  149. cout<<"Datum zivotinje: ";
  150. cout<<ziv.datum.dan<<".";
  151. cout<<ziv.datum.mjesec<<".";
  152. cout<<ziv.datum.godina<<endl;
  153. cout<<"================="<<endl;
  154. p = NextL(p,LA);
  155. }
  156. }
  157.  
  158. void spoji(objekt A[], int poc, int sre, int kra)
  159. {
  160. int n;
  161. int I=poc, J=sre+1, K=0;
  162. objekt *B = new objekt [kra-poc+1];
  163.  
  164. while (I <= sre && J <= kra)
  165. if (A[I].cijena<A[J].cijena)
  166. memcpy(&B[K++], &A[I++], sizeof(objekt) );
  167. else if (A[I].cijena == A[J].cijena)
  168. {
  169. if (strcmp((A[I].naziv),(A[J].naziv))<0)
  170. memcpy(&B[K++], &A[I++], sizeof(objekt) );
  171. else
  172. memcpy(&B[K++], &A[J++], sizeof(objekt) );
  173. }
  174. else
  175. memcpy(&B[K++], &A[J++], sizeof(objekt) );
  176. if (I>sre)
  177. while (J <= kra)
  178. memcpy(&B[K++], &A[J++], sizeof(objekt) );
  179. else
  180. while (I<=sre)
  181. memcpy(&B[K++], &A[I++], sizeof(objekt) );
  182. for (int I = 0; I <=kra-poc; I++)
  183. memcpy(&A[poc+I], &B[I], sizeof(objekt) );
  184. delete []B;
  185. }
  186. void MSort (objekt *A, int poc, int kra)
  187. {
  188. if (poc<kra)
  189. {
  190. int sre=(poc+kra)/2;
  191. MSort(A,poc,sre);
  192. MSort (A, sre+1, kra);
  193. spoji (A,poc,sre,kra);
  194. }
  195. }
  196. void MSort (objekt A[], int N)
  197. {
  198. MSort (A,0,N-1);
  199. }
  200. void sort (lis *LA)
  201. {
  202. objekt novi[1000];
  203. int pozicija=FirstL(LA); //za pok
  204. int n=0;
  205. while (pozicija!=EndL(LA))
  206. {
  207. novi[n]=RetrieveL(pozicija,LA);
  208. pozicija=NextL(pozicija,LA);
  209. n++;
  210. }
  211. MSort (novi,n);
  212. int i=0;
  213. n=n-1;
  214. for(n; n>=i; n--)
  215. {
  216. cout<<endl;
  217. cout << "Sifra: " << novi[n].sifra << endl;
  218. cout << "Naziv: " << novi[n].naziv << endl;
  219. cout << "Vrsta: " << novi[n].vrsta << endl;
  220. cout << "Cijena: " << novi[n].cijena << endl;
  221. cout<< "Datum: " <<novi[n].datum.dan<<".";
  222. cout<<novi[n].datum.mjesec<<".";
  223. cout<<novi[n].datum.godina<<endl;
  224. cout<<endl;
  225. }
  226. }
  227.  
  228. int main() {
  229. int izbor;
  230. InitL(LA);
  231. do {
  232. cout<<"********************IZBORNIK*************************"<<endl;
  233. cout<<"====================================================="<<endl;
  234. cout<<"1. Dodaj zapis"<<endl;
  235. cout<<"2. Ispis liste (od zadnje dodane zivotinje)"<<endl;
  236. cout<<"3. Ispis zivotinja dostavljenih nakon 23. rujna 2012"<<endl;
  237. cout<<"4. Brisanje zivotinje prema nazivu"<<endl;
  238. cout<<"5. Brisanje zivotinje prema vrsti"<<endl;
  239. cout<<"6. Silazno sortiranje po cijeni ili nazivu"<<endl;
  240. cout<<"7. Izlaz iz programa"<<endl;
  241. cout<<"====================================================="<<endl;
  242. cin>>izbor;
  243.  
  244. switch(izbor) {
  245. case 1:
  246. if(upisi()) cout<<"Zapis je zabiljezen.\n";
  247. else cout<<"Pogresan unos\n";
  248. break;
  249.  
  250. case 2:ispis_zivotinja();
  251. break;
  252.  
  253. case 3:jesensko_vrijeme();
  254. break;
  255.  
  256. case 4:
  257. if(obrisi_naziv()) {
  258. cout<<"\nObrisana je.\n\n";
  259. ispis();
  260. }
  261. else cout<<"\nZivotinja nije obrisana.\n\n";
  262. break;
  263.  
  264. case 5:
  265. if(obrisi_vrstu()) {
  266. cout<<"\nObrisana je.\n\n";
  267. ispis();
  268. }
  269. else cout<<"Zivotinja nije uspjesno obrisana.\n\n";
  270. break;
  271. case 6: sort(LA);
  272. break;
  273. }
  274. }while(izbor!=7);
  275.  
  276. system("PAUSE");
  277. return EXIT_SUCCESS;
  278. }

Report this snippet  

You need to login to post a comment.