Saltar a contenido

Ejercicio Entregable UD09: Gestión de Vuelos

Resultados de Aprendizaje

Este ejercicio trabaja los siguientes RAs del módulo de Programación:

  • RA5, RA9 — Gestiona información almacenada en bases de datos manteniendo la integridad y consistencia de los datos. Crea interfaces gráficas de usuario (GUI) para aplicaciones de escritorio integrando JavaFX con acceso a datos JDBC.

Objetivo

Poner en práctica todos los conocimientos adquiridos sobre JavaFX (creación de interfaces, controladores y contenedores) integrando el acceso a datos mediante JDBC visto en la unidad anterior.


Descripción del Proyecto

El objetivo es desarrollar una aplicación de escritorio con una única pantalla para gestionar los vuelos de salida de un aeropuerto.

Cada Vuelo estará definido por las siguientes propiedades:

  • Número de vuelo: Una cadena alfanumérica (ej: IB3456, RYA992). Actuará como identificador único.
  • Ciudad de destino: El nombre de la ciudad a la que se dirige el vuelo (ej: Madrid, Londres).
  • Fecha de salida: La fecha en la que sale el vuelo. Debe tener el formato YYYY-MM-DD.
  • Duración: Expresada en minutos.

Requisitos de la Aplicación

La aplicación debe cumplir con los siguientes requisitos:

1. Base de Datos (Integración UD08)

  • Deberás crear una base de datos con una tabla vuelo que almacene la información descrita.
  • Implementar el patrón DAO (por ejemplo, un VueloDAO) para aislar la lógica de acceso a la base de datos de la interfaz gráfica.
  • El DAO debe contener métodos para, al menos: insertar un nuevo vuelo, eliminar un vuelo existente y obtener la lista de todos los vuelos. También los métodos para la parte de filtrado.

2. Interfaz de Usuario (JavaFX)

  • Toda la interacción se realizará en una única pantalla (un único archivo .fxml).
  • La pantalla debe estar dividida en dos zonas principales:
  • Formulario de Entrada: Con los campos necesarios para introducir el número de vuelo, fecha, destino y duración, además de un botón "Añadir Vuelo" y "Borrar Vuelo".
  • Visor de Datos: Un TableView que muestre en tiempo real los vuelos registrados.

3. Funcionalidades Obligatorias

  • Listar Vuelos: Al iniciar la aplicación, el TableView debe cargar automáticamente todos los vuelos existentes en la base de datos.
  • Añadir Vuelo: Al rellenar el formulario y pulsar el botón, el vuelo debe guardarse en la base de datos mediante el DAO y, a continuación, el TableView debe actualizarse para mostrar el nuevo registro.
  • Eliminar Vuelo: Se debe permitir seleccionar una fila en el TableView y pulsar un botón "Eliminar". Esto borrará el registro de la base de datos y refrescará la vista. (Recomendado: Añadir un diálogo de confirmación Alert antes de proceder al borrado definitivo).

4. Aplicar Filtros

Añadir opciones en la interfaz para aplicar los siguientes filtros:

  • Filtro 1: Mostrará los vuelos de más de 3 horas (180 minutos).
  • Filtro 2: Cogerá el campo Ciudad de destino y mostrará sólo los vuelos a esa ciudad.

Puedes usar un desplegable con dos opciones para aplicar los filtros y un botón para aplicar el filtro. Por defecto no debe estar ningún filtro aplicado, es decir, se deben mostrar todos los vuelos.

Nota: La lógica de ordenación o filtrado puedes realizarla mediante consultas SQL específicas en el DAO o manipulando la colección de datos en Java.

Ejemplo de la interfaz

Hola mundo

Script de inicialización Base de Datos

CREATE DATABASE app_flights;

\c app_flights;

CREATE TABLE flight (
    id_flight SERIAL PRIMARY KEY,
    num_flight VARCHAR(100) UNIQUE NOT NULL,
    destination VARCHAR(100) NOT NULL,
    departure DATE NOT NULL,
    duration INT DEFAULT 30
);

INSERT INTO flight(num_flight,destination,departure,duration) VALUES('IB601N','Bilbao','2026-05-04',83);
INSERT INTO flight(num_flight,destination,departure,duration) VALUES('RY112A','Edinburgh','2026-05-04',192);
INSERT INTO flight(num_flight,destination,departure,duration) VALUES('AA295H','New York','2026-05-05',452);
INSERT INTO flight(num_flight,destination,departure,duration) VALUES('RY131P','London','2026-05-05',175);
INSERT INTO flight(num_flight,destination,departure,duration) VALUES('WA338L','Krakow','2026-05-07',175);
INSERT INTO flight(num_flight,destination,departure,duration) VALUES('RY117H','Bilbao','2026-05-07',83);

Rúbrica y Consideraciones Adicionales

Se valorará de forma positiva:

  • La correcta separación arquitectónica (Controlador JavaFX vs modelo y DAO de acceso a datos).
  • El manejo adecuado de excepciones (por ejemplo, mostrar un Alert de error si se intenta añadir un vuelo con un número que ya existe en la BD o si hay un fallo de conexión).
  • Que la interfaz (FXML) sea limpia y utilice correctamente los contenedores y elementos de JavaFX.
  • La configuración adecuada de las columnas del TableView (uso de PropertyValueFactory).