Actividad entregable: Gestor de Inventario de Ferretería
Resultados de Aprendizaje
Esta actividad trabaja los siguientes RAs del módulo de Programación:
- RA2, RA3 — Escribe y depura código aplicando programación modular. Desarrolla programas estructurados que reutilizan código mediante funciones, arrays paralelos y manipulación de datos.
Objetivo
Diseñar e implementar un programa modular completo desde cero, combinando los conceptos de funciones (UD3) con el manejo de arrays paralelos y String (UD2).
Enunciado
Vamos a programar el software para la "Ferretería CAMP". Necesitamos un programa que gestione nuestro inventario de piezas. Para ello, usaremos tres arrays paralelos:
String[] nombres: Para guardar los nombres de las piezas (ej: "Tornillo", "Tuerca", "Martillo").int[] cantidades: Para guardar el stock (cantidad) de cada pieza.double[] precios: Para guardar el precio por unidad de cada pieza.
El programa debe ser totalmente modular. Esto significa que el main solo se encargará de mostrar el menú y llamar a las funciones adecuadas para cada tarea.
Requisitos del Programa
- Inicialización: Al arrancar, el programa preguntará: "¿Cuántas piezas únicas quieres gestionar?". Y creará los 3 arrays con ese tamaño.
- Menú Principal: Deberá mostrar un menú repetitivo (con un
do-while) que ofrezca las siguientes opciones:- Gestionar Almacén (Rellenar/Actualizar datos)
- Mostrar Almacén
- Vender Producto
- Mostrar Informe Comercial
- Salir
- Variable de Ventas: Deberás tener una variable (por ejemplo,
double totalVentas = 0.0;) que acumule el importe de todas las ventas realizadas.
Funciones a Implementar
Tu tarea es diseñar e implementar todas las funciones necesarias para que el main sea lo más simple posible. Aquí tienes una guía de las funciones que necesitarás (puedes crear más si las ves útiles):
1 public static void gestionarAlmacen(Scanner teclado, String[] nombres, int[] cantidades, double[] precios)
- Tarea: Recorre los arrays y pide al usuario el nombre, la cantidad y el precio de cada una de las piezas para rellenar el inventario.
2. public static void mostrarAlmacen(String[] nombres, int[] cantidades, double[] precios)
- Tarea: Muestra un listado formateado de todo el inventario, indicando el nombre, el stock actual y el precio de cada pieza.
3. public static void venderProducto(Scanner teclado, String[] nombres, int[] cantidades, double[] precios)
- Tarea: Esta es la función más compleja. Llamará a funciones auxiliares (puntos 4 y 5). Debe:
- Pedir al usuario el nombre de la pieza que quiere vender.
- Llamar a una función auxiliar (ej:
buscarProducto) para encontrar el índice de esa pieza. Devolverá-1en caso de no encontrarlo (esta función no muestra ningún mensaje). - Si no la encuentra, mostrará un mensaje de error 'Producto no encontrado' y terminará la función.
- Si la encuentra, pedirá la cantidad a vender y comprobar si hay stock suficiente.
- Pedir el porcentaje de descuento a aplicar (ej: 10 para un 10%, o 0 para sin descuento).
- Llamar a una función auxiliar de cálculo (ej:
calcularPrecioVenta) que reciba el precio original, la cantidad y el descuento, y devuelva el precio final de la venta. - Actualizar el stock en el array
cantidades(¡recuerda el paso por referencia!). - Actualizar el
totalVentas(sumando el precio final de esta venta). - Mostrar un mensaje de "Venta realizada. Precio final: X.XX €".
4. public static int buscarProducto(String nombreBuscado, String[] nombres)
- Función Auxiliar (Helper): Recibe un nombre y el array de nombres.
- Retorna: El
intdel índice (posición) donde se encuentra el producto, o-1si no lo encuentra.
5. public static double calcularPrecioVenta(double precioUnitario, int cantidad, double descuentoPorcentaje)
- Función Auxiliar (Helper): Recibe los datos de la venta.
- Lógica: Si
descuentoPorcentajees0, devuelveprecioUnitario * cantidad. Si es mayor que 0, calcula y aplica el descuento. - Retorna: El
doubledel precio final.
6. public static void mostrarInformeComercial(String[] nombres, int[] cantidades, double[] precios, double totalVentas)
- Tarea: Calcula y muestra las siguientes estadísticas:
- Producto más caro (Nombre y Precio).
- Producto con más stock (Nombre y Cantidad).
- Producto con menos stock (Nombre y Cantidad).
- Precio medio de todos los productos del inventario.
- Importe total de ventas (el valor de
totalVentas).
- Pista: ¡Esta función debería llamar a sus propias funciones auxiliares (ej:
encontrarIndiceMaxPrecio,calcularPrecioMedio, etc.) para mantenerse limpia y modular!
Entrega
- Nombra tu fichero como
ud3_ferreteria_[tu_nombre].java.
Esqueleto de Código para Rellenar
Copia este código en tu IDE. Debes crear las cabeceras y el cuerpo de las funciones.