Control De Acceso Gimnasio Usta

TITULO

Base de datos para gimnasio de la Universidad Santo Tomás

Participantes

Camilo García Ruíz, Juan Esteban Ladino y Cristian Leonardo Vargas

Abstract

This document contains the description of the design of a database and its components to implement a registration system in the University of Santo Tomás. Different systems were used (bucket, flask and ubidots) to facilitate the understanding at the time of implementing this project. To have a good operation of this, a specific scheme was made for what would be the access of the administrator and the users who want to use this place, in turn certain requested data are of limited character as they are the cedula (CC that obligatorily Requires 3 characters)

Problema

El objetivo de este proyecto surge a partir de la alta demanda que hay en lugares deportivos y públicos. Con este proyecto, se busca ofrecer al usuario gran seguridad al momento de inscribirse y asistir al gimnasio. A su vez, también le permite al usuario por medio de una aplicación tener una idea de que horario puede ser el mas adecuado para asistir a este lugar.

Diseño (Arquitectura HW)

TEC123.jpg

Desarrollo

Funcionamiento

El funcionamiento se basa en un registro tradicional, donde al usuario Administrador tendrá una cuenta de acceso, el administrador previamente debió llenar un registro similar al de los usuarios, donde se le solicitaron algunos datos como: nombre, numero de identificación, genero.
Posteriormente, el usuario que desea ingresar debe dirigirse hacia el administrador para que este le tome los datos respectivos solicitados para el registro.
Luego de tener un registro de las personas que desean hacer uso de este espacio, estos usuarios cada vez que van a ingresar al gimnasio deben registrar su llegada y luego de hacer su actividad deportiva el usuario procede a salir del lugar y a su vez hay un registro de salida que se mostrara.

Posibles aplicaciones

Este sistema se puede implementar en espacios o escenarios donde todos los días hay congestión debido a la cantidad de usuarios y a su vez se deba llevar un orden y un almacenamiento de las personas que hagan uso de dicho lugar, un ejemplo de estos lugares pueden ser: Aeropuertos, conciertos, eventos al aire libre, entre otros.

  • En Universidades se maneja este sistema para llevar un registro de las personas que han ingresado y que han salido de la institución.

*

  • En aeropuertos se implementa esta base de datos para llevar registros de las personas que van a viajar, asiento asignado, descuentos ofrecidos, entre otros.

Dificultad encontrada

Durante el desarrollo del proyecto, se presentaron diversas situaciones en donde se hizo uso de diversas investigaciones para poder dar solución. Las dificultades presentadas principalmente fue la captura y el entrelazamiento de Bucket con la base de datos al hacer procesos de registro de usuario.

Configuración - paso a paso

A continuación, se muestra el código pertinente en donde se hace la configuración paso a paso de la interacción del usuario con el sistema, según lo especialidad del usuario.

CONEXIÓN BASE DE DATOS
El siguiente código muestra la configuración pertinente acerca de la conexión de base de datos en donde se hace énfasis en la importación de MYSQL

++ Configuración en PC 

# -*- coding: utf-8 -*-

import MySQLdb
import os

#Conectar a la base de datos

try:

    db = MySQLdb.connect("localhost","root","cristian","mydb")

    cursor = db.cursor()
    cursor2 = db.cursor()

except:

    print "No se ha podido esteblecer conexion con el servidor."

    raw_input()

    exit

**AGREGACIÓN USUARIO Y ESPECIFICACIONES
Mediante un Menú, el usuario realiza diversas configuraciones donde se especifican las diversas identificaciones del usuario según su profesión o labor**

#Funcion ingresar

