Ir ao conteúdo
  • Cadastre-se
wagner9

Inserir contato na agenda em c

Recommended Posts

Boa tarde pessoal, gostaria de entender como proceder para inserir um novo contato em um programa de Agenda, cujo o tamanho está pré-definido.

 

Segue o código.

 

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

#define max 3

struct pessoa {
char nome [41];
char fone [14];
};
struct agenda {
int quantidade;
struct pessoa contatos [max];
};
struct agenda a1;

void cadastra(){
int i;
// Preeche os dados 
for (i=0; i < max ;i++)
{
printf ("\nPessoa %i\n",i+1);
printf ("Nome:");
scanf("%s",&a1.contatos[i].nome);
printf ("Fone:");
scanf ("%s",&a1.contatos[i].fone);
}
return;
}

void relatorio(){
int i;
printf ("\nLista de Contatos:\n\n");
for (i = 0; i < max; i++)
{
 printf ("%s\n",a1.contatos[i].nome);
 printf ("%s\n",a1.contatos[i].fone);
}
return;
}

void consulta()
{
    int i = 0;
    char nomeConsulta[20];
    int nomeAchou;
    printf("\nEntre com o NomeConsulta:\n");
    scanf("%s",&nomeConsulta);

    for(i=0; i<max;i++)
    {

        nomeAchou = strcmp( a1.contatos[i].nome , nomeConsulta);
        
        if(nomeAchou == 0){
        
              
                printf("\nNome: \n%s\n",a1.contatos[i].nome);
                printf("\nFone: \n%s\n",a1.contatos[i].fone);
                }
            }
            return;
            }
            
            
void altera(){
int i = 0;
    char nomeConsulta[20];
    int nomeAchou;
    char novoTel[14];
    char novoNome[41];
    
   
    printf("\nEntre com o Nome do contato que deseja alterar o numero:\n");
    scanf("%s",&nomeConsulta); 
   
      for(i=0; i<max;i++)
    {

        nomeAchou = strcmp( a1.contatos[i].nome , nomeConsulta);
        
        if(nomeAchou == 0){
         printf("Informe o novo telefone:");
         scanf("%s", &novoTel);
        strcpy(a1.contatos[i].fone, novoTel);
        
        }
        }

return;
}

void novoCadastro(){
// codigo para os novos cadastros
} 

int main()
{
int i;


 cadastra();
// consulta();
 altera();
 novoCadastro();
relatorio();
system("pause");
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

você teria que mudar completamente esse programa que você tem.
Primeiro você teria que ter um array de 'pessoa' maior do que 3.
A função cadastra não deveria cadastra-los todos de uma vez, isso é estúpido, imagine que você comprasse uma agenda e o fabricante ponha algo como "uma vez aberto o produto preencher todas as paginas". >_< O mais lógico é ir adicionando contatos conforme vaia fazendo falta não é? Isso podemos fazer da seguinte forma. Primeiro pense em uma agenda real. Poderia ser um contato por linha não?
588.jpg

Nessa agenda ilustrativa temos em cada pagina uns 30 contatos, como são 2 paginas  você tem 60 contatos por cada letra do alfabeto, então 60*24 letras/paginas você tem 1440 contatos. Nós não estamos limitados pela forma fisica de uma agenda pois ela mais bem seria uma matriz, porém nós podemos imaginar uma agenda de uma só pagina com 1440 contatos, isso é um vetor. Então partindo da sua estrutura pessoa(eu vou mudar para dados) o primeiro que devemos fazer é estipular o define tal como você fez no seu programa, porém com um tamanho maior de 1440 contatos.
#define MAX 1440 
struct Dados {
char nome [41];
char fone [14];
};

logo criamos a agenda dentro de main:
struct Dados agenda[MAX] ={0};

vamos precisar de um contador para saber quantos usuários ja foram inseridos na lista, deve começar valendo zero.
unsigned int inseridos = 0;


Dai acho que já é fácil pensar o que você tem que fazer... primeiro seria fazer um laço while e de condição uma variável chamada continuar do tipo int na qual inicializamos com o valor de 1(verdadero)
while(continuar){
//...
}

Dentro você coloca um menu tipo escolha a opção, 1 inserir, zero sair. Um switch iria fenômeno aí. Dai dentro da opção inserir quando o usuário escolher essa opção você usa agenda[inseridos].nome para guardar o nome e agenda[inseridos].telefone para guardar os dados com a variável inseridos como índice, porém antes você deve averiguar se if (inseridos < MAX) caso contrario não poderia incluir nenhum mais. depois de adicionar os dados você faz um inserir++; E tadah! fácil né.

Para sair é só por o continuar = 0; quando o usuário escolher sair.

Esse programa seria mais funcional que aquele que você mostrou, pois seria melhor inserir um contato quando fizer falta e não todos inicialmente.

Prove faze-lo, se tiver duvida ponha seu código aí e daremos uma olhada.

Conselho... sempre que fizer um programa pense em algo ou situação real, viu como pegamos uma agenda e nos baseamos nela para 'modelar' a estrutura do nosso programa, não fique travado pois programar é pegar ideias reais e aplica-las nos seus projetos, e ainda assim as vezes não é fácil, use papel e lápis para desenhar se for preciso.

 

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Excelente explicação vaangodp! Vou trabalhar nessa ideia, qualquer dúvida posto aqui. Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas como eu faria para que o programa exclua o nome de uma pessoa e ela seja retirada da
agenda ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

pode ser feitas muitas coisas, limpar esse pedaço e não ter ele em conta, otimizar a agenda copiando o seguinte contato no anterior desde o ponto que se deseja limpar até o final da agenda. exemplo:
você tem algo como isso:
[a][c][d][e]
dai você quer borrar a letra c, primeiro seria pegar d e copiar onde estava c(sobrescrever)
[a][d]<-[d][e]

logo copiar e onde tava a na d anterior a ela mesma
[a][d][e]<-[e]

e por ultimo eliminar a ultima e

[a][d][e][NULL]

essa posição fica livre para copiar um novo dado, ou seja inserido--;

 

Passar todo o conteúdo a uma nova agenda, pouco elegante porém valido. Em fim... existem muitas táticas, é só escolher uma.

 

O mais correto seria você usar "Listas simplesmente encadeadas" para a reserva e gestão da memória, essa seria a melhor alternativa.

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

×