Está en la página 1de 50

Laboratorio

Aplicacin Agenda Objetivos Crear una aplicacin orientada a objetos basada en componentes en una arquitectura en capas. La aplicacin ser una agenda de contactos en las que se podrn administrar los mismos y asignarles citas. Nota: El presente ejercicio esta preparado para ser realizado en Visual Studio versin 2005 aunque tambin puede realizarse con otras versiones del mismo incluida Visual C # Express Edition. El motor de base de datos a utilizar ser SQL Server y aunque puede ser usado la versin 2000 los ejemplos estarn basados en la versin 2005 (tambin es posible usar versin Express de 2005 que es de uso gratuito) Arquitectura La aplicacin esta dividida en capas funcionales, estas son conceptuales y permiten dividir la aplicacin en sectores mantenibles por funcionalidad. Cada capa tiene asociado fsicamente al menos un componente y en ocasiones varias capas pueden residir en uno solo. La aplicacin estar dividida en las siguientes capas: 1. Capa de Datos 2. Capa de Negocios 3. Capa de Presentacin 4. Componentes Transversales: estos se utilizaran en todas las capas y sern de utilidad para diferentes funcionalidades. En nuestro caso tendremos los siguientes componentes: a. Entidades: compuesto por objetos utilizados para pasar informacin entre las diferentes capas. Tendrn mtodos para funcionalidad bsica y propiedades para administrar su estado. b. Configuracin: permite obtener los datos de configuracin de manera centralizada entre ellos la cadena de conexin a la base de datos.

Componentes Transversales Configuracin Configuraci Entidades

Capa de Presentacin Presentaci


(Windows)

Capa de Negocios

Capa de Datos

Base de Datos (SQL Server)


Figura 1. Esquema de la arquitectura de la aplicacin.

Utilizando la divisin en capas organizaremos la implementacin de la aplicacin dividiendo nuestro trabajo en las siguientes secciones siguiendo el mismo orden de secuencia para crearlos: 1. Crear y configurar Base de Datos 2. Codificar Componentes Transversales 3. Codificar Capa de Datos 4. Codificar Capa de Negocio 5. Codificar Capa de Presentacin 1. Seccin: Crear y configurar Base de Datos La base de datos a utilizar es muy simple, solo contiene 2 tablas y estar implementado sobre un motor de base de datos SQL Server.

Figura 2. Estructura de la Base de Datos Duracin Aproximada 60 minutos Pasos

1) Crear base de datos Agenda


2) Agregar 3) Agregar 4) Agregar 5) Agregar 6) Agregar tabla Contactos tabla Citas relacion Citas de Contactos procedimientos almacenados referentes a tabla Contactos procedimientos almacenados referentes a tabla Citas

1) Crear la base de datos en SQL Server. Nota: Para poder crear la base de datos se debera tener una cuenta de usuario de SQL que tenga privilegios de creacion de base datos asi tambien como de tablas y procedimientos almacenados. Nombre de la base de Datos: Agenda

2) Agregar tabla Contacto

3) Agregar tabla Citas

4) Agregar relacion Citas de Contactos

5) Agregar procedimientos almacenados referentes a tabla Contactos

6) Agregar procedimientos almacenados referentes a tabla Citas

Nota: para mayor informacion ver informacion en Pag 268 a 272.

2. Seccin: Codificar Componentes Transversales


En esta seccin codificaremos los componentes de configuracin y Entidades. Para ello crearemos un nuevo proyecto Class Library y lo ubicaremos en el directorio donde alojaremos nuestro cdigo fuente. Dado que tendremos varios proyectos en la aplicacin los cuales estarn contenido en una solucin, tendremos que tener la precaucin en este primer proyecto que creemos de la aplicacin asignarle el nombre a la solucin (en nuestro caso ser Agenda) y definir la ruta donde se creara la carpeta que contendr este y el resto de los proyectos que se agregaran a la solucin. Antes de comenzar a resolver los siguientes pasos crear el directorio donde se alojaran los archivos fsicos dentro de su computadora. Recomendamos crear una carpeta para la aplicacin ubicada en X:\Proyectos\. Duracin Aproximada 60 minutos Pasos