def ingresar():

    print "********** Agregar Usuario **********: \n"

    opc = raw_input("Ingrese el Tipo De Persona :\n 1)Estudiante \n 2) Administrativo \n 3)Profesores \n ")

    if opc =="1":

     Nombre = raw_input("Ingrese Los Nombres : ")

     Apellido = raw_input("Ingrese Los Apellidos : ")

     Genero = raw_input("Ingrese El Genero De La Persona: ")

     Numero_Celular = raw_input("Ingrese El Numero Del Celular: ")

     TipoDocumento = raw_input("Ingrese el Tipo De Documento solo permite tres caracteres(C.C, T.I, O.P )  : ")

     NumeroDocumento = raw_input("Ingrese el Numero de Documento de la persona"+Nombre+" : ")

     Codigo = raw_input("Ingrese El codigo: ")

     Correo = raw_input("Ingrese el correo : ")

     Facultad = raw_input("Ingrese la facultad : ")

     Jornada = raw_input("Ingrese la jornada : ")

     sql = "INSERT INTO PERSONA(Nombre, Apellido, Genero, Numero_Celular,TipoDocumento,  NumeroDocumento)\
           VALUES('%s','%s','%s','%s','%s','%s')" % \
           (Nombre, Apellido, Genero, Numero_Celular,TipoDocumento,  NumeroDocumento)

     cursor.execute(sql) #Ejecuta los cambios en la base de datos 

     db.commit() #Confirma los cambios en la base de datos

     sql2 = "INSERT INTO ESTUDIANTE(Codigo, Correo, Facultad, Jornada,TipoDocumento,  NumeroDocumento)\
           VALUES('%s','%s','%s','%s','%s','%s')" % \
           (Codigo, Correo, Facultad, Jornada,TipoDocumento,  NumeroDocumento)

     cursor.execute(sql2) #Ejecuta los cambios en la base de datos 

     db.commit() #Confirma los cambios en la base de datos

    if opc =="2":

     Nombre = raw_input("Ingrese Los Nombres : ")

     Apellido = raw_input("Ingrese Los Apellidos : ")

     Genero = raw_input("Ingrese El Genero De La Persona: ")

     Numero_Celular = raw_input("Ingrese El Numero Del Celular: ")

     TipoDocumento = raw_input("Ingrese el Tipo De Documento solo permite tres caracteres(C.C, T.I, O.P )  : ")

     NumeroDocumento = raw_input("Ingrese el Numero de Documento de la persona"+Nombre+" : ")

     Dependencia = raw_input("Ingrese La Dependencia De la Persona "+Nombre+" : ")

     sql = "INSERT INTO PERSONA(Nombre, Apellido, Genero, Numero_Celular,TipoDocumento,  NumeroDocumento)\
           VALUES('%s','%s','%s','%s','%s','%s')" % \
           (Nombre, Apellido, Genero, Numero_Celular,TipoDocumento,  NumeroDocumento)

     cursor.execute(sql) #Ejecuta los cambios en la base de datos 

     db.commit() #Confirma los cambios en la base de datos

     sql2 = "INSERT INTO ADMINISTRATIVO(Dependencia,TipoDocumento,  NumeroDocumento)\
           VALUES('%s','%s','%s')" % \
           (Dependencia,TipoDocumento,  NumeroDocumento)

     cursor.execute(sql2) #Ejecuta los cambios en la base de datos 

     db.commit() #Confirma los cambios en la base de datos

    if opc =="3":

     Nombre = raw_input("Ingrese Los Nombres : ")

     Apellido = raw_input("Ingrese Los Apellidos : ")

     Genero = raw_input("Ingrese El Genero De La Persona (Masculino o Femenino): ")

     Numero_Celular = raw_input("Ingrese El Numero Del Celular: ")

     TipoDocumento = raw_input("Ingrese el Tipo De Documento solo permite tres caracteres(C.C, T.I, O.P )  : ")

     NumeroDocumento = raw_input("Ingrese el Numero de Documento de la persona"+Nombre+" : ")

     Jornada = raw_input("Ingrese la jornada de la persona:  "+Nombre+" : ")

     Facultad = raw_input("Ingrese la facultad de la persona: " +Nombre+" : ")

     sql = "INSERT INTO PERSONA(Nombre, Apellido, Genero, Numero_Celular,TipoDocumento,  NumeroDocumento)\
           VALUES('%s','%s','%s','%s','%s','%s')" % \
           (Nombre, Apellido, Genero, Numero_Celular,TipoDocumento,  NumeroDocumento)

     cursor.execute(sql) #Ejecuta los cambios en la base de datos 

     db.commit() #Confirma los cambios en la base de datos

     sql2 = "INSERT INTO PROFESORES(Jornada, Facultad, TipoDocumento,  NumeroDocumento)\
           VALUES('%s','%s','%s','%s')" % \
           (Jornada, Facultad, TipoDocumento,  NumeroDocumento)

     cursor.execute(sql2) #Ejecuta los cambios en la base de datos 

     db.commit() #Confirma los cambios en la base de datos

    RegresarMenu()

CONFIGURACIÓN PARA LA BUSQUEDA DE USUARIO EN BASE DE DATOS TRAS LA CREACIÓN DE LOS MISMOS
#Funcion para buscar el usuario en la basedd

def Buscar():

    sql = "SELECT * FROM PERSONA"

    cursor.execute(sql)

    resultados = cursor.fetchall() #muestra la fila

    for row in resultados:

        print "Nombres: %s  Apellidos: %s  Celular: %s Genero: %s Tipo Identificacion: %s Numero Identificacion: %s" %(row[0],row[1],row[2],row[3],row[4],row[5])

    RegresarMenu()

