//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 ();
}