1) Ingresar a Visual Studio, abrir un nuevo proyecto (File / New /


Project):

A) Seleccionar en Project Type lenguaje Visual C# B) Seleccionar Class Library


C) Completar los siguientes datos:

Crear directorio para la solucion: dejar tildado NOTA: De esta manera se crea un directorio de solucion con el nombre de la aplicacin Agenda que contendra todos los proyectos de la aplicacin y creara el primero de ellos llamado Entidades.

Nombre del Proyecto (Name): Entidades Ubicacin de la solucin (Location): C:\Proyectos\ Nombre de la Solucion (Solution Name): Agenda

2) Una vez creado el proyecto y cada vez que agregemos uno nuevo, habra que
cambiar el Root Namespace al componente para organizar logicamente las clases. Para ello abra la solapa Application de las propiedades del proyecto y modifique los siguientes datos y luego guarde los cambios: A) Assembly Name: Agenda.Entidades B) Root Namespace: Agenda.Entidades

Modificando Namespaces para organizar la aplicacin.

3) El proyecto Entididades contendra clases que en su mayoria

corresponderan con una tabla de la base de datos y representan un registro de ella. Cada campo de la tabla se representa como una propiedad de la clase. Ademas para agrupar varios registros utilizaremos colecciones genericas con lo cual tendremos una clase que represente una entidad y otra clase asociada que represente un conjunto de esas entidadades. Las clases a crear seran: Clase Funcion Contacto Representa un contacto en la aplicacin y se corresponde con un registro de la tabal Contactos. Contactos Representa una coleccin de objetos Contacto y se utiliza para devolver los resultados desde la base de datos. Cita Representa una cita en la aplicacin y se corresponde con un registro de la tabal Cita. Citas Representa una coleccin de objetos Cita y se utiliza para devolver los resultados desde la base de datos. Estas clases solo contienen propiedades y alguna funcionalidad basica ya que solo almacenan informacion. Otros componentes manipularan estos objetos y los relacionaran como corresponda, de acuerdo a sus necesidades. Para cada una de las clases antes mencionada crearemos un archivo de clase de la siguiente forma: A) Posicionar cursor sobre proyecto Entidades y presionar boton derecho. B) Del menu contextual elegir opcion Add / New Item (de igual manera se puede hacer desde menu Project / Add new Item (Ctrl+Shif+A). C) Del dialogo Add New Item Project Name seleccionar tipo de archivo Class y agregarle el nombre a la clase que haremos que coincida con la clase que codificaremos en su interior. En nuestro ejemplo comencemos con Cita.

D)

Note la extension .CS que es la abreviacion de C# (C sharp), dado que podriamos haber iniciado el proyecto en cualquier lenguaje, esto va a estar relacionado con el. Por ejemplo si seria Visual Basic Net el usado seria la extension .VB. Una vez creada la clase agreguemos 3 regiones con el objetivo de lograr una mejor organizacin y legibilidad del codigo. Luego en los ejercicios siguientes agregaremos el codigo dentro de cada una de las regiones. Cada region comienza con #region y finaliza con #endregion. En este caso las regiones seran: (1) Propiedades (2) Constructores (3) Metodos

4) Agregar codigo a regiones de clase Cita A) Region Enumeradores


NOTA: Esta clase posee una region adicional ubicada sobre las anteriores respecto de las restantes clases donde se incluye los enumeradores

B) Region Propiedades

C) Region Constructores

D) Region Metodos

5) Agregar codigo a regiones de clase Citas


Como se menciono al inicio esta clase sera una coleccin de citas por lo cual haremos que herede de la clase List y ademas especificaremos que esa lista sera una lista de Citas, indicando la clase Cita.

6) Agregar codigo a regiones de clase Contacto


A) Region Propiedades

B) Region Constructores

C) Region Metodos

7) Agregar codigo a regiones de clase Contactos


Como se menciono al inicio esta clase sera una coleccin de contactos por lo cual haremos que herede de la clase List y ademas especificaremos que esa lista sera una lista de Contactos, indicando la clase Contacto.