**CONSULTA POR NÚMERO DE CEDULA** 

#Consultar por la cedula                     

def consultarCedula():

    buscarcedula = raw_input("Ingrese La Cedula De La Persona ")

    sql = "SELECT * FROM PERSONA WHERE NumeroDocumento = '%s'" %(buscarcedula)

    cursor.execute(sql)

    resultados = cursor.fetchall()

    for row in resultados:

        print "Nombre:   " , row[0]

        print "Apellido:  "  , row[1]

        print "Numero Celular:" , row[2]

        print "Genero:      " , row[3]

    print "Tipo De Identificacion:      " , row[4]

    print "Numero De Documento:      " , row[5]

    RegresarMenu()

**MODIFICACIÓN A USUARIOS**

#modificar        

def modificar():

    cedula = int(raw_input("Ingrese la cedula del usuario "))

    sql = "SELECT * FROM PERSONA WHERE NumeroDocumento = '%s'" %(cedula)

    cursor.execute(sql)

    resultados = cursor.fetchall()

    for row in resultados:

        print row

 MENU PARA LA MODIFICACIÓN DE UN USUARIO TENIENDO EN CUENTA PARÁMETROS DEL CLIENTE O USUARIO

    print "Que Desea Modificar Del Usuario, Seleccione una opción "

    print "1. - Nombres "

    print "2. - Apellidos "

    print "3. - Numero Celular"

    print "4. - Genero"

    print "5. - Tipo De Identificacion"

    print "6. - Numero De Documento   "

    print "0. - Volver al menu no modificar nada   "

    op=raw_input("")

    if op =="1":

        nombreN = raw_input("Escribe  el nuevo Nombre De La Persona: ")

        cursor.execute("UPDATE PERSONA SET Nombre = '%s' WHERE NumeroDocumento = '%s' " %( nombreN, cedula))

        db.commit()
        print " \033[1;31;47m"+ "Nombres modificados correctamente  " +'\033[0;m'
        RegresarMenu()

    if op =="2":

        apellidoN = raw_input("Escribe  Los Nuevos Apellidos : ")

        cursor.execute("UPDATE PERSONA SET Apellido = '%s' WHERE NumeroDocumento = '%s' " %(apellidoN, cedula))

        db.commit()
        print " \033[1;31;47m"+ "Apellidos modificados correctamente  " +'\033[0;m'
        RegresarMenu()

    if op =="3":

        celN=raw_input("Escribe  el nuevo Numero Celular : ")

        cursor.execute("UPDATE PERSONA SET Numero_Celular = '%s' WHERE NumeroDocumento = '%s' " %(celN, cedula))

        db.commit()
        print " \033[1;31;47m"+ "Celular modificado correctamente  " +'\033[0;m'
        RegresarMenu() 

    if op =="4":

        genN=raw_input("Escribe  el Genero de la persona (Solo se admite Femenino o Masculino) : ")

        cursor.execute("UPDATE PERSONA SET Genero = '%s' WHERE NumeroDocumento = '%s' " %(genN, cedula))

        db.commit()
        print " \033[1;31;47m"+ "Genero modificado correctamente  " +'\033[0;m'
        RegresarMenu()

    if op =="5":

        tipidN=raw_input("Escribe Tipo De Identificacion (Solo se  admiten C.C ,T.I ,C.E, O.P) : ")

        cursor.execute("UPDATE PERSONA SET TipoDocumento = '%s' WHERE NumeroDocumento = '%s' " %(tipidN, cedula))

        db.commit()
        print " \033[1;31;47m"+ "Tipo De Identificacion modificado correctamente  " +'\033[0;m'
        RegresarMenu()

    if op =="6":

        numidN=raw_input("Escribe El Nuevo Numero De Documento : ")

        cursor.execute("UPDATE PERSONA SET NumeroDocumento = '%s' WHERE NumeroDocumento = '%s' " %(numidN, cedula))

        db.commit()
        print " \033[1;31;47m"+ "Numero de Documento modificado correctamente  " +'\033[0;m'
        RegresarMenu()

    if op == "0":

    RegresarMenu()
    else:

    print "Ingreso Un Valor Erroneo Se le Redigira Al Menu Principal"

        RegresarMenu()

 #eliminar       

