Free University of Bolzano/Bozen
Faculty of Computer Science - Bachelor in Applied Computer Science
Introduction to Programming - A.A. 2005/2006
Esercitazione 11
Array dinamici
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 11A
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 11B
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 11C
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\lab-11\paperopoli.txt
), in quanto
BlueJ non imposta la directory corrente a quella in cui è situato
il programma.
Soluzione