Aí galera estou precisando de uma mãozinha aqui estou iniciando agora na linguagem estou tentando fazer esse programinha rodar mas num quer !! agradeço desde já a ajuda
Olha aí o danado :
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
struct registro /* defini‡Æo dos campos do registro */
{ char nome[40];
char rua[40];
char bairro[20];
char fone[13];
char status;
}
reg;
FILE *fp; /* declaracao do ponteiro para o arquivo */
void incluir(void);
void consultar(void);
void excluir(void);
void alterar(void);
void abrir(char tipo[3]);
int busca(void);
void abrir(char tipo[3])
{
/*Tipo de abertura*/
/*Leitura, escrita, leitura/escrita*/
if((fp=fopen("arquivo.dat", tipo))==NULL)
{ printf("\n O arquivo nÆo pode ser aberto \n");
getch();
exit(1);
}
}
void incluir(void)
{ abrir("ab+"); /* chama a fun‡Æo de abertura para grava‡Æo */
fseek(fp, 0L, SEEK_END); /*posiciona no final do arquivo */
printf("Digite nome ou <fim> para sair: ");
gets(reg.nome);
/*strcmp - verifica se uma String cont‚m na vari vel*/
while(strcmp(reg.nome, "fim")!=0)
{ printf("Rua :");
gets(reg.rua);
printf("Bairro:");
gets(reg.bairro);
printf("Fone :");
gets(reg.fone);
reg.status='1';
if(fwrite(®, sizeof(struct registro),1,fp)!=1)
/* Afun‡Æo fwrite faz a grava‡Æo do registro reg */
/* no arquivo apontado fp. A fun‡Æo sizeof indica */
/* a quantidade de bytes a serem gravados. */
/* O parƒmetro 1 indica a grava‡Æo de 1 £nico registro */
/* se o valor for diferente de 1 significa que nÆo gravou */
printf("Erro de grava‡Æo \n");
else
{ printf("InclusÆo feita com sucesso!");
printf("Digite nome ou <fim> para sair: ");
gets(reg.nome);
}
fclose(fp); /* fecha o arquivo */
}
} /* ? */
int busca(void)
{ int achou=-1, posicao=0;
char nomep[40];
/*rb+ - Abre o arquivo para leitura*/
abrir("rb+");
printf("digite um nome para pesquisa: ");
gets(nomep);
rewind(fp); /* reinicializa o indicador de posi‡Æo */
while ((!feof(fp))&&(achou==-1))
/* Somente sair do la‡o quando encontrar o registro */
/* procurado ou encontrar o sinal de fim de arquivo */
{ fread(®, sizeof(struct registro),1,fp);
/* A fun‡Æo fread() faz a leitura de um registro ' */
/* no arquivo que ser armazenado na vari vel reg. */
if(!feof(fp)) /* testa final de arquivo */
{ if(strcmp(nomep, reg.nome)==0) /* verifica se encontrou o registro */
{ if(reg.status=='0') /* verifica se o registro est exclup¡do */
{ posicao=-2;}
achou=1; /* registro encontrou e retorna posi‡Æo */
/* conta quantos registros at‚ achar reg */
}
else {posicao++;}
}
else {posicao=-1;}
/* retorna -1 para registro inexistente */
/* retorna -2 para registro exclu¡do */
}
fclose(fp);
printf(" %d",posicao," .");
return(posicao);
}
void consultar()
{ int pos;
pos=busca();
if(pos==-1)
{ printf("\n Nome nÆo existente no arquivo!");
getchar();
}
else
{ if(pos==-2)
{ printf("\n Nome exclu¡do do arquivo!");
getchar();
}
else
{ abrir("rb+");
fseek(fp, pos*sizeof(struct registro), SEEK_SET);
fread(®, sizeof(struct registro),1,fp);
printf("\n Nome :%s", reg.nome);
printf("\n Rua :%s", reg.rua);
printf("\n Bairro:%s", reg.bairro);
printf("\n fone :%s", reg.fone);
getchar();
}
}
fclose(fp);
}
void alterar()
{ int pos;
pos=busca();
if(pos==-1)
{ printf("\n Nome inexistente no arquivo!");
getchar();
}
else
{ if(pos==-2)
{ printf("\n Nomeexclu¡do do arquvo!");
getchar();
}
else
{ abrir("rb+");
fseek(fp,pos*sizeof(struct registro), SEEK_CUR);
fread(®, sizeof(struct registro),1,fp);
printf("\n Nome :%s", reg.nome);
printf("\n Rua :%s", reg.rua);
printf("\n Bairro:%s", reg.bairro);
printf("\n fone :%s", reg.fone);
getchar();
printf("Digite nome :");
gets(reg.nome);
printf("Digite rua :");
gets(reg.rua);
printf("Digite bairro:");
gets(reg.bairro);
printf("Digite fone :");
gets(reg.fone);
reg.status='1';
fseek(fp, pos*sizeof(struct registro), SEEK_SET);
if(fwrite(®, sizeof(struct registro),1,fp)!=1)
{ printf("Erro de Grava‡Æo!");
getchar();
}
else
{ printf("Altera‡Æo feita com sucesso!");
getchar();
}
}
fclose(fp);
}
} /* ? */
void excluir(void)
{ int pos;
pos=busca();
if(pos==-1)
{ printf("\n Nome inexistente no arquivo!");
getchar();
}
else
{ abrir("rb+");
fseek(fp, pos*sizeof(struct registro), SEEK_SET);
fread(®, sizeof(struct registro),1,fp);
printf("\n Nome :%s", reg.nome);
printf("\n Rua :%s", reg.rua);
printf("\n Bairro:%s", reg.bairro);
printf("\n fone :%s", reg.fone);
getchar();
reg.status='0';
fseek(fp, pos*sizeof(struct registro), SEEK_SET);
if (fwrite(®, sizeof(struct registro),1,fp)!=1)
Pergunta
Guest - Gustavo -
Aí galera estou precisando de uma mãozinha aqui estou iniciando agora na linguagem estou tentando fazer esse programinha rodar mas num quer !! agradeço desde já a ajuda
Olha aí o danado :
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
struct registro /* defini‡Æo dos campos do registro */
{ char nome[40];
char rua[40];
char bairro[20];
char fone[13];
char status;
}
reg;
FILE *fp; /* declaracao do ponteiro para o arquivo */
void incluir(void);
void consultar(void);
void excluir(void);
void alterar(void);
void abrir(char tipo[3]);
int busca(void);
void abrir(char tipo[3])
{
/*Tipo de abertura*/
/*Leitura, escrita, leitura/escrita*/
if((fp=fopen("arquivo.dat", tipo))==NULL)
{ printf("\n O arquivo nÆo pode ser aberto \n");
getch();
exit(1);
}
}
void incluir(void)
{ abrir("ab+"); /* chama a fun‡Æo de abertura para grava‡Æo */
fseek(fp, 0L, SEEK_END); /*posiciona no final do arquivo */
printf("Digite nome ou <fim> para sair: ");
gets(reg.nome);
/*strcmp - verifica se uma String cont‚m na vari vel*/
while(strcmp(reg.nome, "fim")!=0)
{ printf("Rua :");
gets(reg.rua);
printf("Bairro:");
gets(reg.bairro);
printf("Fone :");
gets(reg.fone);
reg.status='1';
if(fwrite(®, sizeof(struct registro),1,fp)!=1)
/* Afun‡Æo fwrite faz a grava‡Æo do registro reg */
/* no arquivo apontado fp. A fun‡Æo sizeof indica */
/* a quantidade de bytes a serem gravados. */
/* O parƒmetro 1 indica a grava‡Æo de 1 £nico registro */
/* se o valor for diferente de 1 significa que nÆo gravou */
printf("Erro de grava‡Æo \n");
else
{ printf("InclusÆo feita com sucesso!");
printf("Digite nome ou <fim> para sair: ");
gets(reg.nome);
}
fclose(fp); /* fecha o arquivo */
}
} /* ? */
int busca(void)
{ int achou=-1, posicao=0;
char nomep[40];
/*rb+ - Abre o arquivo para leitura*/
abrir("rb+");
printf("digite um nome para pesquisa: ");
gets(nomep);
rewind(fp); /* reinicializa o indicador de posi‡Æo */
while ((!feof(fp))&&(achou==-1))
/* Somente sair do la‡o quando encontrar o registro */
/* procurado ou encontrar o sinal de fim de arquivo */
{ fread(®, sizeof(struct registro),1,fp);
/* A fun‡Æo fread() faz a leitura de um registro ' */
/* no arquivo que ser armazenado na vari vel reg. */
if(!feof(fp)) /* testa final de arquivo */
{ if(strcmp(nomep, reg.nome)==0) /* verifica se encontrou o registro */
{ if(reg.status=='0') /* verifica se o registro est exclup¡do */
{ posicao=-2;}
achou=1; /* registro encontrou e retorna posi‡Æo */
/* conta quantos registros at‚ achar reg */
}
else {posicao++;}
}
else {posicao=-1;}
/* retorna -1 para registro inexistente */
/* retorna -2 para registro exclu¡do */
}
fclose(fp);
printf(" %d",posicao," .");
return(posicao);
}
void consultar()
{ int pos;
pos=busca();
if(pos==-1)
{ printf("\n Nome nÆo existente no arquivo!");
getchar();
}
else
{ if(pos==-2)
{ printf("\n Nome exclu¡do do arquivo!");
getchar();
}
else
{ abrir("rb+");
fseek(fp, pos*sizeof(struct registro), SEEK_SET);
fread(®, sizeof(struct registro),1,fp);
printf("\n Nome :%s", reg.nome);
printf("\n Rua :%s", reg.rua);
printf("\n Bairro:%s", reg.bairro);
printf("\n fone :%s", reg.fone);
getchar();
}
}
fclose(fp);
}
void alterar()
{ int pos;
pos=busca();
if(pos==-1)
{ printf("\n Nome inexistente no arquivo!");
getchar();
}
else
{ if(pos==-2)
{ printf("\n Nomeexclu¡do do arquvo!");
getchar();
}
else
{ abrir("rb+");
fseek(fp,pos*sizeof(struct registro), SEEK_CUR);
fread(®, sizeof(struct registro),1,fp);
printf("\n Nome :%s", reg.nome);
printf("\n Rua :%s", reg.rua);
printf("\n Bairro:%s", reg.bairro);
printf("\n fone :%s", reg.fone);
getchar();
printf("Digite nome :");
gets(reg.nome);
printf("Digite rua :");
gets(reg.rua);
printf("Digite bairro:");
gets(reg.bairro);
printf("Digite fone :");
gets(reg.fone);
reg.status='1';
fseek(fp, pos*sizeof(struct registro), SEEK_SET);
if(fwrite(®, sizeof(struct registro),1,fp)!=1)
{ printf("Erro de Grava‡Æo!");
getchar();
}
else
{ printf("Altera‡Æo feita com sucesso!");
getchar();
}
}
fclose(fp);
}
} /* ? */
void excluir(void)
{ int pos;
pos=busca();
if(pos==-1)
{ printf("\n Nome inexistente no arquivo!");
getchar();
}
else
{ abrir("rb+");
fseek(fp, pos*sizeof(struct registro), SEEK_SET);
fread(®, sizeof(struct registro),1,fp);
printf("\n Nome :%s", reg.nome);
printf("\n Rua :%s", reg.rua);
printf("\n Bairro:%s", reg.bairro);
printf("\n fone :%s", reg.fone);
getchar();
reg.status='0';
fseek(fp, pos*sizeof(struct registro), SEEK_SET);
if (fwrite(®, sizeof(struct registro),1,fp)!=1)
{ printf("\n Erro de grava‡Æo!");
getchar();
}
else
{ printf("ExclusÆo feita com sucesso!");
getchar();
}
fclose(fp);
}
} /* ? */
void main(void) /* m¢dulo principal */
{ char opcao[2], op;
do /* la‡o para escolha das op‡oes v lidas */
{ do /* la‡o para executar as op‡äes */
{ clrscr();
printf("Turma do Wkerley\n");
printf("\n <I>ncluir");
printf("\n <A>lterar");
printf("\n <E>xcluir");
printf("\n <C>onsultar");
printf("\n <S>air\n>>");
gets(opcao);
op=tolower(*opcao);
}
while (!strchr("iaecs", op));
switch(op)
{ case 'i': incluir(); break;
case 'a': alterar(); break;
case 'e': excluir(); break;
case 'c': consultar(); break;
case 's': exit(0);
}
}
while(1);
}
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.