Revision: 60468
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at November 10, 2012 02:18 by msestak2
Initial Code
#include<iostream>
#include<string>
using namespace std;
#define POCETAK 1
//#include "lista_pokazivaci.h"
#include "lista_polje.h"
bool isEmpty( list* L){
return FirstL(L) == EndL(L);
}
int unos(list *L){
int sifra = 0;
if(isEmpty(L))
sifra = POCETAK;
else{
sifra = RetrieveL(PreviousL(EndL(L),L),L).sifra+1;
}
elementtype novo;
cout <<"Nova zivotinja #" << sifra << endl;
novo.sifra = sifra;
cout << "Naziv: "; cin.ignore(); cin.getline(novo.naziv, 29, '\n');
cout << "Vrsta: "; cin.getline(novo.vrsta, 29, '\n');
cout << "Cijena: "; cin >> novo.cijena;
if(novo.cijena < 0)
return 0;
cout << "Datum dostave" << endl;
cout << "Dan: "; cin >> novo.datum_dostave.dan;
if(novo.datum_dostave.dan<1 || novo.datum_dostave.dan>31)
return 0;
cout << "Mjesec: "; cin >> novo.datum_dostave.mjesec;
if(novo.datum_dostave.mjesec<1 || novo.datum_dostave.mjesec>12)
return 0;
cout << "Godina: "; cin >> novo.datum_dostave.godina;
if(novo.datum_dostave.godina<1900)
return 0;
InsertL(novo,EndL(L),L);
return 1;
}
void ispis(list *L){
element zadnji = EndL(L);
while(zadnji != FirstL(L)){
elementtype ziv = RetrieveL(PreviousL(zadnji,L),L);
cout << "Sifra: " << ziv.sifra << endl;
cout << "Naziv: " << ziv.naziv << endl;
cout << "Vrsta: " << ziv.vrsta << endl;
cout << "Cijena: " << ziv.cijena << endl;
cout << "Datum dostave: " << ziv.datum_dostave.dan<<"."
<<ziv.datum_dostave.mjesec << "."
<<ziv.datum_dostave.godina<<"."<<endl;
cout <<endl;
zadnji = PreviousL(zadnji,L);
}
}
void filterDostava(int dan, int mjesec, int godina, list* L){
if(isEmpty(L)){
cout << endl << "Broj pronadjenih zivotinja: 0" << endl;
return;
}
int broj = 0;
element tekuci = FirstL(L);
struct{
int dan,mjesec,godina;
}dostava;
while(tekuci != EndL(L)){
elementtype ziv = RetrieveL(tekuci,L);
dostava.dan = ziv.datum_dostave.dan;
dostava.mjesec = ziv.datum_dostave.mjesec;
dostava.godina = ziv.datum_dostave.godina;
if((dostava.godina>godina) ||
((dostava.godina==godina)&&(dostava.mjesec>mjesec)) ||
((dostava.godina==godina)&&(dostava.mjesec==mjesec)) && (dostava.dan>dan)){
broj++;
cout << "Sifra: " << ziv.sifra << endl;
cout << "Naziv: " << ziv.naziv << endl;
cout << "Vrsta: " << ziv.vrsta << endl;
cout << "Cijena: " << ziv.cijena << endl;
cout << "Datum dostave: " << ziv.datum_dostave.dan<<"."
<<ziv.datum_dostave.mjesec << "."
<<ziv.datum_dostave.godina<<"."<<endl;
cout << endl;
}
tekuci = NextL(tekuci,L);
}
cout << endl << "Broj pronadjenih zivotinja: " << broj << endl;
}
int brisiPremaNazivu(list* L){
char naziv[30];
cin.ignore();
cout << "Unesite naziv zivotinje za brisanje: "; cin.getline(naziv, 29, '\n');
if(isEmpty(L))
return 0;
element tekuci = FirstL(L);
bool postoji = false;
while(tekuci != EndL(L)){
elementtype ziv = RetrieveL(tekuci,L);
if(strcmp(ziv.naziv,naziv)==0){
postoji = true;
break;
}
tekuci = NextL(tekuci,L);
}
if(postoji){
DeleteL(tekuci,L);
}
else
return 0;
return 1;
}
int brisiPremaVrsti(list* L){
char vrsta[30];
cin.ignore();
cout << "Unesite vrstu zivotinja za brisanje: "; cin.getline(vrsta, 29, '\n');
element tekuci = FirstL(L);
bool postoji = false;
while(tekuci != EndL(L)){
elementtype ziv = RetrieveL(tekuci,L);
if(strcmp(ziv.vrsta,vrsta)==0){
postoji = true;
DeleteL(tekuci,L);
}
tekuci = NextL(tekuci,L);
}
if(!postoji)
return 0;
return 1;
}
void spoji(elementtype *polje,int donji,int sredina,int gornji)
{
int h,i,j,k;
h=donji;
i=donji;
j=sredina+1;
elementtype *temp = new elementtype[gornji-donji+1];
while((h<=sredina)&&(j<=gornji))
{
if(polje[h].cijena>polje[j].cijena || ((polje[h].cijena==polje[j].cijena)&&(strcmp(polje[h].naziv, polje[j].naziv)>0)))
{
temp[i]=polje[h];
h++;
}
else
{
temp[i]=polje[j];
j++;
}
i++;
}
if(h>sredina)
{
for(k=j; k<=gornji; k++)
{
temp[i]=polje[k];
i++;
}
}
else
{
for(k=h; k<=sredina; k++)
{
temp[i]=polje[k];
i++;
}
}
for(k=donji; k<=gornji; k++) polje[k]=temp[k];
delete [] temp;
}
void mergesort(elementtype *polje, int donji,int gornji )
{
int sredina;
if(donji<gornji)
{
sredina=(donji+gornji)/2;
mergesort(polje,donji,sredina);
mergesort(polje,sredina+1,gornji);
spoji(polje,donji,sredina,gornji);
}
}
void SortirajCijenaNaziv(list *L){
int broj=0;
element tekuci = FirstL(L);
while(tekuci != EndL(L)){
broj++;
tekuci = NextL(tekuci,L);
}
elementtype* polje = new elementtype[broj];
tekuci = FirstL(L);
int i = 0;
while(tekuci != EndL(L)){
polje[i] = RetrieveL(tekuci,L);
tekuci = NextL(tekuci,L);
i++;
}
mergesort(polje,0,broj-1);
DeleteAllL(L);
L=NULL;
L = InitL(L);
cout << "SORTIRANO SILAZNO PREMA CIJENI I NAZIVU" << endl;
for( i = 0; i < broj; i++){
InsertL(polje[i],EndL(L),L);
elementtype ziv = polje[i];
cout << "Sifra: " << ziv.sifra << endl;
cout << "Naziv: " << ziv.naziv << endl;
cout << "Vrsta: " << ziv.vrsta << endl;
cout << "Cijena: " << ziv.cijena << endl;
cout << "Datum dostave: " << ziv.datum_dostave.dan<<"."
<<ziv.datum_dostave.mjesec << "."
<<ziv.datum_dostave.godina<<"."<<endl;
cout <<endl;
}
}
int main(){
list* L = NULL;
L = InitL(L);
int odabir = 0;
do{
cout << endl;
cout << "IZBORNIK" << endl << endl;
cout << "1.Unos zivotinje" << endl;
cout << "2.Popis zivotinja" << endl;
cout << "3.Zivotinje dostavljene nakon 23.09.2012."<<endl;
cout << "4.Brisanje prema nazivu zivotinje" << endl;
cout << "5.Brisanje prema vrsti zivotinje" << endl;
cout << "6.Silazno sortiranje zivotinja" << endl;
cout << "9.Izlaz" << endl << endl;
cout << "Odabir: ";
cin >> odabir;
system("cls");
switch(odabir){
case 1:
if(!unos(L)){
cout << "Neispravni podaci kod unosa!" << endl;
}
break;
case 2:
ispis(L);
break;
case 3:
filterDostava(23,9,2012,L);
break;
case 4:
if(brisiPremaNazivu(L)){
cout << "Zapis je uspjesno obrisan." << endl;
}
else{
cout << "Zapis nije pronadjen." << endl;
}
break;
case 5:
if(brisiPremaVrsti(L)){
cout << "Zapis(i) je uspjesno obrisan(i)." << endl;
}
else{
cout << "Zapis(i) nije pronadjen(i)." << endl;
}
break;
case 6:
SortirajCijenaNaziv(L);
break;
case 9:
break;
default:
cout << "Pogresan odabir! Odaberite ponovno!" << endl;
}
}while(odabir != 9);
DeleteAllL(L);
system("pause");
return 0;
}
Initial URL
Initial Description
Ovo je glavna datoteka main u kojoj se pozivaju funkcije iz biblioteka lista_polje.h i lista_pokazivaci.h za implementaciju liste. Korisnik može odabrati sljedeće opcije: unos nove životinje, ispis životinja prema silaznoj šifri, filtriranje prema datumu i ispis životinja dostavljenih nakon 23.09.2012., brisanje prema unesenom nazivu ili vrsti životinje te silazno sortiranje prema nazivu i cijenu korištenjem metode Merge Sort (prije je potrebno elemente liste prebaciti u polje, pa se zatim to polje sortira).
Initial Title
Implementacija liste - main.cpp
Initial Tags
list
Initial Language
C++