Está en la página 1de 23

 

Proyecto de Ingeniería: Cuarta entrega 


Marina ALCAIDE CEA  Sergio Pietro GHISLER GÓMEZ 

Loreto FRANCO MARTÍNEZ Marcos Eladio SOMOZA CORRAL 

17 de Mayo del 2020 

 
Índice 

Introducción 3 

Objetivos del proyecto. 4 

Diseño del sistema. 4 

Arquitectura del Hardware 10 

Desarrollo del proyecto. 13 

Pruebas. 16 

Trabajo futuro y líneas de mejora. 16 

Conclusiones. 17 

Control de revisiones 19 

Bibliografía 23 

Todo el código está disponible en GitHub: 

https://github.com/ProyectoIngenieriaUEM/grupos-pi-19-20-grupo-1-1 

Nuestro tablero de Trello: 

https://trello.com/b/bIPNiTCI/grupo-proyecto-ingenieria 
Introducción 

Para  esta  entrega,  que  supone  la  última  entrega  de  la  asignatura  y,  por  tanto, 
prácticamente  el  final  de  nuestro  proyecto,  hemos  realizado  un  trabajo  bastante 
exhaustivo,  tanto  del  feedback  que  nos  dio  el  profesor  como  de  nuestro  propio 
proyecto. 

Evidentemente,  somos  plenamente  conscientes  de  la  importancia  que  tiene  el 
feedback  que  nos  dio  el  profesor  para  la  entrega  anterior, puesto que nos va a dar una 
serie  de  carencias  o potenciales mejoras existentes en nuestro proyecto. Por otra parte, 
entendemos  que  igualmente,  necesitamos  estudiar  nosotros,  por  nuestra  cuenta,  el 
proyecto  que  estamos  haciendo, y más a estas alturas de curso, puesto que debemos y, 
afortunadamente,  somos  perfeccionistas,  y  estamos,  en  cierto  modo,  comprometidos 
con  el  proyecto  desarrollado,  por  lo  que  queremos  que  salga  lo  mejor  posible, 
intentando  sacar  los  errores  más  pequeños  para  conseguir  el  mejor  resultado.  Se 
podría  decir,  por  tanto,  que,  básicamente,  lo  que  hemos  hecho  para  esta  entrega  ha 
sido mejorar la funcionalidad y usabilidad de nuestro proyecto. 

Es  por  esto  que,  para  esta  entrega  no  había  que  añadir  ninguna  parte  en  sí, 
como  pudo  ser  para  la  entrega  anterior  la  incorporación  de  la  base  de  datos, sino que, 
en  este caso, el objetivo era dejar el proyecto prácticamente acabado, algo que creemos 
que  hemos  hecho  como  se  ha  explicado  en  el  párrafo anterior: mediante el estudio del 
feedback  que  el  profesor  nos  dio  para  la  entrega  anterior,  y  el  estudio  propio  del 
proyecto. 

Naturalmente,  hemos  hecho  todo  lo que va a mostrar este documento, GitHub y 


Trello,  siempre  cuidando  la  presentación  y  organización  requerida  para  la  entrega  del 
proyecto  en  sus  distintas  partes  (código,  memoria, PowerPoint, documentación, vídeos, 
etc.). 

Además,  en  esta  parte  nos  hemos  organizado  para  la  preparación  de  los 
diferentes  videos  que  darían  por  finalizado  el  trabajo  de  este Proyecto y ofreciéndonos 
la posibilidad de participar en el concurso PBS de la Escuela AID. 

 
Objetivos del proyecto. 

El  principal  objetivo  de  este  trabajo  es  la  creación  de  un  sistema  de  control  y 
gestión  de  empleados,  en  el  que  se registren los propios datos del empleado, así como, 
a  lo  largo  de  su  vida  como  trabajador  en  esa  empresa,  la  hora  a  la  que  entra y sale del 
trabajo,  guardándose  en  una  base  de  datos,  de  forma  que  se  refleje  si  está  realizando 
infracciones en ese ámbito de trabajo (por horarios). 

Esto  se  conseguirá  gracias  a  la  comunicación  entre  el  Hardware  (Arduino)  y  el 
Software (JAVA, base de datos). 

Otros  objetivos  secundarios  que  se  han  ido  originando  con  el  paso  de proyecto, 
son  la  creación  de  informes  de  los  empleados,  dar  de  baja  a  usuarios,  actualizar  los 
datos  de  un  usuario  y  implementar  una  pantalla  LCD  para  que  interactúe  con  el 
usuario al entrar y salir. 

Diseño del sistema. 

Una  vez  realizado  el  código  del  proyecto,  se procede a hacer una documentación sobre 


el  mismo, con el fin de aclarar posibles dudas y facilitar su entendimiento. Tal y como se 
va  a  ir  comprobando  según  se  vaya  leyendo  esta  documentación,  es  evidente  que  es 
muy  parecido,  tanto  la  forma  de  explicar,  como  el  contenido,  al  entregado  en  trabajos 
anteriores  de  la  asignatura.  Esto  es  debido  a  que  el  proyecto  ha  ido  evolucionando  y 
cambiando, pero, en esencia, sigue siendo el mismo. 

Tal  y  como  ocurrió  en  las  anteriores  entregas,  se  ha  vuelto  a  utilizar  la  librería 
Mig  Layout,  debido  a  la  importancia  que  tiene  a  la  hora  de  realizar  las  ventanas  de 
nuestro  programa,  al  igual  que se utilizó la librería PanamaHiteck, para la comunicación 
con  Arduino.  Sin  embargo,  para  esta  nueva  entrega,  hemos  necesitado  la  librería 
MySQL Conector Java, que permite la comunicación entre Java y MySQL. 

