/ Published in: C++
Ovo je glavna datoteka main u kojoj se pozivaju funkcije iz biblioteka lista_polje.h i lista_pokazivaci.h za implementaciju liste. Korisnik može odabrati sljedeće opcije: unos nove životinje, ispis životinja prema silaznoj šifri, filtriranje prema datumu i ispis životinja dostavljenih nakon 23.09.2012., brisanje prema unesenom nazivu ili vrsti životinje te silazno sortiranje prema nazivu i cijenu korištenjem metode Merge Sort (prije je potrebno elemente liste prebaciti u polje, pa se zatim to polje sortira).
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
#include<iostream> #include<string> using namespace std; #define POCETAK 1 //#include "lista_pokazivaci.h" #include "lista_polje.h" bool isEmpty( list* L){ return FirstL(L) == EndL(L); } int unos(list *L){ int sifra = 0; if(isEmpty(L)) sifra = POCETAK; else{ sifra = RetrieveL(PreviousL(EndL(L),L),L).sifra+1; } elementtype novo; cout <<"Nova zivotinja #" << sifra << endl; novo.sifra = sifra; cout << "Naziv: "; cin.ignore(); cin.getline(novo.naziv, 29, '\n'); cout << "Vrsta: "; cin.getline(novo.vrsta, 29, '\n'); cout << "Cijena: "; cin >> novo.cijena; if(novo.cijena < 0) return 0; cout << "Datum dostave" << endl; cout << "Dan: "; cin >> novo.datum_dostave.dan; if(novo.datum_dostave.dan<1 || novo.datum_dostave.dan>31) return 0; cout << "Mjesec: "; cin >> novo.datum_dostave.mjesec; if(novo.datum_dostave.mjesec<1 || novo.datum_dostave.mjesec>12) return 0; cout << "Godina: "; cin >> novo.datum_dostave.godina; if(novo.datum_dostave.godina<1900) return 0; InsertL(novo,EndL(L),L); return 1; } void ispis(list *L){ element zadnji = EndL(L); while(zadnji != FirstL(L)){ elementtype ziv = RetrieveL(PreviousL(zadnji,L),L); cout << "Sifra: " << ziv.sifra << endl; cout << "Naziv: " << ziv.naziv << endl; cout << "Vrsta: " << ziv.vrsta << endl; cout << "Cijena: " << ziv.cijena << endl; cout << "Datum dostave: " << ziv.datum_dostave.dan<<"." <<ziv.datum_dostave.mjesec << "." <<ziv.datum_dostave.godina<<"."<<endl; cout <<endl; zadnji = PreviousL(zadnji,L); } } void filterDostava(int dan, int mjesec, int godina, list* L){ if(isEmpty(L)){ cout << endl << "Broj pronadjenih zivotinja: 0" << endl; return; } int broj = 0; element tekuci = FirstL(L); struct{ int dan,mjesec,godina; }dostava; while(tekuci != EndL(L)){ elementtype ziv = RetrieveL(tekuci,L); dostava.dan = ziv.datum_dostave.dan; dostava.mjesec = ziv.datum_dostave.mjesec; dostava.godina = ziv.datum_dostave.godina; if((dostava.godina>godina) || ((dostava.godina==godina)&&(dostava.mjesec>mjesec)) || ((dostava.godina==godina)&&(dostava.mjesec==mjesec)) && (dostava.dan>dan)){ broj++; cout << "Sifra: " << ziv.sifra << endl; cout << "Naziv: " << ziv.naziv << endl; cout << "Vrsta: " << ziv.vrsta << endl; cout << "Cijena: " << ziv.cijena << endl; cout << "Datum dostave: " << ziv.datum_dostave.dan<<"." <<ziv.datum_dostave.mjesec << "." <<ziv.datum_dostave.godina<<"."<<endl; cout << endl; } tekuci = NextL(tekuci,L); } cout << endl << "Broj pronadjenih zivotinja: " << broj << endl; } int brisiPremaNazivu(list* L){ char naziv[30]; cin.ignore(); cout << "Unesite naziv zivotinje za brisanje: "; cin.getline(naziv, 29, '\n'); if(isEmpty(L)) return 0; element tekuci = FirstL(L); bool postoji = false; while(tekuci != EndL(L)){ elementtype ziv = RetrieveL(tekuci,L); if(strcmp(ziv.naziv,naziv)==0){ postoji = true; break; } tekuci = NextL(tekuci,L); } if(postoji){ DeleteL(tekuci,L); } else return 0; return 1; } int brisiPremaVrsti(list* L){ char vrsta[30]; cin.ignore(); cout << "Unesite vrstu zivotinja za brisanje: "; cin.getline(vrsta, 29, '\n'); element tekuci = FirstL(L); bool postoji = false; while(tekuci != EndL(L)){ elementtype ziv = RetrieveL(tekuci,L); if(strcmp(ziv.vrsta,vrsta)==0){ postoji = true; DeleteL(tekuci,L); } tekuci = NextL(tekuci,L); } if(!postoji) return 0; return 1; } void spoji(elementtype *polje,int donji,int sredina,int gornji) { int h,i,j,k; h=donji; i=donji; j=sredina+1; elementtype *temp = new elementtype[gornji-donji+1]; while((h<=sredina)&&(j<=gornji)) { if(polje[h].cijena>polje[j].cijena || ((polje[h].cijena==polje[j].cijena)&&(strcmp(polje[h].naziv, polje[j].naziv)>0))) { temp[i]=polje[h]; h++; } else { temp[i]=polje[j]; j++; } i++; } if(h>sredina) { for(k=j; k<=gornji; k++) { temp[i]=polje[k]; i++; } } else { for(k=h; k<=sredina; k++) { temp[i]=polje[k]; i++; } } for(k=donji; k<=gornji; k++) polje[k]=temp[k]; delete [] temp; } void mergesort(elementtype *polje, int donji,int gornji ) { int sredina; if(donji<gornji) { sredina=(donji+gornji)/2; mergesort(polje,donji,sredina); mergesort(polje,sredina+1,gornji); spoji(polje,donji,sredina,gornji); } } void SortirajCijenaNaziv(list *L){ int broj=0; element tekuci = FirstL(L); while(tekuci != EndL(L)){ broj++; tekuci = NextL(tekuci,L); } elementtype* polje = new elementtype[broj]; tekuci = FirstL(L); int i = 0; while(tekuci != EndL(L)){ polje[i] = RetrieveL(tekuci,L); tekuci = NextL(tekuci,L); i++; } mergesort(polje,0,broj-1); DeleteAllL(L); L=NULL; L = InitL(L); cout << "SORTIRANO SILAZNO PREMA CIJENI I NAZIVU" << endl; for( i = 0; i < broj; i++){ InsertL(polje[i],EndL(L),L); elementtype ziv = polje[i]; cout << "Sifra: " << ziv.sifra << endl; cout << "Naziv: " << ziv.naziv << endl; cout << "Vrsta: " << ziv.vrsta << endl; cout << "Cijena: " << ziv.cijena << endl; cout << "Datum dostave: " << ziv.datum_dostave.dan<<"." <<ziv.datum_dostave.mjesec << "." <<ziv.datum_dostave.godina<<"."<<endl; cout <<endl; } } int main(){ list* L = NULL; L = InitL(L); int odabir = 0; do{ cout << endl; cout << "IZBORNIK" << endl << endl; cout << "1.Unos zivotinje" << endl; cout << "2.Popis zivotinja" << endl; cout << "3.Zivotinje dostavljene nakon 23.09.2012."<<endl; cout << "4.Brisanje prema nazivu zivotinje" << endl; cout << "5.Brisanje prema vrsti zivotinje" << endl; cout << "6.Silazno sortiranje zivotinja" << endl; cout << "9.Izlaz" << endl << endl; cout << "Odabir: "; cin >> odabir; system("cls"); switch(odabir){ case 1: if(!unos(L)){ cout << "Neispravni podaci kod unosa!" << endl; } break; case 2: ispis(L); break; case 3: filterDostava(23,9,2012,L); break; case 4: if(brisiPremaNazivu(L)){ cout << "Zapis je uspjesno obrisan." << endl; } else{ cout << "Zapis nije pronadjen." << endl; } break; case 5: if(brisiPremaVrsti(L)){ cout << "Zapis(i) je uspjesno obrisan(i)." << endl; } else{ cout << "Zapis(i) nije pronadjen(i)." << endl; } break; case 6: SortirajCijenaNaziv(L); break; case 9: break; default: cout << "Pogresan odabir! Odaberite ponovno!" << endl; } }while(odabir != 9); DeleteAllL(L); system("pause"); return 0; }