Prikaz jedne poruke
Stara 11.12.2012, 21:48   #5
Twisterzemun
Član
 
Član od: 6.2.2012.
Poruke: 151
Zahvalnice: 87
Zahvaljeno 60 puta na 40 poruka
Određen forumom Re: Seminarski iz C-a

Citat:
cane.prebranac kaže: Pregled poruke
Za pocetak ovo ti je visak, tj treba da se prepravi.
Kod:
if ((fptr=fopen("adresar.bin","rb+"))==NULL)
        greska(GRESKA1_DAT);
Ne kontam zasto? U proslom kodu mi je to savrseno radilo.
Malo sam izmenio kod, sada mi sve radi do kraja, osim toga sto program nece da kreira datoteku, morao sam sam da je kreiram.
Kod:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX 256

typedef enum{GRESKA1_DAT,GRESKA2_DAT,GRESKA_POZ} Greska;

char *poruke_o_greskama[]={
"\nGreska pri otvaranju datoteke za upis!\n",
"\nGreska pri otvaranju datoteke za prikaz!\n",
"\nGreska pri pozicioniranju u datoteci",	};

FILE *fptr;

typedef struct adresar{
char ime[MAX+1],prezime[MAX+1],br_telefona[MAX+1],mail_adresa[MAX+1];
}Adresar;
Adresar a1;


void unos(void);
void izmene(void);
void prikaz(void);
void greska(Greska status);
void izmena_br_telefona(void);
void izmena_mail_adrese(void);
void obrisi_podatke(void);

int main ()
{
	int opcija,izlaz=0;
	do 
	{
		printf ("\n\n1.Unos\n2.Izmena\n3.Prikaz\n4.Izlaz\n5.Obrisi podatke");
		printf ("\nIzabrati opciju\n");
		scanf ("%d",&opcija);

		switch(opcija)
		{
		case 1:
			unos();
			break;
		case 2:
			izmene();
			break;
		case 3:
			prikaz();
			break;
		case 5:
			obrisi_podatke();
			break;
		default:
			izlaz=1;
			break;
		}
	}while(!izlaz);
	return 0;
}

void unos(void)
{	Adresar x;
	int ima=0,ima1=0;
	if ((fptr=fopen("adresar.bin","rb+"))==NULL)
		greska(GRESKA1_DAT);
		printf ("\nUnesite podatke\n");
		printf ("\nUnesite ime: \n");
		fflush(stdin);
		gets(a1.ime);
		printf ("\nUnesite prezime: \n");
		fflush(stdin);
		gets(a1.prezime);
		printf ("\nUnesite broj telefona: \n");
		fflush(stdin);
		gets(a1.br_telefona);
		printf ("\nUnesite mail adresu: \n");
		fflush(stdin);
		gets(a1.mail_adresa);

	while(fread(&x,sizeof(Adresar),1,fptr)!=0)
	{	
		
		if (strcmp(x.br_telefona,a1.br_telefona)==0)
		{
			printf ("\nUneti broj telefona vec postoji!\n");
		ima=1;
		break;
		}
	}
	if(ima==0)
	{
	fwrite(&a1,sizeof(Adresar),1,fptr);
	}
	fclose(fptr);
	fptr=fopen("adresar.bin","rb+");
	while(fread(&x,sizeof(Adresar),1,fptr)!=0)
	{
		if (strcmp(x.mail_adresa,a1.mail_adresa)==0)
			printf ("\nUneta mail adresa vec postoji!\n");
		ima1=1;
		break;
	}
	if(ima1==0)
	{
	fwrite(&a1,sizeof(Adresar),1,fptr);
	}

	fclose(fptr);
}

void prikaz(void)
{
	int i=1;

	if((fptr=fopen("adresar.bin","rb"))==NULL)
		greska(GRESKA2_DAT);

	while((fread(&a1,sizeof(Adresar),1,fptr))!=0)

	{
		printf ("\n%d. Ime :\t\t%s\n   Prezime :\t\t%s\n   Broj telefona:\t%s\n   Mail adresa:\t\t%s\n ",i++,a1.ime,a1.prezime,a1.br_telefona,a1.mail_adresa);
	}
	fclose(fptr);
}

void greska(Greska status)
{
	fprintf(stderr,poruke_o_greskama[status]);
	exit(1);
}

void izmene(void)
{	
	int opcija;
	printf ("\n1.Izmeni broj telefona? \n2.Izmeni mail adresu? \n");
	scanf ("%d",&opcija);
	switch(opcija)
	{
	case 1:
		izmena_br_telefona();
		break;
	case 2: 
		izmena_mail_adrese();
		break;
	default:
		break;
	}
	
}


void obrisi_podatke(void)
{
	char x;
	printf ("\nJeste li sigurni? D/N?\n");
	fflush(stdin);
	x=getchar();
	if (x=='D'||x=='d')
		{if((fptr=fopen("adresar.bin","wb"))==NULL)
		greska(GRESKA2_DAT);
	fclose(fptr);
	printf ("\nObrisali ste sve podatke\n");}

}

void izmena_br_telefona(void)
{
	char br_telefona[MAX];
	Adresar s;
	if ((fptr=fopen("adresar.bin","rb+"))==NULL)
		greska(GRESKA1_DAT);
	printf ("\nZa izmenu broja telefona unesite broj telefona koji hocete da izmenite: \n");
	fflush(stdin);
	gets(br_telefona);
	while (1)
	{
		if(fread(&s,sizeof(Adresar),1,fptr)==0)
			break;
		if (strcmp(s.br_telefona,br_telefona)==0)
		{
			printf ("\nUnesite broj telefona: \n");
			fflush(stdin);
		gets(s.br_telefona);
		fseek(fptr,-sizeof(Adresar),SEEK_CUR);
		fwrite(&s,sizeof(Adresar),1,fptr);
		break;
		}
	}
	fclose(fptr);

}

void izmena_mail_adrese(void)
{
	char mail_adresa[MAX];
	Adresar k;
	if ((fptr=fopen("adresar.bin","rb+"))==NULL)
		greska(GRESKA1_DAT);
	printf ("\nZa izmenu mail adrese unesite mail adresu koju hocete da izmenite: \n");
	fflush(stdin);
	gets(mail_adresa);
	while(1)
	{
		if (fread(&k,sizeof(Adresar),1,fptr)==0)
			break;
		if (strcmp(k.mail_adresa,mail_adresa)==0)
		{
			printf ("\nUnesite mail adresu: \n");
			fflush(stdin);
			gets(k.mail_adresa);
			fseek(fptr,-sizeof(Adresar),SEEK_CUR);
		fwrite(&k,sizeof(Adresar),1,fptr);
		break;
		}
	}
	fclose(fptr);
}
Twisterzemun je offline   Odgovor sa citatom ove poruke