Sistema completo de gestión de parqueos desarrollado en Java con arquitectura en capas. Permite administrar parqueos, vehículos, clientes, espacios, tarifas y tickets de estacionamiento.
El proyecto sigue una arquitectura en capas con el package base cr.ac.ucenfotec:
carParking/
├── src/
│ └── cr/
│ └── ac/
│ └── ucenfotec/
│ ├── Main.java # Punto de entrada
│ ├── bl/ # Business Logic Layer
│ │ ├── entities/ # Entidades del dominio
│ │ │ ├── Vehiculo.java # Clase abstracta
│ │ │ ├── Auto.java
│ │ │ ├── Moto.java
│ │ │ ├── Cliente.java
│ │ │ ├── Parqueo.java
│ │ │ ├── Espacio.java
│ │ │ ├── Tarifa.java
│ │ │ ├── Ticket.java
│ │ │ └── Usuario.java
│ │ └── logic/
│ │ ├── Gestor.java # Lógica de negocio
│ │ └── AuthService.java # Autenticación
│ ├── dl/ # Data Layer
│ │ └── Data.java # Gestión de datos
│ ├── tl/ # Transaction Layer
│ │ └── Controller.java # Controlador principal
│ └── ui/ # User Interface
│ ├── UI.java # Interfaz base
│ ├── UIAdmin.java # Interfaz administrador
│ ├── UILogin.java # Interfaz login
│ └── UIUsuario.java # Interfaz usuario
└── parqueo.iml # Archivo de proyecto IntelliJ
┌─────────────────────────────────────┐
│ Main.java │ ← Punto de entrada
└──────────────┬──────────────────────┘
│
↓
┌─────────────────────────────────────┐
│ Controller (tl) │ ← Controlador
│ - Coordina UI y Gestor │
└──────┬──────────────────────┬───────┘
│ │
↓ ↓
┌─────────────┐ ┌─────────────────┐
│ UI (ui) │ │ Gestor (logic) │ ← Lógica
│ - Menús │ │ - Operaciones │
│ - Entrada │ │ - Validaciones │
└─────────────┘ └────────┬────────┘
│
↓
┌─────────────────┐
│ Data (dl) │ ← Datos
│ - Colecciones │
│ - Búsquedas │
└────────┬────────┘
│
↓
┌─────────────────┐
│ Entities (bl) │ ← Entidades
│ - 8 clases │
└─────────────────┘
- Parqueos: Registrar parqueos con nombre, dirección y capacidad
- Vehículos: Registrar autos y motos con sus características específicas
- Clientes: Gestionar información de clientes y sus vehículos
- Espacios: Crear espacios para autos, motos o discapacitados
- Tarifas: Definir tarifas por hora, diarias y mensuales
- Registro de Entrada: Asignar vehículo a un espacio disponible
- Registro de Salida: Calcular tiempo y costo de estacionamiento
- Procesamiento de Pagos: Gestionar pagos de tickets
- Consultas: Listar parqueos, vehículos, clientes, espacios, tarifas y tickets
- Java 8 o superior
- IntelliJ IDEA (recomendado)
El sistema presenta un menú con las siguientes opciones:
- Registrar Parqueo
- Registrar Auto
- Registrar Moto
- Registrar Cliente
- Registrar Espacio
- Registrar Tarifa
- Asignar Vehículo a Cliente
- Asignar Espacio a Parqueo
- Asignar Tarifa a Parqueo
- Registrar Entrada de Vehículo
- Registrar Salida de Vehículo
- Procesar Pago
-
Listar Parqueos
-
Listar Vehículos
-
Listar Clientes
-
Listar Espacios
-
Listar Espacios Disponibles
-
Listar Tarifas
-
Listar Tickets
-
Listar Tickets Activos
-
Salir
-
Configuración Inicial
- Registrar un Parqueo
- Registrar Espacios
- Registrar Tarifas
- Asignar Espacios al Parqueo
- Asignar Tarifa al Parqueo
-
Registro de Clientes y Vehículos
- Registrar Cliente
- Registrar Vehículo (Auto o Moto)
- Asignar Vehículo al Cliente
-
Operación Diaria
- Registrar Entrada (genera ticket)
- Registrar Salida (calcula costo)
- Procesar Pago
1. Registrar Parqueo: "Parqueo Central", "Calle 123", capacidad: 50
2. Registrar Espacio: "A-01", tipo: AUTO
3. Registrar Tarifa: "Tarifa Estándar", $2.50/hora, $20/día, $400/mes
4. Asignar Espacio A-01 al Parqueo Central
5. Asignar Tarifa al Parqueo
6. Registrar Auto: Placa "ABC123", Toyota Corolla, etc.
7. Registrar Entrada: Vehículo ABC123 en Espacio A-01 → Genera Ticket
8. Registrar Salida: Ticket TKT-0001 → Calcula costo según horas
9. Procesar Pago: Ticket TKT-0001 → Marca como pagado
El sistema calcula automáticamente el costo según:
- < 24 horas: Tarifa por hora × número de horas
- ≥ 24 horas: Tarifa diaria × días + tarifa por hora × horas restantes
- ≥ 720 horas (30 días): Tarifa mensual
- Encapsulamiento: Todas las clases siguen principios de POO
- Herencia: Vehiculo es clase abstracta, Auto y Moto heredan
- Polimorfismo: Método getTipoVehiculo() implementado diferente en cada clase
- Abstracción: Clases y métodos bien definidos para cada entidad
Joaquin Alberto Pappa Larreal.