tratamientos

SESION SESION SESION SESION SESION SESION SESION 1: 2: 3: 4: 5: 6: 7: Desarrollando La Interfaz Gráfica De Usuario Cre

Views 250 Downloads 3 File size 1MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

SESION SESION SESION SESION SESION SESION SESION

1: 2: 3: 4: 5: 6: 7:

Desarrollando La Interfaz Gráfica De Usuario Creando El Modelo De La Aplicacion Creando La Base De Datos Creando Las Clases De Acceso A Datos Estableciendo El Control De La Aplicacion Poniendo En Marcha La Aplicacion Publicando La Aplicación

INTRODUCCIÓN El presente tutorial es una guía paso a paso sobre el desarrollo completo de un caso de uso en el lenguaje de programación c# de .NET. El caso de uso que servirá de fuente para el desarrollo de la aplicación es “Administrar datos tratamientos”, caso de uso del Sistema Gestión Citas que se ha venido desarrollando: SESION : 1 Recordemos que el caso de uso que se desarrollará en el presente tutorial es Administrar datos Tratamientos:

Para el desarrollo de la GUI, debemos tener en cuenta el diseño de la base de datos, que en relación con los tratamientos indica que un paciente puede tener varios tratamientos:

Creamos un nuevo proyecto de tipo Aplicación de Windows Forms y le asignamos el nombre de Tratamientos: Al formulario que aparece por defecto, le modificaremos algunas propiedades para convertirlo en el formulario principal de la aplicación:

Con las anteriores propiedades tendremos un formulario principal contenedor de otros formularios secundarios con su respectivo título y en estado maximizado. Para crear el menú principal, arrastramos desde el Cuadro de herramientas un control de tipo MenuStrip sobre el formulario principal:

Ahora, debemos crear el formulario para la asignación de tratamientos Hacemos click derecho sobre el proyecto Tratamientos en la ventana de Explorador de Soluciones y seleccionamos del menú contextual la opción Agregar > Nuevo Elemento: Seleccionamos un elemento de tipo Windows Forms y le ingresamos el nombre frmAsignarTratamientos y hacemos click en el botón Agregar:

A continuación crearemos dos formularios complementarios al formulario anterior, el primero es un formulario de confirmación, donde se presentarán los datos del paciente cuyo número de identificación coincida con el ingresado en el cuadro de texto 8. El segundo formulario servirá para ingresar la información de un nuevo paciente, en caso de no estar registrado. Agregamos un nuevo formulario, tal como lo hicimos con el formulario anterior, este formulario lo llamaremos frmPacienteEncontrado y tendrá el siguiente diseño:

AC a continuación crearemos dos formularios complementarios al formulario anterior, el primero es un formulario de confirmación, donde se presentarán los datos del paciente cuyo número de identificación coincida con el ingresado en el cuadro de texto 8. El segundo formulario servirá para ingresar la información de un nuevo paciente, en caso de no estar registrado. Agregamos un nuevo formulario, tal como lo hicimos con el formulario anterior, este formulario lo llamaremos frmPacienteEncontrado y tendrá el siguiente diseño:

Creamos el siguiente formulario complementario, que servirá para agregar un nuevo paciente cuando este no se encuentre registrado. El diseño del formulario es el siguiente:

Para responder al menú de Consultar Tratamientos, creamos un nuevo formulario con el siguiente diseño:

Después de ser creados los formularios, vamos a escribir el código necesario en el formulario principal para que la aplicación responda a los eventos generados por las opciones del menú. Hacemos doble click sobre la opción Salir del menú Archivo para que nos lleve al respectivo evento: this.Close();

Hacemos doble click en el menú Asignar Tratamientos y en el respectivo evento escribimos el siguiente código: FrmAsignarTratamientos f1 = new FrmAsignarTratamientos(); f1.MdiParent = this; f1.Show();

Hacemos doble click en el menú Consultar Tratamientos y en el respectivo evento escribimos el siguiente código: FrmConsultarTratamientos f2 = new FrmConsultarTratamientos(); f2.MdiParent = this; f2.Show();

