Posted By

m_kovacek on 11/10/12


Tagged

sort list merge lista adt Strukture podataka ATP


Versions (?)

ATP LISTA- glavni program


 / Published in: C++
 

Program koji evidentira životinje u trgovini sa kućnim ljubimcima. Lista unosom sadržava sljedeće podatke: šifru, vrstu, naziv, cijenu i datum dostave. U programu mogu se : 1.Zapisati nove životinje 2.Ispisati životinje (od posljednje dodane) 3. Pretraživanje i ispis liste prema datumu 4. Brisanje elemenata liste prema nazivu ili vrsti 5. Silazno sortiranje liste prema cijeni i nazivu

  1. #include <iostream>
  2. #include <cstring>
  3. #include <string.h>
  4. //#include "lista_polje.h"
  5. #include "lista_pokazivac.h"
  6. using namespace std;
  7.  
  8. int sifra=1;
  9.  
  10. int zapis(lista *l)
  11. {
  12. zivotinje novi, tekuci;
  13. element pozicija= FirstL(l);
  14.  
  15. cout<<"Unesi sifru zivotinje: ";
  16. cin>>novi.sifra;
  17. cout<<"Unesi vrstu zivotinje: ";
  18. cin.ignore();
  19. cin.getline(novi.vrsta,30);
  20. cout<<"Unesi naziv zivotinje: ";
  21. cin.getline(novi.naziv,30);
  22. cout<<"Unesi cijenu: ";
  23. cin>>novi.cijena;
  24. cout<<"Unesi datum dostave(format godina_mjesec_datum , bez razmaka): ";
  25. cin>>novi.datum;
  26. while (pozicija !=EndL(l))
  27. {
  28. tekuci=RetrieveL(pozicija,l);
  29. if (novi.sifra<tekuci.sifra)
  30. return InsertL(novi,pozicija,l);
  31. pozicija=NextL(pozicija,l);
  32. }
  33. return InsertL(novi,pozicija,l);
  34.  
  35. }
  36.  
  37. void ispis(lista *l)
  38. {
  39. element pozicija=EndL(l);
  40. pozicija=PreviousL(pozicija,l);
  41. while(1)
  42. { zivotinje novi=RetrieveL(pozicija, l);
  43. cout<<endl;
  44. cout<<"Sifra: "<<novi.sifra<<endl;
  45. cout<<"Vrsta: "<<novi.vrsta<<endl;
  46. cout<<"Naziv: "<<novi.naziv<<endl;
  47. cout<<"Cijena: "<<novi.cijena<<endl;
  48. cout<<"Datum dostave: "<<novi.datum<<endl;
  49. cout<<endl;
  50. if(pozicija==FirstL(l))
  51. break;
  52. pozicija=PreviousL(pozicija, l);
  53. }
  54.  
  55.  
  56. }
  57.  
  58. void pretrazivanje (lista *l)
  59. { int brojac=0;
  60. element pozicija=FirstL(l);
  61. do
  62. { zivotinje novi=RetrieveL(pozicija, l);
  63. if (novi.datum > 20120923)
  64. {
  65. cout<<endl;
  66. cout<<"Sifra: "<<novi.sifra<<endl;
  67. cout<<"Vrsta: "<<novi.vrsta<<endl;
  68. cout<<"Naziv: "<<novi.naziv<<endl;
  69. cout<<"Cijena: "<<novi.cijena<<endl;
  70. cout<<"Datum dostave: "<<novi.datum<<endl;
  71. cout<<endl;
  72. brojac++;
  73. }
  74. pozicija=NextL(pozicija,l);
  75. } while(pozicija!=EndL(l));
  76. cout<<"Ukupan broja zivotinja dostavljenih nakon 23.9.2012 : "<<brojac<<endl;
  77. }
  78.  
  79. int brisi(lista *l)
  80. {
  81. int pobrisano=0;
  82. cout<<"Unesi naziv zivotinje koju zelis obrisati: ";
  83. zivotinje x,novi;
  84. cin.ignore();
  85. cin.getline(x.naziv,30);
  86. element lokacija=LocateL(x,l);
  87. element pozicija=FirstL(l);
  88. while(pozicija!=EndL(l))
  89. {
  90. novi=RetrieveL(pozicija,l);
  91. if(strcmp(x.naziv,novi.naziv)==0)
  92. {
  93. DeleteL(pozicija,l);
  94. pobrisano=1;
  95. break;
  96. }
  97. pozicija=NextL(pozicija,l);
  98. }
  99. return pobrisano;
  100. }
  101.  
  102.  
  103.  
  104. int brisi_sve(lista *l)
  105. {
  106. int obrisano=0;
  107. cout<<"Unesi vrstu zivotinje koju zelis obrisati: ";
  108. zivotinje x,novi;
  109. cin.ignore();
  110. cin.getline(x.vrsta,30);
  111. element lokacija=Locatel(x,l);
  112. element pozicija=FirstL(l);
  113. while(pozicija!=EndL(l))
  114. {
  115. novi=RetrieveL(pozicija,l);
  116. if(strcmp(x.vrsta,novi.vrsta)==0)
  117. {
  118.  
  119. DeleteL(pozicija,l) ;
  120. obrisano=1;
  121. #ifdef LISTA_POLJE_H
  122. continue;
  123. #endif
  124. }
  125. pozicija=NextL(pozicija,l);
  126. novi=RetrieveL(pozicija,l);
  127. }
  128. return obrisano;
  129. }
  130.  
  131. void spoji(zivotinje A[], int i, int k, int j)
  132. {
  133. int n;
  134. int I=i, J=k+1, K=0;
  135. zivotinje *B = new zivotinje [j-i+1];
  136.  
  137. while (I <= k && J <= j)
  138. if (A[I].cijena<A[J].cijena)
  139. memcpy(&B[K++], &A[I++], sizeof(zivotinje) );
  140.  
  141. else if (A[I].cijena == A[J].cijena)
  142. {
  143. if (strcmp((A[I].naziv),(A[J].naziv))<0)
  144. memcpy(&B[K++], &A[I++], sizeof(zivotinje) );
  145. else
  146. memcpy(&B[K++], &A[J++], sizeof(zivotinje) );
  147.  
  148. }
  149.  
  150. else
  151. memcpy(&B[K++], &A[J++], sizeof(zivotinje) );
  152.  
  153. if (I>k)
  154. while (J <= j)
  155. memcpy(&B[K++], &A[J++], sizeof(zivotinje) );
  156. else
  157. while (I<=k)
  158. memcpy(&B[K++], &A[I++], sizeof(zivotinje) );
  159.  
  160. for (int I = 0; I <=j-i; I++)
  161. memcpy(&A[i+I], &B[I], sizeof(zivotinje) );
  162.  
  163. delete []B;
  164.  
  165. }
  166.  
  167.  
  168.  
  169. void MSort (zivotinje *A, int i, int j)
  170. {
  171.  
  172. if (i<j)
  173. {
  174. int k=(i+j)/2;
  175. MSort(A,i,k);
  176. MSort (A, k+1, j);
  177. spoji (A,i,k,j);
  178. }
  179.  
  180. }
  181.  
  182.  
  183. void MSort (zivotinje A[], int N)
  184. {
  185. MSort (A,0,N-1);
  186. }
  187.  
  188. void sort (lista *l)
  189. {
  190. zivotinje novi[1000];
  191. element pozicija=FirstL(l);
  192. int n=0;
  193. while (pozicija!=EndL(l))
  194. { novi[n]=RetrieveL(pozicija,l);
  195. pozicija=NextL(pozicija,l);
  196. n++;
  197. }
  198.  
  199. MSort (novi,n);
  200. int i=0;
  201. n=n-1;
  202. for(n; n>=i; n--)
  203. { cout<<endl;
  204. cout << "Sifra: " << novi[n].sifra << endl;
  205. cout << "Naziv: " << novi[n].naziv << endl;
  206. cout << "Vrsta: " << novi[n].vrsta << endl;
  207. cout << "Cijena: " << novi[n].cijena << endl;
  208. cout << "Datum: " << novi[n].datum<< endl;
  209. cout<<endl;
  210.  
  211. }
  212. }
  213.  
  214.  
  215.  
  216.  
  217.  
  218. int main(){
  219. lista *l=InitL(l);
  220. int izbor;
  221. char upit;
  222. do{
  223. cout<<endl;
  224. cout<<"Izbronik"<<endl;
  225. cout<<"1. Zapis zivotinja u listu "<<endl;
  226. cout<<"2. Ispis sadrzaja liste od sifre koja je posljednja dodana"<<endl;
  227. cout<<"3. Pretrazivanje liste i ispis liste"<<endl;
  228. cout<<"4. Brisanje elmenata liste"<<endl;
  229. cout<<"5. Sortiranje sadrzaja liste"<<endl;
  230. cout<<"9. Kraj programa!"<<endl;
  231. cout<<endl;
  232. cin>>izbor;
  233. switch(izbor)
  234. {
  235. case 1:
  236. zapis(l);
  237. break;
  238. case 2:
  239. ispis(l);
  240. break;
  241. case 3:
  242. pretrazivanje(l);
  243. break;
  244.  
  245. case 4:
  246. cout<<"Brisanje pojedinacno prema nazivu (n) ili Brisanje svih prema vrsti (v): ";
  247. cin>>upit;
  248. if(upit=='n')
  249. {
  250. if(brisi(l))
  251. cout<<endl<<"Obrisano"<<endl;
  252.  
  253. else
  254. cout<<endl<<"Nije obrisano"<<endl;
  255.  
  256. break;
  257. }
  258. else if (upit=='v')
  259. {
  260. if(brisi_sve(l))
  261. cout<<endl<<"Obrisano"<<endl;
  262. else
  263. cout<<endl<<"Nije obrisano"<<endl;
  264. break;
  265. }
  266. else
  267. cout<<"krivi unos"<<endl;
  268. break;
  269. case 5: sort(l);
  270. break;
  271. case 9:
  272. break;
  273. }
  274. }while(izbor!=9);
  275.  
  276. return 0;
  277. }

Report this snippet  

Comments

RSS Icon Subscribe to comments
Posted By: dpavlovi on November 11, 2012

Datum se zasniva na jednom integeru, što je drugačije nego u mom programu. Caseovi su pojednostavljeni koliko su mogući, kako bi se dobilo na jednostavnosti samog maina.

You need to login to post a comment.