Ir para o conteúdo
onabi

Agenda Telefonica em C

Mensagens Recomendadas

onabi

Boa tarde,

To com um problema em desenvolver um programa em linguagem C de uma agenda telefonica e gostaria de saber se alguem pode dedicar um tempo em me ajudar!

  Entrada:

O arquivo de entrada contém o número de contatos (inteiro), o nome completo (nome e um sobrenome, separados por espaço) e o telefone de cada contato. Após ler os contatos e carregar no vetor, seu programa deve ler do teclado uma das duas opções disponíveis: se digitar 1, o programa ordena pelo campo de telefone; se digitar 2, o programa ordena pelo campo nome; e qualquer outro valor o programa imprime na tela a mensagem "Opcao invalida." e termina.

Saida:

O programa deve ter um procedimento mostracontatos que mostra a agenda completa na saída padrão, sendo que deve imprimir a palava "Nome: " seguido pelo nome de cada contato e na linha seguinte a palavra "Telefone: " seguido pelo telefone de cada contato.

Esqueleto do programa:

**FIZ ALGUMAS MODIFICAÇÕES NO CODIGO:

estou quase conseguindo, falta a função gravacontatos e melhorar a mostracontatos, se alguem puder ajudar!

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

#define MAX_STR 200

//definição do tipo de registro
typedef struct contato{
char nome[MAX_STR];
int telefone;
} Contato;

//procedimento que le os contatos do arquivo arq e grava no vetor agn
// n e o parametro que informa o numero de contatos
void lecontatos(Contato agn[], int n, FILE *arq){
  int i;
  
    arq = fopen ("arquivo.txt", "r"); //abertura do arquivo - somente leitura

  if (arq == NULL) { //erro na abertura do arquivo
    perror("teste2.txt");
  }
  else{
  for(i=0;i<n;i++){
                   fscanf(arq,"%s", agn[i].nome);
                   fscanf(arq,"%d", &agn[i].telefone);
                   fclose(arq);
                   }
}
}
//procedimento de ordenação dos contatos pelo campo telefone
// n e o parametro que informa o numero de contatos
void ordenatelefone(Contato agn[], int n){ //procedimento para organizar agenda
      int i,j; //usados nas trocas de ordem
      Contato aux;
            for(i=0;i<n-1;i++) { //primeiro for da troca
              for(j=0;j<n-1;j++)    	//for interno para a organização de todos os numeros
                     if (agn[j].telefone > agn[j+1].telefone) { 
                 	aux=agn[j];
                  	agn[j]=agn[j+1];
                   	agn[j+1]=aux;
      }
  }  
}
//procedimento de ordenação dos contatos pelo campo nome
// n e o parametro que informa o numero de contatos
void ordenanomes(Contato agn[], int n){ //procedimento para organizar agenda
     int i,j; //usados nas trocas de ordem
      Contato aux;
            for(i=0;i<n-1;i++) { //primeiro for da troca
              for(j=0;j<n-1;j++)    	//for interno para a organização de todos os numeros
                     if (agn[j].nome > agn[j+1].nome) { 
                 	aux=agn[j];
                  	agn[j]=agn[j+1];
                   	agn[j+1]=aux;
      }
  } 
}


//procedimento que grava o vetor de contatos no arquivo de nome indicado pela string caminho
// n e o parametro que informa o numero de contatos
void gravacontatos(Contato agn[], int n, char* caminho){
  FILE *fr, *fw;
  char c;
  
  if (agn < n) { //se nao informou o numero minimo de argumentos
    printf("Uso: %s <arq_origem> <arq_destino>\n", caminho); 
     }

  fr = fopen (arquivo, "r"); 
  fw = fopen (caminho, "w");

  //leitura e copia elemento a elemento
  while (fscanf(fr, "%c", &c) != EOF)
    fprintf(fw,"%c", c);

  fclose(fr);  
  fclose(fw);
}
//procedimento que imprime o vetor de contatos na tela
// n e o parametro que informa o numero de contatos
void mostracontatos(Contato agn[], int n, int numero){
int i;
int numero;
if(numero == 1){
for(i=0;i<n;i++){
  printf("%s", agn[i].nome);
  printf("%d", agn[i].telefone);
}
}
if(numero == 2){
    for(i=0;i<n;i++){
    printf("%d", agn[i].telefone);
    printf("%s", agn[i].nome);
}
}
}

int main(int argc, char* argv[]){
int n, i, caminho;
int numero, v1[100];
Contato agn[200];
scanf("%d", &n);

void gravacontatos(agn,n);
void lecontatos(agn,n);

  scanf("%d", &numero);

void mostracontatos(agn,n,numero);


//INSERIR SEU CÓDIGO AQUI
system("PAUSE");
return 0;
}

//IMPLEMENTAR OS CÓDIGOS DAS FUNÇÕES AQUI

Se alguem puder me dar dicas.

Agradeço desde já!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Nao experimentei o teu codigo, nem estive a olhar para ele com atencao, mas dou-te uma sugestao:

Eu fiz uma parte do programa, mas nao sei se tá correto!

O problema maior é na parte de gravação e de mostrar..

//procedimento que le os contatos do arquivo arq e grava no vetor agn
// n e o parametro que informa o numero de contatos
void lecontatos(Contato agn[], int n, FILE *arq){

Nesta funcao lecontatos o parametro n "nao sai da funcao".

Eu faria a funcao retornar um int (esse n) e nao o passava como parametro

int lecontatos(Contato agn[], FILE *arq) { /* ... */ return 42; }

Outra hipotese seria passar um ponteiro em vez dum valor e actualizar o objecto apontado dentro da funcao

void lecontatos(Contato agn[], int *n, FILE *arq) { /* ... */ *n = 42; }


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.