PDA

Prikaži potpunu verziju : Mala pomoc u vezi programa


CptnMunch
26.5.2013, 20:42
Pozdrav, imam problem u vezi programa koji treba da radi sledece stvari:
Da kreira i ažurira sadržaj tekstualne datoteke (npr. knjige.txt) sa sledećim podacima: ime_knjige, autor, izdavac i god_izdavanja, i prikazuje na ekranu sledeće opcije:
1. Dodavanje knjige katalogu
2. Pronalazenje knjige na osnovu imena
3. Prikaz na ekranu kataloga
4. Kraj rada (sa cuvanjem izmena)
Vec sam taj program odradio i ovako izgleda:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>

struct knjiga{
char ime_knjige[15],autor[15],izdavac[20];
int god_izdavanja;
struct knjiga *sledeca;
}*prva,*tekuca;

void ucitaj(char *fajl,int *br);
void dodavanje(void);
void nadji(void);
void izlaz(char *fajl);

main()
{
char odg,ime_fajla[40];
int poc=1;

prva=malloc(sizeof(struct knjiga));
tekuca=prva;

printf("\nUnesite ime fajla: "); //fajl treba da je prethodno kreiran
gets(ime_fajla);

ucitaj(ime_fajla,&poc);
tekuca->sledeca=NULL;

do{
printf("\nD. dodavanje knjige katalogu\nP. pronalazi u katalogu na osnovu imena\nI. izlaz (sa cuvanjem izmena)\t");
fflush(stdin);
odg=toupper(getchar());

if(odg=='D')
{
if(poc!=1)
{
if((tekuca->sledeca=malloc(sizeof(struct knjiga)))==NULL)
{
printf("\n\nNE MOGU DA DODELIM MEMORIJU!!!");
exit(1);
}
tekuca=tekuca->sledeca;
}

dodavanje();

poc=0;
tekuca->sledeca=NULL;
}
if(odg=='P')
nadji();
if(odg=='I')
izlaz(ime_fajla);
}while(odg!='I');
}

void ucitaj(char *fajl,int *br)
{
FILE *f;
char ime_knjige[15],autor[15],izdavac[20];
int god_izdavanja;
if((f=fopen(fajl,"r"))==NULL)
{
fprintf(stderr,"\n\nFAJL NEPOSTOJI!!!");
exit(1);
}

while(1)
{
ime_knjige[0]='\0';
fscanf(f,"%s",ime_knjige);
if(ime_knjige[0]=='\n' || ime_knjige[0]=='\0')
break;
fscanf(f,"%s",autor);
fscanf(f,"%s",izdavac);
fscanf(f,"%d",&god_izdavanja);
if(*br!=1)
{
if((tekuca->sledeca=malloc(sizeof(struct knjiga)))==NULL)
{
printf("\n\nNE MOGU DA DODELIM MEMORIJU!!!");
exit(1);
}
tekuca=tekuca->sledeca;
}
strcpy(tekuca->ime_knjige,ime_knjige);
strcpy(tekuca->autor,autor);
strcpy(tekuca->izdavac,izdavac);
tekuca->god_izdavanja=god_izdavanja;
*br=0;
}
fclose(f);
}

void dodavanje(void)
{
fflush(stdin);
printf("\nUnesite ime knjige: ");
gets(tekuca->ime_knjige);
printf("\nUnesite autora: ");
gets(tekuca->autor);
printf("\nUnesite izdavaca: ");
gets(tekuca->izdavac);
printf("\nUnesite godinu izdavanja: ");
scanf("%d",&tekuca->god_izdavanja);
fflush(stdin);
}

void nadji(void)
{
int ima=0;
char ime_knjige[15];
struct knjiga *trazi;

trazi=prva;
if(trazi->sledeca==NULL)
printf("\nKatalog JE PRAZAN!!!");
else
{
fflush(stdin);
printf("\nUnesite ime knjige: ");
gets(ime_knjige);

printf("\n================= ADRESE =================");
while(trazi!=NULL)
{
if(strcmp(trazi->ime_knjige,ime_knjige)==0)
{
printf("\n%s %s %s %d",trazi->ime_knjige,trazi->autor,trazi->izdavac,trazi->god_izdavanja);
ima=1;
}
trazi=trazi->sledeca;
}
if(ima==0)
printf("\nNEMA Knjige!!!");
printf("\n==========================================\n\n");
}
}

void izlaz(char *fajl)
{
FILE *f;
struct knjiga *trazi;
trazi=prva;

if(trazi->sledeca==NULL)
printf("\nKatalog JE PRAZAN!!!");
else
{
if((f=fopen(fajl,"w"))==NULL)
{
fprintf(stderr,"\n\nNE MOGU DA OTVORIM FAJL!!!");
exit(1);
}
while(trazi!=NULL)
{
fprintf(f,"%s %s %s %d\n",trazi->ime_knjige,trazi->autor,trazi->izdavac,trazi->god_izdavanja);
trazi=trazi->sledeca;
}
fclose(f);
}
}

Unapred se izvinjavam ako ovakav prikaz izgleda neuredno.
Problem u programu je sto nece da sacuva unete podatke...ako bi neko mogao da pomogne bio bi mu mnogo zahvalan, hvala unapred! :)