Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda Em Um Arquivo


Guest - Gustavo -

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 smile.gif

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(&reg, 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(&reg, 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(&reg, 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(&reg, 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(&reg, 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(&reg, 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(&reg, 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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...