COMPARTE ESTE ARTÍCULO

Ejercicio de Nivel Asequible

Introducción

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

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 una tienda de mascotas. La tienda tiene diferentes tipos de animales y cada uno tiene características específicas. Además, se deben gestionar las ventas y reservas de los animales usando estructuras de datos como ArrayList, 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 Animal con los siguientes atributos:
      • nombre (String)
      • codigo (String)
    • Incluye un método llamado mostrarInfo que devuelva un String con la información del animal.
    • Crea al menos dos subclases de Animal: Perro y Gato, cada una con su implementación del método mostrarInfo.
  2. Polimorfismo:
    • Implementa una clase Tienda que tenga un método agregarAnimal para añadir diferentes tipos de animales a una lista.
    • Crea un método mostrarAnimales que recorra la lista de animales y llame al método mostrarInfo de cada uno, demostrando polimorfismo.
  3. ArrayList:
    • Usa un ArrayList en la clase Tienda para gestionar los animales disponibles en la tienda.
  4. Pilas y Colas:
    • Implementa una clase Venta con los atributos cliente (String) y codigoAnimal (String).
    • Usa una pila (Stack) para almacenar las ventas realizadas.
    • Usa una cola (Queue) para gestionar la lista de reservas de los clientes para animales específicos.
  5. Menú con switch:
    • Implementa un menú interactivo que permita al usuario:
      • Agregar un animal
      • Mostrar animales
      • Vender un animal
      • Reservar un animal
      • Mostrar ventas realizadas
      • Mostrar reservas pendientes

Ejemplo de Código

import java.util.*;

class Animal {
    protected String nombre;
    protected String codigo;

    public Animal(String nombre, String codigo) {
        this.nombre = nombre;
        this.codigo = codigo;
    }

    public String mostrarInfo() {
        return "Animal: " + nombre + ", Código: " + codigo;
    }
}

class Perro extends Animal {
    private String raza;

    public Perro(String nombre, String codigo, String raza) {
        super(nombre, codigo);
        this.raza = raza;
    }

    @Override
    public String mostrarInfo() {
        return "Perro: " + nombre + ", Raza: " + raza + ", Código: " + codigo;
    }
}

class Gato extends Animal {
    private String color;

    public Gato(String nombre, String codigo, String color) {
        super(nombre, codigo);
        this.color = color;
    }

    @Override
    public String mostrarInfo() {
        return "Gato: " + nombre + ", Color: " + color + ", Código: " + codigo;
    }
}

class Venta {
    private String cliente;
    private String codigoAnimal;

    public Venta(String cliente, String codigoAnimal) {
        this.cliente = cliente;
        this.codigoAnimal = codigoAnimal;
    }

    @Override
    public String toString() {
        return "Cliente: " + cliente + ", Animal vendido: " + codigoAnimal;
    }
}

class Tienda {
    private ArrayList<Animal> animales;
    private Stack<Venta> ventasRealizadas;
    private Queue<Venta> reservasPendientes;

    public Tienda() {
        animales = new ArrayList<>();
        ventasRealizadas = new Stack<>();
        reservasPendientes = new LinkedList<>();
    }

    public void agregarAnimal(Animal animal) {
        animales.add(animal);
    }

    public void mostrarAnimales() {
        for (Animal animal : animales) {
            System.out.println(animal.mostrarInfo());
        }
    }

    public void venderAnimal(String codigoAnimal, String cliente) {
        Iterator<Animal> iterator = animales.iterator();
        while (iterator.hasNext()) {
            Animal animal = iterator.next();
            if (animal.codigo.equals(codigoAnimal)) {
                ventasRealizadas.push(new Venta(cliente, codigoAnimal));
                iterator.remove();
                System.out.println("Animal vendido: " + animal.mostrarInfo());
                return;
            }
        }
        System.out.println("Animal no encontrado en la tienda.");
    }

    public void reservarAnimal(String codigoAnimal, String cliente) {
        reservasPendientes.add(new Venta(cliente, codigoAnimal));
    }

    public void mostrarVentasRealizadas() {
        for (Venta venta : ventasRealizadas) {
            System.out.println(venta);
        }
    }

    public void mostrarReservasPendientes() {
        for (Venta reserva : reservasPendientes) {
            System.out.println(reserva);
        }
    }
}

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

        while (!salir) {
            System.out.println("Menú de opciones:");
            System.out.println("1. Agregar animal");
            System.out.println("2. Mostrar animales");
            System.out.println("3. Vender animal");
            System.out.println("4. Reservar animal");
            System.out.println("5. Mostrar ventas realizadas");
            System.out.println("6. Mostrar reservas pendientes");
            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 animal:");
                    System.out.print("Nombre: ");
                    String nombre = scanner.nextLine();
                    System.out.print("Código: ");
                    String codigo = scanner.nextLine();
                    System.out.println("Tipo de animal (1: Perro, 2: Gato): ");
                    int tipo = scanner.nextInt();
                    scanner.nextLine(); // Consumir el salto de línea

                    Animal animal;
                    if (tipo == 1) {
                        System.out.print("Raza: ");
                        String raza = scanner.nextLine();
                        animal = new Perro(nombre, codigo, raza);
                    } else {
                        System.out.print("Color: ");
                        String color = scanner.nextLine();
                        animal = new Gato(nombre, codigo, color);
                    }
                    tienda.agregarAnimal(animal);
                    break;
                case 2:
                    System.out.println("Mostrar animales:");
                    tienda.mostrarAnimales();
                    break;
                case 3:
                    System.out.println("Vender animal:");
                    System.out.print("Código del animal: ");
                    String codigoVenta = scanner.nextLine();
                    System.out.print("Nombre del cliente: ");
                    String cliente = scanner.nextLine();
                    tienda.venderAnimal(codigoVenta, cliente);
                    break;
                case 4:
                    System.out.println("Reservar animal:");
                    System.out.print("Código del animal: ");
                    String codigoReserva = scanner.nextLine();
                    System.out.print("Nombre del cliente: ");
                    String clienteReserva = scanner.nextLine();
                    tienda.reservarAnimal(codigoReserva, clienteReserva);
                    break;
                case 5:
                    System.out.println("Mostrar ventas realizadas:");
                    tienda.mostrarVentasRealizadas();
                    break;
                case 6:
                    System.out.println("Mostrar reservas pendientes:");
                    tienda.mostrarReservasPendientes();
                    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 el uso de ArrayList y polimorfismo. 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