-
Imports System.IO
-
Public Class Form1
-
Structure datos
-
Dim numtra As Integer
-
Dim nombre As String
-
Dim dep As String
-
Dim salario As Single
-
End Structure
-
-
Dim archivo As String = ""
-
Dim vdatos(1000) As datos
-
Dim registro As Integer = 0 'total de registros
-
Dim registronow As Integer = 0 'registro actual
-
Dim banmodificar As Integer = 0
-
-
Private Sub AbrirToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AbrirToolStripMenuItem.Click
-
Dim dlgopen As New OpenFileDialog
-
dlgopen.CheckFileExists = False
-
If dlgopen.ShowDialog() = Windows.Forms.DialogResult.OK Then
-
'creamos flujo
-
Dim flujoopen As New FileStream(dlgopen.FileName, FileMode.OpenOrCreate, FileAccess.ReadWrite)
-
Dim leerfile As New BinaryReader(flujoopen)
-
archivo = dlgopen.FileName
-
'leemos
-
If leerfile.PeekChar <> -1 Then 'si si existe texto
-
'obtenemos total de registros
-
registro = CType(Math.Ceiling(flujoopen.Length / 70), Integer)
-
-
Dim a As Integer
-
For a = 0 To registro - 1
-
leerfile.BaseStream.Seek(70 * a, SeekOrigin.Begin) '70 bytes de largo por cada registro
-
vdatos(a).numtra = leerfile.ReadInt32.ToString
-
vdatos(a).nombre = leerfile.ReadString.ToString
-
vdatos(a).dep = leerfile.ReadString.ToString
-
vdatos(a).salario = leerfile.ReadSingle.ToString
-
Next
-
-
mnunuevo.Enabled = True
-
verregistro(0)
-
'habilitamos menus de navegacion respecto a la posicion actual
-
If registro> 1 Then 'si hay mas de un registro
-
If registronow = registro - 1 Then 'si esta en la ultima posicion
-
mnuanterior.Enabled = True
-
mnuprimero.Enabled = True
-
ElseIf registronow = 0 Then 'si esta en la primer posicion
-
mnuultimo.Enabled = True
-
mnusiguiente.Enabled = True
-
Else 'si cae aki es porke es un registro de en medio
-
mnuanterior.Enabled = True
-
mnuprimero.Enabled = True
-
mnuultimo.Enabled = True
-
mnusiguiente.Enabled = True
-
End If
-
End If
-
-
Else
-
mnunuevo.Enabled = True
-
sblabel.Text = "Sin registros"
-
txtnumtra.Text = ""
-
txtnombre.Text = ""
-
txtdep.Text = ""
-
txtsalario.Text = ""
-
registro = 0 'inicializamos los registros
-
End If
-
GuardarToolStripMenuItem.Enabled = True
-
leerfile.Close()
-
flujoopen.Close()
-
'ponemos nombre de archivo
-
lblfile.Text = Path.GetFileName(dlgopen.FileName)
-
txtnumtra.Focus()
-
End If
-
End Sub
-
-
Private Sub GuardarToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GuardarToolStripMenuItem.Click
-
If registro> 0 Then
-
Dim flujosave As New FileStream(archivo, FileMode.Create, FileAccess.Write)
-
Dim escribirfile As New BinaryWriter(flujosave)
-
Dim a As Integer
-
-
For a = 0 To registro - 1
-
escribirfile.BaseStream.Seek(70 * a, SeekOrigin.Begin) '70 bytes de largo por cada registro
-
escribirfile.Write(CType(vdatos(a).numtra, Integer))
-
escribirfile.Write(CType(vdatos(a).nombre, String))
-
escribirfile.Write(CType(vdatos(a).dep, String))
-
escribirfile.Write(CType(vdatos(a).salario, Single))
-
Next
-
-
escribirfile.Close()
-
flujosave.Close()
-
End If
-
End Sub
-
-
Private Sub SalirToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SalirToolStripMenuItem.Click
-
Me.Close()
-
End Sub
-
-
Private Sub mnunuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnunuevo.Click
-
'limpiamos
-
txtnumtra.Text = ""
-
txtnombre.Text = ""
-
txtdep.Text = ""
-
txtsalario.Text = ""
-
txtnumtra.Focus()
-
-
'habilitamos botones
-
cmdguardar.Visible = True
-
cmdcancelar.Visible = True
-
-
'deshabilitamos menus
-
mnumodificar.Enabled = False
-
mnueliminar.Enabled = False
-
mnunuevo.Enabled = False
-
mnuprimero.Enabled = False
-
mnusiguiente.Enabled = False
-
mnuanterior.Enabled = False
-
mnuultimo.Enabled = False
-
End Sub
-
-
Private Sub cmdguardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdguardar.Click
-
If txtnumtra.Text = "" Or txtnombre.Text = "" Or txtdep.Text = "" Or txtsalario.Text = "" Then
-
MessageBox.Show("Llena correctamente todoos los campos", "Cuidado", MessageBoxButtons.OK, MessageBoxIcon.Warning)
-
Else
-
If banmodificar = 1 Then 'si estaba modificando entonces guardamos en la posicion que estaba
-
banmodificar = 0
-
'guardamos en vector pero en la posicion actual
-
vdatos(registronow).numtra = CType(txtnumtra.Text, Integer)
-
vdatos(registronow).nombre = txtnombre.Text
-
vdatos(registronow).dep = txtdep.Text
-
vdatos(registronow).salario = CType(txtsalario.Text, Single)
-
-
Else 'significa que esta guardando un nuevo registro
-
-
'guardamos en vector
-
vdatos(registro).numtra = CType(txtnumtra.Text, Integer)
-
vdatos(registro).nombre = txtnombre.Text
-
vdatos(registro).dep = txtdep.Text
-
vdatos(registro).salario = CType(txtsalario.Text, Single)
-
-
registronow = registro 'el registro actual sera el recientemente creado
-
registro += 1
-
End If
-
-
cmdcancelar.Visible = False
-
cmdguardar.Visible = False
-
txtnumtra.Focus()
-
sblabel.Text = "Registro " & registronow + 1 & "/" & registro
-
-
'habilitamos menus de navegacion respecto a la posicion actual
-
If registro> 1 Then 'si hay mas de un registro
-
If registronow = registro - 1 Then 'si esta en la ultima posicion
-
mnuanterior.Enabled = True
-
mnuprimero.Enabled = True
-
ElseIf registronow = 0 Then 'si esta en la primer posicion
-
mnuultimo.Enabled = True
-
mnusiguiente.Enabled = True
-
Else 'si cae aki es porke es un registro de en medio
-
mnuanterior.Enabled = True
-
mnuprimero.Enabled = True
-
mnuultimo.Enabled = True
-
mnusiguiente.Enabled = True
-
End If
-
End If
-
-
'habilitamos botones de edicion
-
mnumodificar.Enabled = True
-
mnueliminar.Enabled = True
-
mnunuevo.Enabled = True
-
End If
-
End Sub
-
-
Private Sub cmdcancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdcancelar.Click
-
cmdcancelar.Visible = False
-
cmdguardar.Visible = False
-
mnunuevo.Enabled = True
-
If banmodificar = 1 Then 'si estaba modificando pero cancelo
-
banmodificar = 0
-
verregistro(registronow)
-
Else
-
txtnumtra.Text = ""
-
txtnombre.Text = ""
-
txtdep.Text = ""
-
txtsalario.Text = ""
-
End If
-
-
If registro> 0 Then 'si minimo existe un registro
-
mnumodificar.Enabled = True
-
mnueliminar.Enabled = True
-
End If
-
-
'habilitamos menus de navegacion respecto a la posicion actual
-
If registro> 1 Then 'si hay mas de un registro
-
If registronow = registro - 1 Then 'si esta en la ultima posicion
-
mnuanterior.Enabled = True
-
mnuprimero.Enabled = True
-
ElseIf registronow = 0 Then 'si esta en la primer posicion
-
mnuultimo.Enabled = True
-
mnusiguiente.Enabled = True
-
Else 'si cae aki es porke es un registro de en medio
-
mnuanterior.Enabled = True
-
mnuprimero.Enabled = True
-
mnuultimo.Enabled = True
-
mnusiguiente.Enabled = True
-
End If
-
End If
-
End Sub
-
-
Sub verregistro(ByVal numreg) 'esta funcion nos desplaza entre los registros en memoria
-
registronow = numreg
-
txtnumtra.Text = vdatos(registronow).numtra
-
txtnombre.Text = vdatos(registronow).nombre
-
txtdep.Text = vdatos(registronow).dep
-
txtsalario.Text = vdatos(registronow).salario
-
sblabel.Text = "Registro " & registronow + 1 & "/" & registro
-
txtnumtra.Focus()
-
End Sub
-
-
Private Sub mnuprimero_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuprimero.Click
-
verregistro(0)
-
'si le dio primero, significa que a fuerzas minimo hay 2 registros
-
mnuprimero.Enabled = False
-
mnuanterior.Enabled = False
-
mnusiguiente.Enabled = True
-
mnuultimo.Enabled = True
-
End Sub
-
-
Private Sub mnuanterior_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuanterior.Click
-
verregistro(registronow - 1) 'despues de mandar llamar este procedimiento, el valor de registronow cambia
-
If registronow = 0 Then 'si ya llego al principio
-
mnuprimero.Enabled = False
-
mnuanterior.Enabled = False
-
Else
-
mnuprimero.Enabled = True
-
mnuanterior.Enabled = True
-
End If
-
-
'si presionó anterior, significa que minimo hay 2 registros, entonces como ya te cambio a uno anterior ps habilitamos sin preguntar, "siguiente" y "ultimo"
-
mnusiguiente.Enabled = True
-
mnuultimo.Enabled = True
-
End Sub
-
-
Private Sub mnusiguiente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnusiguiente.Click
-
verregistro(registronow + 1) 'despues de mandar llamar este procedimiento, el valor de registronow cambia
-
If registronow = registro - 1 Then 'si ya llego al ultimo registro
-
mnuultimo.Enabled = False
-
mnusiguiente.Enabled = False
-
Else
-
mnuultimo.Enabled = True
-
mnusiguiente.Enabled = True
-
End If
-
-
'si presionno siguiente signifiica que mminimo hay 2 regsitros, entonces habilitamos sin preguntar, "anterior" y "primero"
-
mnuprimero.Enabled = True
-
mnuanterior.Enabled = True
-
End Sub
-
-
Private Sub mnuultimo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuultimo.Click
-
verregistro(registro - 1)
-
'si presiono el ultimo signifiica que mminimo hay 2 registros asi que habilitamos "anterior" y "primero" sin preguntar
-
mnuanterior.Enabled = True
-
mnuprimero.Enabled = True
-
mnuultimo.Enabled = False
-
mnusiguiente.Enabled = False
-
End Sub
-
-
Private Sub mnumodificar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnumodificar.Click
-
cmdguardar.Visible = True
-
cmdcancelar.Visible = True
-
-
banmodificar = 1 'habilitamos bandera que nos dice que esta modificando un registro
-
-
'deshabilitamos menus
-
mnumodificar.Enabled = False
-
mnueliminar.Enabled = False
-
mnunuevo.Enabled = False
-
mnuprimero.Enabled = False
-
mnusiguiente.Enabled = False
-
mnuanterior.Enabled = False
-
mnuultimo.Enabled = False
-
txtnumtra.Focus()
-
End Sub
-
-
Private Sub mnueliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnueliminar.Click
-
If MessageBox.Show("¿Esta seguro que desea eliminar este registro?", "Cuidado", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) = Windows.Forms.DialogResult.Yes Then
-
vdatos(registronow).numtra = CType(0, Integer)
-
vdatos(registronow).nombre = ""
-
vdatos(registronow).dep = ""
-
vdatos(registronow).salario = CType(0, Single)
-
-
If registro = 1 Then 'si el registro eliminado era el uniko ke habia
-
mnueliminar.Enabled = False
-
mnumodificar.Enabled = False
-
mnuprimero.Enabled = False
-
mnusiguiente.Enabled = False
-
mnuanterior.Enabled = False
-
mnuultimo.Enabled = False
-
-
'limpiamos cuadros de text
-
txtnumtra.Text = ""
-
txtnombre.Text = ""
-
txtdep.Text = ""
-
txtsalario.Text = ""
-
-
sblabel.Text = "Sin registros"
-
registro = 0
-
registronow = 0
-
Else
-
If registronow <> registro - 1 Then 'si cae aki es porke habia por lo menos dos registros y el eliminado no fue el ultimo
-
'recorremos vector
-
Dim a As Integer
-
For a = registronow To registro - 2
-
vdatos(a).numtra = vdatos(a + 1).numtra
-
vdatos(a).nombre = vdatos(a + 1).nombre
-
vdatos(a).dep = vdatos(a + 1).dep
-
vdatos(a).salario = vdatos(a + 1).salario
-
Next
-
verregistro(registronow)
-
Else
-
registronow -= 1
-
verregistro(registronow)
-
End If
-
'decrementamos contadores
-
registro -= 1
-
sblabel.Text = "Registro " & registronow + 1 & "/" & registro
-
End If
-
-
'habilitamos menus de navegacion respecto a la posicion actual
-
If registro> 1 Then 'si hay mas de un registro
-
If registronow = registro - 1 Then 'si esta en la ultima posicion
-
mnuanterior.Enabled = True
-
mnuprimero.Enabled = True
-
ElseIf registronow = 0 Then 'si esta en la primer posicion
-
mnuultimo.Enabled = True
-
mnusiguiente.Enabled = True
-
Else 'si cae aki es porke es un registro de en medio
-
mnuanterior.Enabled = True
-
mnuprimero.Enabled = True
-
mnuultimo.Enabled = True
-