All pastes #1343384 Raw Edit

Anonymous

public cpp v1 · immutable
#1343384 ·published 2009-02-21 02:13 UTC
rendered paste body
#include <cstdio>#include <cstdlib>#include <cstring>struct lista{	unsigned int lp;	unsigned int ilosc;	double cena;	lista* nastepny;};lista* poczatek=NULL;int dodaj(void){	if(poczatek == NULL)	{		poczatek=(lista*)malloc(sizeof(lista));		if(poczatek == NULL) return 1;		poczatek->lp = 1;		printf("Podaj ilosc produktu : ");		scanf("%d",&poczatek->ilosc);		printf("Podaj cene produktu : ");		scanf("%lf",&poczatek->cena);		poczatek->nastepny = NULL;	}	else	{		lista* wsk=poczatek;		lista* nowy;		while(wsk->nastepny != NULL)		{			wsk = wsk->nastepny;		}		nowy=(lista*)malloc(sizeof(lista));		if(nowy == NULL) return 1;		wsk->nastepny = nowy;		nowy->nastepny = NULL;		nowy->lp = (wsk->lp)+1;		printf("Podaj ilosc towaru : ");		scanf("%d",&nowy->ilosc);		printf("Podaj cene towaru : ");		scanf("%lf",&nowy->cena);	}	return 0;}void szukaj(void){	if(poczatek == NULL)	{		printf("Baza danych jest pusta!\n");		return;	}	printf("Wyswietlany jest pierwszy rekord, ktory spelnia jakiekolwiek z podanych kryteriow.\n");	printf("Podaj liczbe poczatkowa towaru : ");	unsigned int szukana_lp;	scanf("%ud",&szukana_lp);	printf("Podaj ilosc towaru : ");	unsigned int szukana_ilosc;	scanf("%ud",&szukana_ilosc);	printf("Podaj cene towaru : ");	double szukana_cena;	scanf("%lf",&szukana_cena);	lista* wsk=poczatek;	while(wsk != NULL)	{		if((wsk->lp == szukana_lp) || (wsk->ilosc == szukana_ilosc) || (wsk->cena == szukana_cena))		{			printf("Liczba porzadkowa : %d\n",wsk->lp);			printf("\nIlosc towaru : %d\n",wsk->ilosc);			printf("Cena towaru : %lf\n",wsk->cena);			break;		}		wsk = wsk->nastepny;	}}void wyswietl(void){	if(poczatek == NULL)	{		printf("Baza danych jest pusta!\n");		return;	}	lista* wsk=poczatek;	while(wsk != NULL)	{		printf("Liczba porzadkowa : %d\n",wsk->lp);		printf("Ilosc towaru : %d\n",wsk->ilosc);		printf("Cena towaru : %lf\n",wsk->cena);		wsk = wsk->nastepny;	}}void usun(void){	if(poczatek == NULL)	{		printf("Baza danych jest pusta!\n");		return;	}	printf("Podaj liczbe porzadkowa pozycji, ktora chcesz usunac : ");	unsigned int usuwany_lp;	scanf("%ud",&usuwany_lp);	lista* wsk=poczatek;	lista* usuwany;	bool znaleziono_element;	while(wsk->nastepny != NULL)	{		if(((wsk->nastepny)->lp) == usuwany_lp)		{			znaleziono_element = true;			usuwany = wsk->nastepny;			break;		}		wsk=wsk->nastepny;	}	if(!znaleziono_element)	{		printf("Nie udalo sie znalezc elementu o danej liczbie porzadkowej.\n");		return;	}	wsk->nastepny = usuwany->nastepny;	free(usuwany);	wsk = wsk->nastepny;	while(wsk != NULL)	{		wsk->lp = (wsk->lp)-1;		wsk = wsk->nastepny;	}}int wczytaj(void){	FILE* plik;	printf("Podaj nazwe pliku (bez rozszerzenia) : ");	char nazwa[255];	scanf("%s",nazwa);	if(strlen(nazwa) >= 250) return 4; // nazwa za dluga	strcat(nazwa,".xdb");	plik=fopen(nazwa,"r");	if(plik == NULL) return 1; // nie udalo sie otworzyc pliku	char test[3];	fscanf(plik,"%s\n",test);	if(strcmp(test,"XDB") != 0) return 2; // plik nie jest plikiem bazy danych	if(poczatek == NULL)	{		poczatek=(lista*)malloc(sizeof(lista));		if(poczatek == NULL) return 3; // blad pamieci		fscanf(plik,"%d %d %lf\n",&poczatek->lp,&poczatek->ilosc,&poczatek->cena);		poczatek->nastepny = NULL;	}	lista* wsk=poczatek;	while(wsk->nastepny != NULL)	{		wsk = wsk->nastepny;	}	lista* nowy;	while(!feof(plik))	{		nowy=(lista*)malloc(sizeof(nowy));		if(nowy == NULL) return 3; // blad pamieci		wsk->nastepny = nowy;		fscanf(plik,"%d %d %lf\n",&nowy->lp,&nowy->ilosc,&nowy->cena);		wsk = nowy;	}	fclose(plik);	return 0;}int zapisz(void){	if(poczatek == NULL) return 5; // baza pusta	FILE* plik;	char nazwa[255];	printf("Podaj nazwe pliku (bez rozszerzenia) : ");	scanf("%s",nazwa);	if(strlen(nazwa) >= 250) return 4; // nazwa za dluga	strcat(nazwa,".xdb");	plik=fopen(nazwa,"w");	if(plik == NULL) return 1; // nie udalo sie otworzyc pliku	fprintf(plik,"XDB\n");	lista* wsk=poczatek;	while(wsk != NULL)	{		fprintf(plik,"%d %d %lf\n",wsk->lp,wsk->ilosc,wsk->cena);		wsk = wsk->nastepny;	}	fclose(plik);	return 0;}int menu(void){	printf("1. Dodaj pozycje do bazy danych.\n");	printf("2. Wyszukaj pozycje w bazie danych.\n");	printf("3. Wyswietl cala baze danych.\n");	printf("4. Usun pozycje z bazy danych.\n");	printf("5. Wczytaj baze z pliku.\n");	printf("6. Zapisz baze do pliku.\n");	printf("7. Koniec pracy.\nTwoj wybor : ");	int wybor;	scanf("%d",&wybor);	switch(wybor)	{		case 1:			if(dodaj() != 0) printf("Operacja nie powiodla sie!");			return 0;		case 2:			szukaj();			return 0;		case 3:			wyswietl();			return 0;		case 4:			usun();			return 0;		case 5:			if(wczytaj() != 0) printf("Operacja nie powiodla sie!");			return 0;		case 6:			if(zapisz() != 0) printf("Operacja nie powiodla sie!");			return 0;		case 7:			return 1;		default:			printf("Nie wybrales poprawnej pozycji!\n");			return 0;	}}int main(void){	int a;	do	{		a = menu();	} while (a == 0);}