Return to Snippet

Revision: 60468
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++