Formula 1

Sviluppare l’applicazione che consente di gestire il punteggio piloti del campionato di F1.
Tutte le classi devono essere nel package "formula1".

R1 - Definizione Piloti

Il sistema agisce tramite la classe Campionato.
Il metodo creaPilota() che accetta come parametro il nome (Es. "Barrichello") crea un oggetto Pilota e lo registra nel campionato. La classe Pilota offre il metodo getNome() per leggere il nome.
Per ottenere l'elenco dei piloti si usa il metodo getPiloti() che restituisce una collezione di oggetti Pilota. Per ottenere uno specifico pilota si usa il metodo getPilota() che riceve come parametro il nome e restituisce l'oggetto Pilota corrispondente.

R2 - Gran Premi

I piloti gareggiano nei gran premi. Per definire un gran premio si utilizza il metodo definisciGranPremio() della classe Campionato che riceve come parametro il nome del G.P. (es. "Imola"); tale metodo restituisce un oggetto di tipo GP. La classe GP offre il metodo getNome() per ottenere il nome.
Per ottenere uno specifico G.P. è possibile utilizzare il metodod getGranPremio() delle classe Campionato che riceve il nome del G.P.

R3 - Tempi

I piloti che corrono i gran premi totalizzano dei tempi che possono essere inseriti tramite il metodo setTempo() della classe Campionato che riceve come parametri: il gran premio, il pilota, ed il tempo espresso in ore, minuti, secondi e centesimi. Questo metodo deve verficare che i minuti ed i secondi siano compresi tra 0 e 59 e che i centesimi siano compresi tra 0 e 99, altrimenti genera un'eccezione di TempoNonValido.
Questo metodo restituisce un oggetto di tipo Tempo, che ridefinisce il metodo toString() in modo che restituisca il tempo nel formato "h:m:s.c" (Es. se h=1, m=30, s=5, c=40 il metodo restituisce "1:30:5.40").
Dato un gran premio, in base ai tempi è possibile ottenere l'ordine di arrivo tramite il metodo getOrdineArrivo() che restituisce una lista di piloti ordinati in maniera crescente rispetto al tempo.

R4  - Graduatoria

Dato un gran premio deve essere possibile ottenere la posizione nell'ordine di arrivo di un pilota tramite il metodo getPosizione() che riceve come parametro il pilota in questione. Il primo pilota che compare nella lista dell'ordine di arrivo avrà posizione 1 e cosi' via.
Dato un pilota deve essere possibile sapere quali gran premi ha disputato, utilizzando il metodo getDisputati().
Dato un pilota deve essere possibile sapere quanti punti ha guadagnato seguendo la seguente regola: 10 punti per ogni primo posto, 8 per ogni secondo posto, 6 per ogni terzo, 5 per ogni quarto, 4 per ogni quinto, 3 per ogni sesto, 2 per ogni settimo, 1 per ogni ottavo. Il metodo getPunti() della classe Pilota restituisce il punteggio del pilota.
Nella classe Campionato il metodo getClassifica() restituisce la collezione dei piloti in ordine decrescente di punti.

R5  - Lettura da File

È possibile leggere le informazioni su piloti e gran premi (come ai punti 1 e 2) tramite il metodo leggiInfo() della classe Campionato, questo metodo riceve come parametro il path del file da aprire.
Le informazioni sono organizzate per righe; ogni riga può contenere informazioni relative ad un pilota o ad un gran premio.
La descrizione di un pilota inizia con la lettera "P" ed è seguita da ":" e dal nome del pilota.
La descrizione di un gran premio inizia con la lettera "G" ed è seguita da ":" e dal nome del gran premio (fino alla fine della linea).
Il nome del gran premio può includere degli spazi.