Concetti Chiave
- Il programma gestisce un posteggio per un massimo di 350 automobili, utilizzando una classe Posteggio con un vettore di puntatori a oggetti di tipo Automobile.
- La classe Automobile memorizza informazioni essenziali come targa, categoria, ora di arrivo e data di arrivo, senza effettuare controlli sui dati.
- Il menù del programma consente operazioni come l'ingresso di nuove auto, la visualizzazione delle informazioni, l'uscita delle auto e la modifica dei dati.
- Le statistiche forniscono informazioni sulla percentuale di automobili per categoria e sul tempo medio di permanenza nel posteggio.
- Il programma gestisce l'allocazione e deallocazione della memoria per le automobili, assicurando un utilizzo efficiente dello spazio nel vettore.
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
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
cout
cout
cout
cout
cout
cout
cout
cout ";
}