Está en la página 1de 27

LA CLASE MAIN

package hotelpunta.paraiso.com;

public class Main {


public static void main(String[] args) {
new Menu().showMenu();
}
}

LA CLASE MENU

package hotelpunta.paraiso.com;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;

public class Habitaciones {


HashMap<String, HashMap> habitacionesReservada = new HashMap<>();
HashMap<String, HashMap> personasLlegada = new HashMap<>();
HashMap<String, ArrayList<Double>> montoConsumoCliente = new
HashMap<>();
HashMap<String, ArrayList<String>> listaConsumoCliente = new
HashMap<>();
List<String> idPersona = new ArrayList<>();
public static String idContext = "";
public static boolean entradaReserva = true;

//Funtion que se ejecutara cuando la persona reserve una


Habitacion
//y devolvera un booleano.
public Boolean reservar(String tipo, int semana){
if (habitacionesReservada.size() < 100) {
HashMap<String, String> datos = new HashMap<>();
HashMap<String, String> fechaIO = getFechaInOut(semana);
String id = generarID();
if (idPersona.toString().indexOf(id) == -1) {
idPersona.add(id);
} else {
do {
id = generarID();
if (idPersona.toString().indexOf(id) == -1) {
idPersona.add(id);
} else break;
} while (true);
}

montoConsumoCliente.put(id, new ArrayList());


listaConsumoCliente.put(id, new ArrayList<String>());

December 13, 2022


1
datos.put("tipo", tipo);
datos.put("fechaEntrada", fechaIO.get("fechaEntrada"));
datos.put("fechaSalida", fechaIO.get("fechaSalida"));
datos.put("isReserva", "true");
String pulsera = (semana == 1) ? "Amarillo" : (semana ==
2) ? "Rojo" : (semana >= 3) ? "Dorada" : "No valida";
datos.put("pulsera", pulsera);
datos.put("habitacion",
Integer.toString(habitacionesReservada.size()+1));
datos.put("semana", Integer.toString(semana));
habitacionesReservada.put(id, datos);
idContext = id;
}else{
System.out.println("No hay habitaciones disponibles por el
momento, por favor intentarlo mas tarde");
return false;
}
return true;
}

//Metodo que sera ejecutado para las personas que no reserven una
habitacion
public void entradaSinReserva(){
HashMap<String, String> datos = new HashMap<>();
HashMap<String, String> fechaIO = getFechaInOut(0);

String id = generarID();
if (idPersona.toString().indexOf(id) == -1) {
idPersona.add(id);
} else {
do {
id = generarID();
if (idPersona.toString().indexOf(id) == -1) {
idPersona.add(id);
} else break;
} while (true);
}

montoConsumoCliente.put(id, new ArrayList());


listaConsumoCliente.put(id, new ArrayList<String>());

datos.put("tipo", "null");
datos.put("fechaEntrada", fechaIO.get("fechaEntrada"));
datos.put("fechaSalida", fechaIO.get("fechaSalida"));
datos.put("isReserva", "false");
datos.put("habitacion", "-1");
datos.put("pulsera", "-1");
datos.put("semana", "0");

personasLlegada.put(id, datos);
idContext = id;
entradaReserva = false;
}

//Funcion utililizada para generar una identificacion para cada


cliente
//asi poder identificarlo luego.
public String generarID(){
int max = 9999999;
int min = 1000000;

December 13, 2022


2
return (String) Integer.toString((int)
Math.floor(Math.random() * min + (max - min)));
}

//Funcion que devuelve un HashMap con la fecha de salida y de


entrada
public HashMap getFechaInOut(int semana){
HashMap<String, String> fecha_tiempo = new HashMap<>();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("a",
Locale.ENGLISH);
LocalDateTime fechaEntrada = LocalDateTime.now();
fechaEntrada.format(formatter);
fecha_tiempo.put("fechaEntrada", getFechaStr(fechaEntrada));

LocalDateTime fechaSalida = fechaEntrada.plusDays(semana * 7);


fecha_tiempo.put("fechaSalida", getFechaStr(fechaSalida));

return fecha_tiempo;
}

//Para obtener la fecha en un String.


public String getFechaStr(LocalDateTime ldt){
return ldt.getYear()+"-"+ldt.getMonthValue()
+"-"+ldt.getDayOfMonth()+" "+ldt.getHour()+":"+ldt.getMinute();
}

//Para obtener todos los restaurantes disponibles.


public String[] restaurantes(){
String[] restDisponible = new String[]
{"Bufet","Mariscos","Carne","Pastas","Especializado en comida
Japonesa", "Especializado en mexicana"};
return restDisponible;
}
}

LA CLASE HABITACIONES

package hotelpunta.paraiso.com;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;

public class Menu {


public Scanner sc;
Habitaciones hab = new Habitaciones();
public static boolean isDentro = false;
private boolean isClose = false;

//Esta metodo sirve para mostrar todos los menus que ira saliendo
//Basicamente este metodo es el que inicializa el metodo submenu
public void showMenu(){
sc = new Scanner(System.in);
int seleccion = 0;
System.out.println("\n==================== Hotel Punta Paraiso

December 13, 2022


3
====================");
System.out.println("");
System.out.println("" +
"1. Reservar.\n" +
"2. Entrar a Hotel\n" +
"0. Cerrar programa.");
System.out.printf("Seleccionar opcion: ");
seleccion = sc.nextInt();

switch (seleccion){
case 1:
subMenu();
break;
case 2:
Habitaciones.entradaReserva = false;
hab.entradaSinReserva();
todosMenu(2);
break;
case 0:
System.out.println("\nGracias por utilizar nuestro
programa.");
break;
default:
System.out.println("Por favor seleccionar una de las
opciones disponibles");
showMenu();
}
}

//Metodo para inicializar el metodo pasandole como parametro


//el digito que se debera ejecutar al llegar al siguiente metodo
//todosMenu
protected void subMenu(){
todosMenu(1);
}

//Metodo donde se encunatra todo el funcionamiento del programa


//en cuestion, aquí es que esta toda las partes especiales.
protected void todosMenu(int menu){
//Variable que sera utilizada para almacenar los tipos
//de habitaciones que habra disponibles, así evitamos tener
//que liminar a simplemente 3.
String[] tipoHabitacion = {"Regular", "Especial", "Vip"};

//Utilizamos este switch para ahorrar un poco el codigo


//ya que dentro de este switch mediante un paramentro podemos
//ejecutar una u otra intrucciones.
switch (menu){
case 1:
System.out.println("\n================ Tipos de
habitaciones ================");
for (int i=0; i< tipoHabitacion.length; i++){
System.out.printf("%d. %s\n", (i+1),
tipoHabitacion[i]);
}
System.out.printf("Seleccionar el tipo: ");
int tipo = sc.nextInt();
System.out.printf("\nCuanta semana durara?: ");
int semana = sc.nextInt();
hab.reservar(tipoHabitacion[(tipo-1)], semana);
Menu.isDentro = true;

December 13, 2022


4
todosMenu(2);
break;
case 2:
System.out.println("\n======================
Bienvenido a Hotel Punta Paraiso ======================");
System.out.println("Gracias por reserver una
habitacion, a continuacion te estaremos mostrando varias opciones");
System.out.println("" +
"1. Comer (Ir a Restaurante).\n" +
"2. Comprar.\n" +
"3. Beber alcohol (Gratis).\n" +
"4. abandonar Hotel.");

if(hab.montoConsumoCliente.get(Habitaciones.idContext).size() > 0){


System.out.println("5. Monto a pagar");
}
System.out.println("0. Cerrar porgrama.");
Scanner scN = new Scanner(System.in);
int navegar = scN.nextInt();
switch (navegar){
case 1:
todosMenu(3);
break;
case 2:
todosMenu(7);
break;
case 3:
todosMenu(4);
break;
case 4:
todosMenu(5);
break;
case 5:
Double total = 0.00;
System.out.println("\n=============== Lista de
todo lo consumido ===============");
for (int i=0; i <
hab.montoConsumoCliente.get(Habitaciones.idContext).size(); i++){
System.out.printf("%d. %s\n", (i+1),
hab.listaConsumoCliente.get(Habitaciones.idContext).get(i));
total +=
hab.montoConsumoCliente.get(Habitaciones.idContext).get(i);
}
System.out.printf("\nTotal a pagar: $%.2f
pesos\n", total);
todosMenu(2);
break;
case 0:
todosMenu(6);
break;
default:
System.out.println("Por favor seleccionar una
de las opciones disponibles");
todosMenu(2);
}
break;
case 3:
System.out.println("\n============= Restaurantes
disponibles =============");
for (int i=0; i < hab.restaurantes().length; i++){
System.out.printf("%d. %s\n", (i+1),

December 13, 2022


5
hab.restaurantes()[i]);
}
System.out.println("0. Volver al menu anterior");
System.out.printf("Que quieres comer? (opcion): ");
int seleccion = sc.nextInt();
HashMap datos;
if (Habitaciones.entradaReserva){
datos =
hab.habitacionesReservada.get(Habitaciones.idContext);
}else {
datos =
hab.personasLlegada.get(Habitaciones.idContext);
}

if (seleccion == 0){
todosMenu(2);
}

if (hab.restaurantes()[(seleccion-
1)].toLowerCase().hashCode() != "bufet".hashCode()){
if
(Boolean.parseBoolean(datos.get("isReserva").toString())){
System.out.println("Comida servida.");
}else System.out.println("Necesita reservar una
habitacion para poder elegir esa opcion");
}else {
System.out.println("Comida servida.");
}
todosMenu(3);
break;
case 4:
System.out.println("\n============== Bienvenido/a a
las bebidas alcoholicas ==============");
for (int i=0; i < bebidasAlcoholicas().length; i++){
System.out.printf("%d. %s\n", (i+1),
bebidasAlcoholicas()[i]);
}
System.out.println("0. Volver al menu anterior");
System.out.printf("Que quiere Beber?: ");
int sBebida = sc.nextInt();
if (sBebida == 0){
todosMenu(2);
}
if (sBebida > bebidasAlcoholicas().length){
System.out.println("Por favor seleccionar una de
las opciones disponibles");
todosMenu(4);
}
System.out.printf("%s servido.", bebidasAlcoholicas()
[(sBebida-1)]);
todosMenu(4);
break;
case 5:
System.out.println("Estas seguro que quiere abandonar
el Hotel?");
System.out.println("1. Si");
System.out.println("2. No");
int confirmacion = sc.nextInt();
if (confirmacion == 1){
showMenu();
}else if (confirmacion == 2){

December 13, 2022


6
todosMenu(2);
}else {
System.out.println("Por favor seleccionar una de
las opciones disponibles");
System.out.printf("Presione cualquier tecla para
continuar");
sc.nextLine();
todosMenu(5);
}
break;
case 6:
System.out.println("Estas seguro que quiere cerrar el
Programa?");
System.out.println("1. Si");
System.out.println("2. No");
int confirmacionCerrar = sc.nextInt();
if (confirmacionCerrar == 1){
if(Habitaciones.entradaReserva){
HashMap data =
hab.habitacionesReservada.get(Habitaciones.idContext);
System.out.printf("\n\nGracias por utilizar
nuestro programa" +
"\nTipo de habitacion: %s" +
"\nFecha de entrada: %s" +
"\nFecha de salida: %s" +
"\nHabia reselvado una
habitacion: %s" +
"\nNumero de habitacion: %s" +
"\nColor de pulsera: %s" +
"\nSemana reselvada: %s\n\n",
data.get("tipo"),
data.get("fechaEntrada"),
data.get("fechaSalida"),
data.get("isReserva"),
data.get("habitacion"),
data.get("pulsera"),
data.get("semana"));
}else{
HashMap data =
hab.personasLlegada.get(Habitaciones.idContext);

System.out.printf("\n\nGracias por utilizar


nuestro programa" +
"\nTipo de habitacion: No
reselvo una habitacion" +
"\nFecha de entrada: %s" +
"\nFecha de salida: %s" +
"\nHabia reselvado una
habitacion: No tenia" +
"\nNumero de habitacion: No
tenia" +
"\nColor de pulsera: No tenia"
+
"\nSemana reselvada: No
reselvo\n\n",
data.get("fechaEntrada"),
data.get("fechaSalida"));
}
isClose = true;
break;
}else if (confirmacionCerrar == 2){

December 13, 2022


7
todosMenu(2);
}else {
System.out.println("Por favor seleccionar una de
las opciones disponibles");
System.out.printf("Presione cualquier tecla para
continuar");
sc.nextLine();
todosMenu(6);
}
break;
case 7:
System.out.println("\n============ Opciones extra
requiere pagar ============");
for (int i=0; i < opcionesDePaga().length; i++){
System.out.printf("%d. %s\n", (i+1),
opcionesDePaga()[i]);
}
System.out.println("0. Volver al menu anterior");
int opcionComprar = sc.nextInt();
if (opcionComprar == 0){
todosMenu(2);
}
switch (opcionComprar){
case 1:
agregarCompra(1, "diversion");
System.out.println("Ha seleccionado " +
opcionesDePaga()[(opcionComprar-1)]);
todosMenu(7);
break;
case 2:
agregarCompra(2, "diversion");
System.out.println("Ha seleccionado " +
opcionesDePaga()[(opcionComprar-1)]);
todosMenu(7);
break;
case 3:
agregarCompra(3, "diversion");
System.out.println("Ha seleccionado " +
opcionesDePaga()[(opcionComprar-1)]);
todosMenu(7);
break;
case 4:
agregarCompra(4, "diversion");
System.out.println("Ha seleccionado " +
opcionesDePaga()[(opcionComprar-1)]);
todosMenu(7);
break;
case 5:
agregarCompra(5, "diversion");
System.out.println("Ha seleccionado " +
opcionesDePaga()[(opcionComprar-1)]);
todosMenu(7);
break;
case 6:
System.out.println("Quiere beber Alcohol o
Jugo?");
System.out.println("1. Alcohol");
System.out.println("2. Jugo");
System.out.println("0. Volver al menu
anterior");
int opcionBeber = sc.nextInt();

December 13, 2022


8
if (opcionBeber == 0){
todosMenu(2);
}else if (opcionBeber == 1){
todosMenu(4);
}else if (opcionBeber == 2){
todosMenu(8);
}else{
System.out.println("Por favor seleccionar
una de las opciones disponibles");
todosMenu(7);
}
break;
default:
if (isClose){
cerrarPrograma();
}else{
System.out.println("Por favor seleccionar
una de las opciones disponibles");
todosMenu(7);
}
}
break;
case 8:
System.out.println("\n====================== Jugos
disponibles ======================");
for (int i=0; i < opcionJugos().length; i++){
System.out.printf("%d. %s\n", (i+1), opcionJugos()
[i]);
}
System.out.println("0. Volver al menu anterior");
System.out.printf("Que jugo quiere comprar?: ");
int opcionJugo = sc.nextInt();
switch (opcionJugo){
case 1:
agregarCompra(1, "jugos");
break;
case 2:
agregarCompra(2, "jugos");
break;
case 3:
agregarCompra(3, "jugos");
break;
case 4:
agregarCompra(4, "jugos");
break;
case 5:
agregarCompra(5, "jugos");
break;
case 0:
todosMenu(2);
break;
}
todosMenu(8);
break;
default:
System.out.println("Por favor seleccionar una de las
opciones disponibles");
todosMenu(menu);
}
}

December 13, 2022


9
//Funcion que nos devuelve una lista, donde se encuentra
//todas las bebidas disponibles.
private String[] bebidasAlcoholicas(){
String[] bebidas = {"Romo", "Cervesa presidente", "Cervesa
republica (la tuya)", "Brugal", "Champania"};
return bebidas;
}

//Funcion para obtener una lista de todas las opciones de juegos


de pagas
private String[] opcionesDePaga(){
String[] opciones = {"Jetsky ($2500)","Clases de
buceo($700)","Excursión de buceo($250)","Banana
Boat($150)","Parapentes($3000)","tipo de bebidas internacionales (las
bebidas alcohólicas son gratis)"};
return opciones;
}

//Funcion que devuelve todos los jugos disponibles.


private String[] opcionJugos(){
String[] jugos = {"pera ($150)", "manzana ($200)", "melocoton
($300)", "pinia ($100)", "fresa ($350)"};
return jugos;
}

//En esta funcion agregamos una lista de precios, para simular


//una una BD donde estaran todos los precios de los productos.
public Double[] precioOpcionPaga(){
Double[] precios = new Double[]{2500.00, 700.00, 250.00,
150.00, 3000.00};
return precios;
}

//En esta funcion agregamos una lista de precios, para simular


//una una BD donde estaran todos los precios de los productos.
public Double[] precioOpcionPagaJugos(){
Double[] precios = new Double[]{150.00, 200.00, 300.00,
100.00, 350.00};
return precios;
}

//Metodo utilizado para mostrar un mensaje al cerrar el programa


//con esto logramos tener el codigo un poco más organizado
public void cerrarPrograma(){
System.out.println("Gracias por utilizar nuestro Programa.");
}

//Metodo utilizaod para agregar lo que vamos consumiendo en el


hotel,
//para luego ser utilizado y mostrarle todo lo que ha consumido y
tiene
//para pagar.
public void agregarCompra(int seleccion, String tipo){
if (tipo.hashCode() == "jugos".hashCode()){
ArrayList<Double> datoDeCompra =
hab.montoConsumoCliente.get(Habitaciones.idContext);
datoDeCompra.add(precioOpcionPagaJugos()[(seleccion-1)]);

hab.listaConsumoCliente.get(Habitaciones.idContext).add(opcionJugos()
[(seleccion-1)]);
System.out.println("Acaba de comprar un Jugo de " +

December 13, 2022


10
opcionJugos()[(seleccion-1)]);
}else if (tipo.hashCode() == "diversion".hashCode()){
ArrayList<Double> datoDeCompra =
hab.montoConsumoCliente.get(Habitaciones.idContext);
datoDeCompra.add(precioOpcionPaga()[(seleccion-1)]);

hab.listaConsumoCliente.get(Habitaciones.idContext).add(opcionesDePaga
()[(seleccion-1)]);
System.out.println("Acaba de pagar por " +
opcionesDePaga()[(seleccion-1)]);
}else System.out.println("Ese tipo no existe!");
}
}

December 13, 2022


11
Funcionamiento del programa

Menú al iniciar el programa

Opción #1
Operación #1

Opción #1
Operación #2

¿Cuánta semana durara?: 3


Operación #3

December 13, 2022


12
Opción #1 – Menú de bienvenida al cliente
Operación #4

Opción #1
Operación #5

Opción #3
Operación #6

Luego vuelve a salir el mismo Menu para permitirle seleccionar de nuevo

Opción #0
Operación #7

December 13, 2022


13
Menu anterior

Opción #2
Operación #8

Opción #5
Operación #9

Opción #6
Operación #10

December 13, 2022


14
Opción #2
Operación #11

Opción #3
Operación #12

Opción #5
Operación #13

December 13, 2022


15
Opción #2
Operación #14

Opción #4
Operación #15

Inicio de nuevo

Opción #3
Operación #17

December 13, 2022


16
Opción #1
Operación #18

Opción #2
Operación #19

Opción #4
Operación #20

December 13, 2022


17
Opción #5
Operación #21

Opción #0
Operación #22

Opción #2
Operación #23

Opción #5
Operación #24

December 13, 2022


18
Opción #1
Operación #25

Opción #2
Operación #26

Opción #3
Operación #27

Opción #4
Operación #28

Opción #0
Operación #29

Opción #5
Operación #30

December 13, 2022


19
Opción #1
Operación #31

Opción #6
Operación #32

Opción #1
Operación #33

December 13, 2022


20
Opción #0
Operación #34

Opción #3
Operación #35

Opción #1
Operación #36

Opción #2
Operación #37

Opción #3
Operación #38

December 13, 2022


21
Opción #4
Operación #39

Opción #5
Operación #40

Opción #0
Operación #41

Opción #5
Operación #42

December 13, 2022


22
Opción #4
Operación #43

Opción #2
Operación #44

Opción #4
Operación #45

Opción #1
Operación #46

December 13, 2022


23
Opción #2
Operación #47

Aquí ahora se encuentra dentro del Hotel, pero sin reservar una habitación

Opción #1
Operación #48

Opción #1
Operación #54

Opción #2
Operación #49

Opción #3
Operación #50

December 13, 2022


24
Opción #4
Operación #51

Opción #5
Operación #52

Opción #6
Operación #53

Opción #0
Operación #55

Opción #0
Operación #56

Opción #5
Operación #57

December 13, 2022


25
Opción #2
Operación #58

Opción #7
Operación #59

Opción #0
Operación #60

December 13, 2022


26
Opción #1
Operación #60

Mensaje que saldrá cuando cierre el programa si el cliente había reservado una
habitación

Mensaje que saldrá cuando cierre el programa si el cliente no había reservado


una habitación

December 13, 2022


27

También podría gustarte