/ Published in: C++
program za evidenciju životinja u trgovini sa kućnim ljubimcima, ispis prema štifri (silazno), te prema cijeni i nazivu (silazno), oba sortiranja implementirana pomoću merge sorta, ispis svih elemenata koji imaju atribut datum nakon 23.rujna 2012, brisanje prema vrsti ili pojedinačno prema nazivu,
Expand |
Embed | Plain Text
#include<iostream> //#include "polje.h" #include "pokazivaci.h" using namespace std; lista *glava; int kod=10000; bool sortirano=false; bool Bsort=false; int datum (int dan, char mjesec[10]){ int Bmjesec; if (!(strcmp(mjesec,"sjecanj"))) Bmjesec=1; else if (!(strcmp(mjesec,"veljaca"))) Bmjesec=2; else if (!(strcmp(mjesec,"ozujak"))) Bmjesec=3; else if (!(strcmp(mjesec,"travanj"))) Bmjesec=4; else if (!(strcmp(mjesec,"svibanj"))) Bmjesec=5; else if (!(strcmp(mjesec,"lipanj"))) Bmjesec=6; else if (!(strcmp(mjesec,"srpanj"))) Bmjesec=7; else if (!(strcmp(mjesec,"kolovoz"))) Bmjesec=8; else if (!(strcmp(mjesec,"rujan"))) Bmjesec=9; else if (!(strcmp(mjesec,"listopad"))) Bmjesec=10; else if (!(strcmp(mjesec,"studeni"))) Bmjesec=11; else if (!(strcmp(mjesec,"prosinac"))) Bmjesec=12; else Bmjesec=0; return Bmjesec; } void merge (telement A[], int i, int k, int j){ int I=i, J=k+1, K=0; telement *B=new telement [j-i+1]; while (I<=k&&J<=j) if (Bsort){ 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 (telement 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 (telement A[],int N){ MSort (A,0,N-1); } void sort (telement polje[]){ if (FirstL(glava) == EndL(glava)) { system("cls"); cout<<"Error!\n"; system ("pause"); return;} int i=0; el tekuci=FirstL(glava); while (1){ telement trenutni=RetreiveL(tekuci,glava); 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].datum,&trenutni.datum,sizeof(trenutni.datum)); i++; if (tekuci == PreviousL(EndL(glava), glava)) break; tekuci=NextL(tekuci, glava);} MSort(polje,i); sortirano=true; DeleteAllL(glava); glava=InitL(glava); telement 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 (&trenutni2.datum,&polje[k].datum,sizeof(polje[k].datum)); InsertL(trenutni2,EndL(glava),glava);} } int unos(){ telement trenutni; int kontrola=1; trenutni.sifra=kod; system ("cls"); cout<<"UNOS ZIVOTINJE\n"; cout<<"--------------\n"; cout<<"sifra zivotinje: "<<trenutni.sifra<<endl; cout<<"unesite vrstu zivotinje: "; cin.ignore(); cin.getline(trenutni.vrsta,100); cout<<"unesite naziv zivotinje: "; cin.getline(trenutni.naziv,100); cout<<"unesite cijenu zivotinje (u kunama): "; cin>>trenutni.cijena; do{ if (kontrola==0) cout<<"pogresan unos\n"; cout<<"datum dostave\n"; cout<<"unesite dan: "; cin>>trenutni.datum.dan; cout<<"unesite mjesec (rijecima): "; cin.ignore(); cin.getline(trenutni.datum.Rmjesec,10); cout<<"unesite godinu: "; cin>>trenutni.datum.godina; trenutni.datum.Bmjesec=datum (trenutni.datum.dan,trenutni.datum.Rmjesec); kontrola=0;} while (trenutni.datum.dan>30||trenutni.datum.Bmjesec==0); return InsertL(trenutni,EndL(glava),glava); } void ispis (telement polje[]){ system ("cls"); if(!Bsort&&sortirano) sort(polje); if (!Bsort){ cout<<"ISPIS LISTE OD ZADNJE DODANE ZIVOTINJE\n"; cout<<"--------------------------------------\n";} else{ cout<<"ISPIS SORTIRANE LISTE\n"; cout<<"---------------------\n";} el tekuci=PreviousL(EndL(glava),glava); if (FirstL(glava)==EndL(glava)){ system ("pause"); return;} while (1){ telement trenutni=RetreiveL(tekuci,glava); cout<<"sifra zivotinje: "<<trenutni.sifra<<endl; cout<<"vrsta zivotinje: "<<trenutni.vrsta<<endl; cout<<"naziv zivotinje: "<<trenutni.naziv<<endl; cout<<"cijena zivotinje: "<<trenutni.cijena<<" kn\n"; cout<<"datum dostave: "<<trenutni.datum.dan<<"."<<trenutni.datum.Rmjesec<<" "<<trenutni.datum.godina<<"."<<endl; cout<<"------------------------------\n"; if(tekuci==FirstL(glava)) break; tekuci=PreviousL(tekuci,glava);} system("pause"); } void pretraga (){ system ("cls"); int brojilo=0; el tekuci=FirstL(glava); if (FirstL(glava) == EndL(glava)) { cout<<"Error!\n"; system ("pause"); return;} cout<<"ZIVOTINJE DOSTAVLJENE NAKON 23.rujna.2012.\n"; cout<<"--------------------------------------\n"; while (1){ telement trenutni=RetreiveL(tekuci,glava); if((trenutni.datum.godina>2012)||(trenutni.datum.godina==2012&&trenutni.datum.Bmjesec>9)|| (trenutni.datum.godina==2012&&trenutni.datum.Bmjesec==9&&trenutni.datum.dan>23)){ cout<<"sifra zivotinje: "<<trenutni.sifra<<endl; cout<<"vrsta zivotinje: "<<trenutni.vrsta<<endl; cout<<"naziv zivotinje: "<<trenutni.naziv<<endl; cout<<"cijena zivotinje: "<<trenutni.cijena<<" kn\n"; cout<<"datum dostave: "<<trenutni.datum.dan<<"."<<trenutni.datum.Rmjesec<<"."<<trenutni.datum.godina<<"."<<endl; cout<<"-----------------------------\n"; brojilo++;} if (tekuci == PreviousL(EndL(glava), glava)) break; tekuci=NextL(tekuci, glava);} cout<<"broj elemenata: "<<brojilo<<endl; system("pause"); } int brisanjeZ (){ system ("cls"); if (FirstL(glava) == EndL(glava)) { cout<<"Error!\n"; system ("pause"); return 0;} telement izbor; cout<<"unesite naziv zivotinje koju zelite izbrisati: "; cin.ignore(); cin.getline(izbor.naziv,100); return DeleteL(LocateL(izbor,glava),glava); } int brisanjeV (){ int kontrola=0; system ("cls"); if (FirstL(glava) == EndL(glava)) { cout<<"Error!\n"; system ("pause"); return 0;} telement izbor; cout<<"unesite naziv vrste koju zelite izbrisati: "; cin.ignore(); cin.getline(izbor.vrsta,100); while(1){ if (!(DeleteL(LocateL(izbor,glava),glava))) return kontrola; kontrola=1;} return kontrola; } int main(){ int izbor,brojilo; glava=NULL; glava=InitL(glava); telement polje[1000]; do{ system ("cls"); cout<<"IZBORNIK\n"; cout<<"--------\n"; cout<<"1. unos u listu\n2. ispis liste od zadnje dodane zivotinje\n3. ispis svih zivotinja dostavljenih nakon 23.9.2012.\n" <<"4. brisanje unosa prema nazivu zivotinje\n5. brisanje svih unosa odabrane vrste\n" <<"6. sortiranje prema cijeni i nazivu\n7. ispis sortirane liste\n0. izlaz iz programa\n\n"; cout<<"Izbor: \n"; cin>>izbor; switch (izbor){ case 1: if (unos()) kod++; sortirano=false; break; case 2: Bsort=false; ispis(polje); sortirano=false; break; case 3: pretraga(); break; case 4: PV=true; if (brisanjeZ()) sortirano=false; else cout<<"ne postoji element\n"; break; case 5: PV=false; if(!(brisanjeV())) cout<<"ne postoji element\n"; else sortirano=false; break; case 6: Bsort=true; if (!sortirano){ sort (polje); cout<<"lista je uspjesno sortirana!\n";} else cout<<"lista je vec sortirana\n"; system("pause"); break; case 7: if (sortirano){ Bsort=true; ispis(polje);} else{ cout<<"lista nije sortirana!\n"; system("pause");} break; case 0: break; default: cout<<"pogresan unos\n"; } } while (izbor!=0); DeleteAllL(glava); return 0; }
Comments
Subscribe to comments
You need to login to post a comment.

Kolega ima uredna poravnanja i zanimljivo je rijesio ispis elemenata nakon 23.09.2012