COMPARTE ESTE ARTÍCULO

Ejercicio de Nivel Asequible

Introducción

Este examen final está diseñado para evaluar tus conocimientos básicos sobre clases y subclases, polimorfismo, arrays de objetos, ArrayList, pilas, colas y el uso de estructuras de control como switch. A continuación, se presentan las instrucciones y el ejercicio a realizar, con un enfoque particular en pilas, colas y el uso de switch.

Instrucciones

  1. El examen consta de un solo ejercicio práctico.
  2. Deberás implementar varias clases siguiendo los principios de la programación orientada a objetos.
  3. Utiliza correctamente los conceptos de herencia y polimorfismo.
  4. Implementa y utiliza estructuras de datos como arrays de objetos, ArrayList, pilas y colas.
  5. Utiliza la estructura de control switch para gestionar las opciones de un menú.
  6. El código debe ser claro, comentado y bien estructurado.

Ejercicio

Contexto

Vamos a simular una pequeña aplicación para la gestión de tareas en una oficina. La oficina tiene diferentes tipos de empleados y cada uno tiene tareas específicas. Además, se deben gestionar las tareas pendientes y completadas usando estructuras de datos como pilas y colas. Utiliza un menú interactivo con switch para gestionar las opciones de la aplicación.

Requisitos

  1. Clases y Subclases:
    • Crea una clase base llamada Empleado con los siguientes atributos:
      • nombre (String)
      • id (String)
    • Incluye un método llamado mostrarInfo que devuelva un String con la información del empleado.
    • Crea al menos dos subclases de Empleado: Gerente y Desarrollador, cada una con su implementación del método mostrarInfo.
  2. Polimorfismo:
    • Implementa una clase Oficina que tenga un método agregarEmpleado para añadir diferentes tipos de empleados a una lista.
    • Crea un método mostrarEmpleados que recorra la lista de empleados y llame al método mostrarInfo de cada uno, demostrando polimorfismo.
  3. Arrays de Objetos:
    • En la clase Oficina, crea un array de objetos Empleado que contenga una cantidad fija de empleados (por ejemplo, 5).
  4. ArrayList:
    • Usa un ArrayList en la clase Oficina para gestionar los empleados.
  5. Pilas y Colas:
    • Implementa una clase Tarea con los atributos descripcion (String) y prioridad (int).
    • Usa una pila (Stack) para almacenar las tareas completadas.
    • Usa una cola (Queue) para gestionar la lista de tareas pendientes.
  6. Menú con switch:
    • Implementa un menú interactivo que permita al usuario:
      • Agregar un empleado
      • Mostrar empleados
      • Agregar una tarea
      • Completar una tarea
      • Mostrar tareas pendientes
      • Mostrar tareas completadas

Ejemplo de Código

import java.util.*;

class Empleado {
    protected String nombre;
    protected String id;

    public Empleado(String nombre, String id) {
        this.nombre = nombre;
        this.id = id;
    }

    public String mostrarInfo() {
        return "Empleado: " + nombre + ", ID: " + id;
    }
}

class Gerente extends Empleado {
    public Gerente(String nombre, String id) {
        super(nombre, id);
    }

    @Override
    public String mostrarInfo() {
        return "Gerente: " + nombre + ", ID: " + id;
    }
}

class Desarrollador extends Empleado {
    public Desarrollador(String nombre, String id) {
        super(nombre, id);
    }

    @Override
    public String mostrarInfo() {
        return "Desarrollador: " + nombre + ", ID: " + id;
    }
}

class Tarea {
    private String descripcion;
    private int prioridad;

    public Tarea(String descripcion, int prioridad) {
        this.descripcion = descripcion;
        this.prioridad = prioridad;
    }

    public String mostrarTarea() {
        return "Tarea: " + descripcion + ", Prioridad: " + prioridad;
    }
}

class Oficina {
    private Empleado[] empleados;
    private ArrayList<Empleado> listaEmpleados;
    private Stack<Tarea> tareasCompletadas;
    private Queue<Tarea> tareasPendientes;

