Forum Sveta kompjutera

Nazad   Forum Sveta kompjutera > Test Run > Programiranje

Programiranje Programski jezici, tehnike, alatke...

Odgovor
 
Alatke vezane za temu Vrste prikaza
Stara 11.12.2012, 21:01   #1
Twisterzemun
Član
 
Član od: 6.2.2012.
Poruke: 150
Zahvalnice: 87
Zahvaljeno 60 puta na 40 poruka
Određen forumom Seminarski iz C-a

Dakle, kao sto u naslovu pise, radim seminarski iz C-a. Zadatak je da napravim adresar sa imenima, prezimenima, brojevima telefona, itd, itd... Imam problem sa otvaranjem datoteka, uvek mi izbacuje gresku... Iskoristio sam svoj stariji kod za azuriranje, samo sto su bili u pitanju studenti, tj imena, prezimena, indeksi, bodovi i ocene... Tada mi je sve radilo, medjutim kada sam izmenio za potrebe seminarskog odjednom mi izbacuje greske... Sto posto je neka debilna greska koju trenutno ne vidim...

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);
		scanf (" %s",a1.ime);
		printf ("\nUnesite prezime: \n");
		fflush(stdin);
		scanf (" %s",a1.prezime);
		printf ("\nUnesite broj telefona: \n");
		fflush(stdin);
		scanf (" %s",a1.br_telefona);
		printf ("\nUnesite mail adresu: \n");
		fflush(stdin);
		scanf (" %s",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 (strcmp(x.mail_adresa,a1.mail_adresa)==0)
		{
			printf ("\nUneta mail adresa vec postoji!\n");
			ima=1;
		}
	}

	if(ima==0)
	{
	fwrite(&a1,sizeof(Adresar),1,fptr);
	}
	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%s\n   Prezime :\t%s\n   Broj telefona:\t%s\n   Mail adresa:\t\tSd\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? \n");
	scanf ("%d",&opcija);
	switch(opcija)
	{
	case 1:
		izmena_br_telefona();
		break;
	default:
		break;
	}
	
}


void obrisi_podatke(void)
{
	char x,y;
	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 index[MAX];
	int i,j;
	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(index);
	while (1)
	{
		if(fread(&s,sizeof(Adresar),1,fptr)==0)
			break;
		if (strcmp(s.br_telefona,index)==0)
		{
			printf ("\nUnesite broj telefona: \n");
		scanf ("%d",&s.br_telefona);
		fseek(fptr,-sizeof(Adresar),SEEK_CUR);
		fwrite(&s,sizeof(Adresar),1,fptr);
		break;
		}
	}
	fclose(fptr);

}
Twisterzemun je offline   Odgovor sa citatom ove poruke
Stara 11.12.2012, 21:11   #2
cane.prebranac
Starosedelac
 
Član od: 14.6.2011.
Poruke: 2.250
Zahvalnice: 137
Zahvaljeno 440 puta na 399 poruka
Određen forumom Re: Seminarski iz C-a

A da rucno kreiras ovu datoterku adresar.bin, ja sam je rucno kreirao i radi. Sad ne znam da li tako smo po uslovu zadatka? Nisam detaljno gledao kod.
cane.prebranac je offline   Odgovor sa citatom ove poruke
Stara 11.12.2012, 21:12   #3
Twisterzemun
Član
 
Član od: 6.2.2012.
Poruke: 150
Zahvalnice: 87
Zahvaljeno 60 puta na 40 poruka
Određen forumom Re: Seminarski iz C-a

Citat:
cane.prebranac kaže: Pregled poruke
A da rucno kreiras ovu datoterku adresar.bin, ja sam je rucno kreirao i radi. Sad ne znam da li tako smo po uslovu zadatka? Nisam detaljno gledao kod.
Mora sam program da napravi tu datoteku
Twisterzemun je offline   Odgovor sa citatom ove poruke
Stara 11.12.2012, 21:23   #4
cane.prebranac
Starosedelac
 
Član od: 14.6.2011.
Poruke: 2.250
Zahvalnice: 137
Zahvaljeno 440 puta na 399 poruka
Određen forumom Re: Seminarski iz C-a

