0% encontró este documento útil (1 voto)
412 vistas134 páginas

Base de Datos

Este documento presenta el diseño e implementación de un sistema de base de datos para gestionar la información del proceso de voto electrónico "i-vote". Describe los requerimientos funcionales y no funcionales, el modelo conceptual y lógico de la base de datos, así como la implementación de procedimientos almacenados, disparadores y consultas SQL. Finalmente, incluye la documentación necesaria para la administración y uso de la aplicación y base de datos por parte de los usuarios finales.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (1 voto)
412 vistas134 páginas

Base de Datos

Este documento presenta el diseño e implementación de un sistema de base de datos para gestionar la información del proceso de voto electrónico "i-vote". Describe los requerimientos funcionales y no funcionales, el modelo conceptual y lógico de la base de datos, así como la implementación de procedimientos almacenados, disparadores y consultas SQL. Finalmente, incluye la documentación necesaria para la administración y uso de la aplicación y base de datos por parte de los usuarios finales.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

“Análisis, diseño e implementación de un sistema de bases de datos para la gestión de la

información del proceso de voto electrónico “i-vote”

AUTORES:

Claudia Patricia Rodríguez Rocha

Ana María Camelo Martínez

Julieth Katherine Ospina Osorio

Institución universitaria Politécnico Grancolombiano

Facultad de ingeniería y ciencias básicas

Especialización en gerencia de proyectos en inteligencia de negocios

Bogotá, D.C. 2019


Contenido

1. Planteamiento del problema ............................................................................................ 6


Justificación ............................................................................................................................ 8
2. Objetivos ....................................................................................................................... 10
2.1. General....................................................................................................................... 10
2.2. Específicos ................................................................................................................. 10
3. Marco Teórico ............................................................................................................... 11
4. Estructura de descomposición del trabajo (WBS)......................................................... 14
Anexo 1. Formato Estructura de descomposición del trabajo (WBS) .............................. 14
5. Cronograma de actividades ........................................................................................... 19
Anexo 2. Cronograma de actividades ............................................................................... 20
6. Sistema propuesto ......................................................................................................... 22
6.1. Panorama (Universo del Discurso) ........................................................................ 22
6.2. Requerimientos funcionales ................................................................................... 23
6.3. Requerimientos no funcionales .............................................................................. 25
Anexo 3. Formato de Requerimientos .............................................................................. 26
7. Modelos del sistema ...................................................................................................... 28
7.1. Diseño conceptual de la base de datos ................................................................... 28
7.2. Normalización de la base de datos ......................................................................... 28
7.3. Diseño lógico de la base de datos .......................................................................... 29
8. Cuestiones de control de integridad referencial ............................................................ 30
9. Pruebas con álgebra relacional ...................................................................................... 31
10. Pruebas con cálculo relacional .................................................................................. 33
11. Diccionario de datos .................................................................................................. 34
Anexo 4. Diccionario de datos. ......................................................................................... 34
12. Modelo del sistema .................................................................................................... 38
a. Diseño físico de la base de datos ............................................................................... 38
13. Pruebas ACID ............................................................................................................ 38
14. Documentación de la implementación y ajustes al sistema de bases de datos .......... 38
15. Consultas SQL y reportes según requerimientos del sistema .................................... 38
16. Implementación de cursores ...................................................................................... 41
17. Implementación de procedimientos almacenados (stored procedures) ..................... 42
18. Implementación de disparadores (Triggers) .............................................................. 54
19. Cuestiones de seguridad de la base de datos ............................................................. 57
[Link]ón del proceso de refinamiento y pruebas de performance de la base de
datos. 59
21. Diseño e Implementación del programa de Inteligencia de Negocios,
implementación y llenado de la bodega de datos, presentación y análisis de la información a
través de cubos OLAP. ......................................................................................................... 60
22. Código fuente de la aplicación, debidamente documentado. .................................... 68
23. Manual de administración y usuario final de la aplicación y la base de datos. ....... 112
23.1 Manual instalación Aplicativo de votación electrónica .............................................. 112
23.2. Manual Usuario aplicación web votación electrónica ............................................... 120
24. Descripción de los requerimientos mínimos en hardware y software necesarios para
el buen funcionamiento de la aplicación y la base de datos. .............................................. 130
25. Documentación de la calidad de la experiencia....................................................... 131
26. Bibliografía .............................................................................................................. 133
Tabla de figuras

Figura 1.-Estructura de descomposición del trabajo (WBS) ............................................... 14


Figura 2.-Cronograma de actividades ................................................................................... 19
Figura 3.-Modelo conceptual Relacionado con el proceso de voto electrónico ................... 22
Figura 4.-Proceso de inscripción .......................................................................................... 23
Figura 5.-Proceso de votación .............................................................................................. 23
Figura 6.-Diseño conceptual bases de datos ......................................................................... 28
Figura 7.-Diseño lógico bases de datos ................................................................................ 29
Figura 8 Validación del personal .......................................................................................... 39
Figura 9 Validación personal que voto ................................................................................. 40
Figura 10 Validación cantidad de votos obtenidos............................................................... 41
Figura 11 Cursores ............................................................................................................... 42
Figura 12 Creación de procedimientos almacenados en MySQL ........................................ 43
Figura 13 Procedimiento almacenado .................................................................................. 44
Figura 14 Consulta procedimientos ...................................................................................... 45
Figura 15 Ejecutar procedimiento ........................................................................................ 45
Figura 16 Confirmación del proceso .................................................................................... 46
Figura 17 Creación de personas ........................................................................................... 46
Figura 18 Procedimiento almacenado .................................................................................. 47
Figura 19 Nuevo procedimiento ........................................................................................... 47
Figura 20 Ejecución del proceso .......................................................................................... 48
Figura 21 Visualización de información .............................................................................. 48
Figura 22 Visualización de procesos electorales .................................................................. 49
Figura 23 Ejecución de procedimientos ............................................................................... 50
Figura 24 Ingresar el valor por defecto ................................................................................ 50
Figura 25 Procesos electorales creados ................................................................................ 51
Figura 26 Crear nuevo procedimiento .................................................................................. 52
Figura 27 Ejecución .............................................................................................................. 52
Figura 28 Número del proceso electoral............................................................................... 53
Figura 29 Candidatos inscritos al proceso ............................................................................ 53
Figura 30 Implementación de Triggers ................................................................................ 55
Figura 31 Creación de Triggers ............................................................................................ 55
Figura 32 Parámetros y consultas SQL a ejecutar por el disparador .................................... 56
Lista de Anexos

Anexo 1. Formato Estructura de descomposición del trabajo (WBS) .............................. 14


Anexo 2. Cronograma de actividades ............................................................................... 20
Anexo 3. Formato de Requerimientos .............................................................................. 26
Anexo 4. Diccionario de datos. ......................................................................................... 34
1. Planteamiento del problema

La compañía CERESCOS SAS, es una compañía que promueve el cuidado y la

belleza de manos y pies de los clientes, con productos y servicios innovadores de excelente

calidad, soportados en un equipo humano competente, comprometido y con alta vocación

de servicio, para el ejercicio de buenas prácticas de producción y comercialización

rentables. Como estrategia organizacional busca ser la empresa líder en el mercado

colombiano de productos y servicios de la categoría de cuidado y belleza de manos y pies,

marcando tendencia, innovación y moda, con operación propia en mercados

internacionales. CERESCOS SAS es una empresa que cuenta con más de 300 empleados

distribuidos en la sede administrativa y puntos de venta en Bogotá y varias sucursales

ubicadas en diferentes zonas del país.

La compañía dentro de sus procesos organizacionales tiene establecidos comités de

convivencia laboral, seguridad y salud en el trabajo y comité de la mujer, estos comités

buscan hacer seguimiento al cumplimiento de las recomendaciones dadas por el Comité de

Convivencia a las dependencias de gestión del recurso humano y salud ocupacional de las

empresas e instituciones públicas y privadas. Estos comités funcionan con dos personas

encargadas del proceso, un presidente y un delegado quien es el reemplazo en caso de que

el presidente esté ausente de la compañía; cada comité tiene su respectivo presidente y

delegado, estas personas son elegidas por el voto de los colaboradores de la compañía

quienes son los encargados de elegir a los representantes, es decir, se presenta convocatoria

para la elección de los representantes de cada comité.


El área de talento humano es la encargada de comunicar a través del correo

electrónico interno, a los empleados de la compañía sobre la convocatoria vigente, donde se

informa que se encuentran abiertas las inscripciones para participar en la elección de los

representantes de cada comité, los interesados deben diligenciar el formulario de

inscripción y entregarlo al área de talento humano, en el plazo determinado por la

compañía.

Una vez cumplido el plazo de inscripción se validan las personas interesas para ser

representantes de cada comité, se diseñan e imprimen tarjetones que son entregados a cada

colaborar de la empresa para que vote según sus preferencias por los representantes de cada

comité para depositar su voto en una urna, la empresa también cuenta con sucursales en

varias partes del país y estos colaboradores también participan en el proceso, para ello el

director de cada regional es el encargado de distribuir los tarjetones y hacer llegar la urna

con los votos a la sede principal de la empresa en la Ciudad de Bogotá D.C.

Finalmente, el área de talento humano en orientación de su director y coordinador

realiza el conteo manual pertinente y comunican a todos los colaboradores de la empresa

quienes fueron las personas elegidas.


Justificación

Dentro de las organizaciones y debido a la complejidad de las actividades que se

realizan en ellas, se han creado distintos grupos de trabajo, los cuales se clasifican de

distintas maneras, pero siempre persiguen un mismo fin: tratar de tomar la mejor decisión

para beneficio de la organización.

Un comité es un conjunto de personas encargado como grupo de un asunto y es uno

de los recursos más comunes de las organizaciones. Aunque se les ha criticado

enormemente, cuando las reuniones de comités son conducidas debidamente y sirven para

el propósito indicado, pueden resultar en mayor motivación, más atinada solución de

problemas y mayor producción. (Acuña, 2018).

Los comités como los equipos al ser “grupos” pasan por distintas etapas en su

formación y ya cuando se encuentran bien definidos tienen distintas funciones. Los grupos

de trabajo en general tienen sus ventajas y desventajas, pero creemos que el éxito de estos

depende mucho de la empresa y de qué tan buena sea su organización, que aterricen en

reuniones productivas y no sea solamente pérdida de tiempo y de recursos para la empresa.

El momento de realizar un escrutinio manual de votos es crucial para la elección de

votos en un comité organizacional. El sistema de votos de la CERESCOS SAS está

reglamentado para evitar el fraude electoral. La organización cuenta con un con sistema de

escrutinio manual el cual se realiza básicamente en tres etapas sucesivas: conteo voto por

voto de cada urna en Las sucursales, escrutinio provisorio de los votos, escrutinio

definitivo.
Al realizar el conteo de votos de todas las sucursales de la empresa, este es un tema

tedioso para las personas encargadas del proceso, por lo tanto, es importante la

implementación de un sistema que permita agilidad al momento de realizar los comités de

la compañía, una opción para estos eventos es el sistema de voto electrónico, que tiene

como objetivo facilitar al elector el ejercicio del voto, eliminando las barreras iniciales que

puedan tener algunos votantes ante las nuevas tecnologías. Se trata de votación en línea con

la que el votante visualiza y elige sus opciones de voto.

Para el proyecto se usará el sistema de votación en línea ya que cumple con las

necesidades de la empresa y principalmente permite a los votantes ejercer el voto desde

cualquier parte del país con una maquina conectada a internet reduciendo la logística que

conlleva un proceso electoral y ahorrando recursos que esta conlleva para la empresa. Este

sistema de votación cubrir los requisitos funcionales en el proceso de votación, así como

los servicios de seguridad necesarios para protegerse de los posibles ataques provenientes

de la red.
2. Objetivos

[Link]

Diseñar un sistema de votación electrónica a través de Internet que permita

gestionar el proceso y la información de las elecciones de representantes y directivos de la

empresa Cerescos SAS.

[Link]íficos

Establecer un sistema de votación electrónica ágil que permita llevar a cabo

elecciones controladas para el área de talento humano de la empresa Cerescos SAS.

Utilizar un sistema de votación electrónica que otorgue la totalización de votos

para contribuir a mejorar el proceso de elecciones en la empresa Cerescos SAS.

Generar confianza en los colaboradores de la empresa mediante el proceso de

votación electrónica eliminando el margen de error humano, generando un proceso

auditable y seguro.
3. Marco Teórico

Tipos de voto electrónico

En el documento del Instituto Internacional para la Democracia y la Asistencia

Electoral (IDEA) “Una introducción al voto electrónico: Consideraciones esenciales”,

IDEA,2011, se plantea que la mayoría de los sistemas de voto electrónico existentes se

agrupan en:

• Registro Electrónico Directo (RED), IDEA,2011. los votantes emiten su voto

directamente desde un aparato electrónico que puede disponer de pantalla táctil, botones

físicos, etc. La información sobre la votación se almacena en el disco duro del aparato. Al

final de la votación, la información de todos los puntos de votación se envía a un ordenador

central, que se encarga de realizar el escrutinio. Existen sistemas de votos RED con y sin

Comprobante de Papel Verificado por el Votante.

• Reconocimiento Óptico de Marcas (OMR, por sus siglas en inglés), IDEA, 2011,

funcionan a partir de lectores ópticos que reconocen la opción marcada por el votante en

una papeleta especial.

• Impresoras de papeletas electrónicas (EBP, por sus siglas en inglés), IDEA,2011.

Estas máquinas producen un papel para ser leído por la máquina o un comprobante

electrónico que contiene la opción escogida por el elector. Este comprobante se introduce

en otro lector óptico de papeletas, el cual hace el conteo de forma automática.

