Vamos a continuar con la implementación de las funcionalidades más
importantes del sistema, siguiendo el diagrama UML que proporcionaste. Aquí
te presento los pasos necesarios para implementar estas funcionalidades:
1. Búsqueda de Guía por Nombre, Ciudad o País:
Implementar un método en UsuarioController para buscar guías por
nombre, ciudad o país.
2. Hacer una Reserva:
Implementar el método hacerReserva en Turista que crea una instancia
de Reserva y la asocia a un Viaje .
Actualizar el estado del Guía a Reservado .
3. Aceptar o Cancelar Reserva:
Implementar los métodos aceptarReserva y cancelarReserva en Guía para
manejar el estado de la reserva.
Código Implementado
1. Búsqueda de Guía:
Añadimos el método de búsqueda en UsuarioController :
package CONTROLLERS;
import [Link];
import [Link];
public class UsuarioController {
private List<Usuario> usuarios;
public UsuarioController() {
[Link] = new ArrayList<>();
}
public void registrarUsuario(usuarioDTO uDTO) {
// Lógica para registrar un usuario
// ...
Untitled 1
}
public Usuario buscarUsuarioPorEmail(String email) {
// Lógica para buscar un usuario por email
// ...
}
public boolean verificarContraseña(Usuario usuario, Str
ing contraseña) {
// Lógica para verificar la contraseña
// ...
}
public List<Guia> buscarGuiasPorNombre(String nombre) {
return [Link]()
.filter(u -> u instanceof Guia)
.map(u -> (Guia) u)
.filter(g -> [Link]().equalsIgnoreCase
(nombre))
.collect([Link]());
}
public List<Guia> buscarGuiasPorCiudad(String ciudad) {
return [Link]()
.filter(u -> u instanceof Guia)
.map(u -> (Guia) u)
.filter(g -> [Link]().contains(ciuda
d))
.collect([Link]());
}
public List<Guia> buscarGuiasPorPais(String pais) {
return [Link]()
.filter(u -> u instanceof Guia)
.map(u -> (Guia) u)
.filter(g -> [Link]().contains(pais))
.collect([Link]());
Untitled 2
}
}
2. Hacer una Reserva:
Actualizamos la clase Turista y Guia para manejar las reservas:
package CLASES;
import [Link];
public class Turista extends Usuario {
public Turista(String nombre, String apellido, String s
exo, int dni, String email, int telefono) {
super(nombre, apellido, sexo, dni, email, telefono,
[Link]);
}
public Reserva hacerReserva(Date fechaInicio, Date fech
aFin, int montoAnticipo, Guia guia, ServicioOfrecido servic
ioOfrecido) {
Reserva reserva = new Reserva("Reservado", fechaIni
cio, fechaFin, montoAnticipo, new Viaje(servicioOfrecido, g
uia, fechaInicio, fechaFin));
[Link](new EstadoReservado());
return reserva;
}
public void cancelarReserva(Reserva reserva) {
[Link]();
}
}
package CLASES;
import [Link];
Untitled 3
public class Guia extends Usuario {
private List<String> ciudades;
private List<String> paises;
private List<ServicioOfrecido> servicios;
private Credencial credencial;
private Estado estado;
public Guia(String nombre, String apellido, String sex
o, int dni, String email, int telefono, List<String> ciudad
es, List<String> paises, List<ServicioOfrecido> servicios,
Credencial credencial) {
super(nombre, apellido, sexo, dni, email, telefono,
[Link]);
[Link] = ciudades;
[Link] = paises;
[Link] = servicios;
[Link] = credencial;
[Link] = new EstadoDisponible();
}
public void cambiarEstado(Estado nuevoEstado) {
[Link] = nuevoEstado;
}
public void aceptarReserva(Reserva reserva) {
[Link]();
[Link](new EstadoReservado());
}
public void cancelarReserva(Reserva reserva) {
[Link]();
[Link](new EstadoDisponible());
}
public List<String> getCiudades() {
return ciudades;
}
Untitled 4
public List<String> getPaises() {
return paises;
}
public List<ServicioOfrecido> getServicios() {
return servicios;
}
}
3. Manejo de Estado de la Reserva:
Actualizamos la clase Reserva :
package CLASES;
import [Link];
public class Reserva {
private String estado;
private Date fechaDelInicio;
private Date fechaFin;
private int montoDeAnticipo;
private Viaje viaje;
public Reserva(String estado, Date fechaDelInicio, Date
fechaFin, int montoDeAnticipo, Viaje viaje) {
[Link] = estado;
[Link] = fechaDelInicio;
[Link] = fechaFin;
[Link] = montoDeAnticipo;
[Link] = viaje;
}
public void confirmarReserva() {
[Link] = "Confirmado";
[Link]().cambiarEstado(new Esta
doReservado());
Untitled 5
}
public void cancelarReserva() {
[Link] = "Cancelado";
[Link]().cambiarEstado(new Esta
doDisponible());
}
public void rechazarReserva() {
[Link] = "Rechazado";
}
}
4. Actualización en el Sistema :
Actualizamos el flujo principal en la clase Sistema para incluir estas
funcionalidades:
package CLASES;
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public class Sistema {
private static List<Usuario> usuarios;
private static UsuarioController usuarioController;
public Sistema() {
[Link] = new ArrayList<>();
[Link] = new UsuarioController();
}
public static void main(String[] args) {
Sistema sistema = new Sistema();
Untitled 6
Scanner scanner = new Scanner([Link]);
// Usuarios de ejemplo
// ...
while (true) {
[Link]("¡Bienvenido a FindYourGuid
e!");
[Link]("1- Crear nueva cuenta");
[Link]("2- Iniciar sesion");
[Link]("3- Buscar guía");
[Link]("4- Salir");
int opcionAcceso = [Link]();
switch (opcionAcceso) {
case 1:
// Registro de usuario
// ...
break;
case 2:
// Inicio de sesión
// ...
break;
case 3:
[Link]("Buscar guía por: 1-
Nombre, 2-Ciudad, 3-País");
int opcionBusqueda = [Link]();
[Link](); // Consumir el salt
o de línea
List<Guia> guiasEncontrados = new Array
List<>();
switch (opcionBusqueda) {
case 1:
[Link]("Ingrese el
nombre del guía:");
String nombre = [Link]
Untitled 7
e();
guiasEncontrados = usuarioContr
[Link](nombre);
break;
case 2:
[Link]("Ingrese la
ciudad:");
String ciudad = [Link]
e();
guiasEncontrados = usuarioContr
[Link](ciudad);
break;
case 3:
[Link]("Ingrese el
país:");
String pais = [Link]
();
guiasEncontrados = usuarioContr
[Link](pais);
break;
default:
[Link]("Opción no v
álida.");
}
if ([Link]()) {
[Link]("No se encontrar
on guías.");
} else {
for (Guia guia : guiasEncontrados)
{
[Link]("Guía encont
rado: " + [Link]() + " " + [Link]());
[Link]("Ciudad(es):
" + [Link](", ", [Link]()));
[Link]("País(es): "
+ [Link](", ", [Link]()));
[Link]("Servicios o
Untitled 8
frecidos:");
for (ServicioOfrecido servicio
: [Link]()) {
[Link]("- " + s
[Link]() + ": " + [Link]
() + " (Precio: " + [Link]() + ")");
}
}
}
break;
case 4:
[Link]("Saliendo del progra
ma.");
[Link]();
return;
}
}
}
}
Con estos cambios, el sistema ahora permite:
Buscar guías por nombre, ciudad o país.
Realizar una reserva.
Cambiar el estado del guía a Reservado .
Aceptar o cancelar una reserva, actualizando el estado del guía.
Esta implementación sigue las indicaciones del diagrama UML y utiliza el
patrón Adapter para manejar la autenticación de usuarios.
Untitled 9