Prova scritta di ASP
Valutazione On-Line
Classe 5.ta Inf.2. – a.s. 2002/2003
Il Ministero dell’Istruzione Università e Ricerca intende adottare a livello nazionale un sistema di
valutazione on-line che consenta di monitorare periodicamente il livello di preparazione degli
allievi iscritti alla Scuola Secondaria Superiore in merito alle conoscenze di base acquisite nella
materia di Matematica.
A tal proposito si progetti ed implementi un sistema informatico che effettui la somministrazione
on-line di un questionario, a risposte chiuse, rivolto ad un generico allievo di un Istituto Superiore
e nello specifico consenta quanto segue.
1. Autenticazione/Identificazione, secondo le seguenti voci:
o Codice Istituto di appartenenza
o Anno di corso dell’allievo
o Codice allievo
2. Somministrazione questionario
o Verifica che l’allievo non abbia già compilato il questionario
o Compilazione del un questionario di matematica appropriato (uguale per tutte le
scuole ma diverso per ciascun anno di corso)
o Registrazione numero risposte esatte fornite dall’allievo
3. Statistiche (tabellari e/o grafiche)
o Numero di Istituti, per ciascuna categoria, che hanno aderito all’iniziativa
o Numero totale di questionari compilati distribuiti per anno di corso
o Numero totale di questionari compilati distribuiti per tipo di Istituto
o Medie nazionali di risposte esatte distribuite per anno di corso
o Medie nazionali di risposte esatte distribuite per tipo di Istituto
Il candidato, fatte le ipotesi aggiuntive che ritiene necessarie:
a) proponga una soluzione per la creazione del sistema illustrandola facendo una breve analisi
del problema che evidenzi le scelte di progetto essenziali nonché i criteri di codifica delle
informazioni;
b) definisca la struttura del Database (Access/SQL) necessario per supportare l’intera attività
definendo le tabelle coinvolte, elencando per ciascuna, in maniera dettagliata, i campi di cui
sono composte, il tipo di dato associato a ciascun campo ed eventuali relazioni tra tabelle;
c) sviluppi nel dettaglio un’applicazione ASP in grado di gestire le funzionalità richieste ai
punti 1. 2. e ad almeno due voci a scelta relative al punto 3.
Riportare:
a. diagramma di struttura che consenta di visionare gli ambiti dell’applicazione ASP
b. diagramma dei collegamenti in grado di evidenziare i collegamenti statici,
automatici e/o di elaborazione presenti tra le diverse pagine ASP/HTML
dell’applicazione.
c. codice ASP/HTML documentato per ciascuna pagina appartenente all’applicazione
Tempo a disposizione: 3 ore
Materiale consultabile: manuali HTML – VBScript – ASP – SQL HTML
Svolgimento
1. Analisi del problema
Per quanto riguarda la fase di autenticazione si è scelto di memorizzare nel database
inizialmente solo le informazioni che identificano gli Istituti che hanno aderito all’iniziativa. In
tal senso l’autenticazione è da intendersi come verifica che il Codice di Istituto appartenga ad
una scuola riconosciuta.
Ogni Istituto è identificato da un codice univoco la cui composizione è descritta di seguito. Per
semplicità si considerano solo tre tipi di Istituti Superiori:
 Licei
 Istituti Tecnici
 Istituti Professionali
Ad essi viene assegnata una codifica che rispecchia il seguente schema:
Tipo di Istituto | valore numerico di 6 cifre che lo identifica univocamente
Per quanto riguarda il tipo di Istituto vale la codifica riportata in tabella:
Tipo di Istituto
Liceo
Istituto Tecnico
Istituto Professionale
Codifica
LI
IT
IP
Esempio di CodIstituto: LI001034
I dati aggiuntivi che verranno richiesti nella fase di autenticazione (Codice allievo e Classe)
serviranno solo per controllare che l’allievo non abbia già compilato in precedenza il
questionario; in caso negativo verranno registrati in un’apposita tabella del database cui seguirà
la fase di somministrazione del questionario.
Si suppone che ciascun questionario sia formato da 10 quesiti a risposta singola, chiusa, da
selezionarsi tra tre alternative possibili. I questionari si differenziano solo per il contenuto
(domande e risposte associate) non per la struttura. I questionari vengono valutati solo in
termini di numero di quesiti a cui si è risposto in maniera corretta. Tale valore verrà
memorizzato nel record dell’allievo che ha complilato il questionario.
Le statistiche fanno riferimento ai dati memorizzati nel Database fino al momento in cui
vengono richieste. Sono state sviluppate le prime tre statistiche relative al punto 3. del testo. Si è
optato per la loro visualizzazione grafica.
Non viene implementato nessun meccanismo di roll-back che consenta di ripristinare lo stato
iniziale del Database qualora la sequenza di operazioni che portano dall’autenticazione all’invio
del questionario venga interrotta per anomalie di qualsiasi tipo.
2. Struttura del Database
Descrizione Tabelle
Tabella Istituti
Questa tabella contiene l’elenco di tutti gli Istituti abilitati alla somministrazione telematica dei
questionari.
Struttura
 IdIstituto (numerico, chiave primaria)
 CodIstituto (testo, 8 caratteri)
