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

Lista Duplamente Encadeada Help!


RobsonSantos

Pergunta

Sistema para a empresa ELETROCARO – Filial 4º Semestre  
A empresa ELETROCARO – Filial 4º Semestre resolveu informatizar o cadastro de 
seus clientes. Para que isto aconteça, á empresa solicitou aos alunos da Uninove que 
desenvolvessem um programa em C.  
Para desenvolver esse programa, a empresa exigiu certos critérios, como:  
- O programa deve ocupar pouco espaço na memória;

- O programa deve ter uma opção para armazenar os seguintes dados: o código do 
cliente, nome, endereço, telefone, data de nascimento, código do produto e 
quantidade de cada produto que o cliente costuma comprar. É importante destacar 
que não pode haver dois ou mais clientes com o mesmo código e/ou dois ou mais 
produtos com o mesmo código.  

- O programa deve ter uma opção para remover um cliente ou remover algum produto 
do cliente. É importante destacar que não é possível remover um dado inválido ou se 
não há nada cadastrado.  

- O programa deve ter opções de busca pelo nome e pelo código do cliente; Caso não 
seja encontrado o dado, o usuário deve ser informado;

- O programa deve ter uma opção que mostre todos os dados dos clientes na tela;

- O programa deve ter uma opção que busque todos os dados de todos os clientes que 
compram um determinado produto, ou seja, buscar todos os clientes pelo código do 
produto;

- O usuário deverá ter a liberdade de escolher as opções do menu quantas vezes ele 
quiser, ou seja, o programa só será finalizado quando o usuário escolher a opção de 
saída: 

Exemplo do menu:  
1  - Cadastrar Clientes 
2  – Remover Cliente 
3  – Remover produto do Cliente 
4  – Busca pelo nome do Cliente 
5  – Busca pelo código do Cliente 
6  – Busca dos Clientes pelo código do produto 
7 – Saída. 
Opção:  
- O programa deve ser feito em utilizando uma lista duplamente encadeada.  

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Estou me baseando nesse código, já fiz algumas alterações

 

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

struct list  
{  
    int codcli, codprod, quant;
    char nome[40]; char endereco[40]; char telefone [11]; char nasc[10];  
    struct list *anterior;    
    struct list *proximo;     
}; 
  
typedef struct list Lista;  

