PRIMO PROGETTO DI INTERFACCE - A.A. 2001-2002
PRIMO PROGETTO DI RECUPERO
CORSO DI INTERFACCE - A.A. 2001-2002
OBIETTIVO
Realizzare un'interfaccia per una applicazione che consente
di effettuare ricerche in una base di dati di opere d'arte.
La base di dati consiste in un acollezione di elementi strutturati
come terne (autore, titolo, descrizione) ciascuna corrispondente ad
un'opera d'arte.
La ricerca e' effettuata immettendo una parola (singola!) da cercare e
specificando su quale o quali campi campo va cercata (almeno uno fra
autore, titolo e descrizione).
Si sceglie inoltre un livello di precisione della ricerca, rappresentato da
un numero intero non negativo:
-
livello = 0 significa ricerca esatta:
ritrova solo le stringhe uguali
-
livello = K > 0 significa che sono tollerate
fino a K differenze: ritrova le stringhe che
presentano al piu' K lettere diverse, lettere mancanti o
lettere aggiunte rispetto alla stringa fornita dall'utente.
La ricerca ritorna tutte le terne che hanno nel campo o nei
campi specificati almeno una parola che, al livello di precisione
specificato, corrisponde a quella cercata.
FUNZIONALITA' DELL'INTERFACCIA
L'interfaccia deve consentire le seguenti operazioni applicative:
-
1) Caricamento del contenuto della base di dati da file.
-
2) Specifica dei parametri di ricerca : il campo o i campi
su cui effettuare la ricerca, la parola da cercare, il
livello di precisione.
-
3) Visualizzazione del risultato della ricerca mostrando all'utente
i tre campi (autore, titolo, descrizione) di ogni terna risultante
con indicazione della parola su cui e' stato effettuato il ritrovamento.
-
4) Svuotamento della base di dati.
oltre ovviamente alle funzioni standard (uscita ecc.), e a tutte
quelle che ritenete opportune.
In ogni momento deve essere possibile svuotare la base di dati
e caricare un nuovo contenuto da un altro file.
In ogni momento in cui la base di dati non e' vuota deve essere possibile
effettuare una ricerca.
L'utente puo' decidere di guardare solo alcune delle terne risultanti
dalla ricerca, non deve essere obbligato a vederle tutte
prima di effettuare una nuova ricerca.
Per tutto il resto e' lasciata piena liberta' di scelta, purche'
l'interfaccia risultante si comporti in modo ragionevole e
prevedibile.
MATERIALE FORNITO
(1) Classi da usare
Sono fornite le classi
- DBManager che gestisce la base di dati
- DBSearchResult che implementa una terna risultante dalla ricerca
Sono contenutte nel file DBManager.java.
Queste classi costituiscono l'applicazione, VANNO USATE
COME SONO e NON devono essere modificate!
La classe DBManager fornisce i seguenti metodi pubblici:
-
DBManager()
Crea una base di dati vuota.
-
int loadDB(String file)
Carica il contenuto della base di dati dal file indicato.
Ritorna il numero di terne caricate.
-
int approxSearch(int campo, String pattern,
int approx, LinkedList res)
Cerca tutte le terne il cui campo campo contiene la stringa pattern
con un livello di precisione nella ricerca pari ad approx
(tollera al piu' approx lettere diverse, aggiunte o tolte).
Il campo e' una fra le tre costanti DBManager.AUTHOR, DBManager.TITLE,
DBManager.DESCR.
Le terne trovate vengono concatenate alla lista linkata res.
Ciascun elemento di questa lista linkata e' un oggetto di classe
DBSearchResult.
Ritorna il numero di terne trovate ovvero concatenate alla lista.
La classe DBSearchResult fornisce i seguenti metodi pubblici:
-
String getAuthor()
Restituisce l'autore della terna.
-
String getTitle()
Restituisce il titolo della terna.
-
String getDescr()
Restituisce la descrizione della terna.
-
String getMatchingWord()
Restituisce la parola che e' stata trovata dall'algoritmo di
ricerca come corrispondente a quella cercata.
Per effettuare una ricerca si procede cosi':
- creare una LinkedList l vuota
- chiamare approxSearch con i parametri opportuni passando la lista l
- il numero di terne ritrovate si legge con l.getSize()
- la terna i-esima ritrovata si ottiene con (DBSearchResult)l.get(i),
cioe' convertendo ad oggetto di classe DBSearchResult l'oggetto
(di classe ignota) che occupa l'i-esimo posto in l.
- su questa terna si chiamano poi i metodi di DBSearchResult per
leggerne autore, titolo, descrizione e parola trovata
(2) File di input
Il contenuto della base di dati e' specificato in un file di
estensione ".db" con il seguente formato:
- N
- [autore1]
- [titolo1]
- [descrizione1]
- [autore2]
- [titolo2]
- [descrizione2]
- ...
dove N e' il numero di terne.
Notare che le tre frasi (autore, titolo, descrizione) che definiscono
ciascuna terna sono delimitate da parentesi quadre.
Ne e' dato uno di esempio: prova.db
(ricavato dalla documentazione presente sul sito degli
Uffizi di Firenze).
Altri potete scriverli voi stessi.
RACCOMANDAZIONI
Questo e' un progetto di interfacce grafiche. Pertanto, sara' tenuto conto
non solo del fatto che tutte le funzioni richieste siano presenti
nell'interfaccia sviluppata, ma anche e di quanto facile e gradevole risulta
l'uso dell'interfaccia stessa per l'utente.
MATERIALE DA CONSEGNARE
- Le sorgenti java, su dischetto o per email.
- Solo se lo si ritiene necessario, brevissime istruzioni per l'uso
dell'interfaccia, in testo ascii o html, su dischetto o per email.
L'indirizzo di posta elettronica a cui spedire e'
magillo@disi.unige.it.
Indicare chiaramente nel messaggio il nome dei componenti del gruppo e
l'elenco dei file inviati.
NON reinviare i tre file dei filtri che fanno parte del materiale
fornito.