Fondamenti di Informatica 1 - gr. 89 - a.a. 2005 - 2006 Prova di Programmazione - 18.07.2006 TOUR OPERATOR ============= L'ADT dizionario e' definito dalla seguente interfaccia: public interface Dictionary extends Container { void insert(Comparable key, Object attribute); Object find(Comparable key); Object remove(Comparable key); } I metodi dell'interfaccia Dictionary eseguono le seguenti funzioni: - insert(...) inserisce la coppia (key, attribute) nel dizionario. Se la chiave e' gia' presente, sovrascrive la coppia. - find(...) restituisce l'attributo associato alla chiave key nel dizionario. Se la chiave non e' presente, genera l'eccezione java.util.NoSuchElementException. - remove(...) elimina la coppia (key, attribute) dal dizionario e restituisce l'attributo associato alla chiave se questa e' presente. Se la chiave non e' presente, genera l'eccezione java.util.NoSuchElementException. L'interfaccia Container e' cosi' definita: public interface Container { boolean isEmpty(); void makeEmpty(); int size(); } I metodi dell'interfaccia Container eseguono le seguenti funzioni: - isEmpty() ritorna true se il contenitore e' vuoto, false altrimenti - makeEmpty() rende vuoto il contenitore - size() restituisce il numero di elementi inseriti nel contenitore Un'agenzia di viaggi commissiona un dizionario che contenga le seguenti informazioni relative ai propri clienti: - codice identificativo del cliente (chiave) - nome cliente (attributo) - destinazione del viaggio (attributo) Il codice identificativo del cliente sia composto da quattro caratteri alfanumerici con il seguente formato Lnnn, dove L e' un carattere alfabetico compreso nell'intervallo [A, Z], mentre n e' un carattere numerico compreso nell'intervallo [0, 9]. Es: A199 e' un codice cliente valido. Il candidato completi la parte privata e scriva la parte pubblica della seguente classe eseguibile: public class TourOperator implements Dictionary // classe Tour Operator { // variabili private private String nextClientCode; ... // metodi pubblici public TourOperator(String initialClientCode) {...} public void add(String nome, String dest) {...} public String toString() {...}; public static void main(String[] args) {...} // classi interne private class Client { String name; // nome del cliente String dest; // destinazione del viaggio Client(String aName, String aDest) { name = aName; dest = aDest; } } private class Coppia implements Comparable { String code; Client client; Coppia (String aCode, Client aClient) { code = aCode; client = aClient; } public int compareTo(Object obj) { Coppia tmpC = (Coppia) obj; return code.compareTo(tmpC.code); } } } Il costruttore public TourOperator(String initialClientCode) inizializza la struttura dati e imposta la variabile di esemplare String nextClientCode col valore passato nel parametro String initialClientCode. Il metodo void add(String nome, String dest) inserisce i dati: (codice, nome, destinazione) nel dizionario. Si usi come codice cliente il valore corrente della variabile nextClientCode. Si incrementi successivamente il codice cliente. L'incremento del codice cliente si effettua come segue: - se il numero nnn rappresentato dai caratteri numerici e' inferiore a 999 si incrementa semplicemente il numero - altrimenti si impostano i caratteri numerici alla stringa "000" e si incrementa il carattere alfabetico L al successivo nell'ordine lessicografico. Esempio: se il codice cliente vale C998, il codice successivo vale C999 (998 diventa 999, mentre C resta immutato); se il codice cliente vale C999 il codice successivo vale D000 (999 diventa 000, mentre C diventa D). Il metodo String toString() restituisce il contenuto del dizionario, un cliente per riga, con il seguente formato: codice cliente : nome : destinazione. Il metodo void main() esegue le seguenti operazioni: - istanzia un oggetto di classe TourOperator, passando come parametro al costruttore una stringa acquisita da riga di comando - legge da standard input i dati di un insieme di clienti espressi nel seguente formato: nome : destinazione, un cliente per riga - inserisce i clienti nel dizionario usando il metodo add(...) - stampa a standard output il contenuto del dizionario. All'atto della correzione il codice verra' provato nel seguente modo: $java TourOperator A998 < viaggi.txt dove A998 e' la stringa da riga di comando e il file viaggi.txt e' allegato. Di norma sono valutati insufficienti i compiti che presentano errori di compilazione. Nell'esecuzione della prova si possono usare solo le classi dei pacchetti java.lang e le classi Scanner e NoSuchElementException del pacchetto java.util. Non e' lecito aggiungere metodi pubblici alla classe TourOperator. Alla fine della prova il candidato lascera' nella directory di lavoro il file TourOperator.java che dovra' contenere in testa un commento con nome e cognome del candidato, matricola, data, numero della postazione. FONDAMENTI DI INFORMATICA I (gruppo 8-9) a.a. 2005 - 2006 Cognome e Nome ______________________________ Matricola ____________________ Corso di Laurea ______________________________ Postazione ____________________ Consegno l'elaborato. Firma _______________________________ Mi ritiro dall'esame. Firma _______________________________