//Magazzino: magaz.cpp #include <iostream.h> // #include <stdio.h> #include "magaz.h" /******************************************************/ /* Classe Magazzino */ /******************************************************/ /* Metodo che aggiunge una lista di capi al magazzino */ void Magazzino::Add (Capo *add) { if (add) // Se passo una lista di capi (controllo su parametri) { *add += cont; // Mette il contenuto attuale in coda a quello che aggiungo cont = add; // E mette la nuova lista come magazzino nuovo } // In questo modo, se il magazzion e' vuoto' va lo stesso } /* Data una lista di criteri, confronta * ogni capo con la lista data. * Se corrisponde, guarda se ne ha gia' * 'scelto' uno uguale. * Se non c'e' gia', lo estrae dalla lista * del magazzino e la appende alla lista dei * capi scelti. * Per finire, restituisce la lista dei capi scelti */ Capo *Magazzino::Select (AttrList *criteri) { Capo *scelti = 0; // Inizialmente nessuno scelto Capo *curr = cont; // elemento corrente = primo del magazzino while (curr) // Finche' ci sono elementi { if (*curr == criteri && // Se corrisponde ai criteri *curr != scelti) // e non e' gia' stato scelto { Capo *sel = curr; // Puntatore temporaneo all'elemento da spostare curr = curr -> Next (); // Posiziona il 'corente' sul prossimo capo sel -> remove (cont); // Elimina il capo scelto dal magazzino *sel += scelti; // Gli somma i capi gia' scelti scelti = sel; // E quindi ricostruisce la lista dei capi scelti } else curr = (Capo *) curr -> Next (); // Se non lo ha scelto, va qui' al prossimo } return scelti; // Ritorna la lista dei capi scelti } /* Stampa tutti gli elementi nella lista del magazzino */ void Magazzino::Inventario () { if (cont) // Se la lista non e' vuota cont -> show (1); // Richiama il metodo 'show' di Capo (ricorsivo), a partire da 1 } /******************************************************/ /* Classe Attributo */ /******************************************************/ void MenuInventario::action (void *par) { if (par) // Se viene richiamata correttamente ((Magazzino *) par) -> Inventario (); // Richiama la 'stampa inventario' del magazzino cout << "Premi A-Capo per continuare"; // Poi stampa un 'prompt' cin.ignore (10,'\n'); // Ed attende un segno da parte dell'utente }