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