Tabella Allievi
Questa tabella registra gli allievi che compilano ed inviano on-line il questionario. Ogni allievo è
identificato da un determinato codice numerico (CodAllievo) assegnato dall’Istituto di
appartenenza. Viene memorizzato anche l’anno di corso d’ iscrizione dell’allievo ed il numero di
risposte esatte determinato dopo la compilazione del questionario.
Struttura





IdAllievo (numerico, chiave primaria)
CodAllievo (intero)
IdIstituto (numerico, chiave esterna)
AnnoCorso (intero: 1,2,3,4,5)
NroRispEsatte (intero: 1..10)
Tabella Questionari
Questa tabella contiene 10 quesiti che compongono il questionario per un determinato anno di
corso, tre risposte possibili per ciascun quesito e l’indicazione della risposta corretta.
Struttura






IdQuesito (numerico, chiave primaria)
Quesito (testo, 255 caratteri)
Risposta1 (testo, 255 caratteri)
Risposta2 (testo, 255 caratteri)
Risposta3 (testo, 255 caratteri)
RispostaEsatta (intero: 1..3)
Progettazione e sviluppo applicazione ASP
Diagramma di struttura

I
Inserimento dati
autenticazione
HTM
Index.htm
Consente il
riconoscimento
dell’Istituto e la
registrazione
dell’allievo.
A
Q
Somministrazione
questionario
ASP
S
ASP
Autent.asp
Questionario?.asp
Visualizza Statistiche
ASP
Statistiche.asp
Q1
Elabora risposte
questionario
ASP
srvQuestionario.asp

Diagramma dei collegamenti
I
A
Q
Q1
S
Legenda
Collegamento HTML
Collegamento da form che richiama una pagina ASP di elaborazione dei dati introdotti
Collegamento HTML temporizzato
1. Fase di Autenticazione/Identificazione
o Inserimento dati di autenticazione/identificazione
Consente l’inserimento dei seguenti
dati:
 Codice Istituto assegnato dal
Ministero e comunicato a
ciascuna scuola aderente
all’iniziativa
 Codice Allievo assegnato
dall’Istituto frequentato
dall’allievo
 Classe di appartenenza
dell’allievo
Index.htm
Codice ASP
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>Ministero Universita e Ricerca - Valutazione OnLine </TITLE>
</HEAD>
<BODY bgcolor=bisque>
<h3 align=center>
<i>Ministero dell'Istruzione Università e Ricerca<i><br>
</h3>
<h2 align=center>
Valutazione On Line<br>
</h2>
<hr>
<div align=center>
<b>Autenticazione</b>
<form method=post action=srvAutenticazione.asp>
Codice Istituto: <input type=text name=codistituto><br>
Codice allievo: <input type=text name=codallievo><br>
Classe:  
<select name=anno>
<option>
<option>1
<option>2
<option>3
<option>4
<option>5
</select>
<br><br>
<input type=reset name=reset value=Cancella>
<input type=submit name=submit value=Autentica><br>
</form>
</div>
<hr>
</BODY>
</HTML>
o Verifica corrispondenza Codice Istituto (autenticazione) e registrazione dati allievo
(identificazione)
Implementa le seguenti fasi:
 l’autenticazione
dell’allievo tramite il
Codice di Istituto
verificando se quest’ultimo
è presente tra quelli
registrati nel Databasse
dell’applicazione
 identificazione allievo e
