/ Published in: C++
Kod je vrlo jednostavan. U izborniku mozemo vidjeti zaglavlje lista_polje.h i lista_pokazivac.h. Ovisno kako zelimo da program radi, stavljamo jedan od headera u komenat posto obje implementacije koriste iste funkcije.
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
#include <iostream> //#include "lista_polje.h" #include "lista_pokazivac.h" using namespace std; bool Unos_Elemenata(Lista*); void Ispis_Elemenata(Lista*); void Trazi(Lista*); bool Brisi_Vrsta(Lista*); bool Brisati_Element(Lista*); void Sortiranje(Lista*); int main() { int Izbor; Lista* Element=new Lista; InitL(Element); do{ system("cls"); cout<<"1: za unos zivotinja"<<endl; cout<<"2: za ispis zivotinja "<<endl; cout<<"3: za pretrazivanje"<<endl; cout<<"4: za brisanje po nazivu"<<endl; cout<<"5: za brisanje po vrsti"<<endl; cout<<"6: za sortiranje"<<endl; cout<<"0: izlaz iz programa "<<endl; cout<<endl; cout<< endl << "\nIzaberi: "; cin >> Izbor; if(Izbor==1) if (Unos_Elemenata(Element)) cout << "Zapis dodan." << endl; if(Izbor==2) Ispis_Elemenata(Element); if(Izbor==3) Trazi(Element); if(Izbor==4) Brisati_Element(Element); if(Izbor==5) Brisi_Vrsta(Element); if(Izbor==6) Sortiranje(Element); }while (Izbor!=0); return 0; } bool Unos_Elemenata(Lista* Glava) { static int Sifra=100; zivotinja* Novi=new zivotinja; cout << endl << "Naziv zivotinje: "; cin.ignore(); cin.getline(Novi->Naziv, 50); cout << "Vrsta: "; cin.getline(Novi->Vrsta, 50); cout << "Datum (DD MM YYYY): "; cin >> Novi->datum_dostave.Dan >> Novi->datum_dostave.Mjesec >> Novi->datum_dostave.Godina; cout << "Cijena: "; cin >> Novi->Cijena; Novi->Sifra=Sifra++; return InsertL(*Novi, EndL(Glava), Glava); } bool Usporedi( char* Prvi, char* Drugi, int Broj_1, int Broj_2) { if(Broj_1!=Broj_2) return false; for (int i=0; i<Broj_1; i++) if(Prvi[i]!=Drugi[i]) return false; return true; } bool Brisati_Element(Lista* L) { cout << endl << "Naziv: "; char Naziv[50]; cin.ignore(); cin.getline(Naziv, 50); zivotinja Zivotinja_1; for(el Trenutni=FirstL(L); Trenutni!=EndL(L); Trenutni=NextL(Trenutni, L)) { Zivotinja_1=RetrieveL(Trenutni, L); if(Usporedi(Naziv, Zivotinja_1.Naziv, strlen(Naziv), strlen(Zivotinja_1.Naziv))) { if(DeleteL(LocateL(Zivotinja_1, L), L)==-1) return 0; else return 1; } } return 0; } bool Brisi_Vrsta(Lista* L) { int Brojac=0; cout << endl << "Vrsta: "; char Vrsta[50]; cin.ignore(); cin.getline(Vrsta, 50); zivotinja Zivoinja_1; for(el Trenutni=FirstL(L); Trenutni!=EndL(L); ) { Zivoinja_1=RetrieveL(Trenutni, L); if(Usporedi(Vrsta, Zivoinja_1.Vrsta, strlen(Vrsta), strlen(Zivoinja_1.Vrsta))) if(DeleteL(LocateL(Zivoinja_1, L), L)) { Brojac++; continue; } Trenutni=NextL(Trenutni, L); } if(Brojac) return 1; else return 0; } int Broj_Elemenata(Lista* L) { int Broj=0; for(el Trenutni=FirstL(L); Trenutni!=EndL(L); Trenutni=NextL(Trenutni, L)) Broj++; return Broj; } bool usporedi(zivotinja Element_1, zivotinja Element_2) { if(Element_1.Cijena<Element_2.Cijena) return true; if(Element_1.Cijena==Element_2.Cijena) { int temp=(strlen(Element_1.Naziv)<strlen(Element_2.Naziv)) ? strlen(Element_1.Naziv) : strlen(Element_2.Naziv); for(int I=0; I<temp; I++) if(Element_1.Naziv[I]>Element_2.Naziv[I]) return false; else if(Element_1.Naziv[I]<Element_2.Naziv[I]) return true; } return false; } void Merge(zivotinja Polje[], int I, int K, int J) { int Pol_1=I; int Pol_2=K+1; int temp=0; zivotinja* Drugo_polje=new zivotinja[J-I+1]; while(Pol_1<=K && Pol_2<=J) if(usporedi(Polje[Pol_1], Polje[Pol_2])) Drugo_polje[temp++]=Polje[Pol_1++]; else Drugo_polje[temp++]=Polje[Pol_2++]; if(Pol_1>K) while(Pol_2<=J) Drugo_polje[temp++]=Polje[Pol_2++]; else while(Pol_1<=K) Drugo_polje[temp++]=Polje[Pol_1++]; for(int X=I; X<=J; X++) Polje[X]=Drugo_polje[X-I]; delete[] Drugo_polje; } void Merge_Sort(zivotinja Novo_polje[], int I, int J) { if(I<J) { int K=(I+J)/2; Merge_Sort(Novo_polje, I, K); Merge_Sort(Novo_polje, K+1, J); Merge(Novo_polje, I, K, J); } } void Merge_Sort(zivotinja Novo_polje[], int Broj) { Merge_Sort(Novo_polje, 0, Broj-1); } void Sortiranje(Lista* L){ int Broj_elemenata=Broj_Elemenata(L), I=0; zivotinja* Novi=new zivotinja[Broj_elemenata]; for(el Novo=FirstL(L); Novo!=EndL(L); Novo=NextL(Novo, L)) Novi[I++]=RetrieveL(Novo, L); DeleteAllL(L); Merge_Sort(Novi, Broj_elemenata); for(int I=0; I<Broj_elemenata; I++) InsertL(Novi[I], FirstL(L), L); delete[] Novi; } void Ispis_Elemenata(Lista* L) { cout << "Ispis: " << endl; for (el Trenutni=EndL(L); (Trenutni=PreviousL(Trenutni, L))!=NULL; ) cout << RetrieveL(Trenutni, L) << endl; cin.ignore(); cout << "\n Pritisni bilo sto za dalje."; cin.get(); } void Trazi(Lista* L) { zivotinja Zivotinja; int Brojac=0; for (el Trenutni=FirstL(L); Trenutni!=EndL(L); Trenutni=NextL(Trenutni, L)) { Zivotinja=RetrieveL(Trenutni, L); int Datum=(Zivotinja.datum_dostave.Godina*10000)+(Zivotinja.datum_dostave.Mjesec*100)+Zivotinja.datum_dostave.Dan; if (Datum>20120923){ cout << Zivotinja << endl; Brojac++; } } cout << "Ukupno zivotinja koje su dostavljenje poslije 23. rujna 2012: " << Brojac; cin.ignore(); cout << "Pritisni bilo sto za dalje."; cin.get(); }