Java - EJERCICIO RESERVA RESTAURANTES AYUDA JAVA

 
Vista:
sin imagen de perfil
Val: 5
Ha aumentado su posición en 6 puestos en Java (en relación al último mes)
Gráfica de Java

EJERCICIO RESERVA RESTAURANTES AYUDA JAVA

Publicado por Tania (3 intervenciones) el 26/12/2020 20:32:25
Hola, soy una estudiante de Ingeniería Informática en Galicia. Necesito que alguien me ayude con este ejercicio,por favor.

El restaurante Jerry ha contactado contigo para pedirte que desarrolles un programa para manejar las reservas del mismo. Deberás desarrollar un programa en Java con este fin teniendo en cuenta lo siguiente:El programa deberá tener un menú principal con las siguientes opciones:

1.Reservar mesa

2.Liberar Mesa

3.Comprobar Mesa Libre

4.Ayuda

5.Acerca de

6.Salir

Estos son los requisitos que te han dado desde el restaurante:

-El restaurante dispone de 10 mesas y abre durante 3 horas de noche de 9:00 a 12:00.

-Cada reserva duraráuna hora empezando siempre aen punto (9:00, 10:00 o 11:00).Cuando un cliente llame para reservar mesa informará la hora de la reserva y habrá que usar la opción 3 para comprobar disponibilidad.

-En caso afirmativo se le dará la opción de reservarla y se guardarán los datos de la reserva (Nombre, hora, número de comensales, y un teléfono)
.
-Si un cliente llama para cancelar una reserva se le preguntará la información necesaria para liberar su mesa.

-La opción Ayuda explicará brevemente qué hace cada opción y tendrá un apartado de soporte donde se informarán unos datos de contacto por si surge algún problema.

- La opción Acerca decontendrá un poco de información sobre el nombre la versión y el creador del programa.
- La opción Salir terminará el programa.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
-1
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

EJERCICIO RESERVA RESTAURANTES AYUDA JAVA

Publicado por Kabuto (1381 intervenciones) el 27/12/2020 01:47:45
Hola Tania.

A ver si puedes escribir algo de código por ti misma, da igual si no es correcto o no queda completo... , con lo que vayas consiguiendo te vamos ayudando a completar.

Te puedo decir cómo enfocaría yo esto, que no tiene porque ser la única solución ni la mejor..., solo es la que se me ocurre a mí ahora mismo.

Yo haría una clase Reserva con los atributos que ya te indica el enunciado:
Nombre, hora, número de comensales, y un teléfono

Luego, parece que cada mesa admite máximo tres reservas, una por cada hora: 9:00, 10:00 o 11:00

Así que se me ocurre que también se puede hacer una clase Mesa y cuyo atributo sea un array de tres elementos de tipo Reserva
Por ejemplo puedes hacer que el elemento [0] de este array corresponda a la reserva de las 9:00, el [1] a la reserva de las 10:00 y el [2] a la de las 11:00
Estos elementos tendrían valor null cuando no haya reserva para su correspondiente hora.

De este modo puede saber si una Mesa admite reservas o no, y a que horas las admitiría.

Así, en la clase principal, tendrías un array de 10 Mesa, y cada una de ellas te admitiría 3 Reserva

Escribe estas clases con los métodos que puedas necesitar. Mesa por ejemplo debería tener métodos para hacer una Reserva, anularla, informar si está completa o no...

Creo que con este enfoque no resulta tan difícil como parece.
Haz lo que puedas y a partir de ahí te ayudamos a completarlo.

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
sin imagen de perfil
Val: 5
Ha aumentado su posición en 6 puestos en Java (en relación al último mes)
Gráfica de Java

EJERCICIO RESERVA RESTAURANTES AYUDA JAVA

Publicado por Tania (3 intervenciones) el 27/12/2020 12:11:45
Perfecto. Imaginaba algo de Arrays pero llevo muy poquito programando. Voy a intentar enfocarlo todo lo que pueda y si tengo dudas pregunto. Muchas gracias por tu ayuda!
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
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

EJERCICIO RESERVA RESTAURANTES AYUDA JAVA

Publicado por Kabuto (1381 intervenciones) el 27/12/2020 12:50:17
¿Sabes/puedes usar clases y lo relacionado con la Programación Orientada a Objetos (POO)?
Mi propuesta iba en esa línea.

Si no es el caso, entonces puedes resolverlo usando una matriz de 10x3 (10 mesas, 3 reservas por cada mesa)

Pero será más fácil y elegante usando POO
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 Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

EJERCICIO RESERVA RESTAURANTES AYUDA JAVA

Publicado por Kabuto (1381 intervenciones) el 28/12/2020 12:24:37
Mira, tras lo comentado por privado, voy a proponer una solución.

