FONDAMENTI DI INFORMATICA T-2 Lab 10



Documenti analoghi
ESAME DI FONDAMENTI DI INFORMATICA T-2 del 12/01/2016 Proff. E. Denti G. Zannoni Tempo a disposizione: 4 ore MAX

ESAME DI FONDAMENTI DI INFORMATICA T-2 del 16/06/2015 Proff. Enrico Denti Gabriele Zannoni Tempo a disposizione: 4 ore MAX

Traccia di soluzione dell esercizio del 25/1/2005

Esercizio data base "Biblioteca"

ISTRUZIONI SULLE OPERAZIONI DI CAMBIO ANNO CONTABILE 2005/2006 LIQUIDAZIONE IVA - STAMPA REGISTRI - CHIUSURA/APERTURA CONTI

MANUALE PARCELLA FACILE PLUS INDICE

Istruzioni per l installazione del software per gli esami ICoNExam (Aggiornate al 15/01/2014)

Esercitazioni di Progettazione del Software. Esercitazione (Prova al calcolatore del 17 settembre 2010)

FPf per Windows 3.1. Guida all uso

Guida alla gestione delle domande di Dote Scuola per l A.S Scuole Paritarie

GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL

(Esercizi Tratti da Temi d esame degli ordinamenti precedenti)

Registratori di Cassa

La Stampa Unione. Individuare la lista indirizzi per la Stampa Unione

Excel. A cura di Luigi Labonia. luigi.lab@libero.it

SOMMARIO... 3 INTRODUZIONE...

Standard Nazionale di Comunicazione Mercato Gas

Database 1 biblioteca universitaria. Testo del quesito

ESAME DI FONDAMENTI DI INFORMATICA T-2 del 15/01/2013 Proff. E. Denti G. Zannoni Tempo a disposizione: 4 ore MAX

LA GESTIONE DELLE VISITE CLIENTI VIA WEB

5.2 UTILIZZO DELL APPLICAZIONE

Manuale Amministratore Legalmail Enterprise. Manuale ad uso degli Amministratori del Servizio Legalmail Enterprise

DATA BASE ON LINE (BANCA DATI MODULI SPERIMENTALI)

OSSIF WEB. Manuale query builder

UTILIZZO DEL MODULO DATA ENTRY PER L IMPORTAZIONE DEI DOCUMENTI (CICLO PASSIVO)

Il sistema di Kuoni Italia per prenotare On Line il Tuo Viaggio.

NAVIGAORA HOTSPOT. Manuale utente per la configurazione

Esercizio sui data base "Gestione conti correnti"

Banca dati Professioniste in rete per le P.A. Guida all uso per le Professioniste

Si aprirà una schermata dove verranno proposte le gare assegnate

Manuale d'uso. Manuale d'uso Primo utilizzo Generale Gestione conti Indici di fatturazione Aliquote...

Il menu File contiene tutti i comandi relativi alle seguenti operazioni:

Nell esempio verrà mostrato come creare un semplice documento in Excel per calcolare in modo automatico la rata di un mutuo a tasso fisso conoscendo

PROGRAMMA GESTIONE TURNI MANUALE UTENTE. Programma Gestione Turni Manuale Utente versione 1.1

Gestione Risorse Umane Web

Pagina 3 di 5. Il bollettino potrà essere stampato su carta semplice, formato A4.

Standard Nazionale di Comunicazione Mercato Gas

Portale tirocini. Manuale utente Per la gestione del Progetto Formativo

Manuale Utente Albo Pretorio GA

SW Legge 28/98 Sommario

Hub-PA Versione Manuale utente

PROGETTO PER LA TRASMISSIONE DOCUMENTI RELATIVI ALL APPROVAZIONE DELLE MANIFESTAZIONI IN FORMA DIGITALE

Manuale per i Fornitori

Realizzare la planimetria dell ufficio con Visio 2003

Tutorial Servizi SUAP ON LINE PROFESSIONI TURISTICHE

CREAZIONE DI UN DATABASE E DI TABELLE IN ACCESS

CHIUSURE di MAGAZZINO di FINE ANNO

Soluzione dell esercizio del 2 Febbraio 2004

Istituto Centrale per il Catalogo Unico delle Biblioteche Italiane. e per le Informazioni bibliografiche. Manuali utente per SBN WEB. Versione 1.

Gestione delle informazioni necessarie all attività di validazione degli studi di settore. Trasmissione degli esempi da valutare.

