Gestione di un ristorante Esercitazione: Gestione di un ristorante Dobbiamo gestire le ordinazioni che fanno i clienti in un ristorante: esiste un menù contenente il nome del piatto e il prezzo relativo; immaginiamo di avere a disposizione un archivio menu fatto nel seguente modo Pasta al ragù 5 Pasta al pesto 4 …
Gestione di un ristorante Esercitazione: Gestione di un ristorante Pensiamo che ai tavoli ci siano clienti e che un’ordinazione sia semplicemente la richiesta di un piatto. Per ogni piatto ci sarà un’ordinazione a cui leghiamo il nome del singolo cliente.
Gestione di un ristorante Esercitazione: Gestione di un ristorante I clienti possono fare delle ordinazioni: il ristorante deve gestire un elenco di ordinazioni ed ogni ordinazione contiene informazioni Nome e Cognome del cliente nome del piatto prezzo del piatto
Gestione di un ristorante Esercitazione: Gestione di un ristorante Bisogna implementare le strutture dati adeguate. menu (piatto, costo) ordinazione (nome, cognome, piatto, costo)
Gestione di un ristorante Esercitazione: Gestione di un ristorante #include <stdio.h> #include <stdlib.h> #include <string.h> typedef char stringa[20]; typedef struct { stringa nome; stringa cognome; stringa piatto; int costo; } ordinazione; typedef struct elem{ ordinazione info; struct elem* next; } elist; typedef elist* plist; typedef struct { stringa piatto; int costo; } menu; typedef struct elem2{ menu info; struct elem2* next; } elist2; typedef elist2* plist2;
Gestione di un ristorante Esercitazione: Gestione di un ristorante Bisogna implementare i seguenti metodi: un metodo che inserisca nell’elenco una nuova ordinazione (avendo in input nome e cognome del cliente, e nome del piatto)
Gestione di un ristorante Esercitazione: Gestione di un ristorante nuova ordinazione
Gestione di un ristorante Esercitazione: Gestione di un ristorante void insert(plist *l, stringa nm, stringa cm, stringa pt, plist2 l2) { plist temp = (plist)malloc(sizeof(elist)); strcpy(temp->info.nome,nm); strcpy(temp->info.cognome,cm); strcpy(temp->info.piatto,pt); int test=0; while ((!test)&&(l2 != NULL)) if (strcmp(pt,l2->info.piatto)) { temp->info.costo=(l2->info).costo; test = 1; } else l2 = l2->next; if (test==0) {printf(“Piatto inesistente nel menu\n"); return;} temp->next=*l; *l=temp;
Gestione di un ristorante Esercitazione: Gestione di un ristorante Bisogna implementare i seguenti metodi: un metodo che inserisca nell’elenco una nuova ordinazione (avendo in input nome e cognome del cliente, e nome del piatto) un metodo che elimini dall’elenco le ordinazioni fatte da un cliente (dando in input nome e cognome)
Gestione di un ristorante Esercitazione: Gestione di un ristorante elimina ordinazione
Gestione di un ristorante Esercitazione: Gestione di un ristorante elimina ordinazione SI
Gestione di un ristorante Esercitazione: Gestione di un ristorante elimina ordinazione NO
Gestione di un ristorante Esercitazione: Gestione di un ristorante void elimina(plist *l, stringa nm, stringa cm) { plist temp,temp2,temp3; temp2=*l; temp=(*l)->next; while (temp!=NULL) { if ((strcmp(temp->info.nome,nm))&&(strcmp(temp->info.cognome,cm))) { temp3=temp; temp=temp->next; temp2->next=temp; free(temp3); } else { temp2=temp2->next; if ((strcmp(*l->info.nome,nm))&&(strcmp(*l->info.cognome,cm))){ temp3=*l; *l=*l->next;
Gestione di un ristorante Esercitazione: Gestione di un ristorante Bisogna implementare i seguenti metodi: un metodo che inserisca nell’elenco una nuova ordinazione (avendo in input nome e cognome del cliente, e nome del piatto) un metodo che elimini dall’elenco le ordinazioni fatte da un cliente (dando in input nome e cognome) un metodo che calcoli il numero di ordinazioni con un certo piatto (dando in input il nome del piatto) calcoli la spesa di un cliente (in input nome e cognome)
Gestione di un ristorante Esercitazione: Gestione di un ristorante int num(plist l,stringa pt) { plist temp=l; int cont=0; while(temp!=NULL) { if (strcmp(temp->info.piatto,pt)){ cont++; temp=temp->next; } else temp=temp->next; return cont;
Gestione di un ristorante Esercitazione: Gestione di un ristorante int spesa(plist l,stringa nm,stringa cm){ plist temp=l; int cont=0; while(temp!=NULL) { if ((strcmp(temp->info.nome,nm))&&(strcmp(temp->info.cognome,cm))){ cont+=temp->info.costo; temp=temp->next; } else temp=temp->next; return cont;