Una aplicación JavaFX moderna para gestionar el alquiler de vehículos con persistencia en archivos de texto.
Este proyecto implementa un sistema completo de gestión de alquileres de coches con las siguientes características:
- ✅ Gestión de Clientes (registro, validación de edad)
- ✅ Gestión de Vehículos (registro por tipos: PEQUEÑO, MEDIANO, GRANDE)
- ✅ Sistema de Alquileres (con validación de fechas)
- ✅ Persistencia de datos en archivos
.txt - ✅ Interfaz gráfica moderna con JavaFX
- ✅ Filtrado de vehículos por tipo
- ✅ Validaciones automáticas
- Java JDK 21+
- Maven 3.8+
- JavaFX 21.0.6
- JUnit Jupiter 5.12.1
AlquilerCoches/
├── src/
│ ├── main/
│ │ ├── java/com/alquiler/alquilercoches/
│ │ │ ├── MainApp.java # Clase principal de la aplicación
│ │ │ ├── controller/
│ │ │ │ └── MainController.java # Controlador de la UI
│ │ │ ├── model/
│ │ │ │ ├── Cliente.java # Modelo de Cliente
│ │ │ │ ├── Vehiculo.java # Modelo de Vehículo
│ │ │ │ ├── Alquiler.java # Modelo de Alquiler
│ │ │ │ └── TipoVehiculo.java # Enum de tipos (PEQUEÑO, MEDIANO, GRANDE)
│ │ │ ├── service/
│ │ │ │ └── GestorAlquiler.java # Lógica de negocio principal
│ │ │ └── utility/
│ │ │ └── GestorArchivos.java # Persistencia en archivos
│ │ └── resources/
│ │ └── view/main-view.fxml # Interfaz gráfica (FXML)
│ └── test/
│ └── java/com/alquiler/alquilercoches/
│ └── GestorAlquilerTest.java # Tests unitarios
├── clientes.txt # Datos persistidos de clientes
├── vehiculos.txt # Datos persistidos de vehículos
├── alquileres.txt # Datos persistidos de alquileres
├── pom.xml # Configuración Maven
└── README.md # Este archivo
git clone https://github.com/usuario/AlquilerCoches.git
cd AlquilerCoches./mvnw.cmd clean compileO si tienes Maven instalado:
mvn clean compile./mvnw.cmd javafx:runO con Maven:
mvn javafx:run./mvnw.cmd test- Introduce el DNI del cliente (ej: 12345678A)
- Introduce el Nombre y Apellidos
- Selecciona la Fecha de Nacimiento (debe ser mayor de 25 años)
- Haz clic en "Registrar Cliente"
Validaciones:
- El cliente debe ser mayor de 25 años
- El DNI no puede estar duplicado
- Introduce la Matrícula (ej: MAT0001)
- Introduce el Número de Póliza (ej: POL0001)
- Selecciona el Tipo de Vehículo:
- PEQUEÑO - Vehículos pequeños (ej: utilitarios)
- MEDIANO - Vehículos medianos (ej: sedanes)
- GRANDE - Vehículos grandes (ej: SUVs)
- Selecciona la Fecha de Matriculación
- Haz clic en "Registrar Vehículo"
Validaciones:
- La matrícula no puede estar duplicada
- Todos los campos son obligatorios
- Selecciona un Cliente de la lista de la izquierda
- Selecciona un Vehículo de la lista de la derecha
- Establece la Fecha de Inicio y Fecha de Fin
- Haz clic en "Alquilar Vehículo"
Validaciones:
- La fecha de fin debe ser posterior a la de inicio
- El cliente y vehículo deben estar activos
- El vehículo debe estar disponible
- Selecciona un tipo de vehículo en el desplegable de filtro
- Haz clic en "Filtrar" para ver solo vehículos de ese tipo
- Haz clic en "Ver Todos" para mostrar todos los vehículos
Formato: DNI;Nombre;Apellidos;FechaNacimiento
12345678A;Juan;García López;15/05/1995
87654321B;María;Rodríguez Pérez;22/03/1998
11111111C;Carlos;Martínez Silva;10/07/1992
Formato: Matrícula;NúmeroPóliza;TipoVehículo;FechaMatriculación;Activo
MAT0001;POL0001;PEQUEÑO;15/06/2020;true
MAT0002;POL0002;MEDIANO;10/03/2019;true
MAT0003;POL0003;GRANDE;22/11/2021;true
Tipos válidos: PEQUEÑO, MEDIANO, GRANDE
Formato: DNICliente;MatrículaVehículo;FechaInicio;FechaFin
12345678A;MAT0001;01/02/2025;08/02/2025
87654321B;MAT0002;05/02/2025;12/02/2025
Formato de fechas: dd/MM/yyyy
-
MVC (Model-View-Controller)
- Model: Clases
Cliente,Vehiculo,Alquiler - View:
main-view.fxml - Controller:
MainController
- Model: Clases
-
Service Layer:
GestorAlquiler- Lógica de negocio -
Data Access Layer:
GestorArchivos- Persistencia
MainApp (inicio)
↓
MainController.initialize()
↓
GestorAlquiler (carga datos)
↓
GestorArchivos (lee archivos)
↓
UI actualiza listas
- ✅ Edad mínima de 25 años para clientes
- ✅ DNI y matrícula únicos
- ✅ Validación de fechas (inicio < fin)
- ✅ Tipos de vehículos predefinidos
- ✅ Persistencia automática de datos
- Todos los datos se guardan automáticamente en archivos
.txt - Los datos se cargan al iniciar la aplicación
- Los archivos se crean automáticamente si no existen
- Diseño moderno y responsivo
- Colores intuitivos:
- 🟢 Verde: Registrar Cliente
- 🔵 Azul: Registrar Vehículo
- 🔴 Rojo: Realizar Alquiler
- Validaciones en tiempo real
- Mensajes de estado clara
Cliente(String dni, String nombre, String apellidos, LocalDate fechaNacimiento)- Validación de edad (>= 25 años)
- Gestión de estado activo
Vehiculo(String matricula, String numeroPoliza, TipoVehiculo tipo, LocalDate fechaMatriculacion)- Cálculo de años en uso
- Control de disponibilidad
Alquiler(Cliente cliente, Vehiculo vehiculo, LocalDate fechaInicio, LocalDate fechaFin)- Validación de fechas
- Cálculo de duración
// Métodos principales
boolean registrarCliente(Cliente cliente)
boolean registrarVehiculo(Vehiculo vehiculo)
boolean crearAlquiler(Cliente cliente, Vehiculo vehiculo, LocalDate inicio, LocalDate fin)
List<Vehiculo> filtrarVehiculosPorTipo(TipoVehiculo tipo)El proyecto incluye tests unitarios usando JUnit Jupiter:
./mvnw.cmd test- ✅ Validación de edad de clientes
- ✅ Búsqueda de clientes y vehículos
- ✅ Creación de alquileres
- ✅ Validación de fechas
- ✅ Filtrado de vehículos
Problema: Aparece una lista vacía al abrir la aplicación
Solución:
- Verifica que los archivos
.txtestén en la raíz del proyecto - Comprueba en la consola que dice "Detectado: raíz del proyecto"
- Verifica el formato de los archivos (usar
;como separador)
Problema: El tipo de vehículo no es reconocido
Solución:
- Cambia TURISMO por PEQUEÑO, MEDIANO o GRANDE
- Los valores son case-sensitive
Problema: Error al cargar la interfaz gráfica
Solución:
# Limpia y recompila
./mvnw.cmd clean compile
./mvnw.cmd javafx:runLa documentación JavaDoc está disponible en:
src/main/docs/
Genera la documentación con:
./mvnw.cmd javadoc:javadocLas contribuciones son bienvenidas. Por favor:
- Fork el proyecto
- Crea una rama para tu característica (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.
Eneko
Para preguntas o sugerencias, por favor abre un issue en el repositorio.
- ✅ Versión inicial
- ✅ CRUD de clientes
- ✅ CRUD de vehículos
- ✅ Sistema de alquileres
- ✅ Persistencia en archivos
- ✅ Interfaz gráfica completa
- ✅ Tests unitarios
- Base de datos (MySQL/PostgreSQL)
- API REST
- Aplicación web (Spring Boot + Vue.js)
- Exportar reportes (PDF/Excel)
- Autenticación de usuarios
- Sistema de pagos
- Notificaciones por email
- Los datos se guardan en archivos de texto simple. Para producción, usa una base de datos
- La aplicación no incluye validación de seguridadavanzada
- Los archivos de datos deben estar siempre en la raíz del proyecto
¡Gracias por usar el Sistema de Alquiler de Coches! 🚗