// Persona.h
#ifndef PERSONA_H
#define PERSONA_H
#ifndef LISTC_H
#include "listc.h"
#endif
#ifndef MENU_H
#include "menu.h"
#endif

class Persona : public list {
protected:
  char *nome;                                   // Comune sia a indirizzo che a Telefono
  int nstrlen (const char *s);                  // Calcola lunghezza dei soli stampabili
  virtual void stampa () = 0;                   // Stampa Indirizzo o Telefono
public:
  Persona (Persona **l, char *n);               // Aggiunge alla lista di Persone
  ~Persona ();
  void cerca (char *n);                         // Cerca in base al nome
  static void nstrcpy (char *d, const char *s); // Copia solo gli stampabili
};

class Indirizzo : public Persona {
  char *indirizzo;
  int cap;
  char *citta;
protected:
  virtual void stampa ();
public:
  Indirizzo (Persona **l, char *n, char *ind, int c, char *cit);
  ~Indirizzo ();
};

class Telefono : public Persona {
  char *numTel;
protected:
  virtual void stampa ();
public:
  Telefono (Persona **l, char *n, char *nt);
  ~Telefono ();
};

/* Menu' Definiti solo il costruttore ed 'action' */
class MenuCerca : public menu {
protected:
  virtual void action (void *par);
public:
  MenuCerca (menu **base,char *n) : menu (base,n) {};
};

class MenuIndirizzo : public menu {
protected:
  virtual void action (void *par);
public:
  MenuIndirizzo (menu **base,char *n) : menu (base,n) {};
};

class MenuTelefono : public menu {
protected:
  virtual void action (void *par);
public:
  MenuTelefono (menu **base,char *n) : menu (base,n) {};
};

#endif