Ejercicio de programación con TypeScript: Proyecto sistema de votación

Proyecto
Puntuación
3h 0m

Desarrolla un sistema de votación en TypeScript con gestión de candidatos, votantes y resultados usando interfaces y clases.

  1. Crea un nuevo proyecto TypeScript y configura el entorno con tsconfig.json adecuado para el proyecto. Define las interfaces principales ICandidato, IVotante y IVoto con sus propiedades correspondientes.

  2. Implementa la clase SistemaVotacion con propiedades para almacenar candidatos, votantes y votos. Incluye un constructor que inicialice estas propiedades como colecciones vacías.

  3. Desarrolla los métodos para gestionar candidatos: registrarCandidato(candidato: ICandidato): boolean y obtenerCandidatos(): ICandidato[]. El método de registro debe validar que no exista un candidato con el mismo ID.

  4. Implementa los métodos para gestionar votantes: registrarVotante(votante: IVotante): boolean, autenticarVotante(id: string, contraseña: string): boolean y obtenerVotantes(): IVotante[]. Incluye validaciones para evitar duplicados.

  5. Crea los métodos para la gestión de votos: emitirVoto(idVotante: string, idCandidato: string): boolean y obtenerVotos(): IVoto[]. El método de emisión debe verificar que el votante esté registrado, no haya votado ya y que el candidato exista.

  6. Desarrolla un método obtenerResultados(): Map<string, number> que devuelva un mapa con los IDs de los candidatos y la cantidad de votos recibidos. Implementa también un método obtenerGanador(): ICandidato | null que determine el candidato con más votos.

  7. Implementa métodos para obtener estadísticas: calcularParticipacion(): number (porcentaje de votantes que han emitido su voto) y obtenerEstadisticasPorCandidato(): Map<string, number> (porcentaje de votos por candidato).

  8. Crea una clase genérica Eleccion<T extends ICandidato> que permita especializar el sistema para diferentes tipos de elecciones (presidenciales, municipales, etc.) extendiendo la interfaz base de candidato.

  9. Desarrolla un archivo index.ts que demuestre el funcionamiento del sistema: registra varios candidatos y votantes, simula un proceso de votación y muestra los resultados y estadísticas.

  10. Implementa manejo de errores con excepciones personalizadas para los casos de uso incorrectos del sistema (votante ya registrado, candidato inexistente, etc.).

Empezar ejercicio de programación

Más ejercicios de programación con TypeScript

Evalúa tus conocimientos en TypeScript con más ejercicios de programación de tipo Test, Puzzle, Código y Proyecto con VSCode.

Tecnologías de este ejercicio de programación

Entornos de desarrollo para este ejercicio

Image

Visual Studio Code

Image

GitHub