/ Published in: C++
Program koji evidentira životinje u trgovini sa kućnim ljubimcima. Lista unosom sadržava sljedeće podatke: šifru, vrstu, naziv, cijenu i datum dostave. U programu mogu se : 1.Zapisati nove životinje 2.Ispisati životinje (od posljednje dodane) 3. Pretraživanje i ispis liste prema datumu 4. Brisanje elemenata liste prema nazivu ili vrsti 5. Silazno sortiranje liste prema cijeni i nazivu
Expand |
Embed | Plain Text
#include <iostream> #include <cstring> #include <string.h> //#include "lista_polje.h" #include "lista_pokazivac.h" using namespace std; int sifra=1; int zapis(lista *l) { zivotinje novi, tekuci; element pozicija= FirstL(l); cout<<"Unesi sifru zivotinje: "; cin>>novi.sifra; cout<<"Unesi vrstu zivotinje: "; cin.ignore(); cin.getline(novi.vrsta,30); cout<<"Unesi naziv zivotinje: "; cin.getline(novi.naziv,30); cout<<"Unesi cijenu: "; cin>>novi.cijena; cout<<"Unesi datum dostave(format godina_mjesec_datum , bez razmaka): "; cin>>novi.datum; while (pozicija !=EndL(l)) { tekuci=RetrieveL(pozicija,l); if (novi.sifra<tekuci.sifra) return InsertL(novi,pozicija,l); pozicija=NextL(pozicija,l); } return InsertL(novi,pozicija,l); } void ispis(lista *l) { element pozicija=EndL(l); pozicija=PreviousL(pozicija,l); while(1) { zivotinje novi=RetrieveL(pozicija, l); cout<<endl; cout<<"Sifra: "<<novi.sifra<<endl; cout<<"Vrsta: "<<novi.vrsta<<endl; cout<<"Naziv: "<<novi.naziv<<endl; cout<<"Cijena: "<<novi.cijena<<endl; cout<<"Datum dostave: "<<novi.datum<<endl; cout<<endl; if(pozicija==FirstL(l)) break; pozicija=PreviousL(pozicija, l); } } void pretrazivanje (lista *l) { int brojac=0; element pozicija=FirstL(l); do { zivotinje novi=RetrieveL(pozicija, l); if (novi.datum > 20120923) { cout<<endl; cout<<"Sifra: "<<novi.sifra<<endl; cout<<"Vrsta: "<<novi.vrsta<<endl; cout<<"Naziv: "<<novi.naziv<<endl; cout<<"Cijena: "<<novi.cijena<<endl; cout<<"Datum dostave: "<<novi.datum<<endl; cout<<endl; brojac++; } pozicija=NextL(pozicija,l); } while(pozicija!=EndL(l)); cout<<"Ukupan broja zivotinja dostavljenih nakon 23.9.2012 : "<<brojac<<endl; } int brisi(lista *l) { int pobrisano=0; cout<<"Unesi naziv zivotinje koju zelis obrisati: "; zivotinje x,novi; cin.ignore(); cin.getline(x.naziv,30); element lokacija=LocateL(x,l); element pozicija=FirstL(l); while(pozicija!=EndL(l)) { novi=RetrieveL(pozicija,l); if(strcmp(x.naziv,novi.naziv)==0) { DeleteL(pozicija,l); pobrisano=1; break; } pozicija=NextL(pozicija,l); } return pobrisano; } int brisi_sve(lista *l) { int obrisano=0; cout<<"Unesi vrstu zivotinje koju zelis obrisati: "; zivotinje x,novi; cin.ignore(); cin.getline(x.vrsta,30); element lokacija=Locatel(x,l); element pozicija=FirstL(l); while(pozicija!=EndL(l)) { novi=RetrieveL(pozicija,l); if(strcmp(x.vrsta,novi.vrsta)==0) { DeleteL(pozicija,l) ; obrisano=1; #ifdef LISTA_POLJE_H continue; #endif } pozicija=NextL(pozicija,l); novi=RetrieveL(pozicija,l); } return obrisano; } void spoji(zivotinje A[], int i, int k, int j) { int n; int I=i, J=k+1, K=0; zivotinje *B = new zivotinje [j-i+1]; while (I <= k && J <= j) if (A[I].cijena<A[J].cijena) memcpy(&B[K++], &A[I++], sizeof(zivotinje) ); else if (A[I].cijena == A[J].cijena) { if (strcmp((A[I].naziv),(A[J].naziv))<0) memcpy(&B[K++], &A[I++], sizeof(zivotinje) ); else memcpy(&B[K++], &A[J++], sizeof(zivotinje) ); } else memcpy(&B[K++], &A[J++], sizeof(zivotinje) ); if (I>k) while (J <= j) memcpy(&B[K++], &A[J++], sizeof(zivotinje) ); else while (I<=k) memcpy(&B[K++], &A[I++], sizeof(zivotinje) ); for (int I = 0; I <=j-i; I++) memcpy(&A[i+I], &B[I], sizeof(zivotinje) ); delete []B; } void MSort (zivotinje *A, int i, int j) { if (i<j) { int k=(i+j)/2; MSort(A,i,k); MSort (A, k+1, j); spoji (A,i,k,j); } } void MSort (zivotinje A[], int N) { MSort (A,0,N-1); } void sort (lista *l) { zivotinje novi[1000]; element pozicija=FirstL(l); int n=0; while (pozicija!=EndL(l)) { novi[n]=RetrieveL(pozicija,l); pozicija=NextL(pozicija,l); n++; } MSort (novi,n); int i=0; n=n-1; for(n; n>=i; n--) { cout<<endl; cout << "Sifra: " << novi[n].sifra << endl; cout << "Naziv: " << novi[n].naziv << endl; cout << "Vrsta: " << novi[n].vrsta << endl; cout << "Cijena: " << novi[n].cijena << endl; cout << "Datum: " << novi[n].datum<< endl; cout<<endl; } } int main(){ lista *l=InitL(l); int izbor; char upit; do{ cout<<endl; cout<<"Izbronik"<<endl; cout<<"1. Zapis zivotinja u listu "<<endl; cout<<"2. Ispis sadrzaja liste od sifre koja je posljednja dodana"<<endl; cout<<"3. Pretrazivanje liste i ispis liste"<<endl; cout<<"4. Brisanje elmenata liste"<<endl; cout<<"5. Sortiranje sadrzaja liste"<<endl; cout<<"9. Kraj programa!"<<endl; cout<<endl; cin>>izbor; switch(izbor) { case 1: zapis(l); break; case 2: ispis(l); break; case 3: pretrazivanje(l); break; case 4: cout<<"Brisanje pojedinacno prema nazivu (n) ili Brisanje svih prema vrsti (v): "; cin>>upit; if(upit=='n') { if(brisi(l)) cout<<endl<<"Obrisano"<<endl; else cout<<endl<<"Nije obrisano"<<endl; break; } else if (upit=='v') { if(brisi_sve(l)) cout<<endl<<"Obrisano"<<endl; else cout<<endl<<"Nije obrisano"<<endl; break; } else cout<<"krivi unos"<<endl; break; case 5: sort(l); break; case 9: break; } }while(izbor!=9); return 0; }
Comments
Subscribe to comments
You need to login to post a comment.

Datum se zasniva na jednom integeru, što je drugačije nego u mom programu. Caseovi su pojednostavljeni koliko su mogući, kako bi se dobilo na jednostavnosti samog maina.