Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef char stringa[100];
typedef struct EL {
int codice_fatt;
stringa descrizione;
float importo;
struct EL *fatt_prec;
struct EL *fatt_succ;
} fattura;
typedef fattura *lista_fatture;
void inizializza(lista_fatture *lista);
int controlla_doppi(lista_fatture *lista, stringa descrizione);
void inserisci(lista_fatture *lista, stringa descrizione, float importo, int codice);
void inserisci_int(lista_fatture *lista, stringa descrizione, float importo, int codice);
void stampa(lista_fatture *lista);
main()
{
lista_fatture fatture2007, fatture2008;
char azione='x';
int progr1=0, progr2=0;
stringa descrizione;
float importo;
int anno;
int doppio;
inizializza(&fatture2007);
inizializza(&fatture2008);
while(1)
{
printf("Cosa vuoi fare?\nInserisci fattura(i) - Stampa archivio(s) - Esci(e)\n");
scanf(" %c",&azione);
if(azione=='e')
{
exit(1);
}
else if(azione=='i')
{
printf("\nInserisci descrizione: ");
scanf("%s",&descrizione);
printf("Inserisci importo: ");
scanf("%f",&importo);
printf("Inserisci anno: ");
scanf("%d",&anno);
if(anno==2007)
{
doppio=controlla_doppi(&fatture2007, descrizione);
if (doppio==0)
{
progr1=progr1+1;
inserisci(&fatture2007,descrizione,importo,progr1);
}
}
else if(anno==2008)
{
doppio=controlla_doppi(&fatture2008, descrizione);
if (doppio==0)
{
progr2=progr2+1;
inserisci(&fatture2008,descrizione,importo,progr2);
}
}
printf("\n");
}
else if(azione=='s')
{
printf("Inserisci anno da stampare: ");
scanf("%d",&anno);
if(anno==2007)
stampa(&fatture2007);
else if(anno==2008)
stampa(&fatture2008);
}
}
}
void inizializza(lista_fatture *lista)
{
*lista=NULL;
}
int controlla_doppi(lista_fatture *lista, stringa descrizione)
{
while(*lista!=NULL)
{
if(!strcmp((*lista)->descrizione, descrizione))
{
return 1;
}
else
{
*lista=(*lista)->fatt_succ;
}
}
return 0;
}
void inserisci(lista_fatture *lista, stringa descrizione, float importo, int codice)
{
if(*lista==NULL)
{
*lista=(lista_fatture)malloc(sizeof(fattura));
(*lista)->codice_fatt=codice;
(*lista)->importo=importo;
strcpy((*lista)->descrizione,descrizione);
(*lista)->fatt_prec=NULL;
(*lista)->fatt_succ=NULL;
}
else
{
inserisci_int(lista, descrizione, importo, codice);
}
}
void inserisci_int(lista_fatture *lista, stringa descrizione, float importo, int codice)
{
if((*lista)->fatt_succ==NULL)
{
lista_fatture p;
p=(lista_fatture)malloc(sizeof(fattura));
p->codice_fatt=codice;
p->importo=importo;
strcpy(p->descrizione,descrizione);
p->fatt_prec=*lista;
p->fatt_succ=NULL;
(*lista)->fatt_succ=p;
}
else
{
inserisci_int(&((*lista)->fatt_succ), descrizione, importo, codice);
}
}
void stampa(lista_fatture *lista)
{
lista_fatture p=*lista;
char verso='x';
printf("Stampare dal primo all'ultimo(p) o dall'ultimo al primo(u)?");
scanf(" %c",&verso);
if(verso=='p')
{
printf("\n\n");
while(p!=NULL)
{
printf("Codice: %d\nDescrizione: %s\nImporto: %f\n\n",p->codice_fatt,p->descrizione,p->importo);
p=p->fatt_succ;
}
}
else if(verso=='u')
{
printf("\n\n");
while(p->fatt_succ!=NULL)
{
p=p->fatt_succ;
}
while(p!=NULL)
{
printf("Codice: %d\nDescrizione: %s\nImporto: %f\n\n",p->codice_fatt,p->descrizione,p->importo);
p=p->fatt_prec;
}
}
}
Grazie mille davvero