Revision: 60611
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at November 12, 2012 02:50 by izavrski2
Initial Code
#include <iostream> #include <string> using namespace std; int sifra; struct podaci { int sifra, cijena; string naziv, vrsta; struct{int d, m,g;}datum; }; //#include "lista_polje.h" #include "lista_pokazivac.h" int dodati(Lista *zivotinje) { cout << "Unos podataka za novu zivotinju." << endl; podaci nova; nova.sifra = sifra++; cout << "Vrsta: " << endl; cin >> nova.vrsta; cout << "Naziv: " << endl; cin >> nova.naziv; cout << "Cijena: " << endl; cin >> nova.cijena; cout << "Datum dostave: " << endl; cin >> nova.datum.d; cin >> nova.datum.m; cin >> nova.datum.g; if (InsertL(nova, EndL(zivotinje), zivotinje)) { return 1; } else { return 0; } } void ispis(Lista *zivotinje) { element tekuci = EndL(zivotinje); podaci z; cout << "Ispis zivotinja od posljednje dodane." << endl<<endl; do { tekuci = PreviousL(tekuci, zivotinje); z = RetrieveL(tekuci, zivotinje); cout << "Sifra: " << z.sifra << endl<<"Vrsta: " << z.vrsta<<endl; cout << "Naziv: " << z.naziv <<endl<<"Cijena: " << z.cijena<<endl; cout << "Datum dostave: " << z.datum.d <<"."<<z.datum.m<<"."<<z.datum.g<<"."<< endl << endl; } while (tekuci != FirstL(zivotinje)); // cout << "Ispis zavrsen." << endl; } int brisanje_naziv(Lista *zivotinje) { cout << "Naziv za brisanje: "; string unos; cin >> unos; int brisanje = 0; element tekuci; podaci z; tekuci = FirstL(zivotinje); while (tekuci != EndL(zivotinje)) { z = RetrieveL(tekuci, zivotinje); if (z.naziv == unos) { brisanje = 1; DeleteL(tekuci, zivotinje); } else { tekuci = NextL(tekuci, zivotinje); } } cout<<"Brisanje gotovo."<<endl; return brisanje; } int brisanje_vrsta(Lista *zivotinje) { cout << "Vrsta za brisanje: "; string unos; cin >> unos; int brisanje = 0; element tekuci; podaci z; tekuci = FirstL(zivotinje); while (tekuci != EndL(zivotinje)) { z = RetrieveL(tekuci, zivotinje); if (z.vrsta == unos) { brisanje = 1; DeleteL(tekuci, zivotinje); } else { tekuci = NextL(tekuci, zivotinje); } } cout<<"Brisanje gotovo."<<endl; return brisanje; } void nadji_dat(Lista *zivotinje) { element tekuci; tekuci = FirstL(zivotinje); podaci z; cout << "Zivotinje dostavljene nakon 23.09.2012." << endl<<endl; int broj=0; while (tekuci != EndL(zivotinje)) { z = RetrieveL(tekuci, zivotinje); if((z.datum.g>2012) || ((z.datum.g==2012)&&(z.datum.m >9)) || ((z.datum.g==2012)&&(z.datum.m==9)) && (z.datum.d>23)) { cout << "Sifra: " << z.sifra << endl<<"Vrsta: " << z.vrsta<<endl; cout << "Naziv: " << z.naziv <<endl<<"Cijena: " << z.cijena<<endl; cout << "Datum dostave: " << z.datum.d <<"."<<z.datum.m<<"."<<z.datum.g<<"."<< endl << endl; broj++; } tekuci = NextL(tekuci, zivotinje); } cout << "Trazenje gotovo." << endl; cout<<"Broj nadjenih zivotinja: "<<broj<<endl; } void merge_sort_cijena(podaci polje[], int lijevi, int desni) { int sredina = (lijevi + desni) / 2; podaci temp; if (desni - lijevi == 1) { if (polje[desni].cijena > polje[lijevi].cijena) { temp = polje[desni]; polje[desni] = polje[lijevi]; polje[lijevi] = temp; return; } } else if (desni == lijevi) { return; } else { merge_sort_cijena(polje, lijevi, sredina); merge_sort_cijena(polje, sredina +1, desni); int size_pomocno = desni-lijevi +1; podaci *polje_pomocno = new podaci[size_pomocno]; int l = lijevi; int s = sredina +1; for (int i = 0; i < size_pomocno; i++) { if (l == sredina+1) { polje_pomocno[i] = polje[s]; s++; continue; } if (s == desni +1) { polje_pomocno[i] = polje[l]; l++; continue; } if (polje[l].cijena > polje[s].cijena) { polje_pomocno[i] = polje[l]; l++; } else { polje_pomocno[i] = polje[s]; s++; } } int j = 0; for (int i = lijevi; i <= desni; i++) { polje[i] = polje_pomocno[j]; j++; } } } void merge_sort_naziv(podaci polje[], int lijevi, int desni) { int sredina = (lijevi + desni) / 2; podaci temp; if (desni - lijevi == 1) { if (polje[desni].naziv > polje[lijevi].naziv) { temp = polje[desni]; polje[desni] = polje[lijevi]; polje[lijevi] = temp; return; } } else if (desni == lijevi) { return; } else { merge_sort_naziv(polje, lijevi, sredina); merge_sort_naziv(polje, sredina +1, desni); int size_pomocno = desni-lijevi +1; podaci *polje_pomocno = new podaci[size_pomocno]; int l = lijevi; int s = sredina +1; for (int i = 0; i < size_pomocno; i++) { if (l == sredina+1) { polje_pomocno[i] = polje[s]; s++; continue; } if (s == desni +1) { polje_pomocno[i] = polje[l]; l++; continue; } if (polje[l].naziv > polje[s].naziv) { polje_pomocno[i] = polje[l]; l++; } else { polje_pomocno[i] = polje[s]; s++; } } int j = 0; for (int i = lijevi; i <= desni; i++) { polje[i] = polje_pomocno[j]; j++; } } } void sort_cijena(Lista *zivotinje) { cout << "Sortiramo po cijeni." << endl; int broj = 0; element tekuci; podaci z; tekuci = FirstL(zivotinje); while (tekuci != EndL(zivotinje)) { broj++; tekuci = NextL(tekuci, zivotinje); } podaci *polje = new podaci[broj]; tekuci = FirstL(zivotinje); for (int i = 0; i < broj; i++) { z = RetrieveL(tekuci, zivotinje); polje[i] = z; tekuci = NextL(tekuci, zivotinje); } merge_sort_cijena(polje, 0, broj-1); for (int i = 0; i < broj; i++) { cout << "Sifra: " << polje[i].sifra <<endl<< "Vrsta: " << polje[i].vrsta<<endl; cout << "Naziv: " << polje[i].naziv <<endl<< "Cijena: " << polje[i].cijena<<endl; cout << "Datum dostave: " << polje[i].datum.d <<"."<<polje[i].datum.m<<"."<<polje[i].datum.g<<"."<< endl << endl; } } void sort_naziv(Lista *zivotinje) { cout << "Sortiramo po nazivu." << endl; int broj = 0; element tekuci; podaci z; tekuci = FirstL(zivotinje); while (tekuci != EndL(zivotinje)) { broj++; tekuci = NextL(tekuci, zivotinje); } podaci *polje = new podaci[broj]; tekuci = FirstL(zivotinje); for (int i = 0; i < broj; i++) { z = RetrieveL(tekuci, zivotinje); polje[i] = z; tekuci = NextL(tekuci, zivotinje); } merge_sort_naziv(polje, 0, broj-1); for (int i = 0; i < broj; i++) { cout << "Sifra: " << polje[i].sifra <<endl<< "Vrsta: " << polje[i].vrsta<<endl; cout << "Naziv: " << polje[i].naziv <<endl<< "Cijena: " << polje[i].cijena<<endl; cout << "Datum dostave: " << polje[i].datum.d <<"."<<polje[i].datum.m<<"."<<polje[i].datum.g<<"."<< endl << endl; } } int main() { Lista zivotinje; InitL(&zivotinje); sifra = 100; int izb; do{ cout<<endl<<"------------------IZBORNIK------------------"<<endl; cout<<"1. Ispis sadrzaja liste"<<endl <<"2. Unos nove zivotinje i ispis sadrzaja liste"<<endl <<"3. Dostavljeno nakon 23.09.2012."<<endl <<"4. Brisanje prema nazivu zivotinje"<<endl <<"5. Brisanje prema vrsti zivotinje"<<endl <<"6. Sortiranje prema cijeni(silazno)"<<endl <<"7. Sortiranje prema nazivu(silazno)"<<endl <<"0. Izlaz iz programa"<<endl <<"---------------------------------------------"; cout<<endl<<"Vas odabir: "; cin>>izb; switch(izb) { case 1: system("cls");ispis(&zivotinje);break; case 2: dodati(&zivotinje);system("cls"); ispis(&zivotinje);break; case 3: system("cls");nadji_dat(&zivotinje);break; case 4: system("cls");brisanje_naziv(&zivotinje);break; case 5: system("cls");brisanje_vrsta(&zivotinje);break; case 6: system("cls");sort_cijena(&zivotinje);break; case 7: system("cls");sort_naziv(&zivotinje);break; } }while(izb!=0); system("pause"); return 0; }
Initial URL
Initial Description
Ovo je program koji evidentira zivotinje u trgovini sa kucnim ljubimcima. Zapis treba sadrzavati sljedece podatke: sifru, vrstu, naziv, cijenu i datum dostave. Omogucena je implementacija liste i pomocu polja i pomocu pokazivaca. Glavne operacije nad listom koje izvrsava program su unos novog elementa, silazno sortiranje po nazivu i cijeni, brisanje po nazivu i cijeni, ispis dostavljenih zivotinja nakon 23. rujna 2012. te ispis zivotinja iz liste od posljednje dodane pa prema prvoj. U program se pozivaju funkcije iz biblioteka lista_polje.h i lista_pokazivac.h koje sam prethodno objavila.
Initial Title
Evidencija zivotinja_glavni program
Initial Tags
sort
Initial Language
C++