def eliminar():

    cedula = int(raw_input("Ingrese la cedula de la persona "))

    sql = "SELECT * FROM PERSONA WHERE NumeroDocumento = '%s'" %(cedula)

    cursor.execute(sql)

    resultados = cursor.fetchall()

    for row in resultados:

        print "Nombre:   " , row[0]

        print "Apellido:  "  , row[1]

        print "Numero Celular:" , row[2]

        print "Genero:      " , row[3]

    print "Tipo De Identificacion:      " , row[4]

    print "Numero De Documento:      " , row[5]

        print " \033[1;31;47m"+ "Quieres eliminar esta persona  " +'\033[0;m'

    eliminar = raw_input(" Escribe s para Si o N para No ")

    if eliminar == "s":

        cursor.execute("DELETE FROM PERSONA WHERE NumeroDocumento = '%s'" %(cedula))

        db.commit()

        RegresarMenu()

    else:

        RegresarMenu()

def RegresarMenu():

    print "------------------------------------------------------------"

    raw_input("\nPresion cualquier tecla para regresar al menu anterior...")

    Menu()

#MENU6

def Menu():

    print """ \033[2J\033[1;1f

    -----------------------------------------------------------------------------

      Sistema De Gestion Del Gimnasio Universidad Santo Tomas Sede-Bogota

    -----------------------------------------------------------------------------

      1. - Agregar Una Persona 

      2. - Listado de Personas

      3. - Consultar A Una Persona por Su Numero De Identificacion.

      4 -  Modificar una persona.

      5.-  Eliminar una Persona.

      6. - Finalizar el programa.

   -----------------------------------------------------------------------------

   """

    try:

        opcion = int(raw_input("\n  Ingrese una opción  "))

    except:

        print "\nError: El valor ingresado no es de tipo numerico, por favor vuelva a intentarlo"

        RegresarMenu()

    try:

        if opcion == 1:

            ingresar()

        elif opcion == 2:

            Buscar()

        elif opcion == 3:

            consultarCedula()

        elif opcion == 4:

            modificar()

        elif opcion == 5:

            eliminar()

        elif opcion == 6:

            print "El programa se esta cerrando..."

            try:
        cursosr.close()

                db.close()

                exit()

            except:

                exit()

    except:

        print "\nError Final"

        RegresarMenu()

Menu()
sudo screen /dev/ttyUSB0 115200

Configuración MySQL

A continuación, se muestra la configuración realizada mediante una diagrama de clase en mySQL, con el fin de captar el funcionamiento y atributos de las personas pertenecientes al proyecto a implementar, como se muestra a continuación

myswl.JPG

Código Implementación Usuario

  1. -*- coding: utf-8 -*-

import MySQLdb

#Conectar a la base de datos

try:

db = MySQLdb.connect("localhost","root","cristian","mydb")

cursor = db.cursor()
cursor2 = db.cursor()

except:

print "No se ha podido esteblecer conexion con el servidor."

raw_input()

exit

def Validarusuario():

buscarcedula = raw_input("Ingrese La Cedula De La Persona ")

sql = "SELECT * FROM PERSONA"

cursor.execute(sql)

resultados = cursor.fetchall()

Existenciauser=False

for row in resultados:

if str(row[5]) == buscarcedula:

print "Nombre: " , row[0]

print "Apellido: " , row[1]

print "Numero Celular:" , row[2]

print "Genero: " , row[3]

print "Tipo De Identificacion: " , row[4]

print "Numero De Documento: " , row[5]

Existenciauser=True

print "Bienvenido Al Gym De La Universidad Santotomas: " , row[0]
controlacceso = raw_input("Ingrese 1 para ingreso, 0 para salida ")

controlacceso = controlacceso+controlacceso

if Existenciauser == False :

print "Su Cedula No Esta Registrada Con El Gym De La Universidad Santo Tomás, Porfavor contacte a su administrador "

#print "Actualmente hay: "+controlacceso+" Personas en el gym"

Validarusuario()

Interfaz Administrador

Una vez hecha la implementación, se procede a hacer diversas pruebas en donde se verifica cada componente, como se muestra a continuación

prueba1.JPG

Prueba, opción 1. Creación

pruebas1.JPG

Una vez, hecho el registro se verifica si efectivamente el registro fue 100% efectivo

Registro.JPG
Registro2.JPG

Prueba, opción 2. Listado

prueba2.JPG

Prueba, opción 3. Consulta por indentificación

prueba31.JPG

Prueba, opción 4. Modificar

prueba4.JPG

Prueba, opción 5. Eliminar

prueba5.JPG

Interfaz Usuario

usuario.JPG

Configuración en Bucket

Después de un registro total, se hace una verificación acerca de la captura del registro de usuario en bucket, como se ve a continuación:

bucket.JPG

CONCLUSIONES

A través de diversos programas y plataformas se implemento una base de datos acerca del control de acceso para un gimnasio universitario,donde se especificó el funcionamiento fundamental de cada componente, la relación de estos con la fácil interacción con el usuario y la breve lectura del mismo.

ADJUNTOS

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License