melody_gio
di giorgia m.
Autore
7 min lettura
soluzione seconda prova economia aziendale Maturità 2017

Ecco la pagina della soluzione della seconda prova di Informatica per l’istituto ITIA – Informatica e telecomunicazioni Articolazione informatica.

Soluzione Seconda Prova Informatica

PARTE PRIMA

Punto 1: Schema ER

Soluzione Informatica Seconda Prova Maturità 2017, Traccia Istituto ITIA articolo

Nello schema generale della base dati abbiamo innanzitutto utilizzato una Gerarchia per gestire i due tipi di utenti.

Siccome un utente puo’ essere sia passeggero che autista, la Gerarchia e’ non-totale, , e quindi la somma delle entita’ figlie puo’ essere maggiore dell’entita’ padre, e non-esclusiva, perche’ l’utente puo’ trovarsi contemporaneamente in entrambe le entita’ figlie.

Abbiamo poi valutato l’attributo CodiceFiscale come chiave primaria dell’entita’ Utente, perche’ univoco per definizione.

Abbiamo poi creato l’entita’ Citta’ con chiave primaria Nome e con una relazione ricorsiva su se stessa per indicare la provincia.

Per quanto riguarda l’entita’ Viaggio, tra gli attributi locali all’entita’ troviamo Chiuso che serve all’utente-autista per chiudere dalla propria area riservata la disponibilita’ di prenotazione da parte di utenti-passeggeri. Questa azione viene effettuata quando l’utente-autista raggiunge il massimo di passeggeri che puo’ portare.
L’attributo Annotazioni, infine, e’ per indicare eventuali note che i passeggeri debbono tenere presente (aria condizionata si/no, musica in auto, eventuale disponibilita’ a fare fermate durante il percorso, etc).
Da notare che la chiave primaria dell’entita’ Viaggio e’ composta dal proprio attributo Data/Ora partenza e dall’utente-autista. In questo modo siamo sicuri dell’integrita’ dei dati, perche’ un utente-autista, nello stesso istante, puo’ fare un solo viaggio.

L’entita’ Viaggio ha poi due relazioni con Citta’: una per la partenza e una per l’arrivo.
Infine l’entita’ Feedback ha due relazioni con l’entita’ Utente: una per chi lascia e una per chi riceve. Ha poi una data/ora, un voto (numerico) e un giudizio (testuale). In questo caso, per semplicita’, abbiamo aggiunto un attributo ID (numerico/autoincrementale) come chiave primaria.

Punto 2: Schema logico

Di seguito la traduzione del precedente schema ER in schema logico:

Utente
Soluzione Informatica Seconda Prova Maturità 2017, Traccia Istituto ITIA articolo
Abbiamo deciso di gestire l’attributo Foto per contenere il path al file immagine.

Passeggero
Soluzione Informatica Seconda Prova Maturità 2017, Traccia Istituto ITIA articolo

Autista
Soluzione Informatica Seconda Prova Maturità 2017, Traccia Istituto ITIA articolo

In questa tabella sarebbe possibile migliorare la gestione dell’Autovettura con tabelle esterne per Marche e Modelli. Per questa prima implementazione si suppone un campo di testo semplice.

Feedback
Soluzione Informatica Seconda Prova Maturità 2017, Traccia Istituto ITIA articolo

Città
Soluzione Informatica Seconda Prova Maturità 2017, Traccia Istituto ITIA articolo

Viaggio
Soluzione Informatica Seconda Prova Maturità 2017, Traccia Istituto ITIA articolo

La tabella Viaggio ha tre attributi che costituiscono la chiave primaria. Qui un miglioramento potrebbe essere gestire le Annotazioni in modo piu’ strutturato, per esempio con una tabella esterna che riguarda i servizi disponibili (aria condizionata, fermate durante il tragitto, etc).

PasseggeriViaggio
Soluzione Informatica Seconda Prova Maturità 2017, Traccia Istituto ITIA articolo

Questa mappa contiene l’elenco dei passeggeri di ogni viaggio. La chiave primaria e’ quindi composta sia dal viaggio che dal passeggero.

Punto 3: Query SQL

Query A
SELECT Utente.Nome, Utente.Cognome, Viaggio.Partenza, Viaggio.[Data], Viaggio.Ora, Viaggio.Arrivo, Autista.Autovettura, Viaggio.Importo
FROM (Autista INNER JOIN Utente ON Autista.CodiceFiscale = Utente.CodiceFiscale) INNER JOIN Viaggio ON Viaggio.Autista = Autista.CodiceFiscale
WHERE Viaggio.Partenza = "..." AND Viaggio.Arrivo = "..." AND Viaggio.Data = '...' AND Viaggio.Chiuso = false
ORDER BY Viaggio.Ora ASC;