Yo propongo hacer una clase llamada Reserva, que es similar a la clase Cliente de tu propuesta.

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
39
40
41
42
43
44
45
46
47
public class Reserva {
 
	private String nombre;
	private String hora;
	private int comensales;
	private String telefono;
 
	public Reserva(String nombre, String hora, int comensales, String telefono) {
		this.nombre = nombre;
		this.hora = hora;
		this.comensales = comensales;
		this.telefono = telefono;
	}
 
	public String getNombre() {
		return nombre;
	}
 
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
 
	public String getHora() {
		return hora;
	}
 
	public void setHora(String hora) {
		this.hora = hora;
	}
 
	public int getComensales() {
		return comensales;
	}
 
	public void setComensales(int comensales) {
		this.comensales = comensales;
	}
 
	public String getTelefono() {
		return telefono;
	}
 
	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}
 
}


Bien, tenemos que gestionar Reservas, y gestionar Mesas.
Mesas es otra entidad que merece tener una clase propia.

Una Mesa puede tener hasta 3 Reservas.
Así que cada Mesa será en realidad un pequeño array de 3 elementos de la clase Reserva.
Lo bueno de encapsularlo en una clase, es que así cada Mesa va a ser capaz por ella sola de añadir reserva, anularla, informar de si se puede reservar para una hora determinada...

Para facilitar el tema de distinguir la reservas de una hora u otra, voy a hacer que cada posición del array esté asignada a una hora concreta:
Posición [0] será la reservas de las 9:00, posición [1] la de las 10:00, y [2] la de las 11:00

Así, cuando una de estas posiciones tenga valor null, es que está disponible para reservar.
Si no es null, es decir, está albergando un objeto Reserva, es que ese tramo horario ya está reservado.

Esta sería mi clase Mesa

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
public class Mesa {
 
	private Reserva[] reservas; //Array de Reservas
	/*
	 * Máximo 3 reservas:
	 * [0] -> Reserva de las 9:00
	 * [1] -> Reserva de las 10:00
	 * [2] -> Reserva de las 11:00
	 */
 
	public Mesa() {
		reservas = new Reserva[3];
	}
 
	/**
	 * Retorna cuál posición del array se corresponde
	 * con una hora determinada.
	 * Este pequeño método permite ahorrar mucho código
	 * en los otros.
	 * @param hora String con la hora: 9:00, 10:00 ó 11:00
	 * @return Valor int correspondiente: 0, 1 ó 2
	 */
	private int getPosArray(String hora) {
		if (hora.equals("9:00"))
			return 0;
		else if (hora.equals("10:00"))
			return 1;
		else
			return 2; //Ha de ser las 11:00
	}
 
	/**
	 * Hace una Reserva en una Mesa, si es que la HORA
	 * reservada está disponible.
	 * @param reserva Reserva de una HORA determinada.
	 */
	public void hacerReserva(Reserva reserva) {
		int pos = getPosArray(reserva.getHora());
		if (reservas[pos] != null)
			System.out.println("Esta HORA ya está reservada");
		else {
			reservas[pos] = reserva;
			System.out.println("RESERVA efectuada");
		}
	}
 
	/**
	 * Anula una Reserva, si coincide NOMBRE
	 * y la HORA indicadas.
	 * @param nombre NOMBRE de la persona que hizo reserva.
	 * @param hora HORA de la reserva.
	 */
	public void anularReserva(String nombre, String hora) {
		int pos = getPosArray(hora);
		if (reservas[pos] != null) {
			if (reservas[pos].getNombre().equals(nombre)) {
				reservas[pos] = null;
				System.out.println("RESERVA anulada");
			}
			else
				System.out.println("EL NOMBRE no se corresponde con la persona que hizo la RESERVA");
		}
		else
			System.out.println("No hay ninguna RESERVA para la HORA indicada");
	}
 
	/**
	 * Indica si esta Mesa esta disponible para resevar
	 * una determinada HORA
	 * @param hora HORA de la reserva a comprobar
	 * @return TRUE si está disponible, FALSE en caso contrario
	 */
	public boolean estaDisponible(String hora) {
		return reservas[getPosArray(hora)] == null;
	}
 
}

Esta clase incluye un pequeño método que quizás no se entienda bien su propósito:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
	 * Retorna cuál posición del array se corresponde
	 * con una hora determinada.
	 * Este pequeño método permite ahorrar mucho código
	 * en los otros.
	 * @param hora String con la hora: 9:00, 10:00 ó 11:00
	 * @return Valor int correspondiente: 0, 1 ó 2
	 */
	private int getPosArray(String hora) {
		if (hora.equals("9:00"))
			return 0;
		else if (hora.equals("10:00"))
			return 1;
		else
			return 2; //Ha de ser las 11:00
	}
