Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1. En el Visual Studio crear un nuevo proyecto del tipo Aplicación para Windows (AppBiblioteca)
2. Agregue a la solución dos proyectos del tipo Biblioteca de clases (LibClases y LibFormularios). Elimine de estos
proyectos la clase por defecto Class1. El resultado final debe ser el siguiente:
LA LIBRERÍA DE CLASES
Esta librería será la encargada de realizar las transacciones con la Base de Datos. Cuenta con tres clases iniciales:
- CConexion: Permite conectar a la aplicación con la base de datos.
- CEntidad: Clase ancestro de todas las demás. Implementa métodos para realizar el mantenimiento de las
tablas de la Base de Datos, aunque no se conecta con ninguna en especifico. Esta clase es abstracta por lo
cual no se puede instanciar.
- CLibro: Clase heredera de CEntidad. Implementa aspectos necesarios para el mantenimiento de la tabla
TLibro.
El aspecto final de la capa LibClases deberá ser:
1. En el proyecto LibClases agregue una nueva clase denominada CConexion, cuyo código se tiene a continuación:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace LibClases
{
2. Agregue una nueva clase denominada CEntidad, cuyo código se tiene a continuación:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace LibClases
{
// -------------------------------------------------------------------------
// -- Metodo abstracto encargado de establecer los nombres de los campos
// -- (atributos) de la tabla. Se deben implementar necesariamente
// -- en los herederos como arreglos de cadenas.
// -- Estos atributos deben concidir con los existentes en la Base de Datos
// --------------------------------------------------------------------------
public abstract string[] NombresAtributos();
// -------------------------------------------------------------------
// --- Metodos para el mantenimiento de la tabla
// ---------------------------------------------------------------------
3. Agregue una nueva clase denominada CLibro, cuyo código se tiene a continuación:
using System;
using System.Collections.Generic;
using System.Text;
namespace LibClases
{
public class CLibro: CEntidad
{ //=============== ATRIBUTOS =======================
//-- Todos heredados de CEntidad ----
LA LIBRERÍA DE FORMULARIOS
Esta librería será la encargada de implementar la interfaz que utilizará el usuario final. Es una biblioteca de
formularios visuales. Utiliza la librería dinámica generada por el proyecto LibClases.
Cuenta con dos formularios iniciales:
- FrmPadre: Formulario que implementa aspectos generales del trabajo con la capa de clases. Posee un
atributo de tipo CEntidad para realizar las transacciones con la Base de Datos.
- FrmLibro: Clase heredera del formulario FrmPadre. Implementa aspectos
necesarios para el mantenimiento de la tabla TLibro, para lo cual utiliza
la clase CLibro de la librería LibClases.
El aspecto final de la capa LibFormularios deberá ser como se muestra en la
figura:
Nota: Tenga cuidado en diseñar el formulario de tal forma que en los herederos se puedan realizar las
modificaciones necesarias. Para ello, todo aquel componente que pueda (o deba) cambiarse en los
descendientes deben tener su propiedad Modifiers en Protected
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using LibClases;
namespace LibFormularios
{
public partial class FrmPadre : Form
{ //==================== ATRIBUTOS ==============================
protected CEntidad aEntidad;
}
//---------------------------------------------------------------
public virtual void ListarRegistros()
{ //-- lista todos los registros de la tabla relacionada
}
//--------------------------------------------------------------
public virtual bool EsRegistroValido()
{ //-- verifica que los datos esten completos en el formulario
return true;
}
//---------------------------------------------------------------
public virtual void ProcesarClave()
{
//-- Recuperar atributos, el primer atributo es la clave
string[] Atributos = AsignarValoresAtributos();
// ----- Verificar si existe clave primaria
if (aEntidad.ExisteClavePrimaria(Atributos))
{ //-- Registro existente, Recuperar Atributos y mostrarlos
MostrarDatos();
aEntidad.Nuevo = false;
}
else
{ //-- Registro nuevo, inicializar atributos no clave
InicializarAtributosNoClave();
}
}
//---------------------------------------------------------------
public virtual void Grabar()
{
try
{
if (EsRegistroValido())
{ //-- Recuperar atributos, el primer atributo es la clave
string[] Atributos = AsignarValoresAtributos();
//-- Verificar si existe clave primaria
if (aEntidad.ExisteClavePrimaria(Atributos))
aEntidad.Actualizar(Atributos);
else
aEntidad.Insertar(Atributos);
//-- Inicializar el formulario
MessageBox.Show("OPERACION REALIZADA EXITOSAMENTE", "CONFIRMACION");
Ing. Robert Alzamora Paredes Página 8
InicializarAtributos();
ListarRegistros();
}
else
MessageBox.Show("DEBE COMPLETAR EL LLENADO DEL FORMULARIO",
"ALERTA");
}
catch (Exception e)
{
MessageBox.Show(e.ToString(), "ERROR AL REALIZAR LA OPERACION");
}
}
//---------------------------------------------------------------
private void BtnSalir_Click(object sender, System.EventArgs e)
{
Close();
}
//---------------------------------------------------------------
private void buNuevo_Click(object sender, System.EventArgs e)
{
InicializarAtributos();
}
}
}
4. Agregue al proyecto un segundo formulario FrmLibro heredero de FrmPadre. Para ello, en el código de FrmLibro
agregue las siguientes cláusulas en la definición de la clase parcial:
public partial class FrmLibro : FrmPadre
Luego, diseñar el formulario de tal manera que tenga un aspecto similar al siguiente modelo:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using LibClases;
namespace LibFormularios
{
public partial class FrmLibro : FrmPadre
{
public FrmLibro()
{
InitializeComponent();
IniciarEntidad(new CLibro());
}
//============= REDEFINICION DE LOS METODOS VIRTUALES ====================
}
//-----------------------------------------------------------
//-- verificar los campos obligatorios(codigo y titulo) estén llenos
public override bool EsRegistroValido()
{
if (TxtCodLibro.Text.Trim() != "" && TxtTitulo.Text.Trim() != "")
return true;
else
return false;
}
}
LA APLICACIÓN PRINCIPAL
En el formulario de la aplicación (FrmPrincipal), agregue la referencia a la librería LibFormularios, tal cual se hizo
en el proyecto anterior. Agregue al formulario un menú y desde éste una opción que permita instanciar un
formulario del tipo FrmLibro, y verifique su funcionamiento.
El aspecto final de la solución debe ser la que sigue:
Para el caso de la tabla Ejemplar, debemos recordar que esta tabla se encuentra relacionada a la tabla TLibro, por
lo cual se presenta una clave foránea: CodLibro. Además la clave principal de TEjemplar es autonumérica.
c) Esta última modificación afecta al constructor de la clase que ahora debe contemplar un nuevo parámetro para
inicializar este atributo.
e) Luego, modificar el método Insertar dentro de CEntidad para que soporte claves autonuméricas.
f) Finalmente, en CEntidad corregir el siguiente método para hacerlo tolerante a errores (cuando la tabla CERO no
tiene registro)
LA CLASE CEJEMPLAR
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace LibClases
{
public class CEjemplar: CEntidad
{ //=============== ATRIBUTOS =======================
Ing. Robert Alzamora Paredes Página 13
//-- Todos heredados de CEntidad ----
EL FORMULARIO FrmEjemplar
- Cada ejemplar le corresponde a un libro, por lo que necesitaremos un objeto del tipo CLibro para manipular
la información correspondiente. Este objeto se encargará de mostrar toda la información necesaria en el
group box de Libro. El formulario debe tener los métodos y eventos necesarios para este fin.
- El datagridview debe mostrar los ejemplares que están relacionados con el libro seleccionado en el combo. Si
no se tiene ningún libro seleccionado, el grid permanece vacío. Para ello, necesitaremos en la clase
CEjemplar un método que devuelva la lista de ejemplares relacionados a un libro especifico
(ListaEjemplaresDeLibro).
- El código de un ejemplar es autonumérico, por lo cual no hay posibilidad que una clave exista al momento de
insertar un nuevo ejemplar. En ese sentido necesitaremos redefinir el método Grabar para que inserte sin
hacer la validación de clave duplicada.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using LibClases;
namespace LibFormularios
{
public partial class FrmEjemplar : FrmPadre
{ //=================== ATRIBUTOS ==========================
private CLibro aLibro;