Si vuole realizzare in C++ un’applicazione per la gestione di un parcheggio multipiano.
Un Piano è caratterizzato da un numero (un intero che identifica il piano), una lista di scontrini (relativi ai
pagamenti per posteggi effettuati in quel piano) e il numero di posti disponibili il quale viene decrementato
ogni volta che una macchina occupa un posto nel piano e incrementato ogni volta che una macchina libera
un posto nel piano.
Uno Scontrino è caratterizzato da una data (un oggetto di tipo Data), un orario di arrivo (un oggetto di tipo
Orario), un orario di uscita (un oggetto di tipo Orario), e da un prezzo. Il prezzo è pari ad un’Euro per ogni
ora o frazione di ora di durata della permanenza all’interno del parcheggio.
Una Data è caratterizzata da tre interi corrispondenti a giorno, mese e anno.
Un Orario è caratterizzato da due interi, uno corrispondente all’ora ed uno ai minuti.
Si implementi una classe GestioneParcheggio per la gestione delle informazioni complessive, utilizzando le
classi Piano, Scontrino, Data, Orario riportate in allegato.
La classe GestioneParcheggio comprende un vector di piani ed implementa i seguenti metodi:
· Piano & pianoConPiuPosti() const;
Restituisce l’oggetto Piano avente più posti disponibili; se tutti i piani non hanno posti disponibili il
metodo restituisce null;
· int ingresso();
Usando il metodo precedente cerca il piano avente più posti disponibili: se lo trova ne decrementa di
uno i posti disponibili e restituisce il numero del piano. Se tutti i piani non hanno posti disponibili il
metodo restituisce -1;
· int calcolaPrezzo(const Orario & i, const Orario & u) const;
Calcola il prezzo dello scontrino secondo quanto spiegato sopra, dove l’orario di ingresso è dato da i
e quello di uscita da u, e ne restistuisce il risultato;
· void uscita(const Data & d, const Orario & i, const Orario & u, int p);
Aumenta il numero di posti disponibili nel piano p; successivamente crea un oggetto Scontrino
avente come data d, orario di ingresso i, orario di uscita u, e come prezzo quello calcolato usando il
metodo precedente; infine aggiunge l’oggetto Scontrino alla lista degli scontrini del piano p;
· Data dataConPiuScontrini() const;
Restituisce la data in cui sono stati emessi più scontrini.
Allego le classi già compilate
class Piano {
private:
int numero; // numero di piano
list<Scontrino> scontrini;
int nDisponibili; // numero di posti disponibili
public:
Piano(int n, int d) {
numero = n;
nDisponibili = d;
}
int getNumero() const {
return numero;
}
const list<Scontrino> & getScontrini() const {
return scontrini;
}
void aggiungiScontrino(const Scontrino & s) {
scontrini.push_back(s);
}
int getNDisponibili() const {
return nDisponibili;
}
void incrementaND() {
++nDisponibili;
}
void decrementaND() {
--nDisponibili;
}
};
class Orario {
private:
int ora;
int minuti;
public:
Orario(int o, int m) {
ora = o;
minuti = m;
}
int getOra() const {
return ora;
}
int getMinuti() const {
return minuti;
}
};
class Data {
public:
int giorno;
int mese;
int anno;
Data(int g = 31, int m = 12, int a = 2099) {
giorno = g;
mese = m;
anno = a;
}
};
class Scontrino {
private:
Data data;
Orario arrivo;
Orario uscita;
double prezzo;
public:
Scontrino(const Data & d, const Orario & a,
const Orario & u, double p) {
data = d;
arrivo = a;
uscita = u;
prezzo = p;
}
const Data & getData() const {
return data;
}
const Orario & getArrivo() const {
return arrivo;
}
const Orario & getUscita() const {
return uscita;
}
double getPrezzo() const {
return prezzo;
}
};
class GestioneParcheggio {
private:
vector<Piano> piani;
public:
// ... metodi da implementare
};