Programming
T05-001-07 Cines.
Enunciado
Gestionar entradas.
Crea el apartado de menú GESTIONAR ENTRADAS, junto con las opciones de menú:
6. Vender entradas7. Devolver entradas.Vender entradas
Debe solicitar, por teclado, el número de entradas que se está solicitando comprar.
El número de entradas introducido se enviará al método
venderEntradasde la claseSalaCine, debiendo controlar si dicho método lanza la excepciónIllegalArgumentException.El método
public void venderEntradas(int numeroEntradas):
- comprueba si el número de entradas ya ocupadas más el número de entradas que se están vendiendo superaría el aforo, en cuyo caso se lanzaría un nuevo objeto excepción de la clase
IllegalArgumentException.- también se lanzaría la excepción
IllegalArgumentExceptionen el caso de que el número de entradas fuera negativo.- si se cumplen los requisitos, se utilizará el método
setButacasOcupadaspara indicar que el número de butacas ocupadas se ha incrementado en el número de entradas vendidas.Devolver entradas
Debe solicitar, por teclado, el número de entradas que se está solicitando devolver.
El número de entradas introducido se enviará al método
devolverEntradasde la claseSalaCine, debiendo controlar si dicho método lanza la excepciónIllegalArgumentException.El método
public void devolverEntradas(int numeroEntradas):
- comprueba si el número de entradas que se intenta devolver es mayor que el número de butacas ocupadas , en cuyo caso se lanzaría un nuevo objeto excepción de la clase
IllegalArgumentException.- también se lanzaría la excepción
IllegalArgumentExceptionen el caso de que el número de entradas fuera negativo.- si se cumplen los requisitos, se utilizará el método
setButacasOcupadaspara indicar que el número de butacas ocupadas se ha decrementado en el número de entradas devueltas.
Solución
package cines;
import java.util.Scanner;
public class Cines {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int opcion;
String nombreSala;
int aforo;
String pelicula;
double precioEntrada;
int numEntradas;
double recaudacionTotal;
SalaCine sala = null;
do {
opcion = imprimirMenu(sc, sala != null);
if (opcion == 1 && sala == null) {
System.out.println("CREAR SALA de CINE");
System.out.println("-------------------");
System.out.print("Nombre de sala: ");
nombreSala = sc.nextLine();
System.out.print("Aforo de sala: ");
aforo = sc.nextInt();
try {
sala = new SalaCine(nombreSala, aforo);
} catch (IllegalArgumentException ex) {
System.out.println("ERROR: Valores erroneos para sala");
}
} else if (sala != null) {
switch (opcion) {
case 2:
System.out.println("BORRAR SALA de CINE");
System.out.println("-------------------");
sala = null;
break;
case 3:
System.out.println("LISTAR SALAS de CINE");
System.out.println("-------------------");
System.out.println("Sala: " + sala.getNombre() + "\tAforo: " + sala.getAforo());
break;
case 4:
System.out.println("CREAR SESION DE PROYECCION");
System.out.println("-------------------");
System.out.print("Nombre de la pelicula: ");
pelicula = sc.nextLine();
sala.setPelicula(pelicula);
System.out.print("Precio de la entrada: ");
try {
precioEntrada = Double.parseDouble(sc.nextLine());
sala.setPrecioEntrada(precioEntrada);
} catch (NumberFormatException ex1) {
System.out.println("ERROR: Valor introducido incorrecto");
} catch (NullPointerException ex2) {
System.out.println("ERROR: Valor NO introducido");
}
break;
case 5:
System.out.println("LISTAR CARTELERA");
System.out.println("-------------------");
System.out.println("Sala: " + sala.getNombre() + "\tAforo: "
+ sala.getAforo());
System.out.println("\tPelicula: " + sala.getPelicula()
+ "\t\tPrecio de la entrada: " + sala.getPrecioEntrada() + " euros");
System.out.println("\tButacas ocupadas: " + sala.getButacasOcupadas()
+ "\tButacas libres: " + sala.getButacasLibres()
+ "\tPorcentaje de ocupacion: " + sala.getPorcentajeOcupacion());
break;
case 6:
System.out.println("VENDER ENTRADAS");
System.out.println("-------------------");
System.out.print("Cantidad de entradas: ");
numEntradas = sc.nextInt();
try {
sala.venderEntradas(numEntradas);
} catch (IllegalArgumentException ex) {
System.out.println("ERROR: Numero de entradas incorrecto");
}
break;
case 7:
System.out.println("DEVOLVER ENTRADAS");
System.out.println("-------------------");
System.out.print("Cantidad de entradas: ");
numEntradas = sc.nextInt();
try {
sala.devolverEntradas(numEntradas);
} catch (IllegalArgumentException ex) {
System.out.println("ERROR: Numero de entradas incorrecto");
}
break;
}
}
} while (opcion != 0);
}
public static int imprimirMenu(Scanner sc, boolean existeSala) {
int opcion;
do {
System.out.println("\n========");
System.out.println("= MENU =");
System.out.println("========");
System.out.println("\t0. Salir");
System.out.println("GESTIONAR SALA");
System.out.println("--------------------");
System.out.println("\t1. Crear sala de cine");
if (existeSala) {
System.out.println("\t2. Borrar sala de cine");
System.out.println("\t3. Listar salas de cine");
System.out.println("GESTIONAR CARTELERA");
System.out.println("--------------------");
System.out.println("\t4. Crear sesion de proyeccion");
System.out.println("\t5. Listar cartelera");
System.out.println("GESTIONAR ENTRADAS");
System.out.println("--------------------");
System.out.println("\t6. Vender entradas");
System.out.println("\t7. Devolver entradas");
}
System.out.print("Elija una opcion: ");
opcion = sc.nextInt();
System.out.println();
} while (opcion < 0 || opcion > 7);
sc.nextLine();
return opcion;
}
}
class SalaCine {
private String nombre;
private int aforo;
private int butacasOcupadas;
private String pelicula;
private double precioEntrada;
public SalaCine() {
this.nombre = "Sala";
this.aforo = 100;
this.butacasOcupadas = 0;
this.pelicula = "";
this.precioEntrada = 0.00;
}
public SalaCine(String nombre, int aforo) {
if ((aforo <= 0) || "".equals(nombre)) {
throw new IllegalArgumentException();
} else {
this.nombre = nombre;
this.aforo = aforo;
this.butacasOcupadas = 0;
this.pelicula = "";
this.precioEntrada = 0.00;
}
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public void setAforo(int aforo) {
if (aforo <= 0) {
throw new IllegalArgumentException();
} else {
this.aforo = aforo;
}
}
public void setButacasOcupadas(int butacasOcupadas) {
if (butacasOcupadas < 0 || butacasOcupadas > this.getAforo()) {
throw new IllegalArgumentException();
} else {
this.butacasOcupadas = butacasOcupadas;
}
}
public void setButacasLibres(int butacasLibres) {
if (butacasLibres < 0 || butacasLibres > this.aforo) {
throw new IllegalArgumentException();
} else {
this.butacasOcupadas = this.getAforo() - butacasLibres;
}
}
public void setPelicula(String pelicula) {
this.pelicula = pelicula;
}
public void setPrecioEntrada(double precioEntrada) {
if (precioEntrada < 0) {
throw new IllegalArgumentException();
} else {
this.precioEntrada = redondearDecimales(precioEntrada, 2);
}
}
public String getNombre() {
return nombre;
}
public int getAforo() {
return this.aforo;
}
public int getButacasOcupadas() {
return this.butacasOcupadas;
}
public int getButacasLibres() {
return this.aforo - this.butacasOcupadas;
}
public String getPelicula() {
return this.pelicula;
}
public double getPrecioEntrada() {
return this.precioEntrada;
}
public double getPorcentajeOcupacion() {
return (this.getButacasOcupadas() * 100 / this.getAforo());
}
public void vaciarSala() throws IllegalArgumentException {
this.setButacasOcupadas(0);;
this.setPelicula("");
this.setPrecioEntrada(0.0);
}
public boolean estaLlena() {
return (this.getButacasOcupadas() == this.getAforo());
}
public boolean estaVacia() {
return (this.getButacasOcupadas() == 0);
}
public void venderEntradas(int numeroEntradas) {
if ((numeroEntradas + this.getButacasOcupadas() > this.getAforo()) || (numeroEntradas <= 0)) {
throw new IllegalArgumentException();
} else {
this.setButacasOcupadas(this.getButacasOcupadas() + numeroEntradas);
}
}
public void devolverEntradas(int numeroEntradas) {
if ((numeroEntradas > this.getButacasOcupadas()) || (numeroEntradas <= 0)) {
throw new IllegalArgumentException();
} else {
this.setButacasOcupadas(this.getButacasOcupadas() - numeroEntradas);
}
}
private double redondearDecimales(double numero, int decimales) {
int potencia = 10;
for (; decimales > 0; decimales--) {
potencia *= 10;
}
return ((double) Math.round(numero * 100) / 100);
}
}
Input
1 Central 100 4 Ben-Hur 2.675 6 20 6 90 6 -5 7 30 7 10 5 2 0
1 Rialto 120 4 Los Intocables 3.764 6 90 6 20 6 -5 7 10 7 30 5 2 0
Output
======== = MENU = ======== 0. Salir GESTIONAR SALA -------------------- 1. Crear sala de cine Elija una opcion: CREAR SALA de CINE ------------------- Nombre de sala: Aforo de sala: ======== = MENU = ======== 0. Salir GESTIONAR SALA -------------------- 1. Crear sala de cine 2. Borrar sala de cine 3. Listar salas de cine GESTIONAR CARTELERA -------------------- 4. Crear sesion de proyeccion 5. Listar cartelera GESTIONAR ENTRADAS -------------------- 6. Vender entradas 7. Devolver entradas Elija una opcion: CREAR SESION DE PROYECCION ------------------- Nombre de la pelicula: Precio de la entrada: ======== = MENU = ======== 0. Salir GESTIONAR SALA -------------------- 1. Crear sala de cine 2. Borrar sala de cine 3. Listar salas de cine GESTIONAR CARTELERA -------------------- 4. Crear sesion de proyeccion 5. Listar cartelera GESTIONAR ENTRADAS -------------------- 6. Vender entradas 7. Devolver entradas Elija una opcion: VENDER ENTRADAS ------------------- Cantidad de entradas: ======== = MENU = ======== 0. Salir GESTIONAR SALA -------------------- 1. Crear sala de cine 2. Borrar sala de cine 3. Listar salas de cine GESTIONAR CARTELERA -------------------- 4. Crear sesion de proyeccion 5. Listar cartelera GESTIONAR ENTRADAS -------------------- 6. Vender entradas 7. Devolver entradas Elija una opcion: VENDER ENTRADAS ------------------- Cantidad de entradas: ERROR: Numero de entradas incorrecto ======== = MENU = ======== 0. Salir GESTIONAR SALA -------------------- 1. Crear sala de cine 2. Borrar sala de cine 3. Listar salas de cine GESTIONAR CARTELERA -------------------- 4. Crear sesion de proyeccion 5. Listar cartelera GESTIONAR ENTRADAS -------------------- 6. Vender entradas 7. Devolver entradas Elija una opcion: VENDER ENTRADAS ------------------- Cantidad de entradas: ERROR: Numero de entradas incorrecto ======== = MENU = ======== 0. Salir GESTIONAR SALA -------------------- 1. Crear sala de cine 2. Borrar sala de cine 3. Listar salas de cine GESTIONAR CARTELERA -------------------- 4. Crear sesion de proyeccion 5. Listar cartelera GESTIONAR ENTRADAS -------------------- 6. Vender entradas 7. Devolver entradas Elija una opcion: DEVOLVER ENTRADAS ------------------- Cantidad de entradas: ERROR: Numero de entradas incorrecto ======== = MENU = ======== 0. Salir GESTIONAR SALA -------------------- 1. Crear sala de cine 2. Borrar sala de cine 3. Listar salas de cine GESTIONAR CARTELERA -------------------- 4. Crear sesion de proyeccion 5. Listar cartelera GESTIONAR ENTRADAS -------------------- 6. Vender entradas 7. Devolver entradas Elija una opcion: DEVOLVER ENTRADAS ------------------- Cantidad de entradas: ======== = MENU = ======== 0. Salir GESTIONAR SALA -------------------- 1. Crear sala de cine 2. Borrar sala de cine 3. Listar salas de cine GESTIONAR CARTELERA -------------------- 4. Crear sesion de proyeccion 5. Listar cartelera GESTIONAR ENTRADAS -------------------- 6. Vender entradas 7. Devolver entradas Elija una opcion: LISTAR CARTELERA ------------------- Sala: Central Aforo: 100 Pelicula: Ben-Hur Precio de la entrada: 2.68 euros Butacas ocupadas: 10 Butacas libres: 90 Porcentaje de ocupacion: 10.0 ======== = MENU = ======== 0. Salir GESTIONAR SALA -------------------- 1. Crear sala de cine 2. Borrar sala de cine 3. Listar salas de cine GESTIONAR CARTELERA -------------------- 4. Crear sesion de proyeccion 5. Listar cartelera GESTIONAR ENTRADAS -------------------- 6. Vender entradas 7. Devolver entradas Elija una opcion: BORRAR SALA de CINE ------------------- ======== = MENU = ======== 0. Salir GESTIONAR SALA -------------------- 1. Crear sala de cine Elija una opcion:
======== = MENU = ======== 0. Salir GESTIONAR SALA -------------------- 1. Crear sala de cine Elija una opcion: CREAR SALA de CINE ------------------- Nombre de sala: Aforo de sala: ======== = MENU = ======== 0. Salir GESTIONAR SALA -------------------- 1. Crear sala de cine 2. Borrar sala de cine 3. Listar salas de cine GESTIONAR CARTELERA -------------------- 4. Crear sesion de proyeccion 5. Listar cartelera GESTIONAR ENTRADAS -------------------- 6. Vender entradas 7. Devolver entradas Elija una opcion: CREAR SESION DE PROYECCION ------------------- Nombre de la pelicula: Precio de la entrada: ======== = MENU = ======== 0. Salir GESTIONAR SALA -------------------- 1. Crear sala de cine 2. Borrar sala de cine 3. Listar salas de cine GESTIONAR CARTELERA -------------------- 4. Crear sesion de proyeccion 5. Listar cartelera GESTIONAR ENTRADAS -------------------- 6. Vender entradas 7. Devolver entradas Elija una opcion: VENDER ENTRADAS ------------------- Cantidad de entradas: ======== = MENU = ======== 0. Salir GESTIONAR SALA -------------------- 1. Crear sala de cine 2. Borrar sala de cine 3. Listar salas de cine GESTIONAR CARTELERA -------------------- 4. Crear sesion de proyeccion 5. Listar cartelera GESTIONAR ENTRADAS -------------------- 6. Vender entradas 7. Devolver entradas Elija una opcion: VENDER ENTRADAS ------------------- Cantidad de entradas: ======== = MENU = ======== 0. Salir GESTIONAR SALA -------------------- 1. Crear sala de cine 2. Borrar sala de cine 3. Listar salas de cine GESTIONAR CARTELERA -------------------- 4. Crear sesion de proyeccion 5. Listar cartelera GESTIONAR ENTRADAS -------------------- 6. Vender entradas 7. Devolver entradas Elija una opcion: VENDER ENTRADAS ------------------- Cantidad de entradas: ERROR: Numero de entradas incorrecto ======== = MENU = ======== 0. Salir GESTIONAR SALA -------------------- 1. Crear sala de cine 2. Borrar sala de cine 3. Listar salas de cine GESTIONAR CARTELERA -------------------- 4. Crear sesion de proyeccion 5. Listar cartelera GESTIONAR ENTRADAS -------------------- 6. Vender entradas 7. Devolver entradas Elija una opcion: DEVOLVER ENTRADAS ------------------- Cantidad de entradas: ======== = MENU = ======== 0. Salir GESTIONAR SALA -------------------- 1. Crear sala de cine 2. Borrar sala de cine 3. Listar salas de cine GESTIONAR CARTELERA -------------------- 4. Crear sesion de proyeccion 5. Listar cartelera GESTIONAR ENTRADAS -------------------- 6. Vender entradas 7. Devolver entradas Elija una opcion: DEVOLVER ENTRADAS ------------------- Cantidad de entradas: ======== = MENU = ======== 0. Salir GESTIONAR SALA -------------------- 1. Crear sala de cine 2. Borrar sala de cine 3. Listar salas de cine GESTIONAR CARTELERA -------------------- 4. Crear sesion de proyeccion 5. Listar cartelera GESTIONAR ENTRADAS -------------------- 6. Vender entradas 7. Devolver entradas Elija una opcion: LISTAR CARTELERA ------------------- Sala: Rialto Aforo: 120 Pelicula: Los Intocables Precio de la entrada: 3.76 euros Butacas ocupadas: 70 Butacas libres: 50 Porcentaje de ocupacion: 58.0 ======== = MENU = ======== 0. Salir GESTIONAR SALA -------------------- 1. Crear sala de cine 2. Borrar sala de cine 3. Listar salas de cine GESTIONAR CARTELERA -------------------- 4. Crear sesion de proyeccion 5. Listar cartelera GESTIONAR ENTRADAS -------------------- 6. Vender entradas 7. Devolver entradas Elija una opcion: BORRAR SALA de CINE ------------------- ======== = MENU = ======== 0. Salir GESTIONAR SALA -------------------- 1. Crear sala de cine Elija una opcion:

