Sistema Escolar Integral
Aplicación de escritorio para la gestión académica integral de una escuela: alumnos, calificaciones, asistencias, pagos y reportes en un solo sistema.
- Java
- Swing
- MySQL
- Maven
El caso de estudio
- Problema
- La información académica suele vivir dispersa en hojas de cálculo separadas, sin validación, sin control de acceso y sin una visión agregada.
- Solución
- Java 21 y Swing sobre una arquitectura en capas estricta (UI → Servicios → DAO → JDBC → MySQL), con pool de conexiones y capa de datos propios, seguridad por rol con BCrypt y una base normalizada a 3FN.
- Resultado
- Cada módulo ofrece CRUD, filtros y paginación en servidor, exportación a PDF y CSV y un dashboard de indicadores; documentado a fondo y con capturas.
Proceso
Proceso de desarrollo
El razonamiento detrás de las decisiones técnicas: por qué se eligió cada tecnología, qué retos surgieron y cómo se resolvieron.
- 01
Arquitectura en capas estricta
Organicé el sistema en capas con dependencias hacia adentro: UI → Servicios → DAO → JDBC → MySQL. Cada capa solo conoce a la de abajo, así que la lógica de negocio no sabe de Swing ni de SQL. La ventaja es concreta: puedo cambiar la interfaz o la base de datos sin reescribir las reglas, y cada capa se prueba de forma aislada.
- 02
Seguridad y datos confiables
Las contraseñas se guardan con BCrypt y el acceso se controla por rol, porque un sistema escolar maneja datos sensibles. La base está normalizada a 3FN para evitar inconsistencias, y escribí un pool de conexiones propio para no abrir una conexión por consulta —un detalle que mantiene la app fluida bajo uso real.
- 03
Rendimiento con muchos registros
El reto de una app de gestión aparece cuando las tablas crecen. En lugar de traer todo a memoria y filtrar en el cliente, moví filtros y paginación al servidor (SQL), de modo que la interfaz siempre trabaja con páginas pequeñas. Sumé exportación a PDF y CSV y un dashboard de indicadores para convertir los datos en decisiones.
Repositorios
Commits
- Cambios
c89b130Eduardohace 2 semanas