Fondamenti di Informatica 1
Corso di Laurea in Ingegneria Informatica e Ingegneria Automatica
A.A. 2002/03
Esercizio d'Esame
(questo esercizio, per quanto piu' lungo di un esercizio d'esame,
richiede lo stesso tipo di preparazione)
Si vogliono gestire le code di prenotazioni presso sportelli per servizi
anagrafici. Nell'ambito di uno sportello, ad ogni prenotazione è
associato un numero d'ordine, e i numeri d'ordine devono essere associati alle
prenotazioni in modo univoco e progressivo, nell'ordine in cui vengono
effettuate. Le prenotazioni devono essere servite (estratte dalla coda) in
base al loro numero d'ordine.
Esercizio 1
Si realizzi una classe Prenotazione
, i cui oggetti mantengono le
seguenti informazioni su una prenotazione:
- il nome della persona che la ha effettuata (una stringa);
- il numero d'ordine della prenotazione (un intero).
Della classe sono d'interesse le seguenti funzionalità:
- creazione di una prenotazione, dati il nome della persona
ed il numero d'ordine;
- persona, che restituisce il nome della persona;
- numero, che restituisce il numero d'ordine;
- restituzione di una stringa che rappresenta le informazioni associate ad
una prenotazione (su un'unica linea), realizzata effettuando overriding del
metodo
toString
di Object
.
Soluzione
Esercizio 2
Si realizzi una classe Sportello
in cui ogni oggetto che è
istanza della classe mantiene l'insieme di prenotazioni effettuate presso uno
sportello.
Della classe sono d'interesse le seguenti funzionalità:
- creazione di uno sportello, in cui inizialmente la coda di prenotazioni
è vuota;
- prenota, che dato il nome di una persona,
inserisce una nuova prenotazione in coda presso lo sportello, e restituisce
il numero d'ordine associato alla prenotazione;
- estrai, che estrae dalla coda presso lo sportello la prossima prenotazione
e la restituisce; se la coda è vuota lancia una eccezione;
- rinuncia, che preso un numero d'ordine, elimina dalla coda la prenotazione
con quel numero d'ordine; se non vi è una prenotazione con quel numero
d'ordine, lancia una eccezione;
- tempoAttesa, che preso un numero d'ordine, restituisce il numero
di prenotazioni che precedono quella col numero d'ordine specificato; se non
vi è una prenotazione col numero d'ordine specificato, lancia una eccezione;
- restituzione di una stringa che rappresenta la coda di prenotazioni (con
una prenotazione per linea), realizzata effettuando overriding del metodo
toString
di Object
.
Suggerimento: realizzare la classe utilizzando un array dinamico di prenotazioni:
- Fissare inizialmente la dimensione dell'array pari ad una costante (ad esempio
10).
- Se è richiesto l'inserimento di una nuova prenotazione e l'array
è pieno, creare un nuovo array di dimensione doppia e ricopiare le
prenotazioni dall'array pieno al nuovo array, rendendo poi il nuovo array
quello associato allo sportello;
- Se dopo aver eliminato una prenotazione l'array è pieno per meno
di un terzo della sua dimensione e più della dimensione iniziale, creare
un nuovo array di metà dimensione e ricopiare le prenotazioni dall'array
semivuoto al nuovo array, rendendo poi il nuovo array quello associato allo
sportello.
Soluzione: Sportello.java e EccezioneSportello.java
Esercizio 3
Si realizzi una classe cliente di Sportello
che:
- crei uno
Sportello
inizialmente vuoto;
- legga da tastiera il nome di un file di testo (che si suppone contenga nomi
di persona, uno per riga) ed effettui per ciascuna persona nel file una prenotazione
presso lo sportello;
- chieda ripetutamente all'utente quale tra le seguenti operazioni vuole effettuare:
- estrazione della prossima prenotazione e stampa dei dati associati;
- rinuncia per una prenotazione, leggendo da tastiera il numero d'ordine;
- inserimento di una nuova prenotazione, leggendo da tastiera il nome
della persona;
- stampa del tempo d'attesa per una prenotazione, leggendo da tastiera
il numero d'ordine;
- terminazione del programma.
Al termine di ogni operazione deve essere stampato su video il contenuto della
coda di prenotazioni presso lo sportello.
Il programma deve catturare le eccezioni lanciate nella classe Sportello
stampando un opportuno messaggio, senza che il programma termini.
Si provi il programma utilizzando il seguente file di esempio: paperopoli.txt
Nota: per aprire un file da un programma lanciato da BlueJ, è
necessario specificare il nome del file completo del percorso (ad esempio
"C:\progetti-java\Sportello\paperopoli.txt"
), in quanto
BlueJ non imposta la directory corrente a quella in cui è situato
il programma.
Soluzione