Create in BlueJ un nuovo progetto: parking
.
Utilizzando la classe Ticket
progettate la classe ParkingControl
utilizzata per la
gestione di un parcheggio che deve interagire con i sistemi di emissione e lettura
dei tagliandi di sosta e di gettoniera (di cui dovete solo ipotizzare il comportamento
e non avete l'obbligo di progettare) per realizzare i
seguenti compiti:
Il criterio con cui viene autorizzata l'uscita prevede che il momento del pagamento debba precedere di non più di 10 minuti l'effettiva uscita dal parcheggio.
La classe conterrà almeno i seguenti campi:
private int places
: il numero di posti disponibili;private ArrayList<Ticket> tickets;
: la lista dei biglietti attivi, ovvero relativi
a macchine parcheggiate;private long lastTicket
: il progressivo dell'ultimo biglietto emesso.I metodi da progettare per la classe sono almeno i seguenti:
public ParkingControl(int)
: costruttore della classe
che si occupa di inizializzare lo stato dell'oggetto, il parametro individua
il numero di posti disponibili;public long addCar()
: invocato dalla macchina emettitrice quando
un'auto entra nel parcheggio, se il valore di ritorno è positivo è il numero di serie del ticket emesso da registrare sulla banda magnetica
e indica che c'è posto nel parcheggio, se il valore è 0 indica che non c'è posto nel parcheggio;public boolean exit(long, Date)
: dà l'autorizzazione al sollevamento
della sbarra quando il lettore all'uscita del parcheggio legge il biglietto con
il numero di serie e il tempo di ingresso passati come parametri, devono essere eseguiti i controlli
per verificare che il pagamento sia stato effettuato nei 10 minuti precedenti
e che il tempo di ingresso sia coincidente (con una tolleranza di 2 minuti) con quello
registrato nel sistema;public int getPrice(long)
: invocato dalla gettoniera per ottenere
il costo della sosta sulla base del numero di serie del biglietto, il parcheggio costa 1 euro all'ora dalle 8 del mattino alle 13,
50 centesimi all'ora dalle 13 alle 17 e 1 euro all'ora dalle 17 alle 20, dalle 20
alle 8 il parcheggio è chiuso;public void payment(long)
: invocato dalla gettoniera per comunicare
l'avvenuto pagamento della sosta del biglietto con il numero di serie indicato;public int howMany()
: restituisce il numero di macchine presenti
nel parcheggio;public int averageRevenue()
: restituisce l'importo, in centesimi di euro,
medio giornaliero incassato nell'ultimo mese;public int[] averageOccupancy()
: restituisce l'occupazione media del parcheggio
arrotondata all'intero più vicino del giorno precedente, per ogni ora del giorno; in altre parole il
primo elemento dell'array indicherà il numero medio di macchine presenti dalle 8 alle 9 e così via
sino all'ultima ora dalle 19 alle 20; il calcolo della media è inteso come numero di minuti
totale diviso 60.L'utilizzo dei metodi indicati come Deprecated
della classe
Date
, per semplicità di implementazione non solo è ammesso
ma consigliato!
Dovete consegnare solo la classe ParkingControl
.
Commentate in maniera esauriente sia la classe che ogni suo metodo utilizzando le convenzioni JavaDoc, avendo cura di indicare nel campo autore (Author) il vostro nome e cognome.
Quando avete terminato andate qui.