conseguente registrazione del
Codice Allievo e della Classe
nella tabella Allievi del
Database dell’applicazione
srvAutenticazione.asp
Codice ASP
<%@ Language=VBScript %>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
</HEAD>
<!--#INCLUDE FILE="adovbs.inc"-->
<BODY BGCOLOR=BISQUE>
<h3 align=center>
<i>Ministero dell'Istruzione Università e Ricerca<i><br>
</h3>
<h2 align=center>
Valutazione On Line<br>
</h3>
<hr>
<%
Session("CodIstituto")=Request.Form("codistituto")
Session("CodAllievo")=Request.Form("codallievo")
Session("Anno")=Request.Form("anno")
Dim objConn
Dim objRsIstituti
Dim objRsAllievi
Dim trovato
Dim IdAllievo
Set objConn=Server.CreateObject("ADODB.Connection")
objConn.ConnectionString="DRIVER={Microsoft Access Driver (*.mdb)};" & _
"DBQ=" & Server.MapPath("valutazione.mdb")
objConn.Open
Set objRsIstituti=Server.CreateObject("ADODB.Recordset")
objRsIstituti.Open "Istituti",objConn,,,adCmdTable
' Ricerca codice Istituto nel Database
Do While Not objRsIstituti.EOF
If (objRsIstituti("CodIstituto")=Session("CodIstituto"))Then
trovato=true
Exit Do
End If
objRsIstituti.MoveNext
Loop
' Registra il nuovo accesso
Set objRsAllievi=Server.CreateObject("ADODB.Recordset")
objRsAllievi.Open "Allievi",objConn,adOpenKeyset,adLockOptimistic,adCmdTable
if Not objRsAllievi.EOF Then
objRsAllievi.MoveLast
IdAllievo=objRsAllievi("IdAllievo")+1
Else
IdAllievo=1
End If
objRsAllievi.AddNew
objRsAllievi("IdAllievo")=IdAllievo
objRsAllievi("CodAllievo")=Session("CodAllievo")
objRsAllievi("IdIstituto")=objRsIstituti("IdIstituto")
objRsAllievi("AnnoCorso")=Session("Anno")
objRsAllievi.Update
If trovato=true Then
Response.Write "<center>"
Response.Write "<h2>Utente identificato ... attendere avvio questionario.</h2>"
Response.Write "</center>"
Response.Write "<meta http-equiv=refresh content='5; url=questionario1.asp'>"
Else
Response.Write "<center>"
Response.Write "<h2>Codice Istituto non corretto !!!</h2>"
Response.Write "</center>"
Response.Write "<meta http-equiv=refresh content='5; url=index.htm'>"
End If
objRsAllievi.Close
Set objRsAllievi=Nothing
%>
<hr>
</BODY>
</HTML>
2. Questionario
o Somministrazione questionario
Implementa le seguenti fasi:
 raccolta delle risposte ai singoli quesiti per
mezzo di pulsanti di opzione mutuamente
esclusivi
 invio delle risposte al server (nello
specifico alla pagina srvQuestionario.asp
che si occuperà della loro vavalutazione)
Codice ASP
<%@ Language=VBScript %>
<HTML>
<HEAD></HEAD>
<BODY bgcolor=bisque>
<h3 align=center>
<i>Ministero dell'Istruzione Università e Ricerca<i><br>
</h3>
<h2 align=center>
Valutazione On Line<br></h2>
<hr>
<form method=post action=srvQuestionario.asp>
<%
Dim objConn
Dim objRsQuestionario
Questionario.asp
Set objConn=Server.CreateObject("ADODB.Connection")
objConn.ConnectionString="DRIVER={Microsoft Access Driver (*.mdb)};" & _
"DBQ=" & Server.MapPath("valutazione.mdb")
objConn.Open
Set objRsQuestionario=Server.CreateObject("ADODB.Recordset")
objRsQuestionario.Open "Questionario1",objConn,,,adCmdTable
' Visualizzazione quesiti
Do While Not objRsQuestionario.EOF
Response.Write "<b>" & objRsQuestionario("IdQuesito") & ".</b>" & "  "
Response.Write objRsQuestionario("Quesito") & "<br>"
Response.Write "<blockquote>"
Response.Write "<input type=radio name=" & objRsQuestionario("IdQuesito") & " value=1>  "
Response.Write objRsQuestionario("Risposta1") & "<br>"
Response.Write "<input type=radio name=" & objRsQuestionario("IdQuesito") & " value=2>  "
Response.Write objRsQuestionario("Risposta2") & "<br>"
Response.Write "<input type=radio name=" & objRsQuestionario("IdQuesito") & " value=3>  "
Response.Write objRsQuestionario("Risposta3") & "<br><br>"
Response.Write "</blockquote>"
objRsQuestionario.MoveNext
Loop
%>
<center>
<hr align=center width=80%>
<input type=reset name=reset value=Cancella>
<input type=submit name=submit value="Invia questionario"><br>
</center>
</form>
<hr>
</BODY>
</HTML>
o Elaborazione risposte
Implementa le seguenti fasi:
 conteggio del numero delle risposte
corrette fornite ai singoli quesiti
 registrazione del numero di
