//Capo: capo.cpp // Definisce: Capo, Cintura, Vestiario #include <stdio.h> #include "capo.h" /******************************************************/ /* Classe Capo */ /******************************************************/ /* Confronta questo con un altro */ int Capo::compare (Vestiario *c) { if (Genere.compare (c -> Genere)) // Se non sono dello stesso genere return -1; // Ritorna 'no' return Modello.compare (c -> Modello); // Altrimenti confronta anche il modello } int Capo::compare (Capo* l) { while (l) { if (compare ((Vestiario*) l) && Next ()) l = (Capo*) l -> Next (); else return 0; } return -1; } int Capo::compare (AttrList *l) { if (l->compare (Genere)) // Confronta il modello con la lista return -1; // Se il modello non corrisponde, ritorna 'no' return l->compare (Modello); // Altrimenti confronta anche il modello } void Capo::Pausa (int num) { if ((num%24) == 0) // Se il numero corrente (la riga) e' divisibile per 24 { printf ("Premi A-Capo per continuare"); // Stampa un prompt getchar (); // Ed attende un carattere } } void Capo::show (int num) { Pausa (num); // controlla se fermarsi printf ("%2d |%-30s|%-30s|%3s|\n",num,Genere.val (), // stampa la linea Modello.val (),""); if (Next ()) // se c'e' un nuovo capo ((Capo*)Next ()) -> show (num + 1); // continua la stampa } /******************************************************/ /* Classe Cintura */ /******************************************************/ int Cintura::compare (Vestiario *c) { if (Capo::compare (c)) // richiede il confronto alla superclasse return -1; // se non corrisponde, ritorna 'no' return Taglia.compare (c -> Taglia); // altrimenti confronta anche la taglia } int Cintura::compare (AttrList *l) { if (Capo::compare (l)) // richiede il confronto alla superclasse return -1; // se non corrisponde, ritorna 'no' return l->compare (Taglia); // altrimenti confronta anche la taglia } void Cintura::show (int num) // identica a quella della superclasse, ma stampa tutti gli attributi { Pausa (num); printf ("%2d |%-30s|%-30s|%3s|\n",num,Genere.val (), Modello.val (),Taglia.val ()); if (Next ()) ((Capo*)Next ()) -> show (num + 1); } /******************************************************/ /* Classe Vestiario */ /******************************************************/ int Vestiario::compare (Vestiario *c) { if (Cintura::compare (c)) // richiede il confronto alla superclasse return -1; // se non corrisponde, ritorna 'no' return Colore.compare (c -> Colore); // altrimenti confronta anche la taglia } int Vestiario::compare (AttrList *l) { if (Cintura::compare (l)) // richiede il confronto alla superclasse return -1; // se non corrisponde, ritorna 'no' return l->compare (Colore); // altrimenti confronta anche il colore } void Vestiario::show (int num) // identica a quella della superclasse, ma stampa tutti gli attributi { Pausa (num); printf ("%2d |%-30s|%-30s|%3s|%s\n",num,Genere.val (), Modello.val (),Taglia.val (), Colore.val ()); if (Next ()) ((Capo*)Next ()) -> show (num + 1); }