Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda...


Lucati

Pergunta

Boa Tarde Galera,

há tempo eu consulto o fórum e sempre foi muito útil o post de vocês!

mais hoje eu preciso de uma ajuda...

perdi as aulas de Fila e Pilha, e confesso que Ponteiros foi muito complicado!

preciso resolver esse exercicio:

Desenvolver um programa em linguagem C, semelhante a lista telefônica de um celular

convencional. O programa deverá armazenar as informações (NOME, TELEFONE FIXO, CELULAR

e E-MAIL) de cada contato. O usuário deverá ter as opções (Menu) de INSERIR NOVO CONTATO,

EXCLUIR CONTATO, LOCALIZAR, MOSTRAR TODOS OS CONTATOS, EXCLUIR TODOS OS

CONTATOS e VERIFICAR A QUANTIDADE DE REGISTROS CADASTRADOS. O Programa deve fazer a

inserção de cada elemento em seu devido lugar, atualizando apenas os apontadores (ponteiros),

mantendo assim a lista sempre ordenada pelo NOME do contato.

Alguém me ajuda?

Obrigado!

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Ola,

Fiz as funções de manipulacao da lista pra você.

Agora tenta resolver o resto do seu sistema.

Qualquer dúvida posta ai que a gente ajuda

Coloquei alguns comentarios no main() pra ajudar a ententer como usar as funcoes.

Abs


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

struct TLista
{
struct TLista *previous;
struct TLista *next;

char nome[31];
char celular[16];
char telefone[16];
char email[51];
};
typedef struct TLista tlista;

void agendaInicia(void);
void agendaInsere(char *nome, char *celular, char *telefone, char *email);
void agendaLista(void);
tlista *agendaLocaliza(char *nome);
int agendaRemove(char *nome);

int agendaContador;
tlista agendaRoot; // raiz para a lista
tlista *agendaLast; // ponteiro para o ultimo elemento da lista
tlista *agendaCurr; // ponteiro para o elemento corrente da lista

//---------------------------------------------------
void main(void)
{
// inicia as variaveis de controle da lista
agendaInicia();

// insere os items já em ordem alfabetica por nome
agendaInsere("nome-1", "123", "456", "email-1");
agendaInsere("nome-3", "123", "456", "email-3");
agendaInsere("nome-5", "123", "456", "email-5");
agendaInsere("nome-7", "123", "456", "email-7");
agendaInsere("nome-9", "123", "456", "email-9");
agendaInsere("nome-8", "123", "456", "email-8");
agendaInsere("nome-6", "123", "456", "email-6");
agendaInsere("nome-4", "123", "456", "email-4");
agendaInsere("nome-2", "123", "456", "email-2");
agendaInsere("nome-a", "123", "456", "email-a");

// exibe o conteudo da lista
agendaLista();

tlista *ptr;
printf("\n\nTestando localizacao\n");
if ((ptr = agendaLocaliza("nome-6")) != NULL)
printf("Achei: %s\n", ptr->nome);
else
printf("não achei\n");

printf("\n\nTestando remocao\n");
if (agendaRemove("nome-3") == 0)
{
printf("Registro (%s) removido\n", "nome-3");
agendaLista();
}
else
printf("Registro não removido\n");

printf("Reinsere o item 3\n");
agendaInsere("nome-3", "123", "456", "EMAIL-3 (REINSERIDO NA ORDEM)");
agendaLista();

// quantidade de itens na lista
printf("itens: %d\n", agendaContador);

}
//---------------------------------------------------
void agendaInicia(void)
{
agendaContador = 0;
agendaRoot.next = agendaRoot.previous = NULL;
agendaLast = &agendaRoot;
agendaCurr = &agendaRoot;
}
//---------------------------------------------------
void agendaInsere(char *nome, char *celular, char *telefone, char *email)
{
// insere sempre em ordem
tlista *ptr = &agendaRoot;
tlista *ptrNovo;
while(ptr != NULL)
{
if (strcmp(ptr->nome, nome) > 0)
{
ptr = ptr->previous;
ptrNovo = (tlista *) malloc(sizeof(tlista));
ptrNovo->previous = ptr;
ptrNovo->next = ptr->next;
ptr->next->previous = ptrNovo;
ptr->next = ptrNovo;

strcpy(ptrNovo->nome, nome);
strcpy(ptrNovo->celular, celular);
strcpy(ptrNovo->telefone, telefone);
strcpy(ptrNovo->email, email);

agendaContador++;
return;
}
ptr = ptr->next;
}

agendaLast->next = (tlista *) malloc(sizeof(tlista));

strcpy(agendaLast->next->nome, nome);
strcpy(agendaLast->next->celular, celular);
strcpy(agendaLast->next->telefone, telefone);
strcpy(agendaLast->next->email, email);

agendaLast->next->previous = agendaLast;
agendaLast->next->next = NULL;
agendaLast = agendaLast->next;
agendaContador++;
}
//---------------------------------------------------
void agendaLista(void)
{
if (!agendaContador)
{
puts("Agenda vazia");
return;
}

tlista *agendaPtr = &agendaRoot;
while (agendaPtr != NULL)
{
printf("%s ",agendaPtr->nome);
printf("%s ",agendaPtr->celular);
printf("%s ",agendaPtr->telefone);
printf("%s ",agendaPtr->email);
printf("\n");

agendaPtr = agendaPtr->next;
}
printf("\n");
}
//---------------------------------------------------
tlista *agendaLocaliza(char *nome)
{
if (!agendaContador)
{
puts("Agenda vazia");
return;
}

tlista *agendaPtr = &agendaRoot;
while (agendaPtr != NULL)
{
if (!strcmp(agendaPtr->nome, nome))
return agendaPtr;
agendaPtr = agendaPtr->next;
}
return NULL;
}
//---------------------------------------------------
int agendaRemove(char *nome)
{
tlista *ptr;
if ((ptr = agendaLocaliza(nome)) == NULL)
return 1; // não encontrado

// refaz os links
ptr->next->previous = ptr->previous;
ptr->previous->next = ptr->next;
free(ptr);
agendaContador--;
return 0;
}
[/codebox]

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...