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");
}
}
}