jueves, 13 de junio de 2024

Caso de estudio – CRUD

 Planteamiento

En la empresa KD-Electronics venden productos electrónicos y desean desarrollar un sistema de gestión de inventario. En el módulo de productos se debe realizar un CRUD, es decir, el registro (create) de nuevos productos en el inventario con su código de producto, nombre, descripción, precio base, precio de venta, categoría y cantidad disponible; así mismo, la actualización (update) de todos los campos, excepto el código del producto; en la parte de eliminación (delete) del producto, no se podrá eliminar físicamente y se debe permitir traer consultas (read) por código de producto.

Desarrollo

Para implementar un sistema de gestión de inventario en Java que permita realizar operaciones CRUD sobre productos, primero crearemos una clase Producto que represente los datos de los productos. Luego, implementaremos un controlador para gestionar las operaciones CRUD y finalmente una vista por consola para interactuar con el sistema.


Clase Producto

Gitub

https://github.com/jdavisanb/Unimin_POO_S6/blob/695e245bd2689ae9b0d8a8848a3c26a1f0628fe6/Clase_Producto


Explicación detallada:

Atributos de la clase:

codigo: El código único que identifica al producto.

nombre: El nombre del producto.

descripcion: Una breve descripción del producto.

precioBase: El precio base del producto.

precioVenta: El precio de venta del producto.

categoria: La categoría a la que pertenece el producto.

cantidadDisponible: La cantidad disponible del producto en el inventario.

 

Constructor:

Producto(String codigo, String nombre, String descripcion, double precioBase, double precioVenta, String categoria, int cantidadDisponible): Este constructor inicializa un nuevo objeto Producto con los valores proporcionados.


Métodos Getters y Setters:

getCodigo(): Devuelve el código del producto.

setNombre(String nombre), setDescripcion(String descripcion), setPrecioBase(double precioBase), setPrecioVenta(double precioVenta), setCategoria(String categoria), setCantidadDisponible(int cantidadDisponible): Estos métodos permiten modificar los atributos del producto excepto el código, ya que este no se puede cambiar una vez asignado.


Método toString():

toString(): Devuelve una representación en forma de cadena de texto del objeto Producto, mostrando todos sus atributos. Esto es útil para mostrar información del producto en la consola.


Clase ProductoController

Github

https://github.com/jdavisanb/Unimin_POO_S6/blob/97f9ee7c2b1310c23d6c05cf8a1422e5ef9c3d72/ProductoController


Explicación detallada:

Atributo inventario:

Map<String, Producto> inventario: Un mapa que almacena los productos utilizando su código como clave. Permite acceso rápido a los productos por su código.


Constructor:

ProductoController(): Inicializa el inventario como un HashMap.

 

Métodos CRUD:

createProducto(String codigo, String nombre, String descripcion, double precioBase, double precioVenta, String categoria, int cantidadDisponible): Crea un nuevo producto y lo agrega al inventario. Imprime un mensaje de confirmación en la consola.

readProducto(String codigo): Busca un producto en el inventario por su código y lo devuelve.

updateProducto(String codigo, String nombre, String descripcion, double precioBase, double precioVenta, String categoria, int cantidadDisponible): Actualiza los atributos de un producto existente (excepto el código). Si el producto no se encuentra, imprime un mensaje en la consola.

deleteProducto(String codigo): Marca un producto como eliminado estableciendo su cantidad disponible a 0. Si el producto no se encuentra, imprime un mensaje en la consola.


Clase Main

Gitub

https://github.com/jdavisanb/Unimin_POO_S6/commit/3e6041c33a477d6b2fe6de6ebbf51537af8c8864

 

Explicación detallada:

Inicialización:

ProductoController controller = new ProductoController(): Crea una instancia del controlador de productos.

Scanner scanner = new Scanner(System.in): Crea una instancia del escáner para leer la entrada del usuario desde la consola.

 

Variables locales:

Variables como codigo, nombre, descripcion, categoria, precioBase, precioVenta, cantidadDisponible se utilizan para almacenar temporalmente la entrada del usuario.


Menú principal:

Se muestra un menú con opciones para crear, leer, actualizar y eliminar productos, así como salir del sistema.

El usuario selecciona una opción, que se lee con scanner.nextInt().

scanner.nextLine() se usa para consumir la nueva línea que queda en el buffer del escáner después de leer un entero.


Switch case para manejar opciones:

Caso 1 (Crear Producto): Se solicitan todos los datos necesarios para crear un nuevo producto. Luego se llama a controller.createProducto(...) para crear y agregar el producto al inventario.

Caso 2 (Leer Producto): Se solicita el código del producto y se llama a controller.readProducto(codigo) para buscar y mostrar el producto.

Caso 3 (Actualizar Producto): Se solicita el código del producto y todos los datos nuevos para actualizar el producto. Luego se llama a controller.updateProducto(...).

Caso 4 (Eliminar Producto): Se solicita el código del producto y se llama a controller.deleteProducto(codigo) para marcar el producto como eliminado.

Caso 5 (Salir): Se imprime un mensaje y se sale del bucle do-while, terminando el programa.

Default: Se maneja cualquier opción no válida mostrando un mensaje de error.


Cierre del escáner:

scanner.close(): Se cierra el escáner al final del programa para liberar recursos.

No hay comentarios:

Publicar un comentario

Reflexión personal

 Esta práctica me dejó una gran enseñanza. Descubrí que existen muchas organizaciones que trabajan incansablemente por mejorar el país, y qu...