• Sistemas de votación en línea, IDEA,2011. Los votos son transmitidos por internet a un

servidor central para su conteo. Pueden ser emitidos ya sea desde computadoras públicas,
desde kioscos ubicados en las mesas de votación, o desde cualquiera computadora con

conexión a internet accesible para los votantes.

Para el proyecto se usará el sistema de votación en línea ya que cumple con las

necesidades de la empresa y principalmente permite a los votantes ejercer el voto desde

cualquier parte del país con una maquina conectada a internet reduciendo la logística que

conlleva un proceso electoral y ahorrando recursos que esta conlleva para la empresa. Este

sistema de votación cubrir los requisitos funcionales en el proceso de votación, así como

los servicios de seguridad necesarios para protegerse de los posibles ataques provenientes

de la red.

De acuerdo con (Cranor,1997) un sistema de votación electrónico debe cubrir los

siguientes criterios:

 Autenticación: sólo el votante autorizado puede emitir su voto.

 Unicidad: ningún votante debe votar más de una vez.

 Exactitud: el sistema debe registrar y procesar los votos correctamente.

 Integridad: los votos no deben de ser modificados, olvidados, borrados o no

detectados.

La metodología usada para el desarrollo del sistema desde el punto de vista general del

ciclo de vida de desarrollo de software tiene las siguientes etapas, (Berzal,2015):

 Planificación: En esta fase se hace un análisis y verificación de los requerimientos

que el cliente necesita para la elaboración del sistema. Se debe empezar por conocer

la organización y los procesos que involucra el sistema que se desea automatizar.


 Diseño: En esta fase se toman los requisitos definidos y se crea un diseño técnico

del nuevo sistema.

 Programación y Pruebas: En esta fase se crea el software y la arquitectura física

necesaria para albergar la base de datos del sistema. Una vez terminada la

construcción de todos los componentes del sistema se realizan las pruebas, durante

las cuales los responsables de la calidad se aseguran de que los requisitos de

negocio se cumplen, usando un esquema detallado de testeo.

 Documentación: En esta fase se documenta toda la información necesaria para que

los usuarios y los administradores del sistema puedan usar el software de forma

correcta.

 Implementación: Se realiza entrega a los usuarios finales el sistema terminado, de

esta forma pueden empezar a utilizarlo. Esta fase incluye también la formación

necesaria para que los usuarios aprendan el uso del sistema.

 Mantenimiento: En esta fase se monitorea el funcionamiento del nuevo software ya

en producción validando que cumple los requisitos de negocio solicitados antes del

diseño. Se ofrece un servicio de mantenimiento y de soporte a los usuarios para

garantizar que el sistema funcione correctamente.

Estas etapas permiten establecer una serie de pasos mediante las cuales se procede al

desarrollo del software.


4. Estructura de descomposición del trabajo (WBS)

Un WBS define el trabajo del proyecto en términos de los componentes (físico o

funcional) que componen el entregable, sirve para asegurar que el proyecto incluye todo el

trabajo

requerido para completarlo exitosamente. El WBS del proyecto está orientado a las fases y

acciones, necesarias para obtener los entregables.

Figura 1.-Estructura de descomposición del trabajo (WBS)

Las especificaciones de esta descomposición se encuentran en el Anexo 1.

Anexo 1. Formato Estructura de descomposición del trabajo (WBS)

NOMBRE DEL PROYECTO SISTEMA i-VOTE SIGLAS DEL PROYECTO

Código del paquete de trabajo (PDT) 1. Planificación

1.1. Descripción del Problema

1.2. Búsqueda y análisis de


Documentación
Objetivo del Paquete de Trabajo: Analizar cuál es el proceso de votación que desarrolla la empresa en la
actualidad y cuáles son los inconvenientes que se están generando.

Realizar una búsqueda de información que permite determinar el contexto de la


problemática a tratar.

Descripción del Paquete de Trabajo:

Descripción del Trabajo a Realizar  Búsqueda y Análisis de Documentación


(actividades):
 Descripción Planteamiento del Problema

 Definición de Objetivos

 Identificación de tareas

 Elaboración de Documento de Alcance del proyecto

Asignación de responsabilidades:  Director de recursos humanos


 Director del proyecto

Fechas programadas: 09/01/2019 - 19/01/2019

Criterios de aceptación: Documento con el marco de teórico del proyecto

Documento con la especificación clara del problema, los objetivos y las


actividades a realizar.

Documento con el alcance del proyecto.

Supuestos:

Riesgos: El director del talento humano es el encargado del proceso, si el no es el ejecutor


de todo el proceso el documento de alcance puede quedar incompleto.
Recursos Asignados y Costos:

Dependencias: Recursos humanos y director del proyecto.

NOMBRE DEL PROYECTO SISTEMA i-VOTE

Código del paquete de trabajo (PDT) 2. Análisis y Diseño

2.1. Requisitos funcionales

2.2. Requisitos no funcionales

2.3. Modelos del Sistema de BD

2.4. Instalación y configuración


SGBD
Objetivo del Paquete de Trabajo: Diseñar el documento con los requerimientos del sistema

Realizar los modelos del sistema de base de datos

Instalar y configurar el SGBD

Descripción del Paquete de Trabajo:

Descripción del Trabajo a Realizar  Panorama


(actividades):
 Requisitos funcionales

 Requisitos no funcionales

 Requisitos no funcionales

 Normalización de la base de datos

 Diseño lógico de la base de datos

 Diseño físico

 Diccionario de datos

 Instalación y configuración SGBD

Asignación de responsabilidades:  Director de tecnología


 Director del proyecto
 Programador

Fechas programadas: 19/01/2019 - 04/02/2019

Criterios de aceptación: Entrega de documento con los requisitos del sistema

Entrega del diseño físico de la base de datos

Servidor con Instalación y configuración SGBD

Supuestos:

Riesgos:

Recursos Asignados y Costos: Servidor para instalación SGBD


Sistema gestor de base de datos SQL SERVER

Dependencias:  Director de tecnología

NOMBRE DEL PROYECTO SISTEMA i-VOTE SIGLAS DEL PROYECTO

Código del paquete de trabajo (PDT) 3. Programación y Pruebas

3.1. Creación de la BD
3.2. Diseño de cursores,
disparadores, procedimientos
almacenados.

3.3. Seguridad de la BD

3.4. Programa de BI

Objetivo del Paquete de Trabajo: Crear la base de datos con sus respectivos objetos de bases de datos
necesarios para que el sistema cumpla con los requerimientos establecidos.

Diseñar e implementar un programa de inteligencia de negocios en donde se


pueda visualizar algunos reportes.

Descripción del Paquete de Trabajo:

Descripción del Trabajo a Realizar  Control de integridad referencial


(actividades):
 Diseño y e implementación de script de creación de base de datos y
tablas

 Consultas SQL y reportes según requerimientos del sistema

 Implementación de cursores

 Implementación de procedimientos almacenados

 Implementación de disparadores

 Cuestiones de seguridad de la base de datos

 Documentación del proceso de refinamiento y pruebas de


performance de la base de datos

 Diseño e Implementación del programa de Inteligencia de Negocios

o Implementación y llenado de la bodega de datos

o Presentación y análisis de la información a través de cubos


OLAP

o Documentación código fuente de la aplicación

 Pruebas con álgebra relacional

 Pruebas con cálculo relacional

 Pruebas ACID

Asignación de responsabilidades:  Director de proyecto


 Programador

Fechas programadas: 05/02/2019 - 24/02/2019

Criterios de aceptación: Entrega de la base de datos instalada y configurada

Entrega de reportes de inteligencia de negocios


Supuestos:

Riesgos:

Recursos Asignados y Costos:  Herramienta para la creación de reportes


 Sistema gestor de base de datos SQL SERVER

Dependencias:

NOMBRE DEL PROYECTO SISTEMA i-VOTE

Código del paquete de trabajo (PDT) 4. Documentación

4.1. manual de administración y


usuario final

4.2. Diseño manual de Descripción


de los requerimientos mínimos en
hardware y software.

4.3. Documentación de la calidad de


la experiencia.

Objetivo del Paquete de Trabajo: Diseñar de la documentación del proyecto

Descripción del Paquete de Trabajo:

Descripción del Trabajo a Realizar  manual de administración y usuario final


(actividades):
 Diseño manual de Descripción de los requerimientos mínimos en
hardware y software.

 Documentación de la calidad de la experiencia.

Asignación de responsabilidades: Programador

Fechas programadas: Esta documentación se va construyendo a medida que termina cada fase del
ciclo de vida del software, por lo tanto, los tiempos ya están incluidos en los
paquetes anteriores.

Criterios de aceptación: Entrega de manuales de administración, usuario y técnico.

Supuestos:
Riesgos:

Recursos Asignados y Costos: Programador

Dependencias:

5. Cronograma de actividades

Este cronograma se puede consultar en el Anexo 2.

Figura 2.-Cronograma de actividades


Anexo 2. Cronograma de actividades

Cronograma Proyecto i-vote CERESCOS SAS COMIENZO FIN

1. Inicio del
Proyecto
1.1. Búsqueda y Análisis de Documentación 9/01/2019 11/01/2019
2. Planificación del Proyecto
2.1. Descripción Planteamiento del Problema 11/01/2019 13/01/2019
2.2. Descripción de la Justificación 13/01/2019 13/01/2019
2.3. Definición de Objetivos 14/01/2019 14/01/2019
2.4. Identificación de tareas 15/01/2019 15/01/2019
2.5. Estructura de descomposición del trabajo (WBS) 16/01/2019 18/01/2019
2.6. Elaboración Documento 18/01/2019 19/01/2019
3. Análisis y Diseño
3.1. Análisis
3.1.1. Panorama 19/01/2019 20/01/2019
3.1.2. Requisitos funcionales 20/01/2019 20/01/2019
3.1.3. Requisitos no funcionales 21/01/2019 22/01/2019
3.2. Diseño Modelos del sistema
3.2.1. Diseño conceptual de la base de datos 22/01/2019 23/01/2019
3.2.2. Normalización de la base de datos 23/01/2019 25/01/2019
3.2.3. Diseño lógico de la base de datos 25/01/2019 26/01/2019
3.2.4. Diseño fisico 26/01/2019 28/01/2019
3.2.5. Diccionario de datos 28/01/2019 29/01/2019
4.3. Instalación y configuración SGBD 29/01/2019 31/01/2019
4.4. Elaboración Documento 31/01/2019 4/02/2019
4. Desarrollo e implementación
4.1. Cuestiones de control de integridad referencial 5/02/2019 6/02/2019
4.2. Diseño y e implementación de script de creación de base de datos y tablas 7/02/2019 9/02/2019
4.3. Elaboración Documento de implementación 9/02/2019 9/02/2019
4.4. Consultas SQL y reportes según requerimientos del sistema 10/02/2019 10/02/2019
4.5. Implementación de cursores 10/02/2019 10/02/2019
4.6. Implementación de procedimientos almacenados 11/02/2019 11/02/2019
4.7. Implementación de disparadores 11/02/2019 11/02/2019
4.8. Cuestiones de seguridad de la base de datos 12/02/2019 12/02/2019
4.9. Documentación del proceso de refinamiento y pruebas de performance de la base de datos 13/02/2019 15/02/2019
4.10. Diseño e Implementación del programa de Inteligencia de Negocios 15/02/2019 17/02/2019
4.10.1. Implementación y llenado de la bodega de datos 17/02/2019 18/02/2019
4.10.2. Presentación y análisis de la información a través de cubos OLAP 18/02/2019 19/02/2019
4.10.3. Documentación código fuente de la aplicación 19/02/2019 20/02/2019
4.11. Diseño de manual de administración y usuario final de la aplicación y la base de datos 21/02/2019 22/02/2019
4.12. Diseño manual de Descripción de los requerimientos mínimos en hardware y software 22/02/2019 22/02/2019
4.13. Documentación de la calidad de la experiencia 23/02/2019 24/02/2019
5. Pruebas
5.1. Pruebas con álgebra relacional 24/02/2019 24/02/2019
5.2. Pruebas con cálculo relacional 24/02/2019 25/02/2019
5.3. Pruebas ACID 25/02/2019 25/02/2019
6. Sistema propuesto

[Link] (Universo del Discurso)

Para determinar cómo funciona el diseño e implementación de un sistema de bases

de datos para la gestión de la información del proceso de voto electrónico “i-vote” se deben

identificar de manera implícita los elementos que conforman la base de datos: tablas,

campos, tipo de datos, clave primaria y registros.

Para el desarrollo se identifica las siguientes características dentro del proceso de

voto en la compañía:

 Administrador

 Usuarios

 Categorías de comité

 Votación

Figura 3.-Modelo conceptual Relacionado con el proceso de voto electrónico


[Link] funcionales

Para determinar los actores y actividades realizadas por la organización para la

ejecución de elecciones se realizó un proceso de valoración del estado actual mediante el

proceso de diseño de casos de usos, para poder apreciar lo que se necesita, como se necesita

y quienes interactuarían con la herramienta a desarrollar.

Figura 4.-Proceso de inscripción

Figura 5.-Proceso de votación


En el caso de uso actual se puede observar que el proceso que realiza la empresa es

completamente manual, no hay soporte de los votantes, ni controles que permitan asegurar

la calidad del proceso. Basado en el estado actual la organización determina el

cumplimiento de los siguientes requisitos para sistema de votación electrónico. El formato

para requerimientos se podrá consultar en el Anexo 3.

 Requisito 1 Registro.

o El sistema deberá permitir registrar usuarios, cada usuario se caracteriza por

tener un nombre de usuario, un número de identificación, el género, fecha de

nacimiento y una contraseña para acceder al sistema, que será entregada a

cada usuario en un documento secreto vía correo certificado.

 Requisito 2 Elección.

o El sistema debe permitir la ejecución de varios procesos electorales al

mismo tiempo los cuales se caracterizan por tener una fecha de inicio y de

fin para realizar la elección, así como, la hora de inicio y de terminación de

la votación.

 Requisito 3 Tarjetones.

o El sistema deberá permitir generar la lista de los candidatos (que se

caracterizan por tener un número de identificación, nombre completo,

imagen, género, fecha de nacimiento y número de la lista de candidatos),

 Requisito 4 Votaciones.
o El sistema deberá mostrar las listas electorales, una vez que el usuario sea

validado.

o El sistema deberá permitirle al votante que realice su elección entre los

candidatos presentados.

o El sistema deberá permitir al elector la cancelación del voto.

o El sistema deberá permitir al elector la confirmación del voto almacenándolo

luego.

 Requisito 5 Contabilización.

o El sistema deberá contabilizar los votos almacenados y los votos cancelados.

o El sistema debe permitir conocer el ganador de cada elección.

o El sistema debe permitir consultar los datos del histórico de las elecciones.

[Link] no funcionales

 Requisito 1 Controles.

o Una persona solo puede emitir un voto en cada proceso electoral.

o Una vez confirmado el voto no podrá ser modificado ni anulado.

o No se debe tener registro del candidato por el cual voto cada persona
Anexo 3. Formato de Requerimientos

NOMBRE DEL PROYECTO: Sistema de votación Electrónica i-vote SIGLAS DEL PROYECTO

Necesidad del Negocio u Oportunidad a Aprovechar: Gestionar los procesos electorales de la


compañía por medio de un Sistema de votación Electronica i-vote.

Requisitos Funcionales

Stakeholder Prioridad Otorgada Requisitos


por el Stakeholder
Código Descripción

Director Recursos humanos Alta Requisito 1 Registro. oEl sistema deberá permitir registrar usuarios,
cada usuario se caracteriza por tener un nombre
Personal de la compañía de usuario, un número de identificación, el
género, fecha de nacimiento y una contraseña
para acceder al sistema, que será entregada a
cada usuario en un documento secreto vía
correo certificado.

Director Recursos humanos Alta Requisito 2 Elección. oEl sistema debe permitir la ejecución de varios
procesos electorales al mismo tiempo los cuales
se caracterizan por tener una fecha de inicio y
de fin para realizar la elección, así como, la hora
de inicio y de terminación de la votación.

Director Recursos humanos Alta Requisito 3 oEl sistema deberá permitir generar la lista de
Tarjetones. los candidatos (que se caracterizan por tener un
Personal de la compañía número de identificación, nombre completo,
imagen, género, fecha de nacimiento y número
de la lista de candidatos).

Director Recursos humanos Alta Requisito 4 oEl sistema deberá mostrar las listas electorales,
Votaciones. una vez que el usuario sea validado.
Personal de la compañía
oEl sistema deberá permitirle al votante que
realice su elección entre los candidatos
presentados.

oEl sistema deberá permitir al elector la


cancelación del voto.

oEl sistema deberá permitir al elector la


confirmación del voto almacenándolo luego.

Director Recursos humanos Alta Requisito 5 oEl sistema deberá contabilizar los votos
almacenados y los votos cancelados.
Personal de la compañía Contabilización.
oEl sistema debe permitir conocer el ganador de
cada elección.

oEl sistema debe permitir consultar los datos del


histórico de las elecciones.
Requisitos No Funcionales

Stakeholder Prioridad Otorgada Requisitos


por el Stakeholder
Código Descripción

Director Recursos humanos Requisito 1 oUna persona solo puede emitir un voto en
Controles. cada proceso electoral.
Personal de la compañía
oUna vez confirmado el voto no podrá ser
modificado ni anulado.

oNo se debe tener registro del candidato


por el cual voto cada persona
7. Modelos del sistema

[Link]ño conceptual de la base de datos

Figura 6.-Diseño conceptual bases de datos

[Link]ón de la base de datos

La normalización en una base de datos consiste en la aplicación de una serie de

reglas que permitirán evitar la redundancia de los datos, problemas de actualización de los

datos en las tablas y protegerán la integridad de los datos. Estas reglas son conocidas como

formas normales. El cumplimiento de las tres primeras formas normales es suficiente para

cubrir las necesidades de la mayoría de las bases de datos. El creador de estas 3 primeras

formas normales fue Edgar F. Codd.

 Primer nivel de normalización: Para estar en primera forma normal las tablas deben

cumplir con las siguientes reglas:


o No tener atributos con múltiples valores dentro de una entidad Eliminar

 Segundo nivel de normalización: La segunda forma normal indica que para el caso

de llaves compuestas los atributos no principales deben depender totalmente de la

llave principal y no de una parte de ella.

 Tercer nivel de normalización: La tercera forma normal indica que todos los valores

de los atributos deben depender de la llave principal de la entidad.

La base de datos se encuentra en su tercera forma normal ya que cumple con las

reglas indicadas.

[Link]ño lógico de la base de datos

Figura 7.-Diseño lógico bases de datos


8. Cuestiones de control de integridad referencial

La integridad referencial indica que una base de datos no puede tener valores de

claves externas sin pareja. Una clave externa es una columna en una tabla de base de datos

que tiene valores que están en la columna de clave primaria, un identificador único que

identifica una fila en una tabla, en otra tabla. Por ejemplo, en la entidad Persona existe una

columna llamada “Id Sucursal”, esta es una clave externa ya que es la clave primaria de la

Entidad “Sucursal”, por lo tanto, el Personal solo puede estar ligado a una sucursal que

exista en la entidad “Sucursal”.

Para hacer cumplir esta integridad referencial se usa el sistema gestor de base de

datos. En el momento de crear las tablas por medio de código SQL se crean también estas

relaciones de integridad y de ahí en adelante el SGBD deberá efectuar comprobaciones

cuando se produzcan las siguientes operaciones:

 Inserciones en una relación que tenga una clave foránea.

 Modificaciones que afecten a atributos que pertenecen a la clave foránea de una

relación.

 Borrados en relaciones referenciadas por otras relaciones.

 Modificaciones que afecten a atributos que pertenecen a la clave primaria de una

relación referenciada por otra relación.

Algunas de las políticas que se podrán aplicar serán las siguientes:

 Restricción: en caso de borrado, consiste en no permitir borrar una tupla si tiene una

clave primaria referenciada por alguna clave foránea. En caso de modificación

consiste en no permitir modificar ningún atributo de la clave primaria de una tupla


si tiene una clave primaria referenciada por alguna clave foránea, (Date, C.J.

(2001)).

 Actualización en cascada: en caso de borrado consiste en permitir el borrado de una

tupla t que tiene una clave primaria referenciada, y borrar también todas las tuplas

que referencian t. De forma similar, la actualización en cascada en caso de

modificación consiste en permitir la modificación de atributos de la clave primaria

de una tupla t que tiene una clave primaria referenciada, y modificar del mismo

modo todas las tuplas que referencian t, (Date, C.J. (2001)).

 Anulación: caso de borrado consiste en permitir el borrado de una tupla t que tiene

una clave referenciada y, además, modificar todas las tuplas que referencian t, de

modo que los atributos de la clave foránea correspondiente tomen valores nulos. De

forma similar, la anulación en caso de modificación consiste en permitir la

modificación de atributos de la clave primaria de una tupla t que tiene una clave

referenciada y, además, modificar todas las tuplas que referencian t, de modo que

los atributos de la clave foránea correspondiente tomen valores nulos, (Date, C.J.

(2001)).

Adicional a estas reglas también es posible implementar disparadores o “Triggers”

los cuales son ordenes que el sistema ejecuta de manera automática al detectar

modificaciones de la base de datos.

9. Pruebas con álgebra relacional

El álgebra relacional permite construir nuevas relaciones a partir de otras, por ejemplo, se

tienen las relaciones iniciales o los datos almacenados entonces las nuevas relaciones se

pueden ver como respuestas a algunas consultas deseadas.


 Prueba Seleccionar. Mostrar los empleados de la sucursal 100

o σ IdSucursal=100 (PERSONAL)

 Prueba Proyección. Mostrar el IdPersonal, Nombres, IdSucursal y cargo de los

empleados.

o π <IdPersonal, Nombres, IdSucursal,Cargo> (PERSONAL)

 Prueba División. Nombre de los empleados que votaron en el proceso electoral

con fecha de inicio igual ‘01/01/2018’.

o PE_FI (IdPE)← πIdProcesoElectoral

(σFechaInicio=’01/01/2018’(PROCESOELECTORAL))

o PER_PE(IdPer, IdPE) ← πIdPersonal,IdProcesoElectoral (VOTANTES)

o IdPerS_PER← PER_PE ÷ PE_FI

o RESULTADO ← πApellidos, Nombres (IdPerS_PER * PERSONAL)

 Prueba Reunión. IdPersonal, Nombres y Apellidos de los empleados de todo el

personal que ha participado en cualquier proceso electoral cuyo estado sea

cerrado.

o PE_CE

←σEstadoProcesoElectoral=‘cerrado’(PROCESOELECTORAL)

o ID_VOT← PE_CE |×| IdProcesoElectoral = IdProcesoElectoral

VOTANTES

o PER_VOT← ID_VOT |×| IdPersonal = IdPersonal VOTANTES

o RESULTADO ← πIdPersonal, Nombres, Apellidos (PER_VOT)


10. Pruebas con cálculo relacional

1. Prueba 1. Se desea conocer el Nombre y apellido del personal de la sucursal

100

o { <Nombres,Apellidos> | < Nombres,Apellidos,IdSucursal> Personal ^

IdSucursal = 100 }

2. Prueba 2. Se desea conocer el Nombre de las personas que han participado en

algún proceso electoral.

o { t / ∃ s ∈ Personal(t[nombres] = s[nombres]

∨ ∃ u ∈ Votantes (t [IdPersonal] = u [IdPersonal] )}

3. Prueba 3. Se desea conocer el IdPersonal de los candidatos para el proceso

electoral en estado abierto.

o { < IdPersonal> | ∃ IdInscripcionProcesoElectoral

(<IdPersonal,IdProcesoElectoral,IdInscripcionProcesoElectoral,Numero

Lista,EstadoInscripcion> Candidatos

^ ∃ EstadoProcesoElectoral

(<IdInscripcionProcesoElectoral,NombreProcesoElectoral,EstadoProcesoElect

oral> ProcesoElectoral ^ EstadoProcesoElectoral ="abierto" ) ) }


11. Diccionario de datos

Este formato permite la visualización de los tipos de datos, longitud y demás datos técnicos

para la creación de las estructuras de datos en la base de datos

Anexo 4. Diccionario de datos.

Diccionario de Datos
TABLA ATRIBUTO TIPODEDATO NULO LONG. LLAVE DESCRIPCIÓN TABLA O ENTIDAD FORANEA
IdPersona INTEGER No Si Sucursal/IdSucursal
Cedula INTEGER No
Nombres VARCHAR No 50
Apellidos VARCHAR No 50
Fecha_Nacimiento DATE No Entidad que
Direccion VARCHAR No 100 contiene
información del
Personal Telefono INTEGER No
personal que
IdSucursal INTEGER No labora en la
Cargo VARCHAR No 50 organización
Genero VARCHAR No 1
Correo_Electronico VARCHAR No 50
Imagen VARCHAR No 200
EstadoPersona VARCHAR No 10

IdSucursal INTEGER No Si Entidad que Personal/IdPersona


IdPersona INTEGER No contiene
Contraseña VARCHAR No 15 información del
personal que
labora en la
PersonalRegistrado
compañía y que
están inscritos
para votar los
procesos
Fecha_Registro Datetime No electorales

Entidad que
IdProcesoElectoral INTEGER No Si contiene
NombreProcesoElectoral VARCHAR No 100 información de
ProcesoElectoral
FechaInicio DATETIME No los procesos
FechaCierre DATETIME No electorales de la
EstadoProcesoElectoral VARCHAR No 10 compañía
Entidad que Departamento\IdDepartamento
IdMunicipio INTEGER No Si contiene
NombreMunicipio VARCHAR No 100 información de
Municipio los municipios
del país en donde
tiene sucursales
IdDepartamento INTEGER No la empresa

Entidad que
IdDepartamento INTEGER No Si contiene
información de
los
Departamento
departamentos
en donde tiene
sucursales la
NombreDepartamento VARCHAR No 100 empresa

Entidad que Municipio\IdMunicipio


IdSucursal INTEGER No Si contiene
IdMunicipio INTEGER No información de
las sucursales
Sucursal que tiene la
empresa en las
distintas
ciudades y en el
NombreSede VARCHAR No 200 pais

No Entidad que ProcesoElectoral\IdProcesoElectoral


IdPersonal INTEGER No Si contiene Personal\IdPersona
IdProcesoElectoral INTEGER No Si información de
las personas que
IdInscripcionProcesoElectoral INTEGER No
Candidatos se registran
NumeroLista INTEGER No como candidatos
a los diferentes
procesos
EstadoInscripcion VARCHAR No 10 electorales
Entidad que ProcesoElectoral\IdProcesoElectoral
IdProcesoElectoral INTEGER No Si contiene Personal\IdPersona
IdPersonal INTEGER No Si información de
Votantes
las personas que
ejercieron el
FechaVoto DATETIME No derecho al voto

Entidad que ProcesoElectoral\IdProcesoElectoral


IdPersonal INTEGER No Si contiene Personal\IdPersona
información de
las personas que
Jurados se registran
Si como Jurados a
los diferentes
procesos
IdProcesoElectoral INTEGER No electorales

Entidad que ProcesoElectoral\IdProcesoElectoral


IdProcesoElectoral INTEGER No contiene Sucursal/IdSucursal
Voto IdSucursal INTEGER No información de
VotoNumeroLista INTEGER No los votos
FechaVoto DATETIME No emitidos
12. Modelo del sistema

a. Diseño físico de la base de datos

El diseño físico de la base de datos optimiza el rendimiento a la vez que asegura la


integridad de los datos al evitar repeticiones innecesarias de datos. Durante el diseño físico,
se transforman las entidades en tablas, las instancias en filas y los atributos en columnas.

El diseño físico se divide en varias fases, cada una de ellas compuesta por una serie
de pasos:

• Traducir el esquema lógico global para el SGBD específico.

1. Diseñar las relaciones base para el SGBD específico.


2. Diseñar las reglas de negocio para el SGBD específico.
La creación de tablas, relaciones, reglas, integridad referencial y llaves se puede
consultar en los scripts de creación de la base de datos.

• Diseñar los mecanismos de seguridad.

1. Diseñar las vistas de los usuarios.


2. Diseñar las reglas de acceso.
Las diferentes vistas de usuario creadas para el manejo de la aplicación se detallan
más adelante en el manual de administración y de usuario final. Este aplicativo dentro de su
programación tiene validaciones de ingreso al sistema por parte de usuarios normales como
para usuarios administradores.

13. Pruebas ACID

14. Documentación de la implementación y ajustes al sistema de bases de datos

15. Consultas SQL y reportes según requerimientos del sistema


Validación del personal de la empresa:
oSELECT * FROM PERSONAS
Validación del personal registrado para ingresar al sistema ivote
oSELECT * FROM PERSONALREGISTRADO
Validar los procesos electorales
oSELECT * FROM PROCESOELECTORAL
Validar los candidatos registrados a cada proceso electoral
oSELECT `Cedula`, `Nombres`,
`Apellidos`,`NombreProcesoElectoral`, `FechaInicio`, `FechaCierre`,
`NumeroLista`, `EstadoInscripcion`
oFROM `candidatos` INNER JOIN `procesoelectoral` ON
o`procesoelectoral`.`IdProcesoElectoral`=`candidatos`.`IdProcesoEle
ctoral`
oINNER JOIN `Personal` ON
`Personal`.`IdPersona`=`candidatos`.`IdPersona`

Figura 8 Validación del personal


Validar las personas que votaron en cada proceso electoral
oSELECT `Cedula`, `Nombres`,
`Apellidos`,`NombreProcesoElectoral`, `FechaInicio`, `FechaCierre`,
`FechaVoto`
oFROM `votantes` INNER JOIN `procesoelectoral` ON
`procesoelectoral`.`IdProcesoElectoral`=`votantes`.`IdProcesoElectoral`
INNER JOIN `Personal` ON `Personal`.`IdPersona`=`votantes`.`IdPersona`

Figura 9 Validación personal que voto

 Validar la cantidad de votos obtenidos en cada proceso electoral por candidato

SELECT `Cedula`, `Nombres`, `Apellidos`,`NombreProcesoElectoral`, `FechaInici


o`, `FechaCierre`, `NumeroLista`, `EstadoInscripcion`,COUNT(`VotoNumeroLista`
) `CantidadVotos` FROM`candidatos` INNER JOIN `procesoelectoral` ON `procesoe
lectoral`.`IdProcesoElectoral`=`candidatos`.`IdProcesoElectoral` INNER JOIN `
Personal` ON`Personal`.`IdPersona`=`candidatos`.`IdPersona` INNER JOIN `voto`
ON `voto`.`IdProcesoElectoral`=`procesoelectoral`.`IdProcesoElectoral` group
by `Cedula`, `Nombres`,`Apellidos`,`NombreProcesoElectoral`, `FechaInicio`,
`FechaCierre`, `NumeroLista`, `EstadoInscripcion`
Figura 10 Validación cantidad de votos obtenidos

16. Implementación de cursores

Las operaciones de una base de datos relacional actúan en un conjunto completo de


filas. El conjunto de filas que devuelve una instrucción SELECT está compuesto por todas
las filas que satisfacen las condiciones de la cláusula WHERE de la instrucción. Este
conjunto completo de filas que devuelve la instrucción se conoce como conjunto de
resultados. Aplicaciones, especialmente aquellas que son interactivas y en línea, no siempre
pueden trabajar eficazmente con el completo conjunto de resultados como una unidad.
Estas aplicaciones necesitan un mecanismo que trabaje con una fila o un pequeño bloque de
filas cada vez. Los cursores son una extensión de los conjuntos de resultados que
proporcionan dicho mecanismo. Docs. (2017).

Los cursores hacen lo siguiente:

Especificar la posición en filas específicas del conjunto de resultados.


Recuperar una fila o un bloque de filas basándose en la posición del
conjunto de resultados actual.
Modificar los datos de las filas en la posición actual del conjunto de
resultados.
Definir diferentes niveles de sensibilidad a los cambios de datos realizados
por otros usuarios.
En la aplicación los cursores se usan en el código php que genera la interfaz de
usuario en los siguientes casos:

Para mostrar la lista de procesos electorales activos


Mostrar los candidatos activos para cada proceso electoral
Ejemplos de estos cursores es el usado en la lista de selección de los procesos
electorales

Figura 11 Cursores

17. Implementación de procedimientos almacenados (stored procedures)

Los procedimientos almacenados son un conjunto de comandos que se ejecutan por


el servidor de Base de Datos y no por el programa cliente que lo accede, permitiendo la
ejecución de una acción o conjunto de acciones específicas. Ecured. (2016).
Creación de procedimientos almacenados en mysql

Ingresar al servidor de base de datos [Link]


Dar clic en el nombre de la base de datos
Luego dar clic en procedimientos
Luego dar clic en nuevo

Figura 12 Creación de procedimientos almacenados en MySQL

 Se desplegara una ventana en la que se podrá crear el procedimiento de forma


sencilla
 Se ingresa el nombre que se desea para el proceso
 En parámetros ingresamos las variables de entrada que se desean para ejecutar el
proceso
 En definición se ingresan las sentencias SQL que ejecutara el procedimiento

 Para creación de personas

Se creó el procedimiento almacenado proc_ingresar_personal que tiene el siguiente


código:
CREATE DEFINER=`root`@`localhost` PROCEDURE
`proc_ingresar_personal`(IN `Cedula` INT(11), IN `Nombres` VARCHAR(50), IN
`Apellidos` VARCHAR(50), IN `Fecha_Nacimiento` DATE, IN `Direccion`
VARCHAR(100), IN `Telefono` INT, IN `IdSucursal` INT, IN `Cargo` VARCHAR(50),
IN `Genero` VARCHAR(1), IN `Correo_Electronico` VARCHAR(50), IN `Imagen`
VARCHAR(200), IN `EstadoPersona` VARCHAR(10), IN `IdPersona` INT(11)) NOT
DETERMINISTIC NO SQL SQL SECURITY DEFINER INSERT INTO `personal`
VALUES

(IdPersona,Cedula, Nombres, Apellidos,Fecha_Nacimiento, Direccion,Telefono,


IdSucursal, Cargo,Genero, Correo_Electronico, Imagen, EstadoPersona)

Figura 13 Procedimiento almacenado

Para consultar el procedimiento almacenado ingrese al [Link]


en la parte izquierda del panel de clic en el signo más de la base de datos ivote y luego de
clic en procedimientos
Figura 14 Consulta procedimientos

Para ejecutar el procedimiento del clic en ejecutar e ingrese los datos de la persona

Figura 15 Ejecutar procedimiento

Y clic en continuar y el sistema le confirma que el proceso se ha ejecutado con éxito


Figura 16 Confirmación del proceso

Si se valida en la base de datos se podrá visualizar la persona creada

Figura 17 Creación de personas

 Para consulta de Personal


Se crea el siguiente procedimiento almacenado

Figura 18 Procedimiento almacenado

Clic en continuar y luego en la parte izquierda clic en procedimientos, se visualizara


el nuevo procedimiento

Figura 19 Nuevo procedimiento


Al dar clic en ejecutar el proceso solicita el número de la cedula a consultar

Figura 20 Ejecución del proceso

Al dar clic en continuar se podrá visualizar la información de la persona solicitada

Figura 21 Visualización de información


 Consulta de procesos electorales
Este procedimiento almacenado permitirá la visualización de los procesos electorales
creados. Para crearlo ir a procedimientos en la parte izquierda el panel y clic en nuevo

Figura 22 Visualización de procesos electorales

Ingresar los datos y continuar

Para ejecutarlo dar clic en procedimientos y luego ejecutar


Figura 23 Ejecución de procedimientos

En la ventana que aparece ingresar el valor por defecto 1 y continuar

Figura 24 Ingresar el valor por defecto

Posteriormente se podrán visualizar los procesos electorales creados


Figura 25 Procesos electorales creados

 Consulta de candidatos de un determinado proceso electoral


Para crear este procedimiento almacenado damos clic en nuevo en procedimiento y
luego se ingresa la siguiente información
Figura 26 Crear nuevo procedimiento

Dar clic en continuar y luego se podrá ejecutar

Figura 27 Ejecución

El sistema solicita el número del proceso electoral


Figura 28 Número del proceso electoral

Luego clic en continuar y se visualizaran los candidatos inscritos al proceso electoral


ingresado

Figura 29 Candidatos inscritos al proceso


Para el sistema de votación ivote se creara un Triggers que se ejecutara al
intentar guardar la votación de un usuario, este Triggers validara si el usuario ya voto,
de ser así no le permitirá retornar a votar.

Procedimiento:

 El Triggers se ejecuta cuando detecta una inserción


 El Triggers valida si el usuario ya voto
 El Triggers no permite la inserción del registro si el usuario ya voto

18. Implementación de disparadores (Triggers)

Un disparador es un objeto con nombre dentro de una base de datos el cual se asocia
con una tabla y se activa cuando ocurre en ésta un evento en particular. (Guebs. 2105). El
Triggers se puede ejecutar cuando se ejecuta una de las siguientes sentencias MySQL en la
tabla: INSERT, UPDATE y DELETE. Se puede invocar antes o después del evento.

Para implementar un Triggers en la base de datos ivote se debe seguir el siguiente


procedimiento:

 Ingresar al servidor de base de datos mediante la ruta [Link]


 Dar clic sobre el nombre de la base de datos ivote
 En la parte derecha de la pantalla dar clic sobre el menú Mas
Figura 30 Implementación de Triggers

 Se desplegara una ventana que permitirá la creación del nuevo Triggers

Figura 31 Creación de Triggers

 Al dar clic en agregar disparador aparecerá una nueva ventana que solicita los
parámetros y consultas SQL a ejecutar por el disparador
Figura 32 Parámetros y consultas SQL a ejecutar por el disparador
19. Cuestiones de seguridad de la base de datos

En el mundo globalizado dónde lo más importante la información es importante


considerar que los sistemas de seguridad qué tiene el motor de My SQL constan de dos
partes la primera es la autenticación de un usuario con una contraseña y la segunda es el
escalamiento de privilegios que tiene este usuario

Aparte de la seguridad que tiene el motor de la base de datos por defecto se tuvo en
cuenta los siguientes aspectos técnicos para la seguridad:

[Link]ón de privilegios
[Link] valida los privilegios que posee la base de datos

Select * from user where

Select_priv = ‘Y’ or Insert_priv = ‘Y’

Or Update_priv = ‘Y’ or Delete_priv = ‘Y’

Or Create_priv = ‘Y’ or Drop_priv = ‘Y’

Or Reload_priv = ‘Y’ or Shutdown_priv = ‘Y’

Or Process_priv = ‘Y’ or File_priv = ‘Y’

Or Grant_priv = ‘Y’ or References_priv = ‘Y’

Or Index_priv = ‘Y’ or Alter_priv = ‘Y’;

Select * from host

Where Select_priv = ‘Y’ or Insert_priv = ‘Y’

Or Create_priv = ‘Y’ or Drop_priv = ‘Y’

Or Index_priv = ‘Y’ or Alter_priv = ‘Y’;

Or Grant_priv = ‘Y’ or References_priv = ‘Y’


Or Update_priv = ‘Y’ or Delete_priv = ‘Y’

Select * from db

Where Select_priv = ‘Y’ or Insert_priv = ‘Y’

Or Grant_priv = ‘Y’ or References_priv = ‘Y’

Or Update_priv = ‘Y’ or Delete_priv = ‘Y’

Or Create_priv = ‘Y’ or Drop_priv = ‘Y’

Or Index_priv = ‘Y’ or Alter_priv = ‘Y’

[Link] de configuración
[Link] configura el parámetro Safe-show-database el cual solo permite
la modificación de las tablas de las cuales tenga establecido algún tipo de
privilegio
[Link] de usuario
[Link] asigna válida y asigna una contraseña al usuario root (usuario
por defecto de la base de datos)
[Link] remoto
[Link] controla que las conexiones a la base de datos se realice
remotamente con el parametro MYSQLD_OPTIONS=”–skip-networking”
en el archivo [Link]
20. Documentación del proceso de refinamiento y pruebas de performance de la base
de datos.
21. Diseño e Implementación del programa de Inteligencia de Negocios,
implementación y llenado de la bodega de datos, presentación y análisis de la
información a través de cubos OLAP.

Para realizar de reportes tipo cubos OLAP se puede crear una conexión desde Excel
para empezar analizar la información, para ella es necesario descargar e instalar el conector
[Link], el cual se puede descargar del sitio web
[Link]

Luego de la instalación se abre Excel y en la pestaña datos en la parte derecha


aparecerá la conexión a la base de datos de mysql

El siguiente paso es crear una conexión a la base de datos para ello hay que dar
doble clic en el botón de mysql for Excel y luego en el panel que aparece en la parte
derecha dar clic en “New connection”, se ingresan los datos del sistema
Se da clic en text connection, para validar que todo funcionando correctamente
Y se puede visualizar que se tiene la conexión ya creada

Se da doble clic en ivote y se mostraran las tablas de la base de datos


Al dar clic sobre alguna de las tablas y luego en “Import MySQL Data” se puede tener la
información de esa tabla en Excel

Desde esta herramienta también es posible ver y ejecutar los procedimientos almacenados.
Por ejemplo si deseamos consultar la información de una persona
 Clic sobre el nombre del procedimiento almacenado
 Clic en “Import MySQL Data”
 Ingresar el número de cedula de la persona que se desea consultar
 Se oprime el botón “call”, se obtendrá la información deseada:

También es posible usar el procedimiento almacenado “proc_ingresar_personal”,


para desde Excel ingresar una persona, para ello:

 Dar clic en el nombre del procedimiento almacenado


 Dar clic en Import MySQL Data
 Ingresar los datos solicitados
 El campo IdPersona se deja como esta
 Luego se da clic en call
 Para validar que el proceso se realizó se ingresa al procedimiento almacenado
“proc_consulta_personal”, se ingresa el número de la cedula, se da clic en call y e
visualizara el resultado

El registro se almaceno.

Se pueden generar las listas de votación para los procesos electorales con el procedimiento
“proc_consulta_Candidato”
Dar clic en import y se tendrá la data en Excel

Como se puede ver también es posible empezar a trabajar tablas dinámicas a partir
de la información importada.
También es posible hacer análisis de por ejemplo cada persona en cuantos procesos
electorales ha participado.
22. Código fuente de la aplicación, debidamente documentado.

 Conexión a la base de datos


<?php
$server="localhost";
$usuariobd="root";
$pass="";
$db="ivote";
$cx=mysqli_connect("$server","$usuariobd","$pass","$db");
?>
 Ingreso del administrador
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Sistema de Votación</title>
<!-- Bootstrap -->
<link href="css/[Link]" rel="stylesheet">
<link href="css/[Link]" rel="stylesheet">
<!-- HTML5 shim and [Link] for IE8 support of HTML5 elements and
media queries -->
<!-- WARNING: [Link] doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script
src="[Link]
<script
src="[Link]
<![endif]-->
</head>
<body>
<?php
require_once("bd/[Link]");
$vacio = isset($_POST['variable']) ? $_POST['variable'] : null ;
$acceso = isset($_POST['variable']) ? $_POST['variable'] : null ;
session_start();
if (empty($acceso)) {
}
if (isset($_POST["usuario"])) {
$usuario=$_POST["usuario"];
}
if (isset($_POST["clave"])) {
$clave=$_POST["clave"];
}
if (isset($_POST["boton"])) {
$boton=$_POST["boton"];
switch ($boton) {
case "Ingresar":
#echo "<p>Hola Mundo IdUsuario = '$usuario' AND Contraseña =
'$clave'</p>";
#echo "<p>resultado '$resultado'</p>";
#echo "<p>sql '$sql' </p>";
if (empty($usuario) && empty($clave)) {
$vacio="si";
break;
}
$sql=" SELECT * FROM personalregistrado WHERE idusuario =
'$usuario' AND Contrasena = '$clave' ";
$resultado=mysqli_query ($cx,$sql);
$datos=mysqli_fetch_array($resultado);
$per=$datos["IdUsuario"];
$cla=$datos["Contrasena"];
if ($usuario==$per AND $clave==$cla) {
$_SESSION["nombre"]=$datos["nombre"];
$_SESSION["nivel"]=$datos["nivel"];
$_SESSION["permiso"]="Acceso Permitido";
?>
<script>
alert('bienvenido al sistema');
[Link]="[Link]";
</script>

<?php
//header("location: [Link]");
}else {
$acceso="denegado";
}
break;
}}
?>
<div class="container-fluid">
<div class="row">
<div class="col-md-6 col-md-offset-3">
<h1 class="text-center">Sistema de Votación i-vote</h1>
</div>
</div>
<hr>
</div>
<div class="container">
<div class="center-block col-md-4 col-xs-8">
<form action="[Link]" role="form" method="post">
<div class="form-group">
<label for="Usuario">Usuario</label>
<input type="text" name="usuario" class="form-control" id="usuario"
placeholder="Usuario">
</div>
<div class="form-group">
<label for="ejemplo_password_1">Contraseña</label>
<input type="password" name="clave" class="form-control"
id="ejemplo_password_1"
placeholder="Contraseña">
</div>
<input type ="submit" class="btn btn-primary" name="boton"
Value="Ingresar">
<input type ="submit" class="btn btn-danger" name="boton"
Value="Cancelar">
</form>
</div>
</div>
<div align="center">
<?php

if ($acceso=="denegado") {
echo "<h1>Acceso denegado.. Usuario o clave erronea...</h1>";
}

if ($vacio=="si") {
echo "<h1>Debe ingresar Usuario y clave</h1>";
}

?>

</div>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="js/[Link]"></script>
<!-- Include all compiled plugins (below), or include individual files as
needed -->
<script src="js/[Link]"></script>
</body>
</html>

 Menú administrador
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Sistema de Votación</title>
<!-- Bootstrap -->
<link href="css/[Link]" rel="stylesheet">
<link href="css/[Link]" rel="stylesheet">
<!-- HTML5 shim and [Link] for IE8 support of HTML5 elements and
media queries -->
<!-- WARNING: [Link] doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script
src="[Link]
<script
src="[Link]
<![endif]-->
</head>
<body>

<nav class="navbar navbar-default">


<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-
toggle="collapse" data-target="#defaultNavbar1"><span class="sr-
only">Toggle navigation</span><span class="icon-bar"></span><span
class="icon-bar"></span><span class="icon-bar"></span></button>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="defaultNavbar1">
<div class="menu1 col-md-7 col-md-offset-3">
<ul class="nav navbar-nav">
<li class="active">
<li><a href="cargar_personal.php">Registro Persona</a></li>
<li><a href="cargar_procesoselec.php">Cargar Elecciones</a></li>
<li><a href="cargar_candidato.php">Registro candidato</a></li>
<li><a href="[Link]">Resultados</a></li>
<li><a href="[Link]">Votación</a></li>
</ul>
</div>
</div>
<!-- /.navbar-collapse -->
</div>
<!-- /.container-fluid -->
</nav>
<?php
require_once("bd/[Link]");
error_reporting(E_ALL ^ E_NOTICE);

session_start();
if (isset($_POST["persona"])) {
$persona=$_POST["persona"];
}
if (isset($_POST["boton"])) {
$boton=$_POST["boton"];
switch ($boton) {
case "Ingresar":
if (empty($persona) ) {
$vacio="si";
break;
}
$sql="SELECT * FROM personal WHERE cedula = '$persona' ";
$resultado=mysqli_query ($cx,$sql);
$datos=mysqli_fetch_array($resultado);
$alu=$datos["cedula"];
$nombre=$datos["nombres"];
$Apellidos=$datos["Apellidos"];
if ($persona==$per) {
$_SESSION["nombres"]=$datos["nombres"];
$_SESSION["Apellidos"]=$datos["Apellidos"];
$_SESSION["cedula"]=$datos["cedula"];
$_SESSION["permiso"]="Acceso Permitido";
?>
<script>
[Link]="[Link]";
</script>

<?php
//header("location: [Link]");
}else {
$acceso="denegado";
}
break;
}
}
?>
<div class="container-fluid">
<div class="row">
<div class="col-md-6 col-md-offset-3">
<h1 class="text-center">Sistema de Votación</h1>
</div>
</div>
<hr>
</div>
<div class="container">
<div class="center-block col-md-6 col-xs-8">
<h2>Bienvenido Al Modulo de Administración</h2>
</div>
</div>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="js/[Link]"></script>
<!-- Include all compiled plugins (below), or include individual files as
needed -->
<script src="js/[Link]"></script>
</body>
</html>
 Registrar usuarios
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Sistema de Votación</title>
<!-- Bootstrap -->
<link href="css/[Link]" rel="stylesheet">
<link href="css/[Link]" rel="stylesheet">
<!-- HTML5 shim and [Link] for IE8 support of HTML5 elements and media
queries -->
<!-- WARNING: [Link] doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script
src="[Link]
<script src="[Link]
<![endif]-->
</head>
<body>
<nav class="navbar navbar-default">
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
data-target="#defaultNavbar1"><span class="sr-only">Toggle
navigation</span><span class="icon-bar"></span><span class="icon-
bar"></span><span class="icon-bar"></span></button>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="defaultNavbar1">
<div class="menu1 col-md-7 col-md-offset-3">
</div>
</div>
</div>
</nav>
<?php
require_once("bd/[Link]");
error_reporting(E_ALL ^ E_NOTICE);
$vacio = isset($_POST['variable']) ? $_POST['variable'] : null ;
$acceso = isset($_POST['variable']) ? $_POST['variable'] : null ;
session_start();
$IdPersona=$_SESSION["IdPersona"];
$sql1="SELECT Cedula, Nombres,Apellidos FROM personal WHERE IdPersona =
'$IdPersona'";
$resultado2=mysqli_query ($cx,$sql1);
$datos2=mysqli_fetch_array($resultado2);
$per2=$datos2["Cedula"];
$nombres=$datos2["Nombres"];
$apellidos=$datos2["Apellidos"];
if (empty($acceso)) {
}
if (isset($_POST["nombre"])){
$nombre=$_POST["nombre"];
}else{
$nombre="";
}

if (isset($_POST["cedula"])){
$cedula=$_POST["cedula"];
}else{
$cedula="";
}
if (isset($_POST["boton"])) {
$boton=$_POST["boton"];
switch ($boton) {
case "guardar":
if (empty($cedula)){
?>
<script>
alert('Por favor ingrese la contraseña');
</script>
<?php
break;
}
if (empty($nombre)){
?>

<script>
alert('Confirme la contraseña');
</script>
<?php

break;

}
if (($nombre)<>($cedula)){
?>

<script>
alert('Las contraseñas no coinciden, intentelo de nuevo');
</script>
<?php

break;

$sql="insert into personalregistrado ( IdPersona, Contrasena, Fecha_Registro)


values ('$IdPersona','$cedula',now()) ";
$resultado=mysqli_query($cx,$sql);
if ($resultado){
$acceso="aprobado";
?>
<?php
}
break;

}
}

?>

<div class="container-fluid">
<div class="row">
<div class="col-md-6 col-md-offset-3">
<h1 class="text-center">Modulo de registro de Votantes</h1>
</div>
</div>
<hr>
</div>
<div class="container">
<div class="center-block col-md-4 col-xs-8">
<td><?php echo "<font size='5' color='blue'>Bienvenido:</font>"."<font size='5'
color='red'>".$_SESSION["nombre"]."</font>";
echo "<font size='4' color='black'><p>$nombres $apellidos</p></font>";
echo "<font size='4' color='black'><p>Cedula No.: $per2</p></font>";
?></td>
<form name ="acceso" action="cargar_personal.php" role="form" method="post">
<div class="form-group">

<div class="form-group">
<label for="Usuario">Ingrese la contraseña </label>
<input type="password" name="cedula" class="form-control" id="cedula"
placeholder="">
</div>
<div class="form-group">
<label for="ejemplo_password_1">Confirme su contraseña</label>
<input type="password" name="nombre" class="form-control" id="nombre"
placeholder="">
</div>

<?php

?>
<br> <input type ="submit" class="btn btn-primary" name="boton"
Value="guardar">

<input type ="submit" class="btn btn-danger" name="boton" Value="Cancelar">


</form>
<?php
if ($acceso=="aprobado") {
echo "<h3>Registro Guardado con exito....</h3>";
$sql3="SELECT Idusuario FROM personalregistrado WHERE IdPersona =
'$IdPersona'";
$resultado3=mysqli_query ($cx,$sql3);
$datos3=mysqli_fetch_array($resultado3);
$per3=$datos3["Idusuario"];

echo "<font size='3' color='black'><p>Su id de usuario para el ingreso al sistema


es: $per3</p></font>";
?>
<script>
[Link]="[Link]";
</script>
<?php
}
?>

</div>
</div>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="js/[Link]"></script>

<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="js/[Link]"></script>
</body>
</html>

 Confirma registro del usuario


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Sistema de Votación</title>
<!-- Bootstrap -->
<link href="css/[Link]" rel="stylesheet">
<link href="css/[Link]" rel="stylesheet">

<!-- HTML5 shim and [Link] for IE8 support of HTML5 elements and media
queries -->
<!-- WARNING: [Link] doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="[Link]
<script src="[Link]
<![endif]-->
</head>
<body>
<nav class="navbar navbar-default">
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
data-target="#defaultNavbar1"><span class="sr-only">Toggle navigation</span><span
class="icon-bar"></span><span class="icon-bar"></span><span class="icon-
bar"></span></button>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="defaultNavbar1">
<div class="menu1 col-md-7 col-md-offset-3">
</div>
</div>
<!-- /.navbar-collapse -->
</div>
<!-- /.container-fluid -->
</nav>

<?php
require_once("bd/[Link]");
error_reporting(E_ALL ^ E_NOTICE);
$vacio = isset($_POST['variable']) ? $_POST['variable'] : null ;
$acceso = isset($_POST['variable']) ? $_POST['variable'] : null ;
session_start();
$IdPersona=$_SESSION["IdPersona"];
$sql1="SELECT Cedula, Nombres,Apellidos FROM personal WHERE IdPersona =
'$IdPersona'";
$resultado2=mysqli_query ($cx,$sql1);
$datos2=mysqli_fetch_array($resultado2);
$per2=$datos2["Cedula"];
$nombres=$datos2["Nombres"];
$apellidos=$datos2["Apellidos"];

echo "<h3>Registro Guardado con exito....</h3>";


$sql3="SELECT Idusuario FROM personalregistrado WHERE IdPersona =
'$IdPersona'";
$resultado3=mysqli_query ($cx,$sql3);
$datos3=mysqli_fetch_array($resultado3);
$per3=$datos3["Idusuario"];
if (empty($acceso)) {
}
if (isset($_POST["boton"])) {
$boton=$_POST["boton"];
switch ($boton) {

case "salir":
}
}
?>
<div class="container">
<div class="center-block col-md-4 col-xs-8">
<td><?php
echo "<font size='4' color='black'><p>$nombres $apellidos</p></font>";
echo "<font size='3' color='black'><p>Cedula No.: $per2</p></font>";
echo "<font size='3' color='black'><p>Su id de usuario para el ingreso al sistema de
votación es: $per3</p></font>";

?></td>
<form name ="acceso" action="[Link]" role="form" method="post">
<div class="form-group">
<?php
?>
<br> <input type ="submit" class="btn btn-primary" name="boton" Value="salir">
<!--<input type ="submit" class="btn btn-danger" name="boton" Value="Salir">-->
</form>
</div>
</div>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="js/[Link]"></script>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="js/[Link]"></script>
</body>
</html>
 Registrar procesos electorales
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Sistema de Votación</title>
<!-- Bootstrap -->
<link href="css/[Link]" rel="stylesheet">
<link href="css/[Link]" rel="stylesheet">
<!-- HTML5 shim and [Link] for IE8 support of HTML5 elements and media
queries -->
<!-- WARNING: [Link] doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script
src="[Link]
<script src="[Link]
<![endif]-->
</head>
<body>
<nav class="navbar navbar-default">
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
data-target="#defaultNavbar1"><span class="sr-only">Toggle
navigation</span><span class="icon-bar"></span><span class="icon-
bar"></span><span class="icon-bar"></span></button>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="defaultNavbar1">
<div class="menu1 col-md-7 col-md-offset-3">
<ul class="nav navbar-nav">
<li class="active">
<li><a href="cargar_personal.php">Registro Persona</a></li>
<li><a href="cargar_procesoselec.php">Cargar Elecciones</a></li>
<li><a href="cargar_candidato.php">Registro candidato</a></li>
<li><a href="[Link]">Resultados</a></li>
<li><a href="[Link]">Votación</a></li>
</ul>
</div>
</div>
<!-- /.navbar-collapse -->
</div>
<!-- /.container-fluid -->
</nav>
<?php
require_once("bd/[Link]");
error_reporting(E_ALL ^ E_NOTICE);
$vacio = isset($_POST['variable']) ? $_POST['variable'] : null ;
$acceso = isset($_POST['variable']) ? $_POST['variable'] : null ;
session_start();
$IdPersona=$_SESSION["IdPersona"];
$sql1="SELECT Cedula, Nombres,Apellidos FROM personal WHERE IdPersona =
'$IdPersona'";
$resultado2=mysqli_query ($cx,$sql1);
$datos2=mysqli_fetch_array($resultado2);
$per2=$datos2["Cedula"];
$nombres=$datos2["Nombres"];
$apellidos=$datos2["Apellidos"];
if (empty($acceso)) {
}
if (isset($_POST["nombre"])){
$nombre=$_POST["nombre"];
}else{
$nombre="";
}
if (isset($_POST["cedula"])){
$cedula=$_POST["cedula"];
}else{
$cedula="";
}
if (isset($_POST["nombre2"])){
$nombre2=$_POST["nombre2"];
}else{
$nombre2="";
}
if (isset($_POST["estado"])){
$estado=$_POST["estado"];
}else{
$estado="";
}
if (isset($_POST["boton"])) {
$boton=$_POST["boton"];
switch ($boton) {
case "guardar":
if (empty($cedula)){
?>
<script>
alert('Por favor ingrese el nombre del proceso electoral');
</script>
<?php
break;}
if (empty($nombre)){
?>
<script>
alert('Ingrese la fecha de inicio');
</script>
<?php
break;
}
if (empty($nombre2)){
?>
<script>
alert('Ingrese la fecha de cierre');
</script>
<?php
break;
}
if (empty($estado)){
?>
<script>
alert('Ingrese el estado');
</script>
<?php
break;
}
$sql="INSERT INTO procesoelectoral ( NombreProcesoElectoral, FechaInicio,
FechaCierre, EstadoProcesoElectoral) VALUES
('$cedula','$nombre','$nombre2','$estado') ";
$resultado=mysqli_query($cx,$sql);
if ($resultado){
$acceso="aprobado";
?>
<?php
}
break;
}
}
?>
<div class="container-fluid">
<div class="row">
<div class="col-md-6 col-md-offset-3">
<h1 class="text-center">Modulo de registro de Procesos Electorales</h1>
</div>
</div>
<hr>
</div>
<div class="container">
<div class="center-block col-md-4 col-xs-8">

<form name ="acceso" action="" role="form" method="post">


<div class="form-group">

<div class="form-group">
<label for="Usuario">Ingrese el nombre del proceso electoral </label>
<input type="text" name="cedula" class="form-control" id="cedula"
placeholder="">
</div>
<div class="form-group">
<label for="ejemplo_password_1">Fecha Inicio</label>
<input type="date" name="nombre" class="form-control" id="nombre"
placeholder="">
</div>
<div class="form-group">
<label for="ejemplo_password_2">Fecha Cierre</label>
<input type="date" name="nombre2" class="form-control" id="nombre2"
placeholder="">
</div>
<div class="form-group">
<label for="ejemplo_password_2">Estado</label>
<input type="text" name="estado" class="form-control" id="estado"
placeholder="">
</div>
<?php
?>
<br> <input type ="submit" class="btn btn-primary" name="boton"
Value="guardar">
<input type ="submit" class="btn btn-danger" name="boton" Value="Cancelar">
</form>
<?php
if ($acceso=="aprobado") {
echo "<h3>Registro Guardado con exito....</h3>";
}
?>
</div>
</div>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="js/[Link]"></script>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="js/[Link]"></script>
</body>
</html>

 Registrar candidatos

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Sistema de Votación</title>
<link href="css/[Link]" rel="stylesheet">
<link href="css/[Link]" rel="stylesheet">
<!-- HTML5 shim and [Link] for IE8 support of HTML5 elements and media
queries -->
<!-- WARNING: [Link] doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script
src="[Link]
<script src="[Link]
<![endif]-->
</head>
<body>
<nav class="navbar navbar-default">
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
data-target="#defaultNavbar1"><span class="sr-only">Toggle
navigation</span><span class="icon-bar"></span><span class="icon-
bar"></span><span class="icon-bar"></span></button>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="defaultNavbar1">
<div class="menu1 col-md-7 col-md-offset-3">
<ul class="nav navbar-nav">
<li class="active">
<li><a href="cargar_personal.php">Registro Persona</a></li>
<li><a href="cargar_procesoselec.php">Cargar Elecciones</a></li>
<li><a href="cargar_candidato.php">Registro candidato</a></li>
<li><a href="[Link]">Resultados</a></li>
<li><a href="[Link]">Votación</a></li>
</ul>
</div>
</div>
<!-- /.navbar-collapse -->
</div>
<!-- /.container-fluid -->
</nav>
<?php
require_once("bd/[Link]");
error_reporting(E_ALL ^ E_NOTICE);
$vacio = isset($_POST['variable']) ? $_POST['variable'] : null ;
$acceso = isset($_POST['variable']) ? $_POST['variable'] : null ;
session_start();
$cedula=$_SESSION["cedula"];
if (empty($acceso)) {
}
if (isset($_POST["proceso"])){
$proceso=$_POST["proceso"];
}else{
$proceso="";
}
if (isset($_POST["cedula"])){
$cedula=$_POST["cedula"];
}else{
$cedula="";
}
if (isset($_POST["NombreProcesoElectoral"])){
$nombre=$_POST["NombreProcesoElectoral"];
}else{
$nombre="";
}
if (isset($_POST["lista"])){
$lista=$_POST["lista"];
}else{
$lista="";
}

if (isset($_POST["estado"])){
$estado=$_POST["estado"];
}else{
$estado="";
}
if (isset($_POST["boton"])) {
$boton=$_POST["boton"];
switch ($boton) {
case "Guardar":
if (empty($proceso)){
?>
<script>
alert('Confirme el proceso');
</script>
<?php
break;
}
if (empty($cedula)){
?>
<script>
alert('Ingrese el id del candidato');
</script>
<?php
break;
}
if (empty($lista)){
?>
<script>
alert('Ingrese el número de lista del candidato');
</script>
<?php
break;
}
if (empty($estado)){
?>
<script>
alert('Ingrese el estado del candidato');
</script>
<?php
break;
}
$sql="INSERT INTO candidatos (IdPersona, IdProcesoElectoral, NumeroLista,
EstadoInscripcion)
VALUES ('$cedula','$proceso','$lista','$estado')";
$resultado=mysqli_query($cx,$sql);
if ($resultado){
$acceso="aprobado";
?>
<?php
}

if ($resultado){
$acceso="aprobado";
?>
<?php
}
}
}
?>
<div class="container-fluid">
<div class="row">
<div class="col-md-6 col-md-offset-3">
<h1 class="text-center">Modulo de Registro de candidato</h1>
</div>
</div>
<hr>
</div>
<div class="container">
<div class="center-block col-md-4 col-xs-8">
<td><?php echo "<font size='5' color='blue'>Bienvenido:</font>"."<font size='5'
color='red'>".$_SESSION["nombre"]."</font>";
?></td>
<form name ="acceso" action="cargar_candidato.php" role="form"
method="post">
<div class="form-group">
<fieldset>
<strong>Procesos Electorales</strong>
<?php
$sql="select * from procesoelectoral where EstadoProcesoElectoral='Abierto'";
$resultado=mysqli_query($cx,$sql);
$num_reg=mysqli_num_rows($resultado);
?>
<select name="proceso" onchange="submit();">
<option value="" >Seleccione el proceso </option>
<?php
for ($i=0;$i<$num_reg;$i++){
//cuando se usa ciclo for es obligatorio que la variable de la matriz estè
//dentro del ciclo, es decir la variable del mysqli_fetch_array($resultado);
$reg=mysqli_fetch_array($resultado);
$codigo=$reg["IdProcesoElectoral"];
$nombre=$reg["NombreProcesoElectoral"];
?>
<option value="<?php echo $codigo; ?>"<?php if ($proceso==$codigo){echo
"selected='selected'";}?>><?php echo $nombre; ?></option><!--para chrome-->
<?php
}
?>
</select>
</fieldset>
</td>
<br>
<br>
<div class="form-group">
<label for="Usuario">IdCandidato </label>
<input type="text" name="cedula" class="form-control" id="cedula"
placeholder="IdCandidato">
</div>
<div class="form-group">
<label for="ejemplo_password_1">Número de la lista</label>
<input type="text" name="lista" class="form-control" id="lista"
placeholder="lista">
</div>
<div class="form-group">
<label for="ejemplo_password_1">Estado</label>
<input type="text" name="estado" class="form-control" id="estado"
placeholder="Estado">
</div>
<input type ="submit" class="btn btn-primary" name="boton" Value="Guardar">
<input type ="submit" class="btn btn-danger" name="boton" Value="Cancelar">
</form>
<?php
if ($acceso=="aprobado") {
echo "<h1>Registro Guardado con exito....</h1>";
}
?>
</div>
</div>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="js/[Link]"></script>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="js/[Link]"></script>
</body>
</html>
 Ingresar al sistema de votación
