Sistema de votación electrónica de escritorio desarrollado en Java con interfaz gráfica Swing y base de datos MySQL. Permite gestionar el proceso completo de votación presidencial: autenticación de autoridades de mesa, consulta del padrón, emisión de votos y cierre de mesa con estadísticas finales.
Este sistema fue desarrollado para simular las Elecciones Presidenciales 2023 de Argentina. Permite que el presidente de mesa inicie sesión, valide a los votantes contra el padrón electoral, y registre cada voto de forma segura en la base de datos. Incluye un sistema de registro de incidencias para auditoría.
| Candidato | Partido |
|---|---|
| Javier Milei | Libertad Avanza |
| Sergio Massa | Unión por la Patria |
| Patricia Bullrich | Juntos por el Cambio |
| Juan Schiaretti | Hacemos por Nuestro País |
| Myriam Bregman | Frente de Izquierda |
| Voto en blanco | — |
- 🔐 Autenticación de presidente de mesa — Login con usuario y contraseña, con control de acceso y registro de horario de apertura.
- 🕐 Control horario — El sistema permite votar únicamente en el horario establecido (08:00 a 18:00 hs).
- 📋 Consulta de padrón — Verificación del votante por DNI mostrando nombre y apellido.
- 🗳️ Emisión de voto — Selección de candidato mediante botones de opción, con validación de voto doble.
- 📊 Estadísticas de cierre — Al cerrar la mesa se muestran los votos totales por candidato, porcentajes y el ganador (o ballotage en caso de empate).
- 📝 Registro de incidencias — Auditoría automática de todos los eventos importantes (ingresos, votos, errores, cierres).
- 🌐 Verificación de conectividad — Chequeo de conexión a Internet antes de registrar el voto.
padron/
├── build.xml # Script de compilación Ant
├── manifest.mf # Manifiesto del JAR
├── src.zip # Backup de fuentes
├── nbproject/ # Configuración de NetBeans
│ ├── project.xml
│ ├── project.properties
│ ├── build-impl.xml
│ └── genfiles.properties
└── src/ # Código fuente
├── Clases/ # Capa de acceso a datos
│ ├── conectar.java # Clase de conexión MySQL (singleton)
│ └── conexion.java # Frame auxiliar de conexión
├── elecciones/ # Lógica principal del sistema
│ ├── Login.java # Pantalla de autenticación
│ ├── Login.form # Diseño visual del login
│ ├── Elecciones.java # Consulta e identificación del votante
│ ├── Elecciones.form # Diseño visual de la pantalla de padrón
│ ├── Candidatos.java # Pantalla de votación
│ ├── Candidatos.form # Diseño visual de la papeleta
│ └── Incidencia.java # Registro de eventos/auditoría
└── main/
└── main.java # Clase principal (entrada)
El sistema requiere una base de datos MySQL llamada padron en localhost:3308.
padron — Registro de votantes habilitados
CREATE TABLE padron (
DNI INT PRIMARY KEY,
NOMBRE VARCHAR(100),
APELLIDO VARCHAR(100),
ESTADO_VOTACION INT DEFAULT 0 -- 0: no votó, 1: ya votó
);presidente — Lista de candidatos
CREATE TABLE presidente (
ID INT PRIMARY KEY AUTO_INCREMENT,
NOMBRE VARCHAR(100),
PARTIDO VARCHAR(100),
LISTA VARCHAR(50)
);acceso_presidentemesa — Control de autoridades de mesa
CREATE TABLE acceso_presidentemesa (
USUARIO VARCHAR(50) PRIMARY KEY,
PASS VARCHAR(50),
ACCESO TINYINT(1) DEFAULT 0,
APERTURAREAL DATETIME,
HORACIERRE DATETIME,
CIERREMESA TINYINT(1) DEFAULT 0
);votacion — Registro de votos emitidos
CREATE TABLE votacion (
ID INT,
CANDIDATO VARCHAR(100),
FECHA_HORA DATETIME
);incidencia — Log de auditoría
CREATE TABLE incidencia (
ID INT AUTO_INCREMENT PRIMARY KEY,
USUARIO VARCHAR(50),
HORA DATETIME,
OBSERVACION VARCHAR(255)
);| Herramienta | Versión recomendada |
|---|---|
| Java JDK | 8 o superior |
| MySQL | 5.7 o superior |
| NetBeans IDE | 12+ (opcional) |
| MySQL Connector/J | 5.1.x |
git clone https://github.com/tu-usuario/padron.git
cd padron- Iniciar el servidor MySQL en el puerto 3308.
- Crear la base de datos y las tablas indicadas en la sección anterior.
- Insertar los candidatos en la tabla
presidente:
INSERT INTO presidente (NOMBRE, PARTIDO, LISTA) VALUES
('Javier Milei', 'Libertad Avanza', '1'),
('Sergio Massa', 'Unión por la Patria', '2'),
('Patricia Bullrich', 'Juntos por el Cambio', '3'),
('Juan Schiaretti', 'Hacemos por Nuestro País', '4'),
('Myriam Bregman', 'Frente de Izquierda', '5'),
('Voto en blanco', '', '6');- Crear al menos un usuario para presidente de mesa:
INSERT INTO acceso_presidentemesa (USUARIO, PASS) VALUES ('admin', '1234');Si necesitás cambiar los parámetros de conexión, editá el archivo src/Clases/conectar.java:
private static final String user = "root";
private static final String password = "";
private static final String url = "jdbc:mysql://localhost:3308/padron";Desde NetBeans:
- Abrir el proyecto (
File > Open Project). - Click en
Run Project(F6).
Desde línea de comandos (Ant):
ant runCompilar y generar JAR:
ant jarLogin (Presidente de Mesa)
│
▼
Autenticación
+ Control horario (08:00 - 18:00)
│
▼
Pantalla Elecciones
→ Ingresar DNI del votante
→ Consultar padrón
│
▼
Pantalla Candidatos
→ Seleccionar candidato
→ Registrar voto
│
▼
Vuelve a Elecciones (siguiente votante)
│
(Cierre de mesa)
▼
Estadísticas finales + Resultados
- Cada inicio de sesión queda registrado en la tabla
incidencia. - Se impide el doble voto verificando
ESTADO_VOTACIONen el padrón. - El ingreso del presidente de mesa se registra con
APERTURAREAL = NOW(). - Las credenciales incorrectas generan un registro de incidencia y cierran el sistema.
- La verificación de conectividad impide registrar votos sin conexión activa.
- El proyecto fue desarrollado con NetBeans IDE y utiliza Apache Ant como herramienta de build.
- Los archivos
.formcorresponden al diseño visual generado por el editor de formularios de NetBeans (GUI Builder). - La clase
conexion.javaes un frame auxiliar utilizado durante el desarrollo; la clase principal de conexión esconectar.java.
Florencia — Proyecto académico / Sistema de padrón electoral 2023