Anda di halaman 1dari 9

Gua Miniproyecto

GUIA DE MINIPROYECTO
Nombre del mini-proyecto: Sistema de Inventario de una Biblioteca Ciclo de vida de un sistema: 1. Anlisis: Se realiza el anlisis de requerimientos y el modelamiento del sistema (qu hace el sistema?) 2. Diseo: Se realiza el diseo del sistema (cmo hacer el sistema?) 3. Implementacin: Se construye el sistema en base al diseo 4. Pruebas: Se realizan pruebas unitarias e integrales del sistema 5. Implantacin: Se lleva a cabo el despliegue y puesta en marcha del sistema Alcance del mini-proyecto: Por temas didcticos, este proyecto tiene un alcance limitado en cuanto a los requerimientos contemplados y las actividades involucradas en el ciclo de vida del sistema Anlisis - Requerimientos funcionales: R1: Registro de nuevos libros y nuevos ejemplares (clase) R2: Registro de nuevos autores R3: Actualizacin de libros y sus ejemplares R4: Actualizacin de autores de libros (clase) R5: Eliminacin de libros y sus ejemplares R6: Eliminacin de autores de libros (clase) R7: Reporte de libros y sus ejemplares R8: Reporte de libros y sus autores (clase) Diseo de la Base de Datos: En el diseo se realiza el diagrama relacional de la base de datos que se va utilizar en el sistema:

Autor: Jorge Villarroel Salvatierra

Gua Miniproyecto

Implementacin - Estilo de Programacin: Se utilizar la programacin por capas, esto para separar el desarrollo en varios niveles con la finalidad de hacer ms fcil la mantencin del sistema. Especficamente se manejarn 3 capas: 1. Capa de presentacin: llamada tambin capa de usuario y conocida como interfaz de usuario. Es la capa que entra en contacto con el usuario, pues presenta el sistema al usuario, obtiene informacin del usuario y comunica informacin al usuario. Esta capa debe caracterizarse por ser amigable, entendible y fcil de usar para el usuario. 2. Capa de negocio: llamada tambin lgica del negocio porque aqu se establecen las reglas del negocio a cumplir, se procesan las peticiones del usuario y se envan las respuestas luego de terminar los procesos. Esta capa se comunica con la capa de presentacin para recibir las solicitudes y enviar resultados. Esta capa se comunica con la capa de datos para solicitar el almacenamiento o recuperacin de datos. 3. Capa de datos: es la que se encarga del acceso a los datos para almacenamiento o recuperacin, para lo cual interacta con el gestor de base de datos que aloja los datos. Esta capa recibe solicitudes de almacenamiento o recuperacin de informacin de la capa de negocio. Esta capa nunca entra en contacto con la capa de presentacin.

CAPA DE PRESENTACIN

CAPA DE NEGOCIO

USUARIO

CAPA DE DATOS

BASE DE DATOS APLICACIN

Implementacin - Definiciones previas a la construccin del sistema: Se utilizar como lenguaje de programacin: C# Se utilizar como entorno de desarrollo: Visual Studio 2008/2010 Se utilizar como gestor de base de datos: MySQL Server Se utilizar como herramienta diseo de base de datos: MySQL Workbench Se utilizar como cliente de base de datos: MySQL Workbench, MySQL Maestro, phpMyAdmin, MySQL Client

Autor: Jorge Villarroel Salvatierra

Gua Miniproyecto