Za pocetak ovo ti je visak, tj treba da se prepravi.
Kod:
if ((fptr=fopen("adresar.bin","rb+"))==NULL)
        greska(GRESKA1_DAT);
cane.prebranac je offline   Odgovor sa citatom ove poruke
Stara 11.12.2012, 21:48   #5
Twisterzemun
Član
 
Član od: 6.2.2012.
Poruke: 150
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
Stara 11.12.2012, 22:33   #6
^GOJKO^
Član
 
Član od: 9.9.2006.
Poruke: 46
Zahvalnice: 0
Zahvaljeno 4 puta na 3 poruka
Slanje poruke preko MSN-a korisniku ^GOJKO^
Određen forumom

Kolega vise elektro? U funkciji unos() stavi "wb" kao write mode da bi kreirao datoteku.

Sent from my PMP5197DULTRA using Tapatalk HD
^GOJKO^ je offline   Odgovor sa citatom ove poruke
Stara 11.12.2012, 22:40   #7
Twisterzemun
Član
 
Član od: 6.2.2012.
Poruke: 150
Zahvalnice: 87
Zahvaljeno 60 puta na 40 poruka
Određen forumom Re: Seminarski iz C-a

Citat:
^GOJKO^ kaže: Pregled poruke
Kolega vise elektro? U funkciji unos() stavi "wb" kao write mode da bi kreirao datoteku.

Sent from my PMP5197DULTRA using Tapatalk HD
Znao sam da je neka glupost , samo sto meni treba ab+, hvala puno na pomoci!
Twisterzemun je offline   Odgovor sa citatom ove poruke
Stara 11.12.2012, 22:53   #8
Twisterzemun
Član
 
Član od: 6.2.2012.
Poruke: 150
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);
Hvala na pomoci.
Twisterzemun je offline   Odgovor sa citatom ove poruke
Stara 11.12.2012, 22:55   #9
cane.prebranac
Starosedelac
 
Član od: 14.6.2011.
Poruke: 2.250
Zahvalnice: 137
Zahvaljeno 440 puta na 399 poruka
Određen forumom Re: Seminarski iz C-a

Nema na cemu. Znao sam da je tu negde problem samo nisam bio siguran sta
cane.prebranac je offline   Odgovor sa citatom ove poruke
Stara 11.12.2012, 23:27   #10
^GOJKO^
Član
 
Član od: 9.9.2006.
Poruke: 46
Zahvalnice: 0
Zahvaljeno 4 puta na 3 poruka
Slanje poruke preko MSN-a korisniku ^GOJKO^
Određen forumom

Citat:
Twisterzemun kaže: Pregled poruke
Znao sam da je neka glupost , samo sto meni treba ab+, hvala puno na pomoci!
Uvek je neka glupost Nema na cemu

Sent from my PMP5197DULTRA using Tapatalk HD
^GOJKO^ je offline   Odgovor sa citatom ove poruke
Odgovor

Bookmarks sajtovi

Alatke vezane za temu
Vrste prikaza

Vaš status
Ne možete postavljati teme
Ne možete odgovarati na poruke
Ne možete slati priloge uz poruke
Ne možete prepravljati svoje poruke

BB kod: uključeno
Smajliji: uključeno
[IMG] kod: uključeno
HTML kod: isključeno


Slične teme
tema temu započeo forum Odgovora Poslednja poruka
Vicevi Oblivion Cvet kompjutera 5467 29.6.2019 14:11
Java - Vraćanje objekta iz reda tabele mcdhappy80 Programiranje 0 2.12.2010 5:13
Snimak iz MiniDV u Sony Vegas pa render u DVD? Zoranb007 Video/TV softver 23 11.9.2010 21:47
Biseri iz reklama... RarMan Brbljaonica 32 24.5.2010 20:01


Sva vremena su po Griniču +2 h. Sada je 22:55.


Powered by vBulletin® verzija 3.8.7
Copyright ©2000–2020, vBulletin Solutions, Inc.
Hosted by Beograd.com