DROP DATABASE IF EXISTS alura_hotel;
CREATE DATABASE alura_hotel;
USE alura_hotel;
CREATE TABLE reserva(
id INT NOT NULL AUTO_INCREMENT,
fecha_entrada DATE NOT NULL,
fecha_salida DATE NOT NULL,
valor VARCHAR(50),
forma_de_pago VARCHAR(50) NOT NULL,
PRIMARY KEY(id)
);
CREATE TABLE huesped(
id INT NOT NULL AUTO_INCREMENT,
nombre VARCHAR(50) NOT NULL,
apellido VARCHAR(50) NOT NULL,
fecha_nacimiento DATE NOT NULL,
nacionalidad VARCHAR(50) NOT NULL,
telefono VARCHAR(50) NOT NULL,
id_reserva INT NOT NULL,
PRIMARY KEY(id),
FOREIGN KEY(id_reserva) REFERENCES reserva(id)
);
CREATE TABLE usuario(
nombre VARCHAR(50),
contrasena VARCHAR(50)
);
- Registro Huesped
- Reservas views
- Menu Principal
- Menu Usuario
- Busqueda
- Exito
- Login
En el menú principal, encontrarás un botón de inicio de sesión que te permitirá iniciar sesión. Una vez que te hayas autenticado, se desplegará un menú de usuario con varias opciones, incluyendo la posibilidad de hacer una reserva. En el proceso de reserva, deberás proporcionar las fechas de Check In y Check Out. El sistema calculará automáticamente el costo en función de la tarifa diaria y te pedirá que elijas el método de pago (tarjeta de crédito, débito o efectivo).
A continuación, deberás registrar tus datos como huésped, incluyendo tu nombre, apellido, fecha de nacimiento, nacionalidad y número de contacto. Además, se te asignará un número de reserva que estará vinculado a tu perfil. El sistema te notificará una vez que hayas completado la operación, ya sea con un mensaje de éxito o de error.
Después de realizar esta operación, regresarás al menú principal, donde podrás realizar otra reserva o utilizar la función de búsqueda para localizar reservas previas. La función de búsqueda te permitirá filtrar las reservas según diversos parámetros, editarlas o cancelarlas desde una lista. También tendrás la opción de cerrar sesión para autenticarte con otro usuario si lo deseas.
En general, en aplicaciones Java Swing, cambiar de una vista a otra puede hacerse de varias maneras, como usando CardLayout, mostrando y ocultando paneles, o utilizando ventanas (frames) separadas y controlando su visibilidad.
Se da cuando el usuario hace clic en el botón "btnexit". La acción lleva al usuario a la vista del Menú Principal.
btnexit.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
MenuPrincipal principal = new MenuPrincipal();
principal.setVisible(true);
dispose();
}
});
Se da cuando el usuario hace clic en el botón "btnAtras". Esta acción lleva al usuario a la vista del Menú Usuario.
btnAtras.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
MenuUsuario usuario = new MenuUsuario();
usuario.setVisible(true);
dispose();
}
});
Esto ocurre cuando el usuario hace clic en "btnsiguiente" (asumiendo que todas las condiciones requeridas se cumplen). Esta acción lleva al usuario a la vista RegistroHuesped.
btnsiguiente.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (ReservasView.txtFechaEntrada.getDate() != null && ReservasView.txtFechaSalida.getDate() != null) {
guardarReserva();
} else {
JOptionPane.showMessageDialog(null, "Debes llenar todos los campos.");
}
}
});
private void guardarReserva(){
// ...
RegistroHuesped registro = new RegistroHuesped(reserva.getId());
registro.setVisible(true);
dispose();
// ...
}
Esto ocurre cuando el usuario hace clic en "btnsiguiente" (asumiendo que todas las condiciones requeridas se cumplen). Esta acción lleva al usuario a la vista RegistroHuesped.
JPanel btnAtras = new JPanel();
btnAtras.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
ReservasView reservas = new ReservasView();
reservas.setVisible(true);
dispose();
}
});
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Esto ocurre cuando el usuario hace clic en "btnRegistro" (asumiendo que todas las condiciones requeridas se cumplen). Esta acción lleva al usuario a la vista Reservas.
JPanel btnRegistro = new JPanel();
btnRegistro.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
ReservasView reservas = new ReservasView();
reservas.setVisible(true);
dispose();
}
});
Similar al anterior, el botón btnBusqueda es el desencadenante. Al hacer clic en este botón, se crea e inicializa un nuevo objeto Busqueda, que representa la vista de Búsqueda. Luego, se hace visible esta nueva vista y se cierra la vista actual (MenuUsuario). Esto indica que el flujo es:
JPanel btnBusqueda = new JPanel();
btnBusqueda.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
Busqueda busqueda = new Busqueda();
busqueda.setVisible(true);
dispose();
}
});
JPanel btnexit = new JPanel();
btnexit.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
System.exit(0);
}
});
al hacer clic en el panel btnLogin, se crea una nueva instancia de la clase Login, se hace visible y se cierra la ventana del menú principal con dispose().
JPanel btnLogin = new JPanel();
btnLogin.setBounds(754, 300, 83, 70);
btnLogin.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
Login login = new Login();
login.setVisible(true);
dispose();
}
});
JPanel btnexit = new JPanel();
btnexit.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
System.exit(0);
}
//... otros métodos ...
});
Cuando el usuario presiona el botón "OK" en el diálogo de éxito, la aplicación cierra el diálogo y abre la vista de MenuUsuario.
JButton okButton = new JButton("OK");
okButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dispose();//sirve para cerrar la ventana actual
MenuUsuario usuario = new MenuUsuario();
usuario.setVisible(true);
}
});
Aquí, cuando se hace clic en el botón btnAtras, se cierra la vista actual (dispose()) y se muestra la vista MenuUsuario.
JPanel btnAtras = new JPanel();
btnAtras.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
MenuUsuario usuario = new MenuUsuario();
usuario.setVisible(true);
dispose();
}
...
});
JPanel btnexit = new JPanel();
btnexit.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
MenuUsuario usuario = new MenuUsuario();
usuario.setVisible(true);
dispose();
}
...
});
al hacer clic en el botón btnbuscar, se realiza una búsqueda y se muestran los resultados, ya sea en la tabla de reservas o en la tabla de huéspedes.
JPanel btnbuscar = new JPanel();
btnbuscar.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
limpiarTabla();
if(txtBuscar.getText().equals("")){
visualizarTablaReservas();
visualizarTablaHuespedes();
}else{
visualizarTablaReserva();
visualizarTablaHuesped();
}
}
});
al hacer clic en el botón btnEditar, verifica qué fila de qué tabla está seleccionada. Si se selecciona una fila de la tabla de reservas (tbReservas), actualizará esa reserva. Si se selecciona una fila de la tabla de huéspedes (tbHuespedes), actualizará ese huésped.
JPanel btnEditar = new JPanel();
btnEditar.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e){
int filaReservas = tbReservas.getSelectedRow();
int filaHuespedes = tbHuespedes.getSelectedRow();
if(filaReservas >= 0){
actualizarReserva();
limpiarTabla();
visualizarTablaReservas();
visualizarTablaHuespedes();
}else if(filaHuespedes >= 0){
actualizarHuesped();
limpiarTabla();
visualizarTablaHuespedes();
visualizarTablaReservas();
}
}
});
Primero, es necesario tener un contenedor principal con CardLayout:
import javax.swing.*;
import java.awt.*;
public class MainFrame extends JFrame {
private CardLayout cardLayout = new CardLayout();
private JPanel mainPanel = new JPanel(cardLayout);
private MenuUsuario menuUsuario;
private ReservasView reservasView;
private Busqueda busquedaView;
public MainFrame() {
setSize(500, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
menuUsuario = new MenuUsuario(cardLayout, mainPanel);
reservasView = new ReservasView();
busquedaView = new Busqueda();
mainPanel.add(menuUsuario, "menuUsuario");
mainPanel.add(reservasView, "reservasView");
mainPanel.add(busquedaView, "busquedaView");
add(mainPanel, BorderLayout.CENTER);
cardLayout.show(mainPanel, "menuUsuario");
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
new MainFrame().setVisible(true);
});
}
}
En lugar de instanciar nuevas vistas y cerrar la actual, usarás el CardLayout para cambiar entre tarjetas.
public class MenuUsuario extends JPanel {
private CardLayout cardLayout;
private JPanel mainPanel;
public MenuUsuario(CardLayout cardLayout, JPanel mainPanel) {
this.cardLayout = cardLayout;
this.mainPanel = mainPanel;
JPanel btnRegistro = new JPanel();
btnRegistro.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
cardLayout.show(mainPanel, "reservasView");
}
});
JPanel btnBusqueda = new JPanel();
btnBusqueda.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
cardLayout.show(mainPanel, "busquedaView");
}
});
add(btnRegistro);
add(btnBusqueda);
}
}