/ Published in: C++
Ovo je glavna datoteka main u kojoj se pozivaju funkcije iz datoteka lista_pokazivac.h i lista_polje.h za implementaciju liste. Korisniku je ponuđen izbornik preko kojeg moze: 1. dodavati zapis, 2. ispisati sadrzaj, 3. pretražiti listu po datumu (ispis nakon 23.9.2012), 4. brisanje prema vrsti, 5.brisanje prema nazivu, 6. sortiranje prema nazivu i cijeni
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
#include <iostream> using namespace std; struct zivotinja{ int sifra; string naziv, vrsta; long datum; int cijena; }; #include "lista_pokazivac.h" //#include "lista_polje.h" int sifra = 1; int zadatak_a_dodavanje(Lista *popis) { cout << "Unos nove zivotinje." << endl; zivotinja nova; cout << "Vrsta: "; cin >> nova.vrsta; cout << "Naziv: "; cin >> nova.naziv; cout << "Cijena: "; cin >> nova.cijena; cout << "Datum (YYYYMMDD): "; cin >> nova.datum; nova.sifra = sifra; sifra++; if(InsertL(nova, EndL(popis) , popis)==true) return 1; else return 0; } void zadatak_a_ispis(Lista *popis){ element tekuci = EndL(popis); element prvi = FirstL(popis); zivotinja pom; do{ tekuci = PreviousL(tekuci, popis); pom = RetrieveL(tekuci, popis); cout << "Sifra: " << pom.sifra << endl; cout << "Vrsta: " << pom.vrsta << endl; cout << "Naziv: " << pom.naziv << endl; cout << "Cijena: " << pom.cijena << endl; cout << "Datum: " << pom.datum << endl << endl; }while (tekuci != prvi); } void zadatak_b(Lista *popis, long datum){ element tekuci = FirstL(popis); zivotinja pom; int brojac = 0; do{ pom = RetrieveL(tekuci, popis); if (pom.datum > datum){ brojac++; cout << "Dana " << pom.datum << " zaprimili smo: " << pom.naziv << endl; } tekuci = NextL(tekuci, popis); }while(tekuci != EndL(popis)); cout << "Nakon " << datum << " pris1tiglo je: " << brojac << " zivotinja." << endl << endl; } int zadatak_c_vrsta(Lista *popis){ string ime_vrste; cout << "Ime vrste koju brisemo: "; cin >> ime_vrste; element tekuci = FirstL(popis); zivotinja pom; int brojac = 0; do{ pom = RetrieveL(tekuci, popis); if (pom.vrsta == ime_vrste){ brojac = 1; cout << "Brisemo zivotinju sa sifrom: " << pom.sifra; cout << ", naziva: " << pom.naziv <<" i vrste: "<<pom.vrsta<< endl; DeleteL(tekuci, popis); } else{ tekuci = NextL(tekuci, popis); } }while(tekuci != EndL(popis)); return brojac; } int zadatak_c_naziv(Lista *popis){ string ime_naziv; cout << "Naziv zivotinje koju brisemo: "; cin >> ime_naziv; element tekuci = FirstL(popis); zivotinja pom; int brojac = 0; do{ pom = RetrieveL(tekuci, popis); if(pom.naziv == ime_naziv) { brojac = 1; cout << "Brisemo zivotinju sa sifrom: " << pom.sifra; cout << ", vrste: " << pom.vrsta <<" i naziva: "<<pom.naziv<< endl; DeleteL(tekuci, popis); } else{ tekuci = NextL(tekuci, popis); } }while(tekuci != EndL(popis)); return brojac; } void sortiranje_po_cijeni(zivotinja polje[], int lijevi, int desni){ int sredina = (lijevi + desni) / 2; zivotinja temp; if (lijevi == desni){ return; } else if (lijevi + 1 ==desni){ if (polje[desni].cijena > polje[lijevi].cijena){ temp = polje[desni]; polje[desni] = polje[lijevi]; polje[lijevi] = temp; return; } } else{ sortiranje_po_cijeni(polje, lijevi, sredina); sortiranje_po_cijeni(polje, sredina + 1, desni); int size_pomocno = 1+ (desni - lijevi); zivotinja *polje_pomocno = new zivotinja[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 sortiranje_po_nazivu(zivotinja polje[], int lijevi, int desni){ int sredina = (lijevi + desni) / 2; zivotinja temp; if (desni == lijevi){ return; } else if (desni - lijevi == 1){ if (polje[desni].naziv > polje[lijevi].naziv) { temp = polje[desni]; polje[desni] = polje[lijevi]; polje[lijevi] = temp; return; } } else{ sortiranje_po_nazivu(polje, lijevi, sredina); sortiranje_po_nazivu(polje, sredina +1, desni); int size_pomocno = desni-lijevi +1; zivotinja *polje_pomocno = new zivotinja[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++; } } } int main(){ Lista popis; InitL(&popis); short izb; do{ cout<<endl<<"IZBORNIK"<<endl; cout<<"1. Dodavanje zapisa u listu prema rastucoj sifri zivotinje"<<endl; cout<<"2. Ispis zivotinja (od posljednje dodane)"<<endl; cout<<"3. Pretrazivanje po datumu (ispis nakon 23.9.2012.) "<<endl; cout<<"4. Brisanje prema vrsti zivotinje"<<endl; cout<<"5. Brisanje prema nazivu zivotinje"<<endl; cout<<"6. Sortiranje zivotinja prema nazivu i cijeni (silazno)"<<endl; cout<<"9. Izlaz iz programa"<<endl; cout<<"Izbor: "; cin>>izb; switch(izb){ case 1:{ int br; cout << "Dodavanje zivotinja (rastuca sifra)" << endl; do{ cout<<"Koliko zivotinja zelite unesti?(min 5)"; cin>>br; }while(br<5); zadatak_a_dodavanje(&popis); for(int i = 1;i < br; i++){ cout<<endl; zadatak_a_dodavanje(&popis);; } break; } cout << endl; case 2: { cout << "Pocinje ispis polja (od zadnje dodanog)." << endl; zadatak_a_ispis(&popis); break; } case 3:{ cout << "Pokrecemo b zadatak, ispis nakon datuma." << endl; zadatak_b(&popis, 20120923); break; } case 4:{ zadatak_c_vrsta(&popis); break; } case 5:{ zadatak_c_naziv(&popis); break; } case 6:{ cout << "Brojanje elemenata liste." << endl; int br = 0; zivotinja pom_z; element pom = FirstL(&popis); while (pom != EndL(&popis)){ pom = NextL(pom, &popis); br++; } cout << "Prebacivanje u polje." << endl; zivotinja *pomocno = new zivotinja[br]; pom = FirstL(&popis); int j = 0; while (pom != EndL(&popis)) { pom_z = RetrieveL(pom, &popis); pomocno[j] = pom_z; j++; pom = NextL(pom, &popis); } sortiranje_po_nazivu(pomocno, 0, br-1); cout << endl << "Sortirani ispis (po nazivu). " << endl; for (int i = 0; i < br; i++) { cout << "Naziv: " << pomocno[i].naziv << endl << endl; } sortiranje_po_cijeni(pomocno, 0, br-1); cout << "Sortirani ispis (po cijeni). " << endl; for (int i = 0; i < br; i++) { cout << "Naziv: " << pomocno[i].naziv << ", cijena: " << pomocno[i].cijena << endl << endl; } break; } case 9: break; default: cout<<"Pogresan unos."<<endl; } cout<<endl; }while(izb!=9); system("pause"); return 0; }