Ir ao conteúdo

Ajuda com agenda telefonica.


thalesds

Posts recomendados

Postado

Bom, eu estou fazendo um trabalho pra faculdade e tenho que desenvolver uma agenda, eu já fiz o código e ela está rodando conforme o esperado, só tenho um problema: sempre que eu fecho o programa ela reseta e não lê os contatos que foram armazedos. Acredito que tenha que fazer um banco de dados mas não sei como fazer. Se houver um jeito de usar o .txt que eu criei pra puxar esses dados seria o ideal.

O código está aqui:

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

struct data

{

char nome[40], telefone[30];

};

main ()

{

FILE *agendaarq;

int n1, n2, i=0, l=0, comp, n3, comp2;

char busca[40], del[40];

data agenda[100];

do

{

printf ("\nMenu\n1-Adicionar Contato.\n2-Lista de Contatos.\n3-Excluir Contatos.\n4-Sair e gerar arquivo.\nDigite o numero da opcao desejada: ");

scanf ("%d", &n1);

if (n1==1)

{

i++;

printf ("\nDigite o nome da pessoa: ");

fflush (stdin);

gets (agenda.nome);

printf ("\nDigite o numero do telefone. Exemplo: (Codigo de Area)1234-5678.\n");

fflush (stdin);

gets (agenda.telefone);

}

if (n1==2)

{

printf ("\nLista de Contatos\n1-Localizar por nome.\n2-Exibir todos.\nDigite o numero da opcao desejada: ");

scanf ("%d", &n2);

if (n2==1)

{

printf ("\nDigite o nome do contato.");

fflush(stdin);

gets (busca);

for (l=0;l<=i;l++)

{

(comp=strcmp (busca,agenda[l].nome));

if (comp==0)

printf ("\nNome do contato: %s\nTelefone do contato: %s\n", agenda[l].nome, agenda[l].telefone);

}

}

if (n2==2)

{

for (l=1;l<=i;l++)

{

printf ("\nNome: %s\nTelefone: %s\n-------------------------------------------", agenda[l].nome, agenda[l].telefone);

}

}

}

if (n1==3)

{

printf ("\nOpcoes disponiveis.\n1-Apagar um contato.\n2-Apagar todos.\nDigite o numero da opcao desejada: ");

scanf ("%d", &n3);

if (n3==1)

{

printf ("\nDigite o nome do contato que deseja apagar: ");

fflush (stdin);

gets (del);

for (l=0;l<=i;l++)

{

(comp2=strcmp (del,agenda[l].nome));

if (comp2==0)

{

printf ("\nA entrada na agenda com o nome %s foi deletada.\n", agenda[l].nome);

strcpy (agenda[l].nome,"");

strcpy (agenda[l].telefone,"");

}

}

}

if (n3==2)

{

for (l=0;l<=i;l++)

{

strcpy (agenda[l].nome,"");

strcpy (agenda[l].telefone,"");

}

printf ("\nTodos os registros foram deletados.\n");

}

}

} while (n1!=4);

for (l=0;l<=i;l++)

{

agendaarq=fopen("agenda.txt","a");

fprintf (agendaarq, "\nNome: %s\nTelefone: %s\n-------------------------------------------", agenda[l].nome, agenda[l].telefone);

fclose (agendaarq);

}

system ("pause");

}

Desde já agradeço, pessoal.

Postado

Você está com tudo pronto, então resolvi te ajudar, criando a rotina de leitura do arquivo e carregando ele no sisteminha.

Segue código:


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

typedef struct
{
char nome[40];
char telefone[30];
} data;

int main( void )
{

FILE *agendaarq;

int n1, n2, i = 0, l = 0, comp, n3, comp2;
char busca[40], del[40], buffer[100];
char nomedoarquivo[] = "agenda.txt";
data agenda[100];

if ( ( agendaarq = fopen( nomedoarquivo, "r") ) )
{
fgets( buffer, 100, agendaarq ); // lera a primeira linha em branco, descartando o conteudo
while( ! feof( agendaarq ) )
{

fgets( buffer, 100, agendaarq ); // leitura do nome
strcpy( agenda[i].nome, &buffer[6]); // copia o nome
agenda[i].nome[strlen(agenda[i].nome)-1] = '\0';
fgets( buffer, 100, agendaarq ); // leitura do telefone
strcpy( agenda[i].telefone, &buffer[10]); // copia o telefone
agenda[i].telefone[strlen(agenda[i].telefone)-1] = '\0';
fgets( buffer, 100, agendaarq ); // leitura da linha com tracos, e descarta o conteudo

i++;
}
fclose(agendaarq);
}

do
{

printf("\nMenu\n1-Adicionar Contato.\n2-Lista de Contatos.\n3-Excluir Contatos.\n4-Sair e gerar arquivo.\nDigite o numero da opcao desejada: ");
scanf("%d", &n1);

if ( n1 == 1 )
{
printf("\nDigite o nome da pessoa: ");
fflush(stdin);
gets(agenda[i].nome);
printf("\nDigite o numero do telefone. Exemplo: (Codigo de Area)1234-5678.\n");
fflush(stdin);
gets(agenda[i].telefone);

i++;
}

if ( n1 == 2 )
{
printf("\nLista de Contatos\n1-Localizar por nome.\n2-Exibir todos.\nDigite o numero da opcao desejada: ");
scanf("%d", &n2);

if ( n2 == 1 )
{
printf("\nDigite o nome do contato.");
fflush(stdin);
gets(busca);

for ( l = 0; l < i; l++ )
{
comp = strcmp( busca, agenda[l].nome );
if ( comp == 0 )
printf ("\nNome do contato: %s\nTelefone do contato: %s\n", agenda[l].nome, agenda[l].telefone);
}
}

if ( n2 == 2 )
{
for ( l = 0; l < i; l++ )
printf("\nNome: %s\nTelefone: %s\n-------------------------------------------", agenda[l].nome, agenda[l].telefone);
}
}

if ( n1 == 3 )
{
printf("\nOpcoes disponiveis.\n1-Apagar um contato.\n2-Apagar todos.\nDigite o numero da opcao desejada: ");
scanf("%d", &n3);

if ( n3 == 1 )
{

printf("\nDigite o nome do contato que deseja apagar: ");
fflush(stdin);
gets(del);

for ( l = 0; l < i; l++ )
{
comp2 = strcmp( del, agenda[l].nome );
if ( comp2 == 0 )
{
printf("\nA entrada na agenda com o nome %s foi deletada.\n", agenda[l].nome);
strcpy( agenda[l].nome, "");
strcpy( agenda[l].telefone, "");
}

}
}
if ( n3 == 2 )
{
for ( l = 0; l < i; l++ )
{
strcpy( agenda[l].nome, "");
strcpy( agenda[l].telefone, "");
}
printf("\nTodos os registros foram deletados.\n");
}
}
}
while ( n1 != 4 );


agendaarq = fopen(nomedoarquivo,"w+"); fclose(agendaarq); // Apenas para limpar o arquivo
for ( l = 0; l < i; l++ )
{
agendaarq = fopen(nomedoarquivo,"a");
fprintf( agendaarq, "\nNome: %s\nTelefone: %s\n-------------------------------------------", agenda[l].nome, agenda[l].telefone );
fclose( agendaarq );
}

getc(stdin);

return 0;

}

  • 4 meses depois...
Postado
Você está com tudo pronto, então resolvi te ajudar, criando a rotina de leitura do arquivo e carregando ele no sisteminha.

Segue código:


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

typedef struct
{
char nome[40];
char telefone[30];
} data;

