Concetti Chiave
- Il programma gestisce un posteggio con un massimo di 350 automobili utilizzando una classe Posteggio che contiene un array di puntatori ad oggetti Automobile.
- La classe Automobile include dettagli privati come targa, categoria, ora e data di arrivo, senza controlli di validità.
- Il menù del programma offre diverse funzionalità: ingresso di nuove automobili, visualizzazione e modifica di informazioni, uscita e calcolo del tempo di permanenza, e statistiche delle auto.
- L'ingresso di una nuova automobile avviene allocando dinamicamente l'oggetto e inserendo il suo puntatore nel primo slot libero dell'array, mentre l'uscita comporta la deallocazione e il reset del puntatore.
- Statistiche includono la percentuale di automobili per categoria e il tempo medio di permanenza, mentre l'elenco delle auto presenti viene stampato in formato tabellare.
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 ";
}
Domande da interrogazione
- Qual è la struttura principale del programma per la gestione di un posteggio di automobili?
- Quali informazioni sono contenute nella classe Automobile?
- Come viene gestito l'ingresso di una nuova automobile nel posteggio?
- Quali funzionalità offre il menù del programma?
- Come vengono calcolate le statistiche nel programma?
Il programma è composto principalmente dalla classe Posteggio, che contiene un vettore di puntatori ad oggetti di tipo Automobile, e dai metodi pubblici per eseguire le funzioni richieste dal menù.
La classe Automobile contiene la targa, la categoria (utilitaria, berlina, station wagon, monovolume, fuoristrada), l'ora e la data di arrivo.
L'ingresso di una nuova automobile comporta l'allocazione in memoria dell'oggetto Automobile e il posizionamento del suo indirizzo nel vettore di automobili, cercando la prima posizione libera.
Il menù offre le seguenti funzionalità: ingresso nuova automobile, informazioni automobili presenti, uscita automobile, modifica dati automobili, stampa elenco auto presenti, e stampa statistiche.
Le statistiche includono la percentuale di automobili appartenenti alle varie categorie e il tempo medio di permanenza delle auto nel posteggio.