import java.io.*; import java.util.*; import es.*; /** * ListaTest Aplicación que genera los datos de un test a partir de un * fichero de entrada y produce el resultado en un fichero de salida * * @author Fco Gutiérrez MAQUINA: propia * @version 1.0 4/2/2001 */ public class ListaTest { /** * main Método principal de la aplicación * * @param args que debe incluri dos argumentos, fichero de entrada y * fichero de salida * @return */ public static void main(String [] args) { // Mapa para guardar los alumnos ordenados por nombre SortedMap alumnos = new TreeMap(); try { String fichero = args[0]; // fichero de entrada String salida = args[1]; // fichero de salida // Se genera el flujo de entrada BufferedReader fr = new BufferedReader(new FileReader(fichero)); // y el flujo de salida PrintWriter pw = new PrintWriter(new FileWriter(salida)); // Creamos un objeto Test desde el flujo de entrada Test test = creaTest(fr); // Leemos linea a linea. String linea = fr.readLine(); while (linea!=null) { // Cada linea contiene los datos de un alumno Alumno al = creaAlumno(linea); // Se corrige su test int puntos = al.corrige(test); // Se almacena el nombre junto a su puntuacióon alumnos.put(al.nombre(),new Integer(puntos)); linea = fr.readLine(); } fr.close(); // Fin de entrada de datos // Comeinza la salida de datos. ES.newOutput(pw); ES.writeString(" Nombre Alumno ",35,ES.LEFT); ES.writeStringLn("Puntuación",15,ES.LEFT); // Se construye un iterador sobre las entradas del mapa Iterator it = alumnos.entrySet().iterator(); while (it.hasNext()) { Map.Entry me = (Map.Entry)it.next(); ES.writeString((String)me.getKey(),35,ES.LEFT); ES.writeIntLn(((Integer)me.getValue()).intValue(),5); } pw.close(); // Fin de salida // Control de excepciones } catch (ArrayIndexOutOfBoundsException e) { System.err.println("Error en uso: ListaTest entrada salida"); } catch (IOException e) { System.out.println("Error de E/S: "+e.getMessage()); } catch (Exception e) { System.err.println("Error en formato fichero: "+e.getMessage()); } } /** * creaTest Recoge los datos del flujo de entrada y crea un objeto test * * @param fr El Flujo de lectura * @return El Test generado. */ public static Test creaTest(BufferedReader fr) throws Exception { // Valor de las acertadas int vp = (new Integer(fr.readLine())).intValue(); // Valor de las falladas int vn = (new Integer(fr.readLine())).intValue(); // Numero de modelos int nm = (new Integer(fr.readLine())).intValue(); // Número de preguntas por modelo int np = (new Integer(fr.readLine())).intValue(); // Se inicializa Test Test.ValorPositivas(vp); Test.ValorNegativas(vn); // Se crea un objeto test Test test = new Test(nm,np); // Se completan las respuestas de cada modelo for(int i=0;i<nm;i++) { String modelo = fr.readLine(); test.respModelo(i+1,modelo); } return test; } /** * creaAlumno Crea un alumno con la información dada en un String * * @param linea El String con la información del alumno * numModelo:respuestas:nombre * @return El alumno generado */ public static Alumno creaAlumno(String linea) { StringTokenizer st = new StringTokenizer(linea,":"); // EL número de modelo int nm = (new Integer(st.nextToken())).intValue(); // Las repsuestas String md = st.nextToken(); // El nombre del alumno String nb = st.nextToken(); return new Alumno(nb,nm,md); } }