import es.*;
import java.util.*;
import java.io.*;
/**
* SimTest Simula la realización de un Test
*
* @author Fco Gutiérrez MAQUINA: propia
* @version 1.0 4/2/2001
*/
public class SimTest
{
// variables de instancia
private Test test; // El test a realizar
private SortedMap datosAlumnos; // Tabla con los datos
private Random rd; // Variable aleatoria
/**
* Constructor para objetos de la clase SimTest
* @param t Test con el que realizar la simulación
*/
public SimTest(Test t)
{
// initializa las variables de instancia
test = t;
rd = new Random();
}
/**
* simula Realiza una simulación de la ejecución de un test
*
* @param nv Numero de alumnos que simulan examinarse del test
* @return
*/
public void simula(int nv) throws Exception {
datosAlumnos = new TreeMap(); // Borra datos anteriores
for (int i=0;i<nv;i++) {
// Genera un alumno
Alumno a = genera(test.numModelos(),test.numPreguntas());
// Lo examina
int puntos = a.corrige(test);
// Acumula sus datos
acumula(puntos);
}
}
/**
* genera Genera un alumno de forma aleatoria
*
* @param nm Numero de modelos
* @param nr Numero de preguntas por modelo
* @return El alumno generado
*/
private Alumno genera(int nm, int np) {
int numMod = 1+rd.nextInt(nm);
String resp="";
for(int x=0;x<np;x++) {
resp=resp+"ABCD ".charAt(rd.nextInt(5));
}
return new Alumno("Fco. Gutiérrez",numMod,resp);
}
/**
* acumula Acumula la puntuación dada
*
* @param ptos Los puntos a acumular
* @return
*/
private void acumula(int ptos) {
Integer ptosI = new Integer(ptos);
Integer na = (Integer)datosAlumnos.get(ptosI);
if (na==null) {
na = new Integer(0);
}
datosAlumnos.put(ptosI,new Integer(1+na.intValue()));
}
/**
* listado Lista los datos de la simulación
*
* @param pw Flujo por el que saldrá el listado
* @return
*/
public void listado(PrintWriter pw) {
ES.writeString("Puntuación",12,ES.LEFT);
ES.writeStringLn("Num. Alumnos",20,ES.LEFT);
Iterator it = datosAlumnos.entrySet().iterator();
while (it.hasNext()) {
Map.Entry me = (Map.Entry) it.next();
Integer ptosI = (Integer)me.getKey();
Integer numA = (Integer)me.getValue();
ES.writeInt(ptosI.intValue(),5);
ES.writeIntLn(numA.intValue(),10);
}
}
/**
* main Ejemplo de prueba de la simulación
*
* @return
*/
static public void main(String [] args) throws Exception {
// Se genera el test
Test test = new Test(4,12);
// con estas respuestas correctas
test.respModelo(1,"ABBACDDCABCD");
test.respModelo(2,"BBBAAACCCDDD");
test.respModelo(3,"CDCDACACBBAA");
test.respModelo(4,"AABBAACCAADD");
// Se crea un objeto simulación
SimTest st = new SimTest(test);
// Se simula con 200 alumnos
st.simula(200);
// Se establece como flujo de salida, la salida standar
PrintWriter pw = new PrintWriter(System.out,true);
// Y se saca el listado
st.listado(pw);
}
}