Paola Magillo, Univestita' di Genova, Corso di Programmazione II per SMID, a.a. 2008-2009.

Laboratorio 08:

ESERCIZI SUL CASO DI STUDIO DATA BASE TURISTICO - PARTE II

In questi esercizi vediamo le rimanenti classi che fanno parte dell'applicazione Java usata poi per l'esame (vedere lezione 12 e lezione 13).

1) Scaricare il materiale

Prendere le classi (per la gestione del data base):

Mettere tutti questi file in una directory.

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.

2) Generare la documentazione

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).

3) Esercizi facili per iniziare

(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!

Esercizio A

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").

Esercizio B

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).

4) Esercizi difficili

(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!

Esercizio A

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.

Le modifiche interessano:

Esercizio B

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).

5) Provate a fare questi esercizi da soli

Esercizio A

Colorare di verde il bottone Prenota se la gita non e' prenotata e colorarlo di rosso se e' prenotata.

Esercizio B

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.