Un prodotto di un supermercato può essere catalogato come "fresco", "alimentare", "detersivo" o "altro". Se il prodotto è fresco, abbiamo bisogno di una data di scadenza.
Inoltre, un prodotto è definito da un codice, da un prezzo di acquisto e un prezzo di vendita, con il prezzo di vendita sempre maggiore di quello d'acquisto.
Dato che bisogna gestire vari prodotti, ogni prodotto è pensato per far parte di una lista; contiene, quindi, un riferimento alla quantità di prodotti di quel tipo presenti e un riferimento al prodotto successivo.

Ecco come ho pensato di implementare il tutto. Creo un nuovo tipo struttura Prodotto_t e la funzione per creare un nuovo prodotto. Inoltre, creo un'enumerazione esterna di tipi di prodotti, che mi serviranno nel resto del programma. Consigli, suggerimenti? Grazie mille a tutti!!

codice:
enum tipi {FRESCO = 1, ALIMENTARE, DETERSIVO, ALTRO};

typedef struct prodotto
{
	char *nome;
	long codice;
	int tipo;
	int scadenza;
	double prezzoacq;
	double prezzoven;
	int quantita;
	struct prodotto *next;
} Prodotto_t;

/*
** Crea un nuovo prodotto partendo dalle sue caratteristiche.
** Restituisce NULL se non è possibile allocare nuova memoria o se il prezzo di 
** vendita è inferiore a quello di acquisto; restituisce un puntatore a Prodotto_t
** se procede tutto bene.
*/
Prodotto_t *creaprodotto(char *nome, long codice, int tipo, double prezzoacq, 
		double prezzoven)
{
	Prodotto_t *newp = malloc (sizeof(Prodotto_t));
	if (newp == NULL)
	{
		fprintf(stderr, "creaprodotto: Impossibile allocare nuova memoria\n");
		return NULL;
	}
	
	if(prezzoacq >= prezzoven)
	{
		fprintf(stderr, "creaprodotto: Prezzo vendita deve essere maggiore di"
				"prezzo acquisto\n");
		return NULL;
	}
	
	strcpy(newp->nome, nome);
	newp->codice = codice;
	newp->tipo = tipo;
	newp->prezzoacq = prezzoacq;
	newp->prezzoven = prezzoven;
	newp->quantita = 0; //quantita qui non interessa, verrò definita al momento dell'inserimento del prodotto con la funzione addprodotto
	if (tipo = FRESCO)
		newp->scadenza = 0;
	else
		newp->scadenza = -1; //se non si tratta di un prodotto fresco, non c'è bisogno di una data di scadenza
	
	return newp;
}