Posted By

MNuli on 11/11/12


Tagged

lista sp pokazivac Strukture podataka polje implementacija zadatak1


Versions (?)

Strukture podataka - Main program


 / Published in: C++
 

Main program - evidencija zivotinja u trgovini s kucnim ljubimcima

  1. #include <iostream>
  2. #include <cstring>
  3. //#include "lista_polje.h"
  4. #include "lista_pokazivac.h"
  5. using namespace std;
  6.  
  7. //FUNKCIJA -------- Dodavanje zivotinje prema rastucoj sifri ----------------
  8. int dodajZivotinju() {
  9. zivotinja novi;
  10.  
  11. novi.sifra = sifra++;
  12.  
  13. cout<<"Vrsta (slova): ";
  14. cin.ignore();
  15. cin.getline(novi.vrsta, 64);
  16.  
  17. cout<<"Naziv (slova): ";
  18. cin.getline(novi.naziv, 64);
  19.  
  20. cout<<"Cijena (decimalni broj s .): ";
  21. cin>>novi.cijena;
  22. if(novi.cijena <= 0) {
  23. sifra--;
  24. return 0;
  25. }
  26.  
  27. cout<<"Unesite datum dostave:\n";
  28. cout<<"Dan (cijeli broj): ";
  29. cin>>novi.datum.dan;
  30. if(novi.datum.dan <= 0 || novi.datum.dan > 31) {
  31. sifra--;
  32. return 0;
  33. }
  34. cout<<"Mjesec (slova): ";
  35. cin.ignore();
  36. cin.getline(novi.datum.mjesec, 16);
  37. cout<<"Godina (cijeli broj): ";
  38. cin>>novi.datum.godina;
  39. if(novi.datum.godina < 1900) {
  40. sifra--;
  41. return 0;
  42. }
  43.  
  44. InsertL(novi, brojElemenata, lista);
  45. brojElemenata ++;
  46. return 1;
  47. }
  48. //KRAJ FUNKCIJA -------- Dodavanje zivotinje prema rastucoj sifri ----------------
  49.  
  50. //FUNKCIJA -------- Ispisivanje zivotinja pocevsi od sifre posljednje dodane zivotinje ----------------
  51. void ispisiOdKraja() {
  52. int sifraZadnja=1;
  53. zivotinja a, b;
  54. int k = 0;
  55.  
  56. int p = PreviousL(EndL(lista), lista);
  57.  
  58. while(k < brojElemenata){
  59. b = RetrieveL(p, lista);
  60. if(sifraZadnja < b.sifra)
  61. sifraZadnja = b.sifra;
  62. p = PreviousL(p, lista);
  63. k++;
  64. }
  65. cout<<"Sifra zadnja: "<<sifraZadnja<<endl;
  66.  
  67. p = PreviousL(EndL(lista), lista);
  68. k = sifraZadnja;
  69. while(k >0){
  70. a = RetrieveL(p, lista);
  71. if(a.sifra == k) {
  72. cout<<"Sifra: "<<a.sifra<<endl;
  73. cout<<"Vrsta: "<<a.vrsta<<endl;
  74. cout<<"Naziv: "<<a.naziv<<endl;
  75. cout<<"Cijena: "<<a.cijena<<endl;
  76. cout<<"Datum: "<<a.datum.dan<<".";
  77. cout<<a.datum.mjesec<<"."<<a.datum.godina<<".\n";
  78. cout<<"-------------------------------\n";
  79. p = PreviousL(EndL(lista), lista);
  80. k--;
  81. }
  82. else {
  83. p = PreviousL(p, lista);
  84. if(p == -1) {
  85. k--;
  86. p = PreviousL(EndL(lista), lista);
  87. }
  88. }
  89. }
  90. }
  91. //KRAJ FUNKCIJA -------- Ispisivanje zivotinja pocevsi od sifre posljednje dodane zivotinje ----------------
  92.  
  93. //FUNKCIJA -------- Ispisivanje zivotinja dostavljenih nakon 23. rujna 2012. ----------------
  94. void ispisiPosljeRujan() {
  95. int br = 0;
  96. zivotinja a;
  97. int p = FirstL(lista);
  98. while(p != EndL(lista)) {
  99. a = RetrieveL(p, lista);
  100. if((a.datum.godina == 2012) && ( (!strcmp(a.datum.mjesec, "rujan") && (a.datum.dan > 23)) || (!strcmp(a.datum.mjesec,"listopad") || !strcmp(a.datum.mjesec,"studeni") || !strcmp(a.datum.mjesec,"prosinac")) )) {
  101. br++;
  102. cout<<"Sifra: "<<a.sifra<<endl;
  103. cout<<"Vrsta: "<<a.vrsta<<endl;
  104. cout<<"Naziv: "<<a.naziv<<endl;
  105. cout<<"Cijena: "<<a.cijena<<endl;
  106. cout<<"Datum: "<<a.datum.dan<<"."<<a.datum.mjesec<<"."<<a.datum.godina<<".\n";
  107. cout<<"------------------------------\n";
  108.  
  109. }
  110. if(a.datum.godina > 2012) {
  111. br++;
  112. cout<<"Sifra: "<<a.sifra<<endl;
  113. cout<<"Vrsta: "<<a.vrsta<<endl;
  114. cout<<"Naziv: "<<a.naziv<<endl;
  115. cout<<"Cijena: "<<a.cijena<<endl;
  116. cout<<"Datum: "<<a.datum.dan<<"."<<a.datum.mjesec<<"."<<a.datum.godina<<".\n";
  117. cout<<"------------------------------\n";
  118. }
  119. p = NextL(p, lista);
  120. }
  121. cout<<"Broj pronadjenih zivotinja: "<<br<<endl<<endl;
  122. }
  123. //KRAJ FUNKCIJA -------- Ispisivanje zivotinja dostavljenih nakon 23. rujna 2012. ----------------
  124.  
  125. //FUNKCIJA -------- Brisanje zivotinja iz liste, po nazivu zivotinje ----------------
  126. int brisiPoNazivuZivotinje() {
  127. char naziv[64];
  128. zivotinja a;
  129. cout<<"Unesite naziv zivotinje: ";
  130. cin.ignore();
  131. cin.getline(naziv, 64);
  132. int p = LocateL(naziv,lista);
  133. if(p==EndL(lista)) return 0;
  134. else {
  135. DeleteL(p, lista);
  136. brojElemenata--;
  137. return 1;
  138. }
  139. }
  140. //KRAJ FUNKCIJA -------- Brisanje zivotinja iz liste, po nazivu zivotinje ----------------
  141.  
  142. //FUNKCIJA -------- Brisanje zivotinja iz liste, po vrsti zivotinje ----------------
  143. int brisiPoVrstiZivotinje() {
  144. char vrsta[64];
  145. int p;
  146. bool uspjeh = 0;
  147. cout<<"Brisi vrstu: ";
  148. cin.ignore();
  149. cin.getline(vrsta,64);
  150. while (LocateL(vrsta,lista) != EndL(lista)) {
  151. p = LocateL(vrsta,lista);
  152. DeleteL(p, lista);
  153. brojElemenata--;
  154. uspjeh=1;
  155. }
  156. if(!uspjeh) return 0;
  157. else return 1;
  158. }
  159. //KRAJ FUNKCIJA -------- Brisanje zivotinja iz liste, po vrsti zivotinje ----------------
  160.  
  161. //FUNKCIJA -------- Automatsko popunjavanje liste s nekim testnim zivotinjama za ubrzavanje testiranje ----------------
  162. int dodajAutomatskiZivotinje() {
  163. zivotinja novi;
  164.  
  165. //Element 1 (Zivotinja 1)
  166. novi.sifra = sifra++;
  167. strncpy(novi.vrsta, "papiga", sizeof(novi.vrsta));
  168. strncpy(novi.naziv, "Kokolo", sizeof(novi.vrsta));
  169. novi.cijena = 699.99;
  170. novi.datum.dan = 2;
  171. strncpy(novi.datum.mjesec, "studeni", sizeof(novi.datum.mjesec));
  172. novi.datum.godina = 2012;
  173. InsertL(novi,brojElemenata,lista);
  174. brojElemenata ++;
  175.  
  176. //Element 2 (Zivotinja 2)
  177. novi.sifra = sifra++;
  178. strncpy(novi.vrsta, "pas", sizeof(novi.vrsta));
  179. strncpy(novi.naziv, "Riki", sizeof(novi.vrsta));
  180. novi.cijena = 2299.99;
  181. novi.datum.dan = 5;
  182. strncpy(novi.datum.mjesec, "sijecanj", sizeof(novi.datum.mjesec));
  183. novi.datum.godina = 2013;
  184. InsertL(novi,brojElemenata,lista);
  185. brojElemenata ++;
  186.  
  187. //Element 3 (Zivotinja 3)
  188. novi.sifra = sifra++;
  189. strncpy(novi.vrsta, "macka", sizeof(novi.vrsta));
  190. strncpy(novi.naziv, "Mica", sizeof(novi.vrsta));
  191. novi.cijena = 299.99;
  192. novi.datum.dan = 4;
  193. strncpy(novi.datum.mjesec, "kolovoz", sizeof(novi.datum.mjesec));
  194. novi.datum.godina = 2012;
  195. InsertL(novi,brojElemenata,lista);
  196. brojElemenata ++;
  197.  
  198. //Element 4 (Zivotinja 5)
  199. novi.sifra = sifra++;
  200. strncpy(novi.vrsta, "papiga", sizeof(novi.vrsta));
  201. strncpy(novi.naziv, "Aron", sizeof(novi.vrsta));
  202. novi.cijena = 1299.99;
  203. novi.datum.dan = 11;
  204. strncpy(novi.datum.mjesec, "prosinac", sizeof(novi.datum.mjesec));
  205. novi.datum.godina = 2012;
  206. InsertL(novi,brojElemenata,lista);
  207. brojElemenata ++;
  208.  
  209. //Element 5 (Zivotinja 5)
  210. novi.sifra = sifra++;
  211. strncpy(novi.vrsta, "hrcak", sizeof(novi.vrsta));
  212. strncpy(novi.naziv, "Hrki", sizeof(novi.vrsta));
  213. novi.cijena = 499.99;
  214. novi.datum.dan = 28;
  215. strncpy(novi.datum.mjesec, "listopad", sizeof(novi.datum.mjesec));
  216. novi.datum.godina = 2012;
  217. InsertL(novi,brojElemenata,lista);
  218. brojElemenata ++;
  219.  
  220. return 1;
  221. }
  222. //KRAJ FUNKCIJA -------- Automatsko popunjavanje liste s nekim testnim zivotinjama za ubrzavanje testiranje ----------------
  223.  
  224. //FUNKCIJA -------- Ispisivanje liste zivotinja od prve dodanje ----------------
  225. void ispisiOdPocetka() {
  226. zivotinja a;
  227. int p = FirstL(lista);
  228. while (p != EndL(lista)){
  229. a = RetrieveL(p,lista);
  230. cout<<"Sifra: "<<a.sifra<<endl;
  231. cout<<"Vrsta: "<<a.vrsta<<endl;
  232. cout<<"Naziv: "<<a.naziv<<endl;
  233. cout<<"Cijena: "<<a.cijena<<endl;
  234. cout<<"Datum: "<<a.datum.dan<<".";
  235. cout<<a.datum.mjesec<<"."<<a.datum.godina<<".\n";
  236. cout<<"-------------------------------\n";
  237. p = NextL(p, lista);
  238. }
  239. }
  240. //KRAJ FUNKCIJA -------- Ispisivanje liste zivotinja od prve dodanje ----------------
  241.  
  242.  
  243. //POMOCNA FUNKCIJA -------- Algoritam za sortiranje i ----------------
  244. void spajanje(int i, int k, int j) {
  245. int I = i, J = k + 1, K = 0;
  246. zivotinja *b = new zivotinja [j - i + 1];
  247. zivotinja prvi, drugi;
  248.  
  249. while(I <= k && J <= j){
  250. prvi = RetrieveL(I, lista);
  251. drugi = RetrieveL(J, lista);
  252. if(prvi.cijena > drugi.cijena) {
  253. b[K++] = prvi;
  254. I++;
  255. }
  256. else if(prvi.cijena < drugi.cijena){
  257. b[K++] = drugi;
  258. J++;
  259. }
  260. else if(strcmp(prvi.naziv, drugi.naziv) == -1) {
  261. b[K++] = drugi;
  262. J++;
  263. }
  264. else {
  265. b[K++] = prvi;
  266. I++;
  267. }
  268. }
  269. if(I>k) while(J<=j) {
  270. drugi=RetrieveL(J, lista);
  271. b[K++] = drugi;
  272. J++;
  273. }
  274. else while(I<=k) {
  275. prvi=RetrieveL(I, lista);
  276. b[K++] = prvi;
  277. I++;
  278. }
  279. for(int I=0; I<=j-i; I++) Vrati(b[I], i+I, lista);
  280. delete [] b;
  281. }
  282. //KAJ POMOCNA FUNKCIJA -------- Algoritam za sortiranje i spajanje ----------------
  283.  
  284. //POMOCNA FUNKCIJA -------- Za dijeljenje liste na pola i pozivanje algoritma za spajanje i sortiranje ----------------
  285. void mergeSort(int i, int j) {
  286. if(i < j) {
  287. int k=(i + j) / 2;
  288. mergeSort(i, k);
  289. mergeSort(k+1, j);
  290. spajanje(i, k, j);
  291. }
  292. }
  293. //KRAJ POMOCNA FUNKCIJA -------- Za dijeljenje liste na pola i pozivanje algoritma za spajanje i sortiranje ----------------
  294.  
  295. //FUNKCIJA -------- Sortiranje liste zivotinja po cijeni i nazivu ----------------
  296. void mergeSortiranje() {
  297. mergeSort(0, brojElemenata - 1);
  298. }
  299. //KRAJ FUNKCIJA -------- Sortiranje liste zivotinja po cijeni i nazivu ----------------
  300.  
  301.  
  302.  
  303. //GLAVNI PROGRAM ----------------
  304. int main() {
  305. int izbornik;
  306.  
  307. //Inicijalizacija liste, ako je preko polja onda postavljanje cursora na 0, a ako je preko pokazivaca onda postavljanje sljedeceg na NULL
  308. InitL(lista);
  309.  
  310. do {
  311. cout<<"0. Izlaz iz programa\n";
  312. cout<<"1. Dodaj zivotinju\n";
  313. cout<<"2. Ispisivanje zivotinja pocevsi od sifre posljednje dodane zivotinje\n";
  314. cout<<"3. Ispisivanje zivotinja dostavljenih nakon 23. rujna 2012.\n";
  315. cout<<"4. Brisanje zivotinja iz liste, po nazivu zivotinje\n";
  316. cout<<"5. Brisanje zivotinja iz liste, po vrsti zivotinje\n";
  317. cout<<"6. Silazno sortiranje po cijeni (ili nazivu)\n\n";
  318.  
  319. cout<<"8. Ispisivanje od pocetka do kraja liste\n";
  320. cout<<"9. Unesi automatski neke testne podatke i ispisi listu (ubrzavanje testiranja)\n\n";
  321.  
  322. cout<<"Odabrano: ";
  323. cin>>izbornik;
  324.  
  325. cout<<"\n";
  326.  
  327. switch(izbornik) {
  328. case 1: if(dodajZivotinju()) cout<<"Zapis dodan.\n\n";
  329. else cout<<"Pogreska\n\n";
  330. break;
  331.  
  332. case 2: ispisiOdKraja();
  333. break;
  334.  
  335. case 3: ispisiPosljeRujan();
  336. break;
  337.  
  338. case 4: if(brisiPoNazivuZivotinje()) {
  339. cout<<"Zivotinja obrisana.\n\n";
  340. }
  341. else cout<<"Zivotinja nije obrisana.\n\n";
  342. break;
  343.  
  344. case 5: if(brisiPoVrstiZivotinje()) {
  345. cout<<"Vrsta obrisana.\n\n";
  346. }
  347. else cout<<"Vrsta nije obrisana.\n\n";
  348. break;
  349.  
  350. case 6: mergeSortiranje();
  351. ispisiOdPocetka();
  352. break;
  353.  
  354. case 8: ispisiOdPocetka();
  355. break;
  356.  
  357. case 9: if(dodajAutomatskiZivotinje()) {
  358. cout<<"Zivotinje automatski dodane.\n\n";
  359. ispisiOdPocetka();
  360. }
  361. else cout<<"Zivotinje nisu automatski dodane.\n\n";
  362. break;
  363. }
  364. cout<<"\n: : : : : : : : : : : : : : : : : : : : : : : : : : : : \n\n";
  365. cout<<" START\n";
  366. cout<<"\n: : : : : : : : : : : : : : : : : : : : : : : : : : : : \n\n";
  367. }
  368. while(izbornik != 0);
  369.  
  370. DeleteAll(lista);
  371.  
  372. //system("pause");
  373. return 0;
  374. }
  375. //KRAJ GLAVNI PROGRAM ----------------

Report this snippet  

Comments

RSS Icon Subscribe to comments
Posted By: majcen555 on November 12, 2012

Super napravljeno kolega, razlikuje nam se kod u merge sortu, ali oba su dobra. Pohvala na dodavanju automatske liste.

You need to login to post a comment.