PROGETTO

Metodologie di Programmazione a.a. 2009-2010

Il progetto consiste nella realizzazione di una piccola applicazione in Java per gestire un Sistema di Prenotazione di stanze in una catena di alberghi.

   Si devono costruire e gestire (per uso interno) almeno due archivi, uno che contiene i dati dei clienti (cognome, nome, ecc.), ed uno con i dati (numero, piano, albergo, ecc.) delle stanze. All'inizio di ogni sessione, gli archivi sono costruiti leggendo i dati da file esterni. Alla fine (o prima della chiusura) della sessione, le informazioni sulle prenotazioni (ed eventuali modifiche alla lista di clienti o degli alberghi) devono essere memorizzate per uso nella sessione successiva.

  Il file che contiene le informazioni relative agli alberghi, ai clienti e alle prenotazioni ha il seguente formato. Le informazioni relative a ciascun albergo sono precedute dalla stringa "ALBERGO", quelle relative ai clienti dalla stringa "CLIENTI" e infine quelle relative alle prenotazioni sono precedute dalla stringa "PRENOTAZIONI". Le prime 5 linee relative a ciascun albergo hanno il seguente formato:
ALBERGO          La stringa "ALBERGO"
A                Nome dell'albergo (una stringa)
I                Indirizzo (una stringa)
N1;N2;...;Nk     Recapiti telefonici (almeno uno),
S                Servizi: una sequenza, eventualmente vuota, con i seguenti caratteri: 
                          'R' ristorante, 'L' lavanderia, 'P' parcheggio,
                          'F' fotocopiatrice, 'S' servizio di segreteria, 'I'  Internet
e poi una linea per ogni stanza con il seguente formato:
N;P;D;L;C;Q;T
dove
N    Numero stanza (un intero >= 1)
P    Piano (un intero >= 0)
D    Disponibilità (un carattere: 'D' disponibile, 'N' non disponibile)
L    Letti (1,2,3,.. oppure "M" per matrimoniale o "M+1" o "M+2", ecc.
            per matrimoniale più un letto, due letti, ecc.)
C    Caratteristiche (una sequenza, eventualmente vuota, dei seguenti caratteri: 
             'A' aria condizionata, 'T' televisore,  'B' mini-bar, 
             'I' connessione Internet)
Q    Qualità (un carattere 'M' media qualità, 'L' lusso, 'U' superiore, 'S' suite)
T    Tariffa (un numero intero)
La stringa "ALBERGO" separa le informazioni relative ai diversi alberghi. Esempio:
ALBERGO
Hotel Piazza di Spagna
via Mario de Fiori, 61 - Roma
06876744;068876565
RPI
11;1;D;1;ATB;M;80
12;1;D;2;ATB;M;90
15;1;N;1;BI;L;100
23;2;D;M;ATBI;U;120
24;2;D;M+1;AI;M;100
35;3;D;M+3;ATBI;S;200
ALBERGO
Hotel Fiume
...
...
Deve essere possibile aggiornare la disponibilità di un albergo (appena acquistato, per esempio, o appena riservato in blocco per un convegno) o delle stanze di un albergo (appena ristrutturate o che necessitano di nuovi mobili).

  Ad ogni stanza è associato un insieme di clienti con le date di prenotazione, in aggiunta ad informazioni come numero, piano, albergo, tariffe, caratteristiche, disponibilità, ecc.

  Ogni cliente è rappresentato da un oggetto della classe appropriata ed è caratterizzato da (almeno) cognome, nome, telefono, numero di carta di credito, ed eventuale numero di "cliente affezionato".

  La parte di 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;R;A
