/ Published in: C++
kod zadatka
Expand |
Embed | Plain Text
#include <cstdlib> #include <iostream> #include <string.h> //#include "pokazivac.h" #include "polje.h" using namespace std; bool pass=var(); int dodajZivotinju(animal *list){ podaci nova; cout<<"Dodaj novu zivotinju:"<<endl <<"----------------------------------------------------------------"<<endl <<"\tSifra:\t\t\t"; cin>>nova.sifra; cout<<"\tVrsta:\t\t\t"; cin.ignore(); cin.getline(nova.vrsta,40); cout<<"\tNaziv:\t\t\t"; cin.getline(nova.naziv,40); cout<<"Unesite datum:\n"; do{ cout<<"\tDan:\t\t\t"; cin>>nova.dan; }while(nova.dan>31||nova.dan<1); do{ cout<<"\tMjesec:\t\t\t"; cin>>nova.mj; }while(nova.mj>12||nova.mj<1); cout<<"\tGodina:\t\t\t"; cin>>nova.godina; cout<<"\tCijena:\t\t\t"; cin>>nova.cijena; cout<<"----------------------------------------------------------------"<<endl; if(!(list->sljedeci)) { InsertL(nova,EndL(list),list); return 1; } else{ element i=FirstL(list); InsertL(nova,i,list); return 1; } return 0; } void ispisiElement(podaci zivotinja){ cout<<endl <<"\tSifra:\t\t\t"<<zivotinja.sifra<<endl//------------- <<"\tVrsta:\t\t\t"<<zivotinja.vrsta<<endl//------------- <<"\tNaziv:\t\t\t"<<zivotinja.naziv<<endl//------------- <<"\tGodina uvoza:\t\t"<<zivotinja.dan<<"."<<zivotinja.mj<<"."<<zivotinja.godina<<"."<<endl <<"\tCijena:\t\t\t"<<zivotinja.cijena<<endl; } void ispis(animal *lista) { if(!(lista->sljedeci)) { cout<<"* Pogreska: Lista je prazna!"<<endl; return; } podaci zivotinja; element i=FirstL(lista); cout<<"Ispis od zadnje dodane zivotinje:"<<endl; cout<<"----------------------------------------------------------------"<<endl; while(i!=EndL(lista)) { zivotinja=RetrieveL(i,lista); i=NextL(i,lista); ispisiElement(zivotinja); } cout<<endl <<"----------------------------------------------------------------"<<endl; }; //--------------------------------------------------------------------------------------------------------------------------------------- void ispis2(animal *lista) { if(!(lista->sljedeci)) { cout<<"* Pogreska: Lista je prazna!"<<endl; return; } podaci zivotinja; element i=FirstL(lista); int broj=0; cout<<"Ispis zivotinja dodanih nakon 23.9.2012. :"<<endl; cout<<"----------------------------------------------------------------"<<endl; while(i!=EndL(lista)) { zivotinja=RetrieveL(i,lista); i=NextL(i,lista); if((zivotinja.godina>2012)||((zivotinja.mj>=9)&&(zivotinja.godina>=2012))||((zivotinja.dan>=23)&&(zivotinja.godina>2012))){ ispisiElement(zivotinja); broj++; } } cout<<endl <<"----------------------------------------------------------------\n" <<"Broj zivotinja dodanih nakon 23.9.2012. : "<<broj<<endl<<endl; }; //--------------------------------------------------------------------------------------------------------------------------------------- int brisanje(animal *lista, short tip) { char naziv[42],vrsta[42]; if(!tip){ cout<<"Unesite naziv zivotinje koju zelite obrisati: "; cin.ignore(); cin.getline(naziv,42); } if(tip){ cout<<"Unesite vrstu zivotinje koju zelite obrisati: "; cin.ignore(); cin.getline(vrsta,42); } element i=FirstL(lista),brisi; podaci zivotinja,trazi; while(i!=EndL(lista)) { trazi=RetrieveL(i,lista); if(!strcmp(naziv,trazi.naziv) || !strcmp(vrsta,trazi.vrsta)){ if(!tip) brisi=LocateL(0,naziv,lista); if(tip) brisi=LocateL(0,vrsta,lista); if(brisi==EndL(lista)) return 0; zivotinja=RetrieveL(brisi,lista); if(!strcmp(naziv,trazi.naziv) || !strcmp(vrsta,trazi.vrsta)){ cout<<endl <<"Obrisan je sljedeci zapis: "<<endl <<"----------------------------------------------------------------"<<endl; ispisiElement(zivotinja); cout<<endl <<"----------------------------------------------------------------"<<endl; DeleteL(brisi,lista); if(!i) return 1; } }// i=NextL(i,lista); } return 0; }; int brisanjePolje(animal *lista, short tip) { char naziv[42],vrsta[42]; if(!tip){ cout<<"Unesite naziv zivotinje koju zelite obrisati: "; cin.ignore(); cin.getline(naziv,42); } if(tip){ cout<<"Unesite vrstu zivotinje koju zelite obrisati: "; cin.ignore(); cin.getline(vrsta,42); } element i=EndL(lista),brisi; podaci zivotinja,trazi; while(i!=FirstL(lista)) { trazi=RetrieveL(i,lista); if(!strcmp(naziv,trazi.naziv) || !strcmp(vrsta,trazi.vrsta)){ if(!tip) brisi=LocateL(0,naziv,lista); if(tip) brisi=LocateL(0,vrsta,lista); if(brisi==EndL(lista)) return 0; zivotinja=RetrieveL(brisi,lista); if(!strcmp(naziv,trazi.naziv) || !strcmp(vrsta,trazi.vrsta)){ cout<<endl <<"Obrisan je sljedeci zapis: "<<endl <<"----------------------------------------------------------------"<<endl; ispisiElement(zivotinja); cout<<endl <<"----------------------------------------------------------------"<<endl; DeleteL(brisi,lista); if(!i) return 1; } }// end if i=PreviousL(i,lista); } return 0; }; //--------------------------------------------------------------------------------------------------------------------------------------- bool sortirano=false; void merge (podaci A[], int i, int k, int j){ int I=i, J=k+1, K=0; podaci *B=new podaci [j-i+1]; while (I<=k&&J<=j) if (sortirano){ if ((A[I].cijena<A[J].cijena)||((A[I].cijena==A[J].cijena)&&(A[I].naziv[0]<A[J].naziv[0]))) memcpy(&B[K++],&A[I++],sizeof(A[I++])); else memcpy(&B[K++],&A[J++],sizeof(A[J++]));} else{ if (A[I].sifra<=A[J].sifra) memcpy(&B[K++],&A[I++],sizeof(A[I++])); else memcpy(&B[K++],&A[J++],sizeof(A[J++]));} if (I>k) while (J<=j) memcpy(&B[K++],&A[J++],sizeof(A[J++])); else while (I<=k) memcpy(&B[K++],&A[I++],sizeof(A[I++])); for (int I=0;I<=j-i;I++) memcpy(&A[i+I],&B[I],sizeof(B[I])); delete []B; } void MSort (podaci A[],int i,int j){ if (i<j){ int k=(i+j)/2; MSort(A,i,k); MSort(A,k+1,j); merge(A,i,k,j);} } void MSort (podaci A[],int N){ MSort (A,0,N-1); } void sort (podaci polje[],animal *lista){ if (FirstL(lista) == EndL(lista)) { system("cls"); cout<<"Error!\n"; system ("pause"); return;} element z=FirstL(lista); int i = 0; element tekuci=FirstL(lista); while (z!=EndL(lista)){ if (tekuci == EndL(lista)) break;//dodano podaci trenutni=RetrieveL(tekuci,lista); polje[i].sifra=trenutni.sifra; strcpy (polje[i].vrsta,trenutni.vrsta); strcpy (polje[i].naziv,trenutni.naziv); polje[i].cijena=trenutni.cijena; memcpy (&polje[i].dan,&trenutni.dan,sizeof(trenutni.dan)); memcpy (&polje[i].mj,&trenutni.mj,sizeof(trenutni.mj)); memcpy (&polje[i].godina,&trenutni.godina,sizeof(trenutni.godina)); i++; if (tekuci == EndL(lista)) break; tekuci=NextL(tekuci, lista); } MSort(polje,i); DeleteAllL(lista); lista=InitL(lista); podaci trenutni2; for (int k=0;k<i;k++){ trenutni2.sifra=polje[k].sifra; strcpy (trenutni2.vrsta, polje[k].vrsta); strcpy (trenutni2.naziv, polje[k].naziv); trenutni2.cijena=polje[k].cijena; memcpy (&polje[i].dan,&trenutni2.dan,sizeof(trenutni2.dan)); memcpy (&polje[i].mj,&trenutni2.mj,sizeof(trenutni2.mj)); memcpy (&polje[i].godina,&trenutni2.godina,sizeof(trenutni2.godina)); InsertL(trenutni2,EndL(lista),lista); } } //--------------------------------------------------------------------------------------------------------------------------------------- int main(){ short izb; animal *lista; lista=new animal; InitL(lista); podaci polje[100]; animal *list; list=new animal; InitL(list); int povratak; do{ cout<<"--------------------IZBORNIK--------------------\n" <<"0. Unos zivotinja.\n" <<"1. Ispis od zadnje dodane zivotinje\n" <<"2. Ispis zivotinja dodanih nakon 23.9.2012.\n" <<"3. brisanje zivotinja po nazivu\n" <<"4. brisanje vrste zivotinja\n" <<"5. Sortiranje\n" <<"9. izlaz iz programa\n" <<"\nIzbor: "; cin>>izb; system("cls"); switch(izb){ case 0: if(!dodajZivotinju(list)) cout<<"Dodavanje zapisa nije uspjelo!"<<endl; break; case 1: ispis(list); break; case 2: ispis2(list); break; case 3: if(!pass) if(!brisanje(list,0)) cout<<"Brisanje nije uspjelo\n"; if(pass) if(!brisanjePolje(list,1)) cout<<"Brisanje nije uspjelo\n"; break; case 4: if(!pass) if(!brisanje(list,1)) cout<<"Brisanje nije uspjelo\n"; if(pass) if(!brisanjePolje(list,1)) cout<<"Brisanje nije uspjelo\n"; break; case 5: sort(polje,list); break; //----izlaz iz programa case 9: break; default: cout<<"Pogresan unos!"<<endl; break; } }while(izb!=9); }//END of MAIN
You need to login to post a comment.
