1. Imports System.IO
Public Class Problemario
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.Filter = "Word Documents|*.doc|Excel Worksheets|*.xls|PowerPoint
Presentations|*.ppt" & "|Office Files|*.doc;*.xls;*.ppt" & "|All Files|*.*"
dlgopen.Title = "Select a Cursor File"
If dlgopen.ShowDialog() = Windows.Forms.DialogResult.OK Then
'creamos flujo
Dim flujoopen As New FileStream(dlgopen.FileName, FileMode.Open,
FileAccess.Read)
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
Nuevo.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
Anterior.Enabled = True
Primero.Enabled = True
ElseIf registronow = 0 Then 'si esta en la primer posicion
Ultimo.Enabled = True
Siguiente.Enabled = True
Else 'si cae aki es porke es un registro de en medio
Anterior.Enabled = True
Primero.Enabled = True
Ultimo.Enabled = True
Siguiente.Enabled = True
2. End If
End If
Else
Nuevo.Enabled = True
sblabel.Text = "Sin registros"
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
registro = 0 'inicializamos los registros
End If
GuardarToolStripMenuItem.Enabled = True
leerfile.Close()
flujoopen.Close()
'ponemos nombre de archivo
Label1.Text = "Has abierto el archivo " +
Path.GetFileName(dlgopen.FileName)
TextBox1.Focus()
End If
Siguiente.Enabled = True
Ultimo.Enabled = True
Modificar.Enabled = True
Eliminar.Enabled = True
CrearToolStripMenuItem.Enabled = False
End Sub
Sub verregistro(ByVal numreg) 'esta funcion nos desplaza entre los registros en
memoria
registronow = numreg
TextBox1.Text = vdatos(registronow).numtra
TextBox2.Text = vdatos(registronow).nombre
TextBox3.Text = vdatos(registronow).dep
TextBox4.Text = vdatos(registronow).salario
sblabel.Text = "Registro " & registronow + 1 & "/" & registro
TextBox1.Focus()
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
3. Private Sub SalirToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles SalirToolStripMenuItem.Click
Application.Exit()
End Sub
Private Sub Nuevo_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Nuevo.Click
'habilitamos los textboxt
TextBox1.Enabled = True
TextBox2.Enabled = True
TextBox3.Enabled = True
TextBox4.Enabled = True
TextBox1.Focus()
'limpiamos los textboxt
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
TextBox1.Focus()
'habilitamos botones
btnguardar.Visible = True
btncancelar.Visible = True
'deshabilitamos menus
Modificar.Enabled = False
Eliminar.Enabled = False
Nuevo.Enabled = False
Primero.Enabled = False
Siguiente.Enabled = False
Anterior.Enabled = False
Ultimo.Enabled = False
End Sub
Private Sub btnguardar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnguardar.Click
If TextBox1.Text = "" Or TextBox2.Text = "" Or TextBox3.Text = "" Or
TextBox4.Text = "" Then
MessageBox.Show("No se han llenado todos 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(TextBox1.Text, Integer)
vdatos(registronow).nombre = TextBox2.Text
vdatos(registronow).dep = TextBox3.Text
vdatos(registronow).salario = CType(TextBox4.Text, Single)
Else 'significa que esta guardando un nuevo registro
'guardamos en vector
vdatos(registro).numtra = CType(TextBox1.Text, Integer)
vdatos(registro).nombre = TextBox2.Text
vdatos(registro).dep = TextBox3.Text
vdatos(registro).salario = CType(TextBox4.Text, Single)
4. registronow = registro 'el registro actual sera el recientemente
creado
registro += 1
End If
btncancelar.Visible = False
btnguardar.Visible = False
TextBox1.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
Anterior.Enabled = True
Primero.Enabled = True
ElseIf registronow = 0 Then 'si esta en la primer posicion
Ultimo.Enabled = True
Siguiente.Enabled = True
Else 'si cae aki es porke es un registro de en medio
Anterior.Enabled = True
Primero.Enabled = True
Ultimo.Enabled = True
Siguiente.Enabled = True
End If
End If
'habilitamos botones de edicion
Modificar.Enabled = True
Eliminar.Enabled = True
Nuevo.Enabled = True
'bloqueamos los text hasta agregar uno nuevo
TextBox1.Enabled = False
TextBox2.Enabled = False
TextBox3.Enabled = False
TextBox4.Enabled = False
End If
End Sub
Private Sub btncancelar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btncancelar.Click
btncancelar.Visible = False
btnguardar.Visible = False
Nuevo.Enabled = True
If banmodificar = 1 Then 'si estaba modificando pero cancelo
banmodificar = 0
verregistro(registronow)
Else
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
End If
If registro > 0 Then 'si minimo existe un registro
Modificar.Enabled = True
Eliminar.Enabled = True
End If
TextBox1.Enabled = False
5. TextBox2.Enabled = False
TextBox3.Enabled = False
TextBox4.Enabled = False
End Sub
Private Sub Primero_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Primero.Click
verregistro(0)
'si le dio primero, significa que a fuerzas minimo hay 2 registros
Primero.Enabled = False
Anterior.Enabled = False
Siguiente.Enabled = True
Ultimo.Enabled = True
End Sub
Private Sub Anterior_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Anterior.Click
verregistro(registronow - 1) 'despues de mandar llamar este procedimiento,
el valor de registronow cambia
If registronow = 0 Then 'si ya llego al principio
Primero.Enabled = False
Anterior.Enabled = False
Else
Primero.Enabled = True
Anterior.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"
Siguiente.Enabled = True
Ultimo.Enabled = True
End Sub
Private Sub Siguiente_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Siguiente.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
Ultimo.Enabled = False
Siguiente.Enabled = False
Else
Ultimo.Enabled = True
Siguiente.Enabled = True
End If
'si presionno siguiente signifiica que mminimo hay 2 regsitros, entonces
habilitamos sin preguntar, "anterior" y "primero"
Primero.Enabled = True
Anterior.Enabled = True
End Sub
Private Sub Ultimo_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Ultimo.Click
verregistro(registro - 1)
'si presiono el ultimo signifiica que mminimo hay 2 registros asi que
habilitamos "anterior" y "primero" sin preguntar
Anterior.Enabled = True
Primero.Enabled = True
6. Ultimo.Enabled = False
Siguiente.Enabled = False
End Sub
Private Sub Modificar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Modificar.Click
btnguardar.Visible = True
btncancelar.Visible = True
banmodificar = 1 'habilitamos bandera que nos dice que esta modificando un
registro
TextBox1.Enabled = True
TextBox2.Enabled = True
TextBox3.Enabled = True
TextBox4.Enabled = True
TextBox1.Focus()
'deshabilitamos menus
Modificar.Enabled = False
Eliminar.Enabled = False
Nuevo.Enabled = False
Primero.Enabled = False
Siguiente.Enabled = False
Anterior.Enabled = False
Ultimo.Enabled = False
TextBox1.Focus()
End Sub
Private Sub Eliminar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Eliminar.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
Eliminar.Enabled = False
Modificar.Enabled = False
Primero.Enabled = False
Siguiente.Enabled = False
Anterior.Enabled = False
Ultimo.Enabled = False
'limpiamos cuadros de text
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.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
7. 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
Anterior.Enabled = True
Primero.Enabled = True
ElseIf registronow = 0 Then 'si esta en la primer posicion
Ultimo.Enabled = True
Siguiente.Enabled = True
Else 'si cae aki es porke es un registro de en medio
Anterior.Enabled = True
Primero.Enabled = True
Ultimo.Enabled = True
Siguiente.Enabled = True
End If
End If
End If
End Sub
Private Sub CrearToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles CrearToolStripMenuItem.Click
Dim dlgopen As New SaveFileDialog
dlgopen.Filter = "Word Documents|*.doc|Excel Worksheets|*.xls|PowerPoint
Presentations|*.ppt" & "|Office Files|*.doc;*.xls;*.ppt" & "|All Files|*.*"
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
Nuevo.Enabled = True
sblabel.Text = "Sin registros"
GuardarToolStripMenuItem.Enabled = True
'ponemos nombre de archivo
Label1.Text = "Has creado el archivo " +
Path.GetFileName(dlgopen.FileName)
TextBox1.Focus()
AbrirToolStripMenuItem.Enabled = False
End If
8. End Sub
Private Sub EmpezarNuevamenteToolStripMenuItem_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
EmpezarNuevamenteToolStripMenuItem.Click
//mensaje que se manda para saber si ya guardo los datos If
MessageBox.Show("Se reiniciara nuevamente el programa y se podran perder los datos
si no se guardo. Aun quiere continuar", "Cuidado", MessageBoxButtons.YesNo,
MessageBoxIcon.Warning) = Windows.Forms.DialogResult.Yes Then
Application.Restart()//reiniciamos el programa
End If
End Sub
Private Sub Problemario_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
//se le pone el limite de caracteres que puede aceptar el textboxt
TextBox1.MaxLength = 10
TextBox3.MaxLength = 10
TextBox4.MaxLength = 10
End Sub
End Class