Gestió de pàrquing amb control d’entrada/sortida, tiquets i pagament
Diagrama de classes orientatiu del sistema
Simulador de sistema de gestió de pàrquing (Parking CRM) que permet:
- Registrar l’entrada d’un cotxe al pàrquing → generar tiquet
- Associar el tiquet al cotxe
- Registrar la sortida del cotxe → calcular estada i import a pagar
- Gestionar persones (propietaris/ocupants del vehicle)
- Emmagatzemar històric de tiquets al parquímetre
Objectiu principal de l’exercici: aplicar correctament encapsulació, associacions entre classes, gestió de dates/hores (Instant + Duration) i bon disseny orientat a objectes.
| Classe | Responsabilitat principal | Atributs destacats |
|---|---|---|
Parquimetre |
Control d’entrada i sortida, generació de tiquets, registre històric, càlcul de pagament | ArrayList<Tiquet> registreTiquets |
Cotxe |
Vehicle amb matrícula, propietari i ocupants (màx. 4 persones) | String matricula, Persona propietari, List<Persona> ocupants, Tiquet tiquetActiu |
Tiquet |
Registre d’entrada (data/hora + matrícula) – s’utilitza per calcular import a la sortida | Instant horaEntrada, String matriculaCotxe |
Persona |
Representa persones (propietari o ocupants del cotxe) | String nom, String dni (o similar) |
Parking |
(Opcional) Representa l’espai físic del pàrquing si es vol gestionar places ocupades | — |
- Encapsulació completa (atributs
private+ getters/setters quan calgui) - Constructors adequats (sobrecàrrega quan sigui necessari)
- Mètode
toString()ben format a totes les classes - Classe
Parquimetreamb mètode(s) per:- Entrar cotxe → generar i retornar
Tiquet - Pagar/sortir → calcular import i alliberar tiquet
- Entrar cotxe → generar i retornar
- Càlcul correcte del preu segons temps transcorregut
- Màxim 4 ocupants per cotxe (control d’inserció)
- Històric de tiquets al parquímetre
- Classe principal amb
main()que faci proves representatives
// Exemple base proporcionat
double preuPerHora = 2.50; // €/hora (valor recomanat més realista)
Instant entrada = Instant.now();
Instant sortida = entrada.plusSeconds(4500); // +1h 15min
long segons = Duration.between(entrada, sortida).getSeconds();
long hores = (segons + 3599) / 3600; // arrodonir cap amunt
double importTotal = hores * preuPerHora;