Il progetto consiste nella realizzazione di una piccola applicazione in Java per
gestire i servizi di un'agenzia di viaggi.
La modellazione è necessariamente molto schematica, con varie semplificazioni,
alcune poco realistiche.
Per progetti individuali, l'agenzia fornisce un servizio di prenotazioni di
pacchetti vacanze di durata esclusivamente settimanale.
Le settimane dell'anno sono numerate a partire da 1, e la settimana 1 è
la prima settimana intera (da lunedì a domenica) dell'anno.
Per gruppi di due o tre studenti, l'agenzia fornisce sia il servizio di
prenotazioni per pacchetti vacanze che quello di acquisto di biglietti aerei.
Si deve costruire e gestire (per uso interno) un archivio che contiene i dati (nome del villaggio, indirizzo, ecc.) dei pacchetti vacanze, i dati dei clienti, ed i dati delle prenotazioni (numero della settimana, cognome, villaggio, ecc.). All'inizio di ogni sessione, l'archivio è costruito leggendo i dati da file. Alla fine (o prima della chiusura) della sessione, le informazioni sulle prenotazioni dei pacchetti vacanze (ed eventuali modifiche dei dati) devono essere memorizzate per uso nella sessione successiva. L'applicazione deve accettare un qualsiasi percorso (pathname) per il file dei dati e le modifiche devono essere riportate nello stesso file, riscrivendolo.
La parte del file che contiene le informazioni relative ai pacchetti
ha il seguente formato. Le informazioni relative a ciascun pacchetto
sono precedute dalla stringa "PACCHETTO"
. Le prime 4 linee relative
a ciascun pacchetto hanno il seguente formato:
PACCHETTO La stringa "PACCHETTO" A Nome del villaggio vacanze (una stringa) (per esempio, ClubMed1) I Indirizzo (una stringa) (per esempio, Lampedusa) N1;N2;...;Nk Recapiti telefonici (almeno uno)e poi due linee per ogni settimana. La prima linea ha il seguente formato:
NSett;NSD;PSD;NSU;PSU;Seqdove
NSett Numero della settimana (un intero tra 1 e 52) NSD Numero stanze doppie disponibili per la settimana (un intero ≥ 0) PSD Prezzo stanza doppia (un intero ≥ 0) NSU Numero suite multi-stanze disponibili per la settimana (un intero ≥ 0) PSU Prezzo suite multi-stanze (un intero ≥ 0) Seq Corsi offerti: una sequenza, eventualmente vuota, con i seguenti caratteri: 'V' vela, 'E' equitazione, 'T' tennis, 'S' surf, 'B' immersione con bomboleLa seconda linea è una sequenza di stringhe, separate da
';'
,
rappresentanti l'elenco dei potenziali clienti in lista d'attesa per una
stanza doppia, ad esempio:
Rossi;De Luca;Verdi
La stringa "PACCHETTO"
separa le informazioni relative ai pacchetti
dei diversi villaggi.
Deve essere possibile aggiornare le disponibilità di un pacchetto (aggiunta di un villaggio vacanze appena acquistato, per esempio, o non più disponibile per disastro naturale) o delle settimane (nuove stanze appena ristrutturate o aggiunta di corsi offerti) per ciascun villaggio.
Ad ogni settimana è associato un insieme di clienti con il tipo di stanza ed i corsi selezionati.
Ogni cliente è rappresentato da un oggetto della classe appropriata ed è caratterizzato da (almeno) cognome, nome, telefono, numero di carta di credito.
La parte del file che contiene le informazioni relative ai clienti ha il seguente
formato. La prima linea contiene la stringa "CLIENTI"
. Poi una linea
per ogni cliente con il seguente formato:
C;N;T;Rdove
C Cognome N Nome T Telefono R Tipo e numero di carta di creditoSi assume, per semplicità, che il cognome sia sufficiente ad identificare univocamente un cliente. Esempio:
CLIENTI Rossi;Mario;06987675;VISA4986754435540032 De Luca;Lucia;078956454;MASTERCARD4999954435540777 Verdi;Gian Carlo;3456435466;VISA49999544355499988
Il contenuto della parte clienti del file può essere modificato solo tramite una prenotazione accettata o l'inserimento in una lista d'attesa. Deve essere possibile cancellare una prenotazione fatta o cambiarne le caratteristiche (suite invece che stanza doppia, aggiunta/rimozione di un corso, ecc.) se la permanenza non è iniziata. Si deve poter fare una prenotazione, previa verifica da parte del sistema della disponibilità da parte del villaggio vacanze. Se non c'è disponibilità di stanze doppie, viene proposto al potenziale cliente di aggiungere il cognome ad una lista d'attesa. Le liste d'attesa sono di lunghezza arbitraria. Le informazioni sui clienti non sono mai cancellate.
La parte del file relativa alle prenotazioni ha il seguente formato. La prima linea
contiene la stringa "PRENOTAZIONI"
poi le prenotazioni sono suddivise
in blocchi, ogni blocco è la lista delle prenotazioni relative ad un villaggio
vacanze. Ogni blocco è preceduto da due linee con il seguente formato:
PRENOTAZIONI La stringa "PRENOTAZIONI" A Nome del villaggio vacanzePoi, una linea per ogni prenotazione con il seguente formato:
N;C;M;I;seqdove
N Numero della settimana (un intero tra 1 e 52) C Cognome del cliente (stringa) M Nome del cliente (stringa) I Tipo di stanza (carattere 'D' per doppia o 'S' per suite) seq Corsi richiesti: una sequenza, eventualmente vuota, con i caratteri 'V', 'E', 'T', 'S', 'B'.I caratteri della sequenza
seq
devono essere presenti anche
nella sequenza del pacchetto corrispondente.
Quando una prenotazione è passata, cioè la settimana è antecedente la data odierna, deve essere cancellata dall'archivio.
All'inizio dell'accesso al sistema, si chiede il pathname del file dal quale prelevare i dati. Poi il sistema presenta la scelta tra l'accesso alle Gestione Prenotazione o Richiesta Prenotazione da parte del cliente e l'accesso alla Gestione Offerta dei pacchetti in una zona riservata ai gestori.
Con la scelta Gestione Offerta, si deve optare per la modifica
dell'archivio pacchetti o per esportare/salvare su file testo le prenotazioni
di tutti i villaggi. Se la richiesta è di modifica di un pacchetto,
il sistema presenta l'elenco dei pacchetti da cui il gestore può selezionarne
uno. La modifica di un pacchetto può riguardare una delle componenti
NSD
, PSD
, NSU
,
PSU
, Seq
. Se la rimozione di una
stanza è possibile (almeno una è ancora disponibile nel periodo
selezionato) viene mostrato un messaggio di conferma; altrimenti si presenta il messaggio
appropriato (eventualmente, per progetti più ambiziosi, proponendo un trasferimento
della prenotazione ad altro villaggio). L'aggiunta di una stanza automaticamente
la rende disponibile alle prenotazioni, se la lista d'attesa è vuota.
L'Esportazione crea un file testo cui possiamo assegnare un nome tramite una finestra di dialogo, con i due bottoni OK e Annulla. Il risultato ottenuto premendo il bottone OK è un file di testo con le prenotazioni separate per villaggi e, per ogni villaggio, in ordine (crescente) di numero di settimana.
Alla Richiesta Prenotazione, il sistema mostra l'elenco dei pacchetti da cui il cliente può selezionarne uno, e chiedere la disponibilità per una specifica settimana; a questo punto viene data l'opzione di mostrare i Dettagli del villaggio vacanze con l'eventuale stanza disponibile, e quella per Prenotare la stanza. Con Dettagli, sono evidenziate le caratteristiche del villaggio in formato testo. Con Prenotare, si richiedono i dati del cliente e si mostra un messaggio di conferma della prenotazione; altrimenti si presenta il messaggio d'errore appropriato (carta di credito non valida, stessa settimana già prenotata dallo stesso cliente in altro villaggio, ecc.).
Con la scelta Gestione Prenotazione, si richiedono le informazioni del cliente e la richiesta (se cancellazione o modifica di caratteristiche). Se la rimozione è di una prenotazione esistente per il cliente stesso, viene mostrato un messaggio di conferma, altrimenti si presenta il messaggio d'errore appropriato (un cliente può cancellare solo le proprie prenotazioni esistenti).
Per questa applicazione, si ignorano aspetti di autenticazione dell'utente. Per la verifica della carta di credito, si crea una classe con un solo metodo che restituisce true/false in maniera casuale (preferibilmente true almeno 4 volte su 5).
L'applicazione va sviluppata sia con interfaccia testuale, permettendo che tutti i dati/comandi dall'esterno siano ricevuti da tastiera e/o file (ad esempio, tramite opportuni menu testuali) sia in versione interattiva con un sistema di finestre (come oggetti di classi GestoreFrame, ClienteFrame, ecc.) in cui compaiono le varie alternative visualizzate con pulsanti da "premere" (Aggiungi, Esporta, Dettagli, Prenota, Cancella) e campi dove "selezionare" (per esempio il nome del villaggio) o "inserire" (data, cognome, no. carta di credito, ecc.) le informazioni ricevute dall'esterno. Ovviamente, le due versioni (con l'interfaccia testuale e con l'interfaccia grafica) devono avere in comune tutto ciò che è indipendente dall'interfaccia.
I progetti sviluppati da gruppi di due o tre studenti devono fornire anche il secondo servizio di prenotazione di voli aerei giornalieri, limitati al giorno dopo. In questo caso:
La parte del file con le informazioni relative ai voli è preceduta dalla
stringa "VOLI"
con il seguente formato:
VOLI La stringa "VOLI"Poi una linea per ogni volo con il seguente formato:
Sigla;ORI;DEST;PART;ARR;rimastidove
Sigla stringa composta da due lettere maiuscole e due cifre (per esempio AZ34) ORI stringa (luogo di partenza) DEST stringa (luogo di arrivo) PART orario di partenza ARR orario di arrivo rimasti posti ancora disponibili (intero &ge 0)
La parte del file relativa alle prenotazioni voli inizia con una prima linea che
contiene la stringa "PREN VOLI"
poi le prenotazioni dei voli sono
suddivise in linee con il seguente formato:
C;M;Sigla;ORI;DESTdove
C Cognome del cliente (stringa) M Nome del cliente (stringa) Sigla come nella parte VOLI ORI stringa (luogo di partenza) DEST stringa (luogo di arrivo)
Anche per il servizio voli aerei deve essere sviluppata sia l'interfaccia testuale che quella a finestre.
main()
il
quale legge un carattere dalla linea di comando e a seconda che
sia 't'
o 'g'
l'applicazione
userà l'interfaccia testuale o l'interfaccia grafica, rispettivamente.