25 mayo, 2021

Tercera Evaluación Continua Java Avanzado

¡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. 

Public class Ec3 extends Jframe{ // Clase principal (contenedora)
ArrayList<Alumno> p = new ArrayList<Alumno>(); // Este es un Collections
public Ec3(){
Container c = getContentPane();
c.setLayout(new FlowLayout());
final JtextField campoTexto = new JtextField(20) ;
c.add (new Jlabel (“Nombre”)) ;
c.add (campoTexto);
final JtextArea area = new JtextArea(8,30);
c.add(area);
Jbutton boton1 = new Jbutton(“Agregar”);
Jbutton boton2 = new Jbutton(“Quitar”);
c.add(boton1);
c.add(boton2);
setSize(350,250);
setTitle(“Gestion de Pila”);
setVisible(true);
boton1.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
p.agregar(campoTexto.getText());
rea.setText( ---OJO --- p.muestra());
// OJO --- Realizar un proceso que permita mostrar la información del ArrayList 
campoTexto.setText(“”);
}
});
}
public static void main(String[] args){
new Ec3();
}
}

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 🔥🔥


✅ 1. Envía tu algoritmo.
✅ 2. Indica en qué lenguaje de Programación lo deseas.
✅ 3. Para qué fecha lo quieres.
✅ 4. De que país eres (para tu forma de pago)
✅ 5. También se desarrollan al momento.
✅ 6. Los 3 primeros ejercicios son gratis.
🔸 Explico cada ejercicio que desarrollo en el código.

No hay comentarios, ¡cuéntame algo!

Me gustaría saber tu opinión. ¡Saludos!