Posted By

mstarjac on 11/12/12


Tagged


Versions (?)

zadatak


 / Published in: C++
 

kod zadatka

  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <string.h>
  4. //#include "pokazivac.h"
  5. #include "polje.h"
  6. using namespace std;
  7.  
  8. bool pass=var();
  9.  
  10. int dodajZivotinju(animal *list){
  11. podaci nova;
  12. cout<<"Dodaj novu zivotinju:"<<endl
  13. <<"----------------------------------------------------------------"<<endl
  14. <<"\tSifra:\t\t\t";
  15. cin>>nova.sifra;
  16. cout<<"\tVrsta:\t\t\t";
  17. cin.ignore();
  18. cin.getline(nova.vrsta,40);
  19. cout<<"\tNaziv:\t\t\t";
  20. cin.getline(nova.naziv,40);
  21. cout<<"Unesite datum:\n";
  22. do{
  23. cout<<"\tDan:\t\t\t";
  24. cin>>nova.dan;
  25. }while(nova.dan>31||nova.dan<1);
  26. do{
  27. cout<<"\tMjesec:\t\t\t";
  28. cin>>nova.mj;
  29. }while(nova.mj>12||nova.mj<1);
  30. cout<<"\tGodina:\t\t\t";
  31. cin>>nova.godina;
  32. cout<<"\tCijena:\t\t\t";
  33. cin>>nova.cijena;
  34. cout<<"----------------------------------------------------------------"<<endl;
  35.  
  36. if(!(list->sljedeci))
  37. {
  38. InsertL(nova,EndL(list),list);
  39. return 1;
  40. }
  41.  
  42. else{
  43. element i=FirstL(list);
  44. InsertL(nova,i,list);
  45. return 1;
  46. }
  47. return 0;
  48. }
  49.  
  50. void ispisiElement(podaci zivotinja){
  51. cout<<endl
  52. <<"\tSifra:\t\t\t"<<zivotinja.sifra<<endl//-------------
  53. <<"\tVrsta:\t\t\t"<<zivotinja.vrsta<<endl//-------------
  54. <<"\tNaziv:\t\t\t"<<zivotinja.naziv<<endl//-------------
  55. <<"\tGodina uvoza:\t\t"<<zivotinja.dan<<"."<<zivotinja.mj<<"."<<zivotinja.godina<<"."<<endl
  56. <<"\tCijena:\t\t\t"<<zivotinja.cijena<<endl;
  57. }
  58.  
  59. void ispis(animal *lista)
  60. {
  61. if(!(lista->sljedeci))
  62. {
  63. cout<<"* Pogreska: Lista je prazna!"<<endl;
  64. return;
  65. }
  66. podaci zivotinja;
  67. element i=FirstL(lista);
  68. cout<<"Ispis od zadnje dodane zivotinje:"<<endl;
  69. cout<<"----------------------------------------------------------------"<<endl;
  70. while(i!=EndL(lista))
  71. {
  72. zivotinja=RetrieveL(i,lista);
  73. i=NextL(i,lista);
  74. ispisiElement(zivotinja);
  75. }
  76. cout<<endl
  77. <<"----------------------------------------------------------------"<<endl;
  78. };
  79.  
  80. //---------------------------------------------------------------------------------------------------------------------------------------
  81. void ispis2(animal *lista)
  82. {
  83. if(!(lista->sljedeci))
  84. {
  85. cout<<"* Pogreska: Lista je prazna!"<<endl;
  86. return;
  87. }
  88. podaci zivotinja;
  89. element i=FirstL(lista);
  90. int broj=0;
  91. cout<<"Ispis zivotinja dodanih nakon 23.9.2012. :"<<endl;
  92. cout<<"----------------------------------------------------------------"<<endl;
  93. while(i!=EndL(lista))
  94. {
  95. zivotinja=RetrieveL(i,lista);
  96. i=NextL(i,lista);
  97. if((zivotinja.godina>2012)||((zivotinja.mj>=9)&&(zivotinja.godina>=2012))||((zivotinja.dan>=23)&&(zivotinja.godina>2012))){
  98. ispisiElement(zivotinja);
  99. broj++;
  100. }
  101. }
  102. cout<<endl
  103. <<"----------------------------------------------------------------\n"
  104. <<"Broj zivotinja dodanih nakon 23.9.2012. : "<<broj<<endl<<endl;
  105. };
  106. //---------------------------------------------------------------------------------------------------------------------------------------
  107.  
  108. int brisanje(animal *lista, short tip)
  109. {
  110. char naziv[42],vrsta[42];
  111. if(!tip){
  112. cout<<"Unesite naziv zivotinje koju zelite obrisati: ";
  113. cin.ignore();
  114. cin.getline(naziv,42);
  115. }
  116. if(tip){
  117. cout<<"Unesite vrstu zivotinje koju zelite obrisati: ";
  118. cin.ignore();
  119. cin.getline(vrsta,42);
  120. }
  121.  
  122. element i=FirstL(lista),brisi;
  123. podaci zivotinja,trazi;
  124.  
  125.  
  126. while(i!=EndL(lista))
  127. {
  128.  
  129. trazi=RetrieveL(i,lista);
  130.  
  131. if(!strcmp(naziv,trazi.naziv) || !strcmp(vrsta,trazi.vrsta)){
  132.  
  133. if(!tip)
  134. brisi=LocateL(0,naziv,lista);
  135. if(tip)
  136. brisi=LocateL(0,vrsta,lista);
  137.  
  138. if(brisi==EndL(lista)) return 0;
  139. zivotinja=RetrieveL(brisi,lista);
  140. if(!strcmp(naziv,trazi.naziv) || !strcmp(vrsta,trazi.vrsta)){
  141. cout<<endl
  142. <<"Obrisan je sljedeci zapis: "<<endl
  143. <<"----------------------------------------------------------------"<<endl;
  144. ispisiElement(zivotinja);
  145. cout<<endl
  146. <<"----------------------------------------------------------------"<<endl;
  147. DeleteL(brisi,lista);
  148.  
  149. if(!i)
  150. return 1;
  151. }
  152. }//
  153. i=NextL(i,lista);
  154. }
  155. return 0;
  156. };
  157.  
  158. int brisanjePolje(animal *lista, short tip)
  159. {
  160. char naziv[42],vrsta[42];
  161. if(!tip){
  162. cout<<"Unesite naziv zivotinje koju zelite obrisati: ";
  163. cin.ignore();
  164. cin.getline(naziv,42);
  165. }
  166. if(tip){
  167. cout<<"Unesite vrstu zivotinje koju zelite obrisati: ";
  168. cin.ignore();
  169. cin.getline(vrsta,42);
  170. }
  171.  
  172. element i=EndL(lista),brisi;
  173. podaci zivotinja,trazi;
  174.  
  175.  
  176. while(i!=FirstL(lista))
  177. {
  178.  
  179. trazi=RetrieveL(i,lista);
  180.  
  181. if(!strcmp(naziv,trazi.naziv) || !strcmp(vrsta,trazi.vrsta)){
  182.  
  183. if(!tip)
  184. brisi=LocateL(0,naziv,lista);
  185. if(tip)
  186. brisi=LocateL(0,vrsta,lista);
  187.  
  188. if(brisi==EndL(lista)) return 0;
  189. zivotinja=RetrieveL(brisi,lista);
  190. if(!strcmp(naziv,trazi.naziv) || !strcmp(vrsta,trazi.vrsta)){
  191. cout<<endl
  192. <<"Obrisan je sljedeci zapis: "<<endl
  193. <<"----------------------------------------------------------------"<<endl;
  194. ispisiElement(zivotinja);
  195. cout<<endl
  196. <<"----------------------------------------------------------------"<<endl;
  197. DeleteL(brisi,lista);
  198.  
  199. if(!i)
  200. return 1;
  201. }
  202. }// end if
  203. i=PreviousL(i,lista);
  204. }
  205. return 0;
  206. };
  207. //---------------------------------------------------------------------------------------------------------------------------------------
  208. bool sortirano=false;
  209. void merge (podaci A[], int i, int k, int j){
  210. int I=i, J=k+1, K=0;
  211. podaci *B=new podaci [j-i+1];
  212. while (I<=k&&J<=j)
  213. if (sortirano){
  214. if ((A[I].cijena<A[J].cijena)||((A[I].cijena==A[J].cijena)&&(A[I].naziv[0]<A[J].naziv[0])))
  215. memcpy(&B[K++],&A[I++],sizeof(A[I++]));
  216. else
  217. memcpy(&B[K++],&A[J++],sizeof(A[J++]));}
  218. else{
  219. if (A[I].sifra<=A[J].sifra)
  220. memcpy(&B[K++],&A[I++],sizeof(A[I++]));
  221. else
  222. memcpy(&B[K++],&A[J++],sizeof(A[J++]));}
  223. if (I>k)
  224. while (J<=j)
  225. memcpy(&B[K++],&A[J++],sizeof(A[J++]));
  226. else
  227. while (I<=k)
  228. memcpy(&B[K++],&A[I++],sizeof(A[I++]));
  229. for (int I=0;I<=j-i;I++)
  230. memcpy(&A[i+I],&B[I],sizeof(B[I]));
  231. delete []B;
  232. }
  233.  
  234. void MSort (podaci A[],int i,int j){
  235. if (i<j){
  236. int k=(i+j)/2;
  237. MSort(A,i,k);
  238. MSort(A,k+1,j);
  239. merge(A,i,k,j);}
  240. }
  241.  
  242. void MSort (podaci A[],int N){
  243. MSort (A,0,N-1);
  244. }
  245.  
  246. void sort (podaci polje[],animal *lista){
  247. if (FirstL(lista) == EndL(lista)) {
  248. system("cls");
  249. cout<<"Error!\n";
  250. system ("pause");
  251. return;}
  252. element z=FirstL(lista);
  253. int i = 0;
  254. element tekuci=FirstL(lista);
  255. while (z!=EndL(lista)){
  256. if (tekuci == EndL(lista)) break;//dodano
  257. podaci trenutni=RetrieveL(tekuci,lista);
  258. polje[i].sifra=trenutni.sifra;
  259. strcpy (polje[i].vrsta,trenutni.vrsta);
  260. strcpy (polje[i].naziv,trenutni.naziv);
  261. polje[i].cijena=trenutni.cijena;
  262. memcpy (&polje[i].dan,&trenutni.dan,sizeof(trenutni.dan));
  263. memcpy (&polje[i].mj,&trenutni.mj,sizeof(trenutni.mj));
  264. memcpy (&polje[i].godina,&trenutni.godina,sizeof(trenutni.godina));
  265. i++;
  266. if (tekuci == EndL(lista)) break;
  267. tekuci=NextL(tekuci, lista);
  268. }
  269. MSort(polje,i);
  270. DeleteAllL(lista);
  271. lista=InitL(lista);
  272. podaci trenutni2;
  273. for (int k=0;k<i;k++){
  274. trenutni2.sifra=polje[k].sifra;
  275. strcpy (trenutni2.vrsta, polje[k].vrsta);
  276. strcpy (trenutni2.naziv, polje[k].naziv);
  277. trenutni2.cijena=polje[k].cijena;
  278. memcpy (&polje[i].dan,&trenutni2.dan,sizeof(trenutni2.dan));
  279. memcpy (&polje[i].mj,&trenutni2.mj,sizeof(trenutni2.mj));
  280. memcpy (&polje[i].godina,&trenutni2.godina,sizeof(trenutni2.godina));
  281. InsertL(trenutni2,EndL(lista),lista);
  282. }
  283. }
  284.  
  285. //---------------------------------------------------------------------------------------------------------------------------------------
  286. int main(){
  287. short izb;
  288. animal *lista;
  289. lista=new animal;
  290. InitL(lista);
  291. podaci polje[100];
  292.  
  293.  
  294. animal *list;
  295. list=new animal;
  296. InitL(list);
  297. int povratak;
  298.  
  299. do{
  300. cout<<"--------------------IZBORNIK--------------------\n"
  301. <<"0. Unos zivotinja.\n"
  302. <<"1. Ispis od zadnje dodane zivotinje\n"
  303. <<"2. Ispis zivotinja dodanih nakon 23.9.2012.\n"
  304. <<"3. brisanje zivotinja po nazivu\n"
  305. <<"4. brisanje vrste zivotinja\n"
  306. <<"5. Sortiranje\n"
  307. <<"9. izlaz iz programa\n"
  308. <<"\nIzbor: ";
  309. cin>>izb;
  310. system("cls");
  311. switch(izb){
  312. case 0:
  313. if(!dodajZivotinju(list))
  314. cout<<"Dodavanje zapisa nije uspjelo!"<<endl;
  315. break;
  316.  
  317. case 1:
  318. ispis(list);
  319. break;
  320.  
  321. case 2:
  322. ispis2(list);
  323. break;
  324.  
  325. case 3:
  326.  
  327. if(!pass)
  328. if(!brisanje(list,0))
  329. cout<<"Brisanje nije uspjelo\n";
  330. if(pass)
  331. if(!brisanjePolje(list,1))
  332. cout<<"Brisanje nije uspjelo\n";
  333. break;
  334. case 4:
  335. if(!pass)
  336. if(!brisanje(list,1))
  337. cout<<"Brisanje nije uspjelo\n";
  338. if(pass)
  339. if(!brisanjePolje(list,1))
  340. cout<<"Brisanje nije uspjelo\n";
  341. break;
  342. case 5:
  343. sort(polje,list);
  344. break;
  345. //----izlaz iz programa
  346. case 9:
  347. break;
  348. default:
  349. cout<<"Pogresan unos!"<<endl;
  350. break;
  351.  
  352. }
  353.  
  354. }while(izb!=9);
  355. }//END of MAIN

Report this snippet  

You need to login to post a comment.