In questi esercizi vediamo le rimanenti classi che fanno parte dell'applicazione Java usata poi per l'esame (vedere lezione 12 e lezione 13).
Prendere le classi (per la gestione del data base):
Prendere inoltre le classi (per l'interfaccia grafica):
Metterli nella stessa directory.Prendere anche il data base di esempio, directory LeMieGite, che viene qui fornito in formato .zip:
E decomprimerlo mettendo il file risultante nella stessa directory.Generare con javadoc la documentazione di tutte queste classi. Basta metterle tutte nella directory corrente e poi lanciare javadoc *.java.
Visualizzare la documentazione. Basta cliccare per aprirlo sul file principale di quelli generati da javadoc, che si chiama index.html (si trova nella directory corrente).
(Questi esercizi sono decisamente piu' brevi e facili di quelli che saranno proposti all'esame).
I due esercizi sono indipendenti e per ognuno dovete ripartire dal file originale scaricato!
Nella finestra "visualizza gite" invece dei due bottoni Indietro e Avanti mettere uno slider (classe JSlider).
Suggerimento: il file da modificare e' Cliente.java, i due bottoni sono dichiarati come attributi (di nomi "butIndietro" e "butAvanti", e la finestra in questione viene creata dal metodo "creaFinestraGite").
Nella finestra "visualizza gite" disabilitare il bottone Indietro quando siamo sulla prima gita e disabilitare il bottone Avanti quando siamo sul'ultima gita.
Suggerimento: anche qui il file da modificare e' Cliente.java, il modo piu' semplice e' aggiungere questa parte nella funzione ausiliaria "aggiornaFinestraGite" (cosi' come e' gia' presente qui la parte che cambia l'etichetta del bottone Prenota secondo lo stato di prenotazione della gita corrente).
(Questi esercizi sono anche leggermente piu' lunghi e difficili di quelli che saranno proposti all'esame).
Tutti gli esercizi sono indipendenti e per ognuno dovete ripartire dal file originale scaricato!
Aggiungere nella classe
ParteComuneGitaRicerca il campo booleano ammessiCani
che memorizza se nella gita e' permesso portare cani.
Di conseguenza modificare tutta la gestione del data base e la sua
interfaccia grafica.
Nella versione corrente la parola chiave (usata per cercare nel titolo e
nella descrizione della gita) e' di fatto una frase,
che puo' essere costituita
da piu' parole: queste parole devono essere tutte presenti
(consecutive e in quell'esatto ordine).
Modificare il programma per ottenere che debba essere presente almeno una
della parole della frase.
Aiuti e suggerimenti:
1) Aggiungere nella classe UtilitaStringhe la funzione fornita di seguito:
public static String[] dividiStringa(String s) { String[] res; s = normalizza(s); // conta spazi bianchi nella stringa normalizzata int k = 0; int i; for (i=0; i<s.length(); i++) { if (s.charAt(i)==' ') k++; } // la stringa e' divisa in k+1 pezzi dai k spazi presenti res = new String[k+1]; // ora ciclo per prelevare i pezzi k = 0; i = s.indexOf(' '); // posizione del primo spazio while (i!=-1) { res[k] = s.substring(0,i).trim(); // da inizio a spazio s = s.substring(i).trim(); // da spazio in poi k++; i = s.indexOf(' '); // posizione del prossimo spazio } res[k] = s; // l'ultimo pezzo, da ultimo spazio in poi if (k!=(res.length-1)) { System.out.println("non dovrebbe succedere"); } // risultato return res; }
2) Usare questa funzione per definire, sempre nella classe UtilitaStringhe, una nuova funzione
public static int contaStringaInStringa(String cosa, String dove)che conta quante delle stringhe (parole) in cui si divide la stringa (frase) "cosa" sono presenti nella stringa "dove".
In pratica bisogna:
- tramite dividiStringa dividere "cosa" in un array di parole
- per ogni parola chiamare stringaInStringa
- contare quante volte ha dato esito vero
3) Nella funzione soddisfaCriterio di DataBase, invece di chiamare stringaInStringa, chiamare questa nuova funzione e controllare che il risultato sia almeno pari a 1.
Variante:
aggiungere nella classe DataBase una costante
intera TOLLERANZA (impostata a un numero positivo a piacere).
La ricerca accettera' solo quelle gite per le quali il risultato
di contaStringheInStringa e' maggiore o uguale al minimo fra TOLLERANZA
e il numero di stringhe che costituiscono la frase chiave
(praticamente vogliamo che una gita contenga almeno un tot delle parole
chiave fornite).
Colorare di verde il bottone Prenota se la gita non e' prenotata e colorarlo di rosso se e' prenotata.
Quando l'utente preme il bottone Esci sulla finestra principale, far
apparire una finestra di dialogo che chieda conferma.
Suggerimento: usare i metodi della classe JOptionPane, ved.
lezione 9.