Para  explicar  mejor  el  funcionamiento,  se  va  a  hacer  una  especie  de  “recorrido” 
por  el  software,  por  lo  que,  lo  que  más  sentido  tiene  es  empezar  por  el  principio, 
evidentemente.  No  obstante,  para  esta  entrega,  creemos  que  va  a  ser  más  fácil,  tanto 
de  explicar,  como  de  entender,  si  se  explica  primero  la  novedad  más  importante  de  la 
primera  entrega:  la  base  de  datos. Como se ha podido ir viendo en anteriores entregas, 
hasta  ahora  un  vector  de  usuarios  actuaba  como  base  de  datos,  sin  embargo,  tras 
utilizar  MySQL,  ya  tenemos  una  base  de  datos  propiamente  dicha,  que  consta  de  tres 
tablas: 

● Usuarios:  en  esta  tabla  se  guardan  los  usuarios,  que  poseen  las  siguientes 
columnas o atributos: 
○ Tarjeta. 
○ Nombre. 
○ Apellidos. 
○ Cargo. 
○ HorasExtra:  columna  en  la  que  se  van  guardando  (sumándose)  las  horas 
extras que hay en total. 
○ Dentro:  booleano  (1  ó  0)  que  indica  si  el  usuario  está  dentro  del  trabajo 
(1) o si, por el contrario, no está (0). 
○ TimeStamp: fecha en la que se introduce  
● Horario:  horario  de  cada  usuario  (identificado  con  su  tarjeta),  que  contiene  las 
siguientes  columnas  Tarjeta,  DíaSemana,  horaEntrada  y  HoraSalida.  De  esta 
forma, para cada tarjeta habrá un total de 7 filas (una por cada día de la semana. 
● Infracciones:  tabla  en  la  que  se  guardarán  las  infracciones  de todos los usuarios 
(se identificará, de nuevo, con la tarjeta), y tendrá las siguientes columnas:  
○ Tarjeta. 
○ FechaInfraccion.  
○ TipoInfraccion: si es por salir antes de tiempo o por retraso. 
○ TiempoInfracción: tiempo total de infracción, en minutos. 

Una  vez  explicado  esto,  ahora sí que empezamos a explicar por dónde comienza 


el  recorrido  del  programa.  Lo  primero  que  nos  encontramos  es  el  Main,  que  es  el 
método  principal,  donde  se  inicia  la  gestión  de los usuarios y donde se inicia la ventana 
principal,  introduciendo  esa  gestión,  ya  iniciada  anteriormente  (a  partir  de  ahora,  nos 
referiremos  a  ella  como  ​Modelo​).  Dicha  ventana  es  un  JFrame  que  nos  ofrece  dos 
botones:  Gestor  y  Aplicación;  en  función  de  si  damos  a  uno  u  a  otro,  nos  llevará  otra 
ventana distinta, evidentemente, con finalidades muy diferentes. 
Empecemos  con  el  botón  Gestión,  que  nos  llevará  a  una  ventana  destinada  a  la 
gestión  de  los  usuarios.  Dicha  ventana,  que  toma  de la ventana principal el ​Modelo​, nos 
ofrece tres opciones: Dar de alta, Listar usuarios y Otras gestiones. 

● Dar  de  alta​:  esta  ventana  está  destinada,  tal  y  como  su  nombre  indica,  a  dar  de 
alta  a  los  nuevos  usuarios.  En  esta,  debemos  introducir  nuestros  datos 
personales  (nombre,  apellidos  y  cargo),  al  igual  que  el  horario  y  la  tarjeta,  todo 
ello  se  hizo  con  ayuda  de  un  controlador.  En  esta  ventana,  tras  introducir  todos 
los  datos  y  campos  requeridos,  se  introduce  en  la  base  de  datos.  Tal  y  como  se 
enseñó  en  entregas  anteriores,  creímos  interesante  que  el  usuario  no  tuviera 
que  introducir  manualmente  la  tarjeta,  sino que procediera a leerla por el lector. 
Aquí,  queremos  destacar  el  hecho  de  que,  en  el  caso  de  que  se  intente  dar  de 
alta  un  usuario  con  una  tarjeta  que  ya  existe  en la base de datos, aparecerá una 
ventana de error. 
● Generar  Informe:  Esta  opción  nos  genera  una  DefaultListView,  en  la  cual  se 
muestran  los  distintos  nombres  de  usuario,  con  sus  tarjetas,  decidimos  poner 
también  las  tarjetas,  ya  que  aunque  sea  poco  probable,  podría  darse  el  caso  de 
que  dos  personas  con  el  mismo  nombre  y  apellidos  trabajen  en  una  misma 
empresa.  Al  clicar  en  uno  de  los  usuarios,  se  nos  generará  un  informe  con  los 
datos  del  usuario,  y  sus  infracciones,  el  cual  podemos  imprimir  y  guardar  en  el 
formato que queramos. 

● Otras  gestiones​:  esta  opción  nos  llevará  a  otra  ventana,  en  la  que  nos  pedirá  el 
código  de  la  tarjeta  y  se  nos  darán  dos  opciones  más:  Dar  de  baja  y  Actualizar. 
Esto  lo  hicimos  así  ya  que,  para  la  realización  de  ambas  necesitamos  el  número 
de  tarjeta,  por  lo  que,  de  esta  forma,  consideramos  que  sería  más  cómodo  y 
compacto  a la hora de usarse. De igual forma que ha ocurrido en la pestaña para 
darse  de  alta,  lo  que  hicimos  fue  codificarlo  de  tal forma que no fuera necesario 
escribir  el  código  de  la  tarjeta  (por  la  misma  razón),  sino  que  únicamente 
pasándola por el lector fuera suficiente. 
○ Dar  de  baja:  al  dar  a  este  botón  se  da  de  baja  al  usuario  y propietario de 
la  tarjeta  previamente  introducida.  Una  vez  realizado  esto,  volveremos  a 
la  pantalla  principal,  de  tal  forma  que  se  permita  seguir  trabajando  en  la 
tarea que nos atañe ese momento. 
○ Actualizar:  para actualizar los datos de un usuario. Aquí encontramos otra 
evidente  novedad  con  respecto  a  entregas  anteriores,  puesto  que  esto 
estaba  aún  sin  codificar.  Como  hemos  dicho,  esta  clase  nos  permite 
cambiar  todos  los  datos  que  se  deseen  de  un  usuario,  a  excepción  de  la 
tarjeta.  Para  conseguir  una  mayor  comodidad  a  la  hora  de  realizar  esta 
tarea,  lo  que  se  hizo  fue  que,  una vez elegida la tarjeta del usuario que se 
quería  modificar,  se  autocompleta  con  los  datos  guardados  hasta  ahora, 
de  tal  forma  que  sólo  sea  necesario  cambiar  los  campos  deseados. 
Realmente,  lo  que  hace  esta  clase  es  dar  de  baja  al  usuario  para, 
seguidamente, darle nuevamente de alta con los datos ya cambiados. 

Todas  estas  ventanas  reciben  de  la  ventana  de  Gestión  el  ​Modelo​,  de  tal  forma 
que no se vuelve a iniciar de nuevo conduciendo a errores. 

Una  vez  explicada  la  ventana  de  Gestión,  pasamos  con  la  de  Aplicación,  que,  al 
igual  que  se  ha  ido  diciendo  anteriormente,  recibe  de  la  ventana  principal  el  ​Modelo ya 
inicializado.  Esta  ventana  permite  que,  al  pasar  nuestra  tarjeta  por  el  lector,  se 
muestren  nuestro  nombre,  y  la  base  de  datos  junto  con  el  programa  detecte  si  el 
usuario  está  entrando  o  saliendo  (poniéndolo  en  la  propia  ventana  de  la  aplicación),  y 
sabe  si ha entrado tarde o salido antes, procediendo en esos casos, a la creación de una 
infracción.  Además,  en  la  pantalla  conectada  en  la  placa  Arduino,  nos  aparecerá  un 
mensaje  diciendo  “Bienvenido,  nombreUsuario”  o  “Adiós,  nombreUsuario”,  (siendo 
nombreUsuario,  el  nombre  del  propietario  de  la  tarjeta)  en  función  de si está entrando 
al trabajo, o saliendo de él. 

En  cuanto  a  la  funcionalidad del botón “Atrás”, ya explicada y creada en entregas 


anteriores,  simplemente  vamos  a  comentar  que sigue estando presente en este avance 
del  proyecto,  puesto  que  consideramos  que  es  muy  interesante  tenerlo,  al  igual  que, 
tras  realizar  las  acciones  deseadas,  el  propio  programa  se  autodirigiese  a  la  pantalla 
principal. 

Lo  mismo  ocurre  con  la  eliminación  automática  de  los  JFrame’s  que  ya  hemos 
utilizado,  es  decir,  si,  por  ejemplo,  estamos  en  la  pantalla  principal  y  damos  al  botón 
“Aplicación”,  nos  dirigirá  a  la  pantalla  deseada,  a  la  vez  que  se  cierra  la  pantalla 
principal,  puesto  que  ya  la  hemos  utilizado  y  no  nos  sirve para nada tenerla. Esto se ha 
mantenido, debido a que lo seguimos considerando bueno tenerlo en nuestro proyecto. 

A continuación, vamos a explicar las clases que hemos implementado: 

● BBDD: clase destinada a la comunicación entre la base de datos de MySQL y Java, 
mediante  la  que  se  van  enviando  las  distintas  consultas a MySQL. Es importante 
añadir  que,  tal  y  como  se  ha  comentado  al  principio  de  este  apartado,  se  ha 
utilizado  la  librería  MySQL  Conector  Java,  que  es  quien  permite  la  comunciación 
entre  ambos.  Por  tanto,  en  función  de  lo  que  se  desee  hacer,  cada  una  de  las 
siguientes  clases  llamará  a  esta  para  realizar  cada  una  de  las  acciones  que  se 
deseen. 
● JavaRX​: clase que establece la comunicación entre Arduino y Java 
● Main:​ clase principal que nos dirige a la VentanaPrincipal, iniciando el programa. 
● Usuario:  objeto  que  contiene  la  información  de  un  usuario,  que  se  gestionan 
desde  el  GestorUsuarios (se va a explicar a continuación) y se guardan en la base 
de datos. Cada usuario tiene: 
○ String nombre: nombre del usuario. 
○ String apellidos: apellidos del usuario. 
○ String cargo: cargo que ocupa en la empresa. 
○ Tarjeta  tarjeta:  objeto  del  tipo  tarjeta  que  contiene  la  información  de  la 
tarjeta (más adelante se explica esta clase). 
○ int  horasExtra:  horas  extras que se calcularán con un método que tiene el 
usuario, cada vez que este salga de la empresa. 
○ Horario[]  horario:  Array  del  objeto  horario  que  contiene  el  horario  de 
cada dia de la semana (entrada y salida). 
○ ArrayList<Infracciones>  infracciones:  Lista  de  las  infracciones  que  ha 
cometido el usuario a lo largo de su vida laboral dentro de la empresa. 
○ boolean  dentro:  booleano  que  indica  si  el  usuario  está  dentro  o  fuera de 
la empresa. 
Es  importante  destacar  que,  en  esta  clase,  existen  los  métodos  necesarios  para 
gestionar  las  infracciones  a  nivel  usuario,  es  decir,  nos  permite  gestionar  las 
infracciones del usuario X. 
● GestorUsuarios​:  clase  que  gestiona  las  acciones  que  van  a  ir  dirigidas  a  los 
distintos  trabajadores  (anteriormente,  también  se  usaba  como  “base  de  datos” 
mediante  un  vector,  pero  tras  haber  implementado  la  base  BBDD,  explicada 
anteriormente,  con  mySQL,  la  clase  GestorUsuario  ya  no  tiene  que  desempeñar 
esa  tarea).  Esta  clase  es  la  que  se  inicializa  en  la  clase  principal  (​Main​,  explicado 
anteriormente)  y  que  se  va  cediendo  entre  cada ventana, de tal forma que no se 
pierdan  datos  y  el  proyecto  tenga  una  continuidad,  evitando  posibles  errores. 
Como  ya  hemos  dicho,  esta  clase  va  a  gestionar  las  distintas  acciones  que  se 
pueden realizar sobre los usuarios mediante los siguientes métodos: 
○ darAlta. 
○ darBaja. 
○ actualizar. 
○ listarUsuarios. (Este método ahora genera un informe). 
● Horario​:  esta  es  un  objeto  que nos crea los horarios en función de cada día de la 
semana. Esto se crea en un array dentro del objeto usuario. 
● Tarjeta​:  esta  clase  únicamente  tiene  el  atributo  código,  que nos permite acceder 
al  código  de  cada  tarjeta,  que  tanto  se  usa  en  los distintos métodos, puesto que 
es una forma segura de identificar a los distintos usuarios. 
● Infracciones​:  Objeto  que  maneja  la  información  de  las  infracciones,  estas  se 
guardarán  en  un  ArrayList,  de  tal  forma  que  cada  usuario  tenga  su  propio 
ArrayList  de  infracciones.  Las  infracciones  de  cada  usuario  se  podrán  listar, 
gracias  a  un  toString,  que  nos  mostrará  qué  infracciones  se  han  cometido, 
quedando,  por ejemplo: 

● Controlador​:  Clase  que  controla  la  vistaGestorUsuarios,  para  dar  de  alta  a  un 
usuario con los datos y campos dados.  
● ControladorActualizar​:  clase  que  controla  la  ventanaActualizar,  que  va  a  realizar 
la  tarea  de  actualizar  los  datos  de  un  usuario  ya  creado  (lo  que  va  a  hacer  va  a 
ser dar de baja, y, seguidamente, dar de alta al usuario con los datos nuevos). 

Además,  pese  a  que  parezca  un  detalle  pequeño,  es  muy  importante  cambiar 
ciertas partes del código en función del ordenador: 

● Puerto  de  arduino  que  se  utilice,  en  las  siguientes  clases:  VistaGestorUsuarios, 
JavaRX, VentanaAplicacion. 
● Conexión en función del sistema operativo que se use, en la clase BBDD. 

Por  último,  en  cuanto  a  lo  que  a  este  apartado  se  refiere,  vamos  a comentar un 
poco  el  diagrama  de  clases,  y  es  que,  el  diagrama  sigue  siendo  básicamente  el  mismo 
que  el  anterior,  a  excepción  de  la clase BBDD, por lo que se decidió consensuadamente 
no volver a adjuntar de nuevo este diagrama. 

Arquitectura del Hardware 


Para  el montaje del sistema Hardware, además de los elementos imprescindibles 
para  el  proyecto,  como  son,  la  placa  de  Arduino,  y  el  lector  de  tarjetas  NFC,  hemos 
utilizado  también  una  pantalla  LCD;  para  utilizar  estos  elementos  en  conjunto,  hemos 
requerido  la  utilización  de  una  protoboard,  ya  que  en  la  placa  Arduino  UNO,  no 
disponíamos  de  tantas conexiones. A continuación se muestra una breve explicación de 
cada elemento del sistema. 
 
● Placa  Arduino:  ​En nuestro equipo disponíamos de dos tipos diferentes de placa, 
la  UNO  y  la  MEGA,  por  lo que hemos tenido que se mostraran más adelantes las 
conexiones necesarias para cada una de estas. 
● Lector  NFC:  ​Elemento  fundamental  en  el  trabajo,  ya  que  el  proyecto  se  basaba 
en  la  implementación  de  este  lector,  para  tener  el  control  de  las  entradas  y 
salidas  de  un  usuario  a  una  empresa.  Este  lector  recibirá  las tarjetas, y los datos 
de  estas  serán  manejados  por  el  programa  codificado  en  JAVA,  el  cual  se  podrá 
conectar a una base de datos para  
● Pantalla  LCD:  ​Pantalla  que  nos  permite mostrar a los usuarios datos de manera 
interactiva,  para  que  estén  seguros que cuando entran, el programa detecta que 
entra, y cuando salen, el programa detecta que sale. 

Para  mostrar  la  ​arquitectura  del  hardware​,  nos  habría  gustado  hacer  un 
diagrama,  pero  la  página  web  tinkercad,  no  tiene  la  opción  de  añadir  un sensor RFID, y 
la  aplicación  fritzing,  se  ha  convertido  en  una  aplicación  de  pago,  por  otro  lado,  la 
aplicación  circuit.io,  no  nos  dejaba  cambiar  de  posición  las  conexiones.  Por  lo  que 
hemos optado por escribir las ​conexiones utilizadas: 

RFID  Arduino UNO  Arduino MEGA 

SDA  10  53 

SCK  13  52 

MOSI  11  51 

MISO  12  50 

GND  GND  GND 

RST  9  9 

3.3V  3.3V  3.3V 

LCD  ARDUINO UNO/MEGA 

VSS  GND 

VDD  5V 

VO  Potenciómetro 

RS  8 

RW  GND 

E  2 

D4  4 

D5  5 

D6  6 
D7  7 

A  5V 

K  GND 

 
Desarrollo del proyecto. 

Lo  primero  que  debemos  decir  en  este  aspecto  que  nuestro  proyecto  se  ha  ido 
desarrollando  en  varias  entregas,  lo  que  nos  ofrecía  la  posibilidad  de  que  el  profesor 
nos  fuera  corrigiendo  errores  y  mostrándonos  oportunidades  de  mejora,  reflejándose 
en  los  feedbacks,  lo  que  nos  ofrecía  una continua ayuda para realizar un proyecto de la 
forma más profesional posible. 

Una  vez  explicado  esto,  pasamos  a  analizar  un  poco  más  en  profundidad  el 
proyecto,  que  se  ha  desarrollado  en  varios ​lenguajes​: Java (nodo central), Arduino (para 
el uso del hardware) y mySQL (base de datos). 

En  cuanto  a  ​entornos​,  debemos  diferenciar  los  distintos  entornos  en  función de 
los lenguajes. 

En  lo  que  a  Java  respecta,  el  proyecto  se  ha  desarrollado  prácticamente  en  su 
totalidad  (veremos  una  pequeña  excepción  un  poco  más  adelante) en Eclipse, debido a 
la  facilidad  que  tiene  a  la  hora  de  utilizar  los  elementos,  complementos  y  librerías 
necesarios.  Sin  embargo,  no  encontrábamos  información  sobre  ciertos  complementos 
que  requeríamos  para  realizar  determinadas  partes  de  nuestro  proyecto,  como lo es la 
parte  de  generación  de  informes.  Este  hecho  nos  obligó  a  utilizar para ese momento el 
entorno  de  NetBeans  (esta  es  la  excepción  de  la  que  hemos  hablado  anteriormente), 
puesto  que  nos  fue  más  fácil  utilizar  el  plug-in  que  necesitábamos  para  esta  tarea,  y, 
como,  al  final,  tanto  NetBeans  como  Eclipse  son  IDE’s  (es  decir,  entornos  de 
programación),  simplemente  guardamos  la  parte  de  código  que se realizó en NetBeans 
y  lo  abrimos  desde  Eclipse.  Por  otra  parte,  la  parte  programa  en  Arduino  se  desarrolló 
en el propio software de Arduino. 

Cabe destacar que también se utilizó MySQL para la creación y administración de 
la  base  de datos, usada para almacenar registros de entrada/salida junto con horarios e 
infracciones  de  cada  empleado,  así  como  la  posibilidad  de  añadir  y  retirar  empleados. 
Mediante  XAMPP  y  gracias  a  phpMyAdmin,  se  creó  la  base  de  datos,  para  el  flujo  de 
información  se  utilizó  una  librería  determinada  que  conectaba  el  núcleo  java  con  la 
base  de  datos.  Las  querys  usadas  están  escritas  en  MySQL,  introducido  en  java 
mediante strings. 

 
 

A  continuación,  pasamos  a  hablar  acerca  de  las  librerías.  Aquí  se  van  a  mostrar 
las  más  importantes  o  las  que  más  se  han  usado,  sin  embargo,  se  han  implementado 
algunas  más  que  no  se  van  a  mostrar  aquí  con  el  fin  de  no extender innecesariamente 
la  memoria,  ya  que  no  son  especialmente  relevantes,  sino  que  se  han  utilizado  para 
hacer tareas más pequeñas. 

En  primer  lugar,  hemos  utilizado  ​PanamaHitek​,  que  nos  ha  permitido  la 
comunicación,  de  una  manera  relativamente  sencilla,  entre  JAVA  y  Arduino.  Ésta,  de 
hecho,  fue  la  primera  librería  que  utilizamos,  puesto  que  la  tarea  que  esta  librería 
realiza  es  fundamental  para  el  desarrollo  del  proyecto,  porque  pese  a  que  hay  otras 
formas,  esta librería es la más utilizada, y en parte es por la facilidad y lo práctico que es 
a la hora de utilizarlo. 

Por  otra  parte,  es  importante  que,  al  igual  que  se  han  “enlzado”  JAVA  y Arduino, 
se  puedan  “enlazar”  JAVA  y  phpMyAdmin,  y,  para  ello,  se  ha  utilizado  la  librería  ​MySQL 
Connector  Java​,  que  nos  permite  realizar  esa  tarea  de  una  forma  bastante  sencilla, 
ayudándonos a mejorar la funcionalidad del proyecto. 

La  última  librería  más  importante  que  se  va  a  comentar  es  la  de  ​Jasper  Reports​, 
que  nos  permite  conectarnos  a  una  base  de  datos,  desde  la  que  poder  generar 
informes.  Además,  nos  da  la  opción  de  diseñarlo  nosotros  fácilmente,  de  forma  que  lo 
hagamos de la manera que más se ajuste a nuestras necesidades. 

Ahora  bien,  como es evidente, no todo en este proyecto ha sido lo que habíamos 


deseado  en  un  primer  momento,  habiendo  dificultades  y  problemas,  que,  en  ciertos 
momentos, nos han desesperado totalmente. 

En  primer  lugar,  debemos  hablar  de  la  propia  dificultad  que  conlleva  el  trabajo 
en  grupo  entre  los  integrantes  del  grupo,  puesto  que,  en  parte  porque  esta  asignatura 
se  cursa  en  modalidad  online  y  en  parte  debido  a  la situación que se está afrontando a 
nivel  mundial.  Queremos  hablar  un  poco  de  esta  dificultad  ya  que,  la  forma  que 
teníamos  de comunicarnos los unos con los otros era mediante mensajes de WhatsApp, 
y  las  reuniones  las  hacíamos  por  Hangouts  y  Zoom,  sin  embargo,  por  mucho  que  nos 
viéramos  por  videollamada  o  pudiésemos  escribirnos  mensajes  no  puede  suplir 
completamente al hecho de estar en persona con la otra persona. Ahora bien, a nuestro 
parecer  esto  sí  que  suponía  un  problema,  pero  en  la  misma  medida  que  nos 
proporcionaba  una  oportunidad,  ya  que  esto  nos  puede  ayudar  cuando  estemos 
trabajando,  el  día  de  mañana;  pero  esto  es  algo  que  ya  se  comentará  más  en 
profundidad (ver C
​ onclusiones​). 

Por  otra  parte,  teníamos  que  tener  en cuenta la propia envergadura que tiene el 


proyecto,  debido  al  uso  de  diversos  lenguajes,  entornos,  librerías,  etc.,  que  aumentan 
considerablemente  la  dificultad  que  conllevaba.  También  es  cierto  que  el  profesor  nos 
dio  mucha  información  acerca  de  estos  aspectos,  sin  embargo,  y  precisamente  por 
estar  en  la  asignatura  en  la  que  estamos,  debíamos  aumentar  información  (no  lo 
decimos  como  un  hecho  negativo,  simplemente  como  un  hecho,  puesto  que  parte  de 
los objetivos de esta asignatura son de aumentar conocimientos por cuenta propia). 

Hablando  ahora  de  problemas  que  hemos  tenido  con  el  código,  los  hemos 
tenido constantemente, sin embargo, no los consideramos de por sí dificultades, puesto 
que es algo relativamente sencillo de que ocurra (son muchas cosas a tener en cuenta, y 
no es difícil equivocarnos en una letra, nombre, o comando), a no ser que haya afectado 
más  fuertemente  al  desarrollo  del  proyecto.  Y  es  que,  aunque  no  haya  habido  muchos 
problemas  así,  es  cierto  que  sí  que ha habido algunos, siendo los más importantes dos: 
un error de JAVA, y XAMPP para MacOS. 

En primer lugar, vamos a hablar del siguiente error que obteníamos en JAVA: 
 

Tras  mucho  investigar,  vimos  que  el  error  era  por  la  versión  (aunque,  en 
realidad,  es  algo  que  pone  en  el  propio  error,  pero  no  entendíamos  bien  qué  pasaba, 
puesto  que  teníamos  una  versión  bastante  nueva,  sino  la  más).  Por  lo  que  lo  que 
hicimos  fue  utilizar  unas  versiones  que  teníamos  antiguas,  y  esta  fue  la  solución  pero 
sólo  para  una  de  las  integrantes  del  grupo.  Sabemos  que  este  error  no  está  causado 
porque  hayamos  realizado  una  sintaxis  errónea  a  la hora de programar, sino que es un 
error debido a la versión de java, pese a que ni siquiera esta solución fue suficiente para 
todos los integrantes del equipo. 
Por  otra  parte,  una  gran  dificultad  que  tuvimos  fue  con  el  XAMPP  en  los 
ordenadores  MacOS,  debido  a  que  este  paquete  no  funcionaba  correctamente  en  este 
sistema  operativo.  Esto  impedía  su  contribución  en  las  tareas  de  MySQL.  Tras  recabar 
mucha  información,  encontramos  MAMP,  que  es  el  equivalente  para  dicho  sistema 
operativo. 

Otra  dificultad  que  tuvimos,  fue  a  la  hora  de  utilizar  SQL,  puesto  que,  aunque 
para  algunos  de  nosotros  esto  no  era  del  todo  nuevo,  es  cierto  que  no  estamos  tan 
acostumbrados  a  usarlo  como podemos estarlo con Java. Esto puede parecer un detalle 
sin  importancia,  pero  lo  cierto es que nos supuso una carga de trabajo superior debido, 
precisamente, a esto. 

Pruebas. 

Para  demostrar  el  correcto  funcionamiento  de  tanto  el  hardware  como  el 
software,  hemos  ido  mandando  en  cada  checkpoint  un  video  del  estado  del  mismo, 
además  esta  subido  todo  el  código  a  github  para  demostrar  la  veracidad  de  estos 
vídeos.  

Para  la  entrega  final  (examen) se incorporará un video más extenso y exhaustivo 


para demostrar el funcionamiento de este proyecto. 

Nota​:  No  estamos  seguros  de  haber  entendido  correctamente  este  apartado,  por  lo  que 
esperamos  el  feedback  del profesor para corregirlo en el caso de que fuera necesario para la 
entrega final. 

Trabajo en proceso para la entrega final. 


Consideramos  que  por  la  parte  de  código  y  hardware  habriamos  terminado, 
aunque  quizás  el  profesor  nos  de  alguna  recomendación  o  sugerencia  para  modificar 
alguna  parte,  por  lo  que  para  la  entrega  final,  quedaría terminar la presentación power 
point,  la  cual  ya  está  casi  terminada,  y  hacer  los  videos,  los  cuales  ya tenemos ideas de 
cómo  vamos  a  hacerlos;  sobre  todo,  nos  estamos  centrando  en  el  video  de 
presentación  corto,  ya  que  tiene  que  tener  un  contenido  más  amigable  y  fácil  de 
entender. 

Trabajo futuro y líneas de mejora. 


A continuación se muestran distintas mejoras e implementaciones que podría tener
este proyecto:
1. Creación de una aplicación, en el que un trabajador, tenga acceso a distintos
campos de su perfil, para poder revisar las infracciones, horas extra, horario… que
tenga en la base de datos.
2. Crear una maqueta en la que introducir todo el sistema hardware para que se pueda
implementar en una empresa sin tener todo el cableado, y complementos a la vista.
3. Implementar otros elementos a nuestro sistema como por ejemplo un buzzer, que
haga ruido cada vez que hay una entrada o salida, esto sería útil para que el usuario
pueda ver si se ha mandado correctamente la entrada/salida, sin necesidad de ver la
pantalla, puede ser una función que ayudaría a la empresa sobretodo si alguno de
sus empleados tiene alguna minusvalía ocular.

Conclusiones. 

Como  hemos  ido  viendo  a  lo largo de esta memoria, hemos comprobado que ya 


no  se  han  realizado  grandes  tareas  de  código  como  se  pudieron  hacer  para  las 
primeras  entregas,  ya  que,  en  aquel  momento  estábamos  construyendo  el  proyecto 
desde  cero,  y  ahora  estamos  añadiendo  pequeñas mejoras con el fin de perfeccionar la 
funcionalidad y, por tanto, la calidad de nuestro proyecto. 

Debemos  decir,  al  igual  que  se dijo en las entregas anteriores, que este proyecto 


ha  supuesto  todo  un  reto  para  nosotros,  en  el  que  en  un  primer  momento  supuso 
asustaba,  pero  que,  poco  a  poco,  hemos  sido  capaces  de  ir  sacándolo  adelante, 
mediante  objetivos  más  pequeños,  tanto  los  que  nos  poníamos nosotros como los que 
nos ponía el profesor de la asignatura. 

De  nuevo,  como  ya se ha explicado anteriormente (ver ​Desarrollo del proyecto​), lo 


primero  que  hicimos  para  realizar  esta  entrega  fue  revisar  el  feedback  que  nos 
proporcionó  el  profesor,  a  la  vez  que  realizábamos  nosotros  un  estudio  del  proyecto, 
para  ver  qué  líneas  de  mejora  quedaban  abiertas,  más  pequeñas  de  las  que  nos 
comentaba  el  profesor,  o  que  nosotros  considerábamos  importante.  Tras  esto, 
comenzamos a trabajar en el proyecto, estrictamente hablando. 

Prácticamente  para  concluir  el  trabajo, queremos añadir que, evidentemente, ha 


habido  problemas  en  el  desarrollo  del  mismo,  pero  que  en  su  gran  mayoría  hemos 
sabido  solucionar  o,  al  menos,  evitar,  de  forma  que  nos  ha  ayudado  a  crecer 
profesionalmente.  Un  aspecto  a  destacar,  como  ya  se  ha  dicho  en  el  ​Desarrollo  del 
proyecto​,  es  la  dificultad  que  conlleva  hacer  un  trabajo  entre  personas  que  no  pueden 
estar  juntas,  como  es  el  caso,  y  queremos  destacarlo  porque  esto  puede  suceder  en el 
plano  profesional  aunque  no  esté  preparado  así  inicialmente,  como  está  sucediendo 
actualmente  en  el  país,  de  forma  que  al hacer trabajos de esta forma en la universidad, 
se nos ayuda a mejorar en ese aspecto. 

Sin  embargo,  pese  a  que  en  esta  entrega  no  hemos  realizado  una  tarea  muy 
grande  de  código,  como  se  ha  mencionado  anteriormente,  en  su  momento  sí  que  se 
realizaron,  añadiendo  al  proyecto  todas  las  funciones  necesarias  para  que  el  proyecto 
tuviera  sentido  y  calidad  (dar  de  alta,  modificar,  generar  informes,  dar  de  baja,  etc.), 
conectar  con  la  base  de  datos  y  la  creación  de  las  ventanas  necesarias,  entre  otros.  Es 
por  esto que seguimos contentos con el resultado obtenido, pese a que como ya hemos 
dicho  en  los  apartado  de  ​Trabajo  en  proceso  o  ​Trabajo  futuro​,  queda  trabajo  por  hacer, 
que  en  algunos  casos  sí  que  vamos  a  realizar  para  la  entrega  final  del  proyecto,  o  que, 
por el contrario, no pensamos realizar para la misma por determinadas razones. 

   
Control de revisiones 

Para  saber  quién  ha  realizado  qué parte del trabajo, mejorando de esta forma la 


organización  interna  del equipo, se hizo la siguiente tabla, recomendada por el profesor 
para esta tarea: 

CAMBIO  FECHA  MODIFICAD DESCRIPCIÓN DEL CAMBIO 


O POR 

1  22/03/2020  Marina A. C.  Parte individual. 

2  23/03/2020  Sergio G. G.  Parte individual. 

3  25/03/2020  Loreto F. M  Parte Individual 

4  29/03/2020  Marcos S. C.  Parte Individual 

5  26/03/2020  Sergio G. G.,  Modificación del diagrama de clases. 


Marina A. C. 

6  26/03/2020  Sergio G. G.,  Explicación de los cambios del diagrama de 


Marina A. C.  clases (parte 1). 

7  27/03/2020  Marina A. C.  Introducción. 

8  28/03/2020  Loreto F.M  Prezzi. 

9  02/04/2020  Sergio G. G.  Pseudocódigo. 

10  02/04/2020  Sergio G. G.  Explicación de los cambios del diagrama de 
clases (parte 2). 

11  02/04/2020   Marina A. C.  Conclusiones parte 1. 


Sergio G.G 

12  03/04/2020  Sergio G. G.  Codificación 

13  04/04/2020  Marcos S.C  Corrección conclusiones parte 1. 

14  04/04/2020  Marcos S.C  Comenzado conclusiones parte 2. 

15  04/04/2020  Marcos S.C  Extra : Logger BBDD 

16  05/04/2020  Marcos S.C  Bibliografía - BBDD 

17  05/04/2020  Loreto F.M  Modificación Introducción 

18  05/04/2020  Loreto F.M  Modificación Diseño del sistema 

19  05/04/2020  Sergio G.G  Terminal de codificar el software 


Marina A.C 
20  05/04/2020  Sergio G.G  Arquitectura del hardware 

21  05/04/2020  Loreto F.M  Modificación Arquitectura del hardware 

22  05/04/2020  Sergio G. G.,  Modificación (2) del diagrama de clases, y 


Marina A. C.  explicación de la misma. 

23  05/04/2020  Marcos S.C  Extra : Logger BBDD. Modificación y corrección 

24  05/04/2020  Sergio G. G.,  Explicación de la codificación del SW. 


Marina A. C. 

25  05/04/2020  Marina A. C.  Conclusiones parte 2. 


Sergio G.G   
 

Tercera entrega 
 

26  23/04/2020  Sergio G. G.  Ordenación de archivos según los estándares. 


Marina A. C. 

27  24/04/2020  Marcos S.C  Creación de la clase BBDD en java 

28  24/04/2020  Marina A. C.  Comentar código que se llevaba hasta entonces. 

29  24/04/2020  Marcos S.C  Creación de la BBDD en phpMyAdmin 

30  25/04/2020  Sergio G. G.  Revisar y unificar las versiones de código 


realizadas por Marcos y Marina (había muchas 
colisiones). 

31  25/04/2020  Marina A. C.  Codificación ventana para actualizar usuario. 

32  25/04/2020  Sergio G. G.  Corrección (1) base de datos. 

33  25/04/2020  Marina A. C.  Solución del error:  

34  25/04/2020  Sergio G. G.  Implementar base de datos para --------------- 

35  25/04/2020  Sergio G.G.  Solucionar problema tarjetas duplicadas 

36  25/04/2020  Marina A. C.  Adaptar listar usuarios para la BBDD 


Sergio G.G. 

37  25/04/2020  Sergio G.G.  Relacionar BBDD con la aplicación 

38  25/04/2020  Marcos S.C  Comprobar relaciones CASCADE entre keys : ¿Si 
Sergio G.G.  borro un usuario, se borran sus respectivos 
horarios e infracciones? 

39  25/04/2020  Marcos S.C  Editar tablas usuarios en phpMyAdmin 

40  25/04/2020  Marcos S.C  Importación y exportación de archivo .sql para 


Sergio G. G.  comprobaciones tanto entre SO como 
importar/exportar. 

41  25/04/2020  Marina A. C.  Codificación clase para actualizar usuario. 

42  25/04/2020  Loreto F.M  Introducción (Tercera entrega) 

43  25/04/2020  Loreto F.M  Modificación Ventana otros: modificacion 


nombre pdte. actualizar 

44  26/04/2020  Loreto F.M  Documento Código Programa 

45  26/04/2020  Loreto F.M  Conclusiones. 

46  26/04/2020  Marina A. C.  Arreglar visualización listar usuarios. 

47  26/04/2020  Loreto F.M  Documento punto 3. Trello 

48  26/04/2020  Loreto F.M  Documento punto 4. Entrega git. 

49  26/04/2020  Marina A. C.  Revisión y corrección de la documentación del 


Sergio G. G.  código. 

50  26/04/2020  Marina A. C.  Revisión y corrección de la explicación de la 


Sergio G. G.  incorporación de la base de datos en el 
Marcos S. C  documento. 

51  26/04/2020  Marina A. C.  Revisión y corrección conclusiones. 


Sergio G. G. 

52  26/04/2020  Sergio G. G.  Realización del Read.me de github. 

53  26/04/2020  Sergio G. G.  Añadir el Read.me al documento. 

54  26/04/2020  Marina A. C.  Añadir explicación del hardware al documento. 


Sergio G. G. 

55  26/04/2020  Marcos S.C  Pruebas finales del código comprobando que 
Sergio G.G.  todo funciona a la perfección. 
Marina A. C. 

56  26/04/2020  Sergio G. G.  Vídeo explicativo. 

57  26/04/2020  Sergio G. G.  Exportar y subir a GitHub el archivo sql de php 
my admin. 

Cuarta entrega 
 
58  14/05/2020  Sergio G. G.  Creación de informes. 

59  14/05/2020  Marina A. C.  Cambio de la ventanaListar a DefaultListModel. 

60  14/05/2020  Sergio G. G.   Unión de los informes y la ventanaListar. 

61  14/05/2020  Marina A. C.  PowerPoint. 

62  14/05/2020  Sergio G. G.  Modificación ventanaListar para que también 


muestre los nombres y apellidos del usuario. 

63  14/05/2020  Marina A. C.  Función para la capitalización de nombre, 


apellido y cargo. 

64  17/05/2020  Loreto F.M  Modificación Introducción (Ultima parte) 

65  17/05/2020  Loreto F.M   Parte Preparación Videos 

66  17/05/2020  Marcos S.C.,  Desarrollo del proyecto - documentación 


Marina A. C. 

67  17/05/2020  Sergio G. G.  Corrección de la función actualizar. 


Marina A. C. 

68  17/05/2020  Marina A. C.  Introducción - documentación. 

69  17/05/2020  Sergio G. G.  Objetivos del proyecto - documentación. 


Marina A. C. 

70  17/05/2020  Sergio G. G.  Diseño del sistema - documentación. 


Marina A. C. 

71  17/05/2020  Sergio G. G.  Arquitectura del hardware - documentación. 

72  17/05/2020  Sergio G. G.  Pruebas. 

73  17/05/2020  Sergio G. G.  Vídeo realizado para esta entrega del proyecto. 

74  17/05/2020  Marina A. C.  Conclusiones. 

 
Bibliografía 

  

Antony  García  González  (enero  4,  2015), “Los 7 pasos a seguir para el manejo de MySQL 


en java”. Documento de internet:  
http://panamahitek.com/los-7-pasos-seguir-para-el-manejo-de-mysql-con-java/ 

Sheep  Code  (septiembre  19,  2013),  “Conexión  MySql  con  java usando eclipse”. Vídeo de 


internet: ​https://www.youtube.com/watch?v=FtCI3PIY4oE 

Antony  García  González  (agosto  17,  2014),”Comunicar  java  con  bases  de  datos  mysql”. 
Documento  de 
internet:​http://panamahitek.com/comunicar-java-con-base-de-datos-mysql/ 

Oracle corporation (2020). Enlace de descarga de la librería: 


https://dev.mysql.com/downloads/connector/j/5.1.html 

Ayam  (noviembre  12,  2018),  “Cómo  conectar  java  (eclipse)  con  base  de  datos  mysql”. 
Documento de internet: 
https://algoritmosyalgomas.com/como-conectar-java-eclipse-con-base-de-datos-mysql-
parte-1/ 

Nos  (Julio  1,  2010),  “Are  enums  supported  by  JDBC?”.  Foro  de  internet: 
https://stackoverflow.com/questions/3155967/are-enums-supported-by-jdbc 

Oracle  Corporation  (2019),  “Lesson:  JDBC  Introduction”.  Documentación  de  internet: 


https://docs.oracle.com/javase/tutorial/jdbc/overview/index.html 

Oracle Corporation (2020), “Chapter 5 Connector/J (JDBC) Reference”. Documentación de 
internet: 
https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-type-conversions.h
tml 

También podría gustarte