    public Oficina() {
        empleados = new Empleado[5];
        listaEmpleados = new ArrayList<>();
        tareasCompletadas = new Stack<>();
        tareasPendientes = new LinkedList<>();
    }

    public void agregarEmpleado(Empleado empleado) {
        for (int i = 0; i < empleados.length; i++) {
            if (empleados[i] == null) {
                empleados[i] = empleado;
                listaEmpleados.add(empleado);
                return;
            }
        }
        System.out.println("No hay espacio para más empleados.");
    }

    public void mostrarEmpleados() {
        for (Empleado empleado : listaEmpleados) {
            System.out.println(empleado.mostrarInfo());
        }
    }

    public void agregarTarea(Tarea tarea) {
        tareasPendientes.add(tarea);
    }

    public void completarTarea() {
        if (!tareasPendientes.isEmpty()) {
            Tarea tarea = tareasPendientes.poll();
            tareasCompletadas.push(tarea);
            System.out.println("Tarea completada: " + tarea.mostrarTarea());
        } else {
            System.out.println("No hay tareas pendientes.");
        }
    }

    public void mostrarTareasPendientes() {
        for (Tarea tarea : tareasPendientes) {
            System.out.println(tarea.mostrarTarea());
        }
    }

    public void mostrarTareasCompletadas() {
        for (Tarea tarea : tareasCompletadas) {
            System.out.println(tarea.mostrarTarea());
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Oficina oficina = new Oficina();
        boolean salir = false;

        while (!salir) {
            System.out.println("Menú de opciones:");
            System.out.println("1. Agregar empleado");
            System.out.println("2. Mostrar empleados");
            System.out.println("3. Agregar tarea");
            System.out.println("4. Completar tarea");
            System.out.println("5. Mostrar tareas pendientes");
            System.out.println("6. Mostrar tareas completadas");
            System.out.println("7. Salir");
            System.out.print("Elija una opción: ");

            int opcion = scanner.nextInt();
            scanner.nextLine(); // Consumir el salto de línea

            switch (opcion) {
                case 1:
                    System.out.println("Agregar empleado:");
                    System.out.print("Nombre: ");
                    String nombre = scanner.nextLine();
                    System.out.print("ID: ");
                    String id = scanner.nextLine();
                    System.out.println("Tipo de empleado (1: Gerente, 2: Desarrollador): ");
                    int tipo = scanner.nextInt();
                    scanner.nextLine(); // Consumir el salto de línea

                    Empleado empleado;
                    if (tipo == 1) {
                        empleado = new Gerente(nombre, id);
                    } else {
                        empleado = new Desarrollador(nombre, id);
                    }
                    oficina.agregarEmpleado(empleado);
                    break;
                case 2:
                    System.out.println("Mostrar empleados:");
                    oficina.mostrarEmpleados();
                    break;
                case 3:
                    System.out.println("Agregar tarea:");
                    System.out.print("Descripción: ");
                    String descripcion = scanner.nextLine();
                    System.out.print("Prioridad: ");
                    int prioridad = scanner.nextInt();
                    scanner.nextLine(); // Consumir el salto de línea
                    Tarea tarea = new Tarea(descripcion, prioridad);
                    oficina.agregarTarea(tarea);
                    break;
                case 4:
                    System.out.println("Completar tarea:");
                    oficina.completarTarea();
                    break;
                case 5:
                    System.out.println("Mostrar tareas pendientes:");
                    oficina.mostrarTareasPendientes();
                    break;
                case 6:
                    System.out.println("Mostrar tareas completadas:");
                    oficina.mostrarTareasCompletadas();
                    break;
                case 7:
                    salir = true;
                    break;
                default:
                    System.out.println("Opción no válida.");
            }
        }

        scanner.close();
    }
}

Conclusión

Este ejercicio te permitirá poner en práctica tus conocimientos sobre programación orientada a objetos y estructuras de datos, con un enfoque particular en pilas, colas y el uso de switch. Asegúrate de seguir las instrucciones y de utilizar correctamente las técnicas mencionadas. ¡Buena suerte en tu examen!


¿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

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