Ir ao conteúdo
  • Cadastre-se
XXXGABIRU

C Agenda Telefônica em C

Recommended Posts

Pessoal gostaria de ajuda neste código, a agenda precisa ter as funções : adicionar contato , exluir , listar , buscar e editar. 

Eu estou aprendendo ainda , porém segue o que fiz até agora , eu me perdi na lógica e gostaria de ajuda.

 

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

#define RETORNA_MENU 0
#define MAX_X 100
#define MAX_NOME 100
#define MAX_TELEFONE 10

int qtdContatos = 0;

int main()
{

    char Contatos_Totais[MAX_X][MAX_NOME];
    char Telefones_Totais[MAX_X][MAX_TELEFONE];
    char **ptrNomes;
    char **ptrTelefones;

    ptrNomes = &Contatos_Totais;
    ptrTelefones = &Telefones_Totais;

    char Nome[MAX_NOME];
    char Telefone[MAX_TELEFONE];


    int opcao;


    MostraMenu();
    scanf("%d",&opcao);
    fflush(stdin);
    fflush(stdout);

    while(opcao != 6){
    switch(opcao){
    case 1: // ADICIONA CONTATO A LISTA.
    printf("\n-- Cadastro de novo contato --\n");
    printf("Nome do contato:\n");
    gets(Nome);
    printf("Telefone do contato:\n");
    gets(Telefone);
    Adicionar_Contato(Nome,Telefone,(ptrNomes + qtdContatos),(ptrTelefones + qtdContatos));
    break;

    /*case 2: // REMOVE CONTATO DA LISTA.
    Remover_Contato();
    break;*/

    case 3: // FAZ A LISTAGEM DE TODOS OS CONTATOS CADASTRADOS.
    Listagem_Contatos();
    break;

    /*case 4: // BUSCA informações INDIVIDUAIS DE UM CONTATO.
    Busca_Contato();
    break;

    case 5: // EDITA informações DE UM CONTATO.
    Editar_Contato();
    break;*/

    default:
    printf("Opcao incorreta.\n\n");

    }

    printf("\nEscolha outra opcao ou digite %d para retornar ao menu:\n",RETORNA_MENU);
    scanf("%d",&opcao);
    fflush(stdin);

    if(opcao == RETORNA_MENU){
    MostraMenu();
    scanf("%d",&opcao);
    fflush(stdin);
    }
    }

}

void MostraMenu(){
    printf("\n====== AGENDA TELEFONICA ======\n\n");
    printf("\n====== MENU ======\n");
    printf("Informe a opcao desejada:\n\n");
    printf("1) Adicionar um contato a agenda.\n");
    printf("2) Remover um contato da agenda.\n");
    printf("3) Lista de contatos cadastrados da agenda.\n");
    printf("4) Buscar contato na agenda.\n");
    printf("5) Editar contato da agenda.\n");
    printf("6) Sair.\n\n");
    }

void Adicionar_Contato(char Nome[MAX_NOME],char Telefone[MAX_TELEFONE],char **ptrNomes,char **ptrTelefones){

if(Nome != "" && Nome != NULL){
    *ptrNomes = Nome;
}
int i = 0;
for (i=0;i<MAX_TELEFONE;i++){
    if(Telefone== '\0')
        break;
}
if (i == MAX_TELEFONE){
    *ptrTelefones = Telefone;
}
else{
    printf("O numero precisa ter 9 digitos... \n");
    return;
}

printf("Contato Cadastrado!\n\n");

qtdContatos++;

}

 /*void Remover_Contato(int id,char **ptrNomes,char **ptrTelefones){
char opcao;

printf("Digite ")


if(opcao){


}
*/

