Gestione di un banco di magliette
Gestione di un banco di magliette Vogliamo gestire un banco di magliette: queste sono caratterizzate da un codice (alfanumerico di max 20 caratteri), colore, marca, taglia e prezzo; possono esserci copie per ogni singolo modello di maglietta, organizzate in un archivio, costituito da record di due campi (il codice della maglia e il numero di copie disponibili). Codice n°copie Adc 2 Ght 3 …
Gestione di un banco di magliette Vogliamo implementare: tipi per rappresentare una lista di magliette; metodo che verifica se c’è una copia disponibile per una data maglietta (codice in input) metodo per la vendita di una maglia: bisogna decrementare nell’archivio il numero di copie relativo al codice della maglietta venduta. Se il numero di copie corrispondente è 0 la maglia non può essere venduta. Il metodo restituirà un booleano (true se la maglia è stata venduta, false altrimenti); metodo per inserire una nuova maglia in una lista di magliette (anche nuovo record nell’archivio con n° copie settato a 1); metodo per modificare il prezzo di una maglietta nella lista (in input codice e prezzo); metodo per stampare i codici delle maglie esaurite (n° di copie pari a zero).
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef char stringa[20]; typedef struct { stringa codice; stringa colore; stringa marca; stringa taglia; int prezzo; } maglia; typedef struct elem{ maglia info; struct elem* next; } elist; typedef elist* plist; typedef struct { stringa cd; int n; } copia; typedef struct elem2{ copia info; struct elem2* next; } elist2; typedef elist2* plist2;
void insertcopia(plist2* A, copia c) { plist2 temp = (plist2)malloc(sizeof(elist2)); strcpy((temp->info).cd,c.cd); (temp->info).n = c.n; temp->next=*A; *A = temp; } void creamaglie(plist2* A){ copia c1 = {"abc",0}; insertcopia(A,c1); copia c2 = {"acd",1}; insertcopia(A,c2); copia c3 = {"afc",2}; insertcopia(A,c3);
Gestione di un banco di magliette disponibilità Codice n°copie Adc 2 Ght 3 Abc 1 Ghg 0 …
Gestione di un banco di magliette disponibilità ... scorriamo l’archivio
Gestione di un banco di magliette disponibilità Codice n°copie Adc 2 Ght 3 Abc 0 Ghg 0 … Codice n°copie Adc 2 Ght 3 Abc 1 Ghg 0 …
Gestione di un banco di magliette disponibilità Codice n°copie Adc 2 Ght 3 Abc 1 Ghg 0 … nessuna disponibilità
int disponibile(stringa cod, plist2 A) { while (A != NULL) if (!strcmp((A->info).cd,cod)) if (A->info.n > 0) return 1; else return 0; else A = A->next; return 0; }
int vendita(stringa cod, plist2 A) { while (A != NULL) if (!strcmp((A->info).cd,cod)) if (A->info.n > 0){ (A->info.n)--; return 1; } else return 0; else A = A->next; return 0;
plist insertmaglia(plist l, maglia m, plist2* A) { copia c; plist temp = (plist)malloc(sizeof(elist)); strcpy(temp->info.codice,m.codice); strcpy(temp->info.colore,m.colore); strcpy(temp->info.marca,m.marca); strcpy(temp->info.taglia,m.taglia); temp->info.prezzo=m.prezzo; temp->next=l; strcpy(c.cd,m.codice); c.n=1; insertcopia(A,c); return temp; }
void modifica(plist l, stringa cod, int pr) { plist temp=l; int test=0; while ((!test)&&(temp!=NULL)) { if (!strcmp(temp->info.codice,cod)) { test=1; temp->info.prezzo=pr; } else temp=temp->next;
void stampa(plist2 A) { while (A != NULL){ if (A->info.n == 0) printf("%s\n",A->info.cd); A = A->next; }