MATERIALS AND METHODS
5.4 Relationship between different groups of isolates by RAPD:
5.4.1 Analysis of genotypes:
El sensor utilizado en la aplicación de Sistema de Control de Asistencia Biométrico Dactilar, es el modelo U.are.U 4000b (Ilustración II.1) de la marca Digital Persona.
Ilustración I- 1 Sensor Digital Persona U.are.U 4000b
La decisión fue tomada debido a sus características generales como:
Tamaño compacto (79 mm X 49 mm X 19 mm)
Excelente calidad
Encriptación de huella dactilar para su uso en base de datos
Reconoce las huellas de dedos con humedad, secas o con superficie áspera
Compatibilidad con Windows 98/2000/ME/XP/7 y Windows Server 2000/2003 Y sus especificaciones técnicas:
Resolución de pixel: 512 PPP
Área de Captura: 14.6 mm (ancho) y 18.1 mm (largo)
Trabaja con imágenes en escala de grises (8 bits)
Compatible con USB 1.0, 1.1 y 2.0
Voltaje: 5V
Corriente (Modo Activo): 190 mA.
Corriente (Modo Ocioso): 140 mA.
Página 65
ÍÍ. Ana lisis de Costos
Para la adecuada realización del Sistema de Control de Asistencia Biométrico Dactilar, se requiere una inversión de capital mínima, si comparamos el costo total del proyecto, con el precio de un Sistema Biométrico Dactilar comercial, puesto que el precio de este tipo de sistemas oscila entre los $15 000 a $ 30 000 por cada hardware y software instalado.
Para desarrollar el sistema, no fue necesario invertir en paquetería de software, ya que se puede obtener la paquetería de Visual Studio y Sql Server 2012 gratuitamente desde la página de Microsoft.
El equipo básico para desarrollar el sistema son dos, una computadora que trabajará como cliente y el sensor óptico para el reconocimiento de huellas dactilares.
Equipo Costo
Computadora de escritorio marca Acer modelo Aspire Revo R1600
$3 400
Sensor Óptico Digital Persona U.areU. 4000b
$700
Tabla II- 1 Costo de equipo para el Sistema
Teniendo en cuenta todos los gastos necesarios para instalar y que el Sistema de Control de Asistencia Biométrico Dactilar trabaje adecuadamente, se tienen los siguientes resultados:
Elementos Requeridos Costo Computadora de escritorio marca Acer
modelo Aspire Revo R1600
$3 400
Sensor Óptico Digital Persona U.areU. 4000b
$700
Tabla II- 2 Costo total de implementación del Sistema
Los costos anteriores son para implementar este sistema en un solo lugar, si se requiere implementar en más lugares sólo se debe de duplicar el costo total de la tabla II.2.
Para determinar el pago de honorarios a los desarrolladores de software, se tomó como
ase el sala io e sual esta le ido pa a P og a ado es de “oft a e e el po tal de
Empleo del gobierno de la República Mexicana (8):
Puesto Salario Mensual (m/n) Desarrollador de Software $ 7 500
Tabla II- 3 Salario Mensual promedio en México
El tiempo del desarrollo del Sistema de Control de Asistencia Biométrico Dactilar, es de dos meses, garantizando su integridad y buen funcionamiento, por lo que el costo total para el desarrollo del software se muestra en la tabla II.4.
Puesto Costo por el desarrollo del Sistema Desarrollador de Software y base de datos $ 7 500
Desarrollador de Software y base de datos $ 7 500
Total $ 15 000
Tabla II- 4 Costo total de desarrollo del software
Haciendo la suma de los elementos necesarios, para la programación y funcionamiento del sistema, así como el pago a los diseñadores es el que se muestra en la tabla II.5.
Puesto Costo por el desarrollo del Sistema Pago a programadores $ 15 000
Material Requerido $ 4 100
Total $ 19 100
Página 67
ÍÍÍ. Co digo de la Aplicacio n
La programación se hizo en Visual Studio 2012 con el SDK de Digital Persona, ocupando 5 de sus librerías.
Para hacer la programación más óptima se crearon 3 clases para ayudar al sistema a comunicarse con SQL Server 2012
//////////////////////////////////////////Clase BD//////////////////////////////////////////// using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient; namespace Sistema_de_Control_de_Asistencia { class BD {
public string cadenaconexion; protected string sql;
protected int resultado; protected SqlConnection cnn; protected SqlCommand comandosql; protected string mensaje;
public BD() {
cadenaconexion = (@"Data Source=VICHO-PC\CASB;Initial Catalog=Control de Acceso por Sistema Biométrico Dactilar; integrated security=true");
cnn = new SqlConnection(this.cadenaconexion); }
public string Mensaje { get { return this.mensaje; } } } } ///////////////////////////////////////Clase Registro///////////////////////////////////////// using System; using System.Collections.Generic; using System.Linq;
using System.Text; using System.Threading.Tasks; using System.Data; using System.Data.SqlClient; namespace Sistema_de_Control_de_Asistencia { class Registro {
private string cadena = @"Data Source=VICHO-PC\CASB;Initial Catalog=Control de Acceso por Sistema Biométrico Dactilar; integrated security=true";
public SqlConnection cnn; private SqlCommandBuilder cmb; public DataSet ds = new DataSet(); public SqlDataAdapter da;
public SqlCommand comando; private void conectar() { cnn = new SqlConnection(cadena); } public Registro() { conectar(); } //CONSULTAR
public void consultar(string sql, string tabla) { ds.Tables.Clear(); da = new SqlDataAdapter(sql, cnn); cmb = new SqlCommandBuilder(da); da.Fill(ds, tabla); } //ELIMINAR
public bool eliminar(string tabla, string condicion) {
cnn.Open();
string sql = "delete from" + tabla + "where" + condicion; comando = new SqlCommand(sql, cnn);
int i = comando.ExecuteNonQuery(); cnn.Close(); if (i > 0) return true; else return false; } //ACTUALIZAR
public bool actualizar(string tabla, string campos, string condicion) {
cnn.Open();
string sql = " UPDATE " + tabla + " SET " + " WHERE " + condicion; comando = new SqlCommand(sql, cnn);
int i = comando.ExecuteNonQuery(); cnn.Close();
Página 69 return true; else return false; } //CONSULTAR2
public DataTable consultar2(string tabla) {
string sql = "select * from" + tabla; da = new SqlDataAdapter(sql, cnn); DataSet dts = new DataSet(); da.Fill(dts, tabla);
DataTable dt = new DataTable(); dt = dts.Tables[tabla];
return dt; }
//INSERTAR
public bool insertar(string sql) {
cnn.Open();
comando = new SqlCommand(sql, cnn); int i = comando.ExecuteNonQuery(); cnn.Close(); if (i > 0) return true; else return false; } } } ///////////////////////////////////////Clase Usuario////////////////////////////////////////// using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient; namespace Sistema_de_Control_de_Asistencia { class Usuario : BD {
private string usuario; private string contraseña; public Usuario() { usuario = string.Empty; contraseña = string.Empty; this.sql = string.Empty; }
public string USUARIO {
get { return usuario; } set { usuario = value; } }
public string CONTRASEÑA {
get { return contraseña; } set { contraseña = value; } }
public bool Buscar() {
bool Resultado = false; cnn.Open();
this.sql = string.Format(@"SELECT Usuario FROM Seguridad WHERE Usuario='{0}' AND Contraseña='{1}'", this.USUARIO, this.CONTRASEÑA); this.comandosql = new SqlCommand(sql, cnn);
SqlDataReader Reg = null;
Reg = this.comandosql.ExecuteReader(); if (Reg.Read())
{
Resultado = true;
this.mensaje = "Bienvenido " + USUARIO; }
else {
this.mensaje = "El usuario o contraseña no son válidos"; } this.cnn.Close(); return Resultado; } } } ////////////////////////////////////////Formulario Principal////////////////////////////////// using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; namespace Enrollment {
delegate void Function();
public partial class MainForm : Form {
public MainForm() {
Página 71 if (Administrador.Checked) VerifyButton.Enabled = false; else VerifyButton.Enabled = true; }
private void EnrollButton_Click(object sender, EventArgs e) {
EnrollmentForm Enroller = new EnrollmentForm(); Enroller.OnTemplate += this.OnTemplate;
Enroller.ShowDialog();
Ingresar_Datos ingresa = new Ingresar_Datos(); ingresa.ShowDialog();
}
private void VerifyButton_Click(object sender, EventArgs e) {
VerificationForm Verifier = new VerificationForm(); Verifier.Verify(Template, textBox1.Text);
}
private void OnTemplate(DPFP.Template template) {
this.Invoke(new Function(delegate() {
Template = template;
VerifyButton.Enabled = (Template != null); if (Template != null)
{
MessageBox.Show("La huella esta lista .", "Base de Datos de Huellas");
} else
MessageBox.Show("La huella no esta lista .Repite el paso anterior", "Base de Datos de Huellas");
})); }
private DPFP.Template Template;
private void MainForm_Load(object sender, EventArgs e) {
}
private void timer1_Tick(object sender, EventArgs e) {
label1.Text = DateTime.Now.ToString("dd-MM-yyyy"); label4.Text = DateTime.Now.ToString("hh:mm:ss"); }
private void button1_Click(object sender, EventArgs e) {
Usuario ob = new Usuario(); ob.USUARIO = textBox1.Text; ob.CONTRASEÑA = textBox2.Text; if (Administrador.Checked) { if (textBox1.Text == "" || textBox2.Text == "") {
MessageBox.Show("Un campo o ambos estan vacíos, ingresa ambos datos", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
textBox1.Text = ""; textBox2.Text = ""; }
else if (ob.Buscar() == true) {
MessageBox.Show(ob.Mensaje, "Sesión Iniciada, Bienvenido"); EnrollButton.Enabled = true; Modificar.Enabled = true; GuardarHuella.Enabled = true; textBox1.Text = ""; textBox2.Text = ""; } else {
MessageBox.Show(ob.Mensaje, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error); textBox1.Text = ""; textBox2.Text = ""; } } if (Personal.Checked) { EnrollButton.Enabled = false; Modificar.Enabled = false; GuardarHuella.Enabled = false; if (textBox1.Text == "" || textBox2.Text == "") {
MessageBox.Show("Un campo o ambos estan vacíos, ingresa ambos datos", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
else if (ob.BuscarPersonal() == true) {
MessageBox.Show(ob.Mensaje, "Sesión Iniciada, Bienvenido"); EnrollButton.Enabled = false;
Modificar.Enabled = false; textBox2.Text = "";
OpenFileDialog open = new OpenFileDialog(); open.FileName = textBox1.Text+".fpt";
FileStream fs = File.OpenRead(open.FileName); DPFP.Template template = new DPFP.Template(fs); OnTemplate(template);
Página 73 }
else
{ textBox2.Text = "";
MessageBox.Show(ob.Mensaje, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
} } }
private void VerifyButton2_Click(object sender, EventArgs e) {
}
private void Modificar_Click(object sender, EventArgs e) {
EditarDatos edit = new EditarDatos(); edit.Show();
}
private void label1_Click(object sender, EventArgs e) {
}
private void button2_Click(object sender, EventArgs e) {
SaveFileDialog save = new SaveFileDialog();
save.InitialDirectory = @"C:\Users\Vicho\Desktop\Enrollment\bin\Debug"; save.Filter = "Fingerprint Template File (*.fpt)|*.fpt";
if (save.ShowDialog() == DialogResult.OK) {
using (FileStream fs = File.Open(save.FileName, FileMode.Create, FileAccess.Write)) { Template.Serialize(fs); } } }
public Stream fs { get; set; }
private void Administrador_CheckedChanged(object sender, EventArgs e) {
}
private void textBox1_TextChanged(object sender, EventArgs e) {
} } }
///////////////////////////////CAPTURAR HUELLA DACTILAR///////////////////////////// using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace Enrollment {
public partial class clave : Form, DPFP.Capture.EventHandler {
public clave() {
InitializeComponent(); }
Registro registro = new Registro(); protected virtual void Init() {
try {
Capturer = new DPFP.Capture.Capture(); if ( null != Capturer )
Capturer.EventHandler = this; else
SetPrompt("No se puede iniciar la captura!"); }
catch
{
MessageBox.Show("No se puede iniciar la captura!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
protected virtual void Process(DPFP.Sample Sample) {
DrawPicture(ConvertSampleToBitmap(Sample)); }
protected void Start() { if (null != Capturer) { try { Capturer.StartCapture();
SetPrompt("Pon tu dedo en el dispositivo para ingresar tu huella.");
} catch {
Página 75 SetPrompt("No se puede iniciar la captura!");
} }
}
protected void Stop() { if (null != Capturer) { try { Capturer.StopCapture(); } catch {
SetPrompt("No se pudo terminar la captura!"); }
} }
private void CaptureForm_Load(object sender, EventArgs e) { BD ob = new BD(); Init(); Start(); }
private void CaptureForm_FormClosed(object sender, FormClosedEventArgs e)
{
Stop(); }
public void OnComplete(object Capture, string ReaderSerialNumber, DPFP.Sample Sample)
{
MessageBox.Show("Retira el dedo.");
SetPrompt("Pon tu dedo otra vez."); Process(Sample);
}
public void OnFingerGone(object Capture, string ReaderSerialNumber) {
//MakeReport("Se ha quitado el dedo del scanner"); }
public void OnFingerTouch(object Capture, string ReaderSerialNumber) {
//MakeReport("El dispositivo esta listo para leer"); }
public void OnReaderConnect(object Capture, string ReaderSerialNumber) {
}
public void OnReaderDisconnect(object Capture, string ReaderSerialNumber)
{
//MakeReport("El dispositivo esta desconectado"); }
public void OnSampleQuality(object Capture, string ReaderSerialNumber, DPFP.Capture.CaptureFeedback CaptureFeedback)
{
if (CaptureFeedback == DPFP.Capture.CaptureFeedback.Good) MakeReport("La calidad de la muestra es buena."); else
MakeReport("La calidad de la muestra es pobre."); }
protected Bitmap ConvertSampleToBitmap(DPFP.Sample Sample) {
DPFP.Capture.SampleConversion Convertor = new DPFP.Capture.SampleConversion();
Bitmap bitmap = null;
Convertor.ConvertToPicture(Sample, ref bitmap); return bitmap;
}
protected DPFP.FeatureSet ExtractFeatures(DPFP.Sample Sample, DPFP.Processing.DataPurpose Purpose)
{
DPFP.Processing.FeatureExtraction Extractor = new DPFP.Processing.FeatureExtraction();
DPFP.Capture.CaptureFeedback feedback = DPFP.Capture.CaptureFeedback.None;
DPFP.FeatureSet features = new DPFP.FeatureSet();
Extractor.CreateFeatureSet(Sample, Purpose, ref feedback, ref features); if (feedback == DPFP.Capture.CaptureFeedback.Good) return features; else return null; }
protected void SetStatus(string status) {
this.Invoke(new Function(delegate() { StatusLine.Text = status; }));
}
protected void SetPrompt(string prompt) {
this.Invoke(new Function(delegate() { Prompt.Text = prompt;
})); }
Página 77 protected void MakeReport(string message)
{ this.Invoke(new Function(delegate() { StatusText.AppendText(message + "\r\n"); })); }
private void DrawPicture(Bitmap bitmap) {
this.Invoke(new Function(delegate() {
Picture.Image = new Bitmap(bitmap, Picture.Size); }));
}
private DPFP.Capture.Capture Capturer;
private void EditarDatos_Click(object sender, EventArgs e) {
EditarDatos mostrar = new EditarDatos(); mostrar.Show(); } } } /////////////////////////////////INGRESAR REGISTROS///////////////////////////////// using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; namespace Enrollment {
public partial class Ingresar_Datos : Form { public Ingresar_Datos() { InitializeComponent(); comboBox1.Items.Add("Base"); comboBox1.Items.Add("Temporal"); comboBox1.Items.Add("Con Licencia"); comboBox2.Items.Add("Matutino"); comboBox2.Items.Add("Vespertino"); comboBox2.Items.Add("Ambos"); }
private void timer1_Tick(object sender, EventArgs e) {
label7.Text = DateTime.Now.ToString("dd-MM-yyyy"); label8.Text = DateTime.Now.ToString("hh:mm:ss"); }
private void button1_Click(object sender, EventArgs e) {
string sql = "insert into Registros1
(Clave,Nombres,AP,AM,TB,HoraEntrada,HoraSalida,Turno) values ('" + this.Cl.Text + "','" + this.Nm.Text + "','" + this.AP1.Text + "','" + this.AM.Text + "','" + this.comboBox1.Text + "','" + this.comboBox3.Text + "','" + this.comboBox4.Text + "','" + this.comboBox2.Text + "')";
string sql1 = "insert into UsuarioPersonal (Usuarios, Contraseña) values ('" + this.Cl.Text + "','" + this.Mat.Text + "')";
if (registro.insertar(sql) && registro.insertar(sql1)) {
MessageBox.Show("Registro Hecho");
MessageBox.Show("Anota el Usuario y Contraseña\nUsuario:" + Cl.Text + "\nContraseña:" + Mat.Text + ""); Close(); } else MessageBox.Show("Error al Registrar"); }
private void Ingresar_Datos_Load(object sender, EventArgs e) {
}
private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) { if (comboBox2.SelectedIndex == 0) { comboBox3.Items.Clear(); comboBox4.Items.Clear(); comboBox3.Items.Add("7:00"); comboBox3.Items.Add("8:00"); comboBox3.Items.Add("9:00"); comboBox3.Items.Add("10:00"); comboBox3.Items.Add("11:00"); comboBox3.Items.Add("12:00"); comboBox3.Items.Add("13:00"); comboBox3.Items.Add("14:00"); comboBox4.Items.Add("7:00"); comboBox4.Items.Add("8:00"); comboBox4.Items.Add("9:00"); comboBox4.Items.Add("10:00"); comboBox4.Items.Add("11:00"); comboBox4.Items.Add("12:00"); comboBox4.Items.Add("13:00"); comboBox4.Items.Add("14:00");
Página 79 } if (comboBox2.SelectedIndex == 1) { comboBox3.Items.Clear(); comboBox4.Items.Clear(); comboBox3.Items.Add("14:00"); comboBox3.Items.Add("15:00"); comboBox3.Items.Add("16:00"); comboBox3.Items.Add("17:00"); comboBox3.Items.Add("18:00"); comboBox3.Items.Add("19:00"); comboBox3.Items.Add("20:00"); comboBox3.Items.Add("21:00"); comboBox3.Items.Add("22.00"); comboBox4.Items.Add("14:00"); comboBox4.Items.Add("15:00"); comboBox4.Items.Add("16:00"); comboBox4.Items.Add("17:00"); comboBox4.Items.Add("18:00"); comboBox4.Items.Add("19:00"); comboBox4.Items.Add("20:00"); comboBox4.Items.Add("21:00"); comboBox4.Items.Add("22.00"); } if (comboBox2.SelectedIndex == 2) { comboBox3.Items.Clear(); comboBox4.Items.Clear(); comboBox3.Items.Add("7:00"); comboBox3.Items.Add("8:00"); comboBox3.Items.Add("9:00"); comboBox3.Items.Add("10:00"); comboBox3.Items.Add("11:00"); comboBox3.Items.Add("12:00"); comboBox3.Items.Add("13:00"); comboBox3.Items.Add("14:00"); comboBox3.Items.Add("15:00"); comboBox3.Items.Add("16:00"); comboBox3.Items.Add("17:00"); comboBox3.Items.Add("18:00"); comboBox3.Items.Add("19:00"); comboBox3.Items.Add("20:00"); comboBox3.Items.Add("21:00"); comboBox3.Items.Add("22.00"); comboBox4.Items.Add("7:00"); comboBox4.Items.Add("8:00"); comboBox4.Items.Add("9:00"); comboBox4.Items.Add("10:00"); comboBox4.Items.Add("11:00"); comboBox4.Items.Add("12:00"); comboBox4.Items.Add("13:00"); comboBox4.Items.Add("14:00"); comboBox4.Items.Add("15:00"); comboBox4.Items.Add("16:00");
comboBox4.Items.Add("17:00"); comboBox4.Items.Add("18:00"); comboBox4.Items.Add("19:00"); comboBox4.Items.Add("20:00"); comboBox4.Items.Add("21:00"); comboBox4.Items.Add("22.00"); } } } }
//////////////////////////////GUARDAR HUELLA DACTILAR/////////////////////////////// SaveFileDialog save = new SaveFileDialog();
save.InitialDirectory = @"C:\Users\Vicho\Desktop\Enrollment\bin\Debug"; save.Filter = "Fingerprint Template File (*.fpt)|*.fpt";
if (save.ShowDialog() == DialogResult.OK) {
using (FileStream fs = File.Open(save.FileName, FileMode.Create, FileAccess.Write)) { Template.Serialize(fs); } } //////////////////////////////////EDITAR REGISTROS////////////////////////////////// using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; namespace Enrollment {
public partial class EditarDatos : Form {
public EditarDatos() {
InitializeComponent(); }
Registro regis = new Registro();
private void groupBox2_Enter(object sender, EventArgs e) {
}
private void EditarDatos_Load(object sender, EventArgs e) {
regis.consultar("select
Clave,Nombres,AP,AM,TB,Turno,HoraEntrada,HoraSalida from Registros1", "Registros1"); this.dataGridView1.DataSource = regis.ds.Tables["Registros1"];
dataGridView1.Refresh();
Página 81 }
private void Eliminar_Click(object sender, EventArgs e) {
if(regis.eliminar("Registros1"," Clave='" + Clave1.Text + "'") && regis.eliminar("UsuarioPersonal", " Usuarios='" + Clave1.Text + "'") )
MessageBox.Show("Registro y Usuario Eliminado"); else
MessageBox.Show("Error al eliminar"); dataGridView1.Refresh();
}
private void Editar_Click(object sender, EventArgs e) {
string campos = "Turno='" + this.Turno.Text + "', TB='" + this.TT.Text + "', HoraEntrada='" + this.HE.Text + "', HoraSalida='" + this.HS.Text + "'";
string campos1 = "Usuario='" + Clave.Text + "'";
if (regis.actualizar("Registros1", campos, "Clave ='" + Clave.Text + "'") && regis.actualizar("UsuarioPersonal", campos1, "Usuarios='" + Clave.Text + "'"))
MessageBox.Show("Se actualizo exitosamente la Información y el Usuario");
else
MessageBox.Show("Error al actualizar, intenta de nuevo"); dataGridView1.Refresh();
} } }
//////////////////////////////CHECAR HUELLA DACTILAR/////////////////////////////// using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; using Microsoft.Office.Interop.Excel; using System.Reflection; namespace Enrollment {
public partial class Checar : Form {
private string clave; public Checar(string clave) { InitializeComponent(); this.clave = clave; Cl.Text = clave; }
private void timer1_Tick(object sender, EventArgs e) {
label11.Text = DateTime.Now.ToString("dd-MM-yyyy"); label8.Text = DateTime.Now.ToString("hh:mm:ss"); }
Registro regis = new Registro();
private void Editar_Click(object sender, EventArgs e) {
string sql = "insert into ChecarEntrada (Clave, Fecha, HoraEntrada) values ('"+ Cl.Text + "','" + label11.Text + "','" + label8.Text + "')";
if (regis.insertar(sql))
MessageBox.Show("Registro Hecho"); else
MessageBox.Show("Error al Registrar"); }
private void ChecarSalida_Click(object sender, EventArgs e) {
string sql = "insert into ChecarSalida (Clave, Fecha, HoraEntrada) values ('" + Cl.Text + "','" + label11.Text + "','" + label8.Text + "')"; if (regis.insertar(sql)) { MessageBox.Show("Registro Hecho"); } else MessageBox.Show("Error al Registrar"); }
private void Checar_Load(object sender, EventArgs e) {
regis.consultar("select Clave,Día,Fecha,HoraEntrada from ChecarEntrada", "ChecarEntrada");
ChecEnt.DataSource = regis.ds.Tables["ChecarEntrada"]; ChecEnt.Refresh();
regis.consultar("select Clave,Día,Fecha,HoraSalida from ChecarSalida", "ChecarSalida");
ChecSal.DataSource = regis.ds.Tables["ChecarSalida"]; ChecEnt.Refresh();
}
private void ExportarDataGridViewExcelEntrada(DataGridView ChecEnt) {
SaveFileDialog fichero = new SaveFileDialog(); fichero.Filter = "Excel (*.xls)|*.xls"; if (fichero.ShowDialog() == DialogResult.OK) { Microsoft.Office.Interop.Excel.Application aplicacion; Microsoft.Office.Interop.Excel.Workbook libros_trabajo; Microsoft.Office.Interop.Excel.Worksheet hoja_trabajo;
aplicacion = new Microsoft.Office.Interop.Excel.Application(); libros_trabajo = aplicacion.Workbooks.Add();
Página 83 libros_trabajo.Worksheets.get_Item(1);
for (int i = 0; i < ChecEnt.Rows.Count - 1; i++) {
for (int j = 0; j < ChecEnt.Columns.Count; j++) { hoja_trabajo.Cells[i + 1, j + 1] = ChecEnt.Rows[i].Cells[j].Value.ToString(); } } libros_trabajo.SaveAs(fichero.FileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal); libros_trabajo.Close(true); aplicacion.Quit(); } }
private void ExportarDataGridViewExcelSalida(DataGridView ChecEnt) {
SaveFileDialog fichero = new SaveFileDialog(); fichero.Filter = "Excel (*.xls)|*.xls"; if (fichero.ShowDialog() == DialogResult.OK) { Microsoft.Office.Interop.Excel.Application aplicacion; Microsoft.Office.Interop.Excel.Workbook libros_trabajo; Microsoft.Office.Interop.Excel.Worksheet hoja_trabajo;
aplicacion = new Microsoft.Office.Interop.Excel.Application(); libros_trabajo = aplicacion.Workbooks.Add();
hoja_trabajo = new Microsoft.Office.Interop.Excel.Worksheet(); libros_trabajo.Worksheets.get_Item(1);
//Recorremos el DataGridView rellenando la hoja de trabajo for (int i = 0; i < ChecSal.Rows.Count - 1; i++)
{
for (int j = 0; j < ChecSal.Columns.Count; j++) { hoja_trabajo.Cells[i + 1, j + 1] = ChecSal.Rows[i].Cells[j].Value.ToString(); } } libros_trabajo.SaveAs(fichero.FileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal); libros_trabajo.Close(true); aplicacion.Quit(); } }
private void Cl_TextChanged(object sender, EventArgs e) {
} } }
V. Conclusiones
El desarrollo del Sistema de Control de Asistencia Biométrico Dactilar utilizando tecnología .NET, ha sido una gran experiencia y un gran acervo cultural para nuestra formación como estudiantes de Ingeniería en la Escuela Superior de Ingeniería Mecánica y Eléctrica, ya que nos ha ayudado a utilizar los conocimientos que hemos adquirido día a día en clase, además que nos ha ayudado a trabajar en equipo y resolver problemas más hábilmente.
El Sistema de Control de Asistencia Biométrico Dactilar utilizando tecnología .NET, es un proyecto que se ha generado para resolver mediante su diseño, la falta de control de asistencia de trabajadores docentes y personal en los edificios de la Escuela Superior de Ingeniería Mecánica y Eléctrica; las principales ventajas de este proyecto son:
1. No es necesario que una persona esté al tanto del reloj checador, debido a que el programa tiene su propio reloj y no puede ser vulnerado ya que trabaja con el reloj interno de la computadora.
2. El desarrollo del sistema en Visual Studio 2012, permite que el programa diseñado sea propiedad de los diseñadores de él, ya que Microsoft cede el uso de las propiedades de sus herramientas de diseño como las de Visual Studio a quienes tienen una licencia de sus programas o como en este caso obtienen los derechos vía internet así, evitando problemas de patentes.
3. Las aplicaciones realizadas con entorno de gráficos Windows, tienen una gran aceptación a nivel industrial o personal, debido a su fácil uso y su gran flexibilidad de ejecutarse en diferentes plataformas de sistemas operativos al momento de crearse la aplicación ejecutable.
4. SQL Server es una herramienta potente que brindan una gran seguridad para el resguardo de información de las bases de datos ya que se pueden obtener respaldos de la información.
Página 85
5. Las características del Sistema, lo hacen competente para ser aplicado en lugares diferentes, pudiéndose adaptar a las necesidades del lugar, siendo que su diseño es flexible y pueden aumentarse sus características.
A través del Sistema de Control de Asistencia Biométrico Dactilar utilizando tecnología .NET, se ha tratado de implementar los conocimientos adquiridos en nuestra estancia en ESIME Zacatenco, por medio de la tecnología más novedosa en cuanto a programación, por lo que la estructura y diseño de éste ha sido un gran reto, al tener que actualizarnos diariamente y en el que al desarrollar el sistema nos hemos encontrado con problemas que no han sido totalmente explorados debido a que aún no tienen una solución determinada, por lo que debieron ser hallados por los programadores.
Sin duda, el resultado de la realización de este Sistema ha sido satisfactorio como se ha demostrado a lo largo del trabajo, el Sistema de Control de Asistencia Biométrico Dactilar utilizando tecnología .NET, representa para nosotros el máximo logro que hemos tenido como estudiantes de la Ingeniería en Comunicaciones y Electrónica en la especialidad de Computación.
V. Glosario
Activo: Son reactivos que se usan para revelar huellas latentes, son fórmulas únicas, cada una con un propósito específico y para un tipo específico de superficie.
Dermis: La dermis es la capa de la piel situada bajo la epidermis y firmemente conectada a ella. La cara interna de la membrana basal de la epidermis se le une a la dermis. Desempeña una función protectora, representa la segunda línea de defensa contra los traumatismos (su grosor es entre 20 y 30 veces mayor que el de la epidermis).
Dll (Dynamic-link library): Es el término con el que se refiere a los archivos con código ejecutable que se cargan bajo demanda de un programa por parte del sistema operativo. Esta denominación es exclusiva para los sistemas operativos Windows.
Epidermis: La epidermis es la barrera más importante del cuerpo al ambiente externo hostil.
Hardware: Elementos físicos de un sistema informático.
PPP (Puntos por pulgada): Es una unidad de medida para resoluciones de impresión,