void Listagem_Contatos(char Contatos_Totais[MAX_X][MAX_NOME],char Telefones_Totais[MAX_X][MAX_TELEFONE],int qtdContatos){
int i = 0;
int j = 0;

printf("\n======= LISTA DE CONTATOS CADASTRADOS =======\n");


for(i=0;i<qtdContatos;++i){
       for(j=0;j<qtdContatos;++j){
    printf("*** Contato %d ***\n",i+1);
    printf("Nome: %s\n",Contatos_Totais[j]);
    printf("Telefone: %s\n",Telefones_Totais[j]);
    fflush(stdin);
    i++;
    j++;

    }
}
}

void Buscar_Contato(){

}


 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, indo pelo meu modo de organizar o problema, seria interessante trabalhar com uma struct:

#include <stdio.h>
#define MAX_ALL 100

typedef struct{
    char nome[30];
    int telefone;
} Contato;

int main(){
	Contato Lista [MAX_X];
}

Colocar as funções em uma biblioteca a parte (Ex: "funcoes.h"), pois deixa o main mais limpo e com melhor visibilidade dos passos que estão sendo feitos.

#include "funcoes.h"

Por ultimo, algo muito útil que esquecemos ou esperamos a finalização do código para fazer, comentar o código.
Algo que eu não havia visto é que você não declarou o protótipo das suas funções antes do main:

#include <stdio.h>
#define MAX_ALL 100

typedef struct{
    char nome[30];
    int telefone;
} Contato;

void MostrarMenu();

int main(){
	Contato Lista [MAX_X];
}

void MostraMenu(){
    printf("\n====== AGENDA TELEFONICA ======\n\n");
    printf("\n====== MENU ======\n");
    printf("Informe a opcao desejada:\n\n");
    printf("1) Adicionar um contato a agenda.\n");
    printf("2) Remover um contato da agenda.\n");
    printf("3) Lista de contatos cadastrados da agenda.\n");
    printf("4) Buscar contato na agenda.\n");
    printf("5) Editar contato da agenda.\n");
    printf("6) Sair.\n\n");
}

 

Editado por Kelvin Isael Seibt
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@XXXGABIRU     seu código está bom , mas estava com alguns erros,  então  apenas organizei  e ele ficou assim :

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

#define RETORNA_MENU 0
#define MAX_X 100
#define MAX_NOME 100
#define MAX_TELEFONE 10

int  qtdContatos = 0;
char Contatos_Totais[MAX_X][MAX_NOME];
char Telefones_Totais[MAX_X][MAX_TELEFONE];
void MostraMenu       ();
void MostraMenu       ();
void Listagem_Contatos();
void Listagem_Contatos();
void cadastrar        ();
void Remover_Contato  ();
void Buscar_Contato   ();
int main(){
    char **ptrNomes,op='s';
    char **ptrTelefones;
    ptrNomes = &Contatos_Totais;
    ptrTelefones = &Telefones_Totais;
    int opcao;
    while(opcao != 6){
        MostraMenu();
        scanf("%d",&opcao);
        switch(opcao){
        case 1: /*// ADICIONA CONTATO A LISTA.*/
            cadastrar();
            break;
        case 2: /*// REMOVE CONTATO DA LISTA.*/
            Remover_Contato();
            break;
        case 3: /*// FAZ A LISTAGEM DE TODOS OS CONTATOS CADASTRADOS.*/
            Listagem_Contatos();
            break;
        case 4: /*// BUSCA informações INDIVIDUAIS DE UM CONTATO.*/
            Buscar_Contato();
            break;
        /*case 5: // EDITA informações DE UM CONTATO.
            Editar_Contato();
            break;*/
        case 6:
            printf("Saindo Da Agenda . . . !\n\n");
            return 0;
        default:
            printf("Opcao incorreta.\n\n");
        }
    }
}
void MostraMenu(){
    system("cls");
    printf("\n====== AGENDA TELEFONICA ======\n\n");
    printf("\n============ MENU =============\n"  );
    printf("Informe a opcao desejada:\n"          );
    printf("1) Adicionar um contato a  agenda.\n" );
    printf("2) Remover   um contato da agenda.\n" );
    printf("3) Lista de contatos cadastrados da agenda.\n");
    printf("4) Buscar contato na agenda.\n");
    printf("5) Editar contato da agenda.\n");
    printf("6) Sair.\n\n");
    }
void Remover_Contato(){
    char flag='p',nome[20];
    int j,w;
    printf("Digite o nome para remover ");
    fflush(stdin);
    gets(nome);
    for(j=0;j<qtdContatos;j++){
        if(strcmp(nome,Contatos_Totais[j])==0){
            for(w=j;w<qtdContatos;w++){
                strcpy(Contatos_Totais [w],Contatos_Totais [w+1]);
                strcpy(Telefones_Totais[w],Telefones_Totais[w+1]);
                flag='w';
                qtdContatos--;
            }
        }
    }
    if(flag=='p')printf("Contato Inexistente !\n");
    else printf("Contato Removido Com Sucesso !\n");
    system("pause");
}
void cadastrar(){
    char op;
    do{
        printf("\n-- Cadastro de novo contato --\n");
        printf("Nome do contato: ");
        fflush(stdin);
        gets(Contatos_Totais[qtdContatos]);
        printf("Telefone do contato: ");
        fflush(stdin);
        gets(Telefones_Totais[qtdContatos]);
        printf("Contato Cadastrado!\n\n");
        qtdContatos++;
        printf("Quer Cadastra Outro S/N");
        fflush(stdin);
        scanf("%c",&op);
    }while(op!='n');
}
void Listagem_Contatos(){
    int i = 0;
    int j = 0;
    printf("\n======= LISTA DE CONTATOS CADASTRADOS =======\n");
    if(qtdContatos==0)printf("Não Tem Nenhum Cadastro\n");
    for(j=0;j<qtdContatos;++j){
        printf("*** Contato %d ***\n",j+1);
        printf("Nome: ----- %s\n",Contatos_Totais[ j]);
        printf("Telefone: - %s\n",Telefones_Totais[j]);
        printf("\n");
    }
    system("pause");
}
void Buscar_Contato(){
    char nom[20];
    int i,j,flag=0;
    system("cls");
    printf("\n   Digite O Nome ");
    fflush(stdin);
    gets(nom);
    for(i=0;i<qtdContatos;i++){
        if(strcmp(nom,Contatos_Totais[i])==0){
            flag=1;
            printf("Encontrado O Cadastro %d\n",i+1);
            printf("Nome: ----- %s\n",Contatos_Totais[i]);
            printf("Telefone: - %s\n",Telefones_Totais[i]);
            printf("\n");
        }
    }
    if(flag==0)printf("Cadastro Não Encontrado !\n");
    system("pause");
}

 

Editado por devair1010
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para dar minha contribuição a esse post gostaria de colocar a forma de como criei uma agenda telefônica, usando um arquivo para gravar os cadastros realizados. Com isso evito d perder os cadastros feitos ao fechar o programa.

 

Segue o código:

 

#include <stdio.h>
#include <string.h>
#include <locale.h>
#include <windows.h>

void cadastrar(char nome[], char telefone[])
{
	FILE *arquivo;
	int i;

	arquivo = fopen("Agenda.txt", "a");

	if (!arquivo)
    {
        printf("\nArquivo inexistente!\n\n");
        system("pause");
        exit(0);
    }

	fprintf(arquivo, "Nome: ");

    for (i = 0; i < strlen(nome); i++)
    {
        putc(nome[i], arquivo);
    }

    fprintf(arquivo, "\n");

    fprintf(arquivo, "Telefone: ");

    for (i = 0; i < strlen(telefone); i++)
    {
        putc(telefone[i], arquivo);
    }

    fprintf(arquivo, "\n\n");

	fclose(arquivo);
}


void listar()
{
	FILE *arquivo;
	char buffer[10] = "";
	char caractere;

	arquivo = fopen("Agenda.txt", "r");

	if (arquivo != NULL)
	{
		while ((caractere = getc(arquivo)) != EOF)
		{
		    if (strlen(buffer) < 9)
            {
                sprintf(buffer, "%s%c", buffer, caractere);
            }
            else
            {
                printf("%s", buffer);
                sprintf(buffer, "%c", caractere);
            }
		}
		if (strlen(buffer) > 0)
		{
			printf("%s", buffer);
        }

        fclose(arquivo);
	}
}

void solicitarDados()
{
    char nome[100];
    char telefone[100];
    char ch;

    system("cls");
    printf("\nInforme o nome do contato: ");
    fgets(nome, 100, stdin);
    strtok(nome, "\n");
    if (strlen(nome) == 100 - 1)
    {
        while ((ch = getchar()) != '\n' && ch != EOF);
    }

    printf("Informe o telefone do contato: ");
    fgets(telefone, 100, stdin);
    strtok(telefone, "\n");
    if (strlen(telefone) == 100 - 1)
    {
        while ((ch = getchar()) != '\n' && ch != EOF);
    }

    cadastrar(nome, telefone);

}

int main()
{
    setlocale(LC_ALL, "Portuguese");

    system("title Agenda Telefônica");

	int opcao;
	char *limparBuffer = NULL;

	do
	{
		system("cls");
		printf("\n\nBem-vindo ao programa AGENDA\n");
		printf("\n\n\tMENU\n\n");
		printf("(1) Cadastrar contato\n(2) Visualizar contatos\n(3) Sair\n");
		printf("\nSua opção: ");
		scanf("%d", &opcao);
		scanf("%c", &limparBuffer);

		switch (opcao)
		{
			case 1:
                solicitarDados();
				system("cls");
				break;
			case 2:
				system("cls");
				listar();
				system("pause");
				break;
			case 3:
                // Sair
				break;
			default:
				printf("\nOpção inválida!\n\n");
				system("pause");
				break;
		}

	} while (opcao != 3);


	return 0;
}

Obs: Definitivamente não tem como postar um código bem indentado copiando e colando um código do Code Blocks

adicionado 3 minutos depois

 

Se porventura alguém souber dizer como faço para alterar os dados de um contato depois que os mesmos foi gravado no arquivo agradeço!

  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@giu_d      para postar os códigos  do code blocks ou qualquer outro compilador   você precisa na hora de digitar as linhas do programa  inserir espaços simples e não tabulações , assim a identação fica normal e na hora que postar o código estará bem identado .         e para modificar os dados no arquivo txt depois de já gravados,  como você sabe  tudo que está no arquivo TXT é strng, então para alterar um dado já gravado no arquivo txt , você abre o arquivo e vai procurando pela palavra que você quer alterar   e se não for o dado procurado você coloca esse dado em um arquivo de backup e continua a procura e quando encontrar o dado,  você faz a alteração do dado e coloca no arquivo de backup , e terminado as alterações que você quer então  feche os dois arquivos e  delete o arquivo onde estava os dados, usando o comando remove("nome_do_arquivo.txt") ;  e em seguida renomeie o arquivo de backup com o mesmo nome do primeiro arquivo .    usando o comando rename("arquivo de backup.txt","nome do primeiro arquivo.txt") ;   assim você ficará com o mesmo arquivo de antes , porém com as alterações que você quer .

Editado por devair1010
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@devair1010  Rapaz, era exatamente uma resposta como essa q eu precisava. Eu já tinha considerado a hipótese d trabalhar com dois arquivos, mas não da maneira tão detalhada como você mencionou agora, com as funções  remove() e rename(). Muito obrigado pela dica! 

Vou já trabalhar em um código, quem sabe esse mesmo da agenda, para já fazer uso dessa dica q você passou. Obrigado por apresentar uma resposta a essa minha minha dúvida! Valeu mesmo

Abraço!

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×