Tou com alguma dificuldade em fazer trabalho para a faculdade que usa listas.
O trabalho que tenho de fazer tem o enunciado que se encontra neste link http://trabalhosuniv.com.sapo.pt/Projecto.pdf
Alguma parte do programa ja está feito mas tou com dificuldade em fazer a listagem dos valores introduzidos, não saem como foram introduzidos, e isto esta-me a dificultar em poder avançar com o trabalho.
Em baixo junto o codigo que ja esta contruido.
Agradecia a vossa ajuda, pois tou a ter dificuldades em fazer o trabalho que tem de ser entregue até dia 30 de junho e conta para nota final. Até agora tenho conseguido fazer os trabalhos solicitados pelo professor, mas neste projecto, e devido ao facto de para alem estudar tambem ser trabalhador, não estou inserido num grupo e tenho feito o trabalho sozinho o que torna as coisas mais dificeis.
Agradeço imenso qualquer ajuda que possa ser dada.
Codigo ja feito:
- Código: Seleccionar todos
#include <stdio.h>
#include <stdlib.h>
typedef struct lista{
char produto;
char data;
float quantidade;
float preco;
float iva;
struct lista *proximo, *anterior;
};
struct lista *primeiro;
struct lista *actual;
struct lista *anterior;
struct lista *proximo;
struct lista *gravar;
char op;
char prod[50];
char dat[10];
float quant[5];
float prec[5];
float i[4];
void insere(void){
system("cls");
printf("Inserir novo registo\n\n");
primeiro = NULL;
for(;;)
{
scanf("%s %s %d %d %d", &prod, &dat, &quant, &prec, &i);
op = getch();
actual = malloc( sizeof(struct lista) );
(*actual).produto = prod[50];
(*actual).data = dat[10];
(*actual).quantidade = quant[5];
(*actual).preco = prec[5];
(*actual).iva = i[4];
(*actual).proximo = primeiro;
primeiro = actual;
if( op == 42)
break;
}
primeiro->proximo = NULL;
for(actual = primeiro; actual != NULL; actual = (*actual).proximo)
printf( "%s %s %d %d %d\n", (*actual).produto, (*actual).data, (*actual).quantidade, (*actual).preco, (*actual).iva);
system("pause");
}
void listar(void){
system("cls");
actual = primeiro;
while( actual != NULL )
{
printf( "%c %c %f %f %f\n", (*actual).produto, (*actual).data, (*actual).quantidade, (*actual).preco, (*actual).iva);
actual = (*actual).proximo;
}
system("pause");
}
void elimina(void){
char op;
printf("Elimina produto\n\n");
if(primeiro == NULL){
system("cls");
printf("Nenhum registro armazenado...\n\n");
system("pause");
return;
}
else{
actual = primeiro->proximo;
do{
system("cls");
printf("Pressione + e - para alternar entre os registros, sair e confirmar\n\n");
printf("Produto: %s\n\nData: %s\n\nQuantidade: %s\n\nPreco: %s\n\nIVA: %s\n",
actual->produto,actual->data,actual->quantidade,actual->preco,actual->iva);
op = getch();
switch (op){
case 43:{
if (actual->proximo == primeiro)
actual = primeiro->proximo;
else
actual = actual->proximo;
break;
}
case 45:{
if (actual->anterior == primeiro)
actual = primeiro->anterior;
else
actual = actual->anterior;
}
}
}while((op != 27) && (op != 13));
}
if(op == 27)
return;
printf("\n\nVoce confirma a exclusao deste registro (S/N): [ ]\b\b");
op = getch();
if (op >= 97)
op -= 32;
if(op == 'S'){
anterior = actual->anterior;
proximo = actual->proximo;
anterior->proximo = proximo;
proximo->anterior = anterior;
free(actual);
if (primeiro == primeiro->proximo) // se for excluido o penultimo registro, sobrando apenas o registro "primeiro" que não é util para nós, o primeiro tambem será liberado
primeiro = NULL;
printf("\n\nRegistro excluido com sucesso!\n\n");
system("pause");
}
else
return;
}
int main(void){
char escolha;
insere();
do{
system("cls");
printf("I<nsere>, E<limina>, L<istar>, S<air>\n\nEscolha[ ]\b\b");
escolha = getch();
if(escolha >= 97)
escolha -= 32;
if(escolha == 'I')
insere();
if(escolha == 'E')
elimina();
if(escolha == 'L')
listar();
if(escolha == 'S')
break;
}while(escolha != 27);
return 0;
}