Esto es todo lo que por el momento tendremos en la Interface Gráfica del prototipo, al ejecutar la aplicación y hacer click en cada una de las opciones del menú, estas deben responder correctamente: Para finalizar, crearemos una carpeta llamada vista donde almacenaremos todos los formularios creados, para ello hacemos click derecho sobre el proyecto Tratamientos en la ventana del Explorador de Soluciones y seleccionamos la opción del menú contextual Agregar > Nueva Carpeta: Seleccionamos los 5 formularios creados y los arrastramos hasta el paquete vista: SESION 2 : CREANDO EL MODELO DE LA APLICACIÓN Para identificar las clases que forman parte del modelo, es necesario revisar el diagrama de clases realizado durante el análisis y refinado durante el diseño. Las clases que forman parte del modelo de esta aplicación son: Paciente, Tratamiento y GestorTratamientos Antes de crear las clases, debemos crear una nueva carpeta llamada modelo sobre el proyecto y haciendo click derecho sobre esta carpeta seleccionamos del menú contextual la opción Agregar > Nuevo elemento: De la ventana emergente seleccionamos el elemento Clase y le asignamos el nombre Paciente.cs y hacemos click en el botón Agregar: El código de la clase Paciente es sencillo, simplemente se definen sus atributos, se adiciona su constructor y se crean las propiedades getter y setter para cada atributo: using using using using

System; System.Collections.Generic; System.Linq; System.Text;

namespace Tratamientos.modelo { class Paciente { private string id; private string nombres; private string apellidos; private string fechanacimiento; private string sexo; public Paciente(string id, string nombres, fechanacimiento, string sexo) { this.id = id; this.nombres = nombres; this.apellidos = apellidos; this.fechanacimiento = fechanacimiento; this.sexo = sexo; } public string Identificacion

string

apellidos,

string

{ get { return this.id; } set { this.id = value; } } public string Nombres { get { return this.nombres; } set { this.nombres = value; } } public string Apellidos { get { return this.apellidos; } set { this.apellidos = value; } } public string FechaNacimiento { get { return this.fechanacimiento; } set { this.fechanacimiento = value; } } public string Sexo { get { return this.sexo; } set { this.sexo = value; } } } }

De manera similar creamos la clase Tratamiento dentro del paquete modelo, teniendo en cuenta que sus atributos reflejan los campos de la tabla TRATAMIENTOS en la base de datos. El campo de la base de datos número de tratamiento no es tenido en cuenta en la clase como atributo, ya que este campo se debe generar automáticamente en la base de datos para cada nuevo tratamiento. using using using using

System; System.Collections.Generic; System.Linq; System.Text;

namespace Tratamientos.modelo { class Tratamiento { private string fechaasignado; private string descripcion; private string fechainicio; private string fechafin; private string observaciones; private string paciente; public Tratamiento(string fasi, string desc, string fini, string ffin, string obse, string paci) { this.fechaasignado = fasi; this.descripcion = desc; this.fechainicio = fini; this.fechafin = ffin; this.observaciones = obse; this.paciente = paci; } public string FechaAsignado { get { return this.fechaasignado; } set { this.fechaasignado = value; } } public string Descripcion { get { return this.descripcion; } set { this.descripcion = value; } } public string FechaInicio { get { return this.fechainicio; } set { this.fechainicio = value; } } public string FechaFin { get { return this.fechafin; } set { this.fechafin = value; } } public string Observaciones {

get { return this.observaciones; } set { this.observaciones = value; } } public string Paciente { get { return this.paciente; } set { this.paciente = value; } } } }

