/ Published in: C++
Glavni program
Expand |
Embed | Plain Text
//GLAVNI PROGRAM ZA EVIDENCIJU ZIVOTINJA #include<iostream> #include<string> using namespace std; //#include "lista_pokazivaci.h" #include "lista_polje.h" bool isEmpty( list* L){ return FirstL(L) == EndL(L); } int unos(list *L){ int poc=1; int sifra = 0; if(isEmpty(L)) sifra = poc; else{ sifra = RetrieveL(PreviousL(EndL(L),L),L).sifra+1; } podaci nov; cout <<"Sifra zivotinje: " << sifra << endl; nov.sifra = sifra; cout << "Naziv: "; cin.ignore(); cin>>nov.naziv; cout << "Vrsta: "; cin>>nov.vrsta; cout << "Cijena: "; cin >> nov.cijena; if(nov.cijena < 0) return 0; cout << "Datum dostave(dan,mj,god)" << endl; cout << "Dan: "; cin >> nov.dat.dan; if(nov.dat.dan<1 || nov.dat.dan>31) return 0; cout << "Mjesec: "; cin >> nov.dat.mj; if(nov.dat.mj<1 || nov.dat.mj>12) return 0; cout << "Godina: "; cin >> nov.dat.god; if(nov.dat.god<1990) return 0; InsertL(nov,EndL(L),L); return 1; } void ispis(list *L){ element zadnji = EndL(L); while(zadnji != FirstL(L)){ podaci 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.dat.dan<<"." <<ziv.dat.mj << "." <<ziv.dat.god<<"."<<endl; cout <<endl; zadnji = PreviousL(zadnji,L); } } void filter(int dan, int mj, int god, list* L){ if(isEmpty(L)){ cout << endl << "Nema prona����¯�¿�½enih ������¾ivotinja" << endl; return; } int broj = 0; element trenutni = FirstL(L); struct{ int dan,mj,god; }dost; while(trenutni != EndL(L)){ podaci ziv = RetrieveL(trenutni,L); dost.dan = ziv.dat.dan; dost.mj = ziv.dat.mj; dost.god = ziv.dat.god; if((dost.god>god) || ((dost.god==god)&&(dost.mj>mj)) || ((dost.god==god)&&(dost.mj==mj)) && (dost.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.dat.dan<<"." <<ziv.dat.mj << "." <<ziv.dat.god<<"."<<endl; cout << endl; } trenutni = NextL(trenutni,L); } cout << endl << "Broj pronadjenih zivotinja: " << broj << endl; } int brisinaziv(list* L){ char naziv[30]; cin.ignore(); cout << "Unesite naziv zivotinje koju zelite obrisati: "; cin.getline(naziv, 29, '\n'); if(isEmpty(L)) return 0; element trenutni = FirstL(L); bool postoji = false; while(trenutni != EndL(L)){ podaci ziv = RetrieveL(trenutni,L); if(strcmp(ziv.naziv,naziv)==0){ postoji = true; break; } trenutni = NextL(trenutni,L); } if(postoji){ DeleteL(trenutni,L); } else return 0; return 1; } int brisivrsta(list* L){ char vrsta[30]; cin.ignore(); cout << "Unesite vrstu zivotinja za brisanje: "; cin.getline(vrsta, 29, '\n'); element trenutni = FirstL(L); bool postoji = false; while(trenutni != EndL(L)){ podaci ziv = RetrieveL(trenutni,L); if(strcmp(ziv.vrsta,vrsta)==0){ postoji = true; DeleteL(trenutni,L); } trenutni = NextL(trenutni,L); } if(!postoji) return 0; return 1; } void Spoji(podaci polje[], int prvi, int sredina, int drugi){ int i=prvi, j=sredina+1, k=0; podaci *b=new podaci[drugi-prvi+1]; while(i<=sredina && j<=drugi){ if(polje[i].cijena>polje[j].cijena) b[k++]=polje[i++]; else if(polje[i].cijena<polje[j].cijena) b[k++]=polje[j++]; if(polje[i].cijena==polje[j].cijena){ if(strcmp(polje[i].naziv,polje[j].naziv)==1) b[k++]=polje[i++]; else b[k++]=polje[j++]; } } while(j<=drugi) b[k++]=polje[j++]; while(i<=sredina) b[k++]=polje[i++]; for(int c=0;c<=drugi-prvi;c++) polje[c+prvi]=b[c]; delete []b; } void Mergesort(podaci polje[], int prvi, int drugi){ if(prvi<drugi){ int sredina=(prvi+drugi)/2; Mergesort(polje,prvi,sredina); Mergesort(polje,sredina+1,drugi); Spoji(polje,prvi,sredina,drugi); } } void Mergesort(podaci polje[],int vel){ Mergesort(polje,0,vel-1); } void Prep(list *glavno){ if(FirstL(glavno)!=EndL(glavno)){ int broj=0; element poz=FirstL(glavno); while(false==(!true)){ broj++; poz=NextL(poz,glavno); if(poz==EndL(glavno)) break; } poz=FirstL(glavno); podaci *sort=new podaci[broj]; int mj=0; while(false==(!true)){ sort[mj]=RetrieveL(poz,glavno); mj++; poz=NextL(poz,glavno); if(poz==EndL(glavno)) break; } Mergesort(sort,broj); for(int i=0;i<broj;i++){ cout<<endl<<"Sifra: "<<sort[i].sifra; cout<<endl<<"Cijena: "<<sort[i].cijena; cout<<endl<<"Naziv: "<<sort[i].naziv; cout<<endl<<"Vrsta: "<<sort[i].vrsta; cout<<endl<<"Datum dostave: " <<sort[i].dat.dan<<"." <<sort[i].dat.mj<<"." <<sort[i].dat.god<<"."<<endl; } delete []sort; } else cout<<endl<<"Prazna lista!"<<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" << endl; cout << "5.Brisanje prema vrsti" << endl; cout << "6.Silazno sortiranje zivotinja prema cijeni i nazivu" << endl; cout << "9.Izlaz" << endl << endl; cout << "Odabir: "; cin >> odabir; system("cls"); switch(odabir){ case 1: if(!unos(L)){ cout << "Krivi unos!" << endl; } break; case 2: ispis(L); break; case 3: filter(23,9,2012,L); break; case 4: if(brisinaziv(L)){ cout << "Obrisano." << endl; } else{ cout << "Krivi unos!." << endl; } break; case 5: if(brisivrsta(L)){ cout << "Uspje������¡no obrisano!" << endl; } else{ cout << "Krivi unos!" << endl; } break; case 6: Prep(L); break; case 9: break; default: cout << "Pogre������¡an unos!" << endl; } }while(odabir != 9); DeleteAllL(L); system("pause"); return 0; }
You need to login to post a comment.
