/ Published in: C++
Main program - evidencija zivotinja u trgovini s kucnim ljubimcima
Expand |
Embed | Plain Text
#include <iostream> #include <cstring> //#include "lista_polje.h" #include "lista_pokazivac.h" using namespace std; //FUNKCIJA -------- Dodavanje zivotinje prema rastucoj sifri ---------------- int dodajZivotinju() { zivotinja novi; novi.sifra = sifra++; cout<<"Vrsta (slova): "; cin.ignore(); cin.getline(novi.vrsta, 64); cout<<"Naziv (slova): "; cin.getline(novi.naziv, 64); cout<<"Cijena (decimalni broj s .): "; cin>>novi.cijena; if(novi.cijena <= 0) { sifra--; return 0; } cout<<"Unesite datum dostave:\n"; cout<<"Dan (cijeli broj): "; cin>>novi.datum.dan; if(novi.datum.dan <= 0 || novi.datum.dan > 31) { sifra--; return 0; } cout<<"Mjesec (slova): "; cin.ignore(); cin.getline(novi.datum.mjesec, 16); cout<<"Godina (cijeli broj): "; cin>>novi.datum.godina; if(novi.datum.godina < 1900) { sifra--; return 0; } InsertL(novi, brojElemenata, lista); brojElemenata ++; return 1; } //KRAJ FUNKCIJA -------- Dodavanje zivotinje prema rastucoj sifri ---------------- //FUNKCIJA -------- Ispisivanje zivotinja pocevsi od sifre posljednje dodane zivotinje ---------------- void ispisiOdKraja() { int sifraZadnja=1; zivotinja a, b; int k = 0; int p = PreviousL(EndL(lista), lista); while(k < brojElemenata){ b = RetrieveL(p, lista); if(sifraZadnja < b.sifra) sifraZadnja = b.sifra; p = PreviousL(p, lista); k++; } cout<<"Sifra zadnja: "<<sifraZadnja<<endl; p = PreviousL(EndL(lista), lista); k = sifraZadnja; while(k >0){ a = RetrieveL(p, lista); if(a.sifra == k) { cout<<"Sifra: "<<a.sifra<<endl; cout<<"Vrsta: "<<a.vrsta<<endl; cout<<"Naziv: "<<a.naziv<<endl; cout<<"Cijena: "<<a.cijena<<endl; cout<<"Datum: "<<a.datum.dan<<"."; cout<<a.datum.mjesec<<"."<<a.datum.godina<<".\n"; cout<<"-------------------------------\n"; p = PreviousL(EndL(lista), lista); k--; } else { p = PreviousL(p, lista); if(p == -1) { k--; p = PreviousL(EndL(lista), lista); } } } } //KRAJ FUNKCIJA -------- Ispisivanje zivotinja pocevsi od sifre posljednje dodane zivotinje ---------------- //FUNKCIJA -------- Ispisivanje zivotinja dostavljenih nakon 23. rujna 2012. ---------------- void ispisiPosljeRujan() { int br = 0; zivotinja a; int p = FirstL(lista); while(p != EndL(lista)) { a = RetrieveL(p, lista); if((a.datum.godina == 2012) && ( (!strcmp(a.datum.mjesec, "rujan") && (a.datum.dan > 23)) || (!strcmp(a.datum.mjesec,"listopad") || !strcmp(a.datum.mjesec,"studeni") || !strcmp(a.datum.mjesec,"prosinac")) )) { br++; cout<<"Sifra: "<<a.sifra<<endl; cout<<"Vrsta: "<<a.vrsta<<endl; cout<<"Naziv: "<<a.naziv<<endl; cout<<"Cijena: "<<a.cijena<<endl; cout<<"Datum: "<<a.datum.dan<<"."<<a.datum.mjesec<<"."<<a.datum.godina<<".\n"; cout<<"------------------------------\n"; } if(a.datum.godina > 2012) { br++; cout<<"Sifra: "<<a.sifra<<endl; cout<<"Vrsta: "<<a.vrsta<<endl; cout<<"Naziv: "<<a.naziv<<endl; cout<<"Cijena: "<<a.cijena<<endl; cout<<"Datum: "<<a.datum.dan<<"."<<a.datum.mjesec<<"."<<a.datum.godina<<".\n"; cout<<"------------------------------\n"; } p = NextL(p, lista); } cout<<"Broj pronadjenih zivotinja: "<<br<<endl<<endl; } //KRAJ FUNKCIJA -------- Ispisivanje zivotinja dostavljenih nakon 23. rujna 2012. ---------------- //FUNKCIJA -------- Brisanje zivotinja iz liste, po nazivu zivotinje ---------------- int brisiPoNazivuZivotinje() { char naziv[64]; zivotinja a; cout<<"Unesite naziv zivotinje: "; cin.ignore(); cin.getline(naziv, 64); int p = LocateL(naziv,lista); if(p==EndL(lista)) return 0; else { DeleteL(p, lista); brojElemenata--; return 1; } } //KRAJ FUNKCIJA -------- Brisanje zivotinja iz liste, po nazivu zivotinje ---------------- //FUNKCIJA -------- Brisanje zivotinja iz liste, po vrsti zivotinje ---------------- int brisiPoVrstiZivotinje() { char vrsta[64]; int p; bool uspjeh = 0; cout<<"Brisi vrstu: "; cin.ignore(); cin.getline(vrsta,64); while (LocateL(vrsta,lista) != EndL(lista)) { p = LocateL(vrsta,lista); DeleteL(p, lista); brojElemenata--; uspjeh=1; } if(!uspjeh) return 0; else return 1; } //KRAJ FUNKCIJA -------- Brisanje zivotinja iz liste, po vrsti zivotinje ---------------- //FUNKCIJA -------- Automatsko popunjavanje liste s nekim testnim zivotinjama za ubrzavanje testiranje ---------------- int dodajAutomatskiZivotinje() { zivotinja novi; //Element 1 (Zivotinja 1) novi.sifra = sifra++; strncpy(novi.vrsta, "papiga", sizeof(novi.vrsta)); strncpy(novi.naziv, "Kokolo", sizeof(novi.vrsta)); novi.cijena = 699.99; novi.datum.dan = 2; strncpy(novi.datum.mjesec, "studeni", sizeof(novi.datum.mjesec)); novi.datum.godina = 2012; InsertL(novi,brojElemenata,lista); brojElemenata ++; //Element 2 (Zivotinja 2) novi.sifra = sifra++; strncpy(novi.vrsta, "pas", sizeof(novi.vrsta)); strncpy(novi.naziv, "Riki", sizeof(novi.vrsta)); novi.cijena = 2299.99; novi.datum.dan = 5; strncpy(novi.datum.mjesec, "sijecanj", sizeof(novi.datum.mjesec)); novi.datum.godina = 2013; InsertL(novi,brojElemenata,lista); brojElemenata ++; //Element 3 (Zivotinja 3) novi.sifra = sifra++; strncpy(novi.vrsta, "macka", sizeof(novi.vrsta)); strncpy(novi.naziv, "Mica", sizeof(novi.vrsta)); novi.cijena = 299.99; novi.datum.dan = 4; strncpy(novi.datum.mjesec, "kolovoz", sizeof(novi.datum.mjesec)); novi.datum.godina = 2012; InsertL(novi,brojElemenata,lista); brojElemenata ++; //Element 4 (Zivotinja 5) novi.sifra = sifra++; strncpy(novi.vrsta, "papiga", sizeof(novi.vrsta)); strncpy(novi.naziv, "Aron", sizeof(novi.vrsta)); novi.cijena = 1299.99; novi.datum.dan = 11; strncpy(novi.datum.mjesec, "prosinac", sizeof(novi.datum.mjesec)); novi.datum.godina = 2012; InsertL(novi,brojElemenata,lista); brojElemenata ++; //Element 5 (Zivotinja 5) novi.sifra = sifra++; strncpy(novi.vrsta, "hrcak", sizeof(novi.vrsta)); strncpy(novi.naziv, "Hrki", sizeof(novi.vrsta)); novi.cijena = 499.99; novi.datum.dan = 28; strncpy(novi.datum.mjesec, "listopad", sizeof(novi.datum.mjesec)); novi.datum.godina = 2012; InsertL(novi,brojElemenata,lista); brojElemenata ++; return 1; } //KRAJ FUNKCIJA -------- Automatsko popunjavanje liste s nekim testnim zivotinjama za ubrzavanje testiranje ---------------- //FUNKCIJA -------- Ispisivanje liste zivotinja od prve dodanje ---------------- void ispisiOdPocetka() { zivotinja a; int p = FirstL(lista); while (p != EndL(lista)){ a = RetrieveL(p,lista); cout<<"Sifra: "<<a.sifra<<endl; cout<<"Vrsta: "<<a.vrsta<<endl; cout<<"Naziv: "<<a.naziv<<endl; cout<<"Cijena: "<<a.cijena<<endl; cout<<"Datum: "<<a.datum.dan<<"."; cout<<a.datum.mjesec<<"."<<a.datum.godina<<".\n"; cout<<"-------------------------------\n"; p = NextL(p, lista); } } //KRAJ FUNKCIJA -------- Ispisivanje liste zivotinja od prve dodanje ---------------- //POMOCNA FUNKCIJA -------- Algoritam za sortiranje i ---------------- void spajanje(int i, int k, int j) { int I = i, J = k + 1, K = 0; zivotinja *b = new zivotinja [j - i + 1]; zivotinja prvi, drugi; while(I <= k && J <= j){ prvi = RetrieveL(I, lista); drugi = RetrieveL(J, lista); if(prvi.cijena > drugi.cijena) { b[K++] = prvi; I++; } else if(prvi.cijena < drugi.cijena){ b[K++] = drugi; J++; } else if(strcmp(prvi.naziv, drugi.naziv) == -1) { b[K++] = drugi; J++; } else { b[K++] = prvi; I++; } } if(I>k) while(J<=j) { drugi=RetrieveL(J, lista); b[K++] = drugi; J++; } else while(I<=k) { prvi=RetrieveL(I, lista); b[K++] = prvi; I++; } for(int I=0; I<=j-i; I++) Vrati(b[I], i+I, lista); delete [] b; } //KAJ POMOCNA FUNKCIJA -------- Algoritam za sortiranje i spajanje ---------------- //POMOCNA FUNKCIJA -------- Za dijeljenje liste na pola i pozivanje algoritma za spajanje i sortiranje ---------------- void mergeSort(int i, int j) { if(i < j) { int k=(i + j) / 2; mergeSort(i, k); mergeSort(k+1, j); spajanje(i, k, j); } } //KRAJ POMOCNA FUNKCIJA -------- Za dijeljenje liste na pola i pozivanje algoritma za spajanje i sortiranje ---------------- //FUNKCIJA -------- Sortiranje liste zivotinja po cijeni i nazivu ---------------- void mergeSortiranje() { mergeSort(0, brojElemenata - 1); } //KRAJ FUNKCIJA -------- Sortiranje liste zivotinja po cijeni i nazivu ---------------- //GLAVNI PROGRAM ---------------- int main() { int izbornik; //Inicijalizacija liste, ako je preko polja onda postavljanje cursora na 0, a ako je preko pokazivaca onda postavljanje sljedeceg na NULL InitL(lista); do { cout<<"0. Izlaz iz programa\n"; cout<<"1. Dodaj zivotinju\n"; cout<<"2. Ispisivanje zivotinja pocevsi od sifre posljednje dodane zivotinje\n"; cout<<"3. Ispisivanje zivotinja dostavljenih nakon 23. rujna 2012.\n"; cout<<"4. Brisanje zivotinja iz liste, po nazivu zivotinje\n"; cout<<"5. Brisanje zivotinja iz liste, po vrsti zivotinje\n"; cout<<"6. Silazno sortiranje po cijeni (ili nazivu)\n\n"; cout<<"8. Ispisivanje od pocetka do kraja liste\n"; cout<<"9. Unesi automatski neke testne podatke i ispisi listu (ubrzavanje testiranja)\n\n"; cout<<"Odabrano: "; cin>>izbornik; cout<<"\n"; switch(izbornik) { case 1: if(dodajZivotinju()) cout<<"Zapis dodan.\n\n"; else cout<<"Pogreska\n\n"; break; case 2: ispisiOdKraja(); break; case 3: ispisiPosljeRujan(); break; case 4: if(brisiPoNazivuZivotinje()) { cout<<"Zivotinja obrisana.\n\n"; } else cout<<"Zivotinja nije obrisana.\n\n"; break; case 5: if(brisiPoVrstiZivotinje()) { cout<<"Vrsta obrisana.\n\n"; } else cout<<"Vrsta nije obrisana.\n\n"; break; case 6: mergeSortiranje(); ispisiOdPocetka(); break; case 8: ispisiOdPocetka(); break; case 9: if(dodajAutomatskiZivotinje()) { cout<<"Zivotinje automatski dodane.\n\n"; ispisiOdPocetka(); } else cout<<"Zivotinje nisu automatski dodane.\n\n"; break; } cout<<"\n: : : : : : : : : : : : : : : : : : : : : : : : : : : : \n\n"; cout<<" START\n"; cout<<"\n: : : : : : : : : : : : : : : : : : : : : : : : : : : : \n\n"; } while(izbornik != 0); DeleteAll(lista); //system("pause"); return 0; } //KRAJ GLAVNI PROGRAM ----------------
Comments
Subscribe to comments
You need to login to post a comment.

Super napravljeno kolega, razlikuje nam se kod u merge sortu, ali oba su dobra. Pohvala na dodavanju automatske liste.