SESION 3: CREANDO LA BASE DE DATOS El motor de base de datos seleccionado para el desarrollo de la presente aplicación es SQL Server Compact 3.5 que es el que se instala por defecto al instalar el visual C# 2010 Express. Una base de datos SQLServer Compact Edition es una base de datos local, que residirá en el mismo directorio de la solución y que se puede empaquetar como parte integral del proyecto. A diferencia de una base de datos SQLServer, la cual debe residir en un servidor de bases de datos. Todos los elementos asociados a la base de datos y el acceso a la misma, se crearán en una nueva carpeta dentro del proyecto llamada bd: Hacer click derecho sobre el proyecto Tratamientos y del menú contextual, seleccionar la opción Agregar_Nueva carpeta y asignar el nombre de bd a la carpeta recién creada: Sobre esta carpeta, hacemos click derecho y seleccionamos del menú contextual la opción Agregar_Nuevo elemento: De la ventana emergente, seleccionamos el tipo de elemento Base de datos local, le asignamos como nombre TratamientosBD y hacemos click en el botón Agregar: En la siguiente ventana, hacemos click en Cancelar, para que no se inicie el asistente de orígenes de datos: Observamos que en el explorador de soluciones, dentro de la carpeta bd, se muestra el archivo de bases de datos TratamientosBD.sdf: Para que los cambios sobre los datos de la base de datos se mantengan entre las diferentes ejecuciones del programa, cambiamos el valor de la propiedad de la base de datos Copiar en el directorio de resultados el valor copiar siempre por el valor copiar si es posterior: Hacemos doble click a este archivo y de esta manera, se abre la ventana de Explorador de bases de datos, en ella observamos la base de datos TratamientosBD.sdf. Hacemos click derecho sobre la carpeta Tablas y seleccionamos la opción Crear tabla: Creamos la tabla PACIENTES, definimos sus respectivos campos y hacemos click en el botón Aceptar:

De manera similar creamos la tabla TRATAMIENTOS en esta tabla, debemos poner mucha atención en las propiedades del campo tra_numero, ya que para lograr que sea autonumérico, debemos darle el valor de true a la propiedad Identidad:

SESION 4 : CREANDO LAS CLASES DE ACCESO A DATOS Después de crear las respectivas tablas requeridas para la aplicación, pasamos a crear la clase Conexion dentro de la carpeta bd, esta clase servirá

para establecer y retornar una conexión con la base de datos TratamientosBD. Teniendo en cuenta que la base de datos que estamos empleando en esta aplicación es de tipo SQLServer Compact Edition, debemos agregar una referencia para su respectivo acceso. Hacemos click derecho sobre la carpeta References en el Explorador de soluciones y seleccionamos del menú contextual la opción Agregar referencia: Seleccionamos la referencia System.Data.SqlServerCe y hacemos click en el botón Aceptar:

Luego de agregar la referencia necesaria, creamos una nueva clase dentro de la carpeta bd llamada Conexion, el código de esta clase es el siguiente: using using using using using using

System; System.Collections.Generic; System.Linq; System.Text; System.Data; System.Data.SqlServerCe;

namespace Tratamientos.bd { class Conexion { private static SqlCeConnection conexion; public static SqlCeConnection getconexion() { if (conexion != null) return conexion;

conexion = new SqlCeConnection(); conexion.ConnectionString = "Data Source=|DataDirectory|\\bd\\TratamientosBD.sdf"; try { conexion.Open(); return conexion; } catch (Exception e) { System.Windows.Forms.MessageBox.Show("Error de Conexion" + e.Message); return null; } } public static void cerrarconexion() { if (conexion != null) conexion.Close(); } } }

Después de creada la clase Conexión.cs, pasamos a crear la clase GestorTratamientos que tendrá los métodos requeridos con acceso a la base de datos de acuerdo con las funcionalidades definidas en la vista de la aplicación.El código de la clase GestorTratamientos es el siguiente:

using using using using using

System; System.Collections.Generic; System.Linq; System.Text; System.Data.SqlServerCe;

