Initial commit: VS&NB
This commit is contained in:
119
NetBeans_Proyecto_1_Parqueo/src/main/java/CalculoTarifa.java
Normal file
119
NetBeans_Proyecto_1_Parqueo/src/main/java/CalculoTarifa.java
Normal file
@@ -0,0 +1,119 @@
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.Duration;
|
||||
|
||||
public class CalculoTarifa {
|
||||
|
||||
//originalmente calculaba el monto total aquí y en Main, pero codex sugirió mantener cálculos fuera de main. El prompt fué: "Remove the duplicate and adjust the text."
|
||||
public static class DetalleCobro {
|
||||
private long minutos;
|
||||
private int tarifaAplicada;
|
||||
private long unidCobro;
|
||||
private int subtotal;
|
||||
private int descuento;
|
||||
private int total;
|
||||
|
||||
public DetalleCobro(long minutos, int tarifaAplicada, long unidCobro, int subtotal, int descuento, int total) {
|
||||
this.minutos = minutos;
|
||||
this.tarifaAplicada = tarifaAplicada;
|
||||
this.unidCobro = unidCobro;
|
||||
this.subtotal = subtotal;
|
||||
this.descuento = descuento;
|
||||
this.total = total;
|
||||
}
|
||||
|
||||
public long getMinutos() {
|
||||
return minutos;
|
||||
}
|
||||
|
||||
public int getTarifaAplicada() {
|
||||
return tarifaAplicada;
|
||||
}
|
||||
|
||||
public long getUnidCobro() {
|
||||
return unidCobro;
|
||||
}
|
||||
|
||||
public int getSubtotal() {
|
||||
return subtotal;
|
||||
}
|
||||
|
||||
public int getDescuento() {
|
||||
return descuento;
|
||||
}
|
||||
|
||||
public int getTotal() {
|
||||
return total;
|
||||
}
|
||||
}
|
||||
|
||||
public int calcularMonto(TiqueteParqueo t) {
|
||||
DetalleCobro detalle = calcularDetalle(t);
|
||||
t.setMontoTotal(detalle.getTotal());
|
||||
return detalle.getTotal();
|
||||
}
|
||||
|
||||
public DetalleCobro calcularDetalle(TiqueteParqueo t) {
|
||||
long minutos = calcularMinCobro(t);
|
||||
int tarifa = obtenerTarifa(t);
|
||||
long unidades = getUnidadCobro(minutos, t.getModalidad());
|
||||
int subtotal = (int) (unidades * tarifa);
|
||||
int descuento = calcularDescuento(t.getModalidad(), unidades, subtotal);
|
||||
int total = subtotal - descuento;
|
||||
return new DetalleCobro(minutos, tarifa, unidades, subtotal, descuento, total);
|
||||
}
|
||||
|
||||
// Obtiene la tarifa segun tipo (1=Auto, 2=Moto, 3=Camion)
|
||||
private int obtenerTarifa(TiqueteParqueo t) {
|
||||
|
||||
TiqueteParqueo.TipoServicio modalidad = t.getModalidad();
|
||||
int tipo = t.getVehiculo().getTipo();
|
||||
|
||||
if (modalidad == TiqueteParqueo.TipoServicio.POR_HORA) {
|
||||
if (tipo == 2) {
|
||||
return 500;
|
||||
} else if (tipo == 1 || tipo == 3) {
|
||||
return 600;
|
||||
}
|
||||
}
|
||||
|
||||
if (modalidad == TiqueteParqueo.TipoServicio.POR_DIA) {
|
||||
if (tipo == 2) {
|
||||
return 3000;
|
||||
} else if (tipo == 1 || tipo == 3) {
|
||||
return 5000;
|
||||
}
|
||||
}
|
||||
|
||||
throw new IllegalArgumentException("Tipo de vehículo o modalidad inválidos.");
|
||||
}
|
||||
|
||||
private long calcularMinCobro(TiqueteParqueo t) {
|
||||
LocalDateTime horaEntrada = t.getHoraEntrada();
|
||||
LocalDateTime horaSalida = t.getHoraSalida();
|
||||
|
||||
if (horaSalida.isBefore(horaEntrada)) { //excepción recomendada por codex
|
||||
throw new IllegalArgumentException("La hora de salida no puede ser anterior a la hora de entrada.");
|
||||
}
|
||||
|
||||
long minutos = Duration.between(horaEntrada, horaSalida).toMinutes();
|
||||
if (minutos == 0) {
|
||||
return 1;
|
||||
}
|
||||
return minutos;
|
||||
}
|
||||
|
||||
private long getUnidadCobro(long minutos, TiqueteParqueo.TipoServicio modalidad) {
|
||||
if (modalidad == TiqueteParqueo.TipoServicio.POR_HORA) {
|
||||
return (minutos + 59) / 60;
|
||||
}
|
||||
return (minutos + 1439) / 1440;
|
||||
}
|
||||
|
||||
private int calcularDescuento(TiqueteParqueo.TipoServicio modalidad, long unidades, int subtotal) {
|
||||
if (modalidad == TiqueteParqueo.TipoServicio.POR_HORA && unidades > 8) {
|
||||
return subtotal * 10 / 100;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
94
NetBeans_Proyecto_1_Parqueo/src/main/java/GestorParqueo.java
Normal file
94
NetBeans_Proyecto_1_Parqueo/src/main/java/GestorParqueo.java
Normal file
@@ -0,0 +1,94 @@
|
||||
import java.util.ArrayList;
|
||||
import java.time.LocalDate;
|
||||
|
||||
public class GestorParqueo {
|
||||
|
||||
private static final int MAX_VEHICULOS = 10;
|
||||
|
||||
private ArrayList<Vehiculo> vehiculosParqueados;
|
||||
private ArrayList<TiqueteParqueo> tiquetes;
|
||||
|
||||
public GestorParqueo() {
|
||||
|
||||
this.vehiculosParqueados = new ArrayList<Vehiculo>();
|
||||
this.tiquetes = new ArrayList<TiqueteParqueo>();
|
||||
|
||||
}
|
||||
|
||||
public boolean registrarIngreso(TiqueteParqueo nuevoTiquete) {
|
||||
if (this.vehiculosParqueados.size() < MAX_VEHICULOS
|
||||
&& !existePlaca(nuevoTiquete.getVehiculo().getPlaca())) {
|
||||
this.vehiculosParqueados.add(nuevoTiquete.getVehiculo());
|
||||
this.tiquetes.add(nuevoTiquete);
|
||||
return true;
|
||||
}
|
||||
if (this.vehiculosParqueados.size() > 4){
|
||||
System.out.println("Aviso: quedan " + espaciosDisponibles() + "espacios disponibles.");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean existePlaca(String placa) {
|
||||
for (Vehiculo vehiculo : this.vehiculosParqueados) {
|
||||
if (vehiculo.getPlaca().equals(placa)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public int espaciosDisponibles() {
|
||||
return MAX_VEHICULOS - this.vehiculosParqueados.size();
|
||||
}
|
||||
|
||||
public int getCapacidadMaxima() {
|
||||
return MAX_VEHICULOS;
|
||||
}
|
||||
|
||||
public boolean estaVacio() {
|
||||
return this.vehiculosParqueados.isEmpty();
|
||||
}
|
||||
|
||||
public TiqueteParqueo buscarTiqueteAbierto(String placa) {
|
||||
for (TiqueteParqueo tiquete : this.tiquetes) {
|
||||
if (tiquete.getVehiculo().getPlaca().equals(placa) && tiquete.getHoraSalida() == null) {
|
||||
return tiquete;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean registrarSalida(String placa) {
|
||||
boolean vehiculoEliminado = false;
|
||||
for (int i = 0; i < this.vehiculosParqueados.size(); i++) {
|
||||
if (this.vehiculosParqueados.get(i).getPlaca().equals(placa)) {
|
||||
this.vehiculosParqueados.remove(i);
|
||||
vehiculoEliminado = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return vehiculoEliminado;
|
||||
}
|
||||
|
||||
public Vehiculo buscarPlaca(String placa) {
|
||||
for (Vehiculo vehiculo : this.vehiculosParqueados) {
|
||||
if (vehiculo.getPlaca().equals(placa)) {
|
||||
return vehiculo;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public ArrayList<TiqueteParqueo> getTiquetesDia(LocalDate fecha) {
|
||||
ArrayList<TiqueteParqueo> resultado = new ArrayList<TiqueteParqueo>();
|
||||
for (TiqueteParqueo tiquete : this.tiquetes) {
|
||||
if (tiquete.getHoraEntrada() != null
|
||||
&& tiquete.getHoraEntrada().toLocalDate().equals(fecha)) {
|
||||
resultado.add(tiquete);
|
||||
}
|
||||
}
|
||||
return resultado;
|
||||
}
|
||||
|
||||
}
|
||||
282
NetBeans_Proyecto_1_Parqueo/src/main/java/Main.java
Normal file
282
NetBeans_Proyecto_1_Parqueo/src/main/java/Main.java
Normal file
@@ -0,0 +1,282 @@
|
||||
/*
|
||||
UNIVERSIDAD ESTATAL A DISTANCIA
|
||||
ESCUELAS DE CIENCIAS EXACTAS Y NATURALES
|
||||
CATEDRA TECNOLOGÍA DE SISTEMAS
|
||||
|
||||
ANDRES ALBERTO SANCHEZ TREJOS
|
||||
GRUPO 09
|
||||
TUTOR: HERSANN FONSECA QUIRÓS
|
||||
PROGRAMACION INTERMEDIA 00824
|
||||
Proyecto #1
|
||||
IC2026
|
||||
|
||||
|
||||
Bibliografía
|
||||
Deitel, P.J.D. H. (2021). Cómo Programar En Java. Pearson HispanoAmerica Contenido. https://bookshelf.vitalsource.com/books/9786073255400
|
||||
https://www.w3schools.com/java/
|
||||
CODEX: se usó para generalmente para revisar la eficacia de las cláses y métodos.
|
||||
El prompt generalmente utilizado fue "revisa esta método/función" o fué utilizado .
|
||||
|
||||
*/
|
||||
|
||||
import java.util.Scanner;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
|
||||
public class Main {
|
||||
|
||||
private static final DateTimeFormatter fechaHora = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm");
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
GestorParqueo gestorParqueo = new GestorParqueo();
|
||||
|
||||
Scanner entrada = new Scanner(System.in);
|
||||
int opcion = 0;
|
||||
|
||||
System.out.println("=================================");
|
||||
System.out.println("Bienvenido al sistema de parqueo");
|
||||
System.out.println("=================================");
|
||||
LocalDate fechaAc = LocalDate.now();
|
||||
System.out.println("Fecha actual: " + fechaAc);
|
||||
|
||||
while (opcion != 5) {
|
||||
System.out.println("1. Registrar ingreso de vehículo");
|
||||
System.out.println("2. Registrar salida de vehículo");
|
||||
System.out.println("3. Consultar espacios disponibles");
|
||||
System.out.println("4. Ver reportes del día");
|
||||
System.out.println("5. Salir");
|
||||
System.out.println("Seleccione una opción:");
|
||||
opcion = intValida(entrada);
|
||||
|
||||
switch (opcion) {
|
||||
case 1:
|
||||
TiqueteParqueo nuevoTiquete = registrarIngreso(entrada, gestorParqueo);
|
||||
if (nuevoTiquete != null) {
|
||||
if (gestorParqueo.registrarIngreso(nuevoTiquete)) {
|
||||
System.out.println("Ingreso registrado correctamente.");
|
||||
System.out.println("Espacios disponible: " + gestorParqueo.espaciosDisponibles() + "/10");
|
||||
if (gestorParqueo.espaciosDisponibles() <= 5) {
|
||||
System.err.println("Advertencia: Se ha alcanzado el 50% de capacidad máxima");
|
||||
}
|
||||
if (gestorParqueo.espaciosDisponibles() == 10) {
|
||||
System.out.println("Advertencia: Se ha alcanzado la capacidad máxima 10/10.");
|
||||
}
|
||||
} else {
|
||||
System.out.println("No hay espacios disponibles.");
|
||||
}
|
||||
}
|
||||
regresarMenuPrincipal(entrada);
|
||||
break;
|
||||
case 2:
|
||||
if (!gestorParqueo.estaVacio()) {
|
||||
registrarSalida(entrada, gestorParqueo);
|
||||
} else {
|
||||
System.out.println("No hay vehiculos registrados.");
|
||||
}
|
||||
regresarMenuPrincipal(entrada);
|
||||
break;
|
||||
case 3:
|
||||
System.out.println("Espacios disponibles: " + gestorParqueo.espaciosDisponibles());
|
||||
regresarMenuPrincipal(entrada);
|
||||
break;
|
||||
case 4:
|
||||
mostrarMenuReportes(entrada, gestorParqueo);
|
||||
regresarMenuPrincipal(entrada);
|
||||
break;
|
||||
case 5:
|
||||
System.out.println("Saliendo del sistema de parqueo.");
|
||||
break;
|
||||
default:
|
||||
System.out.println("Opción inválida. Por favor, seleccione una opción válida.");
|
||||
regresarMenuPrincipal(entrada);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
entrada.close();
|
||||
}
|
||||
|
||||
private static TiqueteParqueo registrarIngreso(Scanner entrada, GestorParqueo gestorParqueo) {
|
||||
String placa = placaValida(entrada);
|
||||
if (gestorParqueo.existePlaca(placa)) {
|
||||
System.out.println("La placa ingresada ya está registrada.");
|
||||
return null;
|
||||
}
|
||||
|
||||
int tipo = -1;
|
||||
boolean tipoValido = false;
|
||||
while (!tipoValido) {
|
||||
System.out.println("Ingrese el tipo de vehículo (1 para Automóvil, 2 para Motocicleta, 3 para Camión):");
|
||||
tipo = intValida(entrada);
|
||||
if (tipo >= 1 && tipo <= 3) {
|
||||
tipoValido = true;
|
||||
} else {
|
||||
System.out.println("Opción inválida. Por favor, seleccione una opción válida.");
|
||||
}
|
||||
}
|
||||
|
||||
TiqueteParqueo.TipoServicio modalidad = setModalidad(entrada);
|
||||
|
||||
try {
|
||||
Vehiculo vehiculo = new Vehiculo(placa, tipo);
|
||||
return new TiqueteParqueo(vehiculo, LocalDateTime.now(), modalidad);
|
||||
} catch (IllegalArgumentException e) {
|
||||
System.out.println(e.getMessage());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static void registrarSalida(Scanner entrada, GestorParqueo gestorParqueo) {
|
||||
|
||||
String placa = placaValida(entrada);
|
||||
TiqueteParqueo tiquete = gestorParqueo.buscarTiqueteAbierto(placa);
|
||||
|
||||
if (tiquete == null) {
|
||||
System.out.println("Placa no se encuentra registrada en el sistema.");
|
||||
} else {
|
||||
tiquete.setHoraSalida(LocalDateTime.now());
|
||||
CalculoTarifa calculadora = new CalculoTarifa();
|
||||
CalculoTarifa.DetalleCobro detalle = calculadora.calcularDetalle(tiquete);
|
||||
int monto = detalle.getTotal();
|
||||
tiquete.setMontoTotal(monto);
|
||||
gestorParqueo.registrarSalida(placa);
|
||||
|
||||
String horaEntrada = tiquete.getHoraEntrada().format(fechaHora);
|
||||
String horaSalida = tiquete.getHoraSalida().format(fechaHora);
|
||||
double tiempoHoras = detalle.getMinutos() / 60.0;
|
||||
|
||||
System.out.println("****************************************");
|
||||
System.out.println("RECIBO DE PARQUEO");
|
||||
System.out.println("****************************************");
|
||||
System.out.println("Placa: " + tiquete.getVehiculo().getPlaca());
|
||||
System.out.println("Tipo: " + tipoVehiculoTexto(tiquete.getVehiculo().getTipo()));
|
||||
System.out.println("Tipo de servicio: " + tipoServicioTexto(tiquete.getModalidad()));
|
||||
System.out.println("Hora de entrada: " + horaEntrada);
|
||||
System.out.println("Hora de salida: " + horaSalida);
|
||||
System.out.println("Tiempo de permanencia (horas): " + String.format("%.2f", tiempoHoras));
|
||||
if (tiquete.getModalidad() == TiqueteParqueo.TipoServicio.POR_HORA) {
|
||||
System.out.println("Costo por hora: CRC " + detalle.getTarifaAplicada());
|
||||
} else {
|
||||
System.out.println("Costo por hora: No aplica (servicio por día)");
|
||||
}
|
||||
System.out.println("Subtotal: CRC " + detalle.getSubtotal());
|
||||
if (detalle.getDescuento() > 0) {
|
||||
System.out.println("Descuento: CRC " + detalle.getDescuento());
|
||||
} else {
|
||||
System.out.println("Descuento: No aplica");
|
||||
}
|
||||
System.out.println("========================================");
|
||||
System.out.println("TOTAL A PAGAR: CRC " + monto);
|
||||
System.out.println("========================================");
|
||||
System.out.println("Gracias por usar nuestros servicios");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static void mostrarMenuReportes(Scanner entrada, GestorParqueo gestorParqueo) {
|
||||
ReporteParqueo reporteParqueo = new ReporteParqueo();
|
||||
int opcionReporte = 0;
|
||||
|
||||
while (opcionReporte != 4) {
|
||||
System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
|
||||
System.out.println("+ Menú de reportes del día +");
|
||||
System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
|
||||
System.out.println("1. Listado de vehículos");
|
||||
System.out.println("2. Total recaudado por tipo de servicio");
|
||||
System.out.println("3. Estadísticas básicas de uso del parqueo");
|
||||
System.out.println("4. Volver al menú principal");
|
||||
System.out.println("Seleccione una opción:");
|
||||
opcionReporte = intValida(entrada);
|
||||
|
||||
switch (opcionReporte) {
|
||||
case 1:
|
||||
reporteParqueo.vehiculosDia(gestorParqueo, LocalDate.now());
|
||||
break;
|
||||
case 2:
|
||||
reporteParqueo.totalUtilServicio(gestorParqueo, LocalDate.now());
|
||||
break;
|
||||
case 3:
|
||||
reporteParqueo.estadisticasBasicas(gestorParqueo, LocalDate.now());
|
||||
break;
|
||||
case 4:
|
||||
System.out.println("Regresando al menú principal.");
|
||||
break;
|
||||
default:
|
||||
System.out.println("Opción inválida. Por favor, seleccione una opción válida.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// define el tipo de servicio (modalida por dia o por hora)
|
||||
private static TiqueteParqueo.TipoServicio setModalidad(Scanner entrada) {
|
||||
int modalidad = -1;
|
||||
while (modalidad != 1 && modalidad != 2) {
|
||||
System.out.println("Seleccione modalidad de cobro (1 por hora, 2 por día):");
|
||||
modalidad = intValida(entrada);
|
||||
if (modalidad != 1 && modalidad != 2) {
|
||||
System.out.println("Opción inválida. Por favor, seleccione una opción válida.");
|
||||
}
|
||||
}
|
||||
|
||||
if (modalidad == 1) {
|
||||
return TiqueteParqueo.TipoServicio.POR_HORA;
|
||||
}
|
||||
return TiqueteParqueo.TipoServicio.POR_DIA;
|
||||
}
|
||||
|
||||
private static int intValida(Scanner entrada) {
|
||||
int opcion = -1;
|
||||
try {
|
||||
opcion = Integer.parseInt(entrada.nextLine().trim());
|
||||
} catch (NumberFormatException e) {
|
||||
System.out.println("Error: Entrada inválida. Por favor, ingrese un número entero.");
|
||||
}
|
||||
return opcion;
|
||||
}
|
||||
|
||||
private static void regresarMenuPrincipal(Scanner entrada) {
|
||||
System.out.println("Presione Enter para volver al menú principal...");
|
||||
entrada.nextLine();
|
||||
}
|
||||
|
||||
private static String placaValida(Scanner entrada) {
|
||||
String placa = "";
|
||||
boolean placaValida = false;
|
||||
while (!placaValida) {
|
||||
System.out.println("Ingrese la placa del vehículo (en formato ABC123):");
|
||||
placa = entrada.nextLine().trim().toUpperCase();
|
||||
if (placa.isEmpty()) {
|
||||
System.out.println("La placa no puede estar vacía.");
|
||||
} else if (!Vehiculo.esPlacaValida(placa)) {
|
||||
System.out.println("Formato inválido. Use 3 letras y 3 números (ejemplo: ABC123).");
|
||||
} else {
|
||||
placaValida = true;
|
||||
}
|
||||
}
|
||||
return placa;
|
||||
}
|
||||
|
||||
private static String tipoVehiculoTexto(int tipo) {
|
||||
if (tipo == 1) {
|
||||
return "Automóvil";
|
||||
}
|
||||
if (tipo == 2) {
|
||||
return "Motocicleta";
|
||||
}
|
||||
if (tipo == 3) {
|
||||
return "Camión";
|
||||
}
|
||||
return "Desconocido";
|
||||
}
|
||||
|
||||
private static String tipoServicioTexto(TiqueteParqueo.TipoServicio modalidad) {
|
||||
if (modalidad == TiqueteParqueo.TipoServicio.POR_HORA) {
|
||||
return "Por hora";
|
||||
}
|
||||
return "Por día";
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
import java.time.LocalDate;
|
||||
import java.time.Duration;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class ReporteParqueo {
|
||||
|
||||
private static final DateTimeFormatter soloFecha = DateTimeFormatter.ofPattern("dd/MM/yyyy");
|
||||
|
||||
public void vehiculosDia(GestorParqueo gestorParqueo, LocalDate fecha) {
|
||||
|
||||
ArrayList<TiqueteParqueo> tiquetes = gestorParqueo.getTiquetesDia(fecha);
|
||||
|
||||
String fechaFormateada = fecha.format(soloFecha);
|
||||
|
||||
if (tiquetes.isEmpty()) {
|
||||
System.out.println("No hay vehículos registrados para la fecha: " + fechaFormateada);
|
||||
return;
|
||||
}
|
||||
|
||||
System.out.println("Vehículos que usaron el parqueo el día " + fechaFormateada + ":");
|
||||
for (TiqueteParqueo tiquete : tiquetes) {
|
||||
|
||||
String placa = tiquete.getVehiculo().getPlaca();
|
||||
String tipo = tipoVehiculoTexto(tiquete.getVehiculo().getTipo());
|
||||
String entrada = tiquete.getHoraEntrada().format(soloFecha);
|
||||
String salida = "Aún parqueado";
|
||||
if (tiquete.getHoraSalida() != null) {
|
||||
salida = tiquete.getHoraSalida().format(soloFecha);
|
||||
}
|
||||
|
||||
System.out.println(
|
||||
"Placa: " + placa + " | Tipo: " + tipo + " | Entrada: " + entrada + " | Salida: " + salida);
|
||||
}
|
||||
}
|
||||
|
||||
public void totalUtilServicio(GestorParqueo gestorParqueo, LocalDate fecha) {
|
||||
|
||||
ArrayList<TiqueteParqueo> tiquetes = gestorParqueo.getTiquetesDia(fecha);
|
||||
int totalPorHora = 0;
|
||||
int totalPorDia = 0;
|
||||
|
||||
for (TiqueteParqueo tiquete : tiquetes) {
|
||||
if (tiquete.getHoraSalida() == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (tiquete.getModalidad() == TiqueteParqueo.TipoServicio.POR_HORA) {
|
||||
totalPorHora += tiquete.getMontoTotal();
|
||||
} else {
|
||||
totalPorDia += tiquete.getMontoTotal();
|
||||
}
|
||||
}
|
||||
|
||||
String fechaFormateada = fecha.format(soloFecha);
|
||||
System.out.println("Total recaudado por servicio el día " + fechaFormateada + ":");
|
||||
System.out.println("Servicio por hora: CRC " + totalPorHora);
|
||||
System.out.println("Servicio por día: CRC " + totalPorDia);
|
||||
}
|
||||
|
||||
public void estadisticasBasicas(GestorParqueo gestorParqueo, LocalDate fecha) {
|
||||
ArrayList<TiqueteParqueo> tiquetes = gestorParqueo.getTiquetesDia(fecha);
|
||||
int vehiculosAtendidos = tiquetes.size();
|
||||
long minutosTotales = 0;
|
||||
|
||||
for (TiqueteParqueo tiquete : tiquetes) {
|
||||
if (tiquete.getHoraSalida() != null) {
|
||||
minutosTotales += Duration.between(tiquete.getHoraEntrada(), tiquete.getHoraSalida()).toMinutes();
|
||||
}
|
||||
}
|
||||
|
||||
double horasTotales = minutosTotales / 60.0;
|
||||
int capacidad = gestorParqueo.getCapacidadMaxima();
|
||||
int ocupadosActuales = capacidad - gestorParqueo.espaciosDisponibles();
|
||||
double ocupacionActual = (ocupadosActuales * 100.0) / capacidad;
|
||||
|
||||
String fechaFormateada = fecha.format(soloFecha);
|
||||
System.out.println("Estadísticas básicas del día " + fechaFormateada + ":");
|
||||
System.out.println("Sumatoria de horas de uso: " + String.format("%.2f", horasTotales));
|
||||
System.out.println("Cantidad de vehículos atendidos: " + vehiculosAtendidos);
|
||||
System.out.println("Porcentaje de ocupación actual: " + String.format("%.2f", ocupacionActual) + "%");
|
||||
}
|
||||
|
||||
private String tipoVehiculoTexto(int tipo) {
|
||||
if (tipo == 1) {
|
||||
return "Automóvil";
|
||||
}
|
||||
if (tipo == 2) {
|
||||
return "Motocicleta";
|
||||
}
|
||||
if (tipo == 3) {
|
||||
return "Camión";
|
||||
}
|
||||
return "Desconocido";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
public class TiqueteParqueo {
|
||||
|
||||
//orginalmente dos constantes, CODEX sugirió usar enum
|
||||
public enum TipoServicio {
|
||||
POR_HORA,
|
||||
POR_DIA
|
||||
}
|
||||
|
||||
private Vehiculo vehiculo;
|
||||
private LocalDateTime horaEntrada;
|
||||
private LocalDateTime horaSalida;
|
||||
private TipoServicio modalidad;
|
||||
private int montoTotal;
|
||||
|
||||
public TiqueteParqueo(Vehiculo vehiculo, LocalDateTime horaEntrada, TipoServicio modalidad) {
|
||||
this.vehiculo = vehiculo;
|
||||
this.horaEntrada = horaEntrada;
|
||||
this.modalidad = modalidad;
|
||||
this.horaSalida = null;
|
||||
this.montoTotal = 0;
|
||||
}
|
||||
|
||||
public Vehiculo getVehiculo() {
|
||||
return vehiculo;
|
||||
}
|
||||
|
||||
public void setVehiculo(Vehiculo vehiculo) {
|
||||
this.vehiculo = vehiculo;
|
||||
}
|
||||
|
||||
public LocalDateTime getHoraEntrada() {
|
||||
return horaEntrada;
|
||||
}
|
||||
|
||||
public void setHoraEntrada(LocalDateTime horaEntrada) {
|
||||
this.horaEntrada = horaEntrada;
|
||||
}
|
||||
|
||||
public LocalDateTime getHoraSalida() {
|
||||
return horaSalida;
|
||||
}
|
||||
|
||||
public void setHoraSalida(LocalDateTime horaSalida) {
|
||||
this.horaSalida = horaSalida;
|
||||
}
|
||||
|
||||
public TipoServicio getModalidad() {
|
||||
return modalidad;
|
||||
}
|
||||
|
||||
public void setModalidad(TipoServicio modalidad) {
|
||||
this.modalidad = modalidad;
|
||||
}
|
||||
|
||||
public int getMontoTotal() {
|
||||
return montoTotal;
|
||||
}
|
||||
|
||||
public void setMontoTotal(int montoTotal) {
|
||||
this.montoTotal = montoTotal;
|
||||
}
|
||||
}
|
||||
49
NetBeans_Proyecto_1_Parqueo/src/main/java/Vehiculo.java
Normal file
49
NetBeans_Proyecto_1_Parqueo/src/main/java/Vehiculo.java
Normal file
@@ -0,0 +1,49 @@
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class Vehiculo {
|
||||
|
||||
private static final int AUTOMOVIL = 1; // constante de clase
|
||||
private static final int MOTOCICLETA = 2;
|
||||
private static final int CAMION = 3;
|
||||
|
||||
private String placa;
|
||||
private int tipo;
|
||||
|
||||
// Constructor
|
||||
public Vehiculo(String placa, int tipo) {
|
||||
setPlaca(placa);
|
||||
setTipo(tipo);
|
||||
}
|
||||
|
||||
public String getPlaca() {
|
||||
return placa;
|
||||
}
|
||||
|
||||
public void setPlaca(String placa) {
|
||||
if (esPlacaValida(placa)) {
|
||||
this.placa = placa;
|
||||
} else {
|
||||
throw new IllegalArgumentException("La placa debe tener el formato ABC123.");
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean esPlacaValida(String placa) {
|
||||
return Pattern.matches("[A-Z]{3}\\d{3}", placa);
|
||||
}
|
||||
|
||||
public int getTipo() {
|
||||
return tipo;
|
||||
}
|
||||
|
||||
public void setTipo(int tipo) {
|
||||
if (tipo == AUTOMOVIL || tipo == MOTOCICLETA || tipo == CAMION) {
|
||||
this.tipo = tipo;
|
||||
} else {
|
||||
throw new IllegalArgumentException(
|
||||
"Nümero inválido. Digite 1 para automóvil, 2 para motocicleta o 3 para camión.");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user