Il seguente articolo propone lo svolgimento della traccia della prova suppletiva di informatica proposta come tema dell’esame di stato nel 2017 per l’indirizzo di studi Indirizzo: ITIA – INFORMATICA E TELECOMUNICAZIONI ARTICOLAZIONE INFORMATICA
PRIMA PARTE
Una scuola superiore vuole gestire le assenze degli studenti. Con ‘assenze’ si intendono sia la mancata presenza per un giorno intero, sia l’ingresso in ritardo (con relativo orario), sia l’uscita anticipata (con relativo orario). A questo scopo, la scuola richiede lo sviluppo di una applicazione Web che utilizza un database nel quale sono memorizzate, relativamente all’anno scolastico in corso, le seguenti informazioni:
-per ogni studente il nome, la data di nascita, la classe frequentata, lo username e la password di accesso per la consultazione, da parte dello studente e dei suoi genitori, delle assenze personali;
-le assenze, delle quali si deve registrare la data di effettuazione e la tipologia (giorno intero, ingresso in ritardo con relativo orario, uscita anticipata con relativo orario) ed il docente che l’ha inserita;
-le classi dell’istituto, con la tipologia (liceo o tecnico o professionale), l’indirizzo/articolazione/opzione di appartenenza (esempio 1: tecnico indirizzo “Informatica e Telecomunicazioni” articolazione “Informatica”; esempio 2: professionale indirizzo “Servizi per l’enogastronomia e l’ospitalità alberghiera” articolazione “Enogastronomia” opzione “Prodotti dolciari artigianali e industriali”; esempio 3: liceo indirizzo “Classico”);
-le ore di lezione effettivamente svolte dalle classi nel corso dell’anno: per ciascuna ora di lezione il docente registra data, ora, materia, argomento trattato. Eventuali docenti co- presenti (es. docente di laboratorio, docente di sostegno) firmano la loro presenza in aula accedendo autonomamente alla piattaforma con proprio username e password.
Il candidato, fatte le opportune ipotesi aggiuntive, sviluppi:
1. un’analisi della realtà di riferimento, giungendo alla definizione di uno schema concettuale della base di dati che, a suo motivato giudizio, sia idoneo a gestire la realtà presentata;
2. il relativo schema logico;
3. le seguenti interrogazioni espresse in linguaggio SQL:
a. elencare tutte le assenze dall’inizio dell’anno di un certo studente con la relativa data;
b. elencare gli studenti che non hanno mai fatto assenze;
c. visualizzare l’elenco degli studenti che hanno superato un certo numero di ore di assenza, riportando cognome, nome e classe di appartenenza;
4. il progetto di massima della struttura funzionale dell’applicazione Web, realizzando, con
appropriati linguaggi a scelta sia lato client che lato server, la porzione dell’applicazione che consente di gestire l’accesso riservato da parte di uno studente, per visualizzare tutte le proprie assenze dall’inizio dell’anno con la relativa data (vedi interrogazione a. del punto 3).
Soluzione
Per realizzare un documento di progetto valido per il sistema informativo proposto nel quesito d’esame, utilizziamo le seguente metodologia composta da tre fasi:
- Attori
- Casi d’uso
- Modello Concettuale (Schema E-R)
Progettazione:
- Modello Logico (Schema Relazionale)
- Interfacce
- Archiettura
Implementazione
- SQL
- PHP
- HTML
Analisi dei requisiti
1.1 Attori
Nome | Descrizione |
---|---|
Docente | Docente che inserisce le assenze degli studenti e le ore di lezione nelle classi |
Studente | Studente che accede alla piattaforma utilizzando le sue credenziali (username e password) per controllare le proprie assenze ed eventualmente gli argomenti delle lezioni sostenute dai docenti |
Genitore | Genitore che accede alla piattaforma utilizzando le sue credenziali (username e password) per controllare le proprie assenze dei propri figli |
1.2 Casi d’uso
In questo paragrafo è presente la descrizione delle funzionalità che il sistema informativo offre agli attori per compiere varie operazioni.
Scenario Studente
Scenario Docente
1.3 Modello Concettuale (Schema ER)
Per realizzare un modello concettuale dei dati utilizziamo lo schema E-R:
Questo schema viene corredato dagli opportuni dizionari:
Dizionario delle entità
Entità | Descrizione | Attributi | Identificatori |
---|---|---|---|
Istituto | Istituto che contiene le classi di studenti gestite dai docenti | Codice,Nome, Indirizzo | Codice |
Tipo Istituto | Tipologia dell’istituto. Potrebbe essere Liceo, Professionale oppure Tecnico. | Codice, Descrizione | Codice |
Articolazione | Tipo di articolazione della classe, potrebbe essere ad esempio Informatica o Enogastronomia ecc. | Codice, Descrizione | Codice |
Indirizzo | Tipo di indirizzo della classe, potrebbe essere ad esempio Informatica e Telecomunicazioni o Servizi per l’enogastronomia ecc. | Codice, Descrizione | Codice |
Opzione | Opzione di appartenenza della classe, potrebbe essere ad esempio Prodotti dolciari artigianali e industriali ecc. | Codice, Descrizione | Codice |
Classe | Classe composta da più studenti ai quali vengono erogate le lezioni e per i quali è necessario tenere traccia delle assenze | Codice, Numero, Sezione, Piano | Codice |
Studente | Studente che frequenta l’istituto ed è presente in una classe | Codice, Nome, Data Nascita, Username, Password | Codice |
Studente | Studente che frequenta l’istituto ed è presente in una classe | Codice, Nome, Data Nascita, Username, Password | Codice |
Progettazione
Modello logico
Come modello logico per rappresentare i dati, prima espressi nel modello concettuale utilizzeremo lo schema relazionale. Dopo aver applicato in maniera opportuna le regole di derivazione lo schema risulta il seguente:
Diagramma delle classi
Interfacce
Del sistema informatico proposto si sceglie di implementare le seguenti interfacce:
Implementazione
Riporto il codice SQL per implementare parte dello schema relazionale prodotto precedentemente.
CREATE TABLE TIPOISTITUTO( CODICE INT PRIMARY KEY, DESCRIZIONE VARCHAR NOT NULL ); CREATE TABLE ISTITUTO ( CODICE INT PRIMARY KEY, NOME VARCHAR NOT NULL, INDIRIZZO VARCHAR NOT NULL, CODTIPOISTITUTO INT NOT NULL, FOREIGN KEY (CODTIPOISTITUTO) REFERENCES TIPOISTITUTO(CODICE)); CREATE TABLE TIPOISTITUTO( CODICE INT PRIMARY KEY, DESCRIZIONE VARCHAR NOT NULL ); CREATE TABLE ARTICOLAZIONE( CODICE INT PRIMARY KEY, DESCRIZIONE VARCHAR NOT NULL ); CREATE TABLE INDIRIZZO( CODICE INT PRIMARY KEY, DESCRIZIONE VARCHAR NOT NULL ); CREATE TABLE OPZIONE( CODICE INT PRIMARY KEY, DESCRIZIONE VARCHAR NOT NULL ); CREATE TABLE DOCENTE( CODICE INT PRIMARY KEY, DESCRIZIONE VARCHAR NOT NULL, NOME VARCHAR NOT NULL, DATANASCITA DATE NOT NULL, USERNAME VARCHAR NOT NULL, PASSWORD VARCHAR NOT NULL ); CREATE TABLE CLASSE( CODICE INT PRIMARY KEY, PIANO CHAR NOT NULL, SEZIONE VARCHAR NOT NULL, CODISTITUTO INT NOT NULL, CODARTICOLAZIONE INT NOT NULL, CODINDIRIZZO INT NOT NULL, CODOPZIONE INT NOT NULL, FOREIGN KEY (CODISTITUTO) REFERENCES ISTITUTO(CODICE), FOREIGN KEY (CODARTICOLAZIONE ) REFERENCES ARTICOLAZIONE(CODICE), FOREIGN KEY (CODINDIRIZZO) REFERENCES INDIRIZZO(CODICE), FOREIGN KEY (CODOPZIONE) REFERENCES OPZIONE(CODICE));
Possiamo in seguito procedere con l’implementazione delle query in linguaggio SQL richieste:
a. elencare tutte le assenze dall’inizio dell’anno di un certo studente con la relativa data;
SELECT a.Codice, a.Data, a.NumeroOra FROM Assenza a, Studente s WHERE s.nome = [Nome] AND s.Codice = a.CodStudente AND a.Data > [InizioAnno] AND a.Data <[FineAnno]
b. elencare gli studenti che non hanno mai fatto assenze;
SELECT s.Codice,s.Nome FROM Assenza a, Studente s WHERE s.Codice NOT IN (SELECT s.Codice FROM Assenza a, Studente s WHERE s.Codice = a.CodStudente)
Dopo aver implementato le query possiamo procedere all’implementazione dell’applicazione web.
login.html
<!DOCTYPE html> <!-- Pagina per accedere all'applicazione web per la gestione delle assenze --> <html> <head> <title>Gestione Assenze - LOGIN</title> </head> <body> <center><h1>Gestione Assenze</h1></center> <center><h2>Login</h2></center> <hr/> <form action="login.php" method="POST"> Username: <input type="text" name="txtUsername"><br/> Password:<input type="password" name="txtPassword"><br/> <input type="submit" value="LOGIN"> </form> </body> </html>
login.php
<?php //Connessione alla base datiusername = password = sqlQuery = "SELECT * FROM Studente WHERE username='". password."'"; con->query( result) == "0"){ echo "il nome utente non esiste"; }else{ //l'utente esiste redirect alla home page header('Location: gestione_studente.html'); exit(); } ?>
Comments
comments