R0: Crear la estructura de la solucin por capas Paso01: Crear una solucin llamada MiniProyecto3, dentro la misma crear 3 proyectos: Crear un proyecto de tipo Biblioteca de Clases, llamado: Datos (para la capa de datos) Crear un proyecto de tipo Biblioteca de Clases, llamado: Logica (para la capa de negocio) Crear un proyecto de tipo Windows Forms, llamado: Presentacion (para la capa de presentacin) Crear un proyecto de tipo Biblioteca de Clases, llamado: Comun (para las clases comunes a todas las capas) Paso02: Configurar referencias en los 3 proyectos: En el proyecto Datos agregar referencia -> .NET -> MySql.Data En el proyecto Logica agregar referencia -> Proyectos -> Datos En el proyecto Presentacion agregar referencia -> Proyectos -> Logica En los 3 proyectos creados anteriormente agregar referencia -> Proyectos -> Comun Paso03: Configurar el proyecto Presentacion como el proyecto de inicio R0: Crear formulario principal (capa de presentacin) Paso01: En el proyecto Presentacion agregar el formulario FrmPrincipal.cs y personalizarlo colocando los siguientes valores a sus propiedades: Propiedad IsMdiContainer poner en true (para convertirlo en formulario padre) Propiedad Text poner SISTEMA DE INVENTARIO BIBLIOTECARIO (para asignar ttulo al formulario) Propiedad StartPosition poner en CenterScreen (para que el formulario se muestre en el centro de la pantalla) Paso02: Aadir un control ToolStrip al formulario FrmPrincipal, y personalizarlo para tenga el siguiente men de opciones: Agregar un DropDownButton llamado REGISTRO con 3 opciones: Libros, Ejemplares y Autores Agregar un DropDownButton llamado MODIFICACION con 3 opciones: Libros, Ejemplares y Autores Agregar un DropDownButton llamado REPORTES con 2 opciones: Libros y sus ejemplares, y Libros y sus Autores Agregar un Label de separacin Agregar un DropDownButton llamado ACERCA DE con 2 opciones: Ayuda y Nosotros Paso 03: En cada DropDownButton y Button del ToolStrip configurar: Click derecho -> Establecer imagen -> Archivo de recurso del proyecto -> Importar -> Elegir una imagen del tamao adecuado Propiedad ImageScaling colocar en: None (imagen debe ser del tamao correcto) Propiedad TextImageRelation colocar en: ImageAboveText Click derecho -> DisplayStyle -> ImageAndText

Autor: Jorge Villarroel Salvatierra

Gua Miniproyecto

R0: Crear clases (capa de negocio) Paso01: En el proyecto Logica agregar la clase AccesoLogica.cs: Hacer la clase pblica para que sea accesible desde la Capa de Presentacin Dentro esta clase se crearn mtodos que: o Sern invocados por la capa de Presentacin o Invocarn mtodos de la capa de Datos R0: Crear clases (capa de datos) Paso01: En el proyecto Datos agregar 3 clases: La clase Configuracion.cs cuyo propsito ser disponer de mtodos estticos que definan configuraciones para el acceso a la Base de Datos, por ejemplo la cadena de conexin
class Configuracion { private static string cadenaConexion ="Server=localhost;Database=sib;Uid=root;Pwd="; public static string getCadenaConexion() { return cadenaConexion; } }

La clase MetodosDatos.cs cuyo propsito ser disponer de mtodos genricos para el acceso a la Base de Datos. Mtodos genricos se refiere a que no especificarn sentencias SQL especficas, sino funcionalidades generales que sern invocadas por la clase AccesoDatos.cs. Debe incluir las libreras System.Data, MySql.Data.MySqlClient y System.Collections La clase AccesoDatos.cs cuyo propsito ser disponer de mtodos especficos de acceso a la Base de Datos con sentencias SQL especficas. Invocar mtodos generales de la clase MetodosDatos.cs. La clase AccesoDatos.cs debe ser pblica para que sea accesible desde la Capa Lgica y debe incluir las libreras System.Data, MySql.Data.MySqlClient

Autor: Jorge Villarroel Salvatierra

Gua Miniproyecto

