Anno 2013 Informatica ABACUS

Documenti analoghi
Ministero dell Istruzione, dell Università e della Ricerca

2 Anno Informatica ABACUS

Volumi di riferimento

Esame di Stato 2015 Informatica e Telecomunicazioni - Informatica proff. F. Formichi, G. Meini 2015

ESAME DI STATO DI ISTITUTO TECNICO

Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

ESAME DI STATO DI ISTITUTO TECNICO INDUSTRIALE CORSO SPERIMENTALE Progetto ABACUS SIMULAZIONE PROVA SCRITTA DI INFORMATICA

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

IL DAT A B A S E DI ALGE B R A N D O

SQL e ACCESS. Modello relazionale PROBLEMA ENTITA STUDENTE

INFORMATICA PER L IMPRESA (Docente Prof. Alfredo Garro) ESERCIZIO 3

Una metodologia di progettazione di applicazioni web centrate sui dati

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

1. Schema concettuale della base di dati Lo schema concettuale (o statico) è uno dei due schemi del progetto concettuale di un sistema informativo.

a.a. 2012/13 12 Novembre 2012 Preparazione al Test in itinere, Compito A 1. Modellare tramite uno schema entità- relazione la seguente base di dati:

Abilità Informatiche A.A. 2010/2011 Lezione 9: Query Maschere Report. Facoltà di Lingue e Letterature Straniere

PHP e MySQL. Scripting server-side per accesso a DB MySQL

Laboratorio Progettazione Web PHP e MySQL - Lezione 9. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2012/2013

INFORMATICA. Applicazioni WEB a tre livelli con approfondimento della loro manutenzione e memorizzazione dati e del DATABASE.

La tecnologia ASP.NET e i database

Obiettivi d esame PHP Developer Fundamentals on MySQL Environment

DBMS (Data Base Management System)

LA GESTIONE DELLE VISITE CLIENTI VIA WEB

Basi di Dati Corso di Laura in Informatica Umanistica

19. LA PROGRAMMAZIONE LATO SERVER

PHP e Structured Query Language

RELAZIONE TECNICA GESTIONE CARTE DI CREDITO. a cura di EMANUELE CESARI

MySQL Database Management System

Sessione ordinaria 2005 Seconda prova scritta M070 - ESAME DI STATO DI ISTITUTO TECNICO INDUSTRIALE

PHP. A. Lorenzi, R. Giupponi, D. Iovino LINGUAGGI WEB. LATO SERVER E MOBILE COMPUTING Atlas. Copyright Istituto Italiano Edizioni Atlas

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

Eprogram ITIS V anno Unità 6 - PHP e MySQL

Software Servizi Web UOGA

Laboratorio di Tecnologie Web Laurea in Scienze e Tecnologie Multimediali

Laboratorio Progettazione Web PHP e MySQL. Andrea Marchetti IIT-CNR 2013/2014

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione

RELAZIONE SCRITTA RELATIVA AL PROGRAMMA DI GESTIONE SITO E-COMMERCE

1) Il client(browser utilizzato) invia al server i dati inseriti dall utente. Server

Corso Sistemi Informativi Avanzati. Programma 30 set Installazione Macchina Virtuale. Introduzione alla BI nelle Aziende.

PHP E MYSQL CREAZIONE DI UN NUOVO DATABASE DAL PHPMYADMIN

ECDL AM5 Access Advanced

ESEMPI DI QUERY SQL. Esempi di Query SQL Michele Batocchi AS 2012/2013 Pagina 1 di 7

Esame di Stato Istituto Tecnico Industriale Soluzione della Seconda Prova Indirizzo: INFORMATICA Tema: INFORMATICA Anno Scolastico:

Corso di Basi di Dati A.A. 2014/2015

Esame di stato 2004 Portfolio studente

ITI M. FARADAY Programmazione modulare a.s

1. BASI DI DATI: GENERALITÀ

Dispensa di database Access

RELAZIONE PROGETTO DATABASE GESTIONE BIBLIOTECA PERSONALE

M733 ESAME DI STATO DI ISTITUTO TECNICO COMMERCIALE CORSO DI ORDINAMENTO

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

MySQL Database Management System

CONCETTO DI ANNIDAMENTO