risposte esatte in corrispondenza del
record dell’allievo che ha compilato
il questionario
Codice ASP
<%@ Language=VBScript %>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
</HEAD>
<BODY BGCOLOR=BISQUE>
<h3 align=center>
<i>Ministero dell'Istruzione Università e Ricerca<i><br>
</h3>
<h2 align=center>
Valutazione On Line<br>
</h2>
<hr>
<%
Dim objConn
Dim objRsAlliev
Dim objRsQuestionario
Dim RispEsatte
Dim trovato
Set objConn=Server.CreateObject("ADODB.Connection")
objConn.ConnectionString="DRIVER={Microsoft Access Driver (*.mdb)};" & _
"DBQ=" & Server.MapPath("valutazione.mdb")
objConn.Open
Set objRsQuestionario=Server.CreateObject("ADODB.Recordset")
objRsQuestionario.Open "Questionario1",objConn,,,adCmdTable
srvQuestionario.asp
' Determina il numero delle risposte esatte
RispEsatte=0
Do While Not objRsQuestionario.EOF
If (cstr(objRsQuestionario("RispostaEsatta"))=Request.Form(objRsQuestionario("IdQuesito")))Then
RispEsatte=RispEsatte+1
End If
objRsQuestionario.MoveNext
Loop
Session("RispEsatte")=RispEsatte
Response.Write "<center>"
Response.Write "<h2>Totale risposte esatte: " & RispEsatte &"</h2>"
Response.Write "<form method=post action=statistiche.asp >"
Response.Write "<input type=submit value=Statistiche>"
Response.Write "</form>"
Response.Write "</center>"
' Aggiorna il record dell'allievo con il numero di risposte esatte
Set objRsAlliev=Server.CreateObject("ADODB.Recordset")
objRsAlliev.Open "Allievi",objConn,adOpenKeyset, ,adCmdTable
trovato=false
objRsAlliev.MoveFirst
Do While Not objRsAlliev.EOF
If (objRsAlliev("CodAllievo")= Cint((Session("CodAllievo"))))Then
trovato=true
objRsAlliev("NroRispEsatte")=RispEsatte
objRsAlliev.Update
Exit Do
End If
objRsAlliev.MoveNext
Loop
If trovato=false Then
Response.Write "ERRORE !!! Codice allievo non trovato !!!"
End If
%>
<hr>
</BODY>
</HTML>
3. Statistiche
Visualizza i grafici delle seguenti
distribuzioni statistiche:
 Numero di Istituti, per
ciascuna categoria, che
hanno aderito all’iniziativa
 Numero
totale
di
questionari
compilati
distribuiti per anno di
corso
 Numero