Como dije, las reservas de las 9, 10 y 11 se van a corresponder con las posiciones 0, 1 y 2 del array.

Entonces, mediante este método consigo fácilmente programar esa relación
Por ejemplo, desde el programa principal si quiero saber si hay mesas disponibles para las 9 de la noche, voy a introducir el String "9:00".
Lo mismo si quiero reservar o anular. Lo que enviaré a los métodos de la clase Mesa será un String con la hora que consulto.

Puedo hacer que cada método al recibir este String, con IF o con SWITCH analice el String y decida cuál posición del array ha de consultar.
Pero esto es repetir el mismo código en varios métodos.

En lugar de eso, es mejor hacer un método dedicado exclusivamente a recibir el String de la hora y "transformarlo" en el valor int que corresponde con su posición en el array.
De este modo, solo lo escribo una vez y puedo usarlo en varios.

Dicho esto, ahora solo falta la clase principal

En ella hago un menú que se repite hasta que se escoja la opción de SALIR.
Uso un array de 10 Mesa, que cada una ofrece 3 Reserva.

Cada opción del menú tiene su propio método, menos los de ayuda y acerca de, que no los he programado.

Prueba el programa y comprueba que entiendes cada línea y cada proceso que he seguido.
Y pregunta cualquier cosa que no entiendas. Un saludo.

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import java.util.Scanner;
 
public class GestionMesas {
 
	private static Mesa[] mesas;
	private static Scanner teclado;
 
	public static void main(String[] args) {
 
		teclado = new Scanner(System.in);
		mesas = new Mesa[10];
		for (int i = 0; i < mesas.length; i++)
			mesas[i] = new Mesa();
 
		int opcion = 0;
 
		do {
			System.out.println("\n\n\t\tRESTAURANTE JERRY");
			System.out.println("\t\t----------- -----\n");
			System.out.println("(1) - Reservar Mesa");
			System.out.println("(2) - Liberar Mesa");
			System.out.println("(3) - Comprobar Mesa Libre");
			System.out.println("(4) - Ayuda");
			System.out.println("(5) - Acerca de");
			System.out.println("(6) - SALIR");
			System.out.print("Elija opcion: ");
			opcion = Integer.parseInt(teclado.nextLine());
			switch(opcion) {
			case 1:
				reservarMesa();
				break;
			case 2:
				liberarMesa();
				break;
			case 3:
				comprobarMesaLibre();
				break;
			case 4:
				//ayuda();
				break;
			case 5:
				//acercaDe();
				break;
			case 6:
				System.out.println("\n\t\tFIN DE PROGRAMA");
				break;
			default:
				System.out.println("Opción errónea...\n");
			}
		}while(opcion != 6);
 
	}
 
	private static void reservarMesa() {
		System.out.print("\nIndique Mesa: ");
		int mesa = Integer.parseInt(teclado.nextLine());
		System.out.print("Hora: ");
		String hora = teclado.nextLine();
		System.out.println("\n\tDatos de la reserva");
		System.out.print("Nombre: ");
		String nombre = teclado.nextLine();
		System.out.print("Cantidad de comensales: ");
		int comensales = Integer.parseInt(teclado.nextLine());
		System.out.print("Teléfono: ");
		String telefono = teclado.nextLine();
 
		mesas[mesa].hacerReserva(new Reserva(nombre, hora, comensales, telefono));
 
	}
 
	private static void liberarMesa() {
		System.out.print("\nIndique Mesa: ");
		int mesa = Integer.parseInt(teclado.nextLine());
		System.out.print("Hora: ");
		String hora = teclado.nextLine();
		System.out.print("Nombre: ");
		String nombre = teclado.nextLine();
 
		mesas[mesa].anularReserva(nombre, hora);
	}
 
	private static void comprobarMesaLibre() {
		System.out.print("Hora a reservar: ");
		String hora = teclado.nextLine();
		boolean hayDisponibles = false;
 
		System.out.println("\nMesas disponibles: ");
		for (int i = 0; i < mesas.length; i++)
			if (mesas[i].estaDisponible(hora)) {
				System.out.println("- Mesa #" + i);
				hayDisponibles = true;
			}
 
		if (!hayDisponibles)
			System.out.println("\nNo hay mesas disponibles para esa hora");
	}
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 5
Ha aumentado su posición en 6 puestos en Java (en relación al último mes)
Gráfica de Java

EJERCICIO RESERVA RESTAURANTES AYUDA JAVA

Publicado por Tania (3 intervenciones) el 28/12/2020 13:19:45
Vale. Voy a echar un vistazo y luego intento hacerlo sin ver el código a ver si me sale. ¡A seguir practicando!
Gracias por tu amabilidad:)
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