//Funçao que insere no final da lista.  
void inserirFim(Lista **paramLista, int x, char parNome[], char parEndereco[], char parTelefone[], char parNasc[], int y, int z)
{  
     Lista *nList;//criando ponteiro nova lista.  
     nList=(Lista*)malloc(sizeof(Lista));//alocando o espaço em memória e usando cast.  
     nList->codcli = x; //atribuindo valor para n nova lista.   
     strcpy(nList->nome,parNome);
     strcpy(nList->endereco,parEndereco);
     strcpy(nList->telefone,parTelefone);
     strcpy(nList->nasc,parNasc);
     nList->codprod = y;
     nList->quant = z;     
     nList->anterior = NULL;// apontando para inicio da lista
     nList->proximo = NULL;// apontando para fim da lista  
  
     if(*paramLista == NULL)
     {//verifica se é o final da fila  
        *paramLista = nList;//se for insere a nova lista no final  
     }else
     {            
        Lista *listaAux; //senao cria uma lista auxiliar  
        listaAux = *paramLista; //coloca a lista atual na lista auxiliar  
        while(listaAux->proximo != NULL){ //e vai percorrendo a lista ate encontrar o final ou seja NULL  
            listaAux = listaAux->proximo; //enquato não acha o final ela fica colocando "as estruturas listas" na lista temporaria  
        }//obviamente uma hora ela vai chegar no final da lista ou seja nesta linha  
        listaAux->proximo = nList;//como ele já esta no final da fila ele so adiciona a nova lista  
        nList->anterior = listaAux;//guarda o endereço da informação anterior
    }         

void recebe(Lista **paramLista)
{
    int codcli, codprod, quant;
    char nome[40]; char endereco[40]; char telefone [11]; char nasc[10];     
  
    fflush(stdin);
    printf("Codigo do Cliente: ");
    scanf("%d",&codcli);
    fflush(stdin);    
    printf("Nome do Cliente: ");
    gets(nome);
    printf("Endereco: ");
    gets(endereco);
    printf("Telefone: ");
    gets(telefone);
    printf("Data de Nascimento: ");
    gets(nasc);
    fflush(stdin);
    printf("Codigo do Produto: ");
    scanf("%d",&codprod);
    printf("Quantidade do Produto: ");
    scanf("%d",&quant);
  
  inserirFim(paramLista,codcli,nome,endereco,telefone,nasc,codprod,quant);
}           

//Esta funçao imprime toda a lista
/*void imprimirLista(Lista * paramList)  
{     
  Lista *listaAux; //cria uma lista auxiliar  

  system("cls");//limpa a tela               
  if (paramList == NULL) 
     return;
  
  printf("\nImprimindo a Lista - Comecando do inicio\n");    
         
  while(paramList != NULL)//enquanto não é o final da lista leia e imprima o conteudo  
  {              
     printf("%d", paramList->dado);//imprimindo o valor    
     listaAux =  paramList; //apontando a lista a lista anterior
     paramList = paramList->proximo; //apontando a lista a proxima lista     
     printf("\n");           
  }    
   
  printf("\nImprimindo a Lista - Comecando do fim\n");    
    
  paramList = listaAux;       
  while(paramList != NULL)//enquanto não é o final da lista leia e imprima o conteudo  
  {              
     printf("%d", paramList->dado);//imprimindo o valor    
     paramList = paramList->anterior; //apontando a lista a lista anterior
     printf("\n");
  }                    
  printf("\n");
} */ 

void removerCliente(Lista **paramLista){  
    if(*paramLista == NULL)//verirfica se a lista esta vazia  
        printf("\nLista Vazia!\n\n");  
    else
    {//senão tiver ele cria uma lista auxiliar novamente   
        Lista *auxiliar;  
        auxiliar = *paramLista;//coloca a lista atual dentro da auxiliar  
        *paramLista = (*paramLista)->proximo;//pega a lista e converte para *paramLista  
        if (*paramLista !=NULL)
            (*paramLista)->anterior=auxiliar->anterior;                  
        free(*paramLista);// a função free libera a memoria
        printf("\nCliente Removido com Sucesso!\n");  
    }  
}

void removerProduto(Lista **paramLista){  
    if(*paramLista == NULL)//verirfica se a lista esta vazia  
        printf("\nLista Vazia!\n\n");  
    else
    {//senão tiver ele cria uma lista auxiliar novamente   
        Lista *auxiliar;  
        auxiliar = *paramLista;//coloca a lista atual dentro da auxiliar  
        *paramLista = (*paramLista)->proximo;//pega a lista e converte para *paramLista  
        if (*paramLista !=NULL)
            (*paramLista)->anterior=auxiliar->anterior;                  
        free(*paramLista);// a função free libera a memoria
        printf("\nProduto Removido com Sucesso!\n");  
    }  
}
    
int cont=0;  
//inicio do programa   
main()  
{  
      int op=0;//controla a opçao escolida pelo usuario    
      Lista *minhaLista;// cria um ponteiro do tipo lista  
      minhaLista = NULL;//Seta ele com o valor NULL  
      while(op!=4)
      {  
        system("cls");  
        printf("\nESCOLHA UMA OPCAO\n");        
        printf("\n1 - Cadastrar Cliente\n2 - Remover Cliente\n3 - Remover produto do Cliente\n4 - Busca pelo nome do Cliente\n5 - Busca pelo código do Cliente\n6 - Busca dos Clientes pelo código do produto\n7 - Saida\n\nOPCAO: ");  
        scanf("%d",&op);   
        // inserir  
        if(op==1)
        {  
          system("cls");             
          recebe(&minhaLista);     
          system("pause");               
        }   
        //remover  
        else if(op==2)
        {  
          removerCliente(&minhaLista);                        
          system("pause");
        //imprime a lista    
        }
        else if(op==3)
        {    
          system("pause");
        }         
      }  
}

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,3k
    • Posts
      652,4k
×
×
  • Criar Novo...