Seconda prova informatica 2015
Seconda prova informatica 2015 svolta
Tema di: Informatica
indirizzo: INFORMATICA E TELECOMUNICAZIONI (Nuovo ordinamento)
Anno scolastico: 2014/2015Testo, svolgimento e spiegazione passo passo della seconda prova Informatica 2015 esami di stato per l'indirizzo Informatico di un Istituto Tecnico Industriale visualizza e scarica questa pagina in formato PDF
Testo della prova
[nascondi]
Il candidato svolga la prima parte della prova e risponda a due tra i quesiti proposti nella
seconda parte.
su
Prima Parte
Si vuole realizzare una web community per condividere dati e commenti relativi a eventi dal vivo di diverse categorie, ad esempio concerti, spettacoli teatrali, balletti, ecc. che si svolgono in Italia.
Gli eventi vengono inseriti sul sistema direttamente dai membri stessi della community, che si registrano sul sito fornendo un nickname, nome, cognome, indirizzo di e-mail e scegliendo una o più categorie di eventi a cui sono interessati.
Ogni membro iscritto riceve periodicamente per posta elettronica una newsletter, emessa automaticamente dal sistema, che riporta gli eventi delle categorie da lui scelte, che si svolgeranno nella settimana seguente nel territorio provinciale dell'utente.
I membri registrati possono interagire con la community sia inserendo i dati di un nuovo evento, per il quale occorre specificare categoria, luogo di svolgimento, data, titolo dell’evento e artisti coinvolti, sia scrivendo un post con un commento ed un voto (da 1 a 5) su un evento.
Il sito della community offre a tutti, sia membri registrati sia utenti anonimi, la consultazione dei dati on line, tra cui:
- visualizzazione degli eventi di un certo tipo in ordine cronologico, con possibilità di filtro per territorio di una specifica provincia
- visualizzazione di tutti i commenti e voti relativi ad un evento.
Il candidato, fatte le opportune ipotesi aggiuntive, sviluppi
- un’analisi della realtà di riferimento individuando le possibili soluzioni e scelga quella che a suo motivato giudizio è la più idonea a rispondere alle specifiche indicate
- uno schema concettuale della base di dati
- uno schema logico della base di dati
- la definizione in linguaggio SQL di un sottoinsieme delle relazioni della base di dati in cui siano presenti alcune di quelle che contengono vincoli di integrità referenziale e/o vincoli di dominio, laddove presenti
- le seguenti interrogazioni espresse in linguaggio SQL:
- elenco degli eventi già svolti, in ordine alfabetico di provincia
- elenco dei membri che non hanno mai inserito un commento
- per ogni evento il voto medio ottenuto in ordine di categoria e titolo
- i dati dell'utente che ha registrato il maggior numero di eventi
- il progetto della pagina dell’interfaccia WEB che permetta ad un utente registrato di svolgere le operazioni specificate
- la codifica in un linguaggio a scelta di un segmento significativo dell'applicazione Web che consente l'interazione con la base di dati.
Seconda parte
Il candidato (che potrà eventualmente avvalersi delle conoscenze e competenze maturate attraverso esperienze di alternanza scuola-lavoro, stage o formazione in azienda) risponda a due quesiti a scelta tra quelli sotto riportati:- In relazione al tema proposto nella prima parte, descriva in che modo è possibile integrare lo schema concettuale sopra sviluppato in modo da poter gestire anche inserzioni pubblicitarie. Ogni inserzione è costituita da un testo e un link e può essere correlata a una o più categorie di eventi in modo da essere visualizzata in funzione dei contenuti visitati e delle preferenze degli utenti.
- In relazione al tema proposto nella prima parte, progetti un layout di pagina idoneo a garantire un aspetto grafico comune a tutte le pagine dell'applicazione e ne codifichi alcuni elementi in un linguaggio per la formattazione di pagine Web a sua scelta.
- Si consideri la seguente tabella:
Il candidato verifichi le proprietà di normalizzazione e proponga uno schema equivalente che rispetti la 3a Forma Normale, motivando le scelte effettuate.Cognome Nome Telefono Livello Tutor Tel-tutor Anticipo-versato Verdi Luisa 345698741 avanzato Bianca 334563215 100 Neri Enrico 348523698 avanzato Carlo 369852147 150 Rosi Rosa 347532159 base Alessio 333214569 120 Bianchi Paolo 341236547 base Carlo 369852147 150 Rossi Mario 349567890 base Carlo 369852147 90 Neri Enrico 348523698 complementi Dina 373564987 100 - Nella formalizzazione di uno schema concettuale, le associazioni tra entità sono caratterizzate da una cardinalità: esponga il significato e la casistica che si può presentare.
su
Analisi della realtà di riferimento(bozza)
[nascondi]
Si userà il DBMS MYSQL e il linguaggio php per l'implementazione dell'interfaccia grafica (pagina web) e delle interrogazioni al database.
Si ipotizza quindi di poter testare il funzionamento del software in un ambiente preinstallato in locale che comprende una piattaforma integrata di sviluppo web (come ad esempio EasyPhp) contenente:
- il server web Apache
- il server di database MySQL
- un interprete di script php
- e l'interfaccia grafica phpMyAdmin per la creazione delle tabelle e il test delle query in SQL.
Ipotesi aggiuntive:
- I membri della web community possono aggiungere un solo post di commento per ogni evento presente, e questo comprende anche un voto obbligatorio all'atto del commento.
- La registrazione dei membri potrà avvenire indicando sia il nickname (opzionale) che l'email (che invece sarà obbligatoria) e avrà un numero minimo e massimo di caratteri alfanumerici e non e dovrà contenere almeno un carattere numerico e un carattere non alfanumerico (@,# ecc.); sarà inoltre memorizzata in forma cifrata utilizzando un algoritmo di cifratura come lo SHA1. Il controllo sulla lunghezza e sulla presenza di caratteri che la rafforzano sarà effettuato dal codice php del front end prima della cifratura.
Schema concettuale web community
[nascondi]
Note: Il campo nome dell'entità luogo contiene ad esempio: Stadio di San Siro.
Schema logico
[nascondi]
La progettazione logica sarà fatta elencando le tabelle e le relazioni tra le tabelle per la creazione nel database della web community.
su
tabelle:
relazioni:*
Tabella 1 | Tabella 2 | Relazione | tramite |
---|---|---|---|
categorie | membri | M-N | memcat |
eventi | categorie | M-1 | idcategoria |
eventi | luoghi | M-1 | idluogo |
eventi | membri | M-1 | idmembro |
commenti | eventi | M-1 | idevento |
commenti | membri | M-1 | idmembro |
artisti | eventi | M-N | arteven |
^
* NB: le relazioni tra le tabelle, sono descritte in maniera non grafica poichè la progettazione concettuale descrive già
ampiamente le associazioni tra le entità; ciononostante è opportuno descriverle indicando, per ogni relazione, la maniera nella quale sono collegate, e cioè: o tramite una chiave esterna (nel caso di relazioni uno a uno e uno a molti), oppure tramite un'altra tabella (nel caso di relazione molti a molti).
In questo schema quindi la colonna tramite assume proprio:
- il nome del campo chiave esterna (relazioni 1-1, m-1) oppure
- il nome della tabella che fa da "ponte" tra le due.
su
Definizione delle relazioni
[nascondi]
La definizione delle relazioni è fatta per tre delle tabelle esistenti.
In particolare, si fornisce il codice SQL per la creazione della tabella membri, della tabella eventi e della tabella commenti collegata ad entrambe le tabelle precedenti tramite le chiavi esterne idevento e idmembro come da schema logico.
Si noti che il campo password ha un numero massimo di 255 caratteri perché deve contenere la password in forma cifrata che è molto più lunga rispetto a quella in chiaro; per altre considerazioni sulla password vedi ipotesi aggiuntive.
Si suppone che esistano già la tabella categorie con chiave primaria idcategoria e la tabella luoghi con chiave primaria idluogo.
create table membri ( idmembro int unsigned not null,
);nome varchar(20), cognome varchar(30), nickname varchar(30), email varchar(30), password varchar(255), primary key (idmembro), |
Si noti che il campo password ha un numero massimo di 255 caratteri perché deve contenere la password in forma cifrata che è molto più lunga rispetto a quella in chiaro; per altre considerazioni sulla password vedi ipotesi aggiuntive.
create table eventi (
idevento int unsigned not null auto_increment,
);titolo varchar(255), idcategoria int unsigned, idluogo int unsigned, data date, primary key (idevento), foreign key (idcategoria) references categorie, foreign key (idluogo) references luoghi |
Si suppone che esistano già la tabella categorie con chiave primaria idcategoria e la tabella luoghi con chiave primaria idluogo.
create table commenti (
idcommento int unsigned not null auto_increment,
);idevento int unsigned, testo text, idmembro int unsigned, voto int, check(voto>=1 and voto<=5), primary key (idcommento), foreign key (idevento) references eventi |
Query SQL
[nascondi]- elenco degli eventi già svolti, in ordine alfabetico di provincia
NB: la funzione curdate() di MySql restituisce la data correnteSELECT titolo, categoria, luogo, data
FROM eventi, categorie, luoghi
WHERE (eventi.idcategoria=categorie.idcategoria)
and (eventi.idluogo=luoghi.idluogo)
and (data<curdate())
ORDER BY provincia - Elenco dei membri che non hanno mai inserito un commento
SELECT nome, cognome, nickname
FROM membri
WHERE where idmembro NOT IN
(SELECT idmembro
FROM membri, commenti
where membri.idmembro=commenti.idmembro) - per ogni evento il voto medio ottenuto in ordine di categoria e titolo;
SELECT AVG(voto), titolo, categoria, data
FROM eventi, commenti, categorie
WHERE (commenti.idevento=eventi.idevento)
and (categorie.idcategoria=eventi.idcategoria)
GROUP BY idevento
ORDER BY titolo, categoria - i dati dell'utente che ha registrato il maggior numero di eventi
NB: questa query (che sicuramente si può fare in un altro modo magari migliore ma forse più complicato) è stata fatta nel modo seguente:SELECT count(idevento) as numeroeventi, nome, cognome, nickname
FROM membri, eventi
WHERE (membri.idmembro=eventi.idmembro)
GROUP BY idmembro
ORDER BY numeroeventi DESC
limit 1
- si immagini di fare un elenco di eventi e di raggrupparli per ogni membro della web community (group by idmembro),
- si conta quanti sono gli eventi di quel membro (count(idevento)) ,
- si ordina in maniera decresente (DESC e cioè dal più grande al più piccolo) in base a questo numero (numeroeventi) e
- si limita la visualizzazione solo alla prima riga che corrisponde membro col maggior numero di eventi di cui si visualizzano nome,cognome e nickname
NB: le query qui presenti non sono state provate, quindi sono possibili errori od omissioni.
su
Progetto Home Page Web community
[nascondi]
Il progetto della Home Page per la web community si può fare semplicemente disegnando i componenti grafici importanti della pagina web ed è attualmente in lavorazione
su
su
Codifica in linguaggio php
[nascondi]
La codifica della parte di php è attualmente in lavorazione
su
su
Seconda parte
[nascondi]- Per integrare lo schema concettuale prevedendo la possibilità di inserire delle inserzioni pubblicitarie sulla base delle preferenze degli utenti basta inserire un'entità INSERZIONE con attributi: idinserzione (chiave primaria), testo, link e un'associazione (con verbo appartenere) con l'entità CATEGORIA che fa riferimento alla categoria di eventi; questa associazione deve essere del tipo Molti a Molti (a ogni inserzione possono corrispondere più categorie e ogni categoria può avere più inserzioni. (In un compito d'esame è opportuno inserire sia questa descrizione che la progettazione concettuale integrata anche parziale).
- in lavorazione
- in lavorazione
- in lavorazione
su