o Valida personal
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<
<!-- Bootstrap -->
<link href="css/[Link]" rel="stylesheet">
<link href="css/[Link]" rel="stylesheet">

<!-- HTML5 shim and [Link] for IE8 support of HTML5 elements and
media queries -->
<!-- WARNING: [Link] doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script
src="[Link]
<script
src="[Link]
<![endif]-->
</head>
<body>
<?php
require_once("bd/[Link]");
error_reporting(E_ALL ^ E_NOTICE);
session_start();
if (isset($_POST["persona"])) {
$persona=$_POST["persona"];
}
if (isset($_POST["boton"])) {
$boton=$_POST["boton"];
switch ($boton) {
case "Ingresar":
if (empty($persona) ) {
$vacio="si";
break;
}
$sql="SELECT * FROM personal WHERE Cedula = '$persona'";
$resultado=mysqli_query ($cx,$sql);
$datos=mysqli_fetch_array($resultado);
$per=$datos["Cedula"];
$nombre=$datos["Nombres"];
$apellidos=$datos["Apellidos"];
$IdPersona=$datos["IdPersona"];
if ($persona==$per) {
$_SESSION["nombres"]=$datos["nombres"];
$_SESSION["apellidos"]=$datos["apellidos"];
$_SESSION["Cedula"]=$datos["Cedula"];
$_SESSION["IdPersona"]=$datos["IdPersona"];
$_SESSION["permiso"]="Acceso Permitido";
$sql2="SELECT * FROM personalregistrado WHERE idpersona=
'$IdPersona'";
$resultado2=mysqli_query ($cx,$sql2);
$datos2=mysqli_fetch_array($resultado2);
$per2=$datos2["IdPersona"];
if ($IdPersona==$per2) {
$_SESSION["IdPersona"]=$datos2["IdPersona"];
?>
<script>
[Link]="[Link]";
</script>
<?php
}else {

?>
<script>
[Link]="cargar_personal.php";
</script>
<?php
}
//header("location: [Link]");
}else {
$acceso="denegado";
}
break;

}
}
?>
<div class="container-fluid">
<div class="row">
<div class="col-md-6 col-md-offset-3">
<h1 class="text-center">Sistema de Votación i-vote</h1>
</div>
</div>
<hr>
<div class="container">
<div class="center-block col-md-4 col-xs-8">
<form action="[Link]" role="form" method="post">
<div class="form-group">
<label for="personal">Ingreso al personal de Cerescos</label>
<input type="text" name="persona" class="form-control" id="persona"
placeholder="Cedula">
</div>