Query B
SELECT Utente.Nome, Utente.Cognome, Autista.Autovettura, Viaggio.Partenza, Viaggio.[Data], Viaggio.Ora, Viaggio.Arrivo, Viaggio.TempoStimato, Viaggio.Importo
FROM ((PasseggeriViaggio INNER JOIN Viaggio ON PasseggeriViaggio.AutistaViaggio = Viaggio.Autista AND PasseggeriViaggio.DataViaggio = Viaggio.Data AND PasseggeriViaggio.OraViaggio = Viaggio.Ora) INNER JOIN Autista ON Autista.CodiceFiscale = Viaggio.Autista) INNER JOIN Utente ON Autista.CodiceFiscale = Utente.CodiceFiscale
WHERE PasseggeriViaggio.CodicePrenotazione = 0000;

Query C

SELECT Utente.Nome+" "+Utente.Cognome AS NomeUtente, Avg(Feedback.voto) AS FeedbackMedio
FROM (((Passeggero INNER JOIN Utente ON Passeggero.CodiceFiscale = Utente.CodiceFiscale) INNER JOIN PasseggeriViaggio ON Passeggero.CodiceFiscale = PasseggeriViaggio.Passeggero) INNER JOIN Viaggio ON (PasseggeriViaggio.AutistaViaggio = Viaggio.Autista) AND (PasseggeriViaggio.DataViaggio = Viaggio.[Data]) AND (PasseggeriViaggio.OraViaggio = Viaggio.Ora)) INNER JOIN Feedback ON Passeggero.CodiceFiscale = Feedback.RicevutoDa
WHERE (((Viaggio.Autista)="...") AND ((Viaggio.Data)="...") AND ((Viaggio.Ora)="..."))
GROUP BY (Utente.Nome+" "+Utente.Cognome)
HAVING (((Avg(Feedback.voto))>X));

Passo 4: Implementazione Web

Lato Client (HTML)
Form HTML per richiedere i viaggi disponibili

<form action=”mostraviaggi.php”>
<input type=”text” name=”partenza” value=”Inserisci da dove vuoi partire...”>
<input type=”text” name=”data” value=”Inserisci quando vuoi partire...”>
<input type=”text” name=”arrivo” value=”Inserisci dove vuoi andare...”>
<input type=”submit”>
</form>

Lato Server (PHP)
Codice per recuperare un viaggio a partire da Citta’ di partenza, data e Citta’ di arrivo. (PHP):

// Impostiamo i parametri di connessione del database
$servername = "dbserver";
$username = "username";
$password = "password";
$dbname = "nomedatabase";
// Creiamo la connessione al database
$conn = new mysqli($servername, $username, $password, $dbname);
// Query per recuperare i viaggi
$sql = " SELECT Utente.Nome, Utente.Cognome, Viaggio.Partenza, Viaggio.Ora, Viaggio.Arrivo, Autista.Autovettura, Viaggio.Importo
FROM (Autista INNER JOIN Utente ON Autista.CodiceFiscale = Utente.CodiceFiscale) INNER JOIN Viaggio ON Viaggio.Autista = Autista.CodiceFiscale
WHERE Viaggio.Partenza = "..." AND Viaggio.Arrivo = "..." AND Viaggio.Data = '...' AND Viaggio.Chiuso = false
ORDER BY Viaggio.Ora ASC;”;
$result = $conn->query($sql);
// Se ci sono risultati, li visualizziamo

if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "Autista: " . $row["Nome"].” “.$row[Cognome]. "
Partenza da: " . $row["Partenza"]. " alle ore: “. $row["Ora"]. “
Arrivo a: ".$row["Arrivo"]. "
Con Autovettura: ".$row["Autovettura"]. "
Importo viaggio: ".$row["Importo"];
}
} else {
echo "0 results";
}
// Chiudiamo la connessione al database
$conn->close();
?>

Skuola | TV
La Notte Prima degli Esami 2025 in streaming su Skuola.net!

Ospiti, intrattenimento e tutte le news sull'esame di Stato: l'appuntamento è sui nostri canali a partire dalle ore 20:00 del 17 giugno 2025!

Segui la diretta