grafico dei punteggi

L'accesso a questa sezione potrebbe essere di interesse per tutti gli utenti, infatti i risultati degli studenti di una classe potrebbero essere confrontati con quelli dell'intera popolazione scolastica, cosė come uno studente potrebbe voler esaminare i suoi punteggi rispetto a quelli ottenuti dall'intera classe.

In questa sezione si costruisce un istogramma dei punteggi, un grafico che sulle ascisse riporta il punteggio e in ordinata riporta il numero di studenti che hanno conseguito quel punteggio.

Per rappresentare una barra del'istogramma si assegna, in una opportuna scala, un valore alla proprietà height di un elemento DIV.

Per utilizzare questa pagina inserire un link nella pagina cui accede il docente dopo l'autenticazione.

Nel file creaDB.php aggiungere la query di creazione tabella:

<?php

require("account.php");

$con = mysql_connect($Sweb,$utente,$pw);

if (!$con)

  die('Impossibile connettersi al Server Web: ' . mysql_error());

  $nomeDB = "iTest";

  mysql_select_db($nomeDB);

  $sql = "CREATE TABLE esito (

  IDstud int,

  IDtest int,

  Punti int,

  dataSv date,

  IDesito int NOT NULL AUTO_INCREMENT PRIMARY KEY

  )";

  $esito = mysql_query($sql,$con);

  if ($esito)

    echo "<br />creata tabella ESITO<br />";

  else

    echo "<br />Non sono riuscito a creare la tabella ESITO<br />";

Creare la pagina richiamata dal link inserito sulla pagina del docente

Inserire le operazioni di apertura della connessione a mysql e la selezione del data base.

Le seguenti query hanno lo scopo di inserire dei punteggi conseguiti dagli studenti che hanno svolto il test. Ovviamente esse non faranno parte della versione funzionante dell'applicazione, servono solo a collaudare la parte dell'applicazione che si occupa di analizzare i risultati

I punteggi inseriti produrranno un istogramma centrato intorno al valore medio

  for ($i=1; $i<=5; $i++) {

    $punti = "insert into esito (IDstud, IDtest, Punti)

      values ($i,1, 6)";

    mysql_query($punti);

  }

  for ($i=6; $i<=9; $i++) {

    $punti = "insert into esito (IDstud, IDtest, Punti)

      values ($i,1, 5)";

    mysql_query($punti);

    $punti = "insert into esito (IDstud, IDtest, Punti)

      values ($i+4,1, 7)";

    mysql_query($punti);

    }

  for ($i=13; $i<=15; $i++) {

    $punti = "insert into esito (IDstud, IDtest, Punti)

       values ($i,1, 4)";

    mysql_query($punti);

    $punti = "insert into esito (IDstud, IDtest, Punti)

       values ($i+3,1, 8)";

    mysql_query($punti);

  }

  for ($i=18; $i<=19; $i++) {

    $punti = "insert into esito (IDstud, IDtest, Punti)

      values ($i,1, 3)";

    mysql_query($punti);

    $punti = "insert into esito (IDstud, IDtest, Punti)

      values ($i+2,1, 9)";

    mysql_query($punti);

  }

  $punti = "insert into esito (IDstud, IDtest, Punti)

    values (20,1, 2)";

  mysql_query($punti);

  $punti = "insert into esito (IDstud, IDtest, Punti)

      values (21,1, 10)";

  mysql_query($punti);

Si preparano due array. il primo array, $voto, contiene i punteggi conseguiti dagli studenti. Questi valori verranno riportati sull'asse delle ascisse. Il secondo array, $qta, contiene il numero di studenti che hanno totalizzato quel punteggio. Questi valori verrano rappresentati sull'asse delle ordinate.

  $voto = array();

  $qta = array();

La variabile $NrTest viene inizializzata con il numero del test che si vuole analizzare, in un caso reale questo valore deve essere passato a questa pagina o tramite un cookie o tramite il metodo get.

Viene costruita una query di aggregazione che estrae sia i punti ottenuti, sia il conteggio dei punti

  $NrTest = 1;

  $sql = "select IDtest as num, Punti, count(IDstud) as qta from esito group by Punti having num=".$NrTest;

  $rs=mysql_query($sql);

  if (!$rs) echo "<br />".mysql_error()."<br />";

Il risultato dell'interrogazione viene memorizzato nei due array che costituiranno gli assi cartesiani del diagramma.

Mentre si leggono i risultati si cerca il massimo conteggio, perchè questo valore determina la massima altezza dell'istogramma e quindi da esso si ricava il fattore di scala.

  $i=0;

  $massimo=0;

  while ($record=mysql_fetch_array($rs)) {

    $voto[$i]=$record['Punti'];

    $qta[$i++]=$record['qta'];

    if ($massimo < $record['qta']) $massimo = $record['qta'];

  }

Si decide di rappresentare l'istogramma in un'area la cui massima altezza č 200 pixel.

Il calcolo del fattore di scala è:

  $scala = 200/$massimo;

  echo '<h3>Test '.$NrTest.'</h3>';

  echo '<h3>Istogramma dei punteggi</h3>';

Si definisce una classe di stile che produce un riquadro avente una base di larghezza 20px, un colore di sfondo e un bordo.

  echo '<style>';

  echo '.colonna { width:20px; background-color:#6B8FC4; color:white; border-style:solid; border-width:1px; border-color:black; font-size:12px;}';

  echo '</style>';

Si costruisce una tabella con una cella per ogni valore da rappresentare e si definisce la proprietà di stile height assegnandole come valore il numero di punteggi moltiplicato per il fattore di scala.

  echo "<table><tr>";

  for ($j=0; $j<$i; $j++) {

    echo '<td align="center" valign="bottom"><div class="colonna" style="height:';

    echo intval($qta[$j] * $scala);

    echo 'px;">'.$qta[$j].' </div></td>';

  }

  echo "</tr><tr>";

La base dell'istogramma simula l'asse delle ascisse con i valori dei punti al di sotto di ciascuna colonna.

  for ($j=0; $j<$i; $j++) {

    echo "<td align='center' valign='bottom' style='font-size:10px'>".$voto[$j]."</td>";

  }

  echo '</tr></table>';

?>