int main( void )
{

FILE *agendaarq;

int n1, n2, i = 0, l = 0, comp, n3, comp2;
char busca[40], del[40], buffer[100];
char nomedoarquivo[] = "agenda.txt";
data agenda[100];

if ( ( agendaarq = fopen( nomedoarquivo, "r") ) )
{
fgets( buffer, 100, agendaarq ); // lera a primeira linha em branco, descartando o conteudo
while( ! feof( agendaarq ) )
{

fgets( buffer, 100, agendaarq ); // leitura do nome
strcpy( agenda[i].nome, &buffer[6]); // copia o nome
agenda[i].nome[strlen(agenda[i].nome)-1] = '\0';
fgets( buffer, 100, agendaarq ); // leitura do telefone
strcpy( agenda[i].telefone, &buffer[10]); // copia o telefone
agenda[i].telefone[strlen(agenda[i].telefone)-1] = '\0';
fgets( buffer, 100, agendaarq ); // leitura da linha com tracos, e descarta o conteudo

i++;
}
fclose(agendaarq);
}

do
{

printf("\nMenu\n1-Adicionar Contato.\n2-Lista de Contatos.\n3-Excluir Contatos.\n4-Sair e gerar arquivo.\nDigite o numero da opcao desejada: ");
scanf("%d", &n1);

if ( n1 == 1 )
{
printf("\nDigite o nome da pessoa: ");
fflush(stdin);
gets(agenda[i].nome);
printf("\nDigite o numero do telefone. Exemplo: (Codigo de Area)1234-5678.\n");
fflush(stdin);
gets(agenda[i].telefone);

i++;
}

if ( n1 == 2 )
{
printf("\nLista de Contatos\n1-Localizar por nome.\n2-Exibir todos.\nDigite o numero da opcao desejada: ");
scanf("%d", &n2);

if ( n2 == 1 )
{
printf("\nDigite o nome do contato.");
fflush(stdin);
gets(busca);

for ( l = 0; l < i; l++ )
{
comp = strcmp( busca, agenda[l].nome );
if ( comp == 0 )
printf ("\nNome do contato: %s\nTelefone do contato: %s\n", agenda[l].nome, agenda[l].telefone);
}
}

if ( n2 == 2 )
{
for ( l = 0; l < i; l++ )
printf("\nNome: %s\nTelefone: %s\n-------------------------------------------", agenda[l].nome, agenda[l].telefone);
}
}

if ( n1 == 3 )
{
printf("\nOpcoes disponiveis.\n1-Apagar um contato.\n2-Apagar todos.\nDigite o numero da opcao desejada: ");
scanf("%d", &n3);

if ( n3 == 1 )
{

printf("\nDigite o nome do contato que deseja apagar: ");
fflush(stdin);
gets(del);

for ( l = 0; l < i; l++ )
{
comp2 = strcmp( del, agenda[l].nome );
if ( comp2 == 0 )
{
printf("\nA entrada na agenda com o nome %s foi deletada.\n", agenda[l].nome);
strcpy( agenda[l].nome, "");
strcpy( agenda[l].telefone, "");
}

}
}
if ( n3 == 2 )
{
for ( l = 0; l < i; l++ )
{
strcpy( agenda[l].nome, "");
strcpy( agenda[l].telefone, "");
}
printf("\nTodos os registros foram deletados.\n");
}
}
}
while ( n1 != 4 );


agendaarq = fopen(nomedoarquivo,"w+"); fclose(agendaarq); // Apenas para limpar o arquivo
for ( l = 0; l < i; l++ )
{
agendaarq = fopen(nomedoarquivo,"a");
fprintf( agendaarq, "\nNome: %s\nTelefone: %s\n-------------------------------------------", agenda[l].nome, agenda[l].telefone );
fclose( agendaarq );
}

getc(stdin);

return 0;

}

Será que alguem poderia disponibilizar o portugues estruturado, diagrama de blocos, narrativa deste código por favor. Eu agradeço muito!

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!