<input type ="submit" class="btn btn-primary" name="boton"


Value="Ingresar">
<input type ="submit" class="btn btn-danger" name="boton"
Value="Cancelar">
</form>

<div align="center">
<?php

if ($acceso=="denegado") {
echo "<h1>El numero de cedula no esta registrado como colaborador de
Cerescos...</h1>";
}

?>

</div>
</div>
</div>
</div>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="js/[Link]"></script>

<!-- Include all compiled plugins (below), or include individual files as


needed -->
<script src="js/[Link]"></script>
</body>
</html>

o Ingresar al sistema
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Sistema de Votación</title>
<!-- Bootstrap -->
<link href="css/[Link]" rel="stylesheet">
<link href="css/[Link]" rel="stylesheet">
<!-- HTML5 shim and [Link] for IE8 support of HTML5 elements and media
queries -->
<!-- WARNING: [Link] doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script
src="[Link]
<script src="[Link]
<![endif]-->
</head>
<body>
<?php
require_once("bd/[Link]");
$vacio = isset($_POST['variable']) ? $_POST['variable'] : null ;
$acceso = isset($_POST['variable']) ? $_POST['variable'] : null ;
session_start();
if (empty($acceso)) {
}
if (isset($_POST["usuario"])) {
$usuario=$_POST["usuario"];
}
if (isset($_POST["clave"])) {
$clave=$_POST["clave"];
}
if (isset($_POST["boton"])) {
$boton=$_POST["boton"];
switch ($boton) {
case "Ingresar":
if (empty($usuario) && empty($clave)) {
$vacio="si";
break;
}
$sql=" SELECT * FROM personalregistrado WHERE idusuario = '$usuario'
AND Contrasena = '$clave' ";
$resultado=mysqli_query ($cx,$sql);
$datos=mysqli_fetch_array($resultado);
$per=$datos["IdUsuario"];
$cla=$datos["Contrasena"];
if ($usuario==$per AND $clave==$cla) {
$_SESSION["nombre"]=$datos["nombre"];
$_SESSION["nivel"]=$datos["nivel"];
$_SESSION["permiso"]="Acceso Permitido";
?>
<script>
alert('bienvenido al sistema');
[Link]="[Link]";
</script>
<?php
//header("location: [Link]");
}else {
$acceso="denegado";
}
break;
}
}
?>
<div class="container-fluid">
<div class="row">
<div class="col-md-6 col-md-offset-3">
<h1 class="text-center">Sistema de Votación i-vote</h1>
</div>
</div>
<hr>
</div>
<div class="container">
<div class="center-block col-md-4 col-xs-8">
<form action="[Link]" role="form" method="post">
<div class="form-group">
<label for="Usuario">Usuario</label>
<input type="text" name="usuario" class="form-control" id="usuario"
placeholder="Usuario">
</div>
<div class="form-group">
<label for="ejemplo_password_1">Contraseña</label>
<input type="password" name="clave" class="form-control"
id="ejemplo_password_1"
placeholder="Contraseña">
</div>
<input type ="submit" class="btn btn-primary" name="boton" Value="Ingresar">
<input type ="submit" class="btn btn-danger" name="boton" Value="Cancelar">
</form>
</div>
</div>
<div align="center">
<?php