R1: Registro de nuevos libros y nuevos ejemplares (Capa de Presentacin) Paso01: Agregar al proyecto Presentacion un formulario llamado FrmRegLibros, y personalizarlo colocando los siguientes valores a sus propiedades: Propiedad Text poner Registro de Libros (para asignar ttulo al formulario) Propiedad MaximizeBox poner en false (para desactivar el botn de maximizar) Propiedad FormBorderStyle poner en FixedSingle (para que el formulario no cambie de tamao) Propiedad StartPosition poner en CenterParent (para que el formulario se muestre en el centro del formulario padre) (Capa de Presentacin) Paso02: Hacer que el formulario FrmRegLibros tenga los siguientes controles y aspecto:

PictureBox

Propiedad BorderStyle = FixedSingle (muestra marco) Propiedad SizeMode = StretchImage (ajuste imagen en control) DateTimePicker Propiedad Format = Short (formato corto) comIdioma Propiedad DropDownStyle = DropDownList (solo permite seleccionar) comEstado Propiedad DropDownStyle = DropDownList (solo permite seleccionar) (Capa Comn) Paso03: Agregar al proyecto Comun la clase Libro.cs para manejar Libros Hacer la clase pblica para que sea accesible desde los otros proyectos y aadir atributos:
public class Libro { private string codigo; private string titulo; private int hojas; private string idioma; private Image tapa; private DateTime edicion; }

Aadir constructor y mtodos get para cada atributo, por ejemplo:


public string getCodigo() { return codigo; }

Autor: Jorge Villarroel Salvatierra

Gua Miniproyecto

(Capa Comn) Paso04: Agregar al proyecto Comun la clase Ejemplar.cs para manejar Libros Hacer la clase pblica para que sea accesible desde los otros proyectos y aadir atributos:
public class Ejemplar { private string codigolibro; private bool original; private string estado; }

Aadir constructor y mtodos get para cada atributo, por ejemplo:


public string getCodigoLibro() { return codigolibro; }

