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