# Posted By

hackerma3x on 11/10/12

# Statistics

Viewed 208 times
Favorited by 0 user(s)

# SP - Zadatak 1 - ATP Liste

/ Published in: C++

Glavna datoteka
`#include <iostream>#include "lista_polje.h"//#include "lista_pok.h"using namespace std; bool Dodaj(Lista*);void IspisListe(Lista*);void Pretrazi_Datum(Lista*);bool BrisanjeUnosa(Lista*);bool BrisanjeVrste(Lista*);void Sortiranje(Lista*); int main() {	Lista* L = new Lista;	InitL(L); 	short izb;	do {		cout << "____________________________________________________________________" << endl;		cout << endl << "IZBORNIK" << endl;		cout << "____________________________________________________________________" << endl;		cout << " 1. Dodavanje zivotinje" << endl;		cout << " 2. Ispis liste zivotinja" << endl;		cout << " 3. Ispis svih zivotinja dostavljenih nakon 23.rujna 2012." << endl << endl;		cout << " 5. Brisati unos prema nazivu zivotinje" << endl;		cout << " 6. Brisati sve zivotinje odredjene vrste" << endl;		cout << " 7. Sortiranje liste" << endl << endl;		cout << " 9. Izlaz iz programa" << endl;		cout << "____________________________________________________________________" << endl;		cout << "Odabir: ";		cin >> izb; 		switch(izb) {			case 1:				if(Dodaj(L) ) cout << endl << "Zapis uspjesno dodan u listu." << endl;				cout << "____________________________________________________________________" << endl;				break;			case 2:				IspisListe(L);				cout << "____________________________________________________________________" << endl;				break;			case 3:				Pretrazi_Datum(L);				cout << "____________________________________________________________________" << endl;				break; 			case 5:				if(BrisanjeUnosa(L) ) cout << "Unos je uspjesno obrisan." << endl;				cout << "____________________________________________________________________" << endl;				break;			case 6:				if(BrisanjeVrste(L) ) cout << "Brisanje uspjesno obavljeno." << endl;				cout << "____________________________________________________________________" << endl;				break;			case 7:				Sortiranje(L);				cout << "____________________________________________________________________" << endl;				break; 			case 9: break;			default:				cout << "Pogresan unos." << endl;				cout << "____________________________________________________________________" << endl;		}		cout << endl;	} while(izb!=9); 	delete L; 	return 0;} bool Dodaj(Lista* L) {	cout << "Dodavanje nove zivotinje u listu" << endl << endl;	static int sifra = 1; 	// kreiranje novog zapisa (**sifra - automatski)	Zivotinja* nova = new Zivotinja;	while(1) {		nova->sifra = sifra++;		cout << "Sifra(*auto): " << nova->sifra << endl; 		// unesi podatke		cin.ignore();		cout << "Naziv: ";		cin.getline(nova->naziv, 50);		cout << "Vrsta: ";		cin.getline(nova->vrsta, 50); 		cout << "Cijena: ";		cin >> nova->cijena; 		// unosa datuma		while(1) {			cout << "Datum dostave (dd mm gggg): ";			cin >> nova->dat_dostave.dan >> nova->dat_dostave.mjesec;			cin >> nova->dat_dostave.godina;			if(nova->dat_dostave.dan>=1 && nova->dat_dostave.dan<=31 &&					nova->dat_dostave.mjesec>=1 && nova->dat_dostave.mjesec<=12 &&					nova->dat_dostave.godina>=1000 && nova->dat_dostave.dan<=9999)				break;			cout << "Pogresan unos. dan(1-31)  mjesec(1-12)  godina(1000-9999)" << endl;		} 		// potvrda unosa		char dn;		cout << "Potvrda unosa? (d/n)";		cin >> dn;		if(dn=='d' || dn=='D') break;		cout << endl << "Ponovni unos" << endl << endl;	} 	// dodavanje zapisa	return InsertL(*nova, EndL(L), L);} void IspisListe(Lista* L) {	cout << "Ispis liste zivotinja od kraja" << endl << endl; 	// ispis liste kraj --> pocetak	for(Element tren=EndL(L); (tren=PreviousL(tren, L))!=ERROR_CODE; )		cout << RetrieveL(tren, L) << endl;} void Pretrazi_Datum(Lista* L) {	Zivotinja z1;	int br = 0; 	// pretrazi listu pocetak..kraj	for(Element tren=FirstL(L); tren!=EndL(L); tren=NextL(tren, L) ) {		z1 = RetrieveL(tren, L);		int dd=(z1.dat_dostave.godina*10000)+(z1.dat_dostave.mjesec*100)+z1.dat_dostave.dan; 		// ispisi ako je datum dostave > 23.09.2012.		if(dd>20120923){			cout << z1 << endl;			br++;		}	} 	// ispisi broj zivotinja sa datumom > 23.09.2012.	cout << "Ukupan broj ispisanih zivotinja: " << br << endl;} bool StrJednako(char* s1, char* s2, int n, int n2) {	if(n != n2) return false;	for(int i=0; i<n; i++)		if(s1[i] != s2[i]) return false;	return true;} bool BrisanjeUnosa(Lista* L) {	cout << "Brisanje unosa prema nazivu zivotinje" << endl; 	// unesi naziv	char naziv[50];	cin.ignore();	cout << "Naziv: ";	cin.getline(naziv, 50); 	// pretrazi listu \$->naziv	Zivotinja z1;	for(Element tren=FirstL(L); tren!=EndL(L); tren=NextL(tren, L) ) {		z1 = RetrieveL(tren, L); 		// ako je naziv pronadjen		if(StrJednako(naziv, z1.naziv, strlen(naziv), strlen(z1.naziv) ) ) {			cout << "Zivotinja je pronadjena: " << endl;			cout << z1 << endl; 			// potvrda brisanja			char dn;			while(1) {				cout << endl << "Izbrisati unos? (d/n): ";				cin >> dn; 				// brisanje				if(dn=='d' || dn=='D')					if(DeleteL(LocateL(z1, L), L) == -1) return 0;					else return 1; 				// ne brisanje				if(dn=='n' || dn=='N') return 0;				cout << "Pogresan unos." << endl;			}		}	} 	return 0;} bool BrisanjeVrste(Lista* L) {	cout << "Brisanje svih zivotinja odredjene vrste" << endl; 	// unesi vrstu	char vrsta[50];	cin.ignore();	cout << "Vrsta: ";	cin.getline(vrsta, 50); 	// potvrda unosa	char dn;	while(1) {		cout << endl << "Izbrisati sve zivotinje vrste '" << vrsta << "' iz liste? (d/n): ";		cin >> dn;		if(dn=='d' || dn=='D') break;		if(dn=='n' || dn=='N') return 0;		cout << "Pogresan unos." << endl;	} 	// pretrazivanje liste \$->vrsta	int br = 0;	Zivotinja z1;	for(Element tren=FirstL(L); tren!=EndL(L); ) {		z1 = RetrieveL(tren, L); 		// ako je vrsta pronadjena		if(StrJednako(vrsta, z1.vrsta, strlen(vrsta), strlen(z1.vrsta) ) ) 			// brisanje elementa liste			if(DeleteL(LocateL(z1, L), L) ) {				br++;				continue;			} 		// nastavka pretrazivanja liste		tren = NextL(tren, L);	} 	// ispis broja izbrisanih unosa	cout << "Broj uspjesno izbrisanih unosa: " << br << endl;	if(br) return 1;	else return 0;} int BrojElemenata(Lista* L) {	int br=0;	for(Element tren=FirstL(L); tren!=EndL(L); tren=NextL(tren, L) ) br++;	return br;} bool Provjera(Zivotinja z1, Zivotinja z2) {	// ako je cijena manja	if(z1.cijena<z2.cijena) return true; 	// ako je cijena ista i naziv veci 0	// ako je cijena ista i naziv manji 1	if(z1.cijena==z2.cijena) {		int manji = (strlen(z1.naziv)<strlen(z2.naziv)) ? strlen(z1.naziv) : strlen(z2.naziv);		for(int i=0; i<manji; i++)			if(z1.naziv[i]>z2.naziv[i]) return false;			else if(z1.naziv[i]<z2.naziv[i]) return true;	} 	return false;} void Spoji(Zivotinja p[], int i, int k, int j) {	int poc1=i, poc2=k+1, c=0;	Zivotinja* p2 = new Zivotinja[j-i+1]; 	while(poc1<=k && poc2<=j)		if(Provjera(p[poc1], p[poc2]) ) p2[c++]=p[poc1++];		else p2[c++]=p[poc2++]; 	if(poc1>k)		while(poc2<=j) p2[c++]=p[poc2++];	else		while(poc1<=k) p2[c++]=p[poc1++]; 	for(int m=i; m<=j; m++) p[m]=p2[m-i]; 	delete[] p2;}void MerSort(Zivotinja polje[], int i, int j) {	if(i<j) {		int k = (i+j) / 2;		MerSort(polje, i, k);		MerSort(polje, k+1, j);		Spoji(polje, i, k, j);	}}void MerSort(Zivotinja polje[], int n) {	MerSort(polje, 0, n-1);} void Sortiranje(Lista* L) {	cout << "Sortiranje liste" << endl;	int broj_el=BrojElemenata(L), i=0; 	// slozi novo polje od liste	Zivotinja* polje = new Zivotinja[broj_el];	for(Element nova=FirstL(L); nova!=EndL(L); nova=NextL(nova, L) )		polje[i++] = RetrieveL(nova, L); 	// izbrisi elemente liste	DeleteAllL(L); 	// sortiraj	MerSort(polje, broj_el); 	// napravi listu od polja (obrnuti redoslijed)	for(int i=0; i<broj_el; i++)		InsertL(polje[i], FirstL(L), L); 	// izbrisi polje	delete[] polje;} // hackerma3x (2012)`