Standard Nazionale di Comunicazione Mercato Gas

Manuale Operativo Beneficiario Sfinge2020

Database. Si ringrazia Marco Bertini per le slides

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

Uso di base delle funzioni in Microsoft Excel

Gestione Rapporti (Calcolo Aree)

LE CARATTERISTICHE DEI PRODOTTI MULTIVARIANTE

I casi d uso corrispondono ai compiti che l attore (che può essere una persona fisica e non) può svolgere.

ING SW. Progetto di Ingegneria del Software. e-travel. Requisiti Utente. Specifiche Funzionali del Sistema

Ministero dello Sviluppo Economico

Che differenza c è tra una richiesta XML ed una domanda XML? (pag. 4)

11/02/2015 MANUALE DI INSTALLAZIONE DELL APPLICAZIONE DESKTOP TELEMATICO VERSIONE 1.0

PROCEDURA N. 1 Registrazione di un nuovo utente

INSERIMENTO DATI BASILARI

FotoAeree. La Sardegna vista dall alto MANUALE PER L USO DELL APPLICAZIONE

TFR On Line PREMESSA

EXCEL PER WINDOWS95. sfruttare le potenzialità di calcolo dei personal computer. Essi si basano su un area di lavoro, detta foglio di lavoro,

Capitolo 3 Guida operativa del programma TQ Sistema

7.4 Estrazione di materiale dal web

Scheda operativa Versione rif c00. Libro Inventari

Manuale di Aggiornamento BOLLETTINO. Rel H2. DATALOG Soluzioni Integrate a 32 Bit

Amministrazione Trasparente

Procedure per il prestito intrateneo tra le strutture del Sistema bibliotecario d Ateneo

Cosa è un foglio elettronico

Database 3 affitto veicoli. Testo del quesito

GENERAZIONE RAPPORTO XML

Il software ideale per la gestione delle prenotazioni GUIDA UTENTE

Manuale Gestore. STWS Web Energy Control - Servizio di telelettura sul WEB

Piattaforma software mfp

Sistema Banca dati e Repertorio dei dispositivi medici Notifiche multiple di DM simili

Regione Toscana. ARPA Fonte Dati. Manuale Amministratore. L. Folchi (TAI) Redatto da

Scuola Digitale. Manuale utente. Copyright 2014, Axios Italia

Manuale di Aggiornamento BOLLETTINO. Rel H4. DATALOG Soluzioni Integrate a 32 Bit

8.9 CREARE UNA TABELLA PIVOT

OSSERVATORIO REGIONALE CONTRATTI PUBBLICI DI LAVORI, SERVIZI E FORNITURE

Archivio CD. Fondamenti di Programmazione

MANUALE ESSE3 Gestione Registro delle lezioni

Sistema Informativo di Teleraccolta EMITTENTI

Schede ADI ADP ADEM Prestazioni aggiuntive MMG. - Manuale - Data Solution Provider s.r.l.

ACO Archiviazione Elettronica e Conservazione sostitutiva

Installazione e caratteristiche generali 1

GUIDA ALL UTILIZZO DI MF QUICKEN

GUIDA AL PORTALE PARTE 1

GUIDA ALL USO DEL PORTALE DI PRENOTAZIONE LIBRI ON LINE

Pagina n. 1. Via Ficili n Tolentino (MC) Tel.: Fax: info@grupposis.it

Il calendario di Windows Vista

PULSANTI E PAGINE Sommario PULSANTI E PAGINE...1

POSTECERT POST CERTIFICATA GUIDA ALL USO DELLA WEBMAIL

Università di L Aquila Facoltà di Biotecnologie Agro-alimentari

Access. Microsoft Access. Aprire Access. Aprire Access. Aprire un database. Creare un nuovo database

Transcript:

