//Corriere: corriere.cpp #include <stdio.h> #include <stdlib.h> #include "corriere.h" /* I metodi seguenti sono tutti concettualmente uguali: * - Richiedono gli attributi per un particolare capo di * vestiario. * - Chiedono il numero di capi da inserire * - Creano tanti capi con gli attributi indicati, quanti * ne sono richiesti, aggiungendoli alla lista del corriere */ void Corriere::AddCravatta () { char Modello [30]; char num [10]; int i,n; printf ("Aggiungo Cravatta\nModello :"); fgets (Modello,29,stdin); Modello [30] = 0; printf ("Quantita' :"); fgets (num,9,stdin); i = strtol (num,0,0L); for (n = 0; n < i; n ++) new Capo (&cons,"Cravatta",Modello); } void Corriere::AddCintura () { char Modello [30]; char Taglia [10]; char num [10]; int i,n; printf ("Aggiungo Cintura\nModello :"); fgets (Modello,29,stdin); Modello [30] = 0; printf ("Taglia :"); fgets (Taglia,9,stdin); printf ("Quantita' :"); fgets (num,9,stdin); i = strtol (num,0,0L); for (n = 0; n < i; n ++) new Cintura (&cons,"Cintura",Modello,strtol (Taglia,0,0L)); } void Corriere::AddVestiario (char *capo) { char Modello [30]; char Taglia [10]; char Colore [20]; char num [10]; int i,n; printf ("Aggiungo %s\nModello :",capo); fgets (Modello,29,stdin); Modello [29] = 0; printf ("Taglia :"); fgets (Taglia,9,stdin); printf ("Colore :"); fgets (Colore,19,stdin); Colore [19] = 0; printf ("Quantita' :"); fgets (num,9,stdin); i = strtol (num,0,0L); for (n = 0; n < i; n ++) new Vestiario (&cons,capo,Modello,strtol (Taglia,0,0L),Colore); } /* Finalmente, completata la lista del corriere, * aggiunge i capi 'arrivati' a quelli presenti in magazzino */ void Corriere::Inserisci () { mag -> Add (cons); } /* Adesso ci sono tutte le 'action' delle varie voci del menu */ /* Menu' principale del corriere. */ void MenuCorriere::action (void *par) { Corriere c ((Magazzino *)par); menu *mc = 0; int i; /* Crea le voci del menu' */ new MenuMaglione (&mc,"Maglione"); new MenuCamicia (&mc,"Camicia"); new MenuPantaloni (&mc,"Pantaloni"); new MenuCintura (&mc,"Cintura"); new MenuCravatta (&mc,"Cravatta"); new MenuInserisci (&mc,"Carica in magazzino"); /* Esegue il menu' finche' non viene scelto 'Carica in Magazzino' */ do { i = mc->print (1); mc->doaction (i,&c); } while (i != 1); delete mc; // Elimina il menu } /* Le seguenti 'action' non fanno altro che invocare i metodi del corriere */ void MenuMaglione::action (void *par) { ((Corriere *)par) -> AddVestiario ("Maglione"); } void MenuCamicia::action (void *par) { ((Corriere *)par) -> AddVestiario ("Camicia"); } void MenuPantaloni::action (void *par) { ((Corriere *)par) -> AddVestiario ("Pantaloni"); } void MenuCintura::action (void *par) { ((Corriere *)par) -> AddCintura (); } void MenuCravatta::action (void *par) { ((Corriere *)par) -> AddCravatta (); } void MenuInserisci::action (void *par) { ((Corriere *)par) -> Inserisci (); }