8) A esta altura en el Explorador de Soluciones tendremos un proyecto con


las 4 clases creadas en los puntos anteriores.

NOTA: En caso que la clase inicial Class1.cs (creada por defecto al crear el proyecto) siga existiendo, eliminarla.

9) Ahora debemos crear el componente Configuracion, el cual nos permitira


obtener los valores del archivo de configuracion de la aplicacin. El hecho de agrupar esta funcionalidad en un componente permite ser reutilizado por otras aplicaciones, y ademas permite establecer una norma de uso y almacenamiento de las configuraciones. Este componente es muy basico y su funcion es recuperar la cadena de conexin a la base de datos de nuestra aplicacin, desde el arhcivo App.config para aplicaciones Windows o desde Web.config para aplicaciones Web. Para ello crear una nueva Class Library en la misma solucion a la cual le pondremos de nombre Configuracion. 10) Al igual que con el componente anterior modificar la propiedades de la aplicacin con los siguientes datos: A) Assembly Name: Agenda.Configuracion B) Root Namespace: Agenda.Configuracion

11)

Modificar el nombre de la clase y el archivo que la contiene por: ConfigManager 12) Agregar referencias al proyecto de los siguientes assemblies que seran necesarios: System.Configuration

System.Web (solo para aplicaciones que tengan componente web)

A) Posicionado sobre el proyecto Configuracion seleccionar del menu


contextual la opcion Add Reference. B) En el dialogo Add Reference en solapa buscar y seleccionar el assembler que se desea agregar como referencia (ver lista debajo) C) Presionar boton OK. D) Repetir el proceso anterior con cada referencia a agregar. 13) Agregar el siguiente codigo:

14)

El codigo generado toma algunos elementos que es conveniente repasar su funcion y utilizacion: A) Static: modificador que convierte el metodo en estatico (o de clase), es decir que puede llamarse sin necesidad de instanciarlo la clase. B) AppDomain: objeto en el que la aplicacin esta corriendo; es un aislamiento que genera en CLR para que no se interfieran las aplicacciones entre si. En este caso obtenemos el directorio en donde se encuentra para poder buscar el archivo de configuracion de la aplicacin. C) Configuration, ConfigurationManager, WebConfiguration: son algunas de las clases para manipular archivos de configuracion en .Net. El funcionamiento de esta clase es sencillo, se utiliza el metodo GetValue() para obtener un valor del archivo de configuracion, el cual es obtenido por el metodo privado GetConfiguration() segn el contexto en el que estemos trabajando. Con este componente terminado, nuestra solucion debera quedar asi:

3. Seccin: Codificar Capa de Datos En esta seccin se creara el componente de acceso a datos que ser el nico que conocer como manipular los datos y transformar registros en objetos y viceversa. Duracin Aproximada 60 minutos Pasos

1) Crear un nuevo proyecto en la solucion en base a lo siguiente: A) Seleccionar en Project Type lenguaje Visual C# B) Seleccionar Class Library
C) Completar los siguientes datos: Ubicacin de la solucin (Location): C:\Proyectos\Agenda Mofificar en las propiedades de la solapa Application del proyecto: A) Assembly Name: Agenda.Datos B) Root Namespace: Agenda.Datos Este componente necesitara acceder al archivo de configuracion y ademas necesitara transformar todo registro recuperado de la base de datos en objeto y viceversa. Para lograr acceder a los componentes que tienen dicha funcionalidad deberemos agregar las referencias a dichos componentes Configuracion y Entidades. A) Posicionarse en el Explorador de Solucion en la carpeta References del proyecto Datos. B) Seleccionar del menu contextual la opcion Add Reference. C) Dado que los componentes se encuentran en la misma solucion seleccionar la solapa Projects. D) Seleccionar el componente a agregar y presionar Ok E) Repetir los pasos anteriores por cada uno de los componentes.

2) 3)

Nombre del Proyecto (Name): Datos

4) Una vez referenciados, modificar el nombre de la clase creada por

5)

defecto por el de Contactos, y ademas agregar al inicio del namespace de dicha clase Agenda para que pertencezca al espacio de nombre de la aplicacin. La clase Contactos creada contendra metodos para cada operacin que puede realizar, los cuales corresponderan con cada procedimiento almacenado (Store Procedure) creado en la base de datos. Nomenclatura: Utilizar nombre de la accion a realizar. Por ejemplo para dar de alta un Contacto tendremos:

Clase de Datos: Contactos

6)

Metodo: Add Tabla asociada: Contactos

Procedimiento Almacenado: ContactosAdd Agregar el siguiente codigo dentro de la clase Contactos para el metodo: Add

7) Agregar el siguiente codigo dentro de la clase Contactos para el metodo:


Update

8) Agregar el siguiente codigo dentro de la clase Contactos para el metodo:


Delete

9) Agregar el siguiente codigo dentro de la clase Contactos para el metodo:


GetOne

10)

Agregar el siguiente codigo dentro de la clase Contactos para el metodo: GetAll

11)

La clase Citas creada contendra metodos para cada operacin que puede realizar, los cuales corresponderan con cada procedimiento almacenado (Store Procedure) creado en la base de datos. Nomenclatura: Utilizar nombre de la accion a realizar.

12)
Add

Clase de Datos: Citas Metodo: Add Tabla asociada: Citas Procedimiento Almacenado: CitasAdd Agregar el siguiente codigo dentro de la clase Citas para el metodo:

13)

Agregar el siguiente codigo dentro de la clase Citas para el metodo: Update

14)

Agregar el siguiente codigo dentro de la clase Citas para el metodo: Delete

15)

Agregar el siguiente codigo dentro de la clase Citas para el metodo: GetOne

16)

Agregar el siguiente codigo dentro de la clase Citas para el metodo: GetAll

17)

Otra clase que deberemos crear dentro de este proyecto es la clase General que contendra metodos para cada operacin que puede realizar. Nomenclatura: Utilizar nombre de la accion a realizar.

Clase de Datos: General

18)

Metodo: CreateConnection La clase dispondra del siguiente codigo:

19)

La capa de datos quedaria conformada de eseta manera:

4. Seccin: Codificar Capa de Negocio En esta seccin se creara la capa de Negocios que se encargara de interactuar con la capa de datos para recuperar y enviar datos a la misma para que dicha realice su funcin sobre la base de datos. Manipulara los datos meditante los objetos que soporta el componente Entidades. Duracin Aproximada 60 minutos Pasos

1) Crear un nuevo proyecto en la solucion en base a lo siguiente: A) Seleccionar en Project Type lenguaje Visual C# B) Seleccionar Class Library
C) Completar los siguientes datos:

2) Una vez creado el proyecto y cada vez que agregemos uno nuevo, habra que
cambiar el Root Namespace al componente para organizar logicamente las clases. Para ello abra la solapa Application de las propiedades del proyecto y modifique los siguientes datos y luego guarde los cambios: A) Assembly Name: Agenda.Negocio B) Root Namespace: Agenda.Negocio

Nombre del Proyecto (Name): Negocio Ubicacin de la solucin (Location): C:\Proyectos\

3) Agregar referencias (de la misma manera que lo hizo en apartados


anteriores en otros Proyectos) a los siguientes componentes: Entidades Datos Una vez referenciados, modificar el nombre de la clase creada por defecto por el de Contactos, y ademas agregar al inicio del namespace de dicha clase Agenda para que pertencezca al espacio de nombre de la aplicacin. La clase Contactos creada contendra metodos para cada operacin que puede realizar. Nomenclatura: Utilizar nombre de la accion a realizar. Por ejemplo para dar de alta un Contacto tendremos:

4)

5)

6) Agregar el siguiente codigo dentro de la clase Contactos para el metodo:


Add

Clase de Datos: Contactos Metodo: Add Clase asociada: Contactos (Proyecto Datos) Metodo de Clase asociada: Add

7) Agregar el siguiente codigo dentro de la clase Contactos para el metodo:


Update

8) Agregar el siguiente codigo dentro de la clase Contactos para el metodo:


Delete

9) Agregar el siguiente codigo dentro de la clase Contactos para el metodo:


GetOne

10)

Agregar el siguiente codigo dentro de la clase Contactos para el metodo: GetAll

11)

La clase Citas creada contendra metodos para cada operacin que puede realizar. Nomenclatura: Utilizar nombre de la accion a realizar.

12)
Add

Clase de Datos: Citas Metodo: Add Clase asociada: Citas (Proyecto Datos) Metodo de Clase asociada: Add Agregar el siguiente codigo dentro de la clase Citas para el metodo:

13)

Agregar el siguiente codigo dentro de la clase Citas para el metodo: Update

14)

Agregar el siguiente codigo dentro de la clase Citas para el metodo: Delete

15)

Agregar el siguiente codigo dentro de la clase Citas para el metodo: GetOne

16)

Agregar el siguiente codigo dentro de la clase Citas para el metodo: GetAll

17)

Agregar el siguiente codigo dentro de la clase Citas para el metodo sobrecargado que toma adema el rango de fechas: GetAll

18)

La capa de datos quedaria conformada de eseta manera:

5. Seccin: Codificar Capa de Presentacin Duracin Aproximada 60 minutos Pasos

1) Crear un nuevo proyecto en la solucion en base a lo siguiente:

A) Seleccionar en Project Type lenguaje Visual C# B) Seleccionar Wndows Application


C) Completar los siguientes datos: Ubicacin de la solucin (Location): C:\Proyectos\ Una vez creado el proyecto, abra la solapa Application de las propiedades del proyecto. En este caso no modificaremos a diferencia de las veces anteriores los datos del Assembly Name y Root Namespace. A) Assembly Name: Agenda B) Root Namespace: Agenda C) Startup object: Agenda.Program

2)

Nombre del Proyecto (Name): Agenda

3) Presionar boton Assembly Information... para acceder al dialogo y


completar con la siguiente informacion de la aplicacin: Title: Agenda - Administrador de Contactos Description: Gestor de contactos personales y citas

Company: Agenda - Software SRL Product: Agenda Copyright: Copyright Software SRL 2008 Assembly Version: 1 0 0 - 0 File Version: 1 0 0 0

4) Configuraremos este proyecto como proyecto de inicio seleccionando de

las opciones del menu contextual (al presionar boton derecho del raton sobre el proyecto) la opcion Set as StarUp Project. Nota: esto con el agregado de lo configurado en el punto anterior como objeto de incio de dicho proyecto nos permitira que inicie la aplicacin con este formulario una vez que corramos la misma.

5) Agregar referencias a los componentes: Entidades: (para utilizar los objetos con estado y para el envio de
informacion)

Negocio: (para obtener la funcionalidad de la aplicacin) NOTA: Nunca tiene referencia directa al componente Datos.

6) Agregar la cadena de coneccion en el archivo de configuracion.

7) Por defecto se ha creado un formulario dentro del proyecto con el nombre


Form1 al cual debera cambiarle el nombre por el de frmMain.

8) Abrir la clase Program y modificar el codigo de tal forma que quede como
el siguiente:

NOTA: Esta clase contiene el metodo Main() que sera el primero en ejecutarse al ejecutarse la aplicacin y el mismo se encargara de correr el formulario principal, en nuestro caso frmMain.

9) Agregar una nueva clase al proyecto llamada General(Add/New Item/Class)


e incluir el siguiente codigo:

NOTA: Este codigo solo contiene una Enumeracion que utilizaremos para diferencias 2 posibles estados de los formularios Cita y Contacto y poder distinguir entre los estados de Alta y Edicion.

10)

Agregaremos el resto de formularios a traves de los siguientes pasos estando posicionados sobre el proyecto Agenda usando datos de tabla que se encuentra debajo. Al final obtendremos el siguiente resultado:

A) Seleccionar la opcion de menu Project / Add Windows Form.


B) Cambiar nombre por cada uno de los explicitados.

Formularios Formularios Name Text Size

Principal frmMain Agenda 800, 600

Contacto frmContacto Contacto 465, 350

Cita frmCita Cita 465, 350

Citas frmCitas Citas 792, 566

Acerca De frmAcercaDe Acerca de 300, 300

Propiedades Comunes Name: [prefijo] frm + [NombreFormulario] (ejemplo: frmContacto) MinimizeBox: false MaximizeBox: false 11) Agregar las siguientes regiones al formulario principal frmMain:

12)

Agregar al formulario principal frmMain los siguientes controles a travez de la caja de herramientas (ToolBox) arrastrando y soltando cada uno de los sig. Controles: (ver imagen siguiente para distinguirlos)

A) Agregar control de lista: ListView (en Common Controls)


Nombre: lstContactos View: Details Size: 792, 495 FullRowSelect = True GridLines = True ShowItemToolTips = True Agregar control de menu: MenuStrip (en Menues & Toolbars) Nombre: mnuMain Agregar control de barra de herramientas: ToolStrip Nombre: tlbMain Agregar control de barra de estado: StatusStrip

B) C) D) 13)

Nombre: sttMain
Agregar al formulario frmContacto lo detallado a continuacion: Ventana de Alta y Edicion de Contactos [frmContacto]

A) GroupBox: Name: grpDatosContacto Location: 12, 12 Text: Datos del B) Label Name lblId lblApellido lblNombre lblEmpresa lblCargo lblTelefono lblTelefonoMovil lblEmail lblDomicilio lblLeyenda C) TexBox Name txtId txtApellido txtNombre txtEmpresa txtCargo txtTelefono txtTelefonoMovil txtEmail txtDomicilio D) Button Name btnAceptar btnCancelar Text Aceptar Cancelar Location 280, 300 368, 300 Size 75, 23 75, 23

Size: 430, 260 Contacto Text Id Apellido Nombre Empresa Cargo Telefono Telefono Movil Email Domicilio * Campo obligatorio Location 25, 30 25, 56 25, 25, 25, 25, 25, 25, 25,

14)

Agregar al formulario frmCita lo detallado a continuacion: Ventana de Alta y Edicion de Citas [frmCita]

A) GroupBox:

Name: grpDatosCita Location: 12, 12 Size: 430, 260

Text: Datos de la Cita B) Label Name Text lblId Id lblTema Tema lblFecha Fecha lblEstado Estado lblResultado Resultado lblLeyenda * Campo obligatorio

C) TexBox, DateTimePicker, ComoBox


Name txtId txtTema dtpFecha cmdEstado txtResultado D) Button Name btnAceptar btnCancelar Control TexBox TexBox DataTimePicker ComboBox TexBox Text Aceptar Cancelar Propiedades TexBox TexBox CustomFormat: dd/MM/yyyy hh:mm cmdEstado Multiline: yes Size 75, 23 75, 23

Location 280, 300 368, 300

15)

Agregar al formulario frmCitas lo siguiente: Ventana de Busqueda de Citas para un Contacto dado [frmCitas]

16)

Agregar codigo al formulario frmContacto.La imagen que se muestra a continuacion muestra las propiedades, metodos y eventos necesarios. A continuacion se muestra el codigo detallado de cada uno ellos.

Region:

Region: Metodos de Controles Nota: el codigo de cada metodo a se encuentra a continuacion. Nota: el codigo que no se muestra en la imagen intentar completarlo siguiendo la funcionalidad requerida con la ayuda del profesor.

17)

Agregar codigo al formulario frmCita.

Nota: el codigo que no se muestra en la imagen intentar completarlo siguiendo la funcionalidad requerida con la ayuda del profesor.

18)

Agregar codigo al formulario frmCitas.

Nota: el codigo que no se muestra en la imagen intentar completarlo siguiendo la funcionalidad requerida con la ayuda del profesor.

19)

Agregar codigo al formulario frmMain.

Region: Constructores

Region: Metodos de Formulario

Region: Eventos de Controles

Region: Metodos de Controles Nota: el codigo de cada metodo a se encuentra a continuacion.

Metodo: CargarGrilla

Metodo: IsItemSelected

Metodo: Nuevo

Metodo: Editar

Metodo: Eliminar

Metodo: VerCitas