V1#
Tema: Gestión de películas y recomendaciones personalizadas
Introducción#
En este parcial, se desarrollará una aplicación que permita gestionar una base de datos local de películas, consultar información adicional desde una API pública, y mostrar estos datos en una interfaz gráfica construida con JavaFX. El objetivo es evaluar las habilidades en programación con JavaFX, el manejo de bases de datos relacionales, y la integración con APIs.
Instrucciones Generales#
Este parcial es individual.
Debes utilizar Java y Scene Builder para construir la interfaz gráfica.
Usa MySQL para gestionar la base de datos local.
Usa la API pública de OMDb para obtener información sobre películas (puedes usar la URL
http://www.omdbapi.com/?t={TITULO}&apikey=c318311b
con la clave del APIapikey=c318311b
).Integra todos los componentes en un proyecto funcional.
Al finalizar, entrega el código fuente del proyecto.
Truco
Pueden usar las guías del curso, Programming II. Empiecen por crear el proyecto con todas las dependencias que se necesitan como se hizo en el taller de LoginApp.
Requerimientos del Proyecto#
Funcionalidades mínimas#
Gestión de películas (CRUD):
Los usuarios deben poder agregar películas en la base de datos local.
Cada película tendrá los siguientes campos:
Título - Title: String
Año - Year: String
Género - Genre: String
Sinopsis - Plot: String
Puntuación - Metascore / imdbRating: Double
Imagen - Poster: String
Truco
Utilicen una clase auxiliar para guardar toda la información, algo como
Pelicula
que tenga todos los campos mencionados.
Consulta de información desde la API:
Al agregar una película, el usuario debe poder buscar información adicional por título o id desde la API.
Si encuentra datos relevantes, debe poder importarlos directamente a los campos correspondientes.
Interfaz gráfica (JavaFX):
La aplicación debe tener una ventana principal con las siguientes secciones:
Formulario de películas: Para imprimir películas que se traen del API.
Botones de acción: Botón para realizar operaciones de ingresar elementos en la tabla creada, los que se obtienen después de realizar la consulta con el botón del API.
Utiliza Scene Builder para organizar los elementos visuales.
Persistencia con MySQL:
Los datos de las películas deben guardarse en una base de datos MySQL local llamada
peliculas_db
.Debes implementar una tabla llamada
peliculas
con los campos mencionados.
Estructura del Proyecto#
Importante
El proyecto debe ser realizado con Maven y debe incorporar todas las dependencias necesarias.
Modelo (Data Layer):
Define una clasePelicula
que represente los datos de una película, debe contener todos los campos mencionados en la sección de las operaciones CRUD. El constructor de la clase debe solicitar los datos de la siguiente manera para que el código del API funcione correctamente:Pelicula(titulo, genero, sinopsis, anio, puntuacion, imagen)
.Base de Datos:
Configura la base de datos MySQL y crea la tablapeliculas
. Usa el siguiente código para la creación de la tabla:CREATE TABLE IF NOT EXISTS peliculas ( id INTEGER PRIMARY KEY AUTOINCREMENT, titulo VARCHAR(50) NOT NULL, anio VARCHAR(50) NOT NULL, genero VARCHAR(50) NOT NULL, sinopsis TEXT NOT NULL, puntuacion DECIMAL(3,2) NOT NULL, imagen VARCHAR(200) );
Recuerden que el único comando que debe ser ejecutado desde Workbrench (o la terminal) debe ser la creación de la base de datos
CREATE DATABASE peliculas_db;
.Además, proporciona métodos en Java para insertar, actualizar, eliminar y consultar películas. Puedes utilizar el código del taller de LoginAPP, sección Implementar el Modelo, o del taller de Operaciones CRUD, Operaciones CRUD para un Licorería.
Integración con la API:
Implementa una claseOmdbApiClient
con un método para buscar información de películas:import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import org.json.JSONObject; public class OmdbApiClient { public static Pelicula buscarPeliculaPorTitulo(String titulo) throws Exception { String apiUrl = "http://www.omdbapi.com/?apikey=c318311b&t=" + titulo.replace(" ", "%20"); URL url = new URL(apiUrl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); String inputLine; StringBuilder response = new StringBuilder(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); JSONObject json = new JSONObject(response.toString()); if (json.getString("Response").equals("True")) { Pelicula pelicula = new Pelicula(json.getString("Title"), json.getString("Genre"), json.getString("Plot"), json.getString("Year"), json.getDouble("imdbRating"), json.getString("Poster") ); return pelicula; } else { throw new Exception("Película no encontrada"); } } }
Controladores (Controller Layer):
Implementa controladores que conecten la interfaz gráfica con la base de datos y la API.Interfaz gráfica (View Layer):
Diseña la interfaz gráfica con Scene Builder. Debe incluir:Formulario de películas:
Campos de texto para título, año, género, sinopsis y puntuación.
Botón para buscar información en la API.
Imagen del videojuego.
Botón «Guardar» o «Insertar»: Para insertar o actualizar datos en la base de datos.

Figura 10 Ejemplo básico de posible interfaz. Cambien algunos colores y tamaños de letra, personalicen la interfaz.#
El funcionamiento es el siguiente:
Antes de lanzar la aplicación, clase
App
, se debe crear la tabla.Se busca una película por título utilizando un botón, la información se muestra en las casillas tipo
TextField
usando el métodoid_elemento.setText()
. Para cambiar la imagen desde el controlador al hacer click en el botón pueden usar:imagen_id.setImage(new Image(imagen_url_string));
Ya visualizada la información, se pueden agregar los elementos dando click en otro botón y debe salir una alerta diciendo que fueron agregados correctamente: en la terminal con un print normal o una ventana de alerta, pueden usar el siguiente código dentro de la acción del botón para hacerla aparecer:
Alert alert = new Alert(AlertType.INFORMATION); alert.setTitle("Título de la alerta"); alert.setHeaderText(null); alert.setContentText("Algún mensaje de interés"); alert.showAndWait();
Entregables#
Código fuente completo en formato zip.
Capturas de pantalla de la interfaz gráfica en funcionamiento. (opcional)
Criterios de Evaluación#
Correcto uso de JavaFX para construir la interfaz.
Funcionamiento de las operaciones CRUD con la base de datos MySQL.
Integración correcta con la API de OMDb.
Diseño limpio y funcional de la interfaz gráfica.
Organización del código en capas (MVC).