Posted By

Ahilis001 on 11/12/12


Tagged

lista program pokazivac polje glavni Implementacije zivotinje


Versions (?)

glavni program


 / Published in: C++
 

program koji evidentira zivotinje u ducanu kucnim ljubimcima... struktura zivotinja sadrzi sifru, vrstu, naziv, cijenu i datum... u mainu se nalaze funkcije za unos, ispis, sortiranje i brisanje zivotinja...

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

Report this snippet  

You need to login to post a comment.