/ Published in: C++
Program koji će evidentirati životinje u trgovini sa kućnim ljubimcima. Zapis treba sadržavati sljedeće podatke: Å¡ifru, vrstu, naziv, cijenu i datum dostave. Na poÄetku testiranja programa potrebno je pohraniti minimalno pet razliÄitih zapisa u listu pri Äemu naziv i vrstu životinja odabirete samostalno. Program treba raditi neovisno o implementaciji liste.
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
#include <cstdlib> #include <iostream> //#include "lista_polje_mm.h" #include "lista_pokazivac_mm.h" using namespace std; int upisi() { objekt novi; cout<<"Vrsta zivotinje: "; cin.ignore(); cin.getline(novi.vrsta,30); cout<<"Naziv zivotinje: "; cin.getline(novi.naziv,30); novi.sifra=sifra++; cout<<"Cijena zivotinje: "; cin>>novi.cijena; if(novi.cijena<=0) { sifra--; return 0;} cout<<"Datum dostave:"<<endl; cout<<"Unesite dan: "; cin>>novi.datum.dan; if(novi.datum.dan<=0||novi.datum.dan>31) { sifra--; return 0;} cout<<"Unesite mjesec: "; cin>>novi.datum.mjesec; if(novi.datum.mjesec<=0||novi.datum.mjesec>12) { sifra--; return 0;} cout<<"Unesite godinu: "; cin>>novi.datum.godina; if(novi.datum.godina>2012) { sifra--; return 0;} InsertL(novi,br_objekt,LA); br_objekt++; return 1; } void ispis_zivotinja() { objekt ziv; int brojac=0; int p = PreviousL(EndL(LA),LA); while(brojac<br_objekt){ ziv=RetrieveL(p,LA); cout<<"=====================\n"; cout<<"Sifra zivotinje: "; cout<<ziv.sifra<<endl; cout<<"Vrsta zivotinje: "; cout<<ziv.vrsta<<endl; cout<<"Naziv zivotinje: "; cout<<ziv.naziv<<endl; cout<<"Cijena zivotinje: "; cout<<ziv.cijena<<endl; cout<<"Datum: "; cout<<ziv.datum.dan<<"."; cout<<ziv.datum.mjesec<<"."; cout<<ziv.datum.godina<<endl; cout<<"=====================\n"; p = PreviousL(p,LA); brojac++; } //while } //ispis_zivotinja void jesensko_vrijeme() { int brojac=0; objekt ziv; int p = FirstL(LA); while(p!=EndL(LA)) { ziv = RetrieveL(p,LA); if((ziv.datum.godina==2012&&ziv.datum.mjesec==9&&ziv.datum.dan>23) ||ziv.datum.godina==2012&&ziv.datum.mjesec>9) { cout<<"Sifra zivotinje: "; cout<<ziv.sifra<<endl; cout<<"Vrsta zivotinje: "; cout<<ziv.vrsta<<endl; cout<<"Naziv zivotinje: "; cout<<ziv.naziv<<endl; cout<<"Cijena zivotinje: "; cout<<ziv.cijena<<endl; cout<<"Datum zivotinje: "; cout<<ziv.datum.dan; cout<<"."<<ziv.datum.mjesec; cout<<"."<<ziv.datum.godina<<endl; cout<<"================"<<endl; brojac++; } //if p = NextL(p,LA); } //while cout<<"Ukupan broj zivotinja dostavljenih nakon 23. rujna 2012: "; cout<<brojac<<endl<<endl; } //ispis_datum int obrisi_naziv() { char naziv[30]; objekt ziv; cout<<"Unesite naziv zivotinje koju zelite obrisati: "; cin.ignore(); cin.getline(naziv,30); int p = LocateL(naziv,LA); if(p==EndL(LA)) return 0; else { DeleteL(p,LA); br_objekt--; return 1; } } int obrisi_vrstu() { char vrsta[30]; objekt ziv; int p; bool obrisan=0; v=1; cout<<"Unesite vrstu zivotinje koju zelite obrisati: "; cin.ignore(); cin.getline(vrsta,30); while (LocateL(vrsta,LA)!=EndL(LA)) { p = LocateL(vrsta,LA); DeleteL(p,LA); br_objekt--; obrisan=1; } if(!obrisan) return 0; else return 1; } void ispis() { objekt ziv; int p=FirstL(LA); while (p!=EndL(LA)){ ziv=RetrieveL(p,LA); cout<<"Sifra zivotinje: "; cout<<ziv.sifra<<endl; cout<<"Vrsta zivotinje: "; cout<<ziv.vrsta<<endl; cout<<"Naziv zivotinje: "; cout<<ziv.naziv<<endl; cout<<"Cijena zivotinje: "; cout<<ziv.cijena<<endl; cout<<"Datum zivotinje: "; cout<<ziv.datum.dan<<"."; cout<<ziv.datum.mjesec<<"."; cout<<ziv.datum.godina<<endl; cout<<"================="<<endl; p = NextL(p,LA); } } void spoji(objekt A[], int poc, int sre, int kra) { int n; int I=poc, J=sre+1, K=0; objekt *B = new objekt [kra-poc+1]; while (I <= sre && J <= kra) if (A[I].cijena<A[J].cijena) memcpy(&B[K++], &A[I++], sizeof(objekt) ); else if (A[I].cijena == A[J].cijena) { if (strcmp((A[I].naziv),(A[J].naziv))<0) memcpy(&B[K++], &A[I++], sizeof(objekt) ); else memcpy(&B[K++], &A[J++], sizeof(objekt) ); } else memcpy(&B[K++], &A[J++], sizeof(objekt) ); if (I>sre) while (J <= kra) memcpy(&B[K++], &A[J++], sizeof(objekt) ); else while (I<=sre) memcpy(&B[K++], &A[I++], sizeof(objekt) ); for (int I = 0; I <=kra-poc; I++) memcpy(&A[poc+I], &B[I], sizeof(objekt) ); delete []B; } void MSort (objekt *A, int poc, int kra) { if (poc<kra) { int sre=(poc+kra)/2; MSort(A,poc,sre); MSort (A, sre+1, kra); spoji (A,poc,sre,kra); } } void MSort (objekt A[], int N) { MSort (A,0,N-1); } void sort (lis *LA) { objekt novi[1000]; int pozicija=FirstL(LA); //za pok int n=0; while (pozicija!=EndL(LA)) { novi[n]=RetrieveL(pozicija,LA); pozicija=NextL(pozicija,LA); 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.dan<<"."; cout<<novi[n].datum.mjesec<<"."; cout<<novi[n].datum.godina<<endl; cout<<endl; } } int main() { int izbor; InitL(LA); do { cout<<"********************IZBORNIK*************************"<<endl; cout<<"====================================================="<<endl; cout<<"1. Dodaj zapis"<<endl; cout<<"2. Ispis liste (od zadnje dodane zivotinje)"<<endl; cout<<"3. Ispis zivotinja dostavljenih nakon 23. rujna 2012"<<endl; cout<<"4. Brisanje zivotinje prema nazivu"<<endl; cout<<"5. Brisanje zivotinje prema vrsti"<<endl; cout<<"6. Silazno sortiranje po cijeni ili nazivu"<<endl; cout<<"7. Izlaz iz programa"<<endl; cout<<"====================================================="<<endl; cin>>izbor; switch(izbor) { case 1: if(upisi()) cout<<"Zapis je zabiljezen.\n"; else cout<<"Pogresan unos\n"; break; case 2:ispis_zivotinja(); break; case 3:jesensko_vrijeme(); break; case 4: if(obrisi_naziv()) { cout<<"\nObrisana je.\n\n"; ispis(); } else cout<<"\nZivotinja nije obrisana.\n\n"; break; case 5: if(obrisi_vrstu()) { cout<<"\nObrisana je.\n\n"; ispis(); } else cout<<"Zivotinja nije uspjesno obrisana.\n\n"; break; case 6: sort(LA); break; } }while(izbor!=7); system("PAUSE"); return EXIT_SUCCESS; }
URL: http://e.foi.hr/wiki/strukture_podataka/index.php/Zadatak_1_Majcen_Marko