COMPARTE ESTE ARTÍCULO

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:

  1. Añadir estudiantes.
  2. Listar estudiantes.
  3. Guardar y cargar los datos en/desde ficheros de texto y binarios.
  4. Buscar estudiantes por nombre.
  5. Eliminar estudiantes.
  6. 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

  1. Clase Estudiante:
    • Define un estudiante con nombre, edad e ID.
    • Implementa Serializable para permitir la serialización de objetos.
  2. 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.
  3. 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

Contenido restringido

Acceso de usuarios existentes
   
Registro de un nuevo usuario
*Campo necesario

Categories:

Tags:

Comments are closed

Estado de acceso
ESTADO DE ACCESO
TRADUCTORES
COMPARTENOS
error: CONTENIDO PROTEGIDO