ESAME DI STATO I.T.E. A.S. 2015-2016 PRIMA PARTE La compagnia City2City è una società italiana di recente costituzione che offre collegamenti passeggeri diretti verso varie città europee. City2City si vuole inserire dinamicamente sul mercato del trasporto passeggeri, offrendo un servizio efficiente e a costi contenuti. Il suo target sono tutti quei soggetti che non amano spostarsi in aereo, non hanno la possibilità di usare un mezzo proprio e desiderano viaggiare comodamente, trasportando facilmente il proprio bagaglio. La compagnia, almeno per la fase iniziale di avvio delle attività, ha scelto di offrire collegamenti di andata e di ritorno che partono dalla propria sede operativa, situata in una città di medie dimensioni del centro Italia, e sono diretti ad alcune città europee, raggiungibili in 24 ore di viaggio al massimo. Si è quindi dotata di un parco di autobus GT ( Gran Turismo ) forniti di differenti livelli di comfort. La manutenzione degli autobus GT è affidata ad una serie di ditte esterne, e deve essere comunque tenuta sotto attento controllo dalla City2City. Puntando sulla qualità e sulla sicurezza del servizio offerto, si è scelto che il personale viaggiante sia costituito da un autista principale ed un secondo autista che si alternano alla guida, oltre che da un assistente di viaggio in grado di offrire servizi di cortesia ai passeggeri (es. riviste, frigo bar, noleggio tablet, noleggio videogiochi o film) di cui la City2City periodicamente rifornisce i suoi mezzi. La compagnia è interessata a fidelizzare i clienti e prevede quindi sistemi di registrazione degli utenti, con tessera virtuale a punti e indagini di mercato di customer satisfaction. Infine, essa intende offrire sistemi di prenotazione on-line. Il candidato, fatte le opportune ipotesi aggiuntive: 1. identifichi le principali aree del sistema informativo della compagnia City2City e le soluzioni tecnologiche necessarie alla sua implementazione; 2. concentrandosi poi sulla porzione del sistema informativo che gestisce l attività di trasporto, sviluppi uno schema concettuale della relativa base di dati, che dovrà prevedere: i collegamenti offerti, registrando per ciascuno la città collegata, il giorno della settimana, l orario previsto di partenza e di arrivo, se il collegamento è di andata o di ritorno; il personale viaggiante, del quale oltre ai dati anagrafici interessa il ruolo ricoperto come sopra descritto; il parco di autobus GT, con i dati identificativi di ciascun mezzo, le relative caratteristiche e i dati necessari a gestirne la manutenzione; i viaggi effettuati, registrando per ciascuno la data in cui è stato svolto, l orario effettivo di partenza e di arrivo, il numero dei passeggeri effettivi, l autobus GT utilizzato e il personale viaggiante impiegato. 3. derivi il corrispondente schema logico relazionale; 4. sviluppi in linguaggio SQL le query per ottenere le seguenti informazioni: a Prof. Sergio Scarano Pagina 1
a. elenco dei viaggi di andata svolti verso una determinata città, in un intervallo di date fornite in input; b. per ciascuna città collegata, calcolare la media del tempo di percorrenza dei viaggi di andata effettuati nel mese di agosto dell anno corrente. SECONDA PARTE Si supponga che la compagnia City2City desideri attivare con i propri clienti operazioni di marketing non convenzionale, che tengano conto di fattori come stile di vita, interessi, realtà famigliare, ecc. Il candidato a tale scopo: a. integri la base di dati sviluppata nella prima parte inserendo opportunamente un entità Cliente ; b. ne definisca gli attributi utili alle operazioni di marketing ipotizzate, motivando le scelte fatte, e ne derivi lo schema logico; c. infine sviluppi le pagine web necessarie alla registrazione di un nuovo cliente, in un linguaggio di programmazione a propria scelta. SOLUZIONE PRIMA PARTE SISTEMA INFORMATIVO Si intende ricorrere ad una soluzione integrata quale può essere quella rappresentata da un sistema informativo ERP. Esso risulta costituito da un unico database centralizzato (la cui progettazione verrà realizzata di seguito) verso il quale si interfacciano i principali moduli software del sistema informativo quali: amministrazione e finanza, logistica e trasporti, gestione del personale, gestione della manutenzione dei mezzi, marketing e gestione della comunicazione, ENTITÀ: ANALISI DEI DATI Destinazione: le città europee che sono destinazione dei collegamenti; Collegamento: informazioni dettagliate sul collegamento verso una data destinazione; Bus: i mezzi a disposizione della compagnia per effettuare i collegamenti con le città europee; Viaggio: informazioni sui singoli viaggi effettuati per ogni possibile collegamento; Personale: dipendenti della compagnia in servizio sugli autobus e distinti per ruolo; Servizio: i vari servizi messi a disposizione sui suoi mezzi e che possono variare da bus a bus; Ditta: informazioni sulle ditte esterne che usualmente prestano opera di manutenzione sui mezzi della compagnia. Prof. Sergio Scarano Pagina 2
ATTRIBUTI: Destinazione: IDDestinazione (PK), Città, Nazione. IDDestinazione contiene numeri interi ad auto-incremento; Città e Nazione sono campi di tipo testo. Collegamento: IDCollegamento (PK), Giorno, OraPartenza, OraArrivo, TipoViaggio, Prezzo. La chiave primaria IDCollegamento contiene numeri interi ad auto-incremento; Giorno (lunedì, martedì, ) e TipoViaggio (andata o ritorno) sono di tipo testo, OraPartenza e OraArrivo sono campi di tipo Data/Ora; Prezzo è un campo di tipo valuta. Bus: Targa (PK), Marca, Modello, KmPercorsi, NumeroPosti. La chiave primaria Targa è un campo di tipo testo (alfanumerico); Marca e Modello sono campi di tipo testo; KmPercorsi è un campo numerico di tipo intero mentre NumeroPosti è numerico di tipo byte. Viaggio: IDViaggio (PK), DataViaggio, OraEffettivaPartenza, OraEffettivaArrivo, Durata, NumeroPasseggeri. La chiave primaria IDViaggio contiene numeri interi ad autoincremento; DataViaggio, OraEffettivaPartenza e OraEffettivaArrivo sono campi di tipo Data/Ora; Durata (numero ore di viaggio) e NumeroPasseggeri campi di tipo byte. Personale: IDPersonale (PK), Cognome, Nome, DataNascita, Indirizzo, Città, ContattoTelefonico, Ruolo. IDPersonale contiene numeri interi ad auto-incremento; Cognome, Nome, Indirizzo, Città, ContattoTelefonico e Ruolo (autista 1, autista 2 o assistente) sono campi di tipo testo; DataNascita è un campo di tipo Data/Ora. Servizio: IDServizio (PK), NomeServizio. IDServizio contiene numeri interi ad autoincremento; NomeServizio è un campo si tipo testo. Ditta: IDDitta (PK), RagioneSociale, Indirizzo, Città, Telefono, Mail. IDDitta contiene numeri interi ad auto-incremento; RagioneSociale, Indirizzo, Città, Telefono, Mail sono campi di tipo testo. ASSOCIAZIONI E REGOLE DI LETTURA Destinazione Collegamento: (1 a Molti). Per ogni destinazione ci devono essere uno o più collegamenti; ogni collegamento deve essere associato ad un unica destinazione. Collegamento Viaggio: (1 a Molti). Per ogni collegamento (o tratta) devono esserci nel DB uno o più viaggi effettuati; ogni viaggio deve essere associato ad un preciso collegamento. Bus Viaggio (1 a Molti). Ogni mezzo deve essere stato utilizzato per uno o più viaggi; ogni viaggio deve essere associato ad un unico mezzo. Personale Viaggio (Molti a Molti). Ciascun dipendente (in servizio sugli autobus) deve aver preso parte ad uno o più viaggi; in ogni viaggio devono essere presenti più dipendenti della compagnia (autista 1, autista 2, assistente). Servizio Bus (Molti a Molti). Ogni servizio può essere offerto su uno o più autobus; su ogni autobus possono essere offerti uno o più servizi. Ditta Bus (Molti a Molti). Ogni ditta esterna può occuparsi della manutenzione di uno o più mezzi; ogni mezzo deve essere sottoposto nel tempo a varie manutenzioni presso una o più ditte (per ogni singola manutenzione la compagnia può rivolgersi a ditte differenti). Prof. Sergio Scarano Pagina 3
MODELLO E/R DESTINAZIONE COLLEGAMENTO VIAGGIO BUS DITTA PERSONALE SERVIZIO MODELLO LOGICO Poiché si intende utilizzare, in fase di implementazione, un DBMS relazionale (Access o MySql), le relazioni Molti a Molti saranno sostituite da relazioni 1 a Molti attraverso l introduzione di tabelle di collegamento. PERSONALE VIAGGIO PERSONALE_VIAGGIO SERVIZIO BUS SERVIZIO_BUS DITTA BUS MANUTENZIONE Prof. Sergio Scarano Pagina 4
ARCHIVIO CAMPO CHIAVE FORMATO DIMENSIONE OPZIONALITA IDDestinazione PK Numerico Autoincremento NO Destinazioni Città Testo 20 NO Nazione Testo 20 NO IDCollegamento PK Numerico Autoincremento NO Giorno Testo 15 NO OraPartenza Data/ora hh:mm:ss NO Collegamenti OraArrivo Data/Ora hh:mm:ss NO TipoViaggio Testo 10 NO Prezzo Valuta Euro NO IDDestinazione FK Numerico Intero Lungo NO Targa PK Testo 7 NO Marca Testo 20 NO Bus Modello Testo 20 NO KmPercorsi Numerico Intero NO NumeroPosti Numerico Byte NO IDViaggio PK Numerico Autoincremento NO DataViaggio Data/Ora gg/mm/aaaa NO OraEffettivaPartenza Data/Ora hh:mm:ss NO Viaggi OraEffettivaArrivo Data/Ora hh:mm:ss NO Durata Numerico Byte NO NumeroPasseggeri Numerico Byte NO IDCollegamento FK Numerico Intero Lungo NO Targa FK Testo 7 NO IDPersonale PK Numerico Autoincremento NO Cognome Testo 20 NO Nome Testo Numerico NO Personale DataNascita Data/Ora gg/mm/aaaa NO Indirizzo Testo 30 SI Città Testo 20 SI ContattoTelefonico Testo 15 NO Ruolo Testo 15 NO Personale_Viaggio IDPersonale FK Numerico Intero Lungo NO IDViaggio FK Numerico Intero Lungo NO Servizi IDServizio PK Numerico Autoincremento NO NomeServizio Testo 20 NO Servizi_Bus IDServizio FK Numerico Intero Lungo NO Targa FK Testo 7 NO IDDitta PK Numerico Autoincremento NO RagioneSociale Testo 20 NO Ditte Indirizzo Testo 30 NO Città Testo 20 NO Telefono Testo 15 NO Mail Testo 40 NO IDDitta FK Numerico Intero Lungo NO Targa FK Testo 7 NO Manutenzioni DataManutenzione Data/Ora gg/mm/aaaa NO TipoIntervento Testo 20 NO CostoIntervento Valuta Euro NO Prof. Sergio Scarano Pagina 5
INTERROGAZIONI Query 1 SELECT IDViaggio, DataViaggio, OraEffettivaPartenza, OraEffettivaArrivo, NumeroPasseggeri FROM Viaggi, Collegamenti, Destinazioni WHERE Viaggi.IDCollegamento = Collegamenti.IDCollegamento AND Collegamenti.IDDestinazione = Destinazioni.IDDestinazione AND Città = [Inserisci la destinazione] AND TipoViaggio = Andata AND DataViaggio BETWEEN [Inserisci data iniziale ricerca] AND [Inserisci data finale ricerca] ORDER BY DataViaggio; Query 2 SELECT Città, AVG(Durata) AS [Media del tempo di percorrenza] FROM Destinazioni, Collegamenti, Viaggi WHERE Viaggi.IDCollegamento = Collegamenti.IDCollegamento AND Collegamenti.IDDestinazione = Destinazioni.IDDestinazione AND TipoViaggio = Andata AND DataViaggio BETWEEN #08/01/2018# AND #08/31/2018# GROUP BY Città; SOLUZIONE SECONDA PARTE L entità Cliente deve essere connessa, nel modello E/R creato nella prima parte, all entità Viaggi. In essa possiamo inserire come attributi, oltre ai dati anagrafici, le informazioni relative allo stile di vita del Cliente, informazioni che saranno poi utilizzate dalla compagnia per operazioni di marketing. CLIENTE VIAGGIO Associazione: Molti a Molti. Un cliente inserito nel database deve aver effettuato uno o più viaggi; ad ogni viaggio devono aver preso parte uno o più clienti. La tabella di collegamento tra Clienti e Viaggi può essere indicata come Clienti_Viaggi. Clienti Integrazione al Modello Logico IDCliente PK Numerico AutoIncremento NO Cognome Testo 20 NO Nome Testo 20 NO DataNascita Data/Ora gg:mm:aaaa NO Indirizzo Testo 30 NO Città Testo 20 NO Prof. Sergio Scarano Pagina 6
Clienti_Viaggi Mail Testo 40 NO StileDiVita Testo 20 NO RealtàFamiliare Testo 20 NO Interesse Testo 20 NO IDCliente FK Numerico Intero Lungo NO IDViaggio FK Numerico Intero Lungo NO ValutazioneViaggio Numerico Byte NO PAGINE WEB PER LA REGISTRAZIONE DI UN NUOVO CLIENTE Il modulo per la registrazione può presentarsi nel modo seguente: Il codice HTML di tale pagina risulta essere il seguente: <!doctype html> <html lang="it"> <head> <title> Registrazione Clienti</title> <meta charset="utf-8" /> </head> <body topmargin="20" bgcolor="lightblue"> <center><h2> REGISTRAZIONE CLIENTI </h2></center> <form action="registrazione.php" method="get"> <table border="0" align="center" cellspacing="10" cellpadding="5"> <tr> <td> Cognome </td> <td> <input type="text" name="txtcognome" size="20"/> </td> </tr> <tr> <td> Nome </td> <td> <input type="text" name="txtnome" size="20"/> </td> </tr> <tr> <td> DataNascita </td> <td> <input type="text" name="txtdata" size="20"/> </td> </tr> <tr> <td> Indirizzo </td> <td> <input type="text" name="txtindirizzo" size="20"/> </td> </tr> Prof. Sergio Scarano Pagina 7
<tr> <td> Città </td> <td> <input type="text" name="txtcitta" size="20"/> </td> </tr> <tr> <td> Mail </td> <td> <input type="text" name="txtmail" size="40"/> </td> </tr> <tr> <td> Stile di vita </td> <td> <select name="lststile" size="1"> <option> Stile 1 </option> <option> Stile 2 </option> <option> Stile 3 </option> </td> </tr> <tr> <td> Realtà famigliare </td> <td> <select name="lstrealta" size="1"> <option> Realtà 1 </option> <option> Realtà 2 </option> <option> Realtà 3 </option> </td> </tr> <tr> <td> Interessi </td> <td> <input type="radio" name="optinteresse" value="1" checked /> Interesse 1<br/> <input type="radio" name="optinteresse" value="2" /> Interesse 2<br/> <input type="radio" name="optinteresse" value="3" /> Interesse 3 </td> </tr> <tr> <th colspan="2"> <input type="submit" value="conferma Registrazione"/> </th></tr> </table> </form> </body> </html> Alla pressione del pulsante Conferma Registrazione viene richiamata (come si evince dall attributo action del tag form) la pagina PHP registrazione.php, il cui codice permette di effettuare un operazione di inserimento (INSERT) nell archivio Clienti del database progettato (dbcity2city). Di seguito il codice di tale pagina: <!doctype html> <html lang="it"> <head> <title> Esito Registrazione </title> <meta charset="utf-8" /> </head> <body topmargin="20" bgcolor="lightblue"> <?php // recupero informazioni dal form $cognome=$_get[ txtcognome ]; $nome=$_get[ txtnome ]; $data=$_get[ txtdata ]; $indirizzo=$_get[ txtindirizzo ]; Prof. Sergio Scarano Pagina 8
$citta=$_get[ txtcitta ]; $mail=$_get[ txtmail ]; $stile=$_get[ lststile ]; $realta=$_get[ lstrealta ]; $interesse=$_get[ optinteresse ]; // connessione al database $conn=mysqli_connect( localhost, root,, dbcity2city ) or die( Connessione non riuscita oppure database non trovato ); //creazione query di inserimento $sql= INSERT INTO Clienti(Cognome,Nome,DataNascita,Indirizzo,Città,Mail,StileDiVita), RealtàFamiliare,Interesse) ; $sql.= VALUES ( $cognome, $nome, $data, $indirizzo, $citta, $mail, $stile, $realta, $interesse ) ; // esecuzione query e esito if (mysqli_query($sql,$conn)) echo <center><h2> Inserimento effettuato </h2></center> ; else echo <center><h2> Inserimento fallito </h2></center> ; // chiusura connessione mysqli_close($conn);?> </body> </html> Prof. Sergio Scarano Pagina 9