Skip to content

Commit 639fb04

Browse files
authored
Fix: Main.java
1 parent 18f6e4b commit 639fb04

File tree

1 file changed

+187
-1
lines changed

1 file changed

+187
-1
lines changed

src/Main.java

Lines changed: 187 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,193 @@
77

88
public class Main {
99
public static void main(String[] args) {
10+
List<Colmena> colmenas = new ArrayList<>();
11+
List<Apicultor> apicultores = new ArrayList<>();
1012
String dataFile = "apicola_data.dat";
13+
Map<String, Apicultor> asignaciones = new HashMap<>();
14+
try {
15+
Utilidades.cargarDatos(colmenas, apicultores, asignaciones, dataFile);
16+
printWithDelay("📂 Datos cargados exitosamente.", 50);
17+
} catch (Exception e) {
18+
printWithDelay("⚠️ No se encontraron datos previos o están corruptos. Iniciando desde cero.", 50);
19+
}
20+
while (true) {
21+
Utilidades.animacionAbejas();
22+
printWithDelay("""
23+
================================
24+
🍯 SISTEMA DE GESTIÓN APÍCOLA 🍯
25+
================================
26+
🐝 1. Registrar Colmena
27+
🧑‍🌾 2. Registrar Apicultor
28+
👑 3. Asignar Abeja Reina
29+
🔍 4. Realizar Inspección
30+
📜 5. Mostrar Información
31+
🔗 6. Asignar Apicultor a Colmena
32+
✏️ 7. Editar Información
33+
💾 8. Guardar y Salir
34+
""", 50);
35+
String opcion = Utilidades.getValidInput("Selecciona una opción: ", "[1-8]");
1136

37+
switch (opcion) {
38+
case "1" -> {
39+
String id = Utilidades.getValidInput("🐝 ID (formato CXXX): ", "C\\d{3}");
40+
if (colmenas.stream().anyMatch(c -> c.id.equals(id))) {
41+
printWithDelay("⚠️ El ID de colmena " + id + " ya está registrado. Usa otro ID.\n", 50);
42+
break;
43+
}
44+
String ubicacion = Utilidades.getValidInput("📍 Ubicación: ", ".+");
45+
String estadoSalud = Utilidades.getValidInput("❤️ Estado de Salud (Buena/Regular/Mala): ", "Buena|Regular|Mala");
46+
int cantidadAbejas = Integer.parseInt(Utilidades.getValidInput("🐝 Cantidad de abejas: ", "[1-9]\\d*"));
47+
double produccionMiel = Double.parseDouble(Utilidades.getValidInput("🍯 Producción de miel (kg): ", "^(?!0(\\.0+)?$)(\\d+(\\.\\d+)?|\\.\\d+)$"));
48+
49+
colmenas.add(new Colmena(id, ubicacion, estadoSalud, cantidadAbejas, produccionMiel));
50+
printWithDelay("\n✅ Colmena registrada.", 50);
51+
}
52+
case "2" -> {
53+
String nombre = Utilidades.getValidInput("🧑‍🌾 Nombre del Apicultor: ", ".+");
54+
String telefono = Utilidades.getValidInput("📞 Teléfono (formato 10 dígitos): ", "\\d{10}");
55+
56+
boolean telefonoExistente = apicultores.stream().anyMatch(apicultor -> apicultor.getTelefono().equals(telefono));
57+
58+
if (telefonoExistente) {
59+
printWithDelay("\n⚠️ El número de teléfono ya está registrado.", 50);
60+
} else {
61+
apicultores.add(new Apicultor(nombre, telefono));
62+
printWithDelay("\n✅ Apicultor registrado.", 50);
63+
}
64+
}
65+
case "3" -> {
66+
if (colmenas.isEmpty()) {
67+
printWithDelay("⚠️ No hay colmenas registradas. Registra una colmena primero.\n", 50);
68+
break;
69+
}
70+
String id = Utilidades.getValidInput("🐝 ID de la Colmena para asignar Abeja Reina: ", "C\\d{3}");
71+
Optional<Colmena> colmena = colmenas.stream().filter(c -> c.id.equals(id)).findFirst();
72+
if (colmena.isPresent()) {
73+
int edad = Integer.parseInt(Utilidades.getValidInput("🕰️ Edad de la Abeja Reina (en años, entre 1 y 3): ", "[1-3]"));
74+
String estadoSalud = Utilidades.getValidInput("❤️ Estado de Salud (Buena/Regular/Mala): ", "Buena|Regular|Mala");
75+
double productividad = Double.parseDouble(Utilidades.getValidInput("🍯 Productividad (kg de miel): ", "^(?!0(\\.0+)?$)(\\d+(\\.\\d+)?|\\.\\d+)$"));
76+
77+
colmena.get().agregarAbejaReina(new AbejaReina(edad, estadoSalud, productividad));
78+
printWithDelay("\n✅ Abeja Reina asignada.", 50);
79+
} else {
80+
printWithDelay("⚠️ Colmena no encontrada.\n", 50);
81+
}
82+
}
83+
case "4" -> {
84+
if (colmenas.isEmpty()) {
85+
printWithDelay("⚠️ No hay colmenas registradas. Registra una colmena primero.\n", 50);
86+
break;
87+
}
88+
realizarInspecciones(colmenas);
89+
printWithDelay("✅ Todas las inspecciones automáticas han finalizado.\n", 50);
90+
}
91+
case "5" -> {
92+
if (colmenas.isEmpty() && apicultores.isEmpty()) {
93+
printWithDelay("⚠️ No hay información registrada aún.\n", 50);
94+
break;
95+
}
96+
printWithDelay("\r\uD83D\uDCDF Buscando información...", 50);
97+
Utilidades.animacionBusqueda();
98+
99+
int numeroColmena = 1;
100+
for (Colmena colmena : colmenas) {
101+
colmena.mostrarInfo(numeroColmena, asignaciones);
102+
numeroColmena++;
103+
}
104+
}
105+
case "6" -> {
106+
String idColmena = Utilidades.getValidInput("🐝 ID de la Colmena para asignar Apicultor: ", "C\\d{3}");
107+
Optional<Colmena> colmena = colmenas.stream().filter(c -> c.id.equals(idColmena)).findFirst();
108+
if (colmena.isEmpty()) {
109+
printWithDelay("⚠️ Colmena no encontrada.\n", 50);
110+
break;
111+
}
112+
113+
if (apicultores.isEmpty()) {
114+
printWithDelay("⚠️ No hay apicultores registrados. Registra uno primero.\n", 50);
115+
break;
116+
}
117+
118+
printWithDelay("👥 Apicultores disponibles:\n", 50);
119+
for (int i = 0; i < apicultores.size(); i++) {
120+
System.out.printf("%d. %s (Tel: %s)\n", i + 1, apicultores.get(i).nombre, apicultores.get(i).telefono);
121+
}
122+
123+
int indiceApicultor = Integer.parseInt(Utilidades.getValidInput("Selecciona un apicultor (número): ", "\\d+")) - 1;
124+
if (indiceApicultor < 0 || indiceApicultor >= apicultores.size()) {
125+
printWithDelay("⚠️ Selección inválida.\n", 50);
126+
break;
127+
}
128+
129+
Apicultor apicultorSeleccionado = apicultores.get(indiceApicultor);
130+
asignaciones.put(idColmena, apicultorSeleccionado);
131+
printWithDelay("\n✅ Apicultor asignado a la colmena " + idColmena + ".", 50);
132+
}
133+
case "7" -> {
134+
if (colmenas.isEmpty() && apicultores.isEmpty()) {
135+
printWithDelay("⚠️ No hay datos registrados para editar.\n", 50);
136+
break;
137+
}
138+
printWithDelay("""
139+
\r📝 ¿Qué deseas editar?
140+
1. Información de una Colmena
141+
2. Información de un Apicultor
142+
""", 50);
143+
String opcionEditar = Utilidades.getValidInput("Selecciona una opción: ", "[1-2]");
144+
switch (opcionEditar) {
145+
case "1" -> {
146+
if (colmenas.isEmpty()) {
147+
printWithDelay("⚠️ No hay colmenas registradas. Registra una colmena primero.\n", 50);
148+
break;
149+
}
150+
String idColmena = Utilidades.getValidInput("🐝 ID de la Colmena a editar: ", "C\\d{3}");
151+
Optional<Colmena> colmena = colmenas.stream().filter(c -> c.id.equals(idColmena)).findFirst();
152+
if (colmena.isEmpty()) {
153+
printWithDelay("⚠️ Colmena no encontrada.\n", 50);
154+
} else {
155+
editarColmena(colmena.get());
156+
}
157+
}
158+
case "2" -> {
159+
String nombreApicultor = Utilidades.getValidInput("🧑‍🌾 Nombre del Apicultor a editar: ", ".+");
160+
List<Apicultor> apicultoresConNombre = apicultores.stream()
161+
.filter(a -> a.nombre.equals(nombreApicultor)).toList();
162+
163+
if (apicultoresConNombre.isEmpty()) {
164+
printWithDelay("⚠️ Apicultor no encontrado.\n", 50);
165+
} else {
166+
if (apicultoresConNombre.size() > 1) {
167+
printWithDelay("⚠️ Se encontraron varios apicultores con el nombre '" + nombreApicultor + "'.\n", 50);
168+
for (int i = 0; i < apicultoresConNombre.size(); i++) {
169+
Apicultor a = apicultoresConNombre.get(i);
170+
System.out.printf("[%d] %s (Tel: %s)\n", i + 1, a.nombre, a.telefono);
171+
}
172+
int numApicultor = Integer.parseInt(Utilidades.getValidInput("\nSelecciona el apicultor por número: ", "\\d+")) - 1;
173+
if (numApicultor >= 0 && numApicultor < apicultoresConNombre.size()) {
174+
editarApicultor(apicultoresConNombre.get(numApicultor), apicultores);
175+
} else {
176+
printWithDelay("⚠️ Opción no válida.\n", 50);
177+
}
178+
} else {
179+
editarApicultor(apicultoresConNombre.getFirst(), apicultores);
180+
}
181+
}
182+
}
183+
default -> printWithDelay("⚠️ Opción no válida. Volviendo al menú principal.\n", 50);
184+
}
185+
}
186+
case "8" -> {
187+
try {
188+
Utilidades.guardarDatos(colmenas, apicultores, asignaciones, dataFile);
189+
printWithDelay("✅ Datos guardados. ¡Hasta pronto!\n", 50);
190+
} catch (IOException e) {
191+
printWithDelay("⚠️ Error al guardar datos.\n", 50);
192+
}
193+
return;
194+
}
195+
default -> printWithDelay("⚠️ Opción no válida. Intenta nuevamente.\n", 50);
196+
}
197+
}
12198
}
13-
}
199+
}

0 commit comments

Comments
 (0)