/ Published in: C++
Glavni program evidencije zivotinja, zadatak 1 iz kolegija Strukture podataka
Expand |
Embed | Plain Text
#include <iostream> //#include "lista_polje.h" #include "lista_pokazivac.h" #include "time.h" using namespace std; void unos(char *znakovni_niz){ cin.getline(znakovni_niz, 30); if (cin.gcount()==1) cin.getline (znakovni_niz,30); }; int dodaj() { int pom; tzivotinja *novi = new tzivotinja; cout << "Sifra: " << sifra << endl; novi->sifra = sifra; cout << "Naziv: "; unos(novi->naziv); cout << "Vrsta: "; unos(novi->vrsta); cout << "Cijena: "; cin >> novi->cijena; cout << "Datum dostave: " << endl; cout << "\t Dan: "; do{cin >> pom;} while(pom<0 || pom >31); (novi->datum).tm_mday = pom; cout << "\t Mjesec: "; do{cin >> pom;}while(pom<1 || pom >12); (novi->datum).tm_mon = pom-1; cout << "\t Godina: "; do{cin >> pom;}while(pom<1 || pom >2012); (novi->datum).tm_year = pom-1900; bool dodano = insertL(novi,endL(lista),lista); sifra++; kursor++; return dodano; } void ispisi_listu() { tzivotinja tekuci; for(int i = endL(lista)-2; i>=0;i--){ tekuci = retrieveL(i, lista); cout << "Sifra:\t" << tekuci.sifra << endl; cout << "-------------" << endl; cout << "Naziv:\t" << tekuci.naziv << endl; cout << "Vrsta:\t" << tekuci.vrsta << endl; cout << "Cijena:\t" << tekuci.cijena << endl; cout << "Datum dostave:\t" << (tekuci.datum).tm_mday << "." << (tekuci.datum).tm_mon + 1 << "." << (tekuci.datum).tm_year + 1900<< "." << endl<<endl; } } int pretrazi_listu() { cout << "Zivotinje dostavljene nakon 23.9.2012." << endl<<endl; tzivotinja tekuci; int br=0; for(int i = endL(lista)-2; i>=0;i--){ tekuci = retrieveL(i, lista); if(!((tekuci.datum).tm_year + 1900 < 2012 || ((tekuci.datum).tm_year + 1900 == 2012 && ((tekuci.datum).tm_mon + 1) < 9) || ((tekuci.datum).tm_year + 1900 == 2012 && ((tekuci.datum).tm_mon + 1) == 9) && (tekuci.datum).tm_mday <= 23)){ cout << "Sifra:\t" << tekuci.sifra << endl; cout << "Naziv:\t" << tekuci.naziv << endl; cout << "Vrsta:\t" << tekuci.vrsta << endl; cout << "Cijena:\t" << tekuci.cijena << endl; cout << "Datum dostave:\t" << (tekuci.datum).tm_mday << "." << (tekuci.datum).tm_mon + 1 << "." << (tekuci.datum).tm_year + 1900<< "." << endl<<endl; br++; } } return br; } int obrisi_prema_nazivu(){ tzivotinja tekuci; cout << "Unesite naziv zivotinje za brisanje: "; char naziv[30]; bool nadjeno = false; unos(naziv); for(int i = endL(lista)-2; i>=0 && !nadjeno;i--){ tekuci = retrieveL(i, lista); if(strcmp(naziv,tekuci.naziv)==0){ cout << "Jeste li sigurni da zelite obrisati zapis (d/n): " << endl << endl; cout << "Sifra:\t" << tekuci.sifra << endl; cout << "Naziv:\t" << tekuci.naziv << endl; cout << "Vrsta:\t" << tekuci.vrsta << endl; cout << "Cijena:\t" << tekuci.cijena << endl; cout << "Datum dostave:\t" << (tekuci.datum).tm_mday << "." << (tekuci.datum).tm_mon + 1 << "." << (tekuci.datum).tm_year + 1900<< "." << endl<<endl; nadjeno = true; char izbor; cout << "(d/n) >> "; do{cin >>izbor;} while(izbor!='d' && izbor!='n'); if(izbor=='d') deleteL(i,lista); else return 0; } } return nadjeno; } int obrisi_prema_vrsti(){ tzivotinja tekuci; cout << "Unesite vrstu zivotinje za brisanje: "; char vrsta[30]; bool nadjeno = false; bool obrisano = false; unos(vrsta); for(int i = endL(lista)-2; i>=0;i--){ tekuci = retrieveL(i, lista); if(strcmp(vrsta,tekuci.vrsta)==0){ char izbor; if(!nadjeno){ cout << "Jeste li sigurni da zelite obrisati zapise ove vrste: " << vrsta << endl << endl; cout << "(d/n) >> "; do{cin >>izbor;} while(izbor!='d' && izbor!='n'); } if(izbor=='d'){ deleteL(i,lista); obrisano = true; } nadjeno = true; } } return obrisano; } void Merge(int i, int k, int j) { int I=i, J=k+1, K=0; tzivotinja a,b,*POM = new tzivotinja [j-i+1]; #define lista(x) retrieveL(x,lista); // isto sto lista[i] samo zbog pokazivaca while(I<=k && J<=j){ a=lista(I); b=lista(J); if(a.cijena < b.cijena) { POM[K++]=a; I++; } else if(a.cijena > b.cijena){ POM[K++]=b; J++; } else if(strcmp(a.naziv,b.naziv)==1) { POM[K++]=b; J++; } else { POM[K++]=a; I++; } } if(I>k) while(J<=j) { b=lista(J++); POM[K++] = b; } else while(I<=k) { a=lista(I++); POM[K++] = a; } for(int I=0;I<=j-i;I++) updateL(POM[I],i+I,lista); delete [] POM; } void MS(int i, int j) { if(i<j) { int k=(i+j)/2; MS(i,k); MS(k+1,j); Merge(i,k,j); } } int sortiraj() { MS(0,endL(lista)-2); return 1; } int izbornik(){ int izbor; cout << endl << "Izbornik" << endl; cout << "===================" << endl; cout << " 1) Dodaj zapis" << endl; cout << " 2) Ispisi listu" << endl; cout << " 3) Pretrazi listu" << endl; cout << " 4) Brisi prema nazivu" << endl; cout << " 5) Brisi prema vrsti" << endl; cout << " 6) Sortiraj listu" << endl; cout << " 9) Izlaz iz programa" << endl; cout << endl; cin >> izbor; system("cls"); return izbor; } int main(){ //INICIJALIZACIJA GLAVE LISTE initL(lista); int izbor = 0; do { izbor = izbornik(); switch(izbor){ case 1: cout << (dodaj()? "\nZapis uspjesno dodan!" : "\nZapis nije dodan") << endl << endl; break; case 2: ispisi_listu(); break; case 3: cout<< "Ispisano je " << pretrazi_listu() << " zapisa.\n"; break; case 4: cout << (obrisi_prema_nazivu() ? "Zapis izbrisan" : "zapis nije obrisan ili nije pronadjen zapis s tim nazivom" ) << endl << endl; break; case 5: cout << (obrisi_prema_vrsti() ? "Zivotinje te vrste su obrisane" : "Zapis nije obrisan ili ne postoji zapis te vrste" ) << endl<<endl; break; case 6: cout << (sortiraj() ? "Lista sortirana!" : "Lista NIJE sortirana" ) << endl << endl; break; } }while (izbor!=9); return 0; }
You need to login to post a comment.