totale
di
questionari
compilati
distribuiti per tipo di
Istituto
Statistiche.asp
Codice ASP
<%@ Language=VBScript %>
<HTML>
<HEAD>
<%
<!-- Display a single bar -->
Sub Display_Bar (ByVal strLabel, ByVal iValue, ByVal strCaption)
Response.Write("<tr>")
Response.Write("<td width=200 >")
Response.Write("<center><font size=1>" & strLabel & "</font></center>")
Response.Write("</td>")
Response.Write("<td height=10>")
Response.Write("<img src=images/blu.gif height=15 width="& iValue & ">")
Response.Write("</td>")
Response.Write("<td width=150>")
Response.Write("<center><font size=1>"& iValue & Perc(iAbsPercValue) &"</font></center>")
Response.Write("</td>")
Response.Write("</tr>")
End Sub
<!-- Display the Graph -->
Sub Display_Bars(ByVal arrLabels, ByVal arrValues, ByVal strCaption, ByVal iBorder, ByVal iAbsPercValue)
If (iAbsPercValue=1) Then
iTot=0
For i=0 to UBound(arrValues)
iTot=iTot+arrValues(i)
Next
For i=0 to UBound(arrValues)
arrValues(i)=CInt(10000*arrValues(i)/iTot)/100
Next
End If
Response.Write("<table border=" & CStr(iBorder)& ">")
Response.Write("<caption align=up><font size=2 color=blue><i>" &strCaption &"</i></font></caption>")
For bar=LBound(arrLabels) to UBound(arrLabels)
Display_Bar arrLabels(bar), arrValues(bar), strCaption
Next
Response.Write("</table>")
End Sub
<!-- Generate the % string if needed -->
Function Perc(ByVal iAbsPercValue)
If (iAbsPercValue=1) Then
Perc=" %"
Else
Perc=""
End If
End Function
%>
</HEAD>
<BODY bgcolor=bisque>
<h3 align=center>
<i>Ministero dell'Istruzione Università e Ricerca<i><br>
</h3>
<h2 align=center>
Valutazione On Line<br>
</h3>
<table border=1 width=100% height=100%>
<tr height=20%>
<td valign=center align=center>
<b><i> Numero di Istituti, per ciascuna categoria, che hanno aderito
all'iniziativa</i></b>
</td>
<td valign=center>
<%
Dim objConn
Dim objRsIstituti
Dim objRsAllievi
Set objConn=Server.CreateObject("ADODB.Connection")
objConn.ConnectionString="DRIVER={Microsoft Access Driver (*.mdb)};" & _
"DBQ=" & Server.MapPath("valutazione.mdb")
objConn.Open
Dim arrLabels(2)
Dim arrValues(2)
arrLabels(0)="Licei"
arrLabels(1)="Istituti Tecnici"
arrLabels(2)="Istituti Professionali"
arrValues(0)=0
arrValues(1)=0
arrValues(2)=0
Set objRsIstituti=Server.CreateObject("ADODB.Recordset")
objRsIstituti.Open "Istituti",objConn, , ,adCmdTable
Set objRsAllievi=Server.CreateObject("ADODB.Recordset")
objRsAllievi.Open "Allievi",objConn, , ,adCmdTable
objRsIstituti.MoveFirst
Do While Not objRsIstituti.EOF
Select Case Mid(objRsIstituti("CodIstituto"),1,2)
Case "LI"
arrValues(0)=arrValues(0)+1
Case "IT"
arrValues(1)=arrValues(1)+1
Case "IP"
arrValues(2)=arrValues(2)+1
End Select
objRsIstituti.MoveNext
Loop
strCaption="# Istituti per categoria" ' Caption
iBorder=0 ' 0 = no border; 1 = border
iAbsPercValue=1 ' 0 = absolute value; 1 = % value
Display_Bars arrLabels, arrValues, strCaption, iBorder, iAbsPercValue
%>
</td>
</tr>
<tr height=20%>
<td valign=center align=center>
<b><i> Numero totale di questionari compilati distribuiti per anno di corso</i></b>
</td>
<td valign=center>
<%
Dim arrLabelz(4),arrValuez(4)
arrLabelz(0)="I"
arrLabelz(1)="II"
arrLabelz(2)="III"
arrLabelz(3)="IV"
arrLabelz(4)="V"
arrValuez(0)=0
arrValuez(1)=0
arrValuez(2)=0
arrValuez(3)=0
arrValuez(4)=0
objRsAllievi.MoveFirst
Do While Not objRsAllievi.EOF
Select Case objRsAllievi("AnnoCorso")
Case 1
arrValuez(0)=arrValuez(0)+1
Case 2
arrValuez(1)=arrValuez(1)+1
Case 3
arrValuez(2)=arrValuez(2)+1
Case 4
arrValuez(0)=arrValuez(3)+1
Case 5
arrValuez(1)=arrValuez(4)+1
End Select
objRsAllievi.MoveNext
Loop
strCaption="# Questionari per anno di corso" ' Caption
iBorder=0
' 0 = no border; 1 = border
iAbsPercValue=1 ' 0 = absolute value; 1 = % value
Display_Bars arrLabelz, arrValuez, strCaption, iBorder, iAbsPercValue
%>
</td>
</tr>
<tr height=20%>
<td valign=center align=center>
<b><i> Numero totale di questionari compilati distribuiti per tipo di Istituto</i></b>
</td>
<td valign=center>
<%
Dim arrValuew(2)
arrValuew(0)=0
arrValuew(1)=0
arrValuew(2)=0
objRsAllievi.MoveFirst
Do While Not objRsAllievi.EOF
objRsIstituti.MoveFirst
Do While Not objRsIstituti.EOF
If objRsAllievi("IdIstituto")=objRsIstituti("IdIstituto") Then
Exit Do
End If
objRsIstituti.MoveNext
Loop
Select Case Mid(objRsIstituti("CodIstituto"),1,2)
Case "LI"
arrValuew(0)=arrValuew(0)+1
Case "IT"
arrValuew(1)=arrValuew(1)+1
Case "IP"
arrValuew(2)=arrValuew(2)+1
End Select
objRsAllievi.MoveNext
Loop
strCaption="# Questionari per tipo di Istituto" ' Caption
iBorder=0 ' 0 = no border; 1 = border
iAbsPercValue=1 ' 0 = absolute value; 1 = % value
Display_Bars arrLabels, arrValuew, strCaption, iBorder, iAbsPercValue
%>
</td>
</tr>
</table>
<hr>
</BODY>
</HTML>