Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct contatos
{
char nome[50];
char data[11];
char sexo;
};
void CriarArquivo(FILE *point, char *nome_arq);
void AtualizarArquivo(FILE *point, char *nome_arq, struct contatos *lc);
void ImprimirArquivo(FILE *point, char *nome_arq);
void Buscar(FILE *point,char *nome_arq);
int Menu(void);
int main(void)
{
FILE *fp=NULL;
char arq[32]={'\0'};
struct contatos lista[50];
int escolha;
printf("Digite o nome do arquivo: ");
scanf("%s",arq);
printf("\n");
for( ; ; )
{
escolha = Menu();
switch(escolha)
{
case 1: CriarArquivo(fp,arq);
break;
case 2: AtualizarArquivo(fp,arq,lista);
break;
case 3: ImprimirArquivo(fp,arq);
break;
case 4: Buscar(fp,arq);
break;
case 5: exit(0);
}
}
return 0;
}
//Função: CriarArquivo
//Cria um novo arquivo no diretório corrente com o nome especificado pelo usuário
void CriarArquivo(FILE *point, char *nome_arq)
{
if((point = fopen(nome_arq,"w")) == NULL)
{
printf("Erro ao criar o arquivo %s", nome_arq);
exit(0);
}
else printf("Arquivo criado com sucesso!\n");
fclose(point);
}
//Função: AtualizarArquivo
//Abre o arquivo especificado em modo de atualização
void AtualizarArquivo(FILE *point, char *nome_arq, struct contatos *lc)
{
char resp,c,conf;
int i,j=0;
if((point = fopen(nome_arq,"a")) == NULL)
{
printf("Erro ao abrir o arquivo %s", nome_arq);
exit(0);
}
else
{
printf("Arquivo aberto com sucesso!\n");
printf("Deseja adicionar um novo contato?(S/N) ");
//getchar();
scanf("%c", &resp);
while(resp == 's' || resp == 'S')
{
//Lê o nome do contato:
getchar();
i=0;
printf("Digite o nome do contato: ");
while((c=getchar())!='\n')
{
if(c==' ') lc[j].nome[i] = '_';
else lc[j].nome[i] = c;
i++;
}
lc[j].nome[i] = '\0';
//Lê a data de nascimento do contato
i=0;
printf("Digite a data de nascimento do contato: ");
while((c=getchar())!='\n')
{
lc[j].data[i] = c;
i++;
}
lc[j].data[i] = '\0';
//Lê o sexo do contato
printf("Digite o sexo do contato(M/F): ");
scanf("%c", &lc[j].sexo);
//Confirmar dados
getchar();
printf("Por favor confirme os dados do contato:\n");
printf("%s\n", lc[j].nome);
printf("%s\n", lc[j].data);
printf("%c\n", lc[j].sexo);
printf("CONFIRMAR:(S/N) ");
scanf("%c", &conf);
if(conf=='s' || conf=='S')
{
fprintf(point,"%s#",lc[j].nome);
fprintf(point,"%s#",lc[j].data);
fprintf(point,"%c?\n",lc[j].sexo);
j++;
getchar();
printf("Deseja adicionar outro contato?(S/N) ");
scanf("%c", &resp);
}
else
{
getchar();
printf("Deseja refazer o contato?(S/N) ");
scanf("%c",&resp);
}
}
}
fclose(point);
}
//Função: ImprimirArquivo
//Imprime na saída padrão os dados do arquivo
void ImprimirArquivo(FILE *point, char *nome_arq)
{
char tela[sizeof(struct contatos)];
int i,j=1;
system("clear");
if((point = fopen(nome_arq,"r")) == NULL)
{
printf("Erro ao abrir o arquivo");
exit(0);
}
else
{
printf("Arquivo aberto com sucesso!\n");
while((fscanf(point,"%s",tela))!=EOF)
{
printf("Contato %d:\n",j);
i=0;
while(tela[i]!='\0')
{
if(tela[i] == ' ') printf(" ");
if(i==0 ||tela[i-1]=='#') printf("\t");
if(tela[i]=='#') printf("\n");
else
{
if(tela[i]=='_' || tela[i]=='?') printf(" ");
else printf("%c",tela[i]);
}
i++;
}
printf("\n");
j++;
}
}
fclose(point);
}
//Função: Buscar
//Realiza a busca do contato de acordo com o nome informado
void Buscar(FILE *point,char *nome_arq)
{
int i=0, achei=0, j=0;
char tela[sizeof(struct contatos)],busca[50],c;
if((point=fopen(nome_arq,"r"))==NULL)
{
printf("Erro ao abrir o arquivo\n");
exit(0);
}
system("clear");
printf("Arquivo aberto com Sucesso!\n");
//Define o nome que será procurado
printf("Nome para Busca: ");
while((c=getchar())!='\n')
{
if(c==' ') busca[i]='_';
else busca[i] = c;
i++;
}
busca[i] = '\0';
while((fscanf(point,"%s",tela))!=EOF)
{
j=0;
while(j<strlen(busca))
{
if(tela[j]==busca[j]) achei = 1;
else
{
achei = 0;
break;
}
j++;
}
if(achei==1)
{
i=0;
while(tela[i]!='?')
{
if(i==0) printf("\t");
if(tela[i]=='#') printf("\n\t");
else
{
if(tela[i]=='_') printf(" ");
else printf("%c",tela[i]);
}
i++;
}
printf("\n");
}
}
if(achei==0)printf("Nenhum registro encontrado!\n");
fclose(point);
}
//Função: Menu
//Imprime na tela as opções do menu
int Menu(void)
{
int c=0;
do{
printf("--- MENU ---\n");
printf("\t1- Criar Novo Arquivo\n");
printf("\t2- Adicionar Informaçoes ao Arquivo\n");
printf("\t3- Imprimir o Arquivo\n");
printf("\t4- Buscar no Arquivo\n");
printf("\t5- Sair\n");
printf("Make your choice: ");
scanf("%d",&c);
}while(c<=0 || c>5);
getchar();
return c;
}