COMPARTE ESTE ARTÍCULO

Este ejercicio de nivel medio combina 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 asesorías académicas que permita:

  1. Añadir estudiantes y asesores.
  2. Listar estudiantes y asesores.
  3. Asignar asesores a estudiantes.
  4. Guardar y cargar los datos en/desde ficheros de texto y binarios.
  5. Buscar estudiantes y asesores por nombre.
  6. Eliminar estudiantes y asesores.
  7. Manejar excepciones para operaciones como manejo de ficheros.

Estructura del Código

Clase Persona

import java.io.Serializable;

abstract class Persona implements Serializable {
    private static final long serialVersionUID = 1L;
    protected String nombre;
    protected int edad;
    protected String id;

    public Persona(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;
    }

    public abstract void mostrarInformacion();
}

Clase Estudiante

class Estudiante extends Persona {
    private static final long serialVersionUID = 1L;
    private String carrera;

    public Estudiante(String nombre, int edad, String id, String carrera) {
        super(nombre, edad, id);
        this.carrera = carrera;
    }

    public String getCarrera() {
        return carrera;
    }

    @Override
    public void mostrarInformacion() {
        System.out.println("Estudiante [Nombre: " + nombre + ", Edad: " + edad + ", ID: " + id + ", Carrera: " + carrera + "]");
    }
}

Clase Asesor

class Asesor extends Persona {
    private static final long serialVersionUID = 1L;
    private String especialidad;

    public Asesor(String nombre, int edad, String id, String especialidad) {
        super(nombre, edad, id);
        this.especialidad = especialidad;
    }

    public String getEspecialidad() {
        return especialidad;
    }

    @Override
    public void mostrarInformacion() {
        System.out.println("Asesor [Nombre: " + nombre + ", Edad: " + edad + ", ID: " + id + ", Especialidad: " + especialidad + "]");
    }
}

Clase AsesoriaAcademica

import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;

public class AsesoriaAcademica {
    private ArrayList<Estudiante> estudiantes;
    private ArrayList<Asesor> asesores;
    private static final String FICHERO_TEXTO = "asesoria.txt";
    private static final String FICHERO_BINARIO = "asesoria.bin";

    public AsesoriaAcademica() {
        estudiantes = new ArrayList<>();
        asesores = new ArrayList<>();
    }

    public void añadirEstudiante(Estudiante estudiante) {
        estudiantes.add(estudiante);
    }

    public void añadirAsesor(Asesor asesor) {
        asesores.add(asesor);
    }

    public void listarPersonas() {
        if (estudiantes.isEmpty() && asesores.isEmpty()) {
            System.out.println("No hay estudiantes ni asesores para mostrar.");
        } else {
            System.out.println("Estudiantes:");
            for (Estudiante estudiante : estudiantes) {
                estudiante.mostrarInformacion();
            }
            System.out.println("Asesores:");
            for (Asesor asesor : asesores) {
                asesor.mostrarInformacion();
            }
        }
    }

    public void asignarAsesorAEstudiante(String idEstudiante, String idAsesor) {
        Estudiante estudiante = buscarEstudiantePorId(idEstudiante);
        Asesor asesor = buscarAsesorPorId(idAsesor);

        if (estudiante != null && asesor != null) {
            System.out.println("Asignando Asesor " + asesor.getNombre() + " al Estudiante " + estudiante.getNombre());
            // Aquí se podría añadir la lógica para relacionar asesor y estudiante
        } else {
            System.out.println("Estudiante o Asesor no encontrado.");
        }
    }

    private Estudiante buscarEstudiantePorId(String id) {
        for (Estudiante estudiante : estudiantes) {
            if (estudiante.getId().equalsIgnoreCase(id)) {
                return estudiante;
            }
        }
        return null;
    }

    private Asesor buscarAsesorPorId(String id) {
        for (Asesor asesor : asesores) {
            if (asesor.getId().equalsIgnoreCase(id)) {
                return asesor;
            }
        }
        return null;
    }