FONDAMENTI DI INFORMATICA T-2 Lab 10 L associazione delle compagnie aeree ha richiesto un applicazione per effettuare ricerche e prenotazioni dei voli diretti da un aeroporto a un altro nella data specificata. DESCRIZIONE DEL DOMINIO DEL PROBLEMA. Secondo le convenzioni internazionali, ogni città con aeroporto è identificata da un codice univoco di 3 lettere; se tale aeroporto è unico, la sigla vale anche per l aeroporto (es. BLQ = Bologna), mentre nel caso di più aeroporti ognuno ha la propria sigla (es. LHR per London Heathrow, LGW per London Gatwick, STN per London Stansted), diversa da quella della città in quanto tale (nell esempio, LON per London). Ogni volo è descritto da un identificativo univoco (costituito a sua volta da due parti: la sigla della compagnia [due o tre caratteri] e un numero identificativo [da 2 a 4 cifre]), le sigle degli aeroporti di partenza e arrivo, i rispettivi orari di partenza e arrivo rispetto all ora locale, l offset del giorno (0 se si arriva lo stesso giorno della partenza, 1 se si arriva il giorno dopo la partenza, -1 se si arriva il giorno prima della partenza), i giorni di effettuazione (per convenzione espressi da una sequenza di numeri dove 1=lunedì,, 7=domenica, o un trattino se quel giorno il volo non opera), e per finire il tipo di aeromobile (da cui dipende ovviamente il numero di posti disponibili a bordo). Se il volo ha orari diversi in diversi giorni, o è effettuato con aeromobili diversi in giorni o periodi diversi, è descritto da più righe, come negli esempi seguenti. ESEMPI: AZ1344,BLQ,14.30,CTA,16.15,0,1234567,A320 OK733,BLQ,6.15,PRG,8.10,0,12-456-,AT4 FR9367,BLQ,14.25,GRO,16.15,0,----5--,738 FR9367,BLQ,14.40,GRO,16.30,0,-2-4-6-,738 FR9367,BLQ,20.35,GRO,22.25,0,1------,738 FR9367,BLQ,21.25,GRO,23.15,0,--3---7,738 AZ894,FCO,22.00,CAI,2.20,0,----56-,332 AZ894,FCO,22.00,CAI,2.20,0,1234 7,321 volo giornaliero volo non operante mercoledì e domenica volo giornaliero operante con orari diversi nei vari giorni volo giornaliero operato con aerei diversi nei vari giorni Le descrizioni dei voli previsti in orario sono disponibili nel file di testo FlightSchedule.txt, mentre l elenco delle sigle degli aeroporti e delle città, coi relativi fusi orari, è archiviato nel file Cities.txt; i tipi di aerei, con i posti disponibili in ciascuno, sono disponibili in un terzo file di testo, di nome Aircrafts.txt (tutti descritti nel seguito). Parte 1 Dati (namespace flights.model) Il modello dei dati deve essere organizzato secondo il diagramma UML riportato a pagina 2. SEMANTICA: a) la classe Aircraft (fornita nello Start Kit) rappresenta un tipo di aereo, caratterizzato da un identificativo univoco e dal numero di posti offerti; il metodo getseats restituisce il numero di posti disponibili a bordo; b) la classe Airport (fornita nello Start Kit) rappresenta un aeroporto: ogni istanza è caratterizzata dalla sua sigla (id univoco) e dalla denominazione estesa corrispondente, e dispone di un metodo getcity che restituisce la città in cui l aeroporto si trova, sotto forma di istanza di City; c) la classe City (fornita nello Start Kit) rappresenta una città: ogni istanza è caratterizzata dalla sua sigla (id univoco), dalla denominazione estesa corrispondente, dal fuso orario locale e dall insieme dei suoi aeroporti; il metodo getairports restituisce gli aeroporti della città (sotto forma di Set<Airport>), mentre il metodo getcurrenttimezone restituisce il fuso orario corrente (*) della città, riferito a GMT (un intero fra 12 e +12); d) la classe FlightSchedule (da realizzare) rappresenta la descrizione di un volo con tutte le proprietà dettagliate alla pagina precedente; oltre ai metodi per accedervi, deve disporre di un metodo getflightduration che restituisce la durata del volo (java.time.duration), tenendo opportunamente conto dei fusi orari ( ) ; (*) L ora legale si considera inglobata nel valore restituito: pertanto, l Italia sarà su +1 in inverno e su +2 in estate, e così per ogni altra località. ( ) Si noti che un volo verso est può dar luogo a durate apparentemente negative, da correggere aggiungendo 24h. Es.: New York 19.00 / Roma 9.30, durata apparente 9h30, differenza fuso orario +6h, durata reale 15h30, ovvero 8h30 (mod 24h) Es.: Roma 22.00 / Cairo 2.20, durata apparente 19h40, differenza fuso orario +1h, durata reale 20h40, ovvero 3h20 (mod 24h)