if ($acceso=="denegado") {
echo "<h1>Acceso denegado.. Usuario o clave erronea...</h1>";
}

if ($vacio=="si") {
echo "<h1>Debe ingresar Usuario y clave</h1>";
}
?>

</div>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="js/[Link]"></script>

<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="js/[Link]"></script>
</body>
</html>
 Votar
o Elegir el proceso electoral
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Sistema de Votación</title>
<!-- Bootstrap -->
<link href="css/[Link]" rel="stylesheet">
<link href="css/[Link]" rel="stylesheet">
<!-- HTML5 shim and [Link] for IE8 support of HTML5 elements and
media queries -->
<!-- WARNING: [Link] doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script
src="[Link]
<script
src="[Link]
<![endif]-->
</head>
<body>
<?php
require_once("bd/[Link]");
error_reporting(E_ALL ^ E_NOTICE);
$vacio = isset($_POST['variable']) ? $_POST['variable'] : null ;
$acceso = isset($_POST['variable']) ? $_POST['variable'] : null ;
session_start();
$cedula=$_SESSION["cedula"];
$IdPersona=$_SESSION["IdPersona"];
$sql1="SELECT Cedula, Nombres,Apellidos FROM personal WHERE
IdPersona = '$IdPersona'";
$resultado2=mysqli_query ($cx,$sql1);
$datos2=mysqli_fetch_array($resultado2);
$per2=$datos2["Cedula"];
$nombres2=$datos2["Nombres"];
$apellidos2=$datos2["Apellidos"];
if (empty($acceso)) {
}
if (isset($_POST["proceso"])){
$proceso=$_POST["proceso"];
}else{
$proceso="";
}
if (isset($_POST["NombreProcesoElectoral"])){
$nombre=$_POST["NombreProcesoElectoral"];
}else{
$nombre="";
}
if (isset($_POST["cedula_candidato"])){
$cedula_candidato=$_POST["cedula_candidato"];
}else{
$cedula_candidato="";
}
if (isset($_POST["cod_candidato"])) {
$cod_candidato=$_POST["cod_candidato"];
}
if (isset($_POST["cedula"])) {
$alu=$_POST["cedula"];
}
if (isset($_POST["boton"])) {
$boton=$_POST["boton"];
switch ($boton) {
case "votar":
if (empty($proceso)){
?>
<script>
alert('Confirme el proceso');
</script>
<?php
break;
}
$sql4="select IdProcesoElectoral,NombreProcesoElectoral from
procesoelectoral where IdProcesoElectoral='$proceso'";
$resultado4=mysqli_query($cx,$sql4);
$datos4=mysqli_fetch_array($resultado4);
$IdProcesoElectoral=$datos4["IdProcesoElectoral"];
$per5=$datos4["NombreProcesoElectoral"];
$_SESSION["IdProcesoElectoral"]=$datos4["IdProcesoElectoral"];
?>
<script>
[Link]="[Link]";
</script>
<?php
break;
if ($resultado){
$acceso="aprobado";
?>
<?php
}
}
}

?>
<div class="container-fluid">
<div class="row">
<div class="col-md-6 col-md-offset-3">
<h1 class="text-center">Sistema de Votación</h1>
</div>
</div>
<hr>
</div>
<div class="container">
<div class="center-block col-md-4 col-xs-8">
<td><?php echo "<font size='5' color='blue'>Bienvenido:</font>"."<font
size='5' color='red'>".$_SESSION["nombre"]."</font>";
echo "<font size='4' color='black'><p>$nombres2 $apellidos2</p></font>";
echo "<font size='4' color='black'><p>Cedula No.: $per2</p></font>";
?></td>
<form name ="acceso" action="[Link]" role="form"
method="post">
<div class="form-group">

<fieldset>
<legend><em><strong>Procesos Electorales</strong></em></legend>
<?php

$sql="select * from procesoelectoral where


EstadoProcesoElectoral='Abierto'";
$resultado=mysqli_query($cx,$sql);
$num_reg=mysqli_num_rows($resultado);//se usa cuando usas select ver
manual del profesor
?>
<select name="proceso" onchange="submit();">
<option value="" >Seleccione el proceso </option>
<?php
for ($i=0;$i<$num_reg;$i++){
//cuando se usa ciclo for es obligatorio que la variable de la matriz estè
//dentro del ciclo, es decir la variable del mysqli_fetch_array($resultado);
$reg=mysqli_fetch_array($resultado);
$codigo=$reg["IdProcesoElectoral"];
$nombre=$reg["NombreProcesoElectoral"];
?>
<option value="<?php echo $codigo; ?>"<?php if
($proceso==$codigo){echo "selected='selected'";}?>><?php echo $nombre;
?></option><!--para chrome-->
<?php
}
?>
</select>
</fieldset>
</td>
<br>
<br>
<input type ="submit" class="btn btn-primary" name="boton"
Value="votar">
<input type ="submit" class="btn btn-danger" name="boton"
Value="Cancelar">
</form>
</div>
</div>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="js/[Link]"></script>
<!-- Include all compiled plugins (below), or include individual files as
needed -->
<script src="js/[Link]"></script>
</body>
</html>

o Seleccionar el numero de lista del candidato

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Sistema de Votación</title>

<!-- Bootstrap -->


<link href="css/[Link]" rel="stylesheet">
<link href="css/[Link]" rel="stylesheet">

<!-- HTML5 shim and [Link] for IE8 support of HTML5 elements and media
queries -->
<!-- WARNING: [Link] doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script
src="[Link]
<script src="[Link]
<![endif]-->
</head>
<body>
<?php
require_once("bd/[Link]");
error_reporting(E_ALL ^ E_NOTICE);
$vacio = isset($_POST['variable']) ? $_POST['variable'] : null ;
$acceso = isset($_POST['variable']) ? $_POST['variable'] : null ;
session_start();
$cedula=$_SESSION["cedula"];
$IdProcesoElectoral=$_SESSION["IdProcesoElectoral"];
$IdPersona=$_SESSION["IdPersona"];
$sql1="SELECT Cedula, Nombres,Apellidos,IdSucursal FROM personal
WHERE IdPersona = '$IdPersona'";
$resultado2=mysqli_query ($cx,$sql1);
$datos2=mysqli_fetch_array($resultado2);
$per2=$datos2["Cedula"];
$nombres2=$datos2["Nombres"];
$apellidos2=$datos2["Apellidos"];
$IdSucursal=$datos2["IdSucursal"];
$sql3="SELECT NombreProcesoElectoral FROM procesoelectoral WHERE
IdProcesoElectoral = '$IdProcesoElectoral'";
$resultado3=mysqli_query ($cx,$sql3);
$datos3=mysqli_fetch_array($resultado3);
$per3=$datos3["NombreProcesoElectoral"];
if (empty($acceso)) {

}
if (isset($_POST["proceso"])){
$proceso=$_POST["proceso"];
}else{
$proceso="";
}
if (isset($_POST["NombreProcesoElectoral"])){
$nombre=$_POST["NombreProcesoElectoral"];
}else{
$nombre="";
}

if (isset($_POST["cedula_candidato"])){
$cedula_candidato=$_POST["cedula_candidato"];
}else{
$cedula_candidato="";
}
if (isset($_POST["cod_candidato"])) {
$cod_candidato=$_POST["cod_candidato"];
}
if (isset($_POST["boton"])) {
$boton=$_POST["boton"];
switch ($boton) {
case "votar":
if (empty($proceso)){
?><script>
alert('Ingrese número de lista');
</script>
<?php
break;
}
$sql5="INSERT INTO voto(IdProcesoElectoral, IdSucursal, VotoNumeroLista,
FechaVoto) VALUES ('$IdProcesoElectoral','$IdSucursal','$proceso',NOW())";
$sql6="INSERT INTO votantes (IdProcesoElectoral, IdPersona, FechaVoto)
VALUES ('$IdProcesoElectoral','$IdPersona',NOW())";
$resultado=mysqli_query($cx,$sql5);
if ($resultado or $resultado4){
$acceso="aprobado";
?>
<?php
}
$resultado4=mysqli_query($cx,$sql6);
}
}
?>
<div class="container-fluid">
<div class="row">
<div class="col-md-6 col-md-offset-3">
<h1 class="text-center">Sistema de Votación</h1>
</div>
</div>
<hr>
</div>
<div class="container">
<div class="center-block col-md-4 col-xs-8">
<td><?php echo "<font size='5' color='blue'>Bienvenido:</font>"."<font size='5'
color='red'>".$_SESSION["nombre"]."</font>";
echo "<font size='4' color='black'><p>$nombres2 $apellidos2</p></font>";
echo "<font size='4' color='black'><p>Cedula No.: $per2</p></font>";
echo "<font size='4' color='black'><p>Proceso: $per3</p></font>";
?></td>
<form name ="acceso" action="[Link]" role="form" method="post">
<div class="form-group">
<fieldset>
<legend><em><strong>Escoja el el número de la lista</strong></em></legend>
<?php
$sql="select IdProcesoElectoral,Numerolista from candidatos where
IdProcesoElectoral=$IdProcesoElectoral and EstadoInscripcion='Activo'";
$resultado=mysqli_query($cx,$sql);
$num_reg=mysqli_num_rows($resultado);//se usa cuando usas select ver manual
del profesor
?>
<select name="proceso" onchange="submit();">
<option value="" >Seleccione el número de la lista</option>
<?php
for ($i=0;$i<$num_reg;$i++){
//cuando se usa ciclo for es obligatorio que la variable de la matriz estè
//dentro del ciclo, es decir la variable del mysqli_fetch_array($resultado);
$reg=mysqli_fetch_array($resultado);
$codigo=$reg["Numerolista"];
$nombre=$reg["Numerolista"];

?>
<option value="<?php echo $codigo; ?>"<?php if ($proceso==$codigo){echo
"selected='selected'";}?>><?php echo $nombre; ?></option><!--para chrome-->

<?php
}
?>
</select>
</fieldset>
</td>
<br>
<br>
<input type ="submit" class="btn btn-primary" name="boton" Value="votar">
<input type ="submit" class="btn btn-danger" name="boton" Value="Cancelar">
</form>
<?php
if ($acceso=="aprobado") {
echo "<h1>Registro Guardado con exito....</h1>";
}
?>
</div>
</div>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="js/[Link]"></script>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="js/[Link]"></script>
</body>
</html>

 Resultados

