Programación Básica Help

Práctica 5: Modularidad en una concesionaria de vehículos

Descripción del problema

En este ejercicio, se te pide que desarrolles un programa en Java que gestione una concesionaria de vehículos. El programa debe permitir agregar vehículos, calcular el precio total de los vehículos en stock y mostrar la lista de vehículos disponibles. Para lograr esto, deberás utilizar la modularidad en tu código, organizando las clases y métodos de manera adecuada.

Requisitos

  1. Crea una clase Vehicle que represente un vehículo. Esta clase debe tener los siguientes atributos:

    • brand: la marca del vehículo (String).

    • model: el modelo del vehículo (String).

    • price: el precio del vehículo (double).

    • stock: la cantidad de vehículos disponibles en stock (int).

  2. La clase Vehicle debe tener un constructor que inicialice todos los atributos y métodos getter y setter para cada atributo.

  3. Crea una clase Dealership que represente la concesionaria de vehículos. Esta clase debe tener los siguientes atributos:

    • vehicles: una lista de vehículos disponibles en la concesionaria (List<Vehicle>).

    • totalPrice: el precio total de los vehículos en stock (double).

    • totalStock: la cantidad total de vehículos en stock (int).

    • totalVehicles: la cantidad total de vehículos en la concesionaria (int).

    • totalVehiclesSold: la cantidad total de vehículos vendidos (int).

  4. La clase Dealership debe tener un constructor que inicialice la lista de vehículos y los demás atributos a cero.

  5. La clase Dealership debe tener los siguientes métodos:

    • addVehicle(Vehicle vehicle): agrega un vehículo a la lista de vehículos disponibles en la concesionaria.

    • calculateTotalPrice(): calcula el precio total de los vehículos en stock y lo almacena en el atributo totalPrice.

    • calculateTotalStock(): calcula la cantidad total de vehículos en stock y lo almacena en el atributo totalStock.

    • calculateTotalVehicles(): calcula la cantidad total de vehículos en la concesionaria y lo almacena en el atributo totalVehicles.

    • calculateTotalVehiclesSold(): calcula la cantidad total de vehículos vendidos y lo almacena en el atributo totalVehiclesSold.

    • showAvailableVehicles(): muestra la lista de vehículos disponibles en la concesionaria.

  6. Crea una clase DealerShipApp que contenga un menú para interactuar con el usuario. El menú debe permitir al usuario realizar las siguientes acciones:

    • Agregar un vehículo a la concesionaria.

    • Calcular el precio total de los vehículos en stock.

    • Calcular la cantidad total de vehículos en stock.

    • Calcular la cantidad total de vehículos en la concesionaria.

    • Calcular la cantidad total de vehículos vendidos.

    • Mostrar la lista de vehículos disponibles en la concesionaria.

    • Salir del programa.

  7. Utiliza la modularidad en tu código, organizando las clases y métodos de manera adecuada. Asegúrate de que cada clase tenga una única responsabilidad y que los métodos sean lo más simples posible.

  8. Utiliza comentarios en tu código para explicar la funcionalidad de cada clase y método.

Resolución

Para poder resolver este ejercicio, primero definiremos la estructura de paquetes y clases que utilizaremos. Crearemos un paquete llamado com.dealership que contendrá las siguientes clases:

  • Vehicle: Representa un vehículo.

  • Dealership: Representa la concesionaria de vehículos.

  • DealershipApp: Contiene el menú para interactuar con el usuario.

  • Main: Clase principal que ejecuta la aplicación.

Por lo que la estructura de paquetes será la siguiente:

📦 src └─ com    └─ dealership       ├─ Vehicle.java       ├─ DealerShip.java       ├─ DealerShipApp.java       └─ Main.java

©generated by Project Tree Generator

Código de ejemplo

// Clase Vehicle que representa un vehículo package com.dealership; public class Vehicle { private String brand; private String model; private double price; private int stock; public Vehicle(String brand, String model, double price, int stock) { this.brand = brand; this.model = model; this.price = price; this.stock = stock; } public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; } public String getModel() { return model; } public void setModel(String model) { this.model = model; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public int getStock() { return stock; } public void setStock(int stock) { this.stock = stock; } }
// Clase Dealership que representa la concesionaria de vehículos package com.dealership; import java.util.ArrayList; import java.util.List; import javax.swing.JOptionPane; public class Dealership { private List<Vehicle> vehicles; private double totalPrice; private int totalStock; private int totalVehicles; private int totalVehiclesSold; public Dealership() { this.vehicles = new ArrayList<>(); this.totalPrice = 0.0; this.totalStock = 0; this.totalVehicles = 0; this.totalVehiclesSold = 0; } public void addVehicle(Vehicle vehicle) { vehicles.add(vehicle); totalVehicles++; } public void calculateTotalPrice() { totalPrice = 0.0; for (Vehicle vehicle : vehicles) { totalPrice += vehicle.getPrice() * vehicle.getStock(); } } public void calculateTotalStock() { totalStock = 0; for (Vehicle vehicle : vehicles) { totalStock += vehicle.getStock(); } } public void calculateTotalVehicles() { totalVehicles = vehicles.size(); } public void calculateTotalVehiclesSold() { totalVehiclesSold = 0; for (Vehicle vehicle : vehicles) { totalVehiclesSold += vehicle.getStock(); } } public void showAvailableVehicles() { StringBuilder sb = new StringBuilder(); for (Vehicle vehicle : vehicles) { sb.append("Marca: ").append(vehicle.getBrand()) .append(", Modelo: ").append(vehicle.getModel()) .append(", Precio: ").append(vehicle.getPrice()) .append(", Stock: ").append(vehicle.getStock()).append("\n"); } JOptionPane.showMessageDialog(null, sb.toString(), "Vehículos disponibles", JOptionPane.INFORMATION_MESSAGE); } public double getTotalPrice() { return totalPrice; } public int getTotalStock() { return totalStock; } public int getTotalVehicles() { return totalVehicles; } public int getTotalVehiclesSold() { return totalVehiclesSold; } }
// Clase DealerShipApp que contiene el menú para interactuar con el usuario package com.dealership; import javax.swing.JOptionPane; public class DealerShipApp { private Dealership dealership; public DealerShipApp() { this.dealership = new Dealership(); } public void showMenu() { String[] options = {"Agregar vehículo", "Calcular precio total", "Calcular stock total", "Calcular total de vehículos", "Calcular total de vehículos vendidos", "Mostrar vehículos disponibles", "Salir"}; int choice; do { choice = JOptionPane.showOptionDialog(null, "Seleccione una opción:", "Concesionaria de Vehículos", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null, options, options[0]); switch (choice) { case 0: addVehicle(); break; case 1: dealership.calculateTotalPrice(); JOptionPane.showMessageDialog(null, "Precio total de los vehículos en stock: " + dealership.getTotalPrice()); break; case 2: dealership.calculateTotalStock(); JOptionPane.showMessageDialog(null, "Cantidad total de vehículos en stock: " + dealership.getTotalStock()); break; case 3: dealership.calculateTotalVehicles(); JOptionPane.showMessageDialog(null, "Cantidad total de vehículos en la concesionaria: " + dealership.getTotalVehicles()); break; case 4: dealership.calculateTotalVehiclesSold(); JOptionPane.showMessageDialog(null, "Cantidad total de vehículos vendidos: " + dealership.getTotalVehiclesSold()); break; case 5: dealership.showAvailableVehicles(); break; case 6: JOptionPane.showMessageDialog(null, "Saliendo del programa..."); break; default: JOptionPane.showMessageDialog(null, "Opción no válida. Intente nuevamente."); } } while (choice != 6); } private void addVehicle() { String brand = JOptionPane.showInputDialog("Ingrese la marca del vehículo:"); String model = JOptionPane.showInputDialog("Ingrese el modelo del vehículo:"); double price = Double.parseDouble(JOptionPane.showInputDialog("Ingrese el precio del vehículo:")); int stock = Integer.parseInt(JOptionPane.showInputDialog("Ingrese la cantidad de vehículos en stock:")); Vehicle vehicle = new Vehicle(brand, model, price, stock); dealership.addVehicle(vehicle); JOptionPane.showMessageDialog(null, "Vehículo agregado exitosamente."); } }
// Clase Main que ejecuta la aplicación package com.dealership; public class Main { public static void main(String[] args) { DealerShipApp app = new DealerShipApp(); app.showMenu(); } }

Consideraciones finales

  • Asegúrate de que tu código esté bien organizado y siga las buenas prácticas de programación.

  • Utiliza comentarios para explicar la funcionalidad de cada clase y método.

  • Prueba tu programa para asegurarte de que funcione correctamente y cumpla con los requisitos especificados.

  • Puedes agregar más funcionalidades o mejorar la interfaz de usuario si lo deseas.

  • Recuerda que la modularidad es clave para mantener un código limpio y fácil de mantener. Asegúrate de que cada clase tenga una única responsabilidad y que los métodos sean lo más simples posible.

Last modified: 29 April 2025