/ Published in: C++
Zadatak 1
Expand |
Embed | Plain Text
#include <iostream> #include <cstring> #include <cmath> #include "lista_polje.h" //#include "lista_pokazivac.h" //Programski kod radi ispravno samo sa bilbiotekom lista_polje.h using namespace std; float DatumPretvori(char *datumF, int i, int brojac){ if(datumF[0]>='0'&&datumF[0]<='9'){ int k = 0; float iznos = 0; while(k<brojac){ if(datumF[i-k]=='0'){k++; continue;} else iznos+=((int)datumF[i-k]-48)*pow(10.00,k); k++; } return iznos; } else{ if(datumF[1]=='S'||datumF[1]=='s') return 1; if(datumF[0]=='V'||datumF[0]=='v') return 2; if(datumF[0]=='O'||datumF[0]=='o') return 3; if(datumF[0]=='T'||datumF[0]=='t') return 4; if(datumF[1]=='V'||datumF[1]=='v') return 5; if(datumF[2]=='P'||datumF[2]=='p') return 6; if(datumF[1]=='R'||datumF[1]=='r') return 7; if(datumF[0]=='K'||datumF[0]=='k') return 8; if(datumF[0]=='R'||datumF[0]=='r') return 9; if(datumF[2]=='S'||datumF[2]=='s') return 10; if(datumF[1]=='T'||datumF[1]=='t') return 11; if(datumF[0]=='P'||datumF[0]=='p') return 12; } } void DatumShift (char *datumF, int i){ int k = i+1; int j = k; while(k<strlen(datumF)) datumF[k-j]=datumF[k++]; } void pretvorba (char *datumF, clan *element){ int shift = 0, brojac=0; for(int i=0; i<strlen(datumF); i++){ if(datumF[i]=='.'||datumF[i]==' '){ if(shift==0)element->datum.dan=(int)DatumPretvori(datumF, i-1,brojac); if(shift==1)element->datum.mjesec=(int)DatumPretvori(datumF,i-1,brojac); if(shift==2){element->datum.godina=(int)DatumPretvori(datumF,i-1,brojac); break;} DatumShift(datumF,i); if(shift<2)i=0; shift++; brojac = 0; } brojac++; } } void Spoji (clan element[], pokazivac i, pokazivac k, pokazivac j){ pokazivac I=i, J=k+1, K=0; clan *B = new clan [j-i+1]; while(I<=k && J<=j){ if((element[I].cijena>element[J].cijena)|| (element[I].cijena==element[J].cijena && strcmp(element[I].naziv,element[J].naziv)==1)){ memcpy(&B[K++],&element[I++],sizeof(element[I++])); } else { memcpy(&B[K++],&element[J++],sizeof(element[J++])); } } if(I>k) while(J<=j){ memcpy(&B[K++],&element[J++],sizeof(element[J++])); } else while(I<=k){ memcpy(&B[K++],&element[I++], sizeof(element[I++])); } for(I=0; I<=j-i;I++) memcpy(&element[i+I],&B[I],sizeof(B[I])); delete []B; } void MSort (clan element[], pokazivac i, pokazivac j){ if(i<j){ pokazivac k = (j+i)/2; MSort (element, i, k); MSort (element, k+1,j); Spoji (element, i, k, j); } } void MSort(clan element[], int N){ MSort(element, 0, N-1); } void sort(clan polje[], lista *element){ int i=0; pokazivac tekuci=FirstL(element); while (1){ clan trenutni=RetrieveL(tekuci,element); polje[i].sifra=trenutni.sifra; strcpy (polje[i].vrsta,trenutni.vrsta); strcpy (polje[i].naziv,trenutni.naziv); polje[i].cijena=trenutni.cijena; memcpy (&polje[i].datum.dan,&trenutni.datum.dan,sizeof(trenutni.datum.dan)); memcpy (&polje[i].datum.mjesec,&trenutni.datum.mjesec,sizeof(trenutni.datum.mjesec)); memcpy (&polje[i].datum.godina,&trenutni.datum.godina,sizeof(trenutni.datum.godina)); i++; if (tekuci == PreviousL(EndL(element), element)) break; tekuci=NextL(tekuci, element);} MSort(polje,i); DeleteAllL(element); element = InitL(element); clan sortiran; for (int k=0;k<i;k++){ sortiran.sifra=polje[k].sifra; strcpy (sortiran.vrsta, polje[k].vrsta); strcpy (sortiran.naziv, polje[k].naziv); sortiran.cijena=polje[k].cijena; memcpy (&polje[i].datum.dan,&sortiran.datum.dan,sizeof(sortiran.datum.dan)); memcpy (&polje[i].datum.mjesec,&sortiran.datum.mjesec,sizeof(sortiran.datum.mjesec)); memcpy (&polje[i].datum.godina,&sortiran.datum.godina,sizeof(sortiran.datum.godina)); InsertL(sortiran,EndL(element),element);} } void ispis1 (clan element){ cout << "------------------------"<<endl; cout << "Sifra: "<<element.sifra<<endl; cout << "\tVrsta: "<<element.vrsta<<endl; cout << "\tNaziv: "<<element.naziv<<endl; cout << "\tCijena: "<<element.cijena<<endl; cout << "Datum dostave: "<<element.datum.dan<<"."<<element.datum.mjesec<<"."<<element.datum.godina<<"."<<endl; } bool Delete(clan trg, lista *element){ pokazivac i = FirstL(element); while(i<EndL(element)){ i = LocateL(trg, element); if(i!=EndL(element))DeleteL(i, element); i = NextL(i, element); } return true; } int unos(lista *element,int& sifra, char *datumF){ clan novi; cout << "*************"<<endl; novi.sifra = sifra; cout << "Sifra: "<< novi.sifra<<endl<<endl; cout << "Vrsta: "; cin.ignore(); cin.getline(novi.vrsta, 50); for(int i=0; i<strlen(novi.vrsta);i++){ if(novi.vrsta[i]>='0'&&novi.vrsta[i]<='9') return 0; } cout << "Naziv: "; cin.getline(novi.naziv, 50); for(int i=0; i<strlen(novi.naziv);i++){ if(novi.naziv[i]>='0'&&novi.naziv[i]<='9') return 0; } cout << "Cijena: "; cin >> novi.cijena; cin.ignore(); cout << "Datum: "; cin.getline(datumF, 50); pretvorba(datumF, &novi); InsertL(novi, EndL(element), element); sifra++; cout << "-----------------------------------"<<endl; cout << "Ispis svih elemenata liste...."<<endl; cout << "-----------------------------------"<<endl; clan trenutni; pokazivac i = PreviousL(EndL(element),element); if(EndL(element)!=FirstL(element)); while(1){ trenutni = RetrieveL(i, element); ispis1(trenutni); if(i == FirstL(element)) break; i = PreviousL(i, element); } return 1; } int ispis_uvjet(lista *element){ int brojac = 0; bool ispis; cout << "Ispis zivotinja dostavljenih nakon 23.9.2012. godine.... \n"<<endl; pokazivac i=FirstL(element); while(i<EndL(element)){ clan trenutni = RetrieveL(i, element); ispis = false; if(trenutni.datum.godina>2012) ispis = true; if(trenutni.datum.godina==2012 && trenutni.datum.mjesec>9)ispis=true; if(trenutni.datum.godina==2012 && trenutni.datum.mjesec==9 && trenutni.datum.dan>23)ispis = true; if(ispis){ ispis1(trenutni); brojac++; } i = NextL(i, element); } if (!ispis) return false; return brojac; } int main(){ int izbor, a; clan polje[10000]; char *datumF = new char [50]; lista *element = new lista; clan trg; memset(trg.naziv, 0, 50); memset(trg.vrsta,0,50); trg.datum.dan = trg.datum.mjesec = trg.datum.godina=0; date target; InitL(element); int sifra = 1; do{ cout << "---------------------------"<<endl; cout << " IZBORNIK "<<endl; cout << "---------------------------"<<endl; cout << "1. Dodaj zapis zivotinje u listu"<<endl; cout << "2. Ispisi sve zivotinje dostavljene nakon 23.9.2012. godine"<<endl; cout << "3. Obrisi zapis po kriteriju"<<endl; cout << "4. Sortiraj silazno listu zivotinja (Merge sort)"<<endl; cout << "9. Izlaz iz programa"<<endl; cout << "---"<<endl; cout << "Vas izbor: "; cin >> izbor; switch(izbor){ case 1: if(unos(element,sifra,datumF)) cout << "---\nElement uspjesno unesen."<<endl; else cout << "---\nElement nije dodan!!! Neispravan unos!"<<endl; break; case 2: if(!ispis_uvjet(element)) cout << "*****\nNema trazenog zapisa za ispis!"<<endl; else{cout << "---\nBroj zapisa: "<<ispis_uvjet(element)<<endl;} break; case 3: if(element->sljedeci==0) cout << "*****\nNema elemenata za brisanje! Odaberite mogucnost 1."<<endl; else{ do{cout << "----\nObrisi zapis po kiretriju.....\n---"<<endl; cout << "Odaberi kriterij:\n\t[1] po nazivu\n\t[2] po vrsti"<<endl; cout << "Izbor: "; cin >> a; cout<<endl; if(a==1){ cin.ignore(); cout << "Unesi naziv: "; cin.getline(trg.naziv, 50); } if(a==2){ cin.ignore(); cout << "Unesi vrstu: "; cin.getline(trg.vrsta, 50); } if(!Delete(trg,element)) cout << "*****\nNeuspjesno brisanje! Provjerite upisani kriterij."<<endl; else { for(pokazivac i = FirstL(element); i<EndL(element); i=NextL(i,element)){ clan x = RetrieveL(i, element); ispis1(x); } cout << "*****\nBrisanje uspjesno!"<<endl; } }while(a<1||a>2); } break; case 4: sort(polje,element); for(pokazivac i=FirstL(element); i<EndL(element); i=NextL(i,element)){ clan x = RetrieveL(i,element); ispis1(x); } break; } }while(izbor!=9); return 0; }
You need to login to post a comment.