<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-
Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-
scale=1"><title>Sistema de Votación</title>
<!-- Bootstrap -->
<link href="css/[Link]" rel="stylesheet"><link href="css/[Link]"
rel="stylesheet">
<!-- HTML5 shim and [Link] for IE8 support of HTML5 elements and media
queries -->
<!-- WARNING: [Link] doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script
src="[Link]
<script src="[Link]
<![endif]-->
</head><body> <nav class="navbar navbar-default"> <div class="container-
fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
data-target="#defaultNavbar1"><span class="sr-only">Toggle
navigation</span><span class="icon-bar"></span><span class="icon-
bar"></span><span class="icon-bar"></span></button> </div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="defaultNavbar1"> <div
class="menu1 col-md-7 col-md-offset-3">
<ul class="nav navbar-nav"> <li class="active">
<li><a href="cargar_personal.php">Registrar Personas</a></li>
<li><a href="cargar_procesoselec.php">Registrar Elecciones</a></li>
<li><a href="cargar_candidato.php">Registrar candidato</a></li>
<li><a href="[Link]">Resultados</a></li>
<li><a href="[Link]">Votación</a></li> </ul> </div> </div>
<!-- /.navbar-collapse -->
</div>
<!-- /.container-fluid -->
</nav><?php
require_once("bd/[Link]");
error_reporting(E_ALL ^ E_NOTICE);
$vacio = isset($_POST['variable']) ? $_POST['variable'] : null ;
$acceso = isset($_POST['variable']) ? $_POST['variable'] : null ;
session_start();
$cedula=$_SESSION["cedula"];
$nombre=$_SESSION["nombre"];
if (empty($acceso)) {}
if (isset($_POST["proceso"])){
$proceso=$_POST["proceso"];
}else{$proceso="";}
if (isset($_POST["nombre"])){
$nombre=$_POST["nombre"];
}else{
$nombre="";
}
if (isset($_POST["cedula_candidato"])){
$cedula_candidato=$_POST["cedula_candidato"];
}else{
$cedula_candidato="";
}
if (isset($_POST["cod_candidato"])) {
$cod_candidato=$_POST["cod_candidato"];
}
?>
<div class="container-fluid"> <div class="row"> <div class="col-md-6 col-md-
offset-3">
<h1 class="text-center">Sistema de Votación</h1> </div> </div>
<hr></div><div class="container">
<div class="center-block col-md-4 col-xs-8">
<td><?php echo "<font size='5' color='blue'>Bienvenido:</font>"."<font size='5'
color='red'>".$_SESSION["nombre"]."</font>"; ?></td>
<form name ="acceso" action="[Link]" role="form" method="post">
<div class="form-group"> <fieldset>
<legend><em><strong>Filtro de Proceso Electoral</strong></em></legend><?php
$sql="select IdProcesoElectoral,NombreProcesoElectoral from procesoelectoral";
$resultado=mysqli_query($cx,$sql);
$num_reg=mysqli_num_rows($resultado);//se usa cuando usas select ver manual
del profesor
?>
<select name="proceso" onchange="submit();">
<option value="" >Seleccione la sucursal </option>
<?php
for ($i=0;$i<$num_reg;$i++){
//cuando se usa ciclo for es obligatorio que la variable de la matriz estè
//dentro del ciclo, es decir la variable del mysqli_fetch_array($resultado);
$reg=mysqli_fetch_array($resultado);
$codigo=$reg["IdProcesoElectoral"];
$nombre=$reg["NombreProcesoElectoral"];
?>
<option value="<?php echo $codigo; ?>"<?php if ($proceso==$codigo){echo
"selected='selected'";}?>><?php echo $nombre; ?></option><!--para chrome-->
<?php}?></select></fieldset><br>
<table class="table table-hover table-striped text-center"border="1" cellspacing=1
cellpadding=2 style="font-size: 8pt"><thead><tr>
<td><font face="verdana"><b>Cedula del candidato</b></font></td>
<td><font face="verdana"><b>Nombre</b></font></td>
<td><font face="verdana"><b>Sucursal</b></font></td>
<td><font face="verdana"><b>Votos</b></font></td>
</tr> </thead><div class="tabla"><?php
$sql = "SELECT [Link], [Link], [Link],
count(VotoNumeroLista)as Votos
from voto v inner join procesoelectoral p on
[Link]=[Link]
inner join candidatos c on [Link]=[Link] and
[Link] =[Link]
inner join personal per on [Link]=[Link]
where [Link] ='$municipio'
Group by [Link], [Link], [Link]";
$resultado=mysqli_query($cx,$sql);
$numero = 0;
while($row = mysqli_fetch_array($resultado))
{ echo "<tr><td width=\"80%\"><font face=\"verdana\">" .
$row["Cedula"] . "</font></td>";
echo "<td width=\"10%\"><font face=\"verdana\">" .
$row["Nombres"] . "</font></td>";
echo "<td width=\"80%\"><font face=\"verdana\">" .
$row["IdSucursal"] . "</font></td>";
echo "<td width=\"80%\"><font face=\"verdana\">" .
$row["Votos"]. "</font></td></tr>";
$numero++; }
mysqli_free_result($resultado);
mysqli_close($cx);
?></table>
</form></div></div></div>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="js/[Link]"></script>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="js/[Link]"></script>
</body>
</html>
23. Manual de administración y usuario final de la aplicación y la base de datos.

MANUAL INSTALACIÓN APLICATIVO DE VOTACION ELECTRONICA

23.1 Manual instalación Aplicativo de votación electrónica

Objetivo

El presente documento tiene como finalidad servir de guía para la instalación del
aplicativo de votación electrónica.

El aplicativo permitirá gestionar el proceso de las elecciones de representantes y


directivos de la empresa Cerescos SAS.

Este manual se compone de los siguientes capítulos:


[Link]ón y ejecución de la aplicación
[Link]ón de la base de datos (adición de la información a la base de datos)

Instalación del aplicativo

 Como primer paso se debe instalar XAMPP, posterior copiar la carpeta ivote a
la ruta C:\xampp\htdocs\
 Se debe abrir una pestaña de explorador de internet Explorer o Chrome
 Ingresar a la ruta [Link]

Se debe abrir la siguiente ventana


Se configura el idioma, presione ctlr+Enter para ejecutar la consulta

Posteriormente se instala la aplicación para votacion electronica.

1. Creacion de la base de datos

Seleccionar la opcion Nueva


Ingresar el nombre de la base de datos “ivote” y luego se da clic en crear

Se creará la base de datos


Luego dar clic en la parte izquierda en el nombre de la base de datos ivote

Se da clic en importar
Se da clic en el botón seleccionar archivo y buscar la ruta

C:\xampp\htdocs\ivote\bd

Seleccionar el archivo [Link] y clic en abrir

En la parte inferior de mysql dar clic en el botón continuar


El sistema confirmara la creación de la base de datos

Posterior se debe cargar la data a las tablas, para esto se da clic en importar y seleccionar el
archivo [Link] que está en la ruta

C:\xampp\htdocs\ivote\bd
Dar clic en continuar y el sistema confirmara el cargue exitoso
23.2. Manual Usuario aplicación web votación electrónica

MANUAL USUARIO APLICACIÓN WEB VOTACION ELECTRONICA

Objetivo

El presente documento tiene como objetivo servir de guía para el uso de la


aplicación para realizar la votación de forma electrónica en la elección de representantes y
directivos de la empresa Cerescos SAS.

 Pantalla de autenticación – ingreso del usuario al sistema


Para poder ingresar al aplicativo es obligatorio identificarse, para ello es necesario
ingresar el número de la cedula

El sistema valida si el usuario ya está registrado, si no es así le solicita el registro

Se debe colocar los datos que solicita la plataforma, se debe asignar la clave y se da clic en
guardad.
Dar clic en salir

Al realizar esta acción aparece la página de ingreso al sistema de votación


Se debe ingresar los datos solicitados por el sistema

Cedula y contraseña y se da clic en ingresar.

Luego de ingresar el sistema remite a la selección del proceso electoral

En la lista desplegable se muestran los procesos electorales activos


En caso de dar clic en votar sin seleccionar el proceso el sistema enviara un mensaje
solicitando el ingreso de la información para seleccionar el proceso electoral

Cuando selecciona el proceso electoral el sistema solicitara que ingrese el número de la


lista del candidato por el que desea votar

Se debe seleccionar el número de la lista


Dar clic en votar y el registro es exitoso.
 Pantalla de autenticación - Ingreso del administrador al sistema

Para poder ingresar al aplicativo es obligatorio identificarse, para ello es necesario


ingresar el número de la cedula y contraseña.
Se selecciona el menú cargar candidato

Se valida la información y se da clic en guardar.


Registro exitoso.
 Consulta De Resultados

Se selecciona el menú resultados se escoge el proceso electoral que se desea consultar

Se puede validar el resultado de las elecciones de acuerdo a los parámetros establecidos


inicialmente.
24. Descripción de los requerimientos mínimos en hardware y software necesarios
para el buen funcionamiento de la aplicación y la base de datos.

Requerimientos de hardware
oServidor web
 Los requisitos mínimos recomendados son 256 MB de RAM para un
sitio web de un único ordenador y 85 MB de almacenaje.
 El tamaño de instalación puede reducirse en unos 50Mb para una
instalación de desarrollo, y en unos 26Mb para una instalación
normal de usuario final.
Requerimientos de software
oInstalación de xampp que contenga apache y mysql
 MySQL 5.0.41
 PHP 5.2.2 para el servidor de aplicaciones
 PHP 4.4.7
 phpMyAdmin 2.10.1
oNavegador web puede ser google Chrome
25. Documentación de la calidad de la experiencia

Las Bases de Datos juegan un papel importante en la mayoría de las áreas de la


organización, permitiendo almacenar grandes volúmenes de datos acerca de la empresa, los
cuales son percibidos a través de los usuarios, de la misma manera la información obtenida
de los datos almacenados debe estar en una forma que sirva para administrar, planear,
controlar y tomar decisiones dentro de una organización. (Scielo, 2014)

Nuestra experiencia frente al trabajo presentado es una serie de aprendizajes


constantes, puesto que no hemos tenido mucha experiencia referente al tema de bases de
datos, software, hardware y demás servidores que existen actualmente y que facilitan
nuestro trabajo en las organizaciones, sin embargo es imprescindible reconocer que es un
trabajo arduo lleno de nuevas experiencias y conocimientos que nos ayuda a conocer un
poco más de áreas con las cuales no tenemos mucho contacto en el día a día en nuestras
organizaciones, las bases de datos es un nuevo tema tanto que brinda experiencias
personales y laborales, ya que nos proporciona nuevas directrices para construirnos,
forjarnos y dar ese valor agregado para ser mejores especialistas en inteligencia de
negocios, logrando así la sinergia con las demás áreas del conocimiento y por ende de la
organización. Igualmente estamos actualizados con las nuevas tecnologías que se
exteriorizan cada día, puesto que las bases de datos ya no se usan de la manera tradicional y
toda la información es guardada en servidores, datos alojados localmente o en la nube.

Como grupo de trabajo podemos argumentar que las bases de datos son muy
importantes porque nos permiten almacenar y recuperar información en grandes volúmenes
y así, las personas encargadas de la organización puedan tomar decisiones más claras, por
lo que son esenciales para que cualquier organización u empresa pueda funcionar de
manera correcta pues los datos y la información organizada son un recurso básico para
todas las organizaciones.

Además de la base de datos, siempre es necesario el Sistema de gestión de bases de


datos, para que ayuden a administrar, almacenar, manipular y recuperar datos en las
computadoras, además para facilitar la comunicación entre el usuario y la base de datos.
Esto se logra porque el SGBD proporciona al usuario, los medios necesarios para poder
obtener información, introducir nuevos datos y actualizar los ya existentes.
26. Bibliografía

Berzal. (2015). El ciclo de vida de un sistema de información. Madrid: McGraw-Hill.

Cranor. (1997). L. F. Cranor, and R. [Link], Sensus: A security- conscious electronic

polling system for the internet. Hawaii International Conference on System Science,

1997. Pág. 3:560.

Date, C.J. (2001). Introducción a los sistemas de bases de datos (7ª ed.). Silberschatz, A;

Korth, H.F; Sudarshan, S. (1998). Fundamentos de bases de datos (3.a ed.). Madrid:

McGraw-Hill.

Docs. (2017). ¿Qué es un Cursor? Recuperado de: [Link]

es/sql/ado/guide/data/what-is-a-cursor?view=sql-server-2017

Ecured. (2016). Procedimientos almacenados. Recuperado de:

[Link]

Guebs. (2015). Capítulo 20. Disparadores (Triggers). Recuperado de:

[Link]

Idea. (20116). International Institute for Democracy and Electoral Assistance (IDEA)

Internacional, Recuperado «Una introducción al voto electrónico: Consideraciones

esenciales». Estocolmo, 2011.

Microsoft, (2007). Mantener la integridad referencial en diagramas de modelo de base de

datos. Recuperado de [Link]


referencial-en-diagramas-de-modelo-de-base-de-datos-80f60e10-1238-48f7-ab59-

2bd31b2f047a.

National Science Foundation. (2001). “Report on the National Workshop on Internet Voting:

Issues and Research Agenda” March 2001.

Scielo. (02 de 2014). La importancia de los datos . Obtenido de La importancia de los datos
: [Link]
16112004000100003

También podría gustarte