Cyber-Reinoso
Point of sale, inventory and sessions for internet cafés.
In development · desktop, with a React web demoThe decision: the gamer's balance is private. It can be read from outside, but no screen can change it directly: only the class can, with its rules.
self.__saldo_billetera = float(saldo_billetera) @property def saldo_billetera(self): return self.__saldo_billetera
>>>
AttributeError: property 'saldo_billetera' of 'Usuario' object has no setterCharging a session
flamed4rk, Gold rank, plays 90 minutes on an eSports PC. The rate comes from the database, Python applies their discount and the cashier deducts the balance.
Store
SQL Serverdbo.CategoriasEstacion
| categoria | tarifa_hora |
|---|---|
| Regular | 2.00 |
| eSports | 3.00 |
| Streaming VIP | 5.00 |
dbo.RangosCuenta
| rango | descuento |
|---|---|
| Silver | 0.05 |
| Gold | 0.10 |
Rates and discounts live in tables: changing a price doesn't touch the code.
Decide
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)
If the balance falls short, it charges down to zero instead of going negative.
Show
CashierThe PC becomes available again for the next customer.
Example computed with the repository's seed data and the finalizar_sesion method.



