Boa tarde, estou com problema que ta me deixando louco kkkkkk
É o seguinte, estou fazendo um sistema de Reserva, onde tem os campos data, horaInicio e horaFim, problema está na logica de não repetir naquele suposto dia. Entenderam ? Alguém teria uma ideia de como fazer ?
Lógica de reserva
3 Respostas
não pode ter reserva naquele data e hora
1 like
Montei uma ideia aqui:
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
public class Main {
private static final DateTimeFormatter PATTERN_DATA = DateTimeFormatter.ofPattern("dd/MM/yyyy");
private static final List<Reserva> RESERVAS = new ArrayList<>();
public static void main(String[] args) throws Exception {
criarReserva("15/10/2021", "13:00", "14:00");
criarReserva("15/10/2021", "14:00", "15:00");
criarReserva("15/10/2021", "14:59", "16:00");
System.out.println("Foram feitas " + RESERVAS.size() + " reservas.");
}
private static void criarReserva(String dia, String horaInicio, String horaFim) throws Exception {
var reserva = new Reserva(LocalDate.parse(dia, PATTERN_DATA), LocalTime.parse(horaInicio), LocalTime.parse(horaFim));
if (RESERVAS.isEmpty()) {
RESERVAS.add(reserva);
} else {
for (Reserva r : RESERVAS) {
if (r.seHaConflito(reserva)) {
throw new Exception("Não foi possível registrar a reserva " + reserva + ", pois conflitou com a reserva: " + r);
}
}
RESERVAS.add(reserva);
}
}
static class Reserva {
private final LocalDateTime inicio;
private final LocalDateTime fim;
public Reserva(LocalDate inicio, LocalTime horaInicio, LocalTime horaFim) {
this.inicio = inicio.atTime(horaInicio);
this.fim = inicio.atTime(horaFim);
}
public boolean seHaConflito(Reserva reserva) {
return
(seIgualOuDepois(reserva.inicio, inicio) && reserva.inicio.isBefore(fim)) ||
(seIgualOuDepois(reserva.fim, inicio) && reserva.fim.isBefore(fim));
}
private boolean seIgualOuDepois(LocalDateTime d1, LocalDateTime d2) {
return d1.equals(d2) || d1.isAfter(d2);
}
public LocalDateTime getInicio() {
return inicio;
}
public LocalDateTime getFim() {
return fim;
}
@Override
public String toString() {
return "Reserva [" + inicio.toLocalDate().format(PATTERN_DATA) + " (" + inicio.toLocalTime() + " - " + fim.toLocalTime() + ")]";
}
}
}
Com certeza deve dá para melhorar o código, e talvez tenha alguma falha.
valeu amigo, já posso tirar uma ideia de como fazer no meu sistema web, irei tentar aplicar essa ideia.
Criado 15 de outubro de 2021
Ultima resposta 16 de out. de 2021
Respostas 3
Participantes 2
Alura O que é Python? — um guia completo para iniciar nessa linguagem de programação Acesse agora o guia sobre Python e inicie sua jornada nessa linguagem de programação: o que é e para que serve, sua sintaxe e como iniciar nela!
Casa do Codigo Engenharia de Prompt para Devs: Um guia para aprender a... Por Ricardo Pupo Larguesa — Casa do Codigo