Posted By

izavrski2 on 11/12/12


Tagged

sort merge deletel endl retrievel insertl brisanje ispis FirstL NextL PreviousL dodati


Versions (?)

Evidencija zivotinja_glavni program


 / Published in: C++
 

Ovo je program koji evidentira zivotinje u trgovini sa kucnim ljubimcima. Zapis treba sadrzavati sljedece podatke: sifru, vrstu, naziv, cijenu i datum dostave. Omogucena je implementacija liste i pomocu polja i pomocu pokazivaca. Glavne operacije nad listom koje izvrsava program su unos novog elementa, silazno sortiranje po nazivu i cijeni, brisanje po nazivu i cijeni, ispis dostavljenih zivotinja nakon 23. rujna 2012. te ispis zivotinja iz liste od posljednje dodane pa prema prvoj. U program se pozivaju funkcije iz biblioteka listapolje.h i listapokazivac.h koje sam prethodno objavila.

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int sifra;
  5.  
  6. struct podaci {
  7. int sifra, cijena;
  8. string naziv, vrsta;
  9. struct{int d, m,g;}datum;
  10. };
  11.  
  12. //#include "lista_polje.h"
  13. #include "lista_pokazivac.h"
  14.  
  15. int dodati(Lista *zivotinje) {
  16. cout << "Unos podataka za novu zivotinju." << endl;
  17. podaci nova;
  18. nova.sifra = sifra++;
  19. cout << "Vrsta: " << endl;
  20. cin >> nova.vrsta;
  21. cout << "Naziv: " << endl;
  22. cin >> nova.naziv;
  23. cout << "Cijena: " << endl;
  24. cin >> nova.cijena;
  25. cout << "Datum dostave: " << endl;
  26. cin >> nova.datum.d;
  27. cin >> nova.datum.m;
  28. cin >> nova.datum.g;
  29.  
  30.  
  31. if (InsertL(nova, EndL(zivotinje), zivotinje)) {
  32. return 1;
  33. }
  34. else {
  35. return 0;
  36. }
  37. }
  38.  
  39. void ispis(Lista *zivotinje) {
  40.  
  41. element tekuci = EndL(zivotinje);
  42. podaci z;
  43. cout << "Ispis zivotinja od posljednje dodane." << endl<<endl;
  44.  
  45. do {
  46. tekuci = PreviousL(tekuci, zivotinje);
  47. z = RetrieveL(tekuci, zivotinje);
  48. cout << "Sifra: " << z.sifra << endl<<"Vrsta: " << z.vrsta<<endl;
  49. cout << "Naziv: " << z.naziv <<endl<<"Cijena: " << z.cijena<<endl;
  50. cout << "Datum dostave: " << z.datum.d <<"."<<z.datum.m<<"."<<z.datum.g<<"."<< endl << endl;
  51. } while (tekuci != FirstL(zivotinje)); //
  52. cout << "Ispis zavrsen." << endl;
  53. }
  54.  
  55. int brisanje_naziv(Lista *zivotinje) {
  56. cout << "Naziv za brisanje: ";
  57. string unos;
  58. cin >> unos;
  59. int brisanje = 0;
  60. element tekuci; podaci z;
  61.  
  62.  
  63. tekuci = FirstL(zivotinje);
  64.  
  65. while (tekuci != EndL(zivotinje)) {
  66. z = RetrieveL(tekuci, zivotinje);
  67.  
  68. if (z.naziv == unos) {
  69. brisanje = 1;
  70. DeleteL(tekuci, zivotinje);
  71. }
  72. else {
  73. tekuci = NextL(tekuci, zivotinje);
  74. }
  75. }
  76. cout<<"Brisanje gotovo."<<endl;
  77. return brisanje;
  78.  
  79. }
  80.  
  81.  
  82. int brisanje_vrsta(Lista *zivotinje) {
  83. cout << "Vrsta za brisanje: ";
  84. string unos;
  85. cin >> unos;
  86. int brisanje = 0;
  87. element tekuci; podaci z;
  88. tekuci = FirstL(zivotinje);
  89. while (tekuci != EndL(zivotinje)) {
  90. z = RetrieveL(tekuci, zivotinje);
  91. if (z.vrsta == unos) {
  92. brisanje = 1;
  93. DeleteL(tekuci, zivotinje);
  94. }
  95. else {
  96. tekuci = NextL(tekuci, zivotinje);
  97. }
  98. }
  99. cout<<"Brisanje gotovo."<<endl;
  100. return brisanje;
  101.  
  102. }
  103.  
  104. void nadji_dat(Lista *zivotinje) {
  105. element tekuci;
  106.  
  107. tekuci = FirstL(zivotinje);
  108. podaci z;
  109. cout << "Zivotinje dostavljene nakon 23.09.2012." << endl<<endl;
  110. int broj=0;
  111. while (tekuci != EndL(zivotinje)) {
  112. z = RetrieveL(tekuci, zivotinje);
  113.  
  114. if((z.datum.g>2012) ||
  115. ((z.datum.g==2012)&&(z.datum.m >9)) ||
  116. ((z.datum.g==2012)&&(z.datum.m==9)) && (z.datum.d>23))
  117. {
  118. cout << "Sifra: " << z.sifra << endl<<"Vrsta: " << z.vrsta<<endl;
  119. cout << "Naziv: " << z.naziv <<endl<<"Cijena: " << z.cijena<<endl;
  120. cout << "Datum dostave: " << z.datum.d <<"."<<z.datum.m<<"."<<z.datum.g<<"."<< endl << endl;
  121. broj++;
  122. }
  123. tekuci = NextL(tekuci, zivotinje);
  124. }
  125. cout << "Trazenje gotovo." << endl;
  126. cout<<"Broj nadjenih zivotinja: "<<broj<<endl;
  127. }
  128.  
  129.  
  130. void merge_sort_cijena(podaci polje[], int lijevi, int desni) {
  131. int sredina = (lijevi + desni) / 2;
  132. podaci temp;
  133.  
  134. if (desni - lijevi == 1) {
  135. if (polje[desni].cijena > polje[lijevi].cijena) {
  136. temp = polje[desni];
  137. polje[desni] = polje[lijevi];
  138. polje[lijevi] = temp;
  139. return;
  140. }
  141. }
  142. else if (desni == lijevi) {
  143. return;
  144. }
  145. else {
  146.  
  147. merge_sort_cijena(polje, lijevi, sredina);
  148. merge_sort_cijena(polje, sredina +1, desni);
  149.  
  150. int size_pomocno = desni-lijevi +1;
  151. podaci *polje_pomocno = new podaci[size_pomocno];
  152. int l = lijevi;
  153. int s = sredina +1;
  154.  
  155. for (int i = 0; i < size_pomocno; i++) {
  156. if (l == sredina+1) {
  157. polje_pomocno[i] = polje[s]; s++;
  158. continue;
  159. }
  160. if (s == desni +1) {
  161. polje_pomocno[i] = polje[l]; l++;
  162. continue;
  163. }
  164.  
  165. if (polje[l].cijena > polje[s].cijena) {
  166. polje_pomocno[i] = polje[l];
  167. l++;
  168. }
  169. else {
  170. polje_pomocno[i] = polje[s];
  171. s++;
  172. }
  173. }
  174.  
  175. int j = 0;
  176. for (int i = lijevi; i <= desni; i++) {
  177. polje[i] = polje_pomocno[j]; j++;
  178. }
  179. }
  180. }
  181.  
  182. void merge_sort_naziv(podaci polje[], int lijevi, int desni) {
  183. int sredina = (lijevi + desni) / 2;
  184. podaci temp;
  185.  
  186. if (desni - lijevi == 1) {
  187. if (polje[desni].naziv > polje[lijevi].naziv) {
  188. temp = polje[desni];
  189. polje[desni] = polje[lijevi];
  190. polje[lijevi] = temp;
  191. return;
  192. }
  193. }
  194. else if (desni == lijevi) {
  195. return;
  196. }
  197. else {
  198.  
  199. merge_sort_naziv(polje, lijevi, sredina);
  200. merge_sort_naziv(polje, sredina +1, desni);
  201.  
  202. int size_pomocno = desni-lijevi +1;
  203. podaci *polje_pomocno = new podaci[size_pomocno];
  204. int l = lijevi;
  205. int s = sredina +1;
  206.  
  207. for (int i = 0; i < size_pomocno; i++) {
  208. if (l == sredina+1) {
  209. polje_pomocno[i] = polje[s]; s++;
  210. continue;
  211. }
  212. if (s == desni +1) {
  213. polje_pomocno[i] = polje[l]; l++;
  214. continue;
  215. }
  216.  
  217. if (polje[l].naziv > polje[s].naziv) {
  218. polje_pomocno[i] = polje[l];
  219. l++;
  220. }
  221. else {
  222. polje_pomocno[i] = polje[s];
  223. s++;
  224. }
  225. }
  226.  
  227. int j = 0;
  228. for (int i = lijevi; i <= desni; i++) {
  229. polje[i] = polje_pomocno[j]; j++;
  230. }
  231. }
  232. }
  233.  
  234.  
  235. void sort_cijena(Lista *zivotinje) {
  236. cout << "Sortiramo po cijeni." << endl;
  237.  
  238. int broj = 0;
  239. element tekuci; podaci z;
  240. tekuci = FirstL(zivotinje);
  241. while (tekuci != EndL(zivotinje)) {
  242. broj++; tekuci = NextL(tekuci, zivotinje);
  243. }
  244.  
  245. podaci *polje = new podaci[broj];
  246.  
  247. tekuci = FirstL(zivotinje);
  248. for (int i = 0; i < broj; i++) {
  249. z = RetrieveL(tekuci, zivotinje);
  250. polje[i] = z;
  251. tekuci = NextL(tekuci, zivotinje);
  252. }
  253.  
  254. merge_sort_cijena(polje, 0, broj-1);
  255.  
  256. for (int i = 0; i < broj; i++) {
  257. cout << "Sifra: " << polje[i].sifra <<endl<< "Vrsta: " << polje[i].vrsta<<endl;
  258. cout << "Naziv: " << polje[i].naziv <<endl<< "Cijena: " << polje[i].cijena<<endl;
  259. cout << "Datum dostave: " << polje[i].datum.d <<"."<<polje[i].datum.m<<"."<<polje[i].datum.g<<"."<< endl << endl;
  260. }
  261. }
  262.  
  263. void sort_naziv(Lista *zivotinje) {
  264. cout << "Sortiramo po nazivu." << endl;
  265.  
  266. int broj = 0;
  267. element tekuci; podaci z;
  268. tekuci = FirstL(zivotinje);
  269. while (tekuci != EndL(zivotinje)) {
  270. broj++; tekuci = NextL(tekuci, zivotinje);
  271. }
  272.  
  273. podaci *polje = new podaci[broj];
  274.  
  275. tekuci = FirstL(zivotinje);
  276. for (int i = 0; i < broj; i++) {
  277. z = RetrieveL(tekuci, zivotinje);
  278. polje[i] = z;
  279. tekuci = NextL(tekuci, zivotinje);
  280. }
  281.  
  282. merge_sort_naziv(polje, 0, broj-1);
  283.  
  284. for (int i = 0; i < broj; i++) {
  285. cout << "Sifra: " << polje[i].sifra <<endl<< "Vrsta: " << polje[i].vrsta<<endl;
  286. cout << "Naziv: " << polje[i].naziv <<endl<< "Cijena: " << polje[i].cijena<<endl;
  287. cout << "Datum dostave: " << polje[i].datum.d <<"."<<polje[i].datum.m<<"."<<polje[i].datum.g<<"."<< endl << endl;
  288. }
  289. }
  290.  
  291. int main() {
  292.  
  293. Lista zivotinje;
  294. InitL(&zivotinje);
  295.  
  296. sifra = 100;
  297.  
  298. int izb;
  299. do{
  300. cout<<endl<<"------------------IZBORNIK------------------"<<endl;
  301. cout<<"1. Ispis sadrzaja liste"<<endl
  302. <<"2. Unos nove zivotinje i ispis sadrzaja liste"<<endl
  303. <<"3. Dostavljeno nakon 23.09.2012."<<endl
  304. <<"4. Brisanje prema nazivu zivotinje"<<endl
  305. <<"5. Brisanje prema vrsti zivotinje"<<endl
  306. <<"6. Sortiranje prema cijeni(silazno)"<<endl
  307. <<"7. Sortiranje prema nazivu(silazno)"<<endl
  308. <<"0. Izlaz iz programa"<<endl
  309. <<"---------------------------------------------";
  310. cout<<endl<<"Vas odabir: ";
  311. cin>>izb;
  312. switch(izb) {
  313. case 1: system("cls");ispis(&zivotinje);break;
  314.  
  315. case 2: dodati(&zivotinje);system("cls");
  316. ispis(&zivotinje);break;
  317.  
  318. case 3: system("cls");nadji_dat(&zivotinje);break;
  319.  
  320. case 4: system("cls");brisanje_naziv(&zivotinje);break;
  321.  
  322. case 5: system("cls");brisanje_vrsta(&zivotinje);break;
  323.  
  324. case 6: system("cls");sort_cijena(&zivotinje);break;
  325. case 7: system("cls");sort_naziv(&zivotinje);break;
  326. }
  327. }while(izb!=0);
  328.  
  329. system("pause");
  330. return 0;
  331. }

Report this snippet  

You need to login to post a comment.