dove
C      Cognome
N      Nome
T      Telefono
R      Tipo e numero di carta di credito
A      Numero "cliente affezionato" (numero che identifica il cliente, o stringa vuota)
Si assume, per semplicità, che il cognome e il nome identifichino univocamente un cliente. Esempio:
CLIENTI
Rossi;Mario;06987675;VISA4986754435540032;4567
De Luca;Lucia;;MASTERCARD4999954435540777;
Verdi;Gian Carlo;3456435466;VISA49999544355499988;3452
Il contenuto della parte CLIENTI del file può essere modificato solo tramite una prenotazione accettata. Deve essere possibile cancellare una prenotazione fatta o cambiarne le caratteristiche (stanza con 2 letti invece che matrimoniale, ecc.) se la permanenza non è iniziata. Si deve poter effettuare una prenotazione, previa verifica da parte del sistema della disponibilità da parte della catena.

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 albergo. Ogni blocco è preceduto da due linee con il seguente formato:
PRENOTAZIONI_ALBERGO    La stringa "PRENOTAZIONI_ALBERGO"
A                       Nome dell'albergo
Poi, una linea per ogni prenotazione con il seguente formato:
N;C;M;I;O
dove
N     Numero della stanza
C     Cognome del cliente
M     Nome del cliente
I     Data inizio (check-in) nel formato gg/mm/aaaa
O     Data fine (check-out) nel formato gg/mm/aaaa
Quando una prenotazione è passata, cioè la data di check-out è antecedente la data odierna, deve essere cancellata dall'archivio.

  All'inizio dell'accesso al sistema, si chiede il nome 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 Risorse degli alberghi in una zona riservata ai gestori.

  Con la scelta Gestione Risorse, si deve optare per la modifica dell'archivio di stanze e/o alberghi o per esportare/salvare su file testo tutte le prenotazioni di un particolare albergo con le date specifiche. Se la rimozione di una stanza è possibile (non risulta prenotata 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 altra stanza equivalente). L'aggiunta di una stanza automaticamente la rende disponibile alle prenotazioni.

  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 in ordine (crescente) di numero di stanza. Le prime due linee hanno il seguente formato:
PRENOTAZIONI
A
dove PRENOTAZIONI è la stringa "PRENOTAZIONI" ed A è il nome dell'albergo. Poi una linea per ogni prenotazione, con il seguente formato:
N;C;I;O
dove
N     Numero della stanza
C     Cognome e Nome del cliente (stringa spazio stringa)
I     Data inizio (check-in) nel formato gg/mm/aaaa
O     Data fine (check-out) nel formato gg/mm/aaaa
Esempio:
PRENOTAZIONI
Hotel Piazza di Spagna
11;De Luca;12/4/2010;14/4/2010
24;Verdi;4/10/2010;8/10/2010
Con la scelta Richiesta Prenotazione, è possibile inserire albergo e date di check-in/check-out, e chiedere la disponibilità; a questo punto viene data l'opzione di mostrare i Dettagli dell'eventuale stanza disponibile, e quella per Prenotare la stanza. Con Dettagli, vengono evidenziate le caratteristiche della stanza in formato testo. Con Prenotare, si richiedono i dati del cliente e viene mostrato un messaggio di conferma della prenotazione; altrimenti si presenta il messaggio d'errore appropriato (carta di credito non valida, stanza della stessa catena già prenotata nello stesso giorno, 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 lo stesso cliente, viene mostrato un messaggio di conferma, altrimenti si presenta il messaggio d'errore appropriato.

  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 permettendo che tutti i dati/comandi dall'esterno siano ricevuti da tastiera e/o file (ad esempio, tramite opportuni menu testuali). I gruppi con almeno due studenti oltre a realizzare l'interfaccia testuale devono anche realizzare una versione interattiva con un sistema di finestre (come oggetti di classi GestoreFrame, ClienteFrame, ecc.) in cui compaiono alternative visualizzate con pulsanti da "premere" (Aggiungi, Esporta, Dettagli, Prenota, Cancella) e campi dove "selezionare" (per esempio il nome dell'albergo) o "inserire" (data, cognome, no. carta di credito, ecc.) le informazioni ricevute dall'esterno. Ovviamente, le due versioni (con interfaccia testuale e con interfaccia grafica) possono avere classi in comuni. Anzi, devono avere in comune tutto ciò che è indipendente dall'interfaccia.

Valutazione

Il progetto sarà valutato relativamente ai seguenti aspetti (in ordine di importanza):
  1. Correttezza e rispetto delle specifiche
  2. Qualità della progettazione
  3. Chiarezza e completezza della documentazione
  4. Efficienza

Consegna

  1. Diagramma delle (sole) classi in UML
  2. Documentazione utilizzando Javadoc
  3. Codice completo e funzionante