CompitoB
Transcript
CompitoB
Prova d’Esame 07.04.2006 — Compito B DOMANDA 1 (6 punti) Si analizzi il codice seguente e si scriva l’output prodotto dai metodi main public class General { public static String s1 = "ciao"; protected int n; public General() { n = 3; } public General(int startVal) { n = startVal; } public String getSaluto() { return s1; } public int incValue() { return n++; } } public class Special extends General { private int v; public Special() { if (n != 0) v = n; else v = 0; } public int getValue() { return v + s1.length(); } public void raiseValue() { v = v + n; } public String personal(String name) { if (name != null) return s1 + " " + name; return s1 + " no name"; }} public class CustomException extends Exception { public CustomException(String arg0) { super(arg0); } public String getMessage(String note) { return getMessage() + note; } } --------------------------------------------------------------------import java.io.IOException; public class Job { public static Eprom source = null; private int cv; public Job(int initialPower) { cv = initialPower; } public void doJob() throws CustomException,IOException { if (source == null) throw new IOException(); try { if (!source.readData(cv)) throw new CustomException("No Power"); } catch (IOException e) { source.start(); throw new CustomException ("Eprom Started"); } } public void addPower(int delta) { cv = cv + delta; } } public class Main { public static void main(String[] args) { String s1 = new String("Ciao"); Special xS = new Special(); General xG = new General(); if (s1 == General.s1) General.s1 = "Hello"; while (xS.getValue() < 14) { System.out.println(xG.getSaluto() + "-" + xS.incValue()); xS.raiseValue(); } System.out.println(xS.personal("")); s1 = "cheers"; if (s1 != General.s1) System.out.println(xS.personal("62")); else System.out.println(xS.personal("64")); }} public class Eprom { private boolean setup = true; String model; public Eprom(String m) { model = m; } public void start() throws CustomException { if (setup) throw new CustomException("(Eprom running)"); setup = true; } public boolean readData(int v) throws java.io.IOException { if (!setup) throw new java.io.IOException("setup required: "+model); if (v < 208) return false; else return true; }} -------------------------------------------------------------------------public class Main { public static void main(String[] args) { Job action = new Job(200); boolean again = true; while (again) { try { action.doJob(); again = false; } catch (CustomException e) { System.out.println(e.getMessage()); action.addPower(5); } catch (java.io.IOException e) { Job.source = new Eprom("X25"); System.out.println("Eprom X25 Ready"); } } }} Prova d’Esame 07.04.2006 — Compito B Si realizzi un sistema software per la gestione di un’officina per veicoli. Esistono due tipi di veicoli, le auto e le moto, ognuno dei quali è caratterizzato dal nome del modello. Più nel dettaglio, ogni auto è caratterizzata dal tipo di alimentazione (benzina, diesel, gpl, metano), dal numero di chilometri percorsi e dal numero di tagliandi eseguiti sull’auto stessa. Sono previsti inoltre due casi particolari di auto: le auto sportive, che possono essere alimentate solo a benzina e per le quali è specificata la cilindrata del motore (un intero positivo che indica i centimetri cubi), e i suv (sport utility vehicle), ai quali è invece associato il tipo di trazione (integrale, trazione anteriore, trazione posteriore). Ogni moto, invece, ha come caratteristiche il peso (un intero positivo che indica il numero di kg), la cilindrata del motore (un intero positivo che indica i centimetri cubi) ed una serie di regolazioni, ciascuna delle quali è rappresentata da un campo che può assumere un valore numerico intero compreso tra un valore minimo (considerato pari a 5) ed un valore massimo (considerato pari a 9). Una moto può essere o un motard o una moto stradale. Nel primo caso (motard), la moto ha 5 regolazioni ed un campo che specifica la marca delle gomme; nel secondo (moto stradale), c’è un campo che specifica se la moto ha in dotazione i ricambi per la pista (il kit racing) o meno e sono previste 9 regolazioni. L’officina è costituita da un meccanico per le auto ed uno per le moto e gestisce una lista di veicoli in attesa di essere riparati. Tale coda può contenere al massimo 18 unità. Le riparazioni che l’officina deve essere in grado di fare sono il tagliando per suv e auto sportive e l’impostazione delle regolazioni per i motard. Ogni meccanico che lavora nell’officina è caratterizzato dal nome. In particolare, il meccanico delle auto deve essere in grado di eseguire il tagliando ad un’auto specificata, mentre il meccanico delle moto deve poter impostare una serie di regolazioni alla moto specificata. DOMANDA 2 (2 punti) Il candidato modelli il sistema software specificato nel seguito individuando i diversi componenti che lo costituiscono e le relazioni fra di essi (ereditarietà/uso). Prova d’Esame 07.04.2006 — Compito B DOMANDA 3 (3 punti) Con riferimento al sistema descritto nella domanda 2, si implementino la seguente classe ed i metodi specificati, definendo se necessario il costruttore opportuno. Si verifichi poi il corretto funzionamento dell’applicazione eseguendo il main implementato nella classe TestOfficina. Classe Officina: modella l’officina 9 public void tagliandiAutoSportive() fa eseguire al meccanico auto dell’officina il tagliando alle sole auto sportive presenti nella coda dei veicoli associata all’officina. Ogni auto sportiva che, dopo la verifica e l’eventuale fase di esecuzione del tagliando, non necessita di ulteriori tagliandi, va rimossa dalla coda. 9 public void tagliandiSuv() Analogo al metodo precedente ma per i Suv. 9 public void regolazioneMotard(String modello, String regolazioni) throws VehicleException cerca il modello specificato come parametro di ingresso tra i veicoli in lista e, in caso sia presente, fa eseguire al meccanico delle moto la regolazione della moto. A regolazione ultimata, il motard va rimosso dalla coda dei veicoli. Se la moto non viene trovata, il metodo stampa un messaggio costituito dal nome della moto cercata seguito dalla stringa “: non trovato”. 9 public void inserisci(Veicolo v) aggiunge un veicolo alla lista dei veicoli in attesa di riparazione. Il numero massimo di veicoli che possono essere presenti in coda è di 18 unità. Se si cerca di inserire un veicolo quando la coda è piena, deve essere stampato il messaggio “Coda Piena”. NOTA: non si definisca alcun package! Prova d’Esame 07.04.2006 — Compito B DOMANDA 4 (10 punti) Si realizzi un’interfaccia grafica per la gestione dell’analisi delle rilevazioni cronometriche di una gara di SuperBike contenute nel file di testo di nome dataB.txt. Tale file è organizzato per righe secondo la seguente struttura: − una linea formata dalla stringa “pilota:” seguita dal nome del pilota; − 21 linee relative a 21 giri della gara (dal secondo al ventiduesimo), ognuna delle quali è così strutturata: lapNum <b> vel <b> s1 <b> s2 <b> s3 <b> s4 <b> tot dove lapNum è il numero del giro; vel è la massima velocità raggiunta nel giro; s1, s2, s3, s4 sono le rilevazioni cronometriche (in secondi) sui vari settori che compongono il giro (sommando tali tempi si ottiene il tempo totale); tot è il tempo totale di percorrenza del giro e <b> è un carattere di spazio; − una linea vuota. Tale struttura si ripete per i diversi piloti. L’interfaccia deve comprendere una finestra di nome Filtro ed un pannello, costituito da due etichette (di nome “Pilota” e “Miglior Giro”), tre campi di testo (di cui uno, editabile, inizializzato con la stringa “inserire nome”, e gli altri due non editabili) e tre bottoni (di nome “Cerca”, “Salva” e “Clear”) come mostrato in figura 1. Figura 1 Come indicato in figura 1, la prima casella di testo deve permettere all’utente di inserire il nome del pilota. La ricerca è avviata premendo il bottone “Cerca” e produce (vedi figura 2): 9 nella casella di testo non editabile sotto l’etichetta “Miglior Tempo”: il miglior tempo sul giro (in minuti e secondi) e il numero del giro in cui è stato ottenuto, oppure la stringa “NOT FOUND” se il pilota non è tra quelli presenti nel file dataB.txt 9 nella casella di testo non editabile sotto il bottone “Cerca”: il valore della velocità massime raggiunta nel miglior giro; oppure la stringa “NOT FOUND” se il nome del pilota non è nel file data.txt Figura 2 Prova d’Esame 07.04.2006 — Compito B Ogni pressione del bottone “Clear” riporta l’interfaccia alla visualizzazione iniziale (figura 1). Ogni pressione del bottone “Salva” deve aggiungere ad un file (di nome results.txt) le informazioni riassuntive sul pilota visualizzato dall’interfaccia al momento della pressione del tasto. In particolare, i dati nel file results.txt sono strutturati secondo il formato seguente: <nome del pilota> Miglior giro: <miglior tempo sul giro e relativo numero del giro> Massima velocità sul giro: <velocità massima raggiunta nel miglior giro> …………………………. Ad esempio, se le informazioni visualizzate sono quelle in figura 2, nel file verranno aggiunte le seguenti: corser troy Miglior giro: 1'33.165 (2) Massima velocità sul giro: 306,3 …………………………. Nel caso le caselle di testo contengano la stringa “NOT FOUND” oppure sia stato premuto il tasto “Clear” e quindi non è visualizzato niente, non deve essere aggiunto alcunché al file. Suggerimento per l’interfaccia grafica: per favorire la disposizione dei componenti nel pannello, è possibile specificare la seguente linea di codice prima di procedere con l’aggiunta di etichette di testo e bottoni setLayout(new GridLayout(2, 4, 5, 5)); che imposta per il pannello una griglia di 2 righe e 4 colonne. L’inserimento dei componenti parte dalla casella in alto a sinistra della griglia e procede per righe. Prova d’Esame 07.04.2006 — Compito B DOMANDA 5 (punti 7) Si implementi una struttura ad albero che rappresenta un albero genealogico. L’albero contiene il nome di ciascuno dei membri della genealogia. Ogni elemento dell’albero può avere al massimo 3 discendenti. Deve essere possibile: − inserire il discendente di un avo, con le opportune verifiche sull’esistenza dell’avo e sulla possibilità effettiva di aggiungervi un discendente − cercare un elemento e stampare il nome del padre. Si realizzi poi una classe che, sfruttando le funzionalità implementate, costruisce l’albero in figura 3 e stampa il nome del genitore di X2 P Q T R U V S W Z X X1 Y X2 X3 Figura 3 Nota: non è consentito l’uso delle classi del Java Collection Framework o di classi del JDK contenenti implementazioni di strutture ad albero. L’implementazione dell’albero è parte integrante dell’esercizio