asfasfgagseefff

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 4

Examen Programación III - Ingeniería - Universidad de Deusto

Examen Programación III - enero 2023


● Tienes en ALUD (“Exámenes y Evaluación”) la base para realizar el examen. Descarga el ZIP,
descomprímelo y crea un proyecto en Eclipse con la estructura de carpetas suministrada. Trabaja en
una ruta que puedas localizar fácilmente en el ordenador (por ejemplo el Escritorio).
● Para entregar tu respuesta a través de ALUD, comprime la carpeta raiz del proyecto que has creado
en Eclipse, asegúrate de que tiene los ficheros que has editado y súbelo en la tarea de ALUD.
● Tiempo de examen: 3h.
Partimos de un sistema de búsqueda y reservas de vuelos denominado Easy Booking. La diferencia del
examen con el preparatorio es que se añade el concepto de Alianza Aérea (asociación de aerolíneas que
operan de forma coordinada) y la funcionalidad de creación de reservas de vuelos. Cada alianza área
utiliza un mecanismo distinto para almacenar su información:
● OneWorld: gestiona su información en ficheros CSV (resources/data/*.CSV).
● SkyTime: gestiona su información en un único fichero serializado (resources/data/SKY_TIME.dat).
● StarAlliance: gestiona su información en una base de datos SQLite (resources/db/STAR_ALLIANCE.db).
La funcionalidad proporcionada por cada alianza aérea se implementa heredando de la clase
AirAllianceService.java. Esta clase contiene los métodos básicos para la carga de los datos de los vuelos
desde el sistema de almacenamiento, la búsqueda de vuelos, la realización de reservas y el guardado de
reservas en el sistema de almacenamiento. El servicio de la alianza OneWorld
(OneWorldAllianceService.java) está completamente implementado y tú debes añadir funcionalidad al
servicio de las alianzas SkyTime (serialización a ficheros) y StarAlliance (bases de datos).
Al ejecutar esta nueva versión, verás que la tabla de vuelos ha cambiado. Ahora, para cada vuelo se
añade más información y un botón Reservar que permite realizar reservas. El cuadro de diálogo de
reserva de vuelo muestra la información del vuelo y permite seleccionar más de un billete. A medida
que se aumenta el número de billetes, se añaden elementos a la lista desplegable de personas para
indicar el nombre de cada persona. Para añadir el nombre de una persona hay que seleccionarla en la
lista desplegable y se abre un cuadro de diálogo. Pulsando el botón Confirmar después de completar los
datos de todas las personas, se crea la reserva y el servicio de la alianza correspondiente la almacena.

1
Examen Programación III - Ingeniería - Universidad de Deusto

1. Tareas
Sobre este código, debes realizar una serie de tareas. Entre corchetes encontrarás la puntuación de cada
tarea sobre 10 (+1 extra), las clases en las que debes añadir código y el número aproximado de líneas.

T1. Ficheros [2 puntos] [SkyTimeService.java, 15-20 líneas]


● T1.A Carga los vuelos desde un archivo usando serialización nativa.
Implementa el método Map<String, Flight> loadFlights() para leer el mapa completo de vuelos desde el
fichero serializado resources/data/SKY_TEAM.dat. Podrás validar la implementación en la tarea T3.A o
al ejecutar la aplicación y hacer una búsqueda de ACE -> BIO (aparece el vuelo UX5390).

● T1.B Almacena una reserva en un archivo usando serialización nativa.


Implementa el método storeReservation(Reservation reservation) para guardar el mapa de vuelos en el
fichero resources/data/SKY_TEAM.dat. Este método se ejecuta cada vez que se realiza una reserva. Para
validar el funcionamiento, realiza una reserva para un vuelo gestionado por SkyTeam (por ejemplo:
UX5390 - ACE -> BIO), sal de la aplicación, ejecútala de nuevo y confirma que se incrementa el valor
de la columna RESERVAS para el mismo vuelo.

T2. Base de datos (BBDD) [3 puntos] [StarAllianceService.java, 25-40 líneas]


● T2.A Carga los vuelos desde la BBDD:
Implementa el método Map<String, Flight> loadFlights() para inicializar el mapa de vuelos con la
información almacenada en la BBDD. Los vuelos se guardan en la tabla Flight:
● CODE TEXT: código del vuelo [clave primaria de la tabla].
● ORIGIN TEXT: código del aeropuerto origen [clave externa de la tabla Airport(CODE)].
● DESTINATION TEXT: código del aeropuerto destino [clave externa de la tabla Airport(CODE)].
● AIRLINE TEXT: código de la aerolínea [clave externa de la tabla Airline(CODE)].
● DURATION INTEGER: duración del vuelo en minutos.
● PLANE TEXT: código del avión [clave externa de la tabla Plane(CODE)].
● PRICE REAL: precio del vuelo en euros.
Para implementar este método debes utilizar los métodos loadXXXBD() que recuperan de la BBDD la
información de los aviones, las aerolíneas, los aeropuertos y las reservas. Podrás validar la
implementación en la tarea T3.B o al ejecutar la aplicación y hacer una búsqueda de ACE -> FRA
(aparece el vuelo DE2301).

● T2.B Guardar una reserva en la BBDD:


Implementa el método storeReservation(Reservation reservation) para almacenar una reserva en la
BBDD. Las reservas se guardan en la tabla Reservation:
● LOCATOR TEXT: localizador de la reserva [clave primaria de la tabla].
● FLIGHT TEXT: código del vuelo [clave externa de la tabla Airport(CODE)].
● DATE TEXT: fecha del vuelo en milisegunos [clave externa de la tabla Airport(CODE)].
● PASSENGERS TEXT: nombre y/o apellidos de las personas asociadas a la reserva. Los datos de todas las
personas de una reserva van separados por “;” (punto y coma).
Para validar el funcionamiento, realiza una reserva para un vuelo gestionado por StarAlliance (por
ejemplo: DE2301 - ACE -> FRA), sal de la aplicación, ejecútala de nuevo y confirma que se
incrementa el valor de la columna RESERVAS para el mismo vuelo.

2
Examen Programación III - Ingeniería - Universidad de Deusto

T3. JUnit [2 puntos] [SkyTeamService.java y StarAllianceService.java, 20-25 líneas]


Crea un caso de prueba para validar el correcto funcionamiento de la implementación de los métodos
loadFlights() que has implementado como parte de las tareas T1.A y T2.A. Para ello, dispones de dos
clases vacías (TestSkyTeamService.java y TestStarAllianceService.java) en la carpeta de código fuente test. Pon
atención al configurar tu proyecto para añadir esta carpeta al proyecto y la librería de JUnit 4 (Project >
Properties > Java Build Path).
● T3.A Valida el método loadFlights() de la alianza SkyTeam
Define un método que se ejecute una única vez independientemente de los casos de prueba
existentes.
Crea un caso de prueba en la clase TestSkyTeamService.java que compruebe lo siguiente:
● Que el vuelo "UX2106" no tiene ninguna reserva.
● Que el pasajero "PETER PARKER" tiene una reserva en el vuelo "DL2983".
● Que en el vuelo "AF3474" hay más de 100 asientos libres.

● T3.B Valida el método loadFlights() de la alianza StarAlliance


Define un método que se ejecute una única vez independientemente de los casos de prueba
existentes.
Crea un caso de prueba en la clase TestStarAllianceService.java que compruebe lo siguiente:
● Que el mapa contiene 109 vuelos.
● Que el vuelo "LH3465" cuesta 184.08€.
● Que el nombre de la aerolínea del vuelo "UA3245" es "United Airlines".

T4. Swing [2 puntos]


● T4.A Modifica el modelo de datos de la tabla de vuelos [FlightsTableModel.java, 3 líneas]
Añade una nueva columna a la tabla de aviones para mostrar el porcentaje de asientos disponibles
en el vuelo. La nueva columna se llamará DISPONIBILIDAD y se ubicará justo a la derecha de la
columna ASIENTOS LIBRES. Los asientos libres se representan mediante un valor decimal que resulta
de dividir el número de asientos ocupados entre el número total de asientos del vuelo.

● T4.B Modifica el renderer de la tabla de vuelos [FlightRenderer.java, 5-10 líneas]


El valor de la nueva columna DISPONIBILIDAD debe renderizarse como una barra de progreso
(JProgressBar) de rango 0 a 100. El texto visualizado sobre la barra de progreso será el valor de
disponibilidad con un decimal y el símbolo de “%” porcentaje (por ejemplo, para el vuelo IB4353 -
BIO -> BCN la disponibilidad es de 44,9 %).

T5. Recursividad [2 puntos] [MainWindow.java, 10-15 líneas]


Crea un método recursivo que dados los códigos de aeropuerto origen y destino busque todos los
itinerarios (secuencias de uno o varios vuelos) con un máximo de 2 escalas. Esta funcionalidad se
invoca desde el botón “Búsqueda Recursiva (max. 2 escalas)”.
El método debe ir generando combinaciones de secuencias de vuelos encadenados con un máximo de 3
vuelos en los que el aeropuerto origen del primer vuelo y el aeropuerto destino del último vuelo
coinciden con la selección realizada en las listas desplegables de aeropuerto origen y aeropuerto
destino de la ventana principal. En el código tienes la cabecera del método para implementar esta

3
Examen Programación III - Ingeniería - Universidad de Deusto

funcionalidad: List<List<Flight>> recursiveSearch(String origin, String destination, List<Flight> flights, int max).
Comprueba que un mismo vuelo no aparezca más de una vez en un itinerario y que no se repitan los
itinerarios en el resultado final.
Cuando la funcionalidad esté implementada, el cuadro de diálogo mostrará un JTree con la información
de los itinerarios (ver imagen).

Algunos ejemplos para verificar el funcionamiento de esta funcionalidad son:


● ACE -> BIO: 201 itinerarios
● BIO -> MAD: 658 itinerarios
● CDG -> JFK: 2592 itinerarios

También podría gustarte