UNIVERSIDAD CATÓLICA DE CUENCA UNIDAD ACADÉMICA DE INGENIERÍA DE SISTEMAS, ELÉCTRICA Y ELECTRÓNICA CARRERA DE INGENIERÍA DE SISTEMAS SOLUCIÓN INFORMÁTICA DE NUTRICIÓN INFANTIL: MÓDULO DE EXPEDIENTES INFANTILES. TRABAJO DE TESIS PREVIA A LA OBTENCIÓN DEL TÍTULO DE INGENIERO DE SISTEMAS AIDA DEL ROCIO TENEZACA CAGUANA [email protected] Director: Ing. Leopoldo Pauta A. 2014 DECLARACIÓN Yo, Aida del Rocío Tenezaca Caguana, declaro bajo juramento que el trabajo aquí descrito es de mi autoría; que no ha sido previamente presentada para ningún grado o calificación profesional; y, que he consultado las referencias bibliográficas que se incluyen en este documento. La Universidad Católica de Cuenca puede hacer uso de los derechos correspondientes a este trabajo, según lo establecido por la Ley de Propiedad Intelectual, por su Reglamento y la normatividad institucional vigente. Aida del Rocío Tenezaca Caguana -i- CERTIFICACIÓN Certifico que el presente trabajo fue desarrollado por Aida del Rocío Tenezaca Caguana, bajo mi supervisión. Ing. Leopoldo Pauta Ayabaca DIRECTOR - ii - AGRADECIMIENTOS En primer lugar a Dios por haberme guiado por el camino de la felicidad hasta ahora en cumplir una de las metas planteadas en mi vida; en segundo lugar a cada uno de los que son parte de mi familia a mi ESPOSO Xavier Munzón que es el que me ha ayudado en los momentos más difíciles de mi carrera, mi amigo el que está en esos malos y buenos momentos , mi HIJA Mayte Munzón la que me da las fuerzas para seguir adelante por la que hago todo esto mi pedazo de vida, la que se ha esforzado por comprender que su madre tiene que estudiar para darle un mejor futuro, a mi PADRE es el que me apoyado con sus consejos y su frase que desde niño me la ha dicho “Quiero ver a mis hijos hechos unos profesionales”, a mi MAMA que es un ejemplo a seguir la mujer más valiosa que Dios me ha dado, la que me ayudado a cuidar a mi hija estos 5 años de estudio gracias mami , a mis hermanos que siempre ha estado hay para apoyarme. A todos ellos espero que en este momento se sientan orgullos de tener una esposa, madre, hija y hermana. Rocío Tenezaca C. - iii - DEDICATORIA Gracias a esas personas importantes en mi vida, que siempre estuvieron listas para brindarme toda su ayuda, en todo momento que los he necesitado en el transcurso de mi carrera, ahora me toca regresar un poquito de todo lo inmenso que me han otorgado. Con todo mi cariño está tesis se las dedico a ustedes: Mi esposo Xavier Papá Luis Mamá Aida Hermanos Gabriela y Efraín Y nuestra pequeña hija Mayte - iv - ÍNDICE DE CONTENIDOS DECLARACIÓN................................................................................................................................................................. i CERTIFICACIÓN .............................................................................................................................................................. ii AGRADECIMIENTOS .....................................................................................................................................................iii DEDICATORIA ................................................................................................................................................................ iv ÍNDICE DE CONTENIDOS .............................................................................................................................................. v LISTA DE FIGURAS .....................................................................................................................................................viii LISTA DE TABLAS ......................................................................................................................................................... xi LISTA DE ANEXOS ....................................................................................................................................................... xii RESUMEN ......................................................................................................................................................................xiii ABSTRACT .................................................................................................................................................................... xiv INTRODUCCIÓN. ............................................................................................................................................................. 1 CAPITULO I: GENERALIDADES ................................................................................................................................... 2 1.1 DEFINICIÓN DEL PROBLEMA ............................................................................................................................. 2 1.2 MARCO CONCEPTUAL DEL PROBLEMA .......................................................................................................... 2 1.3 PLAN DEL PROYECTO .......................................................................................................................................... 3 1.4 CONCEPTO DE LA METODOLOGIA R.U.P. .......................................................................................................... 4 1.4.1 FUNCIONAMIENTO DE LA METODOLOGIA R.U.P.......................................................................................... 4 1.5 PROCESO DE DESARROLLO DEL SOFTWARE.................................................................................................... 5 1.5.1. ADAPTAR EL PROCESO: ............................................................................................................................... 5 1.5.2. EQUILIBRAR PRIORIDADES: ...................................................................................................................... 6 1.5.3. DEMOSTRAR VALOR ITERATIVAMENTE: .............................................................................................. 6 1.5.3.1 Colaboración entre equipos: .............................................................................................................................. 6 1.5.3.2 Elevar el nivel de abstracción: .......................................................................................................................... 6 1.5.3.3 Enfocarse en la calidad: .................................................................................................................................... 6 1.5.3.4 Fundamentos del Enfoque orientado a Objetos ................................................................................................. 6 1.6 DESARROLLO DE COMPONENTES ....................................................................................................................... 8 1.6.1 CARACTERÍSTICAS DE CAMPO: ................................................................................................................ 8 1.7 ESTADO DEL ARTE .................................................................................................................................................. 8 1.7.1 FASES DE DESARROLLO DE UN SISTEMA INFORMÁTICO: ................................................................ 9 1.7.1.1 Etapa I: Análisis de los requisitos del software: ....................................................................................... 9 1.7.1.2 Etapa II: Diseño: .................................................................................................................................... 10 1.7.1.3 Etapa III: Generación de Código: .......................................................................................................... 10 1.7.1.4 Etapa IV: Pruebas: ................................................................................................................................. 10 1.7.1.5 Etapa V: Mantenimiento. ....................................................................................................................... 11 1.7 DESCRIPCIÓN Y SUSTENTACIÓN DE LA SOLUCIÓN ................................................................................... 11 CAPITULO II: ANÁLISIS............................................................................................................................................... 12 -v- 2.1 METODOLOGÍA APLICADA PARA EL DESARROLLO DE LA SOLUCIÓN ................................................. 12 2.1.1 IDENTIFICACIÓN DE REQUERIMIENTOS ....................................................................................................... 12 2.1.1.1 Realizar un análisis de requisitos de la solución informática de nutrición infantil: Módulo de expedientes infantiles. 12 2.1.1.1.1 Reconocimiento del problema...................................................................................................................... 12 2.1.1.2 Requerimientos funcionales ............................................................................................................................ 19 2.1.1.3 Requerimientos no funcionales ....................................................................................................................... 19 2.1.1.3.1 Requerimientos del Producto ....................................................................................................................... 19 2.1.1.3.2 Requerimientos Externos ............................................................................................................................. 20 2.1.2 META DEL SISTEMA INFORMÁTICO DE NUTRICIÓN INFANTIL .............................................................. 20 2.2 ANÁLISIS DE LA SOLUCIÓN ................................................................................................................................ 20 2.2.1 MODELO DEL NEGOCIO ............................................................................................................................... 20 2.2.2 EVALUAR EL CENTRO DE SALUD DONDE SE APLICARÁ EL SISTEMA DE NUTRICIÓN INFANTIL SINI……… ...................................................................................................................................................................... 20 A. Comprensión inicial del dominio del, SINI para centros de salud de la Ciudad de Cuenca en el área de nutrición infantil………................................................................................................................................................................... 22 B. Modelado del negocio inicial del SINI para centros de salud de la Ciudad de Cuenca en el área de nutrición infantil……....................................................................................................................................................................... 22 C. Caso de uso específico SINI, módulo de expedientes infantiles. .................................................................... 26 D. Tarjeta de descripción: Caso de uso específico expedientes infantiles ........................................................... 28 E. Diagrama de clases del Sistema ...................................................................................................................... 31 F. Modelo entidad relación, Sistema de Nutrición Infantil: Módulo de Expedientes infantiles .......................... 32 G. Diagrama de colaboración del sistema SINI ................................................................................................... 32 H. Diagrama de actividades del SINI ................................................................................................................... 33 CAPITULO III: DISEÑO ................................................................................................................................................. 34 3.1 ARQUITECTURA DE LA SOLUCIÓN ................................................................................................................. 34 3.2 ARQUITECTURA DE LA INFORMACIÓN ............................................................................................................ 34 3.2.1 ARQUITECTURA DE INFORMACIÓN EN LAS FASES DEL PROCESO DE DESARROLLO DE SOFTWARE: ................................................................................................................................................................... 35 3.2.2 FASE DE INICIO DE LA ARQUITECTURA DE LA INFORMACIÓN ..................................................... 36 3.2.3 FASE DE CONSOLIDACIÓN DE LA ARQUITECTURA DE LA INFORMACIÓN ................................. 38 3.2.4 FASE DE LA VALIDACIÓN DE LA ARQUITECTURA DE LA INFORMACIÓN .................................. 39 3.2.5 ROLES DEL PROCESO ................................................................................................................................ 40 3.3 DISEÑO DE LA INTERFAZ GRÁFICA................................................................................................................ 40 CAPITULO IV: CONSTRUCCIÓN Y PRUEBAS. ........................................................................................................ 54 4.1 CONSTRUCCIÓN .................................................................................................................................................. 54 4.2 PRUEBAS ............................................................................................................................................................... 66 OBSERVACIONES, CONCLUSIONES Y RECOMENDACIONES ............................................................................. 68 A. Observaciones: las siguientes observaciones después de haber concluido el proyecto son las siguientes ...... 68 - vi - B. Conclusiones: Al finalizar este trabajo teórico práctico, puedo concluir con lo siguiente: ............................. 68 RECOMENDACIONES Y TRABAJOS A FUTURO ..................................................................................................... 69 A. Recomendaciones:........................................................................................................................................... 69 B. Trabajos Futuros: ............................................................................................................................................ 69 REFERENCIAS BIBLIOGRÁFICAS. ............................................................................................................................ 70 ANEXOS .......................................................................................................................................................................... 72 ANEXO A: FORMTO DE LA ENCUESTA REALIZADA A LOS INFANTES DEL 10 AL 14 DE OCTUBRE, EN EL HOSPITAL VICENTE CORRAL MOSCOSO DE LA CIUDAD DE CUENCA. .......................................................... 73 ANEXO B: REPORTE DE LAS DIETA ASIGNADA AL PACIENTE ......................................................................... 76 ANEXO C: CODIGO FUENTE DIETA.JAVA ............................................................................................................... 77 ANEXO D: CODIGO FUENTE DE HISTORIAL.JAVA .............................................................................................. 89 ANEXO E: CODIGO FUENTE DE NUTRICION.JAVA ............................................................................................... 94 ANEXO F: CODIGO FUENTE DE PACIENTE.JAVA................................................................................................ 110 ANEXO G: CODIGO FUENTE DE PRINCIPAL.JAVA .............................................................................................. 125 ANEXO H: CÓDIGO FUENTE DE LAS VARIABLES DETALLE DIETA CLASS ................................................ 137 ANEXO D: CODIGO FUENTE DE HISTORIAL.JAVA ............................................................................................ 100 ANEXO E: CODIGO FUENTE DE NUTRICION.JAVA ............................................................................................. 107 ANEXO F: CODIGO FUENTE DE PACIENTE.JAVA................................................................................................ 128 ANEXO G: CODIGO FUENTE DE PRINCIPAL.JAVA .............................................................................................. 148 ANEXO H: CODIGO FUENTE DE LAS VARIABLES DETALLE DIETA CLASS ................................................ 164 - vii - LISTA DE FIGURAS Fig. 1 Porcentaje de desnutrición en niños y niñas menores de cinco años en las dos últimas décadas………………………………….………. 2 Fig. 2 Etapas metodológicas de un modelo espiral para el desarrollo de un SI…………………………………………………………………… 3 Fig. 3 Metodología y fases aplicadas al SINI (Sistema de Nutrición Infantil)……………………………………………………...…………….. 5 Fig. 4 Representación de una actividad en un modelo UML……………………………………………………………………………………… 10 Fig. 5 Representación de un actor en un modelo UML…………………………………………………………………………………………… 10 Fig. 6 Cuadro estadístico de la tabulación de la pregunta número uno, ¿Eres Un Niño O Una Niña?.................................................................... 16 Fig. 7 Cuadro estadístico de la tabulación de la pregunta número 2, ¿Con Qué Frecuencia Sueles Come Fruta?.................................................. 17 Fig. 8 Cuadro estadístico de la tabulación de la pregunta número tres, ¿con qué frecuencia sueles comer ensalada, verduras crudas o ralladas? (zanahoria, remolacha, etc)…………………………………… ........................................................................………………………………….. 17 Fig. 9 Cuadro estadístico de la tabulación de la pregunta número cuatro, ¿Con Qué Frecuencia Suele Comer Verduras Cocidas?...................... 17 Fig. 10 Cuadro estadístico de la tabulación de la pregunta número cinco, ¿Cuáles De Las Siguientes Frutas Te Gustan?.................................... 18 Fig. 11 Cuadro estadístico de la tabulación de la pregunta número seis, ¿Crees Que Comes Mucha O Poca Fruta?.............................................. 18 Fig. 12 Cuadro estadístico de la tabulación de la pregunta número siete, ¿Hay Fruta Que Te Guste Normalmente En Casa?............................... 18 Fig. 13 Cuadro estadístico de la tabulación de la pregunta número ocho, ¿Te Preparan/S En Casa Trozos De Fruta Para Comer Entre Horas? ............................................................................................................................. ..................................................................................................... 19 Fig. 14 Cuadro estadístico de la tabulación de la pregunta número nueve, ¿Llevas Normalmente Fruta Al Colegio?........................................... 19 Fig. 15 Cuadro estadístico de la tabulación de la pregunta número diez, ¿Cuáles De Las Siguientes Verduras Frutas Te Gustan O Cuáles No Te Gustan? .................................................................................................................. ............................................................................................. 19 Fig. 16 Cuadro estadístico de la tabulación de la pregunta número once, ¿Hay Verdura Que Te Guste Normalmente En Casa?.......................... 20 Fig. 17 El caso de uso administración de usuarios, respaldos y auditorias, del modelo de negocios inicial del SINI…………………............ Fig. 18 El caso de uso expedientes infantiles, del modelo de negocios inicial del SINI…………………………………………………………. 24 Fig. 19 El caso de uso diseño de dietas, del modelo de negocios inicial del SINI. ............................................................................................... 24 Fig. 20 La descripción del caso de uso administración de usuarios, respaldos y auditorias, del modelo de negocios inicial del SINI……….. 25 24 Fig. 21 La descripción del caso de uso Expedientes Infantiles, del modelo de negocios inicial del SINI………………………………………... 25 Fig. 22 La descripción del caso de uso Diseño de Dietas, del modelo de negocios inicial del SINI……………………………………………... 26 Fig. 23 Diagrama de caso de uso del modelo de negocios inicial del SINI………….............................................................................................. 26 Fig. 24 Diagrama de caso de uso específico, módulo de expedientes infantiles. .................................................................................................... 27 Fig. 25 Fig.25 Caso de uso específico del sistema de nutrición, registro datos del paciente…………………………………………….....…… 28 Fig.26 Caso de uso específico del sistema de nutrición, registro de hábitos del paciente………………………………………………………... 28 Fig.27 Caso de uso específico del sistema de nutrición, registro de dietas del paciente…………………………………………………………. 29 Fig. 28 Tarjeta de descripción para el diagrama de caso de uso específico, módulo de expedientes infantiles: Ingreso datos del paciente…….. 29 Fig. 29 Tarjeta de descripción para el diagrama de caso de uso específico, módulo de expedientes infantiles: visualizar dietas del paciente….. 30 Fig. 30 Tarjeta de descripción para el diagrama de caso de uso específico, módulo de expedientes infantiles: registrar hábitos del paciente….. 30 - viii - Fig.31 Tarjeta de descripción reporte de dietas de los pacientes…………………………………………………………………………………. 31 Fig.32 Tarjeta de descripción reporte nutricional de los pacientes……………………………………………………………………………… 31 Fig.33 Tarjeta de descripción reporte hábitos tanto físicos como alimenticios de los pacientes…………………………………………………. 32 Fig.34 Diagrama de clase general del sistema nutriciona....................................................................................................................................... 32 Fig. 35 Modelo de entidad relación del sistema informático de nutrición infantil SINI, Modulo de expedientes infantiles ……......................... Fig. 36 Diagrama de colaboración que indican las clases para la realización del caso de uso específico, módulo de expedientes infantiles…………………………………………………………………………………………………………………………………………... 33 Fig.37 Diagrama de actividades general del sistema nutricional ……………………………………………………………….……………...... 34 Fig. 38 Relación entre las fases del proceso de AI y los flujos de trabajo de RUP……………………………………………………………… 36 33 Fig. 39 Actividad que se desarrolla en el proceso………………………………………………………………………………………………… 36 Fig. 40 Trabajador del proceso que desarrolla una o varias actividades………………………………………………………………………….. 36 Fig. 41 Relación entre actividades, desarrollador y elementos de la fase de inicio del proceso de AI………………………………………….. 38 Fig. 42 Relación entre actividades, desarrolladores y elementos de la fase de consolidación del proceso de AI……........................................... 39 Fig. 43 Relación entre actividades, desarrolladores y elementos de la fase de validación del proceso de AI……………………………………. 40 Fig.44 Menú principal revisado del sistema informático de nutrición infantil SINI, módulo de expedientes infantiles del sistema. Establecido. 42 Fig. 45. Icono del pacientes………………………………………………………………………………………………………………………. Fig. 46. Icono del dietas………………………………………………………………………………………………………………………….. Fig. 47. Icono del nutricion……………………………………….……………………………………………………………………………… Fig.48. Icono del historial………………………………………………………………………………………………………………………… Fig.49 Iconos de operaciones…………………………………………………………………….………………………………………………. 42 42 43 43 43 Fig. 50 Menú Principal icono “PACIENTE” del sistema informático de nutrición infantil SINI, módulo de expedientes infantiles del sistema. …………………………………………………………………………………………………………………………………………………….. 44 Fig. 51 Módulo de expedientes infantiles datos del paciente……………………………………………………………………………………. 44 45 Fig. 52 Tabla de registro de pacientes. .............................................................................................................................. Fig. 53 Menú Principal Pestaña “DIETAS” del sistema informático de nutrición infantil SINI, módulo de expedientes infantiles del sistema. …………………………………………………………………………………………………………………………………………… 45 Fig. 54 Módulo de expedientes infantiles del sistema, dietas del paciente del sistema SINI……………………………………………….…… 46 Fig.55 Módulo de expedientes infantiles del sistema, dietas del paciente del sistema SINI “MANEJO DE DIETAS DEL PACIENTE”.……. 46 Fig. 56 Módulo de expedientes infantiles del sistema, dietas del paciente del sistema SINI “REGISTRO DE DIETAS”……………………… 47 Fig. 57 Módulo de expedientes infantiles del sistema: Hábitos del paciente del sistema SINI............................................................................... 47 Fig. 58 Módulo de expedientes infantiles; hábitos, donde el paciente registra sus hábitos alimenticio y físicos…................................................ 48 Fig. 59 Módulo de expedientes infantiles; hábitos, hábitos alimenticios de los pacientes……………….............................................................. 48 Fig. 60 Tablas de hábitos con sus respectivas equivalencias calóricas.................................................................................................................... 49 Fig. 61 Interfaz del hábito físico del paciente en el sistema de expedientes infantiles SINI................................................................................... Fig. 62 Interfaz del historial del paciente…………………………………………………………………………………………………………. Fig. 63 Registro de avances del paciente…………………………………………………………………………………………………………. Fig. 64 Estadistico del avance del paciente en tratamiento nutricional…………………………………………………………………………… Fig. 65 Ingresar un nuevo paciente……………………………………………………………………………………………………………….. 49 50 50 51 51 Fig. 66 Visualizar un nuevo paciente…………………………………………………………………………………………………………….. 52 Fig. 67 Visualizar un nuevo paciente…………………………………………………………………………………………………………….. 52 Fig. 68 Icono de ELIMINAR a un paciente………………………………………………………………………………………………………. 53 Fig. 69 Icono LIMPIAR los datos del paciente para poder ingresar uno nuevo………………………………………………………………….. 53 Fig. 70 Elegir un paciente para poder registrar las medidas nuevas……………………………………………………………………………… 54 Fig. 71 Imagen utilizada en los formularios que maneja usuarios de SINI. ……………………………………………………………………… 55 Fig. 72 Formulairo dietas. Java diseño……………………………………………………………………………………………………………. 56 Fig. 73 Textfield para ingreso de informacion personal del paciente…………………………………………………………………………….. 56 Fig. 74 Textfield para ingreso de informacion de la dieta del paciente…………………………………………………………………………… 57 - ix - Fig. 75 Tabla de dietas para el paciente…………………………………………………………………………………………………………… 57 Fig. 76 Tabla detalle de dietas del paciente……………………………………………………………………………………………………….. 57 Fig. 77 button del formulario de dietas.java………………………………………………………………………………………………………. 58 Fig. 78 Diseño del formulario de historial………………………………………………………………………………………………………… 58 Fig. 79 Textfield del formulario historial.java…………………………………………………………………………………………………….. 58 Fig. 80 Table del formulario historial.java………………………………………………………………………………………………………... 59 Fig. 81 Button del formulario historial.java………………………………………………………………………………………………………. 59 Fig. 82 Diseño del formulario de los habitos……………………………………………………………………………………………………… 59 Fig. 83 Textfiel del formulario nutricion.java…………………………………………………………………………………………………….. 60 Fig. 84 Button del formulario nutricion.java……………………………………………………………………………………………………... 60 Fig. 85 Tables del formulario nutricion.java……………………………………………………………………………………………………… 61 Fig. 86 Pannel del formulario nutricion.java……………………………………………………………………………………………………… 62 Fig. 87 Formularios de pacientes………………………………………………………………………………………………………………….. 62 Fig. 88 Textfield de pacientes.java……………………………………………………………………………………………………………… 63 Fig. 89 Button de pacientes.java………………………………………………………………………………………………………………… 63 Fig. 90 Tables de pacientes.java…………………………………………………………………………………………………………………. 63 Fig. 91 Formulario principal que contiene a los otros formularios……………………………………………………………………………….. 64 Fig. 92 Button del formularios principal.java…………………………………………………………………………………………………….. 64 Fig. 93 Deshtopannel del formularios principal.java……………………………………………………………………………………………… 65 Fig. 94 paquetes del sistema………………………………………………………………………………………………………………………. 66 -x- LISTA DE TABLAS Tabla I: Resultados de la encuesta aplicada a los infantes del Hospital Vicente Corral Moscoso De La Ciudad De Cuenca……………………………………………………………………………………………………………………… 13 Tabla II: Matriz De Pruebas Aplicadas Al Sistema informático de nutrición infantil…………………………………… - xi - 68 LISTA DE ANEXOS ANEXOS .......................................................................................................................................................................... 73 ANEXO A: FORMATO DE LA ENCUESTA REALIZADA A LOS INFANTES DEL 10 AL 14 DE OCTUBRE DE 2013, EN EL HOSPITAL VICENTE CORRAL MOSCOSO DE LA CIUDAD DE CUENCA, ECUADOR. ............... 74 Anexo B: REPORTE DE MÉDICOS ESPECIALISTAS QUE GENERA SINI. ............................................................ 77 ANEXO C: CODIGO FUENTE DE DIETAS.JAVA ...................................................................................................... 78 ANEXO D: CODIGO FUENTE DE HISTORIAL.JAVA .............................................................................................. 95 ANEXO E: CODIGO FUENTE DE NUTRICION.JAVA ............................................................................................. 102 ANEXO F: CODIGO FUENTE DE PACIENTE.JAVA................................................................................................ 124 ANEXO G: CODIGO FUENTE DE PRINCIPAL.JAVA .............................................................................................. 144 ANEXO H: CODIGO FUENTE DE LAS VARIABLES DETALLE DIETA CLASS ................................................ 161 - xii - RESUMEN Este trabajo de investigación tiene como finalidad ser un aporte tecnológico en el área de nutrición infantil, ayudando en el control continuo de los infantes que presenten sobrepeso, debido a que en la Ciudad de Cuenca-Ecuador existen hospitales y centros de salud, en el área de pediatría y nutrición infantil, que utilizan sistemas informáticos que permiten gestionar: procesos de control de peso, crecimiento y nutrición infantil. Los sistemas informáticos soportan la gestión de estos procedimientos, en todas las fases de crecimiento de los niños y niñas, reduciendo tiempos en consultas de historiales clínicos de pacientes. El SINI (sistema informático de nutrición infantil) propuesto en este trabajo teórico práctico, debe cumplir estos propósitos y contar con los siguientes módulos: Administración de usuarios, Respaldos y auditorias, expedientes infantiles, diseño de dietas y reportes, para así lograr el objetivo planteado. Palabras clave: sistemas de información, sistema informático de nutrición infantil (SINI), expedientes infantiles, expedientes infantiles, respaldos, reportes. - xiii - ABSTRACT This research is intended to be a technological contribution in the area of childhood nutrition, assisting in the continuous monitoring of infants presenting overweight, because there are hospitals and health centers in the city of Cuenca, Ecuador, in the area of pediatrics and child nutrition, using computer systems that allow you to manage: process control weight, infant growth and nutrition. Computer systems support the management of these procedures at all stages of growth in children, reducing query times from clinical patient records. The SINI (IT system, child nutrition) proposed in this practical theoretical work must meet these goals and have the following modules: User management, backup and audits, infant records, and reports design diets in order to achieve the stated objective. Keywords: information systems, child nutrition information system (sini), children's records, childhood records, backups, reports. - xiv - INTRODUCCIÓN. Los sistemas informáticos (SI), han evolucionado y se han adaptado a los procesos de cualquier tipo de empresa. Sin embargo para su desarrollo se toma en cuenta dos aspectos muy importantes como técnicas de análisis, diseño y desarrollo, hoy en día existen avances que cambian la estructura ordinaria de elaborar un sistema informático (SI), radicando su cambio de un sistema centralizado a un sistema basado en flujos de trabajo. En el área de la salud pueden usarse los sistemas informáticos adaptándose a los procesos realizados para el correcto control de peso en los infantes se propone el sistema informático de nutrición infantil (SINI), que busca sistematizar los procesos del control de peso en los infantes, ofrecer menús diarios para el control de peso de los infantes, gestión de pacientes, historia clínica de los pacientes, respaldos y auditorias, procesos que permitirá reducir el sobre peso en la comunidad infantil de la Ciudad de Cuenca. Es fundamental que un (SINI) evolucione a un sistema que cubra en su totalidad los procesos realizados en el control del peso en los infantes. El contenido de la información que manejan los centros de salud en el área de nutrición infantil son factores importantes a considerar para determinar los procesos que debe satisfacer la aplicación de software. El contenido al que se refiere es toda la información de entrada y salida de todos los procesos internos que manejen los centros de salud. Por ejemplo los procesos de control de peso en los infantes, menús para las dietas, manejo de historiales clínicos, etc. Los procesos deben ser claros para poder estructurar la base de datos que permitirá almacenar la información, y así poder generar informes, realizar auditorías y respaldos del sistema informático (SI) que producirá órdenes concretas en rápida sucesión. -1- CAPITULO I: GENERALIDADES 1.1 DEFINICIÓN DEL PROBLEMA La desnutrición infantil en el Ecuador es un problema que tiene múltiples causas entre las que se encuentra el acceso a los alimentos y su preparación, acceso a servicios básicos, poder adquisitivo de la familia, entorno saludable, acceso a servicios de salud, así como la generación de capacidades y conocimientos relacionados a alimentación y nutrición en los responsables de los menores de cinco años [1]. Porcentaje de desnutrIción en el Ecuador 45% 40% 35% 30% 25% 20% 15% 10% 5% 0% 1990 2011 Fig. 1 Porcentaje de desnutrición en niños y niñas menores de cinco años en las dos últimas décadas [1] Los centros de salud tanto públicos como privados, no disponen de un sistema informático que permita la gestión de procesos en el área de nutrición infantil y sea un apoyo para sus especialistas de esta área, permitiéndoles mantener un control detallado de sus pacientes, de esta manera los sistemas informáticos serian un aporte tecnológico para la reducción del porcentaje de desnutrición y sobre peso en los infantes de la Ciudad de Cuenca-Ecuador. 1.2 MARCO CONCEPTUAL DEL PROBLEMA Analizar los procesos de gestión internos del área de nutrición infantil, como estrategia para la adaptación del SINI en un centro de salud de la Ciudad de Cuenca. En la actualidad debido a los avances tecnológicos, los centros de salud se han visto en la necesidad de la adaptación de sistemas informáticos que permitan agilitar procesos de gestión interna en las diferentes áreas de la salud, sin embargo en los centros de salud de la Ciudad de Cuenca-Ecuador, el área de nutrición infantil no dispone de un sistema informático, por ello se propone el desarrollo de un SINI son las siglas de sistema informático de nutrición infantil. Un SINI sistema informático de nutrición infantil, está enfocado a responsables de centros de salud, escuelas infantiles y guarderías que deseen sumarse a un sistema que les proporciona una solución completa para la alimentación de los infantes y que, a la excelencia nutricional y sanitaria, une ventajosas oportunidades para aportar -2- una calidad global a la gestión de su centro, reduciendo el índice de desnutrición y aumentando, además, su rentabilidad [2]. De esta manera es posible manejar todos los procesos para lograr disminuir la desnutrición en los infantes, agilitando tiempos de respuesta y soluciones nutricionales para la alimentación diaria, acorde a las edades de los niños y niñas que padecen esta enfermedad. La investigación se justifica por que la solución informática SINI, se desarrolla de acuerdo a las necesidades de los centros de salud en el área de nutrición infantil, el desarrollo se fundamenta en el modelo R.U.P. Este es un modelo que permitirá retroalimentar las fases de desarrollo permitiendo de esta manera ir ajustando la solución informática a los procesos internos que se llevan a cabo en los centros de salud. 1.3 PLAN DEL PROYECTO El plan del proyecto según lo establecido por [3], se elabora por etapas metodológicas. La metodología aplicada para el desarrollo de la solución informática SINI, es R.U.P. sus siglas en inglés rational unified process, traducido al español como proceso unificado de racional. 1.3.1 MODELO DE DESARROLLO Según [3], las etapas metodológicas a llevar a cabo para el desarrollo de sistemas de información, se establecen de la siguiente manera: Análisis, diseño, codificación, prueba, mantenimiento. Fig. 2 Etapas metodológicas de un modelo espiral para el desarrollo de un SI [3]. 1.3.2 FASES METODOLÓGICAS DE DESARROLLO DE UN MODELO ESPIRAL 1.3.2.1 Fase de inicio En el proceso de desarrollo del sistema informático se lleva a cabo la fase de inicio, durante se cumple esta fase las iteraciones se centran con mayor énfasis en las actividades de modelamiento del negocio y sus requerimientos. En esta fase también se enfocan hacia la comprensión del problema y la tecnología a usar, la delimitación del ámbito del proyecto, la eliminación de los riesgos críticos y al establecimiento de una línea base para la arquitectura, -3- En esta fase se cumplen los procesos de modelamiento del sistema informático, también se lleva a cabo las actividades de requerimientos del software. 1.3.2.2 Fase de elaboración Durante la fase de elaboración, las iteraciones se centran al desarrollo del diseño de la base (línea base) de la arquitectura, centralizan más los flujos de trabajo de los requisitos del sistema informático, modelo del negocio (centro de salud, área de nutrición infantil), su refinamiento, análisis, diseño y una parte de implementación orientada a la base (línea base), de la arquitectura para la construcción del sistema informático. 1.3.2.3 Fase de construcción Durante esta fase de construcción, se llevará a cabo la construcción del producto (sistema informático de nutrición infantil), por medio de una serie de iteraciones para las cuales se seleccionan algunos Casos de Uso, se redefinen el análisis y diseño, y se procede a su implantación y pruebas. En esta fase se realiza una pequeña cascada para cada ciclo, se realizan tantas iteraciones hasta que se termine la nueva implementación del producto, y sus versiones. 1.3.2.4 Fase de transición Una de las etapas de finalización del sistema informático se tiene la fase de transición, durante esta fase se busca garantizar que se tiene un producto preparado para su entrega al usuario final o comunidad de usuarios, con sus requerimientos y listo para automatizar todos sus procesos internos, de forma eficaz y eficientemente. 1.4 CONCEPTO DE LA METODOLOGIA R.U.P. De acuerdo con al autor de [4], el Proceso Racional Unificado es un proceso de desarrollo de software y junto con el Lenguaje Unificado de Modelado UML, constituye la metodología estándar más utilizada para el análisis, implementación y documentación de sistemas orientados a objetos. El RUP no es un sistema con pasos firmemente establecidos, sino un conjunto de metodologías adaptables al contexto y necesidades de cada organización. Originalmente se diseñó un proceso genérico y de dominio público, el Proceso unificado, y una especificación más detallada, el Rational Unified Process, que se vendiera como producto independiente. 1.4.1 FUNCIONAMIENTO DE LA METODOLOGIA R.U.P. R.U.P. según [5], Es un proceso de ingeniería de software que suministra un enfoque para asignar tareas y responsabilidades dentro de una organización de desarrollo, para nuestro caso práctico en un centro de salud en el área de nutrición infantil. Su objetivo es asegurar la producción de software de alta calidad que satisfaga la necesidad del usuario final (especialista, nutricionista infantil), dentro de un tiempo y presupuesto previsible. Esta metodología de desarrollo iterativo está enfocada hacia “los casos de uso, manejo de riesgos y el manejo de la arquitectura”, en las diferentes etapas de desarrollo del sistema informático. El R.U.P. mejora la productividad del equipo ya que permite que cada miembro del grupo sin importar su responsabilidad específica acceda a la misma base de datos de conocimiento. Esto hace que todos compartan el mismo lenguaje, la misma visión y el mismo proceso acerca de cómo desarrollar software [5]. -4- Fig. 3 Metodología y fases aplicadas al SINI (Sistema de Nutrición Infantil) [5]. Es de gran importancia considerar los riesgos, que pueden darse durante el desarrollo del sistema informático, como el tiempo de culminación del sistema informático, la adaptación de los procesos al sistema informático, la adaptación del usuario final con el sistema, requerimientos funcionales y no funcionales no compatibles, con el software, etc. Debe existir y se debe tener clara la política de seguridad sobre el manejo de la información, el sistema no es tangible por lo tanto debe garantizarle al usuario final su funcionabilidad, adaptabilidad, y seguridad e integridad en la información que maneje. Las fases que utiliza la metodología de desarrollo de software R.U.P., indican como deben ser realizadas las actividades dentro de cada etapa de desarrollo, combina el empleo de unos modelos o representaciones gráficas junto con el empleo de unos procedimientos detallados. Se debe tener en consideración que una técnica determinada puede ser utilizada en una o más actividades de la metodología de desarrollo de software. Además se debe tener mucho cuidado al momento de querer cambiar una técnica por otra [6]. 1.5 PROCESO DE DESARROLLO DEL SOFTWARE Según el Autor [4], R.U.P. está basado en seis procesos que son los siguientes: 1.5.1. ADAPTAR EL PROCESO: El proceso deberá adaptarse a las necesidades del cliente ya que es muy importante interactuar con él. Las características propias del proyecto u organización. El tamaño del mismo, así como su tipo o las regulaciones que lo condicionen, influirán en su diseño específico. También se deberá tener en cuenta el alcance del proyecto en un área subformal. -5- 1.5.2. EQUILIBRAR PRIORIDADES: Los requisitos de los diversos participantes para el desarrollo de la aplicación, pueden ser diferentes, contradictorios o disputarse recursos limitados. Debe encontrarse un equilibrio que satisfaga los deseos de todos. Ya que gracias a este equilibrio se podrán corregir desacuerdos que surjan en el futuro, mientras se desarrolla la aplicación informática. 1.5.3. DEMOSTRAR VALOR ITERATIVAMENTE: Los proyectos se entregan, aunque sea de un modo interno, en etapas iteradas. En cada iteración se analiza la opinión de los inversores, la estabilidad y calidad del producto, y se refina la dirección del proyecto así como también los riesgos involucrados, para el sistema de nutrición infantil, SINI. 1.5.3.1 Colaboración entre equipos: El desarrollo de software no lo hace una única persona sino múltiples equipos. Debe haber una comunicación fluida para coordinar requisitos, desarrollo, evaluaciones, planes, resultados, etc. 1.5.3.2 Elevar el nivel de abstracción: Este principio dominante motiva el uso de conceptos reutilizables tales como patrón del software, lenguajes 4GL 1 o marcos de referencia (frameworks2) por nombrar algunos. Esto evita que los ingenieros de software vayan directamente de los requisitos a la codificación de software a la medida del cliente, sin saber con certeza qué codificar para satisfacer de la mejor manera los requisitos y sin comenzar desde un principio pensando en la reutilización del código. 1.5.3.3 Enfocarse en la calidad: El control de calidad no debe realizarse al final de cada iteración, sino en todos los aspectos de la producción. El aseguramiento de la calidad forma parte del proceso de desarrollo y no de un grupo independiente. 1.5.3.4 Fundamentos del Enfoque orientado a Objetos El Enfoque Orientado a Objeto se basa en cuatro principios que constituyen la base de todo desarrollo orientado a objetos. Estos principios son: la Abstracción, el Encapsulamiento, la Modularidad y la Herencia. i) Fundamento 1: Abstracción: Es el principio de ignorar aquellos aspectos de un fenómeno observado que no son relevantes, con el objetivo de concentrarse en aquellos que sí lo son. Una abstracción denota las características esenciales de un objeto (datos y operaciones), que lo distingue de otras clases de objetos. Decidir el conjunto 1 2 4GL, lenguaje de cuarta generación, dan lugar a un lenguaje de programación de alto nivel Framework, es un conjunto estandarizado de conceptos, prácticas y criterios para enfocar un tipo de problemática particular. -6- correcto de abstracciones de un determinado dominio, es el problema central del diseño orientado a objetos. Los mecanismos de abstracción son usados en el EOO 3 para extraer y definir del medio a modelar, sus características y su comportamiento. Dentro del EOO son muy usados mecanismos de abstracción: la Generalización, la Agregación y la clasificación. • La generalización es el mecanismo de abstracción mediante el cual un conjunto de clases de objetos son agrupados en una clase de nivel superior (Superclase), donde las semejanzas de las clases constituyentes (Subclases) son enfatizadas, y las diferencias entre ellas son ignoradas. En consecuencia, a través de la generalización, la superclase almacena datos generales de las subclases, y las subclases almacenan sólo datos particulares. La especialización es lo contrario de la generalización. Por ejemplo; La clase Médico es una especialización de la clase Persona, y a su vez, la clase Pediatra es una especialización de la superclase Médico. • La agregación es el mecanismo de abstracción por el cual una clase de objeto es definida a partir de sus partes (otras clases de objetos). Mediante agregación se puede definir por ejemplo un computador, por descomponerse en: la CPU, la ULA, la memoria y los dispositivos periféricos. El contrario de agregación es la descomposición. • La clasificación consiste en la definición de una clase a partir de un conjunto de objetos que tienen un comportamiento similar. La ejemplificación es lo contrario a la clasificación, y corresponde a la instanciación de una clase, usando el ejemplo de un objeto en particular. ii) Fundamento 2: Encapsulamiento: Es la propiedad del EOO que permite ocultar al mundo exterior la representación interna del objeto. Esto quiere decir que el objeto puede ser utilizado, pero los datos esenciales del mismo no son conocidos fuera de él. La idea central del encapsulamiento es esconder los detalles y mostrar lo relevante. Permite el ocultamiento de la información separando el aspecto correspondiente a la especificación de la implementación; de esta forma, distingue el "qué hacer" del "cómo hacer". La especificación es visible al usuario, mientras que la implementación se le oculta. iii) Fundamento 3: Modularidad: Es la propiedad que permite tener independencia entre las diferentes partes de un sistema. La modularidad consiste en dividir un programa en módulos o partes, que pueden ser compilados separadamente, pero que tienen conexiones con otros módulos. En un mismo módulo se suele colocar clases y objetos que guarden una estrecha relación. El sentido de modularidad está muy relacionado con el ocultamiento de información. iv) Fundamento 4: Herencia: Es el proceso mediante el cual un objeto de una clase adquiere propiedades definidas en otra clase que lo preceda en una jerarquía de clasificaciones. Permite la definición de un nuevo objeto a partir de otros, agregando las diferencias entre ellos (Programación Diferencial), evitando repetición de código y permitiendo la reusabilidad. 3 EOO, son las siglas de Enfoque Orientado a Objetos. -7- Las clases heredan los datos y métodos de la superclase. Un método heredado puede ser sustituido por uno propio si ambos tienen el mismo nombre. La herencia puede ser simple (cada clase tiene sólo una superclase) o múltiple (cada clase puede tener asociada varias superclases). La clase Docente y la clase Estudiante heredan las propiedades de la clase Persona (superclase, herencia simple). La clase Preparador (subclase) hereda propiedades de la clase Docente y de la clase Estudiante (herencia múltiple). v) Fundamento 5: Polimorfismo: Es una propiedad del EOO que permite que un método tenga múltiples implementaciones, que se seleccionan en base al tipo objeto indicado al solicitar la ejecución del método. El polimorfismo operacional o sobrecarga operacional permite aplicar operaciones con igual nombre a diferentes clases o están relacionados en términos de inclusión. En este tipo de polimorfismo, los métodos son interpretados en el contexto del objeto particular, ya que los métodos con nombres comunes son implementados de diferente manera dependiendo de cada clase. 1.6 DESARROLLO DE COMPONENTES R.U.P. divide el proceso de desarrollo en cuatro fases, dentro de las cuales se realizan varias iteraciones en número variable según el proyecto y en las que se hace un mayor o menor hincapié en las distintas actividades para el desarrollo de la solución informática de nutrición infantil. 1.6.1 CARACTERÍSTICAS DE CAMPO: El RUP según el autor de [4], es un producto de Rational 4(IBM5). Se caracteriza por ser iterativo e incremental, estar centrado en la arquitectura y guiado por los casos de uso. Incluye artefactos (que son los productos tangibles del proceso como por ejemplo, el modelo de casos de uso, el código fuente, etc.) y roles (papel que desempeña una persona en un determinado momento, una persona puede desempeñar distintos roles a lo largo del proceso), que tiene por características de campo, las siguientes: o o o o o o o o Forma disciplinada de asignar tareas y responsabilidades (quién hace qué, cuándo y cómo). Pretende implementar las mejores prácticas en Ingeniería de Software. Desarrollo iterativo. Administración de requisitos. Uso de arquitectura basada en componentes. Control de cambios. Modelado visual del software. Verificación de la calidad del software. 1.7 ESTADO DEL ARTE Adoptando la metodología de desarrollo propuesto por [3], es necesario analizar la información de los procesos internos que los centros de salud en el área de nutrición infantil en la actualidad y las tendencias. El estado de arte de la solución las fases metodológicas para el desarrollo del sistema informático, integran los siguientes módulos: 4 5 Rational, Software es actualmente conocida como una familia de software de IBM IBM, International Business Machines es una empresa multinacional estadounidense de tecnología -8- Administración de usuarios, respaldos y auditorias. Expedientes infantiles. Diseño de dietas. Reportes. El desarrollo de solución informática se constituye en el desarrollo de estos módulos que son los más relevantes y que se han visto necesarios para un SINI sistema informático de nutrición infantil. 1.7.1 FASES DE DESARROLLO DE UN SISTEMA INFORMÁTICO: 1.7.1.1 Etapa I: Análisis de los requisitos del software: Pressman establece que la tarea del análisis de requisitos es un proceso de descubrimiento, refinamiento, modelado y especificación. Se refina en detalle el ámbito del software, y se crean modelos de los requisitos de datos, flujo de información y control, y del comportamiento operativo. Se analizan soluciones alternativas y se asignan a diferentes elementos del software. El análisis de requisitos permite al desarrollador o desarrolladores especificar la función y el rendimiento del software, indica la interfaz del software con otros elementos del sistema y establece las restricciones que debe cumplir el software [3]. El análisis de requisitos del software puede dividirse en cinco áreas de esfuerzo, que son: 1. Reconocimiento del problema. Reconocer los elementos básicos del problema tal y como los perciben los usuarios finales del sistema informático [3], en nuestro caso los médicos tratantes. 2. Evaluación y síntesis. Definir todos los objetos de datos observables externamente, evaluar el flujo y contenido de la información, definir y elaborar todas las funciones del software, entender el comportamiento del software [3], en el contexto de acontecimientos que afectan al sistema informático de nutrición infantil. 3. Modelado. Crear modelos del sistema informático de nutrición infantil, con el fin de entender mejor el flujo de datos y control, el tratamiento funcional y el comportamiento operativo y el contenido de la información [3]. El modelado del negocio está basado en diagramas del flujo, adaptados para crear gráficos que el cliente puede entender lo que el programador quiere hacer antes de realizar el software o el proyecto a futuro, este es de muy fácil lectura. Aquí intervienen los siguientes elementos: La actividad: es la que nos indica el trabajo que se va a realizar como esta en la Fig. 15, actividad Fig. 4 Representación de una actividad en un modelo UML -9- El actor: son los que van a intervenir en el proceso del flujo software, es el rol que va a tener el usuario, esta se representa en la Fig. 16, actor Fig. 5 Representación de un actor en un modelo UML 4. Especificación. Realizar la especificación formal [3], del sistema informático de nutrición infantil. 5. Revisión. Un último chequeo general de todo el proceso [3]. 1.7.1.2 Etapa II: Diseño: Según [3], el diseño del software es realmente un proceso de muchos pasos pero que se clasifican dentro de uno mismo. La actividad del diseño se refiere al establecimiento de las estructuras de datos, la arquitectura general del software, representaciones de interfaz y algoritmos. El proceso de diseño traduce requisitos en una representación de software. El diseño de datos esencialmente se encarga de transformar el modelo de dominio de la información creado durante el análisis. 1.7.1.3 Etapa III: Generación de Código: Durante la generación del código se traduce el diseño, en una forma entendible para la computadora. La generación de código se refiere tanto a la parte de generación de los ambientes virtuales, como a la parte en la cual se añadirá comportamiento a estos ambientes. El comportamiento de las escenas virtuales es decir, su funcionalidad, se puede construir a través de algún otro lenguaje de programación, como clases Java6 o scripts especificados en JavaScript 7. Todas estas actividades implican generar código, para un sistema informático. 1.7.1.4 Etapa IV: Pruebas: 6 Java Es un lenguaje de programación y la primera plataforma informática creada por Sun Microsystems en 1995. JavaScript es un lenguaje de programación interpretado, orientado a objetos, basado en prototipos, imperativo, débilmente tipado y dinámico. 7 - 10 - Una vez desarrollado el sistema informático de nutrición infantil, se da inicio a las pruebas del software, de acuerdo a [3], el proceso de pruebas se centra en los procesos lógicos internos del software, asegurando que todas las sentencias se han comprobado, y en los procesos externos funcionales, es decir, la realización de las prueba para la detección de errores. En nuestro caso del SINI, es necesario tener la fase de pruebas del sistema tanto para la parte funcional del software, como para la parte aplicativa del mismo. Es muy importante que durante el proceso de desarrollo del SINI, no se pierda el contacto con los usuarios finales que manejaran el software, de esta manera los objetivos de proyecto se mantendrán vigentes y se tendrá una idea clara de los aspectos que tienen que probarse durante el periodo de pruebas. 1.7.1.5 Etapa V: Mantenimiento. Un sistema informático no es estático, tiene que realizarse cambios con frecuencia conforme el usuario final de la aplicación lo requiera, ya sea por el cambio interno de los procesos, o porque la aplicación requiera mantenimiento, en sus bases de datos, interfaz, etc. Mediante la documentación apropiada del software se pueden presentar las vías para dicho mantenimiento y modificaciones del mismo. 1.7 DESCRIPCIÓN Y SUSTENTACIÓN DE LA SOLUCIÓN Los cambios tecnológicos se han dado radicalmente en las formas y maneras de producir y distribuir información, para la creación de menús alimenticios, controlar el peso en los niños y niñas, y así reducir la obesidad en los mismos, sin embargo no existe un control continuo para acabar con ello. Por este motivo se propone un sistema informático de nutrición infantil que permite automatizar todos los procesos permitiendo simplificar el trabajo del nutricionista especialista, al momento de emitir recetas, controlar el historial de sus pacientes, realizar diagnósticos a corto y largo plazo, etc. Según [7], Un SINI sistema informático de nutrición infantil, almacena, procesa y presenta la información previa, la actual generada por el enfermo y la necesaria a utilizar para el diagnóstico y la prescripción dietética en una unidad de nutrición, incluyendo fundamentalmente: ficheros de datos bromatológicos y tablas de valores ideales; filiación de pacientes, con medidas antropométricas y pruebas clínicas; datos de nutrientes, alimentos, platos, menús y dietas para la calibración y elaboración de dietas, consultas dietéticas y generación automática de dietas; realización de encuestas dietéticas, tanto individuales como para grandes grupos de población; estudio del estado nutricional para orientar el tipo de dieta y guías para el diagnóstico y tratamiento de los estados patológicos nutricionales, puede ser aplicado por su enorme versatilidad y la gran especialización de sus contenidos, en los entornos más diversos: pautas nutricionales especiales para las patologías susceptibles de incidencia dietas equilibradas de hostelería, dietas correctoras de estados patológicos (obesidad, anorexia), hasta atender científicamente las nutriciones enterales más complejas y condicionadas de los pacientes de unidades de cuidados intensivos o los sometidos a cirugías especialmente cruentas con prolongados postoperatorios. El programa no solo calcula dietas personalizadas, sino que con fines de uso práctico ha sido reagrupado en tres subsistemas: diagnostico, que incluye el estado nutricional, condiciones patológicas y pruebas clínicas; tratamiento, que comprende las prescripciones dietéticas y la posibilidad de calibración de cualquier petición viable; y finalmente el de entorno, destinado al almacenamiento de historias, emisión de informes, confección de estadísticas, comunicación con los usuarios y apoyo a la enseñanza. Finalmente, a través de la información recogida y centralizada, permite colaborar con gestión interna de los historiales clínicos de los pacientes. - 11 - CAPITULO II: ANÁLISIS 2.1 METODOLOGÍA APLICADA PARA EL DESARROLLO DE LA SOLUCIÓN La metodología aplicada para la solución informática SINI se describe a continuación: 2.1.1 IDENTIFICACIÓN DE REQUERIMIENTOS Basados en la encuesta realizada a los niños en el hospital regional Vicente Corral Moscoso da como resultado que estos tienen una bajo control de la nutrición también esto sucede por ritmo de vida acelerado en este siglo. Para lo cual se realiza un sistema óptimo para así poder controlar la mala nutrición de los niños en la Ciudad de Cuenca. 2.1.1.1 Realizar un análisis de requisitos de la solución informática de nutrición infantil: Módulo de expedientes infantiles. La fase de análisis de requisitos durante el desarrollo de la solución informática de nutrición infantil (SINI), observará entre la definición del software a nivel sistema y el diseño del software. El análisis de requisitos permitirá especificar las características operacionales del software (función, datos y rendimientos), indica la interfaz del software con otros elementos del sistema y establece las restricciones que debe cumplir el software. 2.1.1.1.1 Reconocimiento del problema Ecuador forma parte de un pequeño grupo de países latinoamericanos que reporta persistentemente altas tasas de deficiencia nutricional infantil. Uno de cada cuatro niños, menores de cinco años de edad, padece de desnutrición crónica, según el censo realizado por el INEC, en la provincia del Azuay, el 40.99% de niños tienen prevalencia de desnutrición y el 0.07% sufren desnutrición crónica [8]. Para profundizar el estudio del problema en los infantes de la Ciudad de Cuenca, se ha visto la necesidad de realizar una encuesta (Ver Anexo 1), que nos permitirá concluir el problema de sobrepeso y mal nutrición en los niños y niñas de la Ciudad de Cuenca, Ecuador. Como se indica en la siguiente tabla. Tabla I: Resultados de la encuesta aplicada a los infantes del Hospital Vicente Corral Moscoso de la Ciudad de Cuenca Número Pregunta Opciones de Respuesta 1 ¿ERES UN NIÑO O UNA NIÑA? niño/ joven 40 niña/ joven 25 nunca 15 2-3 veces al mes 15 1 vez a la semana 10 2 ¿CON QUÉ FRECUENCIA SUELES COME FRUTA? - 12 - Respuestas 3 4 5 ¿CON QUÉ FRECUENCIA SUELES COMER ENSALADA, VERDURAS CRUDAS O RALLADAS? (ZANAHORIA, REMOLACHA, ETC) ¿CON QUÉ FRECUENCIA SUELE COMER VERDURAS COCIDAS? ¿CUÁLES DE LAS SIGUIENTES FRUTAS TE GUSTAN? ¿CREES QUE COMES MUCHA O POCA FRUTA? 6 7 8 ¿HAY FRUTA QUE TE GUSTE NORMALMENTE EN CASA? ¿TE PREPARAN/S EN CASA TROZOS DE FRUTA PARA COMER ENTRE HORAS? ¿LLEVAS NORMALMENTE FRUTA AL COLEGIO? - 13 - 2-3 veces a la semana 11 todos los días 9 nunca 8 2-3 veces al mes 10 1 vez a la semana 15 2-3 veces a la semana 15 todos los días 12 nunca 2 2-3 veces al mes 20 1 vez a la semana 13 2-3 veces a la semana 15 todos los días 10 manzanas 10 plátanos 1 peras 2 naranjas 5 mandarinas 5 ciruelas 1 melocotones 0 melón 0 sandia 3 fresas 5 uvas 8 cerezas 8 kiwi 5 piñas 5 otros 2 muchísima fruta 25 mucha fruta 10 ni mucha, ni poca 5 poca fruta 10 muy poca fruta 10 sí, siempre 20 sí, la mayoría de los días 10 algunas veces 8 rara vez 12 sí, siempre 20 sí, la mayoría de los días 10 algunas veces 15 rara vez 12 nunca 3 sí, siempre 10 sí, la mayoría de los días 10 9 ¿CUÁLES DE LAS SIGUIENTES VERDURAS FRUTAS TE GUSTAN O CUÁLES NO TE GUSTAN? tomate lechuga acelgas coles, berza espinacas puerros cebolla zanahorias calabacín otros - 14 - algunas veces 25 rara vez 15 nunca 10 gusta mucho 25 gusta poco 15 no le gusta nada 10 no la he probado 10 gusta mucho 10 gusta poco 10 no le gusta nada 25 no la he probado 25 gusta mucho 10 gusta poco 20 no le gusta nada 10 no la he probado 20 gusta mucho 15 gusta poco 15 no le gusta nada 15 no la he probado 15 gusta mucho 20 gusta poco 10 no le gusta nada 15 no la he probado 15 gusta mucho 15 gusta poco 20 no le gusta nada 15 no la he probado 10 gusta mucho 15 gusta poco 20 no le gusta nada 10 no la he probado 15 gusta mucho 15 gusta poco 15 no le gusta nada 10 no la he probado 20 gusta mucho 25 gusta poco 25 no le gusta nada 5 no la he probado 5 gusta mucho 15 gusta poco 15 no le gusta nada 10 no la he probado 20 10 11 12 ¿HAY VERDURA QUE TE GUSTE NORMALMENTE EN CASA? ¿POR QUÉ COMES FRUTA Y VERDURA? sí, siempre 25 sí, la mayoría de los días 15 algunas veces 10 rara vez 8 nunca 2 por qué me obligan mi madre y/o padre o en el comedor del colegio 2 porque me gusta 28 por qué los demás lo comen 15 no lo se 15 si 10 no 50 EL PLAN DE CONSUMO DE FRUTAS Y VERDURAS QUE SE DESARROLLA EN TU COLEGIO INCLUYE ACTIVIDADES COMO: TALLERES DE COCINA, VISITAS A EXPLOTACIONES AGRARIAS, JUEGOS EN LÍNEA Y FOLLETOS PARA LOS NIÑOS EN PÁGINAS WEB. ¿CREES QUE ESTAS ACTIVIDADES TE AYUDAN A REFORZAR EL CONSUMO DE FRUTA Y VERDURA EN LOS NIÑOS? De acuerdo a la tabla anterior, se indican a continuación el cuadro estadístico para cada pregunta: 40 30 20 10 0 1 2 ¿ERES UN NIÑO O UNA NIÑA? Niño/ Joven ¿ERES UN NIÑO O UNA NIÑA? Niña/ Joven ¿CON QUÉ FRECUENCIA SUELES COME FRUTA? Fig. 6 Cuadro estadístico de la tabulación de la pregunta número uno, ¿ERES UN NIÑO O UNA NIÑA? 9 TODOS LOS DÍAS 2-3 VECES A LA SEMANA 1 VEZ A LA SEMANA 2-3 VECES AL MES NUNCA 11 10 15 15 0 2 4 6 8 10 12 14 16 Series1 Fig. 7 Cuadro estadístico de la tabulación de la pregunta número 2, ¿CON QUÉ FRECUENCIA SUELES COMER FRUTA? - 15 - 20 18 16 14 12 10 8 6 4 2 0 NUNCA 2-3 VECES AL MES 1 VEZ A LA SEMANA 2-3 VECES A LA SEMANA TODOS LOS DÍAS ¿CON QUÉ FRECUENCIA SUELE COMER VERDURAS COCIDAS? Series2 Fig. 8 Cuadro estadístico de la tabulación de la pregunta número tres, ¿CON QUÉ FRECUENCIA SUELES COMER ENSALADA, VERDURAS CRUDAS O RALLADAS? (ZANAHORIA, REMOLACHA, ETC) 25 20 15 10 5 0 MUCHÍSIMA FRUTA MUCHA FRUTA NI MUCHA, NI POCA POCA FRUTA MUY POCA FRUTA ¿CREES QUE COMES MUCHA O POCA FRUTA? Series2 Fig. 9 Cuadro estadístico de la tabulación de la pregunta número cuatro, ¿CON QUÉ FRECUENCIA SUELE COMER VERDURAS COCIDAS? - 16 - 20 15 10 5 0 SÍ, SIEMPRE SÍ, LA MAYORÍA DE LOS DÍAS ALGUNAS VECES RARA VEZ ¿HAY FRUTA QUE TE GUSTE NORMALMENTE EN CASA? Series2 ¿TE PREPARAN/S EN CASA TROZOS DE FRUTA PARA COMER ENTRE HORAS? Fig. 10 Cuadro estadístico de la tabulación de la pregunta número cinco, ¿CUÁLES DE LAS SIGUIENTES FRUTAS TE GUSTAN? NUNCA RARA VEZ ALGUNAS VECES SÍ, LA MAYORÍA DE LOS DÍAS SÍ, SIEMPRE 0 Series2 5 10 15 20 Series1 Fig. 11 Cuadro estadístico de la tabulación de la pregunta número seis, ¿CREES QUE COMES MUCHA O POCA FRUTA? 25 15 10 10 SÍ, SIEMPRE SÍ, LA MAYORÍA DE LOS DÍAS 10 ALGUNAS VECES RARA VEZ NUNCA ¿LLEVAS NORMALMENTE FRUTA AL COLEGIO? Series2 Fig. 12 Cuadro estadístico de la tabulación de la pregunta número siete, ¿HAY FRUTA QUE TE GUSTE NORMALMENTE EN CASA? - 17 - 25 20 15 10 0 GUSTA MUCHO GUSTA POCO NO LE GUSTA NADA NO LA HE PROBADO GUSTA MUCHO GUSTA POCO NO LE GUSTA NADA NO LA HE PROBADO GUSTA MUCHO GUSTA POCO NO LE GUSTA NADA NO LA HE PROBADO GUSTA MUCHO GUSTA POCO NO LE GUSTA NADA NO LA HE PROBADO GUSTA MUCHO GUSTA POCO NO LE GUSTA NADA NO LA HE PROBADO GUSTA MUCHO GUSTA POCO NO LE GUSTA NADA NO LA HE PROBADO GUSTA MUCHO GUSTA POCO NO LE GUSTA NADA NO LA HE PROBADO GUSTA MUCHO GUSTA POCO NO LE GUSTA NADA NO LA HE PROBADO GUSTA MUCHO GUSTA POCO NO LE GUSTA NADA NO LA HE PROBADO GUSTA MUCHO GUSTA POCO NO LE GUSTA NADA NO LA HE PROBADO 5 TOMATE LECHUGA ACELGAS COLES, BERZA ESPINACAS PUERROS CEBOLLA ZANAHORIAS CALABACÍN OTROS ¿CUÁLES DE LAS SIGUIENTES VERDURAS FRUTAS TE GUSTAN O CUÁLES NO TE GUSTAN? Series1 Fig. 13 Cuadro estadístico de la tabulación de la pregunta número ocho, ¿TE PREPARAN/S EN CASA TROZOS DE FRUTA PARA COMER ENTRE HORAS? 25 20 15 10 5 0 SÍ, SIEMPRE SÍ, LA ALGUNAS MAYORÍA VECES DE LOS DÍAS Series2 RARA VEZ NUNCA ¿HAY VERDURA QUE TE GUSTE NORMALMENTE EN CASA? Series2 Fig. 14 Cuadro estadístico de la tabulación de la pregunta número nueve, ¿LLEVAS NORMALMENTE FRUTA AL COLEGIO? - 18 - 30 25 20 15 10 5 0 POR QUE ME OBLIGAN MI MADRE Y/O PADRE O EN EL COMEDOR DEL COLEGIO POR QUE ME GUSTA POR QUE LOS DEMÁS LO COMEN NO LO SE ¿POR QUÉ COMES FRUTA Y VERDURA? Series1 Series2 Fig. 15 Cuadro estadístico de la tabulación de la pregunta número diez, ¿CUÁLES DE LAS SIGUIENTES VERDURAS FRUTAS TE GUSTAN O CUÁLES NO TE GUSTAN? 50 10 1 2 EL PLAN DE CONSUMO DE FRUTAS Y VERDURAS QUE SE DESARROLLA EN TU COLEGIO INCLUYE ACTIVIDADES COMO: TALLERES DE COCINA, VISITAS A EXPLOTACIONES AGRARIAS, JUEGOS EN LÍNEA Y FOLLETOS PARA LOS NIÑOS EN PÁGINAS WEB. ¿CREES QUE ESTAS ACTIVIDADES TE AYUDAN A REFO EL PLAN DE CONSUMO DE FRUTAS Y VERDURAS QUE SE DESARROLLA EN TU COLEGIO INCLUYE ACTIVIDADES COMO: TALLERES DE COCINA, VISITAS A EXPLOTACIONES AGRARIAS, JUEGOS EN LÍNEA Fig. 16 Cuadro estadístico de la tabulación de la pregunta número once, CASA? ¿HAY VERDURA QUE TE GUSTE NORMALMENTE EN 2.1.1.2 Requerimientos funcionales El usuario podrá ingresar nuevos expedientes infantiles, editarlos o eliminarlos. El sistema deberá proporcionar el acceso a expedientes infantiles. A cada paciente se debe asignar un número de registro que servirá para el seguimiento continuo. El sistema permitirá la búsqueda e impresión o consulta del historial de un determinado paciente. El usuario podrá registrar solo pacientes menores a 12 años. 2.1.1.3 Requerimientos no funcionales 2.1.1.3.1 Requerimientos del Producto Requerimientos de eficiencia: El sistema debe dar respuesta a consultas de historial de pacientes en el menor tiempo posible. - 19 - Requerimientos de fiabilidad: El sistema debe garantizar la integridad en los datos de los pacientes. El sistema debe garantizar la información que presenta al usuario Requerimientos de portabilidad: El sistema deberá poder ser instalado en diversos sistemas operativos como Windows, Linux y Mac OS. Requerimientos de usabilidad: El sistema debe incluir módulos que gestionen la información de pacientes y su interfaz deberá ser amigable e intuitiva. Requerimientos de usabilidad: El sistema debe estar a disposición del usuario las veinticuatro horas del día los siete días de la semana. 2.1.1.3.2 Requerimientos Externos Los requerimientos que se derivan de los factores externos al sistema de nutrición infantil y de su proceso de desarrollo se han considerado los siguientes: Las políticas de usos de sistemas informáticos para la gestión de pacientes de nutrición infantil en el Hospital Vicente Corral Moscoso de la Ciudad de Cuenca, Ecuador. El sistema no deberá revelar a los usuarios ajenos a él información de los demás pacientes. 2.1.2 META DEL SISTEMA INFORMÁTICO DE NUTRICIÓN INFANTIL Todos sus Módulos debes estar en funcionamiento en un 100% y estar realizados todas las pruebas necesarias para que sea de fácil uso para los especialistas en la nutrición infantil, debe también permitir la gestión de sus pacientes eficientemente garantizando la integridad y fiabilidad de la información. 2.2 ANÁLISIS DE LA SOLUCIÓN 2.2.1 MODELO DEL NEGOCIO El modelado del negocio es una parte esencial para el proceso del negocio para la realización del software, este permite la captura del esquema general y cada uno de los procesos más importantes que gobierna el negocio [9]. 2.2.2 EVALUAR EL CENTRO DE SALUD DONDE SE APLICARÁ EL SISTEMA DE NUTRICIÓN INFANTIL SINI La SINI se aplicará en los centros de salud que dispongan del área de nutrición infantil, en la Ciudad de Cuenca, la propuesta tentativa es para aplicarlo en el área de nutrición infantil en el Hospital Vicente Corral Moscoso, que es un hospital que carece de una solución informática para la automatización de estos sus procesos internos y aportar positivamente para reducir la obesidad y la desnutrición en los infantes de nuestra Ciudad. - 20 - 2.2.2.1 Qué es lo que quiere la organización del SINI La organización (Hospital Vicente Corral Moscoso), quiere que los niños de la Ciudad de Cuenca tengan una mejor nutrición y tener el control de esta, la cual conlleva también a tener un registro de estos para poder hacer el control deseado a futuro. 2.2.2.2 Comprender la estructura de la organización La Ciudad de Cuenca en los últimos años ha sufrido un cambio social, hoy en día los niños ya no comparten con sus padres ya que ambos trabajan para poder mantener el hogar y los niños deben de conformarse con consumir comida chatarra, por este motivo los infantes tienen muchos problemas en su nutrición. En el 2011 el Ministerio de Salud Pública ha intervenido en varias ocasiones implementando departamentos de nutrición, puesto que se ha visto en un alto grado la desnutrición crónica, deficiencia de micronutrientes, sobrepeso y obesidad, son los principales problemas de los niños Ecuatorianos causados por una mala alimentación [10]. En el diario el tiempo se publicó una charla que brindo el CEDEI 8sobre la nutrición escolar la cual pretende que varios estudiantes de Estados Unidos realicen actividades voluntarias en el área de nutrición de Cuenca para concientizar a las familias sobre cómo llevar una mejor nutrición [11]. La anterior cocluye que la nutrición en la Ciudad de Cuenca es importante y que ya se tomado “cartas sobre el asunto” mediante algunas instituciones como se indicó anteriormente. Para llevar a cabo este objetivo se desarrolla el proceso que tiene como meta, utilizar las tecnologías de la información para permitir tener un control y seguimiento eficiente en el proceso de reducción del sobre peso y desnutrición en los infantes de la Ciudad de Cuenca-Ecuador. 2.2.2.3 Actores y casos de uso en el modelado del negocio 2.2.2.3.1 De los actores Los actores que se identificaron para el SINI, módulo de expedientes infantiles son: El paciente El administrador El nutricionista 2.2.2.3.2 Análisis de los actores El paciente es uno de los actores primordiales ya que es el que va interactuar en todo momento indirectamente con nuestro sistema ya que este no va a poder ingresar datos a este, esto va realizar el actor nutricionista, pero todos los resultados serán enfocados a él para así mejorar su nutrición. El médico nutricionista se define como el actor que va a interactuar con el sistema ya que es la persona que ingresa los datos del paciente cuando se efectúa la cita médica, si no es la primera cita médica del paciente se podría obtener un reporte del historial clínico previo el análisis médico, este actor médico es él que debe conocer todo el sistema informático, para que el mismo le brinde de forma eficiente los resultados esperados. 2.2.2.3.3 Categorización de los actores En primer lugar se encuentra el actor médico nutricionista ya que es el que interactuará directamente con el sistema y en todo momento. 8 CEDEI, Centers For Interamerican Studies - 21 - En segundo lugar se tiene al actor paciente el sistema va contener todos los datos de este cargados en la base de datos, es decir es el que a proporcionar la información para que el sistema entre en funcionamiento. En tercer lugar está el actor administrador que es el que genera el turno e interactúa con el paciente aunque este no está en contacto de ninguna manera con el sistema. Se diría que es un actor lejano. 2.2.2.3.4 Construcción del Modelado de los Casos de Uso del Negocio A. Comprensión inicial del dominio del, SINI para centros de salud de la Ciudad de Cuenca en el área de nutrición infantil. Los centros de salud de la Ciudad de Cuenca, no poseen un sistema de nutrición infantil que permita controlar y sistematizar los procesos internos que estos desarrollan día a día para disminuir el sobrepeso y la desnutrición en los infantes. Debido a esta problemática se propone el desarrollo de la solución informática de nutrición infantil SINI, que después de haber realizado un estudio de las necesidades de los infantes por desnutrición o sobrepeso a los centros de salud, se concluye en que el SINI debe satisfacer las siguientes necesidades y cumplir los siguientes requerimientos: 1. Los centros de salud disponen de varios especialistas en el área de nutrición infantil, que deben tener acceso al sistema informático, además deben poder registrarse nuevos especialistas o permitir dar de baja a otros que se retiren. 2. En el área de nutrición infantil se debe tener el control de los pacientes desde que nacen hasta que pasen la etapa de la infancia, se debe contar con el registro de todos los chequeos que el paciente se haga en todo ese transcurso de tiempo, además de las recetas médicas, dietas y fichas de control emitidas por el especialista a cargo. 3. Los especialistas deben poder tener cuadros estadísticos y curvas de crecimiento de sus pacientes 4. El centro hospitalario debe garantizar las dietas, menús y recetas emitidas por los especialistas basándose en el SINI, de acuerdo a los parámetros de entrada que el mismo ingrese de su paciente. 5. El centro hospitalario requiere que los datos sean fiables, y sean accesibles a los usuarios que lo necesiten. 6. El centro hospitalario debe tener un sistema informático disponible durante todos los turnos en los que ofrezca atención médica, a sus pacientes. B. Modelado del negocio inicial del SINI para centros de salud de la Ciudad de Cuenca en el área de nutrición infantil. La parte correspondiente del modelo de negocios consiste en tres casos de uso: 1. 2. 3. Administración de usuarios, respaldos y auditorias. Expedientes infantiles. Diseño de dietas - 22 - r Fig. 17 El caso de uso Administración de Usuarios, Respaldos y Auditorias, del modelo de negocios inicial del SINI. Fig. 18 El caso de uso Expedientes Infantiles, del modelo de negocios inicial del SINI. Fig. 19 El caso de uso Diseño de Dietas, del modelo de negocios inicial del SINI. - 23 - Tarjetas de Descripción para cada Caso de Uso del Modelo de Negocio Inicial del SINI: Fig. 20 La descripción del caso de uso Administración de Usuarios, Respaldos y Auditorias, del modelo de negocios inicial del SINI. Fig. 21 La descripción del caso de uso Expedientes Infantiles, del modelo de negocios inicial del SINI. - 24 - Fig. 22 La descripción del caso de uso Diseño de Dietas, del modelo de negocios inicial del SINI. En esta etapa inicial no se conoce detalles sobre los historiales clínicos de los pacientes, pero sin embargo el módulo Expedientes Infantiles, es parte esencial para el modelo de negocio inicial. Para abreviar los tres casos de uso anteriores, se combinan en el diagrama de casos de uso de la siguiente figura 23. CASO DE USO GENERAL ADMINISTRACION DEL SISTEMA EXPEDIENTES INFANTILES ADMINISTRADOR PACIENTE DISEÑO DE DIETAS NUTRICIONISTA DISEÑO DE ALIMENTOS Fig. 23 Diagrama de caso de uso del modelo de negocios inicial del SINI. - 25 - C. Caso de uso específico SINI, módulo de expedientes infantiles. El caso de uso específico del sistema de nutrición infantil SINI (Fig. 24), módulo de expedientes infantiles contempla la parte normal del escenario. En este escenario existe una persona a quien se le otorga un usuario denominado “Súper Usuario” que es el nutricionista con privilegios de acceso a toda la plataforma informática, para poder realizar el manejo del SINI. Existen tres escenarios dentro de este módulo, como son los escenarios de: a) Registrar los datos de los pacientes. b) Registrar las dietas de los pacientes. c) Registrar los hábitos de los pacientes. El escenario de la registrar los datos de los pacientes, tiene el súper usuario quien tiene manejo a toda la información, permitirá ingresar nuevos pacientes, eliminar pacientes o actualizarlos. En el escenario de registrar las dietas de los pacientes, el sistema informático debe permitir asignar dietas nutricionales a cada uno de los pacientes que se registran. En el escenario de registrar hábitos de los pacientes, el sistema registra cada uno de los hábitos ya sean físicos o alimenticios del paciente. EXPEDIENTES INFANTILES NUTRICIONISTA Registrar los datos del paciente PACIENTE Registrar la dietas del paciente Ingreso los habitos del paciente Fig. 24 Diagrama de caso de uso específico, módulo de expedientes infantiles. - 26 - REGISTRAR DATOS DEL PACIENTE Ingreso datos del paciente PACIENTE NUTRICIONISTA Reporte estadistico nutricional Fig.25 Caso de uso específico del sistema de nutrición, registro datos del paciente. REGISTRO DE DIETAS DEL PACIENTE NUTRICIONISTA Visualizacion de dietas del paciente PACIENTE Reporte de la dietas calorias Fig.26 Caso de uso específico del sistema de nutrición, registro de hábitos del paciente. - 27 - REGISTRO DE HABITOS DEL PACIENTE NUTRICIONISTA Ingreso los habitos del paciente PACIENTE Reporte del habitos fisicos Reporte habitos alimenticios Fig.27 Caso de uso específico del sistema de nutrición, registro de dietas del paciente. D. Tarjeta de descripción: Caso de uso específico expedientes infantiles Fig. 28 Tarjeta de descripción para el diagrama de caso de uso específico, módulo de expedientes infantiles: Ingreso datos del paciente. - 28 - Fig. 29 Tarjeta de descripción para el diagrama de caso de uso específico, módulo de expedientes infantiles: visualizar dietas del paciente. Fig. 30 Tarjeta de descripción para el diagrama de caso de uso específico, módulo de expedientes infantiles: registrar hábitos del paciente. - 29 - Tarjeta de descripción Caso de uso específico Registro de Dietas de los pacientes Fig.31 Tarjeta de descripción reporte de dietas de los pacientes Tarjeta de descripción caso de uso específico Registro de datos del Paciente Fig.32 Tarjeta de descripción reporte nutricional de los pacientes - 30 - Tarjeta de descripción del caso de uso específico registro de Hábitos del paciente Fig.33 Tarjeta de descripción reporte hábitos tanto físicos como alimenticios de los pacientes E. Diagrama de clases del Sistema Fig.34 Diagrama de clase general del sistema nutricional - 31 - F. Modelo entidad relación, Sistema de Nutrición Infantil: Módulo de Expedientes infantiles Fig. 35 Modelo de entidad relación del sistema informático de nutrición infantil SINI, Modulo de expedientes infantiles . G. Diagrama de colaboración del sistema SINI REPORTE DE HABITOS : INTERFAZ NUTRICION transient 2: PROCESA LA OPERACION SELECCIONADA 6: BUSCAR DIETA( ) 13: VISUALIZA HABITOS 10: DEVUELVE DATOS DE PACIENTE 5: ENVIA REQUERIMIENTO DE DIETA PARA EL PACIENTE 1: ENVIA DATOS DEL PACIENTE : DIETAS sequential : DATOS PACIENTE sequential INFRESA DATOS DEL PACIENTEDATOS 14: TRASFIERE LA INFORMACION AL PACIENTE REPORTE DE HABITOS : INTERFAZ NUTRICION transient : NUTRICIONISTA 9: REGRESA INFORMACION DEL PACIENTE 4: DEVUELVE INFOMACION REQUERIDA 8: BUSCAR DIETA REQUERIDA 7: REGRESA LA DIETA 3: ENVIA INFORMACION SI EL PACIENTE LO REQUIERE DATOS QUE PROPORCIONA EL CLIENTE AL NUTRICIONISTA PACIENTE 12: VIZSUALIZA DIETA PACIENTE 11: DEVUELVE DATOS DEL PACIENTE REPORTE DE HABITOS : INTERFAZ NUTRICION transient : HABITOS sequential DESCRIPCION DIETAS Fig. 36 Diagrama de colaboración que indican las clases para la realización del caso de uso específico, módulo de expedientes infantiles. - 32 - H. Diagrama de actividades del SINI INTERFAZ SISTEMA DE NUTRICION : PACIENTE BASE : DIETAS BASE : DATOS PACIENTE BASE : HABITOS : NUTRICIONISTA 1: REQUERE DATOS DELPACIENTE 2: PROPORCIONA LOS DATOS AL NUTRICIONISTA 3: INGRESA DATOS AL SISTEMA 4: DATOS ENVIADOS A PROCESO 5: PROCESA LA OPERACION 6: ACTUALIZACION DATOS 7: REQUIERE CEDULA 8: PROPORCIONA LA CEDULA 9: INGRESA DATOS AL SISTEMA 10: DATOS ENVIADOS PARA EL PROCESO 11: PROCESA LA INFORMACION 12: RECUPERA LA DIETA 13: PROCESA LA INFOMACION 14: ENVIA LA DIETA REQUERIDA 15: REQUIERO LA CEDULA 16: PROPORCIANA DATO REQUERIDO 17: INGRESA AL SISTEMA 18: RECUPERA LOS DATOS 19: PROCESA LOS DATOS DEL PACIENTE 20: VIZAULIZA LOS DATOS DEL PACIENTE 21: MUESTRA ITEMS DE HABITOS 22: REQUIERE HABITOS 23: PROPORCIANA LA INFORMACION 24: ENVIA INFORMACION PARA EL PROCESO 25: PROCESA LA INFORMACION Fig.37 Diagrama de actividades general del sistema nutricional - 33 - CAPITULO III: DISEÑO 3.1ARQUITECTURA DE LA SOLUCIÓN La arquitectura de la solución informática de nutrición infantil, sintetiza el código fuente del sistema informático para satisfacer los requisitos del mismo. En el proceso de la arquitectura encapsula y define las áreas de solución expresadas en conjunto y separadas por: problemas que son manejables, problemas conceptuales, y finalmente, por proporciones realizables. Identifica y analiza una o más estrategias de aplicación a un nivel de detalle consistente con el sistema técnico y comercial de los requisitos y posibles riesgos del desarrollo de la solución informática, según [12]. De esta forma la arquitectura para una solución informática está definida, por todos sus requisitos que son el conjunto de elementos para lo cual es sistema informático se desarrolla. Los objetivos de plan arquitectónico de SINI son: 1. 2. 3. 4. 5. Que la arquitectura como del hardware, el software, las interfaces, y comunicación, satisface los requisitos del sistema informático. Que la arquitectura del sistema informático es realizable. Que la arquitectura seleccionada es basada en el criterio de la selección especificada, en la solución informática. Que la base para la verificación de los elementos del sistema informático está definido. Que la base para la integración de los elementos del sistema informático está establecido. Plan arquitectónico que las tareas del sistema informático de nutrición infantil, describen para el desarrollo del sistema. 1. Evaluación de la planificación para el desarrollo de la solución informática. 2. Análisis de la interfaz de la solución informática. 3. Generación de código. 4. Sistema de integración para pruebas de SINI 5. Sistema calificación por el usuario de las pruebas de SINI 6. Sistema de mantenimiento de SINI 3.2 ARQUITECTURA DE LA INFORMACIÓN La arquitectura de la información es uno de los pasos importantes ayudan a tener ordenado las fases de la realización del software, por esto para el desarrollo de SINI en el módulo de expedientes infantiles, está estructurado por los siguientes componentes: - 34 - 3.2.1 ARQUITECTURA DE INFORMACIÓN EN LAS FASES DEL PROCESO DE DESARROLLO DE SOFTWARE: El objetivo del arquitecto de información será construir estructuras de información para que sean fáciles de entender y utilizar. Para poder lograrlo, debe alinear las metas del negocio con los objetivos de los usuarios, según [13]. En cada uno de los flujos de modelación del negocio y de captura de requisitos sería necesario que se involucre al arquitecto de información, responsable del estudio de la audiencia a la cual va a estar dirigido el producto. Además en esta etapa el arquitecto de información debe tener claro el negocio de la institución para la que se está realizando el software. En la imagen mostrada a continuación se puede apreciar la relación existente entre las fases del proceso propuesto para desarrollar la Arquitectura con los flujos de trabajo de la metodología RUP, en dependencia de las actividades que se llevan a cabo en cada uno de estos. Fig. 38 Relación entre las fases del proceso de AI y los flujos de trabajo de RUP. En el desarrollo de software, la metodología empleada, utiliza para representación los siguientes gráficos: Fig. 39 Actividad que se desarrolla en el proceso, [12]. Fig. 40 Trabajador del proceso que desarrolla una o varias actividades, [12]. - 35 - También se utiliza otros elementos para el proceso, que pueden ser: los documentos entregables, las plantillas o ficheros salida de las herramientas y las técnicas que se utilizan. En cada uno de los elementos que se utilizan van a tener flechas que representan si estas entrar a desarrollar las diferentes actividades. 3.2.2 FASE DE INICIO DE LA ARQUITECTURA DE LA INFORMACIÓN Para la fase inicial del proceso de desarrollo de nuestro software los integrantes del proyecto deben estar involucrados en las tareas para que los desarrolladores puedan conocer el funcionamiento del consultorio de los nutricionistas infantiles, y así realizar el levantamiento de los requisitos que debe cumplir el sistema informático de nutrición infantil. El proceso de la arquitectura de la información, se estudiará y analizará todo el material existente que se encuentre asociado al proyecto tal como el Anexo 1, de manera que se pueda definir claramente el alcance y se asegure que tanto los ejecutores del proyecto como los usuarios finales compartan las mismas definiciones, principios, objetivos, metas y estrategias, planteadas para poder alcanzarlas. También se realizara un estudio detallado de los usuarios que tendrá el sistema informático, para conocer sus necesidades, características y expectativas. En esta fase se clasifican y organizan todos los contenidos de información que serán usados, para esto se utilizan técnicas de recopilación de información como entrevistas, encuestas, y otras técnicas cuantitativas como el Card Sorting10, y el análisis de secuencia. En la fase inicial nosotros los desarrolladores del proyecto, en la arquitectura de la información, centramos nuestro trabajo tal como se indica en la fig. 41. - 36 - Fig. 41 Relación entre actividades, desarrollador y elementos de la fase de inicio del proceso de AI, [12]. - 37 - 3.2.3 FASE DE CONSOLIDACIÓN INFORMACIÓN DE LA ARQUITECTURA DE LA En la etapa de desarrollo de software, es donde los desarrolladores se centran en analizar qué hacer y cómo hacerlo, en esta etapa también se realiza el modelo del sistema a construir y se define la arquitectura del mismo, aquí es donde la arquitectura de la información desarrolla su fase de consolidación, especificando la estructuración de los contenidos de información e introduciéndose en el diseño inicial del producto. En esta fase se hace la definición general o de alto nivel de la AI. Se asignan los nombres o etiquetas más acertados y relacionados entre sí a cada sección, conformando el esquema de contenidos definitivo. Se definen las directrices generales de la estructura y organización de la información, [12]. En esta fase los desarrolladores se enfocarán para elaborar el conjunto de actividades y artefactos como se representan en la fig.42. Fig. 42 Relación entre actividades, desarrolladores y elementos de la fase de consolidación del proceso de AI, [12]. - 38 - 3.2.4 FASE DE LA INFORMACIÓN VALIDACIÓN DE LA ARQUITECTURA DE LA Una vez terminadas todas las actividades de la arquitectura de la información, es posible la generación del primer prototipo9 del sistema informático, este prototipo es sometido a una revisión detallada para evaluar que efectivamente cumplirá con los requerimientos planteados. El desarrollador revisa si el proyecto está cumpliendo los objetivos, haciendo para esto pruebas con los usuarios especialistas nutricionistas que permiten, anticipar el comportamiento real del sistema informático y podemos medir la satisfacción de los mismos. En esta fase el desarrollador implementa las actividades y elementos, que se indican en la Fig. 43. Fig. 43 Relación entre actividades, desarrolladores y elementos de la fase de validación del proceso de AI, [12]. 9 Prototipo: Proyecto funcionando previo al producto final. - 39 - 3.2.5 ROLES DEL PROCESO Según [13], para desarrollar todas las actividades y elementos presentados, el equipo de arquitectura de la información sea interdisciplinario, ya que está integrado por profesionales de varias áreas como la nutrición y salud nutricional, comunicación social e informática. Cada uno de estos jugará un papel fundamental para lograr una arquitectura informática robusta y útil. La relación persona-rol no tiene que ser necesariamente de uno a uno, pudiendo una persona desempeñar más de un rol siempre que estos no trabajen en la misma fase. A continuación se explican brevemente los roles propuestos. Compilador de Información: Este será el encargado de desarrollar un conjunto de actividades que le permitirán recopilar toda la información necesaria para establecer las todas las bases que servirán como guía para el desarrollo de la arquitectura de la información. Deberá conocer los principales usuarios directos de la organización. Analista de Contenidos: Se encargará de cumplir un conjunto de técnicas que le permitirán descubrir y diagnosticar las necesidades de información de la comunidad a la cual sirve. Debe poseer un conjunto de habilidades como: visión global de todos los elementos de información y su integración, alto conocimiento de las técnicas de categorización de la información, buena comunicación y poder de síntesis, capacidad de obtener evidencias del conjunto de información e inferir conclusiones, identificar conexiones entre ideas, y ser receptivo a las necesidades de otras personas. Arquitecto de Información: El arquitecto es el responsable de llevar a cabo las actividades encaminadas a lograr una organización óptima de los contenidos de información que se presentarán, así también la forma en que estos serán mostrados a los usuarios. Evalúa, analiza, organiza, reelabora y presenta la información de manera que tenga la máxima utilidad para sus destinatarios. Ensamblador de Interfaz de Usuario: El papel fundamental del ensamblador será construir las pantallas de la aplicación desde el punto de vista de la organización e interacción de la información, siguiendo en todo momento las pautas recomendadas en el proceso para garantizar la accesibilidad y usabilidad de la aplicación. Como resultado de su trabajo se obtiene un boceto gráfico de la estructura informacional de la aplicación que servirá posteriormente como guía a los diseñadores y desarrolladores del proyecto. Específicamente realiza su trabajo durante la fase de consolidación del proceso. Evaluador de Contenidos: Su tarea será garantizar que el producto final sea fácil de utilizar y comprender, que permita un alto nivel de accesibilidad independientemente de las características particulares de cada usuario y del dispositivo usado para hacerlo. Emitirá criterios que evaluarán y permitirán corregir los errores encontrados en relación con estos aspectos, logrando satisfacer las necesidades de los usuarios. Realiza su labor durante la fase de validación. 3.3DISEÑO DE LA INTERFAZ GRÁFICA En la interfaz gráfica del sistema de nutrición infantil, SINI, la fig. 44, presenta la interfaz del menú principal, que comprende todos los componentes del módulo de expedientes infantiles del sistema. - 40 - Fig.44 Menú principal revisado del sistema informático de nutrición infantil SINI, módulo de expedientes infantiles del sistema. Establecido. Los iconos que tenemos en el sistema de expedientes infantiles es el siguiente: Paciente: Donde se registra todos los datos del paciente que se atienden en el area de nutricion, se los a identificar en el sistema como lo indica en la figura 45. Fig. 45. Icono del pacientes Dietas: Donde se obtiene un registro de las dietas del paciente y se lo representa en la figura 46. Fig. 46. Icono del dietas Nutricion: Registro de habitos alimenticios y fisicos del paciente y en es sistema se lo representa en la figura 47. Fig. 47. Icono del nutricion - 41 - Historial: Donde se obtiene el estadistico del paciente para ver como esta su avance en el tratamiento de nutricion y se lo indica en la figura 48. Fig.48. Icono del historial Botones de Registro: Se encuentran los botones para realizar operaciones en cada uno de nuestros procesos y se los reprenta en el sistema con los iconos que indica la figura 49. Fig.49 Iconos de operaciones Módulo de expedientes infantiles del sistema; datos del paciente: Como se indica en la figura 50, el icono “Paciente” permite ingresar nuevos pacientes, buscar un paciente y eliminar. - 42 - Fig. 50 Menú Principal icono “Paciente” del sistema informático de nutrición infantil SINI, módulo de expedientes infantiles del sistema. Módulo de expedientes infantiles del sistema; datos de los pacientes: Como se indica en la fig. 51, la interfaz para ingresar pacientes y tener de estos un registro es donde vamos a tener los siguientes datos que ingresar; cedula, nombres, apellidos, fecha de nacimiento, teléfono, dirección, la información física del paciente en la cual vamos a tener la talla que va a ser ingresada en centímetro y el peso que realizar ingresado en kilogramos. También en este ya teniendo registrado al paciente y en una nueva consulta va a poder ingresar las nuevas tallas y pesos del paciente para así poder tener un registro de este. Por ultimo vamos a tener un registro de los pacientes que se van ingresando que se va a mostrar en una tabla como se indica en la figura 52. Fig. 51 Módulo de expedientes infantiles datos del paciente - 43 - Fig. 52 Tabla de registro de pacientes Módulo de expedientes Infantiles del sistema; dietas del paciente: Como se indica en la fig. 53, el icono “Dietas” la cual tiene dos pestañas, la pestaña del “manejo de dietas del paciente”, la otra pestaña que es para el registro de dietas. Fig. 53 Menú Principal Pestaña “DIETAS” del sistema informático de nutrición infantil SINI, módulo de expedientes infantiles del sistema. - 44 - Módulo de expedientes infantiles del sistema; dietas del paciente: Como se indica en la figura. 54, la cual se indica dos interfaces la primera “manejo de dietas del paciente” que se indica en la figura 55. Esta interfaz sirve para recuperar la dieta que el paciente va a tener en el tratamiento aquí solo ingresamos el número de cedula y se recupera los datos de este, y las calorías que va a consumir en su dieta, para las calorías genera un cálculo interno con el peso y la talla del paciente. En la según interfaz como se indica en la figura56. Sirve para el registro de una dieta la cual vamos a ingresar el código de la dieta, es decir el número de dieta que se guarda, las calorías que va a tener esta dieta, luego ingresamos la dieta eligiendo si esta es desayuno , medio día, almuerzo, media tarde y merienda. Finalmente guardamos para así tener más dietas registradas. Fig. 54 Módulo de expedientes infantiles del sistema, dietas del paciente del sistema SINI. Fig.55 Módulo de expedientes infantiles del sistema, dietas del paciente del sistema SINI “manejo de dietas del paciente”. - 45 - Fig. 56 Módulo de expedientes infantiles del sistema, dietas del paciente del sistema SINI “registro de dietas” En el módulo de expedientes infantiles: Dietas del paciente, se tiene un reporte de la dieta la misma que se va a poder imprimir para que el paciente se pueda llevar esta a su casa y se pueda seguir con el tratamiento ya sea mensual semanal o diaria según las especificaciones del nutricionista. A continuación se indica el reporte que se indica de la dieta del paciente esto se encuentra en el ANEXO B. Módulo de expedientes Infantiles del sistema; hábitos del paciente: Como se indica en la fig. 57, el icono “Nutrición” la cual contiene los hábitos alimenticios y los hábitos físicos que el paciente tiene los cuales se pueden eliminar, actualizar ingresar uno nuevo. Fig. 57 Módulo de expedientes infantiles del sistema: Hábitos del paciente del sistema SINI Módulo de expedientes infantiles del sistema; hábitos del paciente: Como se indica en la figura 58, la cual contiene dos pestañas, la una es para registrar los “hábitos alimenticios” y en la otra pestaña se registran los “hábitos - 46 - físicos” los cuales vamos a poderlos modificar, eliminar y creara nuevos alimentos para poder elegir en un futuro nuevos hábitos alimenticios en el sistema de nutrición Fig. 58 Módulo de expedientes infantiles; hábitos, donde el paciente registra sus hábitos alimenticio y físicos. Como anteriormente se había indicado la interfaz de hábitos tiene dos pestañas el primero es de “habitos alimeticios” que se indica en la figura 59, este se divide en dos partes la cual registramos el número de cedula del paciente y mostramos los datos de este, luego elegimos de los hábitos que se presentan en la parte derecha de la interfaz luego guardamos los hábitos del paciente, en la tabla que se indica en la fig. 60 se registran nuevos hábitos alimenticios para asignarle a paciente. Fig. 59 Módulo de expedientes infantiles; hábitos, hábitos alimenticios de los pacientes - 47 - Fig. 60 Tablas de hábitos con sus respectivas equivalencias calóricas. En la segunda pantalla tenemos los hábitos físicos que tiene el paciente en el cual también ingresamos el número de cedula y se recuperan todos los datos de este, luego ingresamos el número del hábito físico del paciente, la fecha de ingreso del hábito, y la frecuencia, en caso de la frecuencia es muy importante que se ingrese debido a que con esta podemos tener el hábito físico y su frecuencia para ver en el transcurso del tratamiento este aumenta o disminuye, esto se indica en la figura 61. Fig. 61 Interfaz del hábito físico del paciente en el sistema de expedientes infantiles SINI. Módulo de expedientes infantiles del sistema;historial del paciente: Como se indica en la figura 63, indica los estadísticos nos indica el avance que ha tenido en el transcurso del tratamiento, en el cual ingresamos la cedula del paciente la misma que recupera los datos del paciente, y también un estadístico del avance de este.. - 48 - Fig. 62 Interfaz del historial del paciente En el historial del paciente tenemos que ingresar la cedula del paciente y los datos de este se recuperan, también se indica los registros que ha tenido este como se indica en la figura 63. Fig. 63 Registro de avances del paciente En esta interfaz también indica un estadístico del paciente para poder ver los avances de una manera más - 49 - dinámica y así poderle indicar al paciente que es lo que está mal o que está en excelente condiciones su tratamiento como lo indica en la figura 64. Fig. 64 Estadistico del avance del paciente en tratamiento nutricional A continuacion vamos a indicar cada uno de los botones de operaciones que hay en el sistema SINI expedientes infantiles, al momento que estamos en la interfaz del “Paciente” el icono “Nuevo” como se indica en la figura 65 el formulario queda limpio para poder ingresar un nuevo paciente. Fig. 65 Ingresar un nuevo paciente - 50 - Luego tenemos el icono “Visualizar” que al momento de ingresar la cedula presionamos clic en el icono y recupera los datos del paciente, tal como se indica en la figura 66. Fig. 66 Visualizar un nuevo paciente Tenemos a continuacion el icono “Guardar” el cual se utiliza para guardar datos de un paciente nuevo y asi poderlo regitrar esto indica en la figura 67. Fig. 67 Visualizar un nuevo paciente Al momento que el paciente se registro erroneamente muchos de datos a este le podemos eliminar dando click en el icono “Eliminar” y se elimina el paciente, asi lo mostramos en la figura 68. - 51 - Fig. 68 Icono de Eliminar a un paciente Luego tenemos el icono de “limpiar” que al momento de dar click sobre este, se limpia los items para poder nuevamente ingresar otro paciente, y asi lo podemos vizualizar en la figura 69. Fig. 69 Icono “Limpiar” los datos del paciente para poder ingresar uno nuevo. Al momento que se ha registrado a los pacientes y en una nueva consulta podemos recuperar los datos de este y poder ingresar los nuevas medidas del paciente para asi poder tener un registro en base de datos esto podemos observar en la figura 70. - 52 - Fig. 70 Elegir un paciente para poder registrar las medidas nuevas - 53 - CAPITULO IV: CONSTRUCCIÓN Y PRUEBAS. 4.1 CONSTRUCCIÓN El sistema informático de nutrición infantil, SINI, está desarrollado bajo el lenguaje de programación java, y se ha establecido los siguientes paquetes: El sistema informático de nutrición infantil, SINI, está desarrollado bajo el lenguaje de programación java, y se ha establecido los siguientes paquetes: Paquete imágenes: aquí se encuentra todas las imágenes que se tienen en el sistema se indican en la figura 71. Fig. 71 Imagen utilizada en los formularios que maneja usuarios de SINI. - 54 - Paquete medico GUI; en los cuales tenemos las interfaces del módulo expedientes infantiles del sistema SINI, tenemos los formularios java que son los siguientes: Dietas.java Historial.java Nutrición.java Pacientes.java Principal.java Dietas.java: en las que registramos las dietas del paciente tenemos el formulario en la figura 72 se indica el diseño del mismo. Fig. 72 Formulairo dietas. Java diseño El codigo fuente del formulario dietas se encuentra en el ANEXO C. Lo que se diseño en dietas.java son los textfield para ingesar la cedula, poder recurer los nombres, apellidos, ingresar la fecha de nacimiento como se mestra en la figura 73, tambien utilizamos textfield para recupera e ingresar la informacion de la dieta como lo muetsra en la figura 74. Fig. 73 Textfield para ingreso de informacion personal del paciente - 55 - Fig. 74 Textfield para ingreso de informacion de la dieta del paciente Diseñamos se utiliza tables los cuales indican las dietas que el paciente puede consumir en su tratamiento así indica en la figura 75. Y la tabla de visualiza el detalle de la dieta que el paciente va a consumir esto se diseñó como se indica en la figura 76. Fig. 75 Tabla de dietas para el paciente Fig. 76 Tabla detalle de dietas del paciente - 56 - Finalizamos este formulario con el diseño de button que nos sirven para recuperar los datos del paciente y poder imprimir la dieta del paciente se indican estos botones en la figura 77. Fig. 77 button del formulario de dietas.java Historial.java este es el formulario donde diseñamos y programamos para poder ver el historial del avance del paciente en su tratamiento de nutrición, a continuación se indica el diseño del formulario de historial en la figura 78. Fig. 78 Diseño del formulario de historial En el diseño de este formulario utilizamos textfield para los datos del paciente como se lo indica en la figura 79. Table para mostrar los avances del paciente que ha tenido en su tratamiento se visualiza en la figura 80 y un button para poder ver datos estadísticos del paciente como se lo ve en la figura 81. Fig. 79 Textfield del formulario historial.java - 57 - Fig. 80 Table del formulario historial.java Fig. 81 Button del formulario historial.java El código fuente del formulario historial se lo encuentra en el ANEXO D. Nutricion.java en este formulario se diseña y programar para ingresar de manera eficaz los hábitos del paciente se indica en la figura 82. Fig. 82 Diseño del formulario de los habitos - 58 - En este formulario se utilizan las herramientas tales como textfields para recuperar los datos del paciente, también para ingresar los hábitos físico como alimenticios del paciente como se indica en la figura 83, luego los buttons que son utilizados para guardar los hábitos físicos y alimenticios del paciente esto se visualiza en la figura 84, los tables son utilizados para tener un registro de los hábitos físicos y alimenticios del paciente veremos esto en la figura 85 y en la figura 86 están los pannels son utilizados para dividir el ingreso de los hábitos físicos de los hábitos alimenticios. Fig. 83 Textfiel del formulario nutricion.java Fig. 84 Button del formulario nutricion.java - 59 - Fig. 85 Tables del formulario nutricion.java - 60 - Fig. 86 Pannel del formulario nutricion.java El código fuente del formulario nutrición se lo encuentra en el ANEXO E. Pacientes.java; en este formulario es donde diseñamos y programamos para ingresar y tener registros de cada uno de los pacientes, el diseño realizado se lo presenta en la figura 87. Fig. 87 Formularios de pacientes En este formulario se utilizan las herramientas tales como textfields para recuperar los datos del paciente, también para ingresarlas medidas del paciente es decir talla y peso del paciente como se indica en la figura 88, luego los buttons que son utilizados para guardar los datos personales del paciente y para registrar la talla y peso del paciente esto se visualiza en la figura 89, los tables son utilizados para tener un registro de los pacientes que se registran en el sistema veremos esto en la figura 90. - 61 - Fig. 88 Textfield de pacientes.java Fig. 89 Button de pacientes.java Fig. 90 Tables de pacientes.java - 62 - El código fuente del formulario paciente se lo encuentra en el ANEXO F. Principal.java aquí diseñamos y desarrollamos la interfaz que el nutricionista va a interactuar esta se indica en la figura 91. Fig. 91 Formulario principal que contiene a los otros formularios En este formulario se utilizan las herramientas tales buttons que son utilizados para ingresar a cada uno de los formularios que anteriormente se describe, también hay para que en los formularios se realicen acciones como nuevo, eliminar, guardar, etc. esto se visualiza en la figura 92, el Deshtopannel son utilizados para visualizar los formularios veremos esto en la figura 93. Fig. 92 Button del formularios principal.java - 63 - Fig. 93 Desktopannel del formularios principal.java El código fuente del formulario principal se lo encuentra en el ANEXO G. Paquete controlador: donde se tiene las siguientes clases: Controlador_Detalle_Dieta$2.class Controlador_Detalle_Dieta$1.class Controlador_Detalle_Dieta.class Controlador_Detalle_Dieta$3.class Controlador_Dieta$2.class Controlador_Dieta$1.class Controlador_Dieta$3.class Controlador_Dieta.class Controlador_Dietas.class Controlador_Equivalente$1.class Controlador_Equivalente$2.class Controlador_Habito.class Controlador_Equivalente.class Controlador_Habito_Alimenticio$1.class Controlador_Habito_Alimento$1.class Controlador_Habito_Alimenticio.class - 64 - Controlador_Habito_Fisico$1.class Controlador_Habito_Alimento.class Controlador_Habito_Fisico.class Controlador_Paciente$1.class Controlador_Paciente$3.class Controlador_Paciente$2.class Controlador_Paciente.class Controlador_Registro_Tallas$1.class Controlador_Registro_Tallas$3.class Controlador_Registro_Tallas$2.class Controlador_Registro_Tallas.class Controlador_Reporte.class Aquí tenemos registradas todas la clases para las conexiones con la base de datos, a continuación mostraremos un ejemplo de código fuente la clase detalle dieta.class se encontrara en el ANEXO H. Paquete de negocio: que es donde se programa a cada una de las variables que vamos a utilizar para guardar los datos en cada una de las tablas son las siguientes. Detalle_Dieta.class Habito_Alimenticio.class Dieta.class Dietas.class Habito_Alimento.class Registro_Tallas.class Reporte.class Equivalente.class Habito_Fisico.class Tiempo_Dieta.class Mostramos en el ANEXO H código fuente de detalle dieta.class Por último indicamos en la figura 94 los paquetes que anteriormente describimos. - 65 - Habito.class Paciente.class Fig. 94 paquetes del sistema 4.2 PRUEBAS De acuerdo al modelo de desarrollo empleado en este proyecto, la fase de pruebas del sistema informático se establece una vez que se tiene listo el prototipo del sistema informático. ¿Qué buscamos al realizar las pruebas del sistema informático? 1. Probar si el sistema cumple los resultados esperados. 2. Los usuarios podrán testear el sistema informático, y dar su criterio al desarrollador. 3. Crear una matriz de resultados de las pruebas y analizarlos detenidamente. 4. Las pruebas deben realizarse con entradas inválidas e inesperadas así como las válidas y esperadas. 5. El sistema deberá ser probado de dos maneras: primero probarlo como esperamos que este funcionando, y segundo probarlo como creemos que no podría estar funcionando. 6. La posibilidad de encontrar errores en el sistema debe ser, asumida con responsabilidad. Una vez finalizado el sistema informático SINI, se realizaron las siguientes pruebas: Test Unitarios Test de Funcionalidad Test de Sistema Test de Aceptación Test de Instalación Tabla II: Matriz de Pruebas Aplicadas al Sistema Informático de Nutrición Infantil TEST Unitario Integración Funcionalidad OBJETIVO Detectar errores en los datos, lógica, algoritmos. Detectar errores de interfaces y relaciones entre componentes. Detectar errores en la implementación de requisitos. PRUEBAS APLICADAS PARTICIPANTES AMBIENTE Programador Desarrollo MÉTODO UTILIZADO Caja Blanca. Programador Desarrollo Funcional Analista Desarrollo Funcional - 66 - Sistema Aceptación Detectar fallas en el cubrimiento de los requerimientos. Detectar Fallos en la implementación del sistema Analista Desarrollo Analista, Usuario Final Productivo Funcional -------------------- Métodos utilizados para realizar las pruebas del sistema informático, SINI: Caja blanca: 1. 2. 3. 4. Ingresamos valores en cada uno de los en cada formulario relacionando a un paciente en cada uno de estos,ejp: Ingresamos su número de cédula del paciente y recupere los datos correctos de este; su nombres y sus apellidos que es lo que se recupera en todos los formularios. Cuando actualizamos los datos del paciente como la dirección, el teléfono estos se actualicen correctamente Que las dietas se recuperen correctamente con el rango de dietas que tiene el paciente. Que el desarrollo del tratamiento del paciente este de acuerdo con los estadísticos, que se nos visualice. Funcional: como se indica en la figura 95 para realizar un diseño de pruebas funcional según [13]. Fig. 95 Entradas i salidas del procesos de diseño en casos de prueba, según [13]. Entones se realiza lo siguente: 1. 2. 3. 4. Se ideintifica cada unos de los escenarios que vamos a utilizar y que ya lo describimos anteriormente. Se revisa si los escenarios son redundantes y los elimina. Analiza cada uno de los escenarios y se documenta cada uno de ellos. Finamente se evalua si los escenarios esta correctamente ejecutados. - 67 - OBSERVACIONES, CONCLUSIONES Y RECOMENDACIONES A. Observaciones: las siguientes observaciones después de haber concluido el proyecto son las siguientes: El proyecto ha sido difícil concluirlo en menos tiempo ya que la información que se requiere no es fácil obtenerla, en la parte de salud aún no se ha tomado en cuenta un control de nutrición. El sistema informático está compuesto por tres módulos: Módulo de gestión del sistema, Módulo de expedientes infantiles y Módulo de menús de dietas; el Módulo de expedientes infantiles del sistema se elaboró con prototipos de los dos módulos restantes, para de esta forma realizar las pruebas del sistema informático. El sistema informático guarda su información en una base de datos creada en VERSANT que es un motor de bases de datos con arquitectura designada al soporte Cliente/Servidor con acercamiento a la computación distribuida, que no dispone de interfaz gráfica, solo es administrable mediante comandos, y es un archivo de texto plano. El sistema informático puesto en producción, cuenta con un archivo ejecutable que puede ser instalado en cualquier ordenador, siempre tomará como ruta de instalación “C:\SINI\”. B. Conclusiones: Al finalizar este trabajo teórico práctico, puedo concluir con lo siguiente: a. Este proyecto se ha basado en unos de los objetivos plan nacional del buen vivir que tienen el gobierno actual, y s basa en el aporteal control de la nutricion ya que esta es una de las áreas fundamentales para el bienestar de nuestra sociedad, controlando la inadecuada nutrición de nuestros infantes, ya que con esto se disminuirá el consumismo exagerado de las comidas chatarras que en la actualidad se consume. b. El proyecto permitirá tener un control de dietas, expedientes infantiles, los avances del tratamiento del paciente en el proceso de este, el cual permitirá ayudar a tener un mejor estilo de vida y una mejor desarrollo nutricional en los niños de nuestra comunidad. - 68 - RECOMENDACIONES Y TRABAJOS A FUTURO A. Recomendaciones: a. Se recomienda hacer uso del sistema informático dirigido a niños y niñas en el rango de edad de 0 a 5 años, debido a que los requerimientos tomados en cuenta para el desarrollo de la solución informática han sido con especialistas dedicados a la nutrición infantes que se encuentran en este rango de edad. b. Para la ejecución del proyecto en otros centros de atención médica, se deberá realizar cambios en los formularios, código fuente y estructura de las bases de datos, conforme sean las necesidades de los centros de salud. c. Finalmente se recomienda que en el Modulo de expedientes infantiles, se utilice con los otros Módulos del proyecto para tener mejores resultados. B. Trabajos Futuros: Ya que el proyecto SINI está enfocado a los niños y niñas menores a 5 años, un trabajo a futuro podría incrementar el rango de los infantes. La solución informática denominada SINI, en este trabajo teórico práctico es de ambiente escritorio, un trabajo a futuro seria realizarlo en ambiente web. Se debería en un futuro optimizar los módulos los cuales si se detallan más nos ayudarían a mejores resultados, como realizar un Módulo de respaldos en Zip. Concluyendo a futuro seria convertir el sistema informático SINI, en una aplicación multiplataforma, ya actualmente está desarrollado para ser usado en el sistema operativo Windows XP, y Windows 7. - 69 - REFERENCIAS BIBLIOGRÁFICAS. [ Telesur, «Telesur, señal informativa de latinoamérica,» Telesur, 16 Octubre 2013. [En línea]. Available: http://www.telesurtv.net/articulos/2013/10/16/ecuador-busca-eliminar-la-desnutricion-infantil-hasta-20173875.html. [Último acceso: 20 Noviembre 2013]. [ NUTRICIÓN INFANTIL, «GBNUTRICION INFANTIL,» 13 ENERO 2012. [En línea]. Available: http://www.gbnutricioninfantil.com/a-quien-nos-dirigimos.html. [Último acceso: 21 NOVIEMBRE 2013]. [ R. Pressman, Ingeniería del software: Ul enfoque de un profesional (5ta edición), Madrid: Concepción Femández Madrid, 2002. [ Thehorrors , «METODOLOGIA RUP,» 25 JULIO 2012. http://mtdologiarup.blogspot.com/. [Último acceso: 22 NOVIEMBRE 2013]. [ A. FLORES, «EL DESARROLLO DE MI SOLUCIÓN INFORMÁTICA,» 24 MAYO 2012. [En línea]. Available: http://alfredofloresyluisbastardo.blogspot.com/2012/05/metodologia-aplicada.html. [Último acceso: 22 NOVIEMBRE 2013]. [ UNIVERSIDAD DE MURCIA, «APUNTES DE INFORMÁTICA,» 13 OCTUBRE 2011. [En línea]. Available: http://www.um.es/docencia/barzana/IAGP/IAGP2-Metodologias-de-desarrollo.html#BM1. [Último acceso: 22 NOVIEMBRE 2013]. [ DIALNET, «FUNDACIÓN DIALNET,» UNIVERSIDAD DE LA RIOJA, 17 ENERO 2013. [En línea]. Available: http://dialnet.unirioja.es/servlet/tesis?codigo=11271. [Último acceso: 21 NOVIEMBRE 2013]. [ D. HOY, «DIARIO HOY,» content/uploads/2011/05/erradicacion1.jpg. [ Geoffrey Sparks, Sparx Systems, Australia, «CRAFTWARE.NET,» [En línea]. Available: http://www.craftware.net/es/descargas/modelo_de_proceso_de_negocio.pdf. [Último acceso: 25 NOVIEMBRE 2013]. 1] 2] 3] 4] 5] 6] 7] 8] 9] [En línea]. [En Available: línea]. Available: http://i.hoy.ec/wp- [ DIARIO EL TIEMPO, 2012. [En línea]. Available: http://www.eltiempo.com.ec/noticias-cuenca/8126910] msp-promueve-buena-nutricia-n/. [Último acceso: 25 NOVIEMBRE 2013]. [ e. tiempo, «tiempo,» 13 Mayo 2013. [En línea]. Available: http://www.eltiempo.com.ec/noticias11] cuenca/121494-cedei-auspicia-charla-de-nutricion-escolar/. [Último acceso: 25 10 2013]. [ NO SOLO USABILIDAD, «Arquitectura de Información en proyectos de desarrollo de software,» Revista 12] sobre personas, diseño y tecnología, vol. I, p. http://www.nosolousabilidad.com/articulos/ai_rup.htm#sthash.N2VVb0OR.dpuf, 2013. [ L. G. Palacio, «REDALYC,» 05 OCTUBRE 2009. [En línea]. 13] http://www.redalyc.org/articulo.oa?id=75017199005. [Último acceso: 05 ENERO 2014]. Available: [ E. F. L. T. A., «IAEN,» [En línea]. Available: http://repositorio.iaen.edu.ec/bitstream/24000/11/1/IAEN14] 010-2005.pdf. [ INEC, «INEC,» [En línea]. 15] - 70 - [ D. MERCURIO, «ECUADOR INMEDIATO,» 24 ENERO 2011. [En línea]. Available: 16] http://www.ecuadorinmediato.com/index.php?module=Noticias&func=news_user_view&id=142287&umt=el _mercurio_azuay_mas_4_millones_para_desarrollo_infantil_en_azuay. [Último acceso: 26 JUNIO 2013]. [ COMMONS, «WIKIMEDIA,» 17] http://commons.wikimedia.org/wiki/File:Rup_espanol.gif. [En línea]. Available: [ craftware, «Una Introducción al UML,» craftware, 2006. [En línea]. Available: 18] http://www.craftware.net/es/descargas/modelo_de_proceso_de_negocio.pdf. [Último acceso: 15 Octubre 2013]. [ E. tiempo, «EL tiempo,» 23 Octubre 2011. [En línea]. Available: http://www.eltiempo.com.ec/noticias19] cuenca/81269-msp-promueve-buena-nutricia-n/. [Último acceso: 25 10 2013]. [ I. S. 1012-2004, «IEEE Standard for System and Software Verification and Validation,» IEEE Std 1012™20] 2012, p. 223, 2012. [ IT-MENTOR, «PRUEBAS DE SOFTWARE,» IMT, 2013. [En 21] http://materias.fi.uba.ar/7548/PruebasSoftware.pdf. [Último acceso: 7 ENERO 2014]. - 71 - línea]. Available: ANEXOS - 72 - ANEXO A: FORMTO DE LA ENCUESTA REALIZADA A LOS INFANTES DEL 10 AL 14 DE OCTUBRE, EN EL HOSPITAL VICENTE CORRAL MOSCOSO DE LA CIUDAD DE CUENCA. Número 1 Pregunta Opciones de Respuesta ¿ERES UN NIÑO O UNA NIÑA? Niño/ Joven Niña/ Joven nunca ¿CON QUÉ FRECUENCIA SUELES COME FRUTA? 2-3 veces al mes 1 vez a la semana 2-3 veces a la semana Todos los días 2 nunca ¿CON QUÉ FRECUENCIA SUELES COMER ENSALADA, VERDURAS CRUDAS O RALLADAS? (ZANAHORIA, REMOLACHA, ETC) 3 2-3 veces al mes 1 vez a la semana 2-3 veces a la semana Todos los días nunca ¿CON QUÉ FRECUENCIA SUELE COMER VERDURAS COCIDAS? 2-3 veces al mes 1 vez a la semana 2-3 veces a la semana Todos los días 4 manzanas plátanos peras naranjas mandarinas ciruelas ¿CUÁLES DE LAS SIGUIENTES FRUTAS TE GUSTAN? melocotones melón sandia fresas uvas cerezas kiwi piñas otros 5 Muchísima fruta Mucha fruta ¿CREES QUE COMES MUCHA O POCA FRUTA? Ni mucha, ni poca Poca fruta Muy poca fruta - 73 - Marque su Repuesta Sí, siempre Sí, la mayoría de los días ¿HAY FRUTA QUE TE GUSTE NORMALMENTE EN CASA? Algunas veces Rara vez 6 Sí, siempre ¿TE PREPARAN/S EN CASA TROZOS DE FRUTA PARA COMER ENTRE HORAS? Sí, la mayoría de los días Algunas veces Rara vez Nunca 7 Sí, siempre Sí, la mayoría de los días ¿LLEVAS NORMALMENTE FRUTA AL COLEGIO? Algunas veces Rara vez Nunca 8 gusta mucho Tomate gusta poco no le gusta nada no la he probado gusta mucho gusta poco no le gusta nada lechuga no la he probado gusta mucho gusta poco no le gusta nada Acelgas no la he probado gusta mucho ¿CUÁLES DE LAS SIGUIENTES VERDURAS FRUTAS TE GUSTAN O CUÁLES NO TE GUSTAN? gusta poco Coles, berza no le gusta nada no la he probado gusta mucho Espinacas gusta poco no le gusta nada no la he probado gusta mucho Puerros gusta poco no le gusta nada no la he probado gusta mucho gusta poco no le gusta nada cebolla 9 Zanahorias - 74 - no la he probado gusta mucho gusta poco no le gusta nada no la he probado gusta mucho gusta poco no le gusta nada Calabacín no la he probado gusta mucho gusta poco no le gusta nada otros no la he probado Sí, siempre Sí, la mayoría de los días ¿HAY VERDURA QUE TE GUSTE NORMALMENTE EN CASA? Algunas veces Rara vez Nunca 10 Por qué me obligan mi madre y/o padre o en el comedor del colegio ¿POR QUÉ COMES FRUTA Y VERDURA? Por qué los demás lo comen No lo se 11 12 Porque me gusta EL PLAN DE CONSUMO DE FRUTAS Y VERDURAS QUE SE DESARROLLA EN TU COLEGIO INCLUYE ACTIVIDADES COMO: TALLERES DE COCINA, VISITAS A EXPLOTACIONES AGRARIAS, JUEGOS EN LÍNEA Y FOLLETOS PARA LOS NIÑOS EN PÁGINAS WEB. ¿CREES QUE ESTAS ACTIVIDADES TE AYUDAN A REFORZAR EL CONSUMO DE FRUTA Y VERDURA EN LOS NIÑOS? - 75 - Si No ANEXO B: REPORTE DE LAS DIETA ASIGNADA AL PACIENTE - 76 - ANEXO C: CODIGO FUENTE DIETA.JAVA public class Dietas extends javax.swing.JInternalFrame { private Controlador_Reporte reporte = new Controlador_Reporte(); private Reporte re = new Reporte(); private int cod = 0; /** * Creates new form Dietas */ public Dietas() { initComponents(); } //////////////////////////////////////////////////////////////////////////// public String getFechaActual() { Date ahora = new Date(); SimpleDateFormat formateador = new SimpleDateFormat("dd-MM-yyyy"); return formateador.format(ahora); } //////////////////////////////////////////////////////////////////////////// public String getHoraActual() { Date date = new Date(); DateFormat hourFormat = new SimpleDateFormat("HH:mm"); return hourFormat.format(date); } //////////////////////////////////////////////////////////////////////////// public String[][] reporte() { String[][] array_reg = new String[detallesDieta.getRowCount()][detallesDieta.getColumnCount()]; int i = 0; int j = 0; for (i = 0; i < detallesDieta.getRowCount(); i++) { for (j = 0; j < detallesDieta.getColumnCount(); j++) { array_reg[i][j] = (String) detallesDieta.getValueAt(i, j); } } return array_reg; } //////////////////////////////////////////////////////////////////////////// public void generarReporte() throws Exception { cod = re.getCod() + 1; re = new Reporte(cod); reporte.Guardar(re); String encabezado = "SISTEMA DE NUTRICION INFANTIL" + "\n" + "Reporte: Dieta Asignada " + "\n" + "\n" + "\n" + "\n" + "\n"; Font fuente = new Font(Font.getFamily("ARIAL"), 20, Font.BOLD); String choro = "Fecha: " + getFechaActual() + "\n" + "Nombre:" + nombres.getText() + "\n" + "Apellido:" + apellidos.getText() + "\n" + "EL MENU NUTRICIONAL " + jTextField3.getText(); String[][] d = reporte(); Image imagen = Image.getInstance(("src\\imagenes\\images.jpg")); imagen.setAlignment(Image.LEFT | Image.TEXTWRAP); try { Paragraph linea = new Paragraph(encabezado, fuente); Phrase para = new Phrase(choro); PdfPTable tabla = new PdfPTable(3); tabla.setWidthPercentage(75); - 77 - Document documento = new Document(PageSize.LETTER); String path = "REPORTE_DIETAS" + "_" + re.getCod() + ".pdf"; String file = "C:\\Dietas\\" + path; /*A TRAVES DEL SIGUIENTE METODO (GETINSTANCE)Y UN FLUJO DE SALIDA DEL PAQUETE .IO ASOCIAMOS EL DOCUMENTO DE ITEXT CON EL ARCHIVO DE JAVA*/ PdfWriter.getInstance(documento, new FileOutputStream(file)); /*DEFINIMOS LAS CELDAS QUE SERAN LOS ENCABEZADOS DE LA TABLA*/ PdfPCell celda1 = new PdfPCell(new Paragraph("CODIGO DIETA", FontFactory.getFont("arial", 10, Font.BOLD, BaseColor.BLUE)));; PdfPCell celda2 = new PdfPCell(new Paragraph("DESCRIPCION DIETA", FontFactory.getFont("arial", 10, Font.BOLD, BaseColor.BLUE))); PdfPCell celda3 = new PdfPCell(new Paragraph("DETALLE DEL DIA", FontFactory.getFont("arial", 10, Font.BOLD, BaseColor.BLUE))); /*AHORA A TRAVES DE UN FOR INSERTAREMOS EL CONTENIDO DEL ARREGLO EN LA TABLA*/ int limite = d.length + (3 - d.length); for (int i = 0; i < d.length; i++) { for (int j = 0; j < limite; j++) { tabla.addCell(d[i][j]); } } documento.add(tabla); /*CERRAMOS EL DOCUMENTO*/ documento.close(); JOptionPane.showMessageDialog(null, "REPORTE CREADO SATISFACTORIAMENTE"); try { File archivo = new File("C:\\Dietas\\" + path); Desktop.getDesktop().open(archivo); } catch (Exception e) { e.printStackTrace(); } /* LaunchApplication.execute(file);//IGNOREN ESTA LINEA DE CODIGO ES UNA DE MIS CLASES PARA PRUEBAS*/ } catch (DocumentException e) { JOptionPane.showMessageDialog(null, e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); return; } catch (IOException e) { JOptionPane.showMessageDialog(null, e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); return; } } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagenes/imprimir.png"))); // NOI18N jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } }); jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Informacion Personal")); - 78 - jLabel2.setText("Nombres:"); nombres.setEditable(false); apellidos.setEditable(false); jLabel10.setText("Apellidos:"); jLabel8.setText("Calorias"); jButton5.setText("Recuperar Dietas"); jButton5.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton5ActionPerformed(evt); } }); jLabel9.setText("Fecha de Nacimiento:"); jLabel13.setText("Edad:"); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jLabel10, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jLabel9) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(fechaNacimiento, javax.swing.GroupLayout.PREFERRED_SIZE, 158, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel13) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(edad, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addComponent(apellidos)) .addComponent(nombres, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 400, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(8, 8, 8) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jLabel8) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(caloriasCalculadas, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(jButton5)) .addContainerGap()) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel2) - 79 - .addComponent(nombres, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel8) .addComponent(caloriasCalculadas, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel10) .addComponent(apellidos, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jButton5)) .addGap(9, 9, 9) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(fechaNacimiento, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jLabel9, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(jLabel13, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(edad, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(14, Short.MAX_VALUE)) ); jLabel1.setText("Cedula:"); jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder("Dietas Disponibles")); jPanel3.setToolTipText(""); tablaDietas.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "Codigo de Dieta", "Calorias" } )); tablaDietas.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { tablaDietasMouseClicked(evt); } }); jScrollPane1.setViewportView(tablaDietas); javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); jPanel3.setLayout(jPanel3Layout); jPanel3Layout.setHorizontalGroup( jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel3Layout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane1) .addContainerGap()) ); jPanel3Layout.setVerticalGroup( jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup() .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 385, Short.MAX_VALUE) .addContainerGap()) ); jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("Informacion de Dieta")); jLabel4.setText("Calorias"); - 80 - caloriasD.setEditable(false); jLabel5.setText("Codigo de Dieta"); codigoD.setEditable(false); codigoD.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { codigoDActionPerformed(evt); } }); jLabel3.setText("Tiempo"); javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel5) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(codigoD, javax.swing.GroupLayout.PREFERRED_SIZE, 87, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel4) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(caloriasD, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel3) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jTextField3) .addContainerGap()) ); jPanel2Layout.setVerticalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel5) .addComponent(codigoD, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(caloriasD, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel4) .addComponent(jLabel3) .addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder("Detalles de la Dieta")); detallesDieta.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "Id de Detalle", "Descripcion", "Tipo de Detalle" } )); jScrollPane3.setViewportView(detallesDieta); javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4); jPanel4.setLayout(jPanel4Layout); - 81 - jPanel4Layout.setHorizontalGroup( jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel4Layout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 525, Short.MAX_VALUE) .addContainerGap()) ); jPanel4Layout.setVerticalGroup( jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel4Layout.createSequentialGroup() .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 325, Short.MAX_VALUE) .addContainerGap()) ); javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5); jPanel5.setLayout(jPanel5Layout); jPanel5Layout.setHorizontalGroup( jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel5Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel5Layout.createSequentialGroup() .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) .addGroup(jPanel5Layout.createSequentialGroup() .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel5Layout.createSequentialGroup() .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(cedulaDieta, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanel5Layout.createSequentialGroup() .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 684, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 118, javax.swing.GroupLayout.PREFERRED_SIZE))) .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap()) ); jPanel5Layout.setVerticalGroup( jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel5Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(cedulaDieta, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel1)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) - 82 - .addGroup(jPanel5Layout.createSequentialGroup() .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap()) ); jTabbedPane1.addTab("Manejo de Dietas de Paciente", jPanel5); jLabel6.setText("Calorias para la Dieta:"); calorias_dieta.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { calorias_dietaActionPerformed(evt); } }); jPanel7.setBorder(javax.swing.BorderFactory.createTitledBorder("Ingreso de Detalles")); jLabel7.setText("Descripcion:"); detalle.setColumns(20); detalle.setRows(5); jScrollPane2.setViewportView(detalle); jLabel11.setText("Tipo:"); comboTipo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Desayuno", "Medio Dia", "Almuerzo", "Media Tarde", "Merienda" })); jButton3.setText("Agregar Detalle"); jButton3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton3ActionPerformed(evt); } }); javax.swing.GroupLayout jPanel7Layout = new javax.swing.GroupLayout(jPanel7); jPanel7.setLayout(jPanel7Layout); jPanel7Layout.setHorizontalGroup( jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel7Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jLabel11) .addComponent(jLabel7)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(jPanel7Layout.createSequentialGroup() .addComponent(comboTipo, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jButton3)) .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 390, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap()) ); - 83 - jPanel7Layout.setVerticalGroup( jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel7Layout.createSequentialGroup() .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 136, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel7)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 9, Short.MAX_VALUE) .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel11) .addComponent(comboTipo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jButton3)) .addContainerGap()) ); jPanel8.setBorder(javax.swing.BorderFactory.createTitledBorder("Detalles Agregados")); tablaDetalles.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "Id", "Descripcion", "Tipo" } )); jScrollPane4.setViewportView(tablaDetalles); javax.swing.GroupLayout jPanel8Layout = new javax.swing.GroupLayout(jPanel8); jPanel8.setLayout(jPanel8Layout); jPanel8Layout.setHorizontalGroup( jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel8Layout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane4, javax.swing.GroupLayout.DEFAULT_SIZE, 519, Short.MAX_VALUE) .addContainerGap()) ); jPanel8Layout.setVerticalGroup( jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel8Layout.createSequentialGroup() .addComponent(jScrollPane4, javax.swing.GroupLayout.DEFAULT_SIZE, 506, Short.MAX_VALUE) .addContainerGap()) ); jLabel12.setText("Id de Dieta:"); jButton2.setText("Generar Dieta"); jButton2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton2ActionPerformed(evt); } }); jButton4.setText("Buscar Dieta"); jButton4.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton4ActionPerformed(evt); } }); javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6); jPanel6.setLayout(jPanel6Layout); jPanel6Layout.setHorizontalGroup( - 84 - jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel6Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) .addGroup(jPanel6Layout.createSequentialGroup() .addComponent(jLabel12) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(id_dieta) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel6) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(calorias_dieta, javax.swing.GroupLayout.PREFERRED_SIZE, 175, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(jPanel7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanel6Layout.createSequentialGroup() .addComponent(jButton4) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jButton2))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel8, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); jPanel6Layout.setVerticalGroup( jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel6Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel6) .addComponent(calorias_dieta, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel12) .addComponent(id_dieta, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel8, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(jPanel6Layout.createSequentialGroup() .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jButton2) .addComponent(jButton4)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap()) ); jTabbedPane1.addTab("Registro de Dietas", jPanel6); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jTabbedPane1) .addContainerGap()) ); layout.setVerticalGroup( - 85 - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jTabbedPane1) .addContainerGap()) ); pack(); }// </editor-fold> private void codigoDActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: try { // TODO add your handling code here: generarReporte(); } catch (Exception ex) { Logger.getLogger(Dietas.class.getName()).log(Level.SEVERE, null, ex); } } private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { DefaultTableModel temp = (DefaultTableModel) tablaDetalles.getModel(); Object nuevo[] = {temp.getRowCount() + 1, detalle.getText(), comboTipo.getSelectedItem()}; temp.addRow(nuevo); detalle.setText(""); //tablaDetalles.repaint(); } private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { Controlador_Dieta d = new Controlador_Dieta(); Dieta d1 = new Dieta(); d1.setCodigo_dieta(id_dieta.getText()); d1.setCalorias(Float.parseFloat(calorias_dieta.getText())); d.Guardar(d1); id_dieta.setEnabled(false); } private void calorias_dietaActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) { Controlador_Dieta cd = new Controlador_Dieta(); if (cd.getDieta(id_dieta.getText()) != null) { Dieta d = cd.getDieta(id_dieta.getText()); calorias_dieta.setText(Float.toString(d.getCalorias())); id_dieta.setEnabled(false); Controlador_Detalle_Dieta cdd = new Controlador_Detalle_Dieta(); List<Detalle_Dieta> ld = cdd.listarId(id_dieta.getText()); Listar(ld, tablaDetalles); } } private void tablaDietasMouseClicked(java.awt.event.MouseEvent evt) { Controlador_Detalle_Dieta cdd = new Controlador_Detalle_Dieta(); codigoD.setText(tablaDietas.getValueAt(tablaDietas.getSelectedRow(), 0).toString()); caloriasD.setText(tablaDietas.getValueAt(tablaDietas.getSelectedRow(), 1).toString()); List<Detalle_Dieta> ld = cdd.listarId(tablaDietas.getValueAt(tablaDietas.getSelectedRow(), 0).toString()); Listar(ld, detallesDieta); - 86 - } private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) { recuperarDietas(); } public boolean BuscarPaciente() throws ParseException { Controlador_Paciente cp = new Controlador_Paciente(); if (cp.getMedico(cedulaDieta.getText()) != null) { nombres.setText(cp.getMedico(cedulaDieta.getText()).getNombre()); apellidos.setText(cp.getMedico(cedulaDieta.getText()).getApellido()); SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy"); String dateInString = cp.getMedico(cedulaDieta.getText()).getFecha_nacimiento(); Date date = formatter.parse(dateInString); fechaNacimiento.setDate(date); calcularEdad(); CalcularCalorias(); return true; } else { return false; } } public void guardarDetalles() { Controlador_Detalle_Dieta cdd = new Controlador_Detalle_Dieta(); Controlador_Dieta cd = new Controlador_Dieta(); for (int i = 0; i < tablaDetalles.getRowCount(); i++) { Detalle_Dieta dd = new Detalle_Dieta(); dd.setCodigo_dieta(cd.getDieta(id_dieta.getText())); dd.setCodigo_detalle(tablaDetalles.getValueAt(i, 0).toString()); dd.setDetalle((String) tablaDetalles.getValueAt(i, 1)); dd.setTipo_detalle((String) tablaDetalles.getValueAt(i, 2)); cdd.Guardar(dd); } } public void Listar(List l, JTable tabla) { DefaultTableModel temp = (DefaultTableModel) tabla.getModel(); for (int i = tabla.getRowCount() - 1; i >= 0; i--) { temp.removeRow(i); } for (int i = 0; i < l.size(); i++) { Detalle_Dieta otroMed = new Detalle_Dieta(); otroMed = (Detalle_Dieta) l.get(i); Object nuevo[] = {otroMed.getCodigo_detalle(), otroMed.getDetalle(), otroMed.getTipo_detalle()}; temp.addRow(nuevo); } tabla.setModel(temp); } public void ListarDietas(List l, JTable tabla) { DefaultTableModel temp = (DefaultTableModel) tabla.getModel(); for (int i = tabla.getRowCount() - 1; i >= 0; i--) { temp.removeRow(i); } for (int i = 0; i < l.size(); i++) { Dieta otroMed = new Dieta(); otroMed = (Dieta) l.get(i); Object nuevo[] = {otroMed.getCodigo_dieta(), otroMed.getCalorias()}; temp.addRow(nuevo); } tabla.setModel(temp); } public void recuperarDietas() { JOptionPane.showMessageDialog(null, "Recuperando Dietas"); Controlador_Dieta cd = new Controlador_Dieta(); - 87 - List<Dieta> ld = cd.listarCalorias(caloriasCalculadas.getText()); ListarDietas(ld, tablaDietas); } public void calcularEdad() { if (fechaNacimiento.getDate() != null) { Date date = fechaNacimiento.getDate(); SimpleDateFormat format2 = new SimpleDateFormat("dd-MM-yyyy"); String datetext = format2.format(date); try { Calendar birth = new GregorianCalendar(); Calendar today = new GregorianCalendar(); int age = 0; int factor = 0; Date birthDate = new SimpleDateFormat("dd-MM-yyyy").parse(datetext); Date currentDate = new Date(); //current date birth.setTime(birthDate); today.setTime(currentDate); if (today.get(Calendar.MONTH) <= birth.get(Calendar.MONTH)) { if (today.get(Calendar.MONTH) == birth.get(Calendar.MONTH)) { if (today.get(Calendar.DATE) > birth.get(Calendar.DATE)) { factor = -1; //Aun no celebra su cumpleaños } } else { factor = -1; //Aun no celebra su cumpleaños } } age = (today.get(Calendar.YEAR) - birth.get(Calendar.YEAR)) + factor; edad.setText(Integer.toString(age)); } catch (ParseException e) { edad.setText("0"); } } else { edad.setText("0"); } } public void CalcularCalorias() throws ParseException { //TMB = (10 x peso en kg) + (6,25 × altura en cm) - (5 × edad en años) + 5 //TMB = (10 x peso en kg) + (6,25 × altura en cm) - (5 × edad en años) - 161 Controlador_Registro_Tallas crt = new Controlador_Registro_Tallas(); List<Registro_Tallas> l = crt.listarTallas(cedulaDieta.getText()); Registro_Tallas rt = new Registro_Tallas(); rt.setFecha("01-ene-0000"); SimpleDateFormat formatter1 = new SimpleDateFormat("dd-MMM-yyyy"); String dateInString1 = rt.getFecha(); Date date1 = formatter1.parse(dateInString1); for (int i = 0; i < l.size(); i++) { SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy"); String dateInString = l.get(i).getFecha(); Date date = formatter.parse(dateInString); if (date1.before(date)) { rt = l.get(i); } } double calorias = (10 * rt.getPeso()) + (6.25 * rt.getTalla()) - (5 * Integer.parseInt(edad.getText())); caloriasCalculadas.setText(Double.toString(calorias)); System.out.println(rt.getPeso()); System.out.println(rt.getTalla()); } } - 88 - ANEXO D: CODIGO FUENTE DE HISTORIAL.JAVA public class Historial extends javax.swing.JInternalFrame { /** * Creates new form Historial */ public Historial() { initComponents(); } int edad; /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { buttonGroup1 = new javax.swing.ButtonGroup(); jLabel1 = new javax.swing.JLabel(); cedulaPaciente = new javax.swing.JTextField(); jPanel2 = new javax.swing.JPanel(); jScrollPane1 = new javax.swing.JScrollPane(); listAvance = new javax.swing.JTable(); jPanel12 = new javax.swing.JPanel(); jLabel12 = new javax.swing.JLabel(); primerNombre = new javax.swing.JTextField(); primerApellido = new javax.swing.JTextField(); jLabel13 = new javax.swing.JLabel(); panelGraficoTorta = new javax.swing.JPanel(); btnAvance = new javax.swing.JButton(); lblTorta = new javax.swing.JLabel(); setBorder(null); setClosable(true); setTitle("Historal"); setToolTipText(""); setFrameIcon(new javax.swing.ImageIcon(getClass().getResource("/imagenes/historial.png"))); // NOI18N jLabel1.setText("Cedula:"); cedulaPaciente.addKeyListener(new java.awt.event.KeyAdapter() { public void keyPressed(java.awt.event.KeyEvent evt) { cedulaPacienteKeyPressed(evt); } }); jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("Avance del Paciente")); listAvance.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "Cedula", "Fecha", "Talla", "Peso" } )); jScrollPane1.setViewportView(listAvance); - 89 - javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel2Layout.setVerticalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 436, Short.MAX_VALUE) .addContainerGap()) ); 494, jPanel12.setBorder(javax.swing.BorderFactory.createTitledBorder("Informacion Personal")); jLabel12.setText("Nombres:"); jLabel13.setText("Apellidos:"); javax.swing.GroupLayout jPanel12Layout = new javax.swing.GroupLayout(jPanel12); jPanel12.setLayout(jPanel12Layout); jPanel12Layout.setHorizontalGroup( jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel12Layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel12) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(primerNombre, javax.swing.GroupLayout.PREFERRED_SIZE, 400, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(42, 42, 42) .addComponent(jLabel13) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(primerApellido, javax.swing.GroupLayout.PREFERRED_SIZE, 400, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(250, Short.MAX_VALUE)) ); jPanel12Layout.setVerticalGroup( jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel12Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel12) .addComponent(primerNombre, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel13) .addComponent(primerApellido, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap(49, Short.MAX_VALUE)) ); panelGraficoTorta.setBorder(javax.swing.BorderFactory.createTitledBorder("Avance Paciente")); btnAvance.setText("Ver Avance"); btnAvance.addActionListener(new java.awt.event.ActionListener() { - 90 - public void actionPerformed(java.awt.event.ActionEvent evt) { btnAvanceActionPerformed(evt); } }); javax.swing.GroupLayout panelGraficoTortaLayout = new javax.swing.GroupLayout(panelGraficoTorta); panelGraficoTorta.setLayout(panelGraficoTortaLayout); panelGraficoTortaLayout.setHorizontalGroup( panelGraficoTortaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelGraficoTortaLayout.createSequentialGroup() .addContainerGap() .addGroup(panelGraficoTortaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(lblTorta, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(panelGraficoTortaLayout.createSequentialGroup() .addComponent(btnAvance) .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap()) ); panelGraficoTortaLayout.setVerticalGroup( panelGraficoTortaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelGraficoTortaLayout.createSequentialGroup() .addComponent(lblTorta, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(btnAvance)) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel12, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(panelGraficoTorta, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGroup(layout.createSequentialGroup() .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(cedulaPaciente, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(cedulaPaciente, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel1)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel12, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, - 91 - Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(panelGraficoTorta, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap()) ); pack(); }// </editor-fold> private void btnAvanceActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: JFreeChart barra = null; DefaultCategoryDataset datos; datos = new DefaultCategoryDataset(); for(int i =0; i<listAvance.getRowCount();i++){ int valor = (int)Double.parseDouble(listAvance.getValueAt(i, 3).toString()); datos.setValue(valor, listAvance.getValueAt(i, 1).toString(), ""); } barra = ChartFactory.createBarChart3D("Estadistica Paciente", "Tiempo", "Peso", datos, PlotOrientation.VERTICAL, true, true, true); BufferedImage graficoBarra = barra.createBufferedImage(panelGraficoTorta.getWidth(), panelGraficoTorta.getHeight()); lblTorta.setSize(panelGraficoTorta.getSize().getSize()); lblTorta.setIcon(new ImageIcon(graficoBarra)); panelGraficoTorta.updateUI(); } private void cedulaPacienteKeyPressed(java.awt.event.KeyEvent evt) { if (evt.getKeyCode() == KeyEvent.VK_ENTER) { try { BuscarPaciente(); RecuperarTallas(); } catch (ParseException ex) { Logger.getLogger(Pacientes.class.getName()).log(Level.SEVERE, null, ex); } } } public void BuscarPaciente() throws ParseException { if (cedulaPaciente.getText() != null) { Controlador_Paciente cp = new Controlador_Paciente(); if (cp.getMedico(cedulaPaciente.getText()) != null) { Paciente p = cp.getMedico(cedulaPaciente.getText()); cedulaPaciente.setText(p.getCedula()); primerNombre.setText(p.getNombre()); primerApellido.setText(p.getApellido()); } } } public Paciente BuscarPacienteD() throws ParseException { if (cedulaPaciente.getText() != null) { Controlador_Paciente cp = new Controlador_Paciente(); if (cp.getMedico(cedulaPaciente.getText()) != null) { - 92 - Paciente p = cp.getMedico(cedulaPaciente.getText()); cedulaPaciente.setText(p.getCedula()); primerNombre.setText(p.getNombre()); primerApellido.setText(p.getApellido()); return cp.getMedico(cedulaPaciente.getText()); } }else{ return null; } return null; } public void RecuperarTallas(){ if(cedulaPaciente!=null){ Controlador_Registro_Tallas crt = new Controlador_Registro_Tallas(); List<Registro_Tallas> l = crt.listarTallas(cedulaPaciente.getText()); DefaultTableModel temp = (DefaultTableModel) listAvance.getModel(); for (int i = listAvance.getRowCount() - 1; i >= 0; i--) { temp.removeRow(i); } for (int i = 0; i < l.size(); i++) { Registro_Tallas otroMed = new Registro_Tallas(); otroMed = (Registro_Tallas) l.get(i); Object nuevo[] = {otroMed.getPaciente().getCedula(), otroMed.getFecha(), otroMed.getTalla(), otroMed.getPeso()}; //esto es por las tres columnas aunque puede variar temp.addRow(nuevo); } listAvance.setModel(temp); } } } - 93 - ANEXO E: CODIGO FUENTE DE NUTRICION.JAVA public class Nutricion extends javax.swing.JInternalFrame { /** * Creates new form Nutricion */ public Nutricion() { initComponents(); RecuperarEquivalentes(); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { setBorder(null); setClosable(true); setTitle("Nutricion"); setFrameIcon(new javax.swing.ImageIcon(getClass().getResource("/imagenes/nutricion.png"))); // NOI18N jLabel1.setText("Cedula:"); cedulaPaciente.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cedulaPacienteActionPerformed(evt); } }); cedulaPaciente.addKeyListener(new java.awt.event.KeyAdapter() { public void keyPressed(java.awt.event.KeyEvent evt) { cedulaPacienteKeyPressed(evt); } }); jPanel8.setBorder(javax.swing.BorderFactory.createTitledBorder("Registro de Habitos Alimenticios")); - 94 - habitosAlimenticios.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "Cedula", "Id_Habito", "Fecha de Ingreso" } )); habitosAlimenticios.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { habitosAlimenticiosMouseClicked(evt); } }); jScrollPane2.setViewportView(habitosAlimenticios); alimentosHabito.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "Codigo", "Descripcion", "Calorias" } )); jScrollPane5.setViewportView(alimentosHabito); javax.swing.GroupLayout jPanel8Layout = new javax.swing.GroupLayout(jPanel8); jPanel8.setLayout(jPanel8Layout); jPanel8Layout.setHorizontalGroup( jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel8Layout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 359, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane5, javax.swing.GroupLayout.PREFERRED_SIZE, 403, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap()) ); - 95 - jPanel8Layout.setVerticalGroup( jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 306, Short.MAX_VALUE) .addComponent(jScrollPane5, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) ); jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("Ingreso de Habitos Alimenticios")); jLabel4.setText("Fecha de Ingreso:"); jLabel2.setText("Id Habito"); jButton3.setText("Guardar Habito"); jButton3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton3ActionPerformed(evt); } }); javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel2) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(id_habitoa) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel4) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(fechaIngreso, javax.swing.GroupLayout.PREFERRED_SIZE, 316, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(61, 61, 61) .addComponent(jButton3) .addContainerGap()) ); - 96 - jPanel2Layout.setVerticalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(jPanel2Layout.createSequentialGroup() .addGap(0, 0, Short.MAX_VALUE) .addComponent(jButton3)) .addGroup(jPanel2Layout.createSequentialGroup() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel4) .addComponent(jLabel2) .addComponent(id_habitoa, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(0, 0, Short.MAX_VALUE)) .addComponent(fechaIngreso, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap()) ); jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder("Equivalentes Disponibles")); resultadosBusqueda.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "", "Codigo", "Descripcion", "Calorias" } ){ Class[] types = new Class [] { java.lang.Boolean.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class }; public Class getColumnClass(int columnIndex) { return types [columnIndex]; } }); - 97 - jScrollPane3.setViewportView(resultadosBusqueda); jButton1.setText("Agregar Seleccionados"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } }); jButton4.setText("Nuevo"); jButton4.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { jButton4MouseClicked(evt); } }); javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); jPanel3.setLayout(jPanel3Layout); jPanel3Layout.setHorizontalGroup( jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel3Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup() .addComponent(jButton4) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 173, Short.MAX_VALUE) .addComponent(jButton1))) .addContainerGap()) ); jPanel3Layout.setVerticalGroup( jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel3Layout.createSequentialGroup() .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jButton4) - 98 - .addComponent(jButton1)) .addContainerGap()) ); javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6); jPanel6.setLayout(jPanel6Layout); jPanel6Layout.setHorizontalGroup( jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel6Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel8, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); jPanel6Layout.setVerticalGroup( jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel6Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(jPanel6Layout.createSequentialGroup() .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel8, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) .addContainerGap()) ); jTabbedPane1.addTab("Habitos Alimenticios", jPanel6); jPanel5.setBorder(javax.swing.BorderFactory.createTitledBorder("Ingreso de Habitos Alimenticios")); - 99 - jLabel6.setText("Fecha de Ingreso:"); jLabel7.setText("Frecuencia"); jLabel3.setText("Id Habito Fisico"); jButton2.setText("Agregar Habito Fisico"); jButton2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton2ActionPerformed(evt); } }); javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5); jPanel5.setLayout(jPanel5Layout); jPanel5Layout.setHorizontalGroup( jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel5Layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel3) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(id_habitoF) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel6) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(fechaIngreso2, javax.swing.GroupLayout.PREFERRED_SIZE, 298, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel7) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(frecuencia, javax.swing.GroupLayout.PREFERRED_SIZE, 191, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(183, 183, 183) .addComponent(jButton2) .addContainerGap()) ); jPanel5Layout.setVerticalGroup( - 100 - jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(frecuencia, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel7)) .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(fechaIngreso2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel6, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel3) .addComponent(id_habitoF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) .addComponent(jButton2, javax.swing.GroupLayout.Alignment.TRAILING) ); jPanel9.setBorder(javax.swing.BorderFactory.createTitledBorder("Registro de Habitos Fisicos")); habitosFisicos.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "Codigo", "Fecha de Ingreso", "Frecuencia", "Descripcion" } )); jScrollPane4.setViewportView(habitosFisicos); javax.swing.GroupLayout jPanel9Layout = new javax.swing.GroupLayout(jPanel9); jPanel9.setLayout(jPanel9Layout); jPanel9Layout.setHorizontalGroup( jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel9Layout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane4, javax.swing.GroupLayout.DEFAULT_SIZE, 1183, Short.MAX_VALUE) .addContainerGap()) ); - 101 - jPanel9Layout.setVerticalGroup( jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane4, javax.swing.GroupLayout.DEFAULT_SIZE, 328, Short.MAX_VALUE) ); javax.swing.GroupLayout jPanel7Layout = new javax.swing.GroupLayout(jPanel7); jPanel7.setLayout(jPanel7Layout); jPanel7Layout.setHorizontalGroup( jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel7Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jPanel9, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap()) ); jPanel7Layout.setVerticalGroup( jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel7Layout.createSequentialGroup() .addContainerGap() .addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel9, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); jTabbedPane1.addTab("Habitos Fisicos", jPanel7); jPanel12.setBorder(javax.swing.BorderFactory.createTitledBorder("Informacion Personal")); jLabel12.setText("Nombres:"); primerNombre.setEditable(false); - 102 - primerApellido.setEditable(false); jLabel13.setText("Apellidos:"); javax.swing.GroupLayout jPanel12Layout = new javax.swing.GroupLayout(jPanel12); jPanel12.setLayout(jPanel12Layout); jPanel12Layout.setHorizontalGroup( jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel12Layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel12) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(primerNombre, javax.swing.GroupLayout.PREFERRED_SIZE, 400, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(42, 42, 42) .addComponent(jLabel13) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(primerApellido, javax.swing.GroupLayout.PREFERRED_SIZE, 400, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel12Layout.setVerticalGroup( jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel12Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel12) .addComponent(primerNombre, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanel12Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel13) .addComponent(primerApellido, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap(37, Short.MAX_VALUE)) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); - 103 - layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jTabbedPane1, javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jPanel12, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(cedulaPaciente, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(50, 50, 50) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(cedulaPaciente, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel1)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel12, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jTabbedPane1) .addContainerGap()) ); pack(); }// </editor-fold> private void cedulaPacienteActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } - 104 - private void cedulaPacienteKeyPressed(java.awt.event.KeyEvent evt) { if (evt.getKeyCode() == KeyEvent.VK_ENTER) { try { BuscarPaciente(); ListarHabitosPaciente(); ListarFisicosPaciente(); } catch (ParseException ex) { Logger.getLogger(Pacientes.class.getName()).log(Level.SEVERE, null, ex); } } } private void jButton4MouseClicked(java.awt.event.MouseEvent evt) { Controlador_Equivalente ce = new Controlador_Equivalente(); Equivalente e = new Equivalente(); e.setCodigo_alimento(JOptionPane.showInputDialog("Codigo de Alimento")); e.setDescripcion(JOptionPane.showInputDialog("Descripcion")); e.setCalorias(Integer.parseInt(JOptionPane.showInputDialog("Calorias"))); ce.Guardar(e); RecuperarEquivalentes(); } private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { if (id_habitoa.getText() != null && fechaIngreso.getDate() != null) { Controlador_Habito_Alimenticio cha = new Controlador_Habito_Alimenticio(); Controlador_Habito_Alimento chal = new Controlador_Habito_Alimento(); Controlador_Paciente cp = new Controlador_Paciente(); Habito_Alimenticio ha = new Habito_Alimenticio(); ha.setPaciente(cp.getMedico(cedulaPaciente.getText())); ha.setId_habito(id_habitoa.getText()); ha.setFecha(fechaIngreso.getDate().toString()); cha.Guardar(ha); DefaultTableModel temp = (DefaultTableModel) habitosAlimenticios.getModel(); for (int i = habitosAlimenticios.getRowCount() - 1; i >= 0; i--) { temp.removeRow(i); - 105 - } for (int i = 0; i < resultadosBusqueda.getRowCount(); i++) { if (resultadosBusqueda.getValueAt(i, 0).equals(true)) { Habito_Alimento hal = new Habito_Alimento(); hal.setHabito(ha); Equivalente h = new Equivalente(); h.setCodigo_alimento(resultadosBusqueda.getValueAt(i, 1).toString()); h.setDescripcion(resultadosBusqueda.getValueAt(i, 2).toString()); h.setCalorias(Integer.parseInt(resultadosBusqueda.getValueAt(i, 3).toString())); hal.setEquivalente(h); chal.Guardar(hal); } } } else { JOptionPane.showMessageDialog(rootPane, "Ingrese un Id y/o fecha validos"); } ListarHabitosPaciente(); } private void habitosAlimenticiosMouseClicked(java.awt.event.MouseEvent evt) { Controlador_Habito_Alimento cha = new Controlador_Habito_Alimento(); List<Habito_Alimento> l = cha.listarHabitoFisico((String) habitosAlimenticios.getValueAt(habitosAlimenticios.getSelectedRow(), 1)); DefaultTableModel temp = (DefaultTableModel) alimentosHabito.getModel(); for (int i = alimentosHabito.getRowCount() - 1; i >= 0; i--) { temp.removeRow(i); } for (int i = 0; i < l.size(); i++) { Habito_Alimento otroMed = new Habito_Alimento(); otroMed = (Habito_Alimento) l.get(i); Object nuevo[] = {otroMed.getEquivalente().getCodigo_alimento(), otroMed.getEquivalente().getDescripcion(), otroMed.getEquivalente().getCalorias()}; //esto es por las tres columnas aunque puede variar temp.addRow(nuevo); } } - 106 - private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { Controlador_Habito_Fisico caf = new Controlador_Habito_Fisico(); Controlador_Paciente cp = new Controlador_Paciente(); Habito_Fisico hf = new Habito_Fisico(); hf.setPaciente(cp.getMedico(cedulaPaciente.getText())); hf.setDescripcion(JOptionPane.showInputDialog("Ingrese la Descripcion del Habito")); hf.setFecha(fechaIngreso2.getDate().toString()); hf.setFrecuencia(frecuencia.getText()); hf.setId_habito(id_habitoF.getText()); caf.Guardar(hf); ListarFisicosPaciente(); } private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { } public void BuscarPaciente() throws ParseException { if (cedulaPaciente.getText() != null) { Controlador_Paciente cp = new Controlador_Paciente(); if (cp.getMedico(cedulaPaciente.getText()) != null) { Paciente p = cp.getMedico(cedulaPaciente.getText()); cedulaPaciente.setText(p.getCedula()); primerNombre.setText(p.getNombre()); primerApellido.setText(p.getApellido()); } } } public void Limpiar() { cedulaPaciente.setText(""); primerNombre.setText(""); primerApellido.setText(""); fechaIngreso.setDate(null); - 107 - fechaIngreso2.setDate(null); habitosAlimenticios.removeAll(); alimentosHabito.removeAll(); resultadosBusqueda.removeAll(); frecuencia.setText(""); habitosFisicos.removeAll(); } public void RecuperarEquivalentes() { if (cedulaPaciente != null) { Controlador_Equivalente crt = new Controlador_Equivalente(); List<Equivalente> l = crt.listar(); DefaultTableModel temp = (DefaultTableModel) resultadosBusqueda.getModel(); for (int i = resultadosBusqueda.getRowCount() - 1; i >= 0; i--) { temp.removeRow(i); } for (int i = 0; i < l.size(); i++) { Equivalente otroMed = new Equivalente(); otroMed = (Equivalente) l.get(i); Object nuevo[] = {false, otroMed.getCodigo_alimento(), otroMed.getDescripcion(), otroMed.getCalorias()}; //esto es por las tres columnas aunque puede variar temp.addRow(nuevo); } resultadosBusqueda.setModel(temp); } } public void ListarHabitosPaciente() { Controlador_Habito_Alimenticio cha = new Controlador_Habito_Alimenticio(); List<Habito_Alimenticio> l = cha.listarHabito(cedulaPaciente.getText()); DefaultTableModel temp = (DefaultTableModel) habitosAlimenticios.getModel(); for (int i = habitosAlimenticios.getRowCount() - 1; i >= 0; i--) { temp.removeRow(i); } for (int i = 0; i < l.size(); i++) { - 108 - Habito_Alimenticio otroMed = new Habito_Alimenticio(); otroMed = (Habito_Alimenticio) l.get(i); Object nuevo[] = {otroMed.getPaciente().getCedula(), otroMed.getId_habito(), otroMed.getFecha()}; //esto es por las tres columnas aunque puede variar temp.addRow(nuevo); } habitosAlimenticios.setModel(temp); } public void ListarFisicosPaciente() { Controlador_Habito_Fisico cha = new Controlador_Habito_Fisico(); List<Habito_Fisico> l = cha.listarHabitoFisico(cedulaPaciente.getText()); DefaultTableModel temp = (DefaultTableModel) habitosFisicos.getModel(); for (int i = habitosFisicos.getRowCount() - 1; i >= 0; i--) { temp.removeRow(i); } for (int i = 0; i < l.size(); i++) { Habito_Fisico otroMed = new Habito_Fisico(); otroMed = (Habito_Fisico) l.get(i); Object nuevo[] = {otroMed.getId_habito(), otroMed.getFecha(), otroMed.getFrecuencia(), otroMed.getDescripcion()}; temp.addRow(nuevo); } habitosFisicos.setModel(temp); } } - 109 - ANEXO F: CODIGO FUENTE DE PACIENTE.JAVA public class Pacientes extends javax.swing.JInternalFrame { /** * Creates new form Pacientes */ public Pacientes() { initComponents(); Listar(); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { jToolBar1 = new javax.swing.JToolBar(); jLabel1 = new javax.swing.JLabel(); cedulaPaciente = new javax.swing.JTextField(); jPanel1 = new javax.swing.JPanel(); jLabel2 = new javax.swing.JLabel(); primerNombre = new javax.swing.JTextField(); fechaNacimiento = new com.toedter.calendar.JDateChooser(); jLabel4 = new javax.swing.JLabel(); jLabel5 = new javax.swing.JLabel(); primerApellido = new javax.swing.JTextField(); jLabel8 = new javax.swing.JLabel(); edad = new javax.swing.JLabel(); jPanel2 = new javax.swing.JPanel(); jLabel6 = new javax.swing.JLabel(); telefono = new javax.swing.JTextField(); jLabel7 = new javax.swing.JLabel(); - 110 - direccion = new javax.swing.JTextField(); jPanel3 = new javax.swing.JPanel(); jScrollPane1 = new javax.swing.JScrollPane(); listPacientes = new javax.swing.JTable(); jPanel4 = new javax.swing.JPanel(); jLabel3 = new javax.swing.JLabel(); jLabel9 = new javax.swing.JLabel(); talla = new javax.swing.JTextField(); peso = new javax.swing.JTextField(); jButton2 = new javax.swing.JButton(); jLabel10 = new javax.swing.JLabel(); id_registro = new javax.swing.JTextField(); jToolBar1.setRollover(true); setBorder(null); setClosable(true); setTitle("Pacientes"); setFrameIcon(new javax.swing.ImageIcon(getClass().getResource("/imagenes/paciente.png"))); // NOI18N jLabel1.setText("Cedula:"); cedulaPaciente.addKeyListener(new java.awt.event.KeyAdapter() { public void keyPressed(java.awt.event.KeyEvent evt) { cedulaPacienteKeyPressed(evt); } }); jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Informacion Personal")); jLabel2.setText("Nombres:"); primerNombre.setEditable(false); jLabel4.setText("Fecha de Nacimiento:"); - 111 - jLabel5.setText("Edad:"); primerApellido.setEditable(false); jLabel8.setText("Apellidos:"); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup() .addComponent(jLabel2) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(primerNombre, javax.swing.GroupLayout.PREFERRED_SIZE, 206, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup() .addComponent(jLabel8) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(primerApellido))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jLabel5) .addComponent(jLabel4)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(fechaNacimiento, javax.swing.GroupLayout.PREFERRED_SIZE, 210, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(edad, javax.swing.GroupLayout.PREFERRED_SIZE, 123, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(26, 26, 26)) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() - 112 - .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel2) .addComponent(primerNombre, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel4)) .addGap(37, 37, 37) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel8) .addComponent(primerApellido, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(fechaNacimiento, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(jLabel5, javax.swing.GroupLayout.DEFAULT_SIZE, 23, Short.MAX_VALUE) .addComponent(edad, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) .addContainerGap(37, Short.MAX_VALUE)) ); jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("Informacion Domiciliaria")); jLabel6.setText("Telefono:"); telefono.setEditable(false); jLabel7.setText("Direccion:"); direccion.setEditable(false); javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() - 113 - .addContainerGap() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addComponent(jLabel6) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(telefono, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanel2Layout.createSequentialGroup() .addComponent(jLabel7) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(direccion, javax.swing.GroupLayout.PREFERRED_SIZE, 400, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel2Layout.setVerticalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel6) .addComponent(telefono, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel7) .addComponent(direccion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder("Listado de Usuarios")); listPacientes.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "Cedula", "Nombres", "Apellidos", "Fecha", "Direccion", "Telefono" } - 114 - )); listPacientes.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { listPacientesMouseClicked(evt); } }); jScrollPane1.setViewportView(listPacientes); javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); jPanel3.setLayout(jPanel3Layout); jPanel3Layout.setHorizontalGroup( jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 565, Short.MAX_VALUE) .addContainerGap()) ); jPanel3Layout.setVerticalGroup( jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup() .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 582, Short.MAX_VALUE) .addContainerGap()) ); jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder("Registro de Informacion Fisica")); jLabel3.setText("Talla:"); jLabel9.setText("Peso:"); talla.setEditable(false); peso.setEditable(false); jButton2.setText("Registrar Medidas Actuales"); jButton2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton2ActionPerformed(evt); } }); jLabel10.setText("Id:"); javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4); jPanel4.setLayout(jPanel4Layout); - 115 - jPanel4Layout.setHorizontalGroup( jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel4Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jLabel9)) .addComponent(jLabel10)) .addGap(9, 9, 9) .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(peso) .addComponent(talla, javax.swing.GroupLayout.DEFAULT_SIZE, 200, Short.MAX_VALUE) .addComponent(id_registro)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jButton2) .addContainerGap()) ); jPanel4Layout.setVerticalGroup( jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel4Layout.createSequentialGroup() .addGap(14, 14, 14) .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jLabel10) .addComponent(id_registro, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(jPanel4Layout.createSequentialGroup() .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel3) .addComponent(talla, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel9) - 116 - .addComponent(peso, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) .addComponent(jButton2)) .addContainerGap(12, Short.MAX_VALUE)) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) .addComponent(jPanel2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGroup(layout.createSequentialGroup() .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(cedulaPaciente, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel1) .addComponent(cedulaPaciente, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - 117 - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) ); pack(); }// </editor-fold> private void listPacientesMouseClicked(java.awt.event.MouseEvent evt) { try { cedulaPaciente.setText((String) listPacientes.getValueAt(listPacientes.getSelectedRow(), 0)); primerNombre.setText((String) listPacientes.getValueAt(listPacientes.getSelectedRow(), 1)); primerApellido.setText((String) listPacientes.getValueAt(listPacientes.getSelectedRow(), 2)); SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy"); String dateInString = (String) listPacientes.getValueAt(listPacientes.getSelectedRow(), 3); Date date = formatter.parse(dateInString); fechaNacimiento.setDate(date); direccion.setText((String) listPacientes.getValueAt(listPacientes.getSelectedRow(), 4)); telefono.setText((String) listPacientes.getValueAt(listPacientes.getSelectedRow(), 5)); calcularEdad(); int seleccion = JOptionPane.showOptionDialog( null, "Informacion Recuperada", "Eliga una Opcion", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, // null para icono por defecto. new Object[]{"Modificar Paciente", "Registrar Medidas", "Ninguna Accion"}, // null para YES, NO y CANCEL "opcion 1"); if (seleccion == 0) { PermitirNuevo(); - 118 - //Limpiar(); } else { if (seleccion == 1) { HabilitarMedidas(); } } } catch (ParseException ex) { Logger.getLogger(Pacientes.class.getName()).log(Level.SEVERE, null, ex); } } private void cedulaPacienteKeyPressed(java.awt.event.KeyEvent evt) { if (evt.getKeyCode() == KeyEvent.VK_ENTER) { try { BuscarPaciente(); calcularEdad(); } catch (ParseException ex) { Logger.getLogger(Pacientes.class.getName()).log(Level.SEVERE, null, ex); } } } private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { if(id_registro.getText()!=null && talla.getText()!=null && peso.getText()!=null){ Controlador_Registro_Tallas crt = new Controlador_Registro_Tallas(); Controlador_Paciente cp = new Controlador_Paciente(); Registro_Tallas rt = new Registro_Tallas(); rt.setPaciente(cp.getMedico(cedulaPaciente.getText())); rt.setId_registro(id_registro.getText()); Date fechaA = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy"); String dateInString = formatter.format(fechaA); rt.setFecha(dateInString); rt.setPeso(Double.parseDouble(peso.getText())); rt.setTalla(Double.parseDouble(talla.getText())); crt.Guardar(rt); BloquearMedidas(); - 119 - Limpiar(); } } public void Limpiar() { cedulaPaciente.setText(""); primerNombre.setText(""); primerApellido.setText(""); fechaNacimiento.setDate(null); telefono.setText(""); direccion.setText(""); edad.setText(""); id_registro.setText(""); talla.setText(""); peso.setText(""); } public void calcularEdad() { if (fechaNacimiento.getDate() != null) { Date date = fechaNacimiento.getDate(); SimpleDateFormat format2 = new SimpleDateFormat("dd-MM-yyyy"); String datetext = format2.format(date); try { Calendar birth = new GregorianCalendar(); Calendar today = new GregorianCalendar(); int age = 0; int factor = 0; Date birthDate = new SimpleDateFormat("dd-MM-yyyy").parse(datetext); Date currentDate = new Date(); //current date birth.setTime(birthDate); today.setTime(currentDate); if (today.get(Calendar.MONTH) <= birth.get(Calendar.MONTH)) { if (today.get(Calendar.MONTH) == birth.get(Calendar.MONTH)) { if (today.get(Calendar.DATE) > birth.get(Calendar.DATE)) { factor = -1; //Aun no celebra su cumpleaños } } else { - 120 - factor = -1; //Aun no celebra su cumpleaños } } age = (today.get(Calendar.YEAR) - birth.get(Calendar.YEAR)) + factor; edad.setText(Integer.toString(age)); } catch (ParseException e) { edad.setText("0"); } } else { edad.setText("0"); } } public void GuardarPaciente() throws ParseException { Paciente p = new Paciente(); if (ValidarDatos()) { p.setCedula(cedulaPaciente.getText()); p.setNombre(primerNombre.getText()); p.setApellido(primerApellido.getText()); Date date = fechaNacimiento.getDate(); SimpleDateFormat format2 = new SimpleDateFormat("dd-MMM-yyyy"); String fecha = format2.format(date); p.setFecha_nacimiento(fecha); p.setDireccion(direccion.getText()); p.setTelefono(telefono.getText()); Controlador_Paciente cp = new Controlador_Paciente(); cp.Guardar(p); Limpiar(); Listar(); } else { JOptionPane.showMessageDialog(null, "Complete todos los Datos"); } } public void PermitirNuevo() { cedulaPaciente.setEditable(true); primerNombre.setEditable(true); - 121 - primerApellido.setEditable(true); direccion.setEditable(true); telefono.setEditable(true); } public void HabilitarMedidas(){ id_registro.setEditable(true); talla.setEditable(true); peso.setEditable(true); } public void BloquearMedidas(){ id_registro.setEditable(false); talla.setEditable(false); peso.setEditable(false); } public void Bloquear() { cedulaPaciente.setEditable(false); primerNombre.setEditable(false); primerApellido.setEditable(false); direccion.setEditable(false); telefono.setEditable(false); } public boolean ValidarDatos() { if (cedulaPaciente.getText() != null && primerNombre.getText() != null && primerApellido.getText() != null && fechaNacimiento.getDate() != null && direccion.getText() != null && telefono.getText() != null) { return true; } else { return false; } } public void Listar() { Controlador_Paciente cp = new Controlador_Paciente(); List<Paciente> l = cp.listar(); - 122 - DefaultTableModel temp = (DefaultTableModel) listPacientes.getModel(); for (int i = listPacientes.getRowCount() - 1; i >= 0; i--) { temp.removeRow(i); } for (int i = 0; i < l.size(); i++) { Paciente otroMed = new Paciente(); otroMed = (Paciente) l.get(i); Object nuevo[] = {otroMed.getCedula(), otroMed.getNombre(), otroMed.getApellido(), otroMed.getFecha_nacimiento(), otroMed.getDireccion(), otroMed.getTelefono()}; //esto es por las tres columnas aunque puede variar temp.addRow(nuevo); } listPacientes.setModel(temp); } public void BuscarPaciente() throws ParseException { if (cedulaPaciente.getText() != null) { Controlador_Paciente cp = new Controlador_Paciente(); if (cp.getMedico(cedulaPaciente.getText()) != null) { Paciente p = cp.getMedico(cedulaPaciente.getText()); cedulaPaciente.setText(p.getCedula()); primerNombre.setText(p.getNombre()); primerApellido.setText(p.getApellido()); SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy"); String dateInString = p.getFecha_nacimiento(); Date date = formatter.parse(dateInString); fechaNacimiento.setDate(date); direccion.setText(p.getDireccion()); telefono.setText(p.getTelefono()); int seleccion = JOptionPane.showOptionDialog( null, "Busqueda Exitosa", "Eliga una Opcion", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, // null para icono por defecto. new Object[]{"Modificar Paciente", "Registrar Medidas", "Ninguna Accion"}, // null para YES, NO y CANCEL "opcion 1"); if (seleccion == 0) { - 123 - PermitirNuevo(); //Limpiar(); } else { if (seleccion == 1) { HabilitarMedidas(); } } } else { if (JOptionPane.showConfirmDialog(null, "Desea Registrar un Nuevo Paciente?", "DATOS NO ENCONTRADOS", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { PermitirNuevo(); String cedula = cedulaPaciente.getText(); Limpiar(); cedulaPaciente.setText(cedula); } else { Limpiar(); } } } else { JOptionPane.showMessageDialog(rootPane, "No Ingreso un Parametro de Busqueda"); } } public void Modificar() { if (ValidarDatos()) { Controlador_Paciente cp = new Controlador_Paciente(); Date date = fechaNacimiento.getDate(); SimpleDateFormat format2 = new SimpleDateFormat("dd-MMM-yyyy"); String fecha = format2.format(date); cp.Actualizar(cedulaPaciente.getText(), primerNombre.getText(), primerApellido.getText(), direccion.getText(), telefono.getText(), fecha); Limpiar(); Listar(); } else { JOptionPane.showMessageDialog(rootPane, "Complete todos los Campos"); } } } - 124 - ANEXO G: CODIGO FUENTE DE PRINCIPAL.JAVA public class Principal extends javax.swing.JFrame { /** * Creates new form Principal */ public Principal() { JFrame.setDefaultLookAndFeelDecorated(true); //SubstanceLookAndFeel.setSkin("org.jvnet.substance.skin.CremeSkin"); //SubstanceLookAndFeel.setSkin("org.jvnet.substance.skin.GreenMagicSkin"); SubstanceLookAndFeel.setSkin("org.jvnet.substance.skin.OfficeSilver2007Skin"); setExtendedState(JFrame.MAXIMIZED_BOTH); initComponents(); } Object p; @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("Sistema de Control de Dietas"); setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); setState(1); jToolBar1.setFloatable(false); jToolBar1.setRollover(true); btnPacientes.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagenes/paciente.png"))); // NOI18N btnPacientes.setText("Pacientes"); btnPacientes.setFocusable(false); btnPacientes.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); btnPacientes.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); btnPacientes.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnPacientesActionPerformed(evt); } }); jToolBar1.add(btnPacientes); - 125 - btnDietas.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagenes/dieta.png"))); // NOI18N btnDietas.setText("Dietas"); btnDietas.setFocusable(false); btnDietas.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); btnDietas.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); btnDietas.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnDietasActionPerformed(evt); } }); jToolBar1.add(btnDietas); btnNutricion.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagenes/nutricion.png"))); // NOI18N btnNutricion.setText("Nutricion"); btnNutricion.setFocusable(false); btnNutricion.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); btnNutricion.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); btnNutricion.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnNutricionActionPerformed(evt); } }); jToolBar1.add(btnNutricion); btnHistorial.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagenes/historial.png"))); // NOI18N btnHistorial.setText("Historial"); btnHistorial.setFocusable(false); btnHistorial.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); btnHistorial.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); btnHistorial.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnHistorialActionPerformed(evt); } }); jToolBar1.add(btnHistorial); javax.swing.GroupLayout jDesktopLayout = new javax.swing.GroupLayout(jDesktop); - 126 - jDesktop.setLayout(jDesktopLayout); jDesktopLayout.setHorizontalGroup( jDesktopLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 0, Short.MAX_VALUE) ); jDesktopLayout.setVerticalGroup( jDesktopLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 567, Short.MAX_VALUE) ); jToolBar2.setFloatable(false); jToolBar2.setOrientation(javax.swing.SwingConstants.VERTICAL); jToolBar2.setRollover(true); btnNuevo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagenes/nuevo.png"))); // NOI18N btnNuevo.setText("Nuevo"); btnNuevo.setFocusable(false); btnNuevo.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); btnNuevo.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); btnNuevo.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnNuevoActionPerformed(evt); } }); jToolBar2.add(btnNuevo); btnBuscar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagenes/buscar.png"))); // NOI18N btnBuscar.setText("Visualizar"); btnBuscar.setFocusable(false); btnBuscar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); btnBuscar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); btnBuscar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnBuscarActionPerformed(evt); } }); jToolBar2.add(btnBuscar); - 127 - btnModificar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagenes/modificar.png"))); // NOI18N btnModificar.setText("Guardar"); btnModificar.setFocusable(false); btnModificar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); btnModificar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); btnModificar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnModificarActionPerformed(evt); } }); jToolBar2.add(btnModificar); btnEliminar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagenes/borrar.png"))); // NOI18N btnEliminar.setText("Eliminar"); btnEliminar.setFocusable(false); btnEliminar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); btnEliminar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); btnEliminar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnEliminarActionPerformed(evt); } }); jToolBar2.add(btnEliminar); btnLimpiar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagenes/limpiar.png"))); // NOI18N btnLimpiar.setText("Limpiar"); btnLimpiar.setFocusable(false); btnLimpiar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); btnLimpiar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); btnLimpiar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnLimpiarActionPerformed(evt); } }); jToolBar2.add(btnLimpiar); - 128 - btnGuardar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagenes/guardar.png"))); // NOI18N btnGuardar.setText("Registrar"); btnGuardar.setFocusable(false); btnGuardar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); btnGuardar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); btnGuardar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnGuardarActionPerformed(evt); } }); jToolBar2.add(btnGuardar); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(jToolBar2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jDesktop) .addGroup(layout.createSequentialGroup() .addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 425, Short.MAX_VALUE))) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jDesktop) .addGroup(layout.createSequentialGroup() - 129 - .addComponent(jToolBar2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 0, Short.MAX_VALUE)))) ); pack(); }// </editor-fold> private void btnPacientesActionPerformed(java.awt.event.ActionEvent evt) { if (!(p instanceof Pacientes)) { jDesktop.removeAll(); jDesktop.repaint(); p = new Pacientes(); try { CentrarVentanaInterna((Pacientes) p); } catch (PropertyVetoException ex) { Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex); } } else { if (!((Pacientes) p).isVisible()) { try { CentrarVentanaInterna((Pacientes) p); } catch (PropertyVetoException ex) { Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex); } } else { } } } private void btnBuscarActionPerformed(java.awt.event.ActionEvent evt) { if (p instanceof Dietas ) { try { if (((Dietas) p).BuscarPaciente()) { } else { if (!(p instanceof Pacientes)) { jDesktop.removeAll(); jDesktop.repaint(); p = new Pacientes(); try { - 130 - CentrarVentanaInterna((Pacientes) p); } catch (PropertyVetoException ex) { Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex); } } else { if (!((Pacientes) p).isVisible()) { try { CentrarVentanaInterna((Pacientes) p); } catch (PropertyVetoException ex) { Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex); } } else { } } } } catch (ParseException ex) { Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex); } } if (p instanceof Pacientes) { try { ((Pacientes) p).BuscarPaciente(); } catch (ParseException ex) { Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex); } } if(p instanceof Historial){ try { ((Historial) p).BuscarPaciente(); ((Historial) p).RecuperarTallas(); } catch (ParseException ex) { Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex); } } } private void btnDietasActionPerformed(java.awt.event.ActionEvent evt) { - 131 - if (!(p instanceof Dietas)) { jDesktop.removeAll(); jDesktop.repaint(); p = new Dietas(); try { CentrarVentanaInterna((Dietas) p); } catch (PropertyVetoException ex) { Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex); } } else { if (!((Dietas) p).isVisible()) { try { CentrarVentanaInterna((Dietas) p); } catch (PropertyVetoException ex) { Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex); } } else { } } } private void btnNutricionActionPerformed(java.awt.event.ActionEvent evt) { if (!(p instanceof Nutricion)) { jDesktop.removeAll(); jDesktop.repaint(); p = new Nutricion(); try { CentrarVentanaInterna((Nutricion) p); } catch (PropertyVetoException ex) { Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex); } } else { if (!((Nutricion) p).isVisible()) { try { CentrarVentanaInterna((Nutricion) p); } catch (PropertyVetoException ex) { Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex); - 132 - } } else { } } } private void btnHistorialActionPerformed(java.awt.event.ActionEvent evt) { if (!(p instanceof Historial)) { jDesktop.removeAll(); jDesktop.repaint(); p = new Historial(); try { CentrarVentanaInterna((Historial) p); } catch (PropertyVetoException ex) { Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex); } } else { if (!((Historial) p).isVisible()) { try { CentrarVentanaInterna((Historial) p); } catch (PropertyVetoException ex) { Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex); } } else { } } } private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) { if (p instanceof Pacientes) { ((Pacientes) p).PermitirNuevo(); } } private void btnEliminarActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } private void btnGuardarActionPerformed(java.awt.event.ActionEvent evt) { if (p instanceof Pacientes) { try { ((Pacientes) p).GuardarPaciente(); } catch (ParseException ex) { Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex); - 133 - } } if (p instanceof Dietas) { if (((Dietas) p).jTabbedPane1.getSelectedIndex() == 1) { ((Dietas) p).guardarDetalles(); } } } private void btnLimpiarActionPerformed(java.awt.event.ActionEvent evt) { if (p instanceof Pacientes) { ((Pacientes) p).Limpiar(); } if (p instanceof Nutricion) { ((Nutricion) p).Limpiar(); } } private void btnModificarActionPerformed(java.awt.event.ActionEvent evt) { if (p instanceof Pacientes) { ((Pacientes) p).Modificar(); } } /** * @param args the command line arguments */ public static void main(String args[]) { /* Set the Nimbus look and feel */ //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */ try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(Principal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { - 134 - java.util.logging.Logger.getLogger(Principal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(Principal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(Principal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } //</editor-fold> /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new Principal().setVisible(true); } }); } public void CentrarVentanaInterna(JInternalFrame vent) throws PropertyVetoException { Dimension desktopSize = this.jDesktop.getSize(); Dimension jInternalFrameSize = vent.getSize(); vent.setLocation((desktopSize.width - jInternalFrameSize.width) / 2, (desktopSize.height - jInternalFrameSize.height) / 2); this.jDesktop.add(vent); vent.show(); vent.setMaximum(true); } } - 135 - ANEXO H: CODIGO FUENTE DE LA CLASSE DIETA.CLASS package sistema.medico.controlador; public class Controlador_Detalle_Dieta { ////////////////////////////////////////////////////////////////////////////. ObjectContainer db = DataConnection.getInstance(); //////////////////////////////////////////////////////////////////////////// public void Guardar(Detalle_Dieta dd) { db.store(dd); db.commit(); JOptionPane.showMessageDialog(null, "Detalle Guardado"); } //////////////////////////////////////////////////////////////////////////// public List<Detalle_Dieta> listar() { @SuppressWarnings("UnusedAssignment") List<Detalle_Dieta> dd = null; dd = db.query(Detalle_Dieta.class);//Cojemos todos los registros return dd; } //////////////////////////////////////////////////////////////////////////// public List<Detalle_Dieta> listarId(String codigo_dieta){ final String cod = codigo_dieta; List<Detalle_Dieta> detalle = db.query( new Predicate<Detalle_Dieta>() { public boolean match(Detalle_Dieta e) { return e.getCodigo_dieta().getCodigo_dieta().startsWith(cod); } }); return detalle; } //////////////////////////////////////////////////////////////////////////// public Detalle_Dieta getDetalle(final String codigo_detalle) { @SuppressWarnings("UnusedAssignment") List<Detalle_Dieta> ps = null; ps = db.query(new Predicate<Detalle_Dieta>() { @Override public boolean match(Detalle_Dieta o) { return o.getCodigo_detalle().toLowerCase().contains(codigo_detalle.toLowerCase());//convertimos todo a minúscula y comparamos } }, new Comparator<Detalle_Dieta>() { @Override public int compare(Detalle_Dieta o1, Detalle_Dieta o2) { return 0; } }); if (ps.size() == 0) { //JOptionPane.showMessageDialog(null, "No Existe El Cliente"); return null; } else { return ps.get(0); } } } - 136 - ANEXO H: CÓDIGO FUENTE DE LAS VARIABLES DETALLE DIETA CLASS package sistema.medico.negocio; public class Detalle_Dieta { private Dieta codigo_dieta; private String codigo_detalle; private String detalle; private String tipo_detalle; public Detalle_Dieta() { } public Detalle_Dieta(Dieta codigo_dieta, String codigo_detalle, String detalle, String tipo_detalle) { this.codigo_dieta = codigo_dieta; this.codigo_detalle = codigo_detalle; this.detalle = detalle; this.tipo_detalle = tipo_detalle; } public Dieta getCodigo_dieta() { return codigo_dieta; } public void setCodigo_dieta(Dieta codigo_dieta) { this.codigo_dieta = codigo_dieta; } public String getCodigo_detalle() { return codigo_detalle; } public void setCodigo_detalle(String codigo_detalle) { this.codigo_detalle = codigo_detalle; } public String getDetalle() { return detalle; } public void setDetalle(String detalle) { this.detalle = detalle; } public String getTipo_detalle() { return tipo_detalle; } public void setTipo_detalle(String tipo_detalle) { this.tipo_detalle = tipo_detalle; } } - 137 -