namespace Tratamientos.bd { class GestorTratamientos { SqlCeConnection conexion; public GestorTratamientos() { conexion = bd.Conexion.getconexion(); } public void registrarPaciente(modelo.Paciente p) { SqlCeCommand comando = new SqlCeCommand(); comando.Connection=conexion; comando.CommandText = "Insert into [PACIENTES] values (@id,@nom,@ape,@fna,@sex)"; comando.Parameters.AddWithValue("@id", p.Identificacion); comando.Parameters.AddWithValue("@nom", p.Nombres); comando.Parameters.AddWithValue("@ape", p.Apellidos); comando.Parameters.AddWithValue("@fna", p.FechaNacimiento); comando.Parameters.AddWithValue("@sex", p.Sexo); try { if (comando.ExecuteNonQuery()==1) { System.Windows.Forms.MessageBox.Show("Paciente Registrado Correctamente"); } } catch(SqlCeException ex) { System.Windows.Forms.MessageBox.Show(ex.Message); } } public modelo.Paciente getPacienteByID(String id) { SqlCeCommand comando= new SqlCeCommand(); comando.Connection=conexion; comando.CommandText="SELECT * FROM PACIENTES WHERE pac_identificacion=@id"; comando.Parameters.AddWithValue("@id", id); SqlCeDataReader registro = comando.ExecuteReader(); if (registro.Read()) { return new modelo.Paciente(registro.GetString(0),registro.GetString(1),registro.GetString(2), registro.GetDateTime(3).ToShortDateString(),registro.GetString(4)); } return null; } public void asignarTratamiento(modelo.Tratamiento tratamiento) {

SqlCeCommand comando = new SqlCeCommand(); comando.Connection = conexion; comando.CommandText = "Insert into [TRATAMIENTOS] (tra_fechaAsignado,tra_descripcion,tra_fechaInicio,tra_fechaFin," + "tra_observaciones,tra_paciente) values (@fAsig,@desc,@fInicio,@fFin,@obs,@pac)"; comando.Parameters.AddWithValue("@fAsig", tratamiento.FechaAsignado); comando.Parameters.AddWithValue("@desc", tratamiento.Descripcion); comando.Parameters.AddWithValue("@fInicio", tratamiento.FechaInicio); comando.Parameters.AddWithValue("@fFin", tratamiento.FechaFin); comando.Parameters.AddWithValue("@obs", tratamiento.Observaciones); comando.Parameters.AddWithValue("@pac", tratamiento.Paciente); try { if (comando.ExecuteNonQuery()==1) { System.Windows.Forms.MessageBox.Show("Tratamiento Registrado Correctamente"); } } catch (SqlCeException ex) { System.Windows.Forms.MessageBox.Show(ex.Message); } } public SqlCeDataReader consultarTratamiento (String paciente) { SqlCeCommand comando= new SqlCeCommand(); comando.Connection=conexion; comando.CommandText="SELECT * FROM TRATAMIENTOS WHERE tra_paciente=@id"; comando.Parameters.AddWithValue("@id", paciente); SqlCeDataReader registro = comando.ExecuteReader(); return registro; } } }

Como pudimos apreciar en esta sesión, los métodos de acceso a datos corresponden con las funcionalidades que se definieron en la vista de la aplicación.

En este momento, el explorador de soluciones debe reflejar los siguientes archivos y directorios: SESION 5: ESTABLECIENDO EL CONTROLADOR DE LA APLICACIÓN El proyecto hasta ahora cuenta con las interfaces gráficas a través de las cuales se comunicará con los usuarios y con los métodos de acceso a la base de datos, pero hace falta definir las clases que servirán de directores de orquesta de nuestra aplicación, es decir aquellas clases y métodos que en el momento de recibir una acción por parte del usuario establezcan cual debe ser el método de acceso a datos encargado de atender la solicitud. Estas clases son las clases controladoras de la aplicación. Debido a que las clases controladoras requieren tomar información de los formularios y llevar información hacia estos, debemos hacer que los campos de los formularios puedan ser accedidos desde otra clase, para ello, se asigna el valor de Public a la propiedad Modifiers de cada control al que se requiera acceder. Seleccionamos todos los controles de ingreso de datos del formulario Asignar Tratamiento y cambiamos el valor de la propiedad Modifiers de Private a Public:

De igual manera hacemos con los controles del formulario Consultar Tratamientos: Por último hacemos lo mismo con el formulario Registrar Paciente: A continuación, creamos la clase controladora de la aplicación, esta se creará dentro de un paquete llamado controlador.

Crear una nueva carpeta dentro del proyecto Tratamientos con el nombre de controlador y dentro de ella, crear una nueva clase llamada TratamientosControl: La clase TratamientosControl atenderá las solicitudes de la vista y las enviará a la clase GestorTratamientos para su comunicación con la base de datos El código de la clase TratamientosControl es el siguiente: using using using using using using using

System; System.Collections.Generic; System.Linq; System.Text; System.Data.SqlServerCe; System.Data; System.Windows.Forms;

