¡Buen día, coders! En esta oportunidad vamos a resolver una evaluación continua que nos envió un seguidor de la página. Consta de 1 parte sobre Manejo de Archivos y Clases, Les dejaré la solución a este examen y cualquier duda que tengan en la sección de comentarios.
Problema 1. Archivos y Clases
Se tiene la clase EC4 con la siguiente clase interna:
Y como atributo un ArrayList de nombre p de la clase mencionada.
Se pide implementar una aplicación que permita registrar los datos de los alumnos a través de una GUI como la siguiente:
Consideraciones:
• Al terminar de ingresar los datos, se debe guardar la información en un archivo de texto de nombre notas.dat.
• Al ingresar se debe cargar la información existente del mencionado archivo (si no existe sólo se debe crear).
• Hay que considerar que no se puede ingresar códigos duplicados y eliminar más de las personas contenidas en la lista.
Para la GUI puede tomar como referencia el siguiente modelo.
Pregunta
|
Puntaje
|
Criterios de evaluación
|
|
1 |
20 puntos |
Lógica |
2 |
Funcionamiento |
2 |
||
Empleo de Clase Interna y Anónimas |
4 |
||
Empleo de Lectura y Escritura de Archivo |
4 |
||
Uso del StringTokenizer para separar información |
2 |
||
Control de Duplicados |
2 |
||
Control de Eliminación del ArrayList |
2 |
||
Uso de GUI |
2 |
Solución:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 | import java.awt.Container; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.StringTokenizer; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JTextArea; import javax.swing.JTextField; class Alumno { private int codigo; private String nombre; private double promedio; public Alumno(int codigo, String nombre, double promedio) { this.codigo = codigo; this.nombre = nombre; this.promedio = promedio; } public int getCodigo() { return codigo; } public String getNombre() { return nombre; } public double getPromedio() { return promedio; } public String tosString() { return codigo + "" + nombre + " (" + promedio + ")"; } } public class Ec3 extends JFrame { // Clase principal (contenedora) File file = new File("notas.dat"); ArrayList<Alumno> p = new ArrayList<Alumno>(); // Este es un Collections public Alumno buscar(int codigo) { // Buscar si el alumno existe en el ArrayList Alumno alumno = null; // Si no existe es null for (int i = 0; i < p.size(); i++) // Recorremos la lista if (codigo == p.get(i).getCodigo()) // Si el código existe alumno = p.get(i); // Obtengo al alumno de la lista return alumno; } public void listar(JTextArea area) { area.setText(""); if (p.size() > 0) { // si hay alumnos area.append("Codigo \t Nombre \t Promedio \n"); for (int i = 0; i < p.size(); i++) { // recorremos la lista Alumno a = p.get(i); // obtenemos el alumno area.append(a.getCodigo() + "\t" + a.getNombre() + "\t" + a.getPromedio() + "\n"); // Mostramos su datos } } else area.append("No hay alumnos\n"); } public void cargar() { try { if (file.exists()) { // Si el archivo existe FileReader fr = new FileReader(file); // Leemos el archivo BufferedReader br = new BufferedReader(fr); String linea; // Recuperar todas las lineas while ((linea = br.readLine()) != null) { // Separar campos por ',' StringTokenizer st = new StringTokenizer(linea, ","); int cod = Integer.parseInt(st.nextToken().trim()); String nom = st.nextToken().trim(); double promedio = Double.parseDouble(st.nextToken().trim()); Alumno x = new Alumno(cod, nom, promedio); p.add(x); // Agregamos a la lista } br.close(); // Cerrar conexion con el archivo } else { JOptionPane.showMessageDialog(null, "No existe el archivo a leer: " + file); file.createNewFile(); } } catch (IOException ioe) { JOptionPane.showMessageDialog(null, "Se produjo un error: " + ioe); } } public void grabar() { try { FileWriter fw = new FileWriter(file); // Abrir conexión con el archivo PrintWriter pw = new PrintWriter(fw); for (int i = 0; i < p.size(); i++) // Recorremos la lista de alumnos pw.println(p.get(i).getCodigo() + "," + p.get(i).getNombre() + "," + p.get(i).getPromedio()); // Escribimos en el archivo pw.close(); // Cerrar conexion con el archivo } catch (Exception ex) { JOptionPane.showMessageDialog(null, "Se produjo un error: " + ex); } } public Ec3() { Container c = getContentPane(); c.setLayout(new FlowLayout()); final JTextField campocodigo = new JTextField(20); c.add(new JLabel("Codigo")); c.add(campocodigo); final JTextField camponombre = new JTextField(20); c.add(new JLabel("Nombre")); c.add(camponombre); final JTextField campopromedio = new JTextField(20); c.add(new JLabel("Promedio")); c.add(campopromedio); final JTextArea area = new JTextArea(8, 20); c.add(area); JButton boton1 = new JButton("Agregar"); JButton boton2 = new JButton("Quitar"); c.add(boton1); c.add(boton2); setSize(300, 300); setTitle("Gestion de Pila"); setVisible(true); cargar(); // Cargar el archivo .txt listar(area); // Listar alumnos // Agregar boton1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { // Entrada de datos int codigo = Integer.parseInt(campocodigo.getText()); String nombre = camponombre.getText(); double promedio = Double.parseDouble(campopromedio.getText()); Alumno alumno = buscar(codigo); // Buscar alumno por su código if (alumno == null) { // Si el alumno no existe alumno = new Alumno(codigo, nombre, promedio); p.add(alumno); // Agregamos el alumno a la lista grabar(); // Grabar en el archivo .txt listar(area); // Listar alumnos en el TextArea JOptionPane.showMessageDialog(null, "Alumno Ingresado"); } else JOptionPane.showMessageDialog(null, "El alumno con código '" + codigo + "' ya existe"); } catch (Exception e2) { JOptionPane.showMessageDialog(null, "Ingrese los datos correctamente"); } } }); // Quitar boton2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { // Entrada de datos int codigo = Integer.parseInt(campocodigo.getText()); Alumno alumno = buscar(codigo); // Buscar alumno por su código if (alumno != null) { // Si el alumno existe p.remove(alumno); // Elmino al alumno de la lista grabar(); // Grabar en el archivo .txt listar(area); // Listar alumnos en el TextArea JOptionPane.showMessageDialog(null, "Alumno Eliminado"); } else { JOptionPane.showMessageDialog(null, "El alumno con código '" + codigo + "' que está queriendo eliminar no existe"); } } catch (Exception ex) { JOptionPane.showMessageDialog(null, "Ingrese un código válido: " + ex); } } }); } public static void main(String[] args) { new Ec3(); } } |
Resultado:
DESARROLLO TUS ALGORITMOS 🔥🔥
No hay comentarios, ¡cuéntame algo!
Me gustaría saber tu opinión. ¡Saludos!