Al fine di calcolare la durata del volo, occorre prima integrare data e ora di partenza e fuso orario della città di partenza in un OffsetDateTime, poi fare lo stesso con data e ora di arrivo e fuso orario della città di arrivo; successivamente si può calcolare la durata del volo (come è noto, è possibile calcolare una Duration partendo da due OffsetDateTime) e, nel caso in cui questa sia negativa ( ), è sufficiente sommare un giorno. Per semplicità, di seguito si può trovare il codice per la costruzione degli OffsetDateTime di cui sopra: OffsetDateTime departure = OffsetDateTime.of(LocalDate.now(), departurelocaltime, ZoneOffset.ofHours(getDepartureAirport().getCity().getTimeZone())); OffsetDateTime arrival = OffsetDateTime.of(LocalDate.now().plusDays(getDayOffset()), arrivallocaltime, ZoneOffset.ofHours(getArrivalAirport().getCity().getTimeZone())); Lo StartKit contiene anche i test (da includere nel progetto) per verificare il funzionamento della classe FlightSchedule. Persistenza (namespace flights.persistence) (punti 10) ( ) Si noti che un volo verso est può dar luogo a durate apparentemente negative, da correggere aggiungendo 24h. Es.: New York 19.00 / Roma 9.30, durata apparente 9h30, differenza fuso orario +6h, durata reale 15h30, ovvero 8h30 (mod 24h) Es.: Roma 22.00 / Cairo 2.20, durata apparente 19h40, differenza fuso orario +1h, durata reale 20h40, ovvero 3h20 (mod 24h)

I reader di seguito descritti sono tutti dotati di un metodo read che restituisce una collection specifica di oggetti e che dichiara di rilanciare IOException in caso di problemi di lettura, oppure BadFileFormatException in caso di problemi nel formato del file. 1) Il file di testo Cities.txt contiene l elenco delle sigle delle città aeroportuali con le rispettive informazioni, una per riga. Ogni riga contiene nell ordine i seguenti campi, separati da virgole: la sigla della città (3 caratteri) il suo fuso orario nel formato GMTN (soltanto GMT nel caso N sia zero) la denominazione della città nel solo caso di più aeroporti: una lista di aeroporti coi relativi nomi, separati fra loro da virgole, ciascuno nella forma sigla/nome ESEMPI (orario estivo, con ora legale): LON,GMT+1,London,LHR/Heathrow,LGW/Gatwick,STN/Stansted BLQ,GMT+2,Bologna La classe MyCitiesReader (fornita nello Start Kit) implementa l interfaccia CitiesReader (pure fornita nello Start Kit): le eccezioni lanciate dal metodo di lettura sono le stesse descritte sopra. 2) Il file di testo Aircrafts.txt contiene l elenco delle sigle dei possibili aerei, una per riga. Ogni riga contiene nell ordine i seguenti campi, separati da virgole: la sigla dell aereo la sua descrizione estesa il numero di posti offerti ESEMPI 738,Boeing 737-800,189 AT4,ATR-42,46 321,Airbus,A-321,185 La classe MyAircraftsReader (fornita nello Start Kit) implementa l interfaccia AircraftsReader (pure fornita nello Start Kit): le eccezioni lanciate dal metodo di lettura sono le stesse descritte sopra. 3) Il file di testo FlightSchedule.txt contiene l orario dei voli programmati, uno per riga; ogni riga segue il formato mostrato alla pagina precedente e qui di seguito descritto (i vari campi sono separati da virgole): identificativo del volo (fino a 6 caratteri) sigla dell aeroporto di partenza (3 caratteri) e orario di partenza nel formato hh.mm (locale italiano) sigla dell aeroporto di arrivo (3 caratteri) e orario di arrivo nel formato hh.mm (locale italiano) offset in giorni: 0 se si arriva lo stesso giorno della partenza, 1 se si arriva il giorno dopo la partenza, -1 se si arriva il giorno prima della partenza giorni di effettuazione (7 caratteri, da 1 a 7 nell ordine, o - se quel giorno il volo non si effettua) tipo di aeromobile (fino a 4 caratteri). L interfaccia FlightScheduleReader (fornita nello StartKit) dichiara i metodi utili per ottenere un insieme di FlightSchedule da un generico Reader. La classe MyFlightScheduleReader (da realizzare) la implementa adottando come formato del testo quello sopra illustrato; in caso di problemi di accesso al file, il metodo di lettura deve lanciare una IOException, mentre in caso di errori nel formato del file in lettura deve lanciare l eccezione BadFileFormatException (fornita nello StartKit). Si noti che il metodo di lettura prende in ingresso due mappe, una che mette in relazione sigle degli aeroporti e aeroporti corrispondenti ed una che mette in relazione sigle degli aeromobili ed aeromobili corrispondenti; tali mappe devono essere utilizzate durante la lettura per ottenere gli oggetti corrispondenti agli acronimi letti nel file, così da creare correttamente gli oggetti FlightSchedule. La classe DataManager (da realizzare), utilizza i vari reader (che acquisisce tramite il costruttore sotto forma di riferimenti alle interfacce) e coordina la lettura dei vari file che avviene nel metodo readall. Tale metodo effettua prima la lettura del file degli aeroporti (tramite l apposito reader) e popola la corrispondente mappa, poi effettua la lettura del file degli aeromobili (tramite l apposito reader) e popola la corrispondente mappa, infine effettua la lettura degli orari dei voli (tramite l apposito reader) passando le mappe appena popolate. I metodi getter della classe (da realizzare come specificato nel diagramma UML) consentono di recuperare i dati letti. Lo StartKit contiene anche i test relativi alle classi MyFlightScheduleReader e DataManager.

segue Parte 2 Controller (namespace fligths.ui) La classe MyController (da realizzare) implementa l interfaccia Controller (fornita nello Start Kit); in particolare: il metodo getsortedairports restituisce una lista di aeroporti disposti in ordine alfabetico in primis rispetto al nome della città e in subordine al nome dell aeroporto; per l ordinamento, è necessario realizzare ed utilizzare la classe AirportComparator che implementi opportunamente Comparator<Airport>; il metodo searchflights cerca e restituisce l elenco dei voli disponibili fra gli aeroporti specificati nella data specificata (a tal fine occorre dedurre, tramite la data, il giorno della settimana). Interfaccia utente a console (namespace flights.ui) La classe FlightConsoleUi (nello Start Kit) realizza l interfaccia utente a console; il costruttore prende in ingresso un Controller, mentre il metodo run() consente di visualizzare l interfaccia. Mediante l utilizzo della classe Menu (fornita nello Start Kit), richiedere all utente la scelta dell aeroporto di partenza, poi dell aeroporto di arrivo (recuperare l elenco degli aeroporti mediante l utilizzo del metodo getsortedairports di Controller); successivamente, richiedere la data del viaggio (convertire la data in un oggetto Date mediante l uso di un opportuno DateFormat). Una volta recuperati tutti i dati, mediante l utilizzo del metodo searchflights di Controller, recuperare l elenco dei FlightSchedule che, successivamente, vanno stampati a console. Interfaccia utente a finestre (namespace flights.ui) L interfaccia utente deve essere simile (non necessariamente identica) all esempio mostrato nella figura che segue. La classe FlightFrame (da realizzare) realizza la finestra principale, che consente di cercare un volo fra due aeroporti per una certa data. A tal fine, due caselle a discesa sono preventivamente popolate mediante il metodo getsortedairports del controller: il testo mostrato in esse dev essere quello restituito dalla tostring di Airport. Sotto, un componente JSpinner consente di specificare la data del viaggio. Per configurarlo si suggerisce l uso del modello predefinito SpinnerDateModel (da passare al costruttore di JSpinner): il formato della data può essere impostato specificando, tramite seteditor, un opportuno DateEditor, che accetta una stringa di formattazione nel tipico formato di SimpleDateFormat (nell esempio in figura è stata usata E dd/mm/yyyy ). Quindi, ad esempio, il codice per l inizializzazione del componente potrà essere: JSpinner departuredatespinner = new JSpinner(new SpinnerDateModel()); JSpinner.DateEditor dateeditor = new JSpinner.DateEditor(departureDateSpinner, "E dd/mm/yyyy"); departuredatespinner.seteditor(dateeditor); Premendo il bottone Find viene invocato il metodo searchflights del controller che, come già detto, restituisce l insieme dei voli disponibili, con i rispettivi dettagli; tale insieme deve essere quindi inserito in un pannello di tipo FlightScheduleListPanel (fornito nello Start Kit) che consente di visualizzare tutti i voli selezionati ed è posizionato sulla destra rispetto ai controlli di selezione. Nel gestore del click del bottone Find, per ottenere dal JSpinner il LocalDate corrispondente alla data inserita dall utente, è possibile usare il codice che segue. Date date = (Date) departuredatespinner.getvalue(); LocalDate localdate = DateConverter.asLocalDate(date); Classi da realizzare per ogni parte Parte 1: FlightSchedule

Parte 2: MyFlightScheduleReader, DataManager Parte 3: MyController, AirportComparator, FlightFrame