namespace Tratamientos.controlador { class TratamientosControl { private bd.GestorTratamientos gt; public TratamientosControl() { gt = new bd.GestorTratamientos(); } public void asignarTratamiento(FrmAsignarTratamientos formulario) { gt.asignarTratamiento(new modelo.Tratamiento(formulario.txtFechaAsignado.Text, formulario.txtDescripcion.Text, formulario.dtpFechaInicio.Value.ToShortDateString(), formulario.dtpFechaFin.Value.ToShortDateString(), formulario.txtObservaciones.Text, formulario.txtIdentificacion.Text)); } public void consultarPaciente(FrmAsignarTratamientos formulario) { modelo.Paciente p = gt.getPacienteByID(formulario.txtIdentificacion.Text); if (p == null) { if (MessageBox.Show("El Paciente no se encuentra registrado. ¿Desea Registrarlo?", "Atención", MessageBoxButtons.YesNo) == DialogResult.Yes) { new FrmRegistrarPaciente().ShowDialog(); } } else { FrmPacienteEncontrado f = new FrmPacienteEncontrado(); f.lblIdentificacion.Text = p.Identificacion; f.lblNombres.Text = p.Nombres; f.lblApellidos.Text = p.Apellidos; f.lblFechaNacimiento.Text = p.FechaNacimiento; f.lblSexo.Text = p.Sexo; f.ShowDialog();

} } public void consultarTratamientos(FrmConsultarTratamientos formulario) { SqlCeDataReader lector = gt.consultarTratamiento(formulario.txtIdentificacion.Text); DataTable dt = new DataTable(); dt.Load(lector); formulario.dtgTratamientos.DataSource = dt; } public void registrarPaciente(FrmRegistrarPaciente formulario) { String sexo = ""; if (formulario.optMasculino.Checked) sexo = "M"; else sexo = "F"; modelo.Paciente p = new modelo.Paciente(formulario.txtIdentificacion.Text, formulario.txtNombres.Text, formulario.txtApellidos.Text, formulario.dtpFechaNacimiento.Value.ToShortDateString(), sexo); gt.registrarPaciente(p); } } }

SESION 6: PONIENDO EN MARCHA LA APLICACIÓN Para poder ejecutar la aplicación, debemos ingresar algunos pequeños códigos en la vista, con el fin de gestionar adecuadamente los eventos generados por el usuario de la aplicación. En este punto, ya contamos con un base de datos SqlServer Compact edition, una clase con métodos de acceso a la base de datos GestorTratamientos, una clase controladora TratamientosControl encargada de servir de puente entre los formularios y la clase de acceso a datos. El propósito de la presente sesión es establecer la comunicación entre los formularios y la clase controladora. Vamos al código del formulario principal y este debe lucir de la siguiente manera después de agregar el código de la línea 20 en el cual se cierra la conexión con la base de datos: formulario principal bd.Conexion.cerrarconexion();

tratamientos

de

control

asignar tratamientos

Consultar Tratamientos

El Código correspondiente al formulario Paciente Encontrado solo incorpora lo necesario para que al hacer click en el botón Aceptar se cierre el formulario: El código correspondiente al formulario Registrar Paciente es el siguiente:

Como podemos ver, el código de los formularios es mínimo con el fin de

ser independientes de la lógica de la aplicación. Después de hacer estos ajustes en el código, se puede ejecutar la aplicación para ver su funcionamiento. Es importante tener en cuenta que para asignar y consultar los tratamientos, después de ingresar la identificación del paciente se debe pulsar la tecla Enter SESION 7: PUBLICANDO LA APLICACIÓN Luego de ejecutar la aplicación y comprobar su correcto funcionamiento, pasaremos a crear su instalador. Seleccionamos del menú Proyecto la opción Propiedades de Tratamientos… Seleccionamos la ficha Publicar: Verificamos los archivos que serán incluidos haciendo click en el botón Archivos de Aplicación: Observamos que la base de datos TratamientosBD.sdf y la librería SqlServerCe.dll han sido incluídas: Si queremos conocer los requisitos necesarios para que la aplicación se ejecute correctamente, podemos hacer click en el botón Requisitos previos. Después de comprobar los archivos que se incluirán en la publicación, hacemos click en el botón Publicar ahora: Como resultado de esta operación, se crea una nueva carpeta dentro del proyecto llamada Publish dentro de la cual aparecen los siguientes archivos: Al hacer click en el archivo Setup.exe se instalará la aplicación en el sistema operativo del computador y podremos accederla por fuera del entorno de desarrollo de Visual C#: