El proyecto consistió en diseñar e implementar un sistema de gestión integral para una bicicletería que realiza operaciones de compra, venta y alquiler. El desafío técnico radicó en modelar una arquitectura robusta mediante Programación Orientada a Objetos (OOP) que integrara estructuras de datos fundamentales y permitiera un análisis de mercado basado en datos reales de movilidad.
Equipo: Proyecto realizado en equipo.
ARQUITECTURA Y ESTRUCTURAS DE DATOS
Se aplicó una jerarquía de clases con herencia para organizar roles (Usuario -> Cliente/Empleado) y productos (Bicicleta -> Ciudad/Playera/Carrera). Además, se implementaron estructuras manuales para la gestión eficiente de memoria y procesos:
- Lista Enlazada: Gestión dinámica del inventario de bicicletas (inserción/eliminación constante).
- Árbol Binario de Búsqueda (BST): Optimización de la búsqueda de usuarios por DNI.
- Cola (Queue - FIFO): Gestión de "Próximas Entregas" respetando el orden de llegada.
- Pila (LifoQueue - LIFO): Registro de "Últimos Movimientos" financieros.
ANÁLISIS DE MERCADO (BI)
A partir del procesamiento de conjuntos de datos reales (bicicletas.csv), se generaron hallazgos estratégicos:
- Hubs de Movilidad: Las comunas 1, 14 y 3 concentran la mayor actividad.
- Estacionalidad: Se detectó una caída de uso entre marzo y diciembre, sugiriendo la necesidad de promociones estacionales.
class BicicletaPlayera(Bicicleta):
def __init__(self, ID, marca, color, precio, ...):
super().__init__(ID, marca, color, precio, ...)
self.precio_alquiler = 5000
self.rodado = 26
def costo_alquiler(self, dias, desc_alquiler_semanal, desc_alquiler_mensual):
if 7 <= dias < 30:
cant_semanas = dias // 7
dias_restantes = dias - 7 * cant_semanas
monto = self.precio_alquiler * 7 * cant_semanas * (1 - (desc_alquiler_semanal / 100)) + self.precio_alquiler * dias_restantes
elif dias >= 30:
cant_meses = dias // 30
dias_restantes = dias - 30 * cant_meses
monto = self.precio_alquiler * 30 * cant_meses * (1 - (desc_alquiler_mensual / 100)) + self.precio_alquiler * dias_restantes
elif 0 <= dias < 7:
monto = self.precio_alquiler * dias
return monto
from queue import Queue, LifoQueue
class Bicicleteria:
def __init__(self):
self.proximas_entregas = Queue()
self.pila_transacciones = LifoQueue()
def alquilar(self, bici):
self.proximas_entregas.put(bici.ID)
self.pila_transacciones.put(bici.precio)