(Capa de Datos) Paso05: Agregar a la clase MetodosDatos.cs del proyecto Datos mtodos genricos para crear y ejecutar los comandos SQL requeridos. Para mejorar el nivel de reutilizacin es conveniente definir 2 mtodos: Un mtodo que cree dos comandos SQL en la misma conexin (esto servir para los casos que se requiera ejecutar 2 comandos DML como parte de una transaccin). El mtodo debe ser static para invocarlo sin instanciar la clase y debe devolver un ArrayList que contenga los comandos:
public static ArrayList crear2Cmd() { //crea la conexion string cadenaConexion = Configuracion.getCadenaConexion(); MySqlConnection con = new MySqlConnection(cadenaConexion); //crea comando1 MySqlCommand cmd1 = new MySqlCommand(); cmd1 = con.CreateCommand(); cmd1.CommandType = CommandType.Text; //crea comando2 MySqlCommand cmd2 = new MySqlCommand(); cmd2 = con.CreateCommand(); cmd2.CommandType = CommandType.Text; //retorna los comandos ArrayList res = new ArrayList(); res.Add(cmd1); res.Add(cmd2); return res; }

Un mtodo que ejecute los dos comandos SQL contenidos en un ArrayList (esto servir para los casos que se requiera ejecutar 2 comandos DML como parte de una transaccin). El mtodo debe ser static para invocarlo sin instanciar la clase y debe devolver un entero con la cantidad registros afectados:
public static int ejecutarCmdDml(ArrayList cmds) { int res=0; //crea una transaccin nula MySqlTransaction tran = null; MySqlCommand cmd1 = (MySqlCommand)cmds[0]; MySqlCommand cmd2 = (MySqlCommand)cmds[1]; try { cmd1.Connection.Open(); //inicia una transaccin en la conexin tran = cmd1.Connection.BeginTransaction(); //asocia la transaccin con ambos comandos cmd1.Transaction = tran; cmd2.Transaction = tran; //ejecuta ambos comandos res = cmd1.ExecuteNonQuery(); res += cmd2.ExecuteNonQuery(); //confirma la transaccin

Autor: Jorge Villarroel Salvatierra

Gua Miniproyecto
tran.Commit(); } catch (Exception ex) { //deshace la transaccin tran.Rollback(); res = 0; throw ex; } finally { cmd1.Connection.Close(); } return res; }

(Capa de Datos) Paso06: Agregar a la clase AccesoDatos.cs del proyecto Datos un mtodo especfico para insertar un libro en la BD Aadir la librera del proyecto Comun en la clase AccesoDatos.cs. Esto para que se puedan utilizar las clases de dicho proyecto Un mtodo que inserte un libro en la tabla Libro y su primer ejemplar en la tabla Ejemplar, para ello se requieren 2 parmetros: libro y ejemplar. El mtodo debe ser static para invocarlo sin instanciar la clase y debe devolver un entero con la cantidad de registros afectados:
public static int insertarLibro(Libro x, Ejemplar y) { //---crea los 2 comandos ArrayList cmds = MetodosDatos.crear2Cmd(); //---se configura comando1 para insertar libro MySqlCommand cmd1 = (MySqlCommand)cmds[0]; cmd1.CommandText = "insert into libro values (@cod,@tit,@hoj,@idi,@tap,@edi)"; //se aaden 6 parametros al comando1, indicando nombre y tipo de dato: cmd1.Parameters.Add("@cod", MySqlDbType.VarChar); cmd1.Parameters.Add("@tit", MySqlDbType.VarChar); cmd1.Parameters.Add("@hoj", MySqlDbType.Int32); cmd1.Parameters.Add("@idi", MySqlDbType.VarChar); cmd1.Parameters.Add("@tap", MySqlDbType.Blob); cmd1.Parameters.Add("@edi", MySqlDbType.DateTime); //a cada parametro se asignan los atributos del libro cmd1.Parameters["@cod"].Value = x.getCodigo(); cmd1.Parameters["@tit"].Value = x.getTitulo(); cmd1.Parameters["@hoj"].Value = x.getHojas(); cmd1.Parameters["@idi"].Value = x.getIdioma(); Image tapa = x.getTapa(); //convierte el objeto Image de la tapa en un array de bytes byte[] datos = Utiles.XimageToByteArray(tapa); cmd1.Parameters["@tap"].Value = datos; cmd1.Parameters["@edi"].Value = x.getEdicion(); //---se configura comando2 para insertar primer ejemplar MySqlCommand cmd2 = (MySqlCommand)cmds[1]; cmd2.CommandText = "insert into ejemplar (original,estado,cod_libro) values (@ori,@est,@codlib)"; //se aaden 3 parametros al comando2, indicando nombre y tipo de dato: cmd2.Parameters.Add("@ori", MySqlDbType.Byte); cmd2.Parameters.Add("@est", MySqlDbType.VarChar); cmd2.Parameters.Add("@codlib", MySqlDbType.VarChar); //a cada parametro se asignan los atributos del ejemplar cmd2.Parameters["@ori"].Value = y.getOriginal(); cmd2.Parameters["@est"].Value = y.getEstado(); cmd2.Parameters["@codlib"].Value = y.getCodigoLibro(); //ejecuta los 2 comandos y devuelve filas afectadas return MetodosDatos.ejecutarCmdDml(cmds); }

Autor: Jorge Villarroel Salvatierra

Gua Miniproyecto

(Capa Comn) Paso07: Agregar al proyecto Comun la clase Utiles.cs para mtodos auxiliares y utilitarios Hacer la clase pblica para que sea accesible desde los otros proyectos. Y agregar un mtodo esttico que permita convertir un objeto Image a un Vector de bytes, esto servir para que las imgenes contenidas en un PictureBox se puedan almacenar en la BD
public static byte[] XimageToByteArray(Image imageIn) { MemoryStream ms = new MemoryStream(); imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); return ms.ToArray(); }

(Capa de Negocio) Paso08: Agregar a la clase AccesoLogica.cs del proyecto Logica un mtodo para insertar un libro en la BD Aadir la librera del proyecto Comun en la clase AccesoLogica.cs. Esto para que se puedan utilizar las clases de dicho proyecto Un mtodo que inserte un libro en la tabla Libro y su primer ejemplar en la tabla Ejemplar, para ello se requieren 2 parmetros: libro y ejemplar. El mtodo debe ser static para invocarlo sin instanciar la clase y debe devolver un entero con la cantidad de registros afectados. Este mtodo ser invocado por la capa de Presentacin y a su vez este mtodo llamar a mtodos de la capa de Datos para lograr la insercin:
public static int insertarLibro(Libro x,Ejemplar y) { return Datos.AccesoDatos.insertarLibro(x, y); }

(Capa de Presentacin) Paso09: En la clase del formulario FrmPrincipal (formulario padre) hacer lo siguiente: En el evento de hacer click en la opcin del men Registro->Libros, instanciar el formulario de Registro de Libros, hacerlo formulario hijo y mostrarlo:
FrmRegLibros venlib = new FrmRegLibros(); venlib.MdiParent = this; venlib.Show();

(Capa de Presentacin) Paso10: En la clase del formulario FrmRegLibros (formulario hijo), hacer lo siguiente: Aadir un atributo de tipo OpenFileDialog, para la caja de dialogo que se utilizar para cargar la imagen en el pictureBox
private OpenFileDialog caja;

Modificar el constructor instanciando el atributo OpenFileDialog


public FrmRegLibros() { InitializeComponent(); caja = new OpenFileDialog(); }

Aadir 2 mtodos que recuperen los datos ingresados del Libro y Ejemplar y retornen en objetos (aqu se debera validar):
private Libro leerDatosLibro() { string cod = txtCodigo.Text; string tit = txtTitulo.Text; hoj = int.Parse(txtHojas.Text); string idi = comIdioma.Text; DateTime edi = datEdicion.Value; Image tap = picFoto.Image; if (tap == null) tap = Image.FromFile(Environment.CurrentDirectory + "\\blanco.gif"); Libro lib = new Libro(cod, tit, hoj, idi, tap, edi); return lib;

Autor: Jorge Villarroel Salvatierra

Gua Miniproyecto
} private Ejemplar leerDatosEjemplar() { bool ori = chkOriginal.Checked; string est = comEstado.Text; string codlib = txtCodigo.Text; Ejemplar eje = new Ejemplar(codlib, ori, est); return eje; }

En el evento de hacer click en el botn botRegistrar hacer que el libro y primer ejemplar ingresados se inserten en las correspondientes tablas de la BD. Para esto se debe invocar al mtodo creado para tal propsito en la capa de Negocio
//recupera datos de los controles y los coloca en objetos Libro lib = leerDatosLibro(); Ejemplar eje = leerDatosEjemplar(); if (lib == null || eje==null) { MessageBox.Show("Datos erroneo"); return; } int res=Logica.AccesoLogica.insertarLibro(lib, eje); if (res == 2) MessageBox.Show("Registro correcto"); else MessageBox.Show("Registro fallido");

En el evento de hacer click en el botn botCancelar cerrar la ventana


this.Close();

En el evento click del botn botFoto hacer que aparezca la caja de dialogo para elegir un archivo de tipo imagen y la misma mostrar en el pictureBox:
caja.Filter = "Imagenes|*.jpg;*.gif;*.png"; DialogResult res = caja.ShowDialog(); if (res == DialogResult.OK) { picFoto.Image = Image.FromFile(caja.FileName); }

Hacer que en los combos del formulario estn seleccionado por defecto los primeros tems y que el control de Fecha se configure con un mximo y formato personalizado, esto se hace en el evento Load del formulario:
comEstado.SelectedIndex = 0; comIdioma.SelectedIndex = 0; datEdicion.MaxDate = DateTime.Today; datEdicion.Format = DateTimePickerFormat.Custom; datEdicion.CustomFormat = "yyyy"; datEdicion.Checked = false;

Autor: Jorge Villarroel Salvatierra

Anda mungkin juga menyukai