Cyber-Reinoso
Punto de venta, inventario y sesiones para cabinas de internet.
En desarrollo · escritorio, con demo web en ReactLa decisión: el saldo del gamer es privado. Se puede leer desde fuera, pero ninguna pantalla puede cambiarlo directamente: solo la clase, con sus reglas.
self.__saldo_billetera = float(saldo_billetera) @property def saldo_billetera(self): return self.__saldo_billetera
>>>
AttributeError: property 'saldo_billetera' of 'Usuario' object has no setterCobrar una sesión
flamed4rk, rango Oro, juega 90 minutos en una PC eSports. La tarifa sale de la base, Python aplica su descuento y la caja descuenta el saldo.
Guardar
SQL Serverdbo.CategoriasEstacion
| categoria | tarifa_hora |
|---|---|
| Regular | 2.00 |
| eSports | 3.00 |
| Streaming VIP | 5.00 |
dbo.RangosCuenta
| rango | descuento |
|---|---|
| Plata | 0.05 |
| Oro | 0.10 |
Tarifas y descuentos viven en tablas: cambiar un precio no toca el código.
Decidir
Python# polimorfismo: cada tipo de PC cobra a su tarifa costo_base = self.estacion.calcular_tarifa( minutos_consumidos) descuento = costo_base * self.usuario.porcentaje_descuento monto_a_cobrar = costo_base - descuento if monto_a_cobrar > self.usuario.saldo_billetera: self.monto_cobrado = self.usuario.descontar_saldo_hasta_cero(...) else: self.usuario.descontar_saldo(monto_a_cobrar)
Si el saldo no alcanza, se cobra hasta cero en vez de dejarlo negativo.
Mostrar
CajaLa PC vuelve a quedar disponible para el siguiente cliente.
Ejemplo calculado con los datos semilla del repositorio y el método finalizar_sesion.



