Ver Mensaje Individual
  #3 (permalink)  
Antiguo 01/02/2010, 05:20
leolamela
 
Fecha de Ingreso: febrero-2010
Mensajes: 13
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Problema Correcion de un examen en php

Segunda parte de examen.preguntas.marcar.php
<?php
function determinarPuntuacion($nro_examen,$usuario,$fecha,$ tipo_examen)
{
include_once "db_handling.php";
$db=new DB();
$result=array();
$total_buenas=0;
$total_examen=0;
$array_buenas=array();
if($tipo_examen==0)
{
$sentencia=sprintf("select id_ejercicio,nro_preguntas_a_mostrar,aleatorizar,v alor_ejercicio from composicion_enunciado, composicion_examen where composicion_enunciado.id_enunciado=composicion_exa men.id_enunciado and composicion_examen.id_examen=%d;",$nro_examen);
$sentencia_determinar_ejercicios_test=sprintf("sel ect preguntas.id_ejercicio from preguntas,tipo_preguntas,composicion_enunciado, composicion_examen where tipo_preguntas.tipo='vof' and tipo_preguntas.id=preguntas.tipo and composicion_enunciado.id_ejercicio=preguntas.id_ej ercicio and composicion_enunciado.id_enunciado=composicion_exa men.id_enunciado and composicion_examen.id_examen=%d group by composicion_enunciado.id_ejercicio;",$nro_examen) ;
}
else
{
$sentencia=sprintf("select distinct preguntas.id_ejercicio,nro_preg,aleatorizacion,com posicion_examen_automatico.valor/ctdad_ejercicios
from composicion_examen_automatico,resultado,preguntas
where composicion_examen_automatico.id_examen=%d
and resultado.id_examen=composicion_examen_automatico. id_examen
and preguntas.id=resultado.id_pregunta;",$nro_examen);

$sentencia_determinar_ejercicios_test=sprintf("sel ect distinct preguntas.id_ejercicio
from tipo_preguntas,composicion_examen_automatico,resul tado,preguntas
where composicion_examen_automatico.id_examen=%d
and tipo_preguntas.id=preguntas.tipo
and tipo_preguntas.tipo='vof'
and resultado.id_examen=composicion_examen_automatico. id_examen
and preguntas.id=substr(resultado.id_pregunta,1,4)",$n ro_examen); }

$ejercicios_con_test=$db->execute($sentencia_determinar_ejercicios_test);
$fila_desc_ejercicios=$db->execute($sentencia);
$ejercicios=array();
foreach($ejercicios_con_test as $ejercicio)
{
array_push($ejercicios,$ejercicio[0]);
}
foreach($fila_desc_ejercicios as $fila_detallada_ejercicio)
{
if(in_array($fila_detallada_ejercicio[0],$ejercicios))
{
if($fila_detallada_ejercicio[1]==0)
{
$preguntas_a_mostrar=$db->execute(sprintf("select count(preguntas.id) from preguntas where preguntas.id_ejercicio=%d ;",$fila_detallada_ejercicio[0]));
$fila_detallada_ejercicio[1]=$preguntas_a_mostrar[0][0];
}
if($fila_detallada_ejercicio[3]==0)
{
if($tipo_examen==0)
{
$sentencia=sprintf("select count(valor_ejercicio) from composicion_enunciado,composicion_examen where composicion_examen.id_enunciado=composicion_enunci ado.id_enunciado and composicion_examen.id_examen=%d and valor_ejercicio=0;",$nro_examen);
}
else
{
$sentencia=sprintf("select count(valor) from composicion_examen_automatico where id_examen=%d and valor=0;",$nro_examen);
}
$nro_resp_con_0=$db->execute($sentencia);
$nro_resp_con_0=$nro_resp_con_0[0][0];
if($tipo_examen==0)
{
$sentencia=sprintf("select sum(valor_ejercicio) from composicion_enunciado,composicion_examen where composicion_examen.id_enunciado=composicion_enunci ado.id_enunciado and composicion_examen.id_examen=%d and valor_ejercicio<>0;",$nro_examen);
}
else
{
$sentencia=sprintf("select sum(valor) from composicion_examen_automatico where id_examen=%d and valor<>0;",$nro_examen);
}
$punt_total=$db->execute($sentencia);
$faltante=100-$punt_total[0][0];
$fila_detallada_ejercicio[3]=$faltante/$nro_resp_con_0;
}
$puntuacion_por_pregunta=$fila_detallada_ejercicio[3]/$fila_detallada_ejercicio[1];

$id_ejercicio=$fila_detallada_ejercicio[0];
if($tipo_examen==0)
{
$sentencia=sprintf("select count(distinct resultado.id_pregunta),resultado.id_pregunta from resultado,respuestas,preguntas,tipo_preguntas,comp osicion_examen,composicion_enunciado,usuario where substring(resultado.id_pregunta,1,4)=preguntas.id and preguntas.tipo=tipo_preguntas.id and tipo_preguntas.tipo='vof' and preguntas.id_ejercicio=composicion_enunciado.id_ej ercicio and composicion_examen.id_enunciado=composicion_enunci ado.id_enunciado and composicion_examen.id_examen=%d and composicion_enunciado.id_ejercicio=%d and resultado.fecha_examen like'%s' and usuario.id=resultado.id_usuario and usuario.email='%s' group by preguntas.id,resultado.id_usuario order by resultado.id_pregunta asc;",$nro_examen,$fila_detallada_ejercicio[0],$fecha,$usuario);
}
else
{
$sentencia=sprintf("select count(distinct resultado.id_pregunta),resultado.id_pregunta
from resultado,respuestas,preguntas,tipo_preguntas,comp osicion_examen,composicion_enunciado,composicion_e xamen_automatico,usuario
where substring(resultado.id_pregunta,1,4)=preguntas.id
and preguntas.tipo=tipo_preguntas.id and tipo_preguntas.tipo='vof'
and preguntas.id_ejercicio=composicion_enunciado.id_ej ercicio
and composicion_examen_automatico.id_examen=%d
and composicion_examen_automatico.id_examen=resultado. id_examen
and composicion_enunciado.id_ejercicio=%d
and resultado.fecha_examen like '%s'
and usuario.id=resultado.id_usuario
and usuario.email='%s' group by preguntas.id,resultado.id_usuario order by resultado.id_pregunta asc;",$nro_examen,$id_ejercicio,$fecha,$usuario);
}
$nro_respuestas_x_preguntas=$db->execute($sentencia);
if(count($nro_respuestas_x_preguntas)>0)
{
if($tipo_examen==0)
{
$sentencia=sprintf("select count(distinct resultado.id_pregunta),resultado.id_pregunta from resultado,respuestas,preguntas,tipo_preguntas,comp osicion_examen,composicion_enunciado,usuario where resultado.valor=respuestas.validez and substring(resultado.id_pregunta,1,4)=preguntas.id and preguntas.tipo=tipo_preguntas.id and tipo_preguntas.tipo='vof' and preguntas.id_ejercicio=composicion_enunciado.id_ej ercicio and composicion_examen.id_enunciado=composicion_enunci ado.id_enunciado and composicion_examen.id_examen=%d and composicion_enunciado.id_ejercicio=%d and resultado.fecha_examen like'%s' and usuario.id=resultado.id_usuario and usuario.email='%s' group by preguntas.id,resultado.id_usuario order by resultado.id_pregunta asc; ",$nro_examen,$fila_detallada_ejercicio[0],$fecha,$usuario);
}
else
{
$sentencia=sprintf("select count(distinct resultado.id_pregunta),resultado.id_pregunta
from resultado,respuestas,preguntas,tipo_preguntas,comp osicion_examen,composicion_examen_automatico,compo sicion_enunciado,usuario
where resultado.valor=respuestas.validez
and substring(resultado.id_pregunta,1,4)=preguntas.id
and composicion_examen.id_enunciado=composicion_enunci ado.id_enunciado
and preguntas.tipo=tipo_preguntas.id
and tipo_preguntas.tipo='vof'
and preguntas.id_ejercicio=composicion_enunciado.id_ej ercicio
and composicion_examen_automatico.id_examen=resultado. id_examen
and composicion_examen_automatico.id_examen=%d
and composicion_enunciado.id_ejercicio=%d
and resultado.fecha_examen like'%s'
and usuario.id=resultado.id_usuario
and usuario.email='%s' group by preguntas.id,resultado.id_usuario order by resultado.id_pregunta asc; ",$nro_examen,$fila_detallada_ejercicio[0],$fecha,$usuario);

}
$nro_respuestas_buenas_x_preguntas=$db->execute($sentencia);
$sum_total_buenas=0;
$sum_total_respuestas=0;
$sum_total_preguntas=0;
foreach($nro_respuestas_x_preguntas as $respuestas_x_pregunta)
{ $total_respuestas=$respuestas_x_pregunta[0]; $puntuacionXrespuesta=$puntuacion_por_pregunta/$total_respuestas;

$buenas=0;
foreach($nro_respuestas_buenas_x_preguntas as $nrbxp)
{
$buenas=($nrbxp[1]==$respuestas_x_pregunta[1]) ?$nrbxp[0]:0;
}
$sum_total_buenas+=$buenas;
$sum_total_respuestas+=$respuestas_x_pregunta[0];
$total_buenas+=$buenas*$puntuacionXrespuesta;
$sum_total_preguntas++;
}
$total_buenas=($total_buenas>1)?ceil($total_buenas ):$total_buenas;
$array_buenas[0]=$total_buenas;
$sum_total_buenas=($sum_total_buenas>1)?ceil($sum_ total_buenas):$sum_total_buenas;
$sum_total_respuestas=($sum_total_respuestas>1)?ce il($sum_total_respuestas):$sum_total_respuestas;
$sum_total_preguntas=($sum_total_preguntas>1)?ceil ($sum_total_preguntas):$sum_total_preguntas;
$valor_total=($fila_detallada_ejercicio[3]>1)?ceil($fila_detallada_ejercicio[3]):$fila_detallada_ejercicio[3];
array_push($result,array($nro_examen,$id_ejercicio ,'Verdadero o Falso',$total_buenas,$valor_total,$sum_total_buena s,$sum_total_respuestas,$sum_total_preguntas,$fech a,$usuario,$array_buenas));
$total_buenas=0;
$sum_total_buenas=0;
$sum_total_respuestas=0;
}
$total_examen+=(count($nro_respuestas_x_preguntas) >0)?$fila_detallada_ejercicio[3]:0;
}
}
return array(ceil($total_buenas),$result,ceil($total_exam en));
}
function pintar()
{}
}
?>