Este ejercicio combinará varios conceptos fundamentales en Java: tipos de datos y operaciones de entrada y salida, estructuras básicas, programación modular y funciones, vectores unidimensionales y bidimensionales, programación orientada a objetos (POO), tratamiento de excepciones y ficheros de texto y binarios, y estructuras dinámicas de datos como ArrayList
.
Descripción del Ejercicio
Vamos a crear un sistema de gestión de estudiantes que permita:
- Añadir estudiantes.
- Listar estudiantes.
- Guardar y cargar los datos en/desde ficheros de texto y binarios.
- Buscar estudiantes por nombre.
- Eliminar estudiantes.
- Manejar excepciones para operaciones como manejo de ficheros.
Estructura del Código
Clase Estudiante
import java.io.Serializable;
class Estudiante implements Serializable {
private static final long serialVersionUID = 1L;
private String nombre;
private int edad;
private String id;
public Estudiante(String nombre, int edad, String id) {
this.nombre = nombre;
this.edad = edad;
this.id = id;
}
public String getNombre() {
return nombre;
}
public int getEdad() {
return edad;
}
public String getId() {
return id;
}
@Override
public String toString() {
return "Estudiante [Nombre: " + nombre + ", Edad: " + edad + ", ID: " + id + "]";
}
}
Clase GestionEstudiantes
import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;
public class GestionEstudiantes {
private ArrayList<Estudiante> estudiantes;
private static final String FICHERO_TEXTO = "estudiantes.txt";
private static final String FICHERO_BINARIO = "estudiantes.bin";
public GestionEstudiantes() {
estudiantes = new ArrayList<>();
}
public void añadirEstudiante(Estudiante estudiante) {
estudiantes.add(estudiante);
}
public void listarEstudiantes() {
if (estudiantes.isEmpty()) {
System.out.println("No hay estudiantes para mostrar.");
} else {
for (Estudiante estudiante : estudiantes) {
System.out.println(estudiante);
}
}
}
public void guardarEnFicheroTexto() {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(FICHERO_TEXTO))) {
for (Estudiante estudiante : estudiantes) {
writer.write(estudiante.getNombre() + "," + estudiante.getEdad() + "," + estudiante.getId());
writer.newLine();
}
System.out.println("Datos guardados en " + FICHERO_TEXTO);
} catch (IOException e) {
System.out.println("Error al guardar en fichero de texto: " + e.getMessage());
}
}
public void cargarDesdeFicheroTexto() {
try (BufferedReader reader = new BufferedReader(new FileReader(FICHERO_TEXTO))) {
String linea;
estudiantes.clear();
while ((linea = reader.readLine()) != null) {
String[] partes = linea.split(",");
estudiantes.add(new Estudiante(partes[0], Integer.parseInt(partes[1]), partes[2]));
}
System.out.println("Datos cargados desde " + FICHERO_TEXTO);
} catch (IOException e) {
System.out.println("Error al cargar desde fichero de texto: " + e.getMessage());
}
}
public void guardarEnFicheroBinario() {
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(FICHERO_BINARIO))) {
oos.writeObject(estudiantes);
System.out.println("Datos guardados en " + FICHERO_BINARIO);
} catch (IOException e) {
System.out.println("Error al guardar en fichero binario: " + e.getMessage());
}
}
public void cargarDesdeFicheroBinario() {
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FICHERO_BINARIO))) {
estudiantes = (ArrayList<Estudiante>) ois.readObject();
System.out.println("Datos cargados desde " + FICHERO_BINARIO);
} catch (IOException | ClassNotFoundException e) {
System.out.println("Error al cargar desde fichero binario: " + e.getMessage());
}
}
public void buscarEstudiantePorNombre(String nombre) {
for (Estudiante estudiante : estudiantes) {
if (estudiante.getNombre().equalsIgnoreCase(nombre)) {
System.out.println(estudiante);
return;
}
}
System.out.println("Estudiante no encontrado.");
}
public void eliminarEstudiantePorId(String id) {
for (Estudiante estudiante : estudiantes) {
if (estudiante.getId().equalsIgnoreCase(id)) {
estudiantes.remove(estudiante);
System.out.println("Estudiante eliminado.");
return;
}
}
System.out.println("Estudiante no encontrado.");
}
public static void main(String[] args) {
GestionEstudiantes gestion = new GestionEstudiantes();
Scanner scanner = new Scanner(System.in);
int opcion;
do {
System.out.println("1. Añadir estudiante");
System.out.println("2. Listar estudiantes");
System.out.println("3. Guardar en fichero de texto");
System.out.println("4. Cargar desde fichero de texto");
System.out.println("5. Guardar en fichero binario");
System.out.println("6. Cargar desde fichero binario");
System.out.println("7. Buscar estudiante por nombre");
System.out.println("8. Eliminar estudiante por ID");
System.out.println("9. Salir");
System.out.print("Seleccione una opción: ");
opcion = scanner.nextInt();
scanner.nextLine(); // Consumir el salto de línea
switch (opcion) {
case 1:
System.out.print("Nombre del estudiante: ");
String nombre = scanner.nextLine();
System.out.print("Edad del estudiante: ");
int edad = scanner.nextInt();
scanner.nextLine(); // Consumir el salto de línea
System.out.print("ID del estudiante: ");
String id = scanner.nextLine();
gestion.añadirEstudiante(new Estudiante(nombre, edad, id));
break;
case 2:
gestion.listarEstudiantes();
break;
case 3:
gestion.guardarEnFicheroTexto();
break;
case 4:
gestion.cargarDesdeFicheroTexto();
break;
case 5:
gestion.guardarEnFicheroBinario();
break;
case 6:
gestion.cargarDesdeFicheroBinario();
break;
case 7:
System.out.print("Ingrese el nombre del estudiante a buscar: ");
String nombreBuscar = scanner.nextLine();
gestion.buscarEstudiantePorNombre(nombreBuscar);
break;
case 8:
System.out.print("Ingrese el ID del estudiante a eliminar: ");
String idEliminar = scanner.nextLine();
gestion.eliminarEstudiantePorId(idEliminar);
break;
case 9:
System.out.println("Saliendo del programa.");
break;
default:
System.out.println("Opción no válida.");
}
} while (opcion != 9);
scanner.close();
}
}
Explicación del Código
- Clase
Estudiante
:- Define un estudiante con nombre, edad e ID.
- Implementa
Serializable
para permitir la serialización de objetos.
- Clase
GestionEstudiantes
:- Contiene una lista dinámica (
ArrayList
) de estudiantes. - Métodos para añadir, listar, buscar, eliminar estudiantes, y para guardar y cargar datos desde ficheros de texto y binarios.
- El método
main
proporciona un menú interactivo para gestionar los estudiantes.
- Contiene una lista dinámica (
- Manejo de Excepciones:
- Se manejan excepciones durante la lectura y escritura de ficheros.
- Uso de
try-with-resources
para asegurar el cierre de recursos como ficheros.
Este ejercicio proporciona una práctica completa para mejorar tus habilidades en Java, abarcando una amplia gama de conceptos y técnicas fundamentales. ¡Sigue practicando y explorando más sobre Java para convertirte en un programador más competente!
… … …
¡Coméntanos que te ha parecido este artículo al final de la página!
TÚ OPINIÓN IMPORTA
NUESTRAS ÚLTIMAS PUBLICACIONES
- La vida nos aguarda triunfos importantes. Sé resiliente.
- Creación de una Calculadora de Ecuación de Segundo Grado con HTML, CSS y JavaScript
- Comunicado a nuestros amigos, alumnos y compañeros de Valencia.
- Artículo: Funciones esenciales de C para la manipulación de cadenas: fgets, strlen, stdin, y más
- Uso de la Clase DAO sin Interfaces en Java: Ejemplo de Gestión de Trabajadores
- Uso de DAO en Java: Simplificando el Acceso a Datos con el Patrón DAO
- Guía Completa para la Creación de Gramáticas en JFLAP: Ejercicios y Soluciones
- Generación de Lenguajes en JFLAP con Gramáticas: Ejercicios y Estrategias
- Máquinas de Turing y Enumeración de Números Binarios: Diseño y Funcionamiento en JFLAP
Contenido restringido
Comments are closed