77
88public 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 ("\n Selecciona 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