Actividad Entregable UD5: Gestión de Cine 🎬
Resultados de Aprendizaje
Esta actividad trabaja los siguientes RAs del módulo de Programación:
- RA2, RA4, RA6 — Diseña clases con atributos, métodos y constructores. Aplica encapsulamiento y principios de POO. Utiliza estructuras de datos dinámicas para almacenar colecciones de objetos e implementa lógica de negocio en métodos específicos.
Objetivo
Diseñar y construir un programa orientado a objetos aplicando encapsulamiento, constructores y estructuras de datos dinámicas como ArrayList.
Contexto
El Cine "Alucine Max" necesita un sistema para gestionar sus salas y la venta de entradas. Tú eres el programador backend encargado de diseñar la estructura de datos y la lógica para hacer esto posible. Cada sala proyecta una película diferente y tiene una capacidad fija.
Enunciado
Desarrolla una aplicación modular en Java con las siguientes características:
1. Clase Sala
Esta clase representará cada una de las salas del cine.
-
Atributos:
asientos: Matriz de caracteres (char[][]) que representa las filas y columnas de butacas.numSala: Número identificativo de la sala (int).pelicula: Título de la película (String).horaProyeccion: Hora de la sesión (String, ej: "18:00").recaudacionSala: Dinero acumulado por ventas (double).recaudacionTotal: (Estático) Acumula la recaudación total de todos los cines (double).- Constantes: El precio de la entrada es fijo: 5.99 (
double). El número de filas y de las columnas son 6 y 10, respectivamente (int).
-
Constructores:
- Constructor por defecto: No recibe parámetros. Crea por defecto una sala de 6 filas x 10 columnas, el número de la sala es 0, la película es "", la hora de la proyección es "" y la recaudación de la sala es 0.
- Constructor parcial: Recibe
numSala,peliculayhoraProyeccion. Crea por defecto una sala de 6 filas x 10 columnas y pone la recaudación de la sala a 0.
Nota
El constructor debe inicializar la matriz de asientos con el carácter
'.'(libre). -
Métodos:
void mostrarSala(): Muestra por consola el estado de los asientos (matriz).boolean asientoDisponible(int fila, int columna): Devuelvetruesi el asiento está libre ('.') y dentro de rango.void venderEntrada(int fila, int columna): Marca el asiento como ocupado (ej:'X') y suma el precio a la recaudación (total y de la sala).double getRecaudacionSala(): Devuelve el dinero recaudado de la sala.int getAsientosDisponibles(): Devuelve el número total de asientos vacíos en la sala.String toString(): Devuelve una cadena con la información de la sala: número, película, hora y número de asientos disponibles.static double getRecaudacionTotal(): Método estático que devuelve la recaudación total de todas las salas.- Getters y Setters: Debes implementar los métodos get y set para los atributos
numSala,peliculayhoraProyeccion.
2. Clase Main (Programa Principal)
Usa un ArrayList<Sala> para gestionar las diferentes salas del cine. Genera las funciones y procedimientos necesarios para que el programa pueda:
- Configuración inicial: Crea varias salas con diferentes películas y añádelas a tu lista.
-
Menú de opciones:
- A) Crear sala (Añadir una nueva sala al cine).
- B) Ver cartelera (Listar salas con su información básica).
- C) Ver sala (Mostrar butacas de una sala específica).
-
D) Vender entrada (Pedir sala, fila y columna, validando disponibilidad).
En caso de no poder realizar la venta, porque el asiento no está disponible, mostrará el siguiente mensaje:
-
E) Ver recaudación de sala (Muestra el dinero reacudado por una sala).
- F) Recaudación total del cine (Recaudación de todas las salas).
- G) Salir.
Pistas de Implementación
Matriz de Asientos
Para inicializar la matriz en el constructor, necesitarás recorrerla con dos bucles for anidados y asignar el carácter . a cada posición.
Venta de Entradas
Recuerda comprobar asientoDisponible() antes de vender. Si el asiento está libre, cámbialo a ocupado (ej. X) y suma 5.99 a la recaudación de esa sala.