“Proyecto
para el curso de Diseño y
Programación Orientada a
Objetos”
“Automatizador de Roles de Turno”
Descripción del Problema:
El problema a solucionar se presento en la Clínica Geriátrica
CAPREDENA
ubicada en la ciudad de Limache, esta clínica cuenta actualmente con 85
pacientes geriátricos distribuidos, por condición de salud y sexo, en 3 módulos; para un correcto
funcionamiento de la clínica, cada módulo debe contar con 5 Auxiliares de Enfermería,
dedicadas a atención de los pacientes, suministro de medicamentos orales e
intramusculares entre otras funciones; 2 Empleados de servicio, encargados del
aseo de cada modulo; y de 1 Enfermera, quien supervisa a Auxiliares, Empleados
de servicio y cuidadoras de enfermos, además de ser la responsable del modulo
ante cualquier problema que este presente.
Para que en cada momento se cumplan estos
requerimientos en la clínica, la Enfermera Jefe debe realizar la distribución de
los turnos para cada persona en cada modulo, proceso muy tedioso, lento y que
consume mucho tiempo que podría aprovecharse en otras labores, para esto se nos
pidió un programa computacional que resolviera este problema, realizando automáticamente
la distribución de turnos y entregando como resultado un archivo con la distribución
realizada.
Documentación:
Como solución al problema anteriormente explicado, se
creo un programa utilizando C++, orientado a objetos.
Este programa ocupa una amplia variedad de recursos
entregados por C++ como vectores, clases contenedoras, etc que hicieron mas fácil
la resolución del problema, el programa (disponible aquí) tiene
el siguiente esquema para distribuir turnos: en el directorio donde se
encuentra el ejecutable del programa, deben estar además 2 archivos de texto;
uno llamado “calendario.txt”,
que contiene datos necesarios para el programa como numero de días de cada mes,
día de inicio de cada mes y día de termino de cada mes, desde mayo del 2003 y
hasta diciembre del 2010, usando este archivo, y suponiendo que este programa
se usara en fechas posteriores a diciembre del 2010, se hace muy fácil el
agregar más meses y años al final del archivo, y uno llamado “Empleados.txt”,
que contiene los nombres de todas las Auxiliares de Enfermería, Empleados de
Servicio y Enfermeras que actualmente
trabajan en la clínica, de esta manera, se puede ir actualizando este archivo
para poder hacer algún cambio si se requiere; el programa lee el archivo
empleados y guarda los nombres de las Auxiliares en un vector llamado
Auxiliares, los nombres de los Empleados de Servicio en un vector Empleados de
Servicio y los nombres de las Enfermeras en un vector Enfermeras, luego, hace
lo mismo con el archivo calendario, guardando en campos separados, el mes, año,
día inicio del mes, día de termino del mes y numero de días del mes, luego de
esto, pide al usuario que ingrese el mes y año para el que quiere realizar la distribución
de turnos, realiza la búsqueda en el vector correspondiente y crea los archivos
“Auxiliares.txt”, “Empleados_de_servicio.txt” y “Enfermeria.txt”, listos para
ser impresos y dados a conocer a la clínica; el programa cuenta con 14
archivos:
1.
Aux_de_Enfer.cpp: Archivo que
contiene todos los métodos ocupados en la clase Auxiliar de Enfermería,
como Display, reparte, add, etc.
2.
Empleados_de_Servicio.cpp:
Archivo que contiene todos los métodos
ocupados en la clase Empleado de Servicio.
3.
Enfermeras.cpp: Archivo con todos los métodos para la clase
Enfermeras.
4.
Aux_de_Enfer.h: Correspondiente
archivo .h que contiene los prototipos de los métodos implementados en Aux_de_Enfer.cpp.
5.
Empleados_de_Servicio.h: Archivo
.h con los prototipos de los métodos en Empleados_de_Servicio.cpp.
6.
Enfermeras.h:
.h con los prototipos de las
funciones implementadas en Enfermeras.cpp
7.
Contenedor.cpp: Archivo
con métodos para la clase contenedor, que es la que busca el mes y año especificado
por el usuario y retorna el vector resultado búsqueda que contiene todos los
datos correspondientes al mes y año especificado (numero de días, día inicio, día
termino).
8.
Contenedor.h:
Correspondiente .h que contiene los
prototipos de los métodos de contenedor.cpp.
9.
Item.cpp: Archivo
con los métodos de la clase ítem (almacena los datos leídos desde
calendario.txt).
10.
Item.h:
Prototipos de los métodos de la clase
Ítem.
11.
Proyecto.cpp:
Archivo con el Main del programa, lee
archivos txt, recoge los datos ingresados por el usuario y llama a las
funciones reparte de cada objeto de las clases.
12.
Makefile:
Archivo que facilita la compilación del
programa y la creación del ejecutable.
Para una mayor explicación de cada archivo, se
recomienda revisar el código fuente de cada uno, que esta comentado para un
mejor entendimiento (“Aux_de_Enfer.cpp”,
“Empleados_de_Servicio.cpp”,
“Enfermeras.cpp”,
“Aux_de_Enfer.h”,
“Empleados_de_Servicio.h”,
“Enfermeras.h”,
“Contenedor.cpp”,
“Contenedor.h”,
“Item.cpp”
“Item.h”, “Proyecto.cpp”
y “Makefile”).
Instalación y Ejecución del
Programa:
El programa actualmente esta hecho para ser usado
usando el compilador y los comandos del servidor aragorn de la red del departamento de electrónica de la Universidad Técnica Federico Sta Maria, la próxima
etapa es la implementación del programa para ambiente Windows, usando
interfaces graficas mas amigables con el usuario, de manera de solucionar
eficientemente el problema presentado anteriormente, para la ejecución de este
programa, se necesita bajar el archivo “roles.zip”,
descomprimirlo usando un programa adecuado como “winzip” (bajándolo desde aquí) o cualquier otro programa compresor,
luego, estando ya en el servidor aragorn, se debe escribir make en la linea de
comandos y posteriormente, ejecutar el programa usando ./proyecto, con esto, el
programa lee de los respectivos archivos y crea los archivos “Auxiliares.txt”, “Empleados_de_servicio.txt”
y “Enfermeria.txt”, que están listos para ser impresos y publicados.
El programa además calcula las horas extra trabajadas
por cada Auxiliar, Empleado de Servicio y Enfermera en cada modulo, como manera
de comprobar la equitatividad de los turnos, evitando que algún empleado
trabaje menos o mas que otro.
Las principales dificultades encontradas en la solución
del problema radicaron no en la programación, sino que mas bien en los
requerimientos del usuario, como era de esperar, el usuario, y a medida que se
le iban mostrando avances del programa, iba realizando cambios en los
requerimientos de este, lo que significaba muchas veces comenzar de nuevo para satisfacer
las necesidades del usuario, como ejemplo de esto, podemos mencionar el
requerimiento inicial del usuario que suponía que al programa debía leer el
archivo Empleados.txt y realizar el solo, la distribución aleatoria de personar
por modulo, finalmente, el usuario pidió que el programa solo entregara un
espacio suficiente donde llenar los nombres de cada empleado en cada modulo, ya
que la rotación de Auxiliares de enfermería es muy alta y de esta manera
(llenando los nombres manualmente), se haría mas rápido y se tendría mayor
control sobre esto.
Links útiles al momento de
desarrollar el programa (y relacionados con el mismo):
·
http://profesores.elo.utfsm.cl/~agv/elo329/1s03/index.html
(capitulo de vectores)
·
http://www.objectcentral.com
Valparaíso, 9 de Junio de 2003