Il linguaggio SQL: trigger. Versione elettronica: 04.7.SQL.trigger.pdf

Tesi Di Laurea. Anno Accademico 2010/2011. relatore Ch.mo prof. Cinque Marcello. correlatore Ch.mo Ing. Catello Cacace

Laboratorio Progettazione Web PHP e MySQL - Lezione 9. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2011/2012

Informatica per le discipline umanistiche 2 lezione 10

PROGRAMMA DI CLASSE 5AI

Schema della base di dati del Catalogo dei Dati della Pubblica Amministrazione Renzo Orsini

Esercitazione 8 Mercoledì 21 gennaio 2015 (2 ore) DDL e progettazione

Access. P a r t e p r i m a

2011 Politecnico di Torino 1

Architettura MVC-2: i JavaBeans

Istruzioni DML di SQL

I Sistemi Informativi

Le Basi di Dati. Le Basi di Dati

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

Ministero della Pubblica Istruzione Ufficio Scolastico Regionale per la Sicilia Direzione Generale

Gestione Orario Lezioni: Schema del Database

Utilizzando Microsoft Access. Si crea la tabella Anagrafica degli alunni,le Materie e i voti si mettono alcuni campi

I database relazionali (Access)

UNIVERSITA DEGLI STUDI DI BRESCIA Facoltà di Ingegneria

Corso di Laboratorio di Basi di Dati

Esercitazione PAM. (Php Apache MySQL)

Introduzione a MySQL

Unità 2.1 Comandi sui database

Informatica Generale Andrea Corradini Sistemi di Gestione delle Basi di Dati

ESAME DI STATO I.T.E. A.S

Laboratorio Progettazione Web PHP e FORMs HTML. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2013/2014

SDD System design document

INDICI. Prevediamo di effettuare spesso interrogazioni simili alle seguenti:

Data Base in Internet

Strumenti Software per Esercitazioni (ambiente Windows) Basi di Dati L LS Ing. Gestionale

Uso delle basi di dati DBMS. Cos è un database. DataBase. Esempi di database

SOLUZIONE SECONDA PROVA INFORMATICA ITC ESAME DI STATO 2002/2003 TRAMONTANA

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

1.0 Ipotesi aggiuntive

Esame Di Stato A.S. 2004/2005 Istituto Tecnico Commerciale Corso Sperimentale Progetto Mercurio Corso di Ordinamento - Programmatori

Basi di Dati 1 Prof. L. Tanca e F. A. Schreiber APPELLO DEL 21 LUGLIO 2015 Tempo: 2h30m

Costruzione di Sit Web con PHP e MySQL. Lezione 7 - Esercitazione - Introduzione a MySQL: le tabelle, i tpi di dato, le query

Introduzione a phpmyadmin

Basi di Dati 1 Prof. L. Tanca e F. A. Schreiber APPELLO DEL 9 SETTEMBRE 2015 Tempo: 2h30m

Il linguaggio SQL: viste e tabelle derivate

Transcript:

Anno 2013 Informatica ABACUS Testo Una Società Aeroportuale commissiona lo sviluppo di un software per la gestione dei controlli passeggeri e merci nei vari punti di dogana presenti in un Aeroporto Internazionale. Si richiede la memorizzazione, per ogni controllo effettuato, dei dati relativi a: 1. passeggero: cognome, nome, nazionalità, numero passaporto o carta d identità, aeroporto di provenienza/destinazione, motivo del viaggio; 2. merce trasportata: categoria di appartenenza (generi alimentari, strumentazione elettronica, farmaci, abbigliamento, ), descrizione, quantità dichiarata; 3. controllo effettuato: punto di controllo, identificativo dell addetto al controllo, data e ora inizio/fine controllo, esito (nessuna segnalazione, merce respinta, fermo del passeggero, ), dazio doganale (non dovuto / importo del dazio, se dovuto), note. La procedura prevede che il funzionario incaricato provveda ad autenticarsi sul sistema e inserisca in tempo reale i dati relativi ad ogni nuovo controllo. Il sistema dovrà registrare i dati provenienti dai vari punti di controllo e fornire le necessarie funzioni per la segnalazione ai funzionari incaricati, delle situazioni da gestire: ritiro della merce sequestrata da parte del personale addetto al controllo; apertura della pratica di fermo del passeggero con segnalazione all organo preposto (Polizia Aeroportuale analisi delle note di controllo e gestione delle eventuali contestazioni; chiusura di tutti i rapporti di controllo aperti dagli addetti secondo le loro competenze. Il candidato realizzi: un analisi della realtà di riferimento, completa delle ipotesi aggiuntive necessarie, a suo motivato giudizio, per la realizzazione di uno schema adeguato dell architettura proposta; uno schema concettuale ed uno schema logico del data base; la definizione delle relazioni e le seguenti interrogazioni espresse in linguaggio SQL: 1. visualizzare i dati di tutti i passeggeri che sono stati controllati in ciascuno dei punti di dogana nell arco della giornata; 2. visualizzare per ciascun punto di controllo l ammontare dei dazi doganali registrati; 3. calcolare e visualizzare quante merci per ogni categoria sono state respinte dall inizio dell anno; 4. calcolare e visualizzare quante contestazioni sono state registrate da ciascun addetto; 5. calcolare la durata media dei controlli per ogni punto di controllo nell arco della giornata; 6. visualizzare l elenco, in ordine alfabetico, raggruppato per nazionalità, dei passeggeri in stato di fermo, registrati dall inizio dell anno in tutti i punti di controllo; 7. visualizzare gli addetti in servizio nella giornata, suddivisi per nome del funzionario incaricato. la codifica in un linguaggio di programmazione a scelta di un segmento significativo del progetto realizzato.

Ipotesi aggiuntive l identificativo univoco di un passeggero è dato dal suo numero di passaporto, o dal suo numero della carta di identità; dato che lo stesso passeggero può nel tempo effettuare viaggi diversi le informazioni di provenienza e destinazione sono associate al controllo effettuato; ogni singolo controllo è effettuato in uno specifico punto di controllo da parte di un addetto e supervisionato da un funzionario: ha sempre un esito e può eventualmente generare uno o più provvedimenti; il codice numerico identificativo di un controllo è generato automaticamente per autoincremento; un controllo si riferisce sempre ad un singolo passeggero che può avere al seguito una o più merci: le merci sono associate al passeggero al momento del controllo; le funzionalità di segnalazione agli incaricati delle situazioni da gestire consistono in esportazioni selettive dei dati del database in formato XML per l importazione nei sistemi informativi destinatari; al momento del controllo i passeggeri devono essere preregistrati nel database. Diagramma database Passeggeri PK Id_Passeggero Tipo_Documento Cognome Nome Nazionalita Addetti Categorie PK Id_Categoria Categoria MerciControllate PK,FK2 Id_Controllo PK Id_Merce PK Esiti Id_Esito Esito PK FK5 FK1 FK2 FK4 FK3 Controlli Id_Controllo Id_PuntoControllo Id_Funzionario Id_Addetto Id_Passeggero Provenienza Destinazione MotivoViaggio Inizio Fine Dazio Id_Esito PK PK Id_Addetto Cognome Nome Funzionari Id_Funzionario Cognome Nome Username Password FK1 Merce Id_Categoria Quantita Note PuntiControllo PK Id_PuntoControllo PuntoControllo SezioneAeroporto

Tabelle database Addetti Id_Addetto PK Intero Matricola addetto operativo Cognome Carattere 25 Cognome addetto operativo Nome Carattere 25 Nome addetto operativo Chiave Primaria: Id_Addetto Categorie Id_Categoria PK Carattere 4 Identificativo categoria merci Categoria Carattere 100 Descrizione categoria merci Chiave Primaria: Id_Categoria Controlli Id_Controllo PK Intero Progressivo controllo Id_PuntoControllo FK Carattere 4 Identificativo punto di controllo Id_Funzionario FK Intero Identificativo funzionario che supervisiona il controllo Id_Addetto FK Intero Identificativo addetto operativo che effettua il controllo Id_Passeggero FK Carattere 20 Identificativo passeggero Provenienza Carattere 30 Aeroporto provenienza Destinazione Carattere 30 Aeroporto destinazione MotivoViaggio Carattere 100 Motivo del viaggio Inizio Data/ora Inizio controllo Fine Data/ora Fine controllo Dazio Reale 10 Eventuale dazio da pagare sulle merci (0.0 = nessun dazio) Id_Esito FK Intero Identificativo esito controllo Chiave Primaria: Id_Controllo Chiave Esterna.: Id_Funzionario => Funzionari.Id_Funzionario Chiave Esterna.: Id_Addetto => Addetti.Id_Addetto Chiave Esterna.: Id_Esito => Esiti.Id_Esito Chiave Esterna.: Id_Passeggero => Passeggeri.Id_Passeggero Chiave Esterna.: Id_PuntoControllo => PuntiControllo.Id_PuntoControllo

Esiti Codice identificativo esito Id_Esito PK Intero (0 = nessuna segnalazione) Esito Carattere 30 Descrizione esito Chiave Primaria: Id_Esito Funzionari Id_Funzionario PK Intero Matricola funzionario Cognome Carattere 25 Cognome funzionario Nome Carattere 25 Nome funzionario Username Carattere 10 Username accesso sistema Password Carattere 10 Password autenticazione sistema Chiave Primaria: Id_Funzionario MerciControllate PK Id_Controllo FK Intero Identificativo controllo Id_Merce PK Intero Numero progressivo merce controllata Merce Carattere 100 Descrizione merce Id_Categoria FK Carattere 4 Identificativo categoria merce Quantita Intero Quantità merce controllata (unità) Note Carattere 1000 Note esame merce Chiave Primaria: Id_Controllo, Id_Merce Chiave Esterna.: Id_Categoria => Categorie.Id_Categoria Chiave Esterna.: Id_Controllo => Controlli.Id_Controllo Passeggeri Id_Passeggero PK Carattere 20 Numero passaporto o carta identità Tipo_Documento Carattere 10 Passaporto/Carta Cognome Carattere 25 Cognome passeggero Nome Carattere 25 Nome passeggero Nazionalita Carattere 20 Nazionalità passeggero Chiave Primaria: Id_Passeggero

PuntiControllo Id_PuntoControllo PK Carattere 4 Identificativo punto di controllo PuntoControllo Carattere 25 Descrizione punto di controllo SezioneAeroporto Carattere 20 Sezione aeroporto di collocazione punto di controllo Chiave Primaria: Id_PuntoControllo DB-schema (codice My-SQL) CREATE TABLE Addetti( Id_Addetto INTEGER NOT NULL, Cognome VARCHAR(25) NOT NULL, Nome VARCHAR(25) NOT NULL, CONSTRAINT PrimaryKey PRIMARY KEY(Id_Addetto) CREATE TABLE Categorie( Id_Categoria VARCHAR(4) NOT NULL, Categoria VARCHAR(100) NOT NULL, CONSTRAINT PrimaryKey PRIMARY KEY(Id_Categoria) INSERT INTO Categorie (Id_Categoria, Categoria) VALUES ('ALI', 'Generi alimentari'), ('ELE', 'Strumentazione elettronica'), ('FAR', 'Farmaci'), ('ABB', 'Abbigliamento' CREATE TABLE Esiti( Id_Esito INTEGER NOT NULL, Esito VARCHAR(30) NOT NULL, CONSTRAINT PrimaryKey PRIMARY KEY(Id_Esito) INSERT INTO Esiti(Id_Esito, Esito) VALUES (0, 'Nessuna segnalazione'), (1, 'Merce respinta'), (2, 'Fermo passeggero' CREATE TABLE Funzionari( Id_Funzionario INTEGER NOT NULL, Cognome VARCHAR(25) NOT NULL, Nome VARCHAR(25) NOT NULL, Username VARCHAR(10) NOT NULL, Password VARCHAR(10) NOT NULL, CONSTRAINT PrimaryKey PRIMARY KEY(Id_Funzionario) CREATE TABLE Passeggeri( Id_Passeggero VARCHAR(20) NOT NULL, Tipo_Documento VARCHAR(10) NOT NULL, Cognome VARCHAR(25) NOT NULL, Nome VARCHAR(25) NOT NULL, Nazionalita VARCHAR(20) NOT NULL, CONSTRAINT PrimaryKey PRIMARY KEY(Id_Passeggero)

CREATE TABLE PuntiControllo( Id_PuntoControllo VARCHAR(4) NOT NULL, PuntoControllo VARCHAR(25) NOT NULL, SezioneAeroporto VARCHAR(20) NOT NULL, CONSTRAINT PrimaryKey PRIMARY KEY(Id_PuntoControllo) CREATE TABLE Controlli( Id_Controllo INTEGER NOT NULL AUTO_INCREMENT, Id_PuntoControllo VARCHAR(4) NOT NULL, Id_Funzionario INTEGER NOT NULL, Id_Addetto INTEGER NOT NULL, Id_Passeggero VARCHAR(20) NOT NULL, Provenienza VARCHAR(30), Destinazione VARCHAR(30), MotivoViaggio VARCHAR(100), Inizio DATETIME NOT NULL, Fine DATETIME, Dazio REAL NOT NULL, Id_Esito INTEGER, CONSTRAINT FunzionariControlli FOREIGN KEY(Id_Funzionario) REFERENCES Funzionari(Id_Funzionario), CONSTRAINT AddettiControlli FOREIGN KEY(Id_Addetto) REFERENCES Addetti(Id_Addetto), CONSTRAINT EsitiControlli FOREIGN KEY(Id_Esito) REFERENCES Esiti(Id_Esito), CONSTRAINT PasseggeriControlli FOREIGN KEY(Id_Passeggero) REFERENCES Passeggeri(Id_Passeggero), CONSTRAINT PrimaryKey PRIMARY KEY(Id_Controllo), CONSTRAINT PuntiControlloControlli FOREIGN KEY(Id_PuntoControllo) REFERENCES PuntiControllo(Id_PuntoControllo) CREATE TABLE MerciControllate( Id_Controllo INTEGER NOT NULL, Id_Merce INTEGER NOT NULL, Merce VARCHAR(100) NOT NULL, Id_Categoria VARCHAR(4) NOT NULL, Quantita INTEGER NOT NULL, Note VARCHAR(1000), CONSTRAINT CategorieMerciControllate FOREIGN KEY(Id_Categoria) REFERENCES Categorie(Id_Categoria), CONSTRAINT ControlliMerciControllate FOREIGN KEY(Id_Controllo) REFERENCES Controlli(Id_Controllo), CONSTRAINT PrimaryKey PRIMARY KEY(Id_Controllo, Id_Merce) Query (codice My-SQL) 1) SELECT PuntiControllo.PuntoControllo, PuntiControllo.SezioneAeroporto, Passeggeri.Id_Passeggero, Passeggeri.Cognome, Passeggeri.Nome, Passeggeri.Nazionalita, Controlli.Inizio FROM PuntiControllo INNER JOIN (Passeggeri INNER JOIN Controlli ON Passeggeri.Id_Passeggero = Controlli.Id_Passeggero) ON PuntiControllo.Id_PuntoControllo = Controlli.Id_PuntoControllo WHERE YEAR(Controlli.Inizio) = YEAR(CURDATE()) AND MONTH(Controlli.Inizio) = MONTH(CURDATE()) AND DAY(Controlli.Inizio) = DAY(CURDATE()) ORDER BY PuntiControllo.PuntoControllo;

2) SELECT PuntiControllo.Id_PuntoControllo, PuntiControllo.PuntoControllo, SUM(Controlli.Dazio) AS TotaleDazio FROM PuntiControllo, Controlli WHERE PuntiControllo.Id_PuntoControllo = Controlli.Id_PuntoControllo GROUP BY PuntiControllo.Id_PuntoControllo, PuntiControllo.PuntoControllo; 3) SELECT Categorie.Categoria, COUNT(*) AS N_ControlliMerceRespinta FROM Controlli, Categorie, MerciControllate WHERE Categorie.Id_Categoria = MerciControllate.Id_Categoria AND Controlli.Id_Controllo = MerciControllate.Id_Controllo AND Controlli.Id_Esito = 1 AND YEAR(Controlli.Inizio) = YEAR(CURDATE()) GROUP BY Categorie.Categoria; 4) SELECT Funzionari.Id_Funzionario, Funzionari.Cognome, Funzionari.Nome, COUNT(*) AS ContestazioniTotali FROM Funzionari, Controlli WHERE Funzionari.Id_Funzionario = Controlli.Id_Funzionario AND Controlli.Id_Esito <> 0 GROUP BY Funzionari.Id_Funzionario, Funzionari.Cognome, Funzionari.Nome; 5) SELECT PuntiControllo.Id_PuntoControllo, PuntiControllo.PuntoControllo, AVG(TIMESTAMPDIFF(SECOND, Controlli.Fine, Controlli.Inizio)) AS TempoMedioControlli FROM PuntiControllo, Controlli WHERE PuntiControllo.Id_PuntoControllo = Controlli.Id_PuntoControllo AND YEAR(Controlli.Inizio) = YEAR(CURDATE()) AND MONTH(Controlli.Inizio) = MONTH(CURDATE()) AND DAY(Controlli.Inizio) = DAY(CURDATE()) GROUP BY PuntiControllo.Id_PuntoControllo, PuntiControllo.PuntoControllo; 6) SELECT Passeggeri.Id_Passeggero, Passeggeri.Cognome, Passeggeri.Nome, Passeggeri.Nazionalita FROM Passeggeri, Controlli WHERE Passeggeri.Id_Passeggero = Controlli.Id_Passeggero AND YEAR(Controlli.Inizio) = YEAR(CURDATE()) AND Controlli.Id_Esito = 2 ORDER BY Passeggeri.Nazionalita, Passeggeri.Cognome, Passeggeri.Nome; 7) SELECT Funzionari.Cognome, Funzionari.Nome, Addetti.Cognome, Addetti.Nome FROM Addetti INNER JOIN (Funzionari INNER JOIN Controlli ON Funzionari.Id_Funzionario = Controlli.Id_Funzionario) ON Addetti.Id_Addetto = Controlli.Id_Addetto WHERE YEAR(Controlli.Inizio) = YEAR(CURDATE()) AND MONTH(Controlli.Inizio) = MONTH(CURDATE()) AND DAY(Controlli.Inizio) = DAY(CURDATE()) ORDER BY Funzionari.Cognome, Funzionari.Nome, Addetti.Cognome, Addetti.Nome;

Codice L applicazione di gestione del database dei controlli ha preferibilmente un interfaccia utente fruibile da un browser web: questa soluzione ne consente l accesso oltre che da parte degli operatori (addetto/funzionario) dei singoli punti di controllo, anche da parte di operatori diversi dotati di dispositivi mobili o comunque connessi alla rete di comunicazione dell aeroporto. Le pagine web dinamiche che costituiscono l interfaccia possono essere sviluppate in linguaggio PHP: a questo scopo si è ipotizzato un server My-SQL in esecuzione sullo stesso computer del web server e che l accesso al database Aeroporto venga effettuato come utente root privo di password. Come esempio significativo di codifica dell applicazione viene proposto uno script in linguaggio PHP costituito da tre pagine web dinamiche invocate in cascata a partire da una pagina HTML statica che consente all operatore di effettuare il controllo di un singolo passeggero che può sottoporre a controllo una più unità di merce. Le pagine web dinamiche sono completamente prive di struttura grafica; si è inoltre supposta una preventiva fase di login che registra come variabili di sessione l identificativo del punto di controllo, l identificativo del funzionario e l identificativo dell operatore; la sessione viene utilizzata anche per il passaggio dei valori delle variabili permanenti. Lo script PHP si avvia dalla pagina statica controllo.html che consente di inserire il numero di documento del passeggero controllato: <html> <head> <title>controllo passeggero</title> </head> <body> Inserire il numero di documento del passeggero: <form action="controllo.php" method="get"> <input name="passeggero" type="text"><br><br> <input type="submit" value="controlla"> </form> </body> </html> La pagina dinamica controllo.php richiede i dati relativi al passeggero controllato: <html> <head> <title>controllo passeggero</title> </head> <body>

<?php session_start( $passeggero = $_GET['passeggero']; if (strlen($passeggero) == 0) echo "Errore passaggio parametro." ; $connection = mysqli_connect("localhost", "root", "", "Aeroporto" if (mysqli_connect_errno($connection)) echo "Errore di connessione al DBMS My-SQL."; // recupero dati passeggero $query = "SELECT Cognome, Nome, Nazionalita FROM Passeggeri WHERE Id_Passeggero = $passeggero;"; $result = mysqli_query($connection, $query if (!$result) echo "Errore esecuzione query SQL."; if (mysqli_num_rows($result) == 0) echo "Passeggero inesistente."; else $row = mysqli_fetch_array($result $cognome = $row[0]; echo "<b>cognome: </b>$cognome<br><br>"; $nome = $row[1]; echo "<b>nome: </b>$nome<br><br>"; $nazione = $row[2]; echo "<b>nazione: </b>$nazione<br><br>"; // recupero data/ora inizio controllo $query = "SELECT NOW("; $result = mysqli_query($connection, $query if (!$result) echo "Errore esecuzione query SQL."; $row = mysqli_fetch_array($result $_SESSION["inizio"] = $row[0]; $_SESSION["passeggero"] = $passeggero; mysqli_free_result($result mysqli_close($connection?> // richiesta dati passeggero <form action="prosegui.php" method="get"> <br>provenienza<br> <input name="provenienza" type="text"><br> <br>destinzaione<br> <input name="destinazione" type="text"><br> <br>motivo<br> <input name="motivo" type="text"><br>

<br>esito<br> <select name="esito"> <option value="0">nessuna segnalazione</option> <option value="2">passeggero fermato</option> </select><br> <br>merce<br> <select name="merce"> <option value="0">nessuna merce al seguito</option> <option value="1">merce al seguito</option> </select><br><br> <input type="submit" value="prosegui"> </form> </body> </html> La pagina dinamica prosegui.php riceve i dati relativi al passeggero controllato, registra il controllo nel database ed eventualmente richiede i dati relativi alla prima unità di merce: <html> <head> <title>controllo merce</title> </head> <body> <?php session_start( $provenienza = $_GET['provenienza']; $destinazione = $_GET['destinazione']; $motivo = $_GET['motivo']; $esito = $_GET['esito']; $merce = $_GET['merce']; $connection = mysqli_connect("localhost", "root", "", "Aeroporto" if (mysqli_connect_errno($connection)) echo "Errore di connessione al DBMS My-SQL."; // recupero data/ora fine controllo $query = "SELECT NOW("; $result = mysqli_query($connection, $query if (!$result) echo "Errore esecuzione query SQL.";

$row = mysqli_fetch_array($result $fine = $row[0]; $inizio = $_SESSION["inizio"]; $passeggero = $_SESSION["passeggero"]; $punto_controllo = $_SESSION["punto_controllo"]; $funzionario = $_SESSION["funzionario"]; $addetto = $_SESSION["addetto"]; // registrazione controllo nel database $query = "INSERT INTO Controlli(Id_PuntoControllo, Id_Funzionario, Id_Addetto, Id_Passeggero, Provenienza, Destinazione, MotivoViaggio, Inizio, Fine, Dazio, Id_esito) VALUES ('$punto_controllo', '$funzionario', '$addetto', '$passeggero', '$provenienza', '$destinazione', '$motivo', '$inizio', '$fine', 0.0, $esito"; if (!mysqli_query($connection, $query)) echo "Errore esecuzione comando SQL."; // recupero codice sequenziale controllo generato dal DBMS $query = "SELECT Id_Controllo FROM Controlli WHERE Id_Addetto = $addetto AND Inizio = '$inizio';"; $result = mysqli_query($connection, $query if (!$result) echo "Errore esecuzione query SQL."; $row = mysqli_fetch_array($result $controllo = $row[0]; $_SESSION["controllo"] = $controllo; if ($merce == 0 $esito!= 0) // nessuna merce o esito di fermo per il passeggero echo "Controllo n. $controllo memorizzato nel DB."; echo "<br><br><a href=\"http://localhost/aeroporto/controllo.html\"> Esegui un nuovo controllo.</a>"; else // inizializzazione variabili di sessione $_SESSION["id_merce"] = 0; $_SESSION["totale_dazio"] = 0.0;?> // richiesta dati unità di merce <form action="merce.php" method="get"> <br>descrizione merce<br> <input name="descrizione" type="text"><br> <br>categoria<br> <select name="categoria"> <?php $query = "SELECT Id_Categoria, Categoria FROM Categorie;"; $result = mysqli_query($connection, $query if (!$result) echo "Errore esecuzione query SQL." ; while ($row = mysqli_fetch_array($result)) echo "<option value=\"$row[0]\">$row[1]</option>"; mysqli_free_result($result

mysqli_close($connection?> </select><br><br> <br>quantitativo<br> <input name="quantita" type="number" size="5"><br> <br>note<br> <input name="note" type="text" size="100"><br> <br>dazio<br> <input name="dazio" type="number"><br> <br>esito<br> <select id="esito" name="esito"> <option value="0">nessuna segnalazione</option> <option value="1">merce respinta</option> </select><br> <br>merce ulteriore<br> <select name="merce"> <option value="0">nessuna altra merce al seguito</option> <option value="1">altra merce al seguito</option> </select><br><br> <input type="submit" value="prosegui"> </form> <?php?> </body> </html> La pagina dinamica merce.php riceve i dati relativi all unità di merce controllata e li registra nel database; viene invocata ripetutamente fino a che ci sono unità di merce da controllare e alla chiusura del controllo aggiorna la registrazione nel database con la data/ora di fine controllo e l importo del dazio da pagare: <html> <head> <title>controllo merce</title> </head> <body> <?php session_start( $merce = $_GET['merce']; $esito = $_GET['esito']; $quantita = $_GET['quantita'];

$descrizione = $_GET['descrizione']; $categoria = $_GET['categoria']; $note = $_GET['note']; $dazio = $_GET['dazio']; if (strlen($descrizione) == 0 strlen($quantita) == 0 strlen($dazio) == 0) echo "Errore passaggio parametri." ; // aggiornamento variabili di sessione $totale_dazio = $_SESSION["totale_dazio"]; $totale_dazio = $totale_dazio + $dazio; $_SESSION["totale_dazio"] = $totale_dazio; $id_merce = $_SESSION["id_merce"]; $id_merce = $id_merce + 1; $_SESSION["id_merce"] = $id_merce; $controllo = $_SESSION["controllo"]; $connection = mysqli_connect("localhost", "root", "", "Aeroporto" if (mysqli_connect_errno($connection)) echo "Errore di connessione al DBMS My-SQL."; // registrazione nel database dei dati relativi alla merce controllata $query = "INSERT INTO MerciControllate(Id_Controllo, Id_Merce, Merce, Id_Categoria, Quantita, Note) VALUES ($controllo, $id_merce, '$descrizione', '$categoria', $quantita, '$note'"; if (!mysqli_query($connection, $query)) echo "Errore esecuzione comando SQL"; if ($merce == 0 $esito!= 0) // nessuna merce o esito respinta per la merce // richiesta data/ora fine controllo $query = "SELECT NOW("; $result = mysqli_query($connection, $query if (!$result) echo "Errore esecuzione query SQL."; $row = mysqli_fetch_array($result $fine = $row[0]; // aggiornamento registrazione controllo nel database $query = "UPDATE Controlli SET dazio = $totale_dazio, Id_Esito = $esito, fine = '$fine' WHERE Id_Controllo = $controllo"; if (!mysqli_query($connection, $query)) echo "Errore esecuzione comando SQL."; echo "Controllo n. $controllo memorizzato nel DB."; echo "<br><br><a href=\"http://localhost/aeroporto/controllo.html\"> Esegui un nuovo controllo.</a>"; else?>

// richiesta dati unità di merce <form action="merce.php" method="get"> <br>descrizione merce<br> <input name="descrizione" type="text"><br> <br>categoria<br> <select name="categoria"> <?php $query = "SELECT Id_Categoria, Categoria FROM Categorie;"; $result = mysqli_query($connection, $query if (!$result) echo "Errore esecuzione query SQL." ; while ($row = mysqli_fetch_array($result)) echo "<option value=\"$row[0]\">$row[1]</option>"; mysqli_free_result($result mysqli_close($connection?> </select><br> <br>quantitativo<br> <input name="quantita" type="number" size="5"><br> <br>note<br> <input name="note" type="text" size="100"><br> <br>dazio<br> <input name="dazio" type="number"><br> <br>esito<br> <select id="esito" name="esito"> <option value="0">nessuna segnalazione</option> <option value="1">merce respinta</option> </select><br> <br>merce ulteriore<br> <select name="merce"> <option value="0">nessuna altra merce al seguito</option> <option value="1">altra merce al seguito</option> </select><br><br> <input type="submit" value="prosegui"> </form> <?php?> </body> </html>