    public void guardarEnFicheroTexto() {
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(FICHERO_TEXTO))) {
            for (Estudiante estudiante : estudiantes) {
                writer.write("Estudiante," + estudiante.getNombre() + "," + estudiante.getEdad() + "," + estudiante.getId() + "," + estudiante.getCarrera());
                writer.newLine();
            }
            for (Asesor asesor : asesores) {
                writer.write("Asesor," + asesor.getNombre() + "," + asesor.getEdad() + "," + asesor.getId() + "," + asesor.getEspecialidad());
                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();
            asesores.clear();
            while ((linea = reader.readLine()) != null) {
                String[] partes = linea.split(",");
                if (partes[0].equals("Estudiante")) {
                    estudiantes.add(new Estudiante(partes[1], Integer.parseInt(partes[2]), partes[3], partes[4]));
                } else if (partes[0].equals("Asesor")) {
                    asesores.add(new Asesor(partes[1], Integer.parseInt(partes[2]), partes[3], partes[4]));
                }
            }
            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);
            oos.writeObject(asesores);
            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();
            asesores = (ArrayList<Asesor>) 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 buscarPersonaPorNombre(String nombre) {
        for (Estudiante estudiante : estudiantes) {
            if (estudiante.getNombre().equalsIgnoreCase(nombre)) {
                estudiante.mostrarInformacion();
                return;
            }
        }
        for (Asesor asesor : asesores) {
            if (asesor.getNombre().equalsIgnoreCase(nombre)) {
                asesor.mostrarInformacion();
                return;
            }
        }
        System.out.println("Persona no encontrada.");
    }

    public void eliminarPersonaPorId(String id) {
        for (Estudiante estudiante : estudiantes) {
            if (estudiante.getId().equalsIgnoreCase(id)) {
                estudiantes.remove(estudiante);
                System.out.println("Estudiante eliminado.");
                return;
            }
        }
        for (Asesor asesor : asesores) {
            if (asesor.getId().equalsIgnoreCase(id)) {
                asesores.remove(asesor);
                System.out.println("Asesor eliminado.");
                return;
            }
        }
        System.out.println("Persona no encontrada.");
    }

    public static void main(String[] args) {
        AsesoriaAcademica asesoria = new AsesoriaAcademica();
        Scanner scanner = new Scanner(System.in);
        int opcion;

        do {
            System.out.println("1. Añadir estudiante");
            System.out.println("2. Añadir asesor");
            System.out.println("3. Listar personas");
            System.out.println("4. Asignar asesor a estudiante");
            System.out.println("5. Guardar en fichero de texto");
            System.out.println("6. Cargar desde fichero de texto");
            System.out.println("7. Guardar en

 fichero binario");
            System.out.println("8. Cargar desde fichero binario");
            System.out.println("9. Buscar persona por nombre");
            System.out.println("10. Eliminar persona por ID");
            System.out.println("11. 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 nombreEstudiante = scanner.nextLine();
                    System.out.print("Edad del estudiante: ");
                    int edadEstudiante = scanner.nextInt();
                    scanner.nextLine();  // Consumir el salto de línea
                    System.out.print("ID del estudiante: ");
                    String idEstudiante = scanner.nextLine();
                    System.out.print("Carrera del estudiante: ");
                    String carrera = scanner.nextLine();
                    asesoria.añadirEstudiante(new Estudiante(nombreEstudiante, edadEstudiante, idEstudiante, carrera));
                    break;
                case 2:
                    System.out.print("Nombre del asesor: ");
                    String nombreAsesor = scanner.nextLine();
                    System.out.print("Edad del asesor: ");
                    int edadAsesor = scanner.nextInt();
                    scanner.nextLine();  // Consumir el salto de línea
                    System.out.print("ID del asesor: ");
                    String idAsesor = scanner.nextLine();
                    System.out.print("Especialidad del asesor: ");
                    String especialidad = scanner.nextLine();
                    asesoria.añadirAsesor(new Asesor(nombreAsesor, edadAsesor, idAsesor, especialidad));
                    break;
                case 3:
                    asesoria.listarPersonas();
                    break;
                case 4:
                    System.out.print("ID del estudiante: ");
                    String idEstudianteAsignar = scanner.nextLine();
                    System.out.print("ID del asesor: ");
                    String idAsesorAsignar = scanner.nextLine();
                    asesoria.asignarAsesorAEstudiante(idEstudianteAsignar, idAsesorAsignar);
                    break;
                case 5:
                    asesoria.guardarEnFicheroTexto();
                    break;
                case 6:
                    asesoria.cargarDesdeFicheroTexto();
                    break;
                case 7:
                    asesoria.guardarEnFicheroBinario();
                    break;
                case 8:
                    asesoria.cargarDesdeFicheroBinario();
                    break;
                case 9:
                    System.out.print("Ingrese el nombre de la persona a buscar: ");
                    String nombreBuscar = scanner.nextLine();
                    asesoria.buscarPersonaPorNombre(nombreBuscar);
                    break;
                case 10:
                    System.out.print("Ingrese el ID de la persona a eliminar: ");
                    String idEliminar = scanner.nextLine();
                    asesoria.eliminarPersonaPorId(idEliminar);
                    break;
                case 11:
                    System.out.println("Saliendo del programa.");
                    break;
                default:
                    System.out.println("Opción no válida.");
            }
        } while (opcion != 11);

        scanner.close();
    }
}

Explicación del Código

  1. Clases Persona, Estudiante, y Asesor:
    • Persona es una clase abstracta que sirve como base para Estudiante y Asesor.
    • Cada subclase hereda de Persona y añade atributos específicos (carrera para Estudiante y especialidad para Asesor).
  2. Clase AsesoriaAcademica:
    • Contiene listas dinámicas (ArrayList) de estudiantes y asesores.
    • Métodos para añadir, listar, buscar, eliminar personas, asignar asesores a estudiantes, y guardar y cargar datos desde ficheros de texto y binarios.
    • El método main proporciona un menú interactivo para gestionar las asesorías.
  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!


¿QUÉ TE HA PARECIDO EL ARTÍCULO? Danos tu opinión al final de la página.
Deja tu comentario y ayúdanos a crecer.


¡SÍGUENOS EN TUS REDES FAVORITAS!
AYUDANOS A CRECER Y QUE LLEGUEMOS A TODAS LAS PERSONAS QUE NOS NECESITANA. SÍGUENOS EN TUS REDES.
Entra AQUÍ y elíge donde seguirnos. 

 

 


NUESTRAS ÚLTIMAS PUBLICACIONES

INSTAGRAM

TIKTOK


 …Y PRONTO MUCHAS MÁS

AYUDANOS A CRECER Y A LLEGAR A TODAS LAS PERSONAS QUE NOS NECESITAN.

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