Descripción y objetivo
E ste proyecto tiene como objetivo desarrollar un sistema de gestión de inventarios eficiente, con una interfaz basada en consola que permita a los usuarios realizar operaciones clave, como agregar, buscar, eliminar y listar productos. Además, se incluyen cálculos para el valor total del inventario y validaciones que aseguran la correcta manipulación de los datos.
Funcionalidades Principales
✅ Gestión de productos: Carga, búsqueda y eliminación de productos mediante un identificador único.
✅ Cálculo de métricas: Determinación del valor total del inventario y promedio de precios.
✅ Control de stock: Listado de productos con niveles bajos de inventario.
✅ Persistencia de datos: Opción para guardar la información en un archivo de texto.
✅ Interfaz basada en menú: Sistema interactivo que funciona hasta que el usuario decide salir.
Enfoque en Programación Orientada a Objetos (POO)
-
- Encapsulamiento: Métodos get y set para acceder y modificar atributos.
- Herencia: Clase Artículo como base y Producto como subclase.
- Polimorfismo: Métodos sobrescritos para mostrar información de cada producto.
- Abstracción: Métodos abstractos que garantizan la implementación de ciertas funcionalidades.
- Encapsulamiento: Métodos get y set para acceder y modificar atributos.
Código
A continuación, se muestra un fragmento del código Python del proyecto, ya que es extenso y no se visualiza bien en dispositivos móviles. Se recomienda verlo en Google Colab, GitHub o descargar el notebook para acceder al código completo, los comentarios y realizar pruebas.
from abc import ABC, abstractmethod
# Importamos el modulo 're' para trabajar con expresiones regulares
import re
class Articulo(ABC):
# Inicializamos el metodo constructor de la clase 'Articulo'
def __init__(self, nombre, categoria, proveedor):
# Asignamos el valor del argumento 'Nombre' a la variable de instancia '_nombre'
self._nombre = nombre
# Asignamos el valor del argumento 'Categoria' a la variable de instancia '_categoria'
self._categoria = categoria
# Asignamos el valor del argumento 'Proveedor' a la variable de instancia '_proveedor'
self._proveedor = proveedor
# Metodo Getter para el atributo 'Nombre' que
# Permite Obtener el nombre del Articulo
@property
def nombre(self):
return self._nombre
# Metodo Setter para el atributo 'Nombre' que
# Permite establecer un nuevo nombre para el Articulo
@nombre.setter
def nombre(self, ingresar_nuevo_nombre):
self._nombre = ingresar_nuevo_nombre
# Metodo Getter para el atributo 'Categoria' que
# Permite Obtener la Categoria del Articulo
@property
def categoria(self):
return self._categoria
# Metodo Setter para el atributo 'Categoria' que
# Permite establecer una nueva Categoria para el Articulo
@categoria.setter
def categoria(self, ingresar_nueva_categoria):
self._categoria = ingresar_nueva_categoria
# Metodo Getter para el atributo 'Proveedor' que
# Permite Obtener el Proveedor del Articulo
@property
def proveedor(self):
return self._proveedor
# Metodo Setter para el atributo 'Proveedor' que
# Permite establecer un Nuevo Proveedor para el Articulo
@proveedor.setter
def proveedor(self, ingresar_nuevo_proveedor):
self._proveedor = ingresar_nuevo_proveedor
@abstractmethod
def mostrar_informacion(self):
pass
# Creamos una subclase 'Producto'de la clase base 'Articulo'
class Producto(Articulo):
def __init__(self, nombre, categoria, proveedor, codigo, cantidad_stock, precio):
# Llamamos al metodo constructor de la clase base (Articulo)
# para inicializar 'nombre', 'categoria' y 'proveedor'
super().__init__(nombre, categoria, proveedor)
# Asignamos el valor del argumento 'Codigo' a la variable de instancia '_codigo'
self._codigo = codigo
# Asignamos el valor del argumento 'Cantidad_Stock' a la variable de instancia '_cantidad_stock'
self._cantidad_stock = cantidad_stock
# Asignamos el valor del argumento 'Precio' a la variable de instancia '_precio'
self._precio = precio
# Metodo Getter para el atributo 'codigo' que
# Permite Obtener el Codigo del Articulo
@property
def codigo(self):
return self._codigo
# Metodo Setter para el atributo 'Codigo' que
# Permite establecer un Nuevo Codigo para el Articulo
@codigo.setter
def codigo(self, ingresar_nuevo_codigo):
self._codigo = ingresar_nuevo_codigo
# Metodo Getter para el atributo 'Cantidad_Stock' que
# Permite Obtener la Cantidad de Stock del Articulo
@property
def cantidad_stock(self):
return self._cantidad_stock
# Metodo Setter para el atributo 'Cantidad_Stock' que
# Permite establecer una nueva Cantidad de Stock para el Articulo
@cantidad_stock.setter
def cantidad_stock(self, ingresar_nuevo_stock):
self._cantidad_stock = ingresar_nuevo_stock
# Metodo Getter para el atributo 'Precio' que
# Permite Obtener el Precio del Articulo
@property
def precio(self):
return self._precio
# Metodo Setter para el atributo 'Precio' que
# Permite establecer un nuevo Precio para el Articulo
@precio.setter
def precio(self, ingresar_nuevo_precio):
self._precio = ingresar_nuevo_precio
# Creamos el metodo informacion para la subclase Producto
def mostrar_informacion(self):
return f'Codigo de Producto: {self.codigo} - Nombre del producto: {self._nombre} - Categoria: {self.categoria} - Precio: ${self.precio} - Stock: {self.cantidad_stock} Unidades - Proveedor: {self.proveedor}'





