🛒 Simulador de Tienda Online
Un proyecto interactivo que simula una tienda en línea donde los clientes pueden agregar productos al carrito, realizar pedidos, gestionar inventarios y procesar pagos.
Módulos del Proyecto
🛍️ Módulo de Productos
- Definir productos con nombre, precio y cantidad en inventario.
- Actualizar el inventario después de cada compra o cuando se agregan nuevos productos.
🛒 Módulo de Carrito
- Permite a los clientes agregar o quitar productos de su carrito.
- Calcular el costo total de los productos en el carrito.
👤 Módulo de Cliente
- Gestionar la creación de nuevos clientes.
- Mantener el historial de compras del cliente.
📦 Módulo de Pedido
- Procesar un pedido, verificar disponibilidad en inventario, y generar la factura.
- Actualizar el inventario después de la compra.
Desarrollo
Creamos la siguiente estructura de carpetas para organizar nuestro proyecto:
tienda_online/
│
├── productos/
│ ├── __init__.py
│ ├── producto.py
│
├── clientes/
│ ├── __init__.py
│ ├── cliente.py
│
├── carrito/
│ ├── __init__.py
│ ├── carrito.py
│
├── pedidos/
│ ├── __init__.py
│ ├── pedido.py
Definimos las clases y funciones necesarias para gestionar la tienda en línea.
🛍️ Productos
En el archivo producto.py, definimos la clase Producto:
# productos/producto.py
class Producto:
def __init__(self, nombre, precio, inventario):
self.nombre = nombre
self.precio = precio
self.inventario = inventario
def actualizar_inventario(self, cantidad):
self.inventario -= cantidad
def __str__(self):
return f"{self.nombre} - ${self.precio} (Inventario: {self.inventario})"
🛒 Carrito
En el archivo carrito.py, definimos la clase Carrito:
# carrito/carrito.py
class Carrito:
def __init__(self):
self.productos = {}
def agregar_producto(self, producto, cantidad):
if producto.nombre in self.productos:
self.productos[producto.nombre] += cantidad
else:
self.productos[producto.nombre] = cantidad
def eliminar_producto(self, producto):
if producto.nombre in self.productos:
del self.productos[producto.nombre]
def total(self):
return sum(producto.precio * cantidad for producto, cantidad in self.productos.items())
def __str__(self):
= "Carrito:\n"
carrito_str for producto, cantidad in self.productos.items():
+= f"{producto}: {cantidad}\n"
carrito_str return carrito_str
👤 Clientes
En el archivo cliente.py, definimos la clase Cliente:
# clientes/cliente.py
class Cliente:
def __init__(self, nombre, email):
self.nombre = nombre
self.email = email
self.historial_compras = []
def agregar_historial(self, pedido):
self.historial_compras.append(pedido)
def ver_historial(self):
if not self.historial_compras:
return "No tienes compras aún."
return "\n".join(str(pedido) for pedido in self.historial_compras)
def __str__(self):
return f"Cliente: {self.nombre} ({self.email})"
📦 Pedidos
En el archivo pedido.py, definimos la clase Pedido:
# pedidos/pedido.py
class Pedido:
def __init__(self, cliente, carrito):
self.cliente = cliente
self.carrito = carrito
self.total = carrito.total()
def procesar_pedido(self):
for producto, cantidad in self.carrito.productos.items():
producto.actualizar_inventario(cantidad)self.cliente.agregar_historial(self)
def __str__(self):
return f"Pedido de {self.cliente.nombre} - Total: ${self.total}"
Prueba del Simulador de Tienda Online
En un archivo de prueba test.py, puedes simular una compra en la tienda:
# test.py
from productos.producto import Producto
from carrito.carrito import Carrito
from clientes.cliente import Cliente
from pedidos.pedido import Pedido
# Crear productos
= Producto("Camiseta", 20.0, 50)
producto1 = Producto("Zapatos", 50.0, 20)
producto2
# Crear un cliente
= Cliente("Juan Pérez", "juan@example.com")
cliente
# Crear un carrito y agregar productos
= Carrito()
carrito 2)
carrito.agregar_producto(producto1, 1)
carrito.agregar_producto(producto2,
print(carrito) # Ver contenido del carrito
# Crear y procesar el pedido
= Pedido(cliente, carrito)
pedido
pedido.procesar_pedido()
print(pedido) # Ver detalles del pedido
print(cliente.ver_historial()) # Ver historial de compras
Al ejecutar el archivo test.py, verás el contenido del carrito, el pedido procesado, y el historial de compras del cliente.
Extra 🎁
- Añadir la funcionalidad de eliminar productos del carrito:
def eliminar_producto(self, producto):
if producto in self.productos:
del self.productos[producto]
- Añadir un sistema de descuento:
def aplicar_descuento(self, porcentaje):
self.total -= self.total * (porcentaje / 100)
- Añadir una interfaz gráfica usando Tkinter:
import tkinter as tk
= tk.Tk()
root
= tk.Label(root, text="¡Bienvenido a la Tienda Online!")
label
label.pack()
root.mainloop()
Conclusión
Con esta estructura básica de POO, hemos creado un simulador de tienda online donde se gestionan productos, carritos, clientes y pedidos. A medida que avances, puedes agregar más características como métodos de pago, envío, y más opciones de interacción para los clientes.
¡Diviértete desarrollando y mejorando tu tienda online! 🚀