Java - Dudas ejercicio

   
Vista:
Imágen de perfil de Charly

Dudas ejercicio

Publicado por Charly cdum77@hotmail.com (104 intervenciones) el 13/12/2016 15:52:37
Hola, estoy haciendo un curso de Java de mi Ayuntamiento.
Me han mandado un ejercicio un poco complicado y he hecho algo pero me da algun error y además faltan algunas cosas que no se como meterlas.
A continuación pongo el enunciado:

Desarrollar un sistema de reservas on-line para un cine con una capacidad de 10 personas máximo.
El cine admite dos tipos de reserva: estándar y especial. La diferencia es que la especial, admite un código de descuento que supone una rebaja en el precio de la entrada.
El precio estándar de una entrada es 8€.
Existen varios tipos de código:
DESC0001 supone un descuento de 2€
DESC0005 supone un descuento de 5€
Nota: Definir todos los precios como constantes para facilitar el posterior mantenimiento.
Todas las reservas tienen un identificador que la representa unívocamente. Este identificador, se devolverá al realizar la reserva.
Adicionalmente guardarán el nombre y apellidos de quien hace la reserva. Nota: Para cada entrada se deberá realizar una reserva independiente.
El sistema de reservas debe permitir realizar las siguientes acciones:
- Realizar una reserva (de ambos tipos). Nota: habrá que tener en cuenta si es posible realizar la reserva o no. Si no se pudiera realizar, devolver como identificador -1.
- Cancelar una reserva por identificador.
- Calcular la recaudación potencial si todas las reservas se pagasen.
- Imprimir un listado de los detalles de las reservas (para ello, cada tipo de reserva deberá implementar có-mo ha de ser impresa).
Todas las clases implementadas estarán en el paquete Java es.java.aula.mentor.core
Por último, desarrollar una clase con el método main, que deberá estar en el paquete Java es.java.aula.mentor.main que creará un sistema de reservas, creará una reserva especial y otra estándar, cancelará una de las dos reservas, y mostrará por pantalla la potencial recaudación así como un listado de todas las reservas existentes.

A continuación pongo las clases que he hecho:

Interfaz Constantes:
1
2
3
4
5
6
package es.java.aula.mentor.core;
public interface Constantes{
	public static final double PRECIO=8.0;
	public static final double DESCUENTO1=2.0;
	public static final double DESCUENTO2=5.0;
}
Clase abstracta Reserva:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package es.java.aula.mentor.core;
public abstract class Reserva{
	private String nombre=null;
	private String apellido=null;
	private int id=0;
	public Reserva(String param1,String param2){
		nombre=param1;
		apellido=param2;
	}
	public String getNombre(){
		return nombre;
	}
	public String getApellido(){
		return apellido;
	}
	public void setId(int id){
		this.id=id;
	}
	public abstract double getPrecio();
}
Clase ReservaEstandar:
1
2
3
4
5
6
7
8
9
10
11
12
package es.java.aula.mentor.core;
public class ReservaEstandar extends Reserva{
	public ReservaEstandar(String param1,String param2){
		super(param1,param2);
	}
	public double getPrecio(){
		return Constantes.PRECIO;
	}
	public String toString(){
		return "Nombre: "+getNombre()+" Apellido: "+getApellido()+"Precio: "+getPrecio();
	}
}
Clase ReservaEspecial:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package es.java.aula.mentor.core;
public class ReservaEspecial extends Reserva{
	private String codigo=null;
	public ReservaEspecial(String param1,String param2,String param3){
		super(param1,param2);
		codigo=param3;
	}
	public String getCodigo(){
		return codigo;
	}
	public boolean equals(Object o){
		if(this==o){
			return true;
		}
		if(!(o instanceof ReservaEspecial)){
			return false;
		}
		ReservaEspecial param=(ReservaEspecial)o;
		return param.codigo.equals(codigo);
	}
	public int HashCode(){
		StringBuffer buffer=new StringBuffer();
		buffer.append(codigo);
		return(codigo).hashCode();
	}
	public double getPrecio(){
		if(codigo=="DESC0001"){
			return Constantes.PRECIO-Constantes.DESCUENTO1;
		}else if(codigo=="DESC0005"){
			return Constantes.PRECIO-Constantes.DESCUENTO2;
		}else{
			return Constantes.PRECIO;
		}
	}
	public String toString(){
		return "Nombre"+getNombre()+" Apellidos: "+getApellido()+" Codigo: "+getCodigo()+"Precio"+getPrecio();
	}
}
Clase GestorReservas:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package es.java.aula.mentor.core;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
public class GestorReservas{
	private HashMap reservas=new HashMap();
	private int id=0;
	private double recaudacion=0.0;
	public int altaReserva(Reserva reserva){
		reserva.setId(id);
		reservas.put(id,reserva);
		id++;
		return id-1;
	}
	public void bajaReserva(int id){
		reservas.remove(id);
	}
	public double getRecaudacionPotencial(){
		double acum=0.0;
		Iterator it=reservas.values().iterator();
		while(it.hasNext()){
			acum=acum+((Reserva)it.next()).getPrecio();
		}
		return acum;
	}
	public void listarReservas(){
		Iterator it=reservas.values().iterator();
		while(it.hasNext()){
			System.out.println(it.next());
		}
	}
}
Clase Global1:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package es.java.aula.mentor.main;
import es.java.aula.mentor.core.ReservaEstandar;
import es.java.aula.mentor.core.ReservaEspecial;
import es.java.aula.mentor.core.GestorReservas;
public class Global1{
	public static void main(String[] args){
		GestorReservas gestor=new GestorReservas();
		int id1=gestor.altaReserva(new ReservaEstandar("Estela","de la Fuente"));
		int id2=gestor.altaReserva(new ReservaEspecial("Santiago","Castrillo","DESC0005"));
		int id3=gestor.altaReserva(new ReservaEstandar("Elena","Castrillo"));
		gestor.bajaReserva(id1);
		System.out.println("Recaudacion potencial: "+gestor.getRecaudacionPotencial());
		gestor.listarReservas();
	}
}
Mi problema es que no se cómo se limita a 10 asientos, y no se en qué clase ponerlo, en GestorReservas o en un método en el main.
Agradecería cualquier ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Dudas ejercicio

Publicado por Rubén (19 intervenciones) el 13/12/2016 16:38:52
Hola Charly,

La entidad HasMap, contiene un método llamdo "size()", el cuál nos devuelve el tamaño del mapa, o en otras palabras, las reservas que llevamos introducidas.

De forma que , antes de incluir una reserva en tu HasMap, tienes que comprabar si " reserva.size() < 10 " y solo en ese caso, introducir la reserva, y en caso contrario mostrar un mensaje de que se ha alcanzado en número máximo de reservas.

Un saludo :-)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Charly

Dudas ejercicio

Publicado por Charly cdum77@hotmail.com (104 intervenciones) el 13/12/2016 16:55:11
Gracias por tu respuesta Rubén.
Entonces, ¿en la clase GestorReservas el método altaReserva, debería quedar así?:
1
2
3
4
5
6
7
8
9
10
11
public int altaReserva(Reserva reserva){
	if(reservas.size()<10){
                reserva.setId(id);
		reservas.put(id,reserva);
		id++;
		return id-1;
        }else{
                System.out.println("Aforo completo!");
                return id;
       }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar