nikpez di nikpez
Ominide 738 punti

Scrivete un programma C++ per la gestione di un posteggio di automobili. Il posteggio può contenere fino a 350 autovetture.
Il programma sarà composto essenzialmente dalla classe Posteggio che contiene un vettore di puntatori ad oggetti di tipo Automobile e i metodi pubblici che implementano le funzioni richieste per eseguire i comandi presenti nel menù (descritto più avanti).
La classe Automobile conterrà, nella sezione privata, la descrizione di una automobile:
· Targa
· Categoria (utilitaria, berlina, station wagon,
monovolume, fuoristrada)
· Ora arrivo (ora e minuti, non fare controlli)
· Data arrivo (giorno e mese, non fare controlli)
Il programma avrà un menù con le seguenti voci:
1) Ingresso nuova automobile
2) Informazioni automobili presenti
3) Uscita automobile
4) Modifica dati automobili
5) Stampa elenco auto presenti

6) Stampa statistiche
Per l’ingresso nuova automobile saranno richiesti i dati relativi all’automobile descritti a proposito della classe
Automobile.
Le informazioni dovranno mostrare tutti i dati relativi all’automobile di cui viene indicata la targa.
In uscita automobile si dovrà calcolare il numero di minuti trascorsi dall’ingresso dell’auto nel posteggio (per semplicità si suppongono tutti i mesi di 30 giorni e si suppone di lavorare in un unico anno, es. 2008).
Modifica dati automobili permette di modificare uno qualsiasi dei dati introdotti durante l’inserimento dell’automobile.
Stampa elenco auto presenti consente di stampare, in forma tabellare l’elenco delle auto nel seguente formato:
N. Targa Categoria Ora arrivo Data arrivo
---- ---------- ---------- ---------- -----------
1) AB123XY W 08:35 19/05
2) AE456CF B 16:24 20/05
... .... ..... ...... ......
224) BH987YT U 20:58 19/05
Le statistiche saranno relative alla percentuale di automobili appartenenti alle varie categorie e al tempo medio
di permanenza delle auto presenti nel posteggio.
Istanzia l’oggetto Posteggio nel main e gestisci il menù (e tutto l’input) dal main stesso; da qui chiamerai poi i
diversi metodi di Posteggio.
La registrazione dell’ingresso di una nuova automobile consiste nella sua allocazione in memoria e nel
posizionamento del suo indirizzo nel vettore (allocazione statica) di automobili:
Automobile *pAutomobile[MAX_AUTO];
Il vettore pAutomobile conterrà inizialmente MAX_AUTO=350 puntatori nulli; per memorizzare una nuova auto si cercherà la prima posizione libera (in cui cioè si trova un puntatore nullo); in questo modo per eliminare una automobile basterà deallocarla ed annullare l’elemento del vettore corrispondente che verrà così automaticamente riutilizzato all’ingresso di una nuova automobile.
Note:
· I nomi delle costanti, variabili (oggetti), tipi (classi) e sottopgm (metodi) devono essere significativi
· Indentare con cura e inserire commenti sintetici e significativi
class Automobile{
friend ostream& operator<<(ostream& out, const Automobile &a);
public:
Automobile(const string & tg, char cat, int oraArr, int minArr, int giornoArr, int meseArr);
~Automobile();
int getOra() const;
int getMinuto() const;
int getGiorno() const;
int getMese() const;
char getCategoria() const;
string getTarga() const;
int minutiPosteggio(int giorno, int mese, int ora, int minuto) const;
void setDataOra(int oraArr,int minArr, int giornoArr, int meseArr);
void setTarga(const string &tg);
void setCategoria( char c);
private:
string targa;
char categoria;
int ora;
int min;
int giorno;
int mese;
};
class Posteggio{
public:
Posteggio();
~Posteggio();
bool nuovaAutomobile();
bool informazioniAutomobile(const string &targa) const;
bool uscitaAutomobile(const string &targa);
bool modificaAutomobile(const string &targa);
void stampaElenco() const;
void stampaStatistiche() const;
private: enum { MAX_AUTO = 5 };
Automobile *pAuto[MAX_AUTO];
int count; //conta le auto presenti nel parcheggio
int trovaAutomobile(const string &targa) const;
};
void stampaMenu()
{
cout << "==========================" << endl;
cout << "1) Nuova automobile " << endl;
cout << "2) Informazioni automobili" << endl;
cout << "3) Uscita automobile " << endl;
cout << "4) Modifica automobile " << endl;
cout << "5) Stampa elenco " << endl;
cout << "6) Stampa statistiche " << endl;
cout << "7) Esci " << endl;
cout << "> ";
}

Registrati via email