# Diccionario — Documentación del Proyecto
## Descripción General
Aplicación de escritorio en Java (Swing) para gestionar un diccionario
Español–Inglés, usuarios (estudiantes, docentes y administradores),
traducir palabras y frases, y consultar historial/estadísticas de
búsquedas. El almacenamiento es en archivos de texto planos
ubicados en `TXT/`.
## Estructura del Proyecto
```
src/main/java
├── GUI/ # Interfaces gráficas (Swing)
└── Traductor/ # Lógica de dominio y servicios
TXT/ # Almacenamiento en archivos de texto
```
### Paquete `Traductor`
- `[Link]`: Punto de entrada de la aplicación. Inicializa servicios y
abre la primera vista.
- `[Link]`: Proveedor/singleton de servicios de dominio
(diccionario, usuarios, historial).
- `[Link]` / `[Link]`: API e implementación para
gestionar palabras, buscar/contar y traducir.
- `[Link]` / `[Link]`: API e implementación
para CRUD de usuarios.
- `[Link]` / `[Link]`: API e
implementación para registrar y listar búsquedas (por usuario y
globales).
- `[Link]`, `[Link]` y subclases (`Estudiante`, `Docente`,
`Administrador`): Modelo de usuarios.
- `[Link]`: Modelo de palabra (español/inglés) con contador de
búsquedas y validación.
- `[Link]`: Modelo de cada búsqueda realizada.
### Paquete `GUI`
Ventanas principales (todas basadas en `JFrame` con Swing):
- `LoginPrincipal`: Acceso inicial para usuarios.
- `MenuEstudiante` / `MenuDocente`: Menús según rol.
- `BuscarPalabra`: Búsqueda y traducción de palabras puntuales.
- `TraducirFrase`: Traducción de frases completas manteniendo
puntuación/espacios.
- `Diccionario`: Gestión de palabras (agregar, eliminar, listar).
- `GestionDiccionario`: Variante de gestión de diccionario (según flujo
de UI).
- `RegistroUsuarios`: Alta de usuarios.
- `ListaUsuarios`: Edición, eliminación y listado de usuarios.
- `HistorialBusqueda`: Historial global de búsquedas.
- `EstadisticaEstudiante`: Estadísticas por estudiante (frecuencias,
más buscadas, etc.).
Todas las ventanas secundarias usan botón "Volver" y
`DISPOSE_ON_CLOSE` para no cerrar toda la app.
## Almacenamiento (carpeta `TXT/`)
- `[Link]`: líneas con formato `espanol;ingles;contador`.
- `[Link]`: líneas con formato
`nombreCompleto;tipoDocumento;numeroDocumento;tipoUsuario;con
trasena`.
- `[Link]`: registro de búsquedas con campos separados por
`;` y manejo de escape para evitar conflictos con separadores.
Los servicios cargan en memoria al iniciar y sobrescriben el archivo al
guardar cambios.
## Diseño y Decisiones Técnicas
- Uso de interfaces para desacoplar la lógica:
- `IDiccionario`, `IGestorUsuario`, `IRegistroBusquedas`, `IUsuario`.
- Algoritmos "sin librerías" estándar de colecciones avanzadas o
streams:
- Búsquedas lineales para encontrar/eliminar elementos.
- Selección manual del máximo para "palabra más buscada".
- Ordenamientos manuales en vistas de estadísticas ([Link]. burbuja).
- Traducción de frases sin expresiones regulares:
- Tokenización manual por puntos de código Unicode
(`[Link]`), preservando espacios, signos y números.
- Se aplica el patrón de mayúsculas del token origen a la traducción
(mayúsculas, capitalización).
- Validación de entrada:
- `Palabra` restringe a letras para español/inglés; se rechazan
números u otros símbolos.
- La UI captura excepciones de validación y muestra mensajes claros
al usuario.
- Concurrencia:
- La aplicación se ejecuta en el hilo de eventos de Swing; no se
requiere sincronización explícita para las operaciones típicas de UI.
## Flujo de Uso
1. Ejecutar `Traductor/[Link]`.
2. Iniciar sesión (según configuración de usuarios en `[Link]`).
3. Operaciones principales:
- Gestión de diccionario: agregar/eliminar palabras, listar.
- Búsqueda/Traducción: palabras y frases.
- Historial: ver búsquedas globales.
- Estadísticas: seleccionar estudiante y ver sus métricas.
- Gestión de usuarios: alta, edición, eliminación.
## Ejecución
- Desde un IDE (NetBeans/VS Code): ejecutar la clase
`[Link]`.
- Estructura de carpetas ya preparada; los archivos en `TXT/` se
crean/actualizan automáticamente al usar la app.
## Notas y Buenas Prácticas
- Evita cerrar la ventana principal de la aplicación si hay ventanas
hijas abiertas; usa los botones "Volver".
- Al editar archivos `TXT/`, respeta los separadores `;` y el esquema
de campos; la app asume ese formato.
- Para extender funcionalidades (por ejemplo, añadir nuevos roles o
métricas):
- Define primero la interfaz correspondiente y luego su
implementación.
- Mantén la lógica de negocio en `Traductor/` y la UI en `GUI/`.
## Mantenimiento / Extensión
- Nuevos formatos de almacenamiento: encapsular la
serialización/deserialización en métodos de `guardar()`/`cargar()` de
cada servicio.
- Nuevas vistas: seguir el patrón de Swing existente (GroupLayout o
layouts simples) y reutilizar `Servicios`.
- Más idiomas: extender `Palabra` y `Diccionario` para soportar pares
adicionales y ajustar la tokenización si fuera necesario.