Está en la página 1de 17

Programa en Visual Basic.

(Archivos Secuenciales)
NOMBRE DE LA ALUMNA: Guadalupe del Socorro Torres Uribe. CARRERA: Ingeniera en informtica

NUMERO DE CONTROL: 10231046

Autoneitor:
Ser un programa en el cual, podamos insertar o colocar informacin acerca de los carros que existen dentro de la empresa. Primero que nada para lograr ejecutar este programa se tienen dos maneras de ejecutarlo: 1.- Abriendo el Visual Studio 2010. O bien 2.- Abriendo la carpeta del programa la cual lleva como nombre Bin y posteriormente la carpeta con el nombre Debug, para despus ejecutar el icono con forma de ventana como el que se muestra a continuacin:

DOCUMENTACIN PANTALLA PRINCIPAL:

Dentro de la ventana del programa aparecen las opciones o acciones a realizar con el programa: Una Barra de Men: En la cual se muestra las fichas de Archivo y Registro. Cada una de ellas tienecomandos segn su categora.. Un ndice de Registros: En el quemuestra el ndice del registroactual y un nmerototalde registros en la lista. Si no existen registros, aparecer un mensaje como este: Sin registros. Una lista de Navegacin: Muestra la coleccin de registros. Se puede seleccionar conelcursorelregistroquesedeseavisualizar.Unavez seleccionadalalista tambin se puede navegar entre ellos con las teclas de direccin Arriba y Abajo. El registro seleccionado mostrara sus valores en los campos.

Campos para el registro: Enestaparte se colocan losvaloresque necesitamosparapoderrealizarelregistro. Son cuatro diferentes campos identificacin, modelo, precio y color.

Identificacin: Elvalor que se escribaidentificara al registrodentrodelacoleccinderegistros yenlalistadenavegacin. Acepta varios caracteres. Modelo: Un valor adicional para detalles del modelo del auto. Acepta varios caracteres. Precio: Suvalordefinir elprecioquetendrelautooelcostodelservicioquese le dio. Acepta punto decimal y deben ser solo valores numricos los que se inserten. Color: Valor adicional para detalles del color del auto. Acepta varios caracteres.

Existendosfichasenelmen. Ficha Archivo: Lacual tienedentro loscomandoscomunesdemanejodearchivo.Hagaclicenlafichaarchivoparadesplegar el submen. Dentro de elmensedesplieganlossiguienteselementos:

Guardar como: Guardaelestadodelarchivoactualenotraubicaciny/oconotronombre.Siexisteunarchivoconelmismonombreen laubicacinseleccionada,se le preguntara si se desea sobrescribir. Si no existe un archivo con el mismo nombreenlaubicacinseleccionada,secrearaunarchivonuevoyelarchivoviejonosufrircambioalguno. Cerrar: Cierra el archivo actual. Los cambios no guardados anteriormente NO seguardaranynohaymanerade recuperarlosdatosperdidos.Lalistayloscamposseborraranautomticamente. Salir: Se finalizara la aplicacin. Los cambios no guardados anteriormente NO seguardaranynohaymanerade recuperarlosdatosperdidos.

Nuevo: Creaunnuevoarchivo.Unaventanaemergenteaparecerparaqueseseleccioneunaubicacinynombreparaguardar elnuevodocumento. Abrir: Abreunarchivoexistente.Unaventanaemergenteaparecerparaquese seleccione el archivo. Guardar: Guarda los cambios en el archivo actual. Se sobrescriben los datos delarchivoactual,quevienesiendoel ultimoseusoenloscomandosdelaficha archivo:Nuevo,AbriroGuardarcomo.

Ficha Registro: Despliega los comandos necesarios para manipular los registrosquecontendrelarchivo.Alhacerclicenel, semuestranlossiguientescomandos: Nuevo Registro: Creaunnuevoregistro.Sehabilitaranloscamposderegistroparaquesedefinanlosvaloresquedebetenerelnuevo registro.Paraguardarelregistro,useelcomandoGuardardentrodelafichaRegistro.Paracancelarloscambios y descartar el nuevo registro, use el comando Cancelar de la fichaRegistro. Guardar: Guarda los cambios que se hicieron en el registro que se est creando o actualizandoactualmente.Esta opcinNOguardaelarchivo,nicamenteelregistroactualdentrodelalista.

Actualizar: Habilitaloscamposdelregistroqueseestvisualizandoactualmentepara poder modificarlos. Para guardar los cambios en el registro, use el comando Guardar dentro de la ficha Registro. Para cancelar los cambios, use el comandoCancelar de la ficha Registro.

Eliminar: Eliminaelregistroqueseestvisualizandoactualmente.Uncuadrodedialogo emerger para que se confirme si se debe realizar el procedimiento. Cancelar cambios: Descarta los cambios hechos en los campos y no los aplica al registro actual. Si el registro se estaba creando, simplemente se descartara. Nos referiremosaelcomoCancelarenelmanual.

Paracrearunnuevoarchivo,seleccionedelafichaArchivo,elcomandonuevoyelijaelnombreyubicacindelnuevo archivo. ParaaadirunnuevoregistrouseelcomandoRegistro>Nuevo(Delaficha Registro,useelcomandoNuevo).

Se editan los campos, procurando llenarlos de una manera correcta.

Cuando finalice de editar los campos. Seleccione el comando Registro>Guardar. Si desea descartar los cambios, use Registro>Cancelar.El registro se agregara a la Lista de Navegacin. Puede agregar varios registrosde la misma manera. Para modificar se selecciona de la Lista se da clic en el registro que desea modificar y despus se usa Registro>Actualizar. Para de esta manera poder cambiar la informacin. Los campos son habilitados para su edicin. Si se desea guardar los cambios se usa Registro>Guardar. Si se desea descartarlos use Registro>Cancelar.

Para abrirunarchivoexistente,useArchivo>Abrir.Paraguardarloscambios,useArchivo>Guardar.Paraguardarlos cambiosenunnuevoarchivo,useArchivo>Guardar Como.Paracerrarelarchivo,useArchivo>Cerrar. Para cerrar la aplicacin puede usar Archivo>Salir.

CDIGO
Imports System.IO Imports Microsoft.Win32 Public Class MainWindow #Region "Campos" '''Se usara una lista del tipo List(of T) para almacenar los objetos. '''Se usara una control del tipo ListView para mostrar una representacin de los objetos en pantalla Dim autos As List(Of Auto) 'En esta lista almacenaremos los autos que leeremos/escribiremos. Const longReg As Integer = 100 'Esta constante define el tamao de cada registro en el archivo. Solo se pueden leer archivos creados con el mismo tamao de registro Dim archivo, nombre As String 'Archivo representa el nombre completo del archivo (Ej: C:\users\invitado\registrosAutos.autos). nombre representa solo su nombre Dim modificado As Boolean 'Bandera que indica si el registro actual ha sido modificado #End Region Sub New() ' Llamada necesaria para el diseador. InitializeComponent() 'Con estos metodos inicializamos la ventana para que no se puede modificar nada hasta crear/abrir un archivo modificado = False BloquearControles() BloquearRegistros() BloquearArchivo() 'Solo permitimos una seleccion a la vez lv_autos.SelectionMode = SelectionMode.Single End Sub Private Sub ArchivoNuevo(sender As System.Object, e As System.EventArgs) Handles menu_archivo_nuevo.Click 'Creamos un dialogo de apertura de archivo Dim newFileDlg As New SaveFileDialog If newFileDlg.ShowDialog() = True Then 'Obtenemos el nombre de archivo a crear archivo = newFileDlg.FileName 'Creamos el archivo File.Create(archivo) 'Mostramos el nombre de archivo en el titulo nombre = Path.GetFileName(archivo) Title = nombre 'Inicializamos autos = New List(Of Auto) lv_autos.Items.Clear() modificado = False Limpiar() BloquearRegistros() BloquearControles()

DesbloquearArchivo() ActualizarIndice() menu_registro_nuevo.IsEnabled = True End If End Sub Private Sub ArchivoAbrir(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menu_archivo_abrir.Click Dim opFileDlg As New OpenFileDialog If opFileDlg.ShowDialog() = True And File.Exists(opFileDlg.FileName) Then 'Obtenemos el nombre de archivo archivo = opFileDlg.FileName 'Mostramos el nombre de archivo en el titulo nombre = Path.GetFileName(archivo) Title = nombre 'Inicializamos la lista autos = New List(Of Auto) 'creamos flujo Dim fsAbrir As New FileStream(archivo, FileMode.Open, FileAccess.Read) 'creamos el lector Dim lector As New BinaryReader(fsAbrir) 'checamos que no este vacio If lector.PeekChar <> -1 Then 'Si existe un primer caracter quiere decir que hay un primer registro 'El numero de registros se saca dividiendo los caracteres del archivo entre los caracteres por registro Dim registros As Integer = CType(Math.Ceiling(fsAbrir.Length / longReg), Integer) 'Agregamos cada registro a la lista de autos For i As Integer = 0 To registros - 1 lector.BaseStream.Seek(longReg * i, SeekOrigin.Begin) 'leemos registro por registro, usando longReg para empezar desde el que se determine por a autos.Add(New Auto( lector.ReadString, lector.ReadString, lector.ReadString, lector.ReadSingle.ToString)) 'Agregamos un nuevo auto por cada registro Next 'Mostramos el primer registro verRegistro(0) Else 'Si no hay ningun registro 'Solo permitimos crear un nuevo registro Limpiar() BloquearControles() BloquearRegistros() menu_registro_nuevo.IsEnabled = True End If 'Cerramos el lector y el flujo de archivo lector.Close() fsAbrir.Close() 'Reiniciamos el listView

lv_autos.Items.Clear() For Each Auto As Auto In autos lv_autos.Items.Add(Auto.ID) Next lv_autos.SelectedIndex = 0 'Permitimos guardar y cerrar el archivo DesbloquearArchivo() End If 'Deshabilitamos la edicin, hasta que se selccione "nuevo" o "actualizar" BloquearControles() End Sub Private Sub ArchivoGuardar(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menu_archivo_guardar.Click 'Solo guardaremos si hay almenos 1 registro If autos.Count > 0 Then 'Creamos el flujo y el escritor Dim fsGuardar As New FileStream(archivo, FileMode.Create, FileAccess.Write) Dim escritor As New BinaryWriter(fsGuardar) 'Por cada auto en la lista autos, agregamos un registro al archivo For i As Integer = 0 To autos.Count - 1 escritor.BaseStream.Seek(longReg * i, SeekOrigin.Begin) 'bytes de largo por cada registro segun longReg escritor.Write(CType(autos.Item(i).ID, String)) escritor.Write(CType(autos.Item(i).Modelo, String)) escritor.Write(CType(autos.Item(i).Color.ToString, String)) escritor.Write(CType(autos.Item(i).Precio, Single)) Next 'Cerramos el escritor y el flujo escritor.Close() fsGuardar.Close() End If 'Deshabilitamos Controles BloquearControles() verRegistro(lv_autos.SelectedIndex) End Sub Private Sub ArchivoGuardarComo(sender As System.Object, e As System.EventArgs) Handles menu_archivo_guardarComo.Click ''Es lo mismo que el metodo anterio de ArchivoGuardar,pero elegimos donde con un SaveFileDialog If autos.Count > 0 Then 'Creamos el SaveFileDialog Dim svFileDlg As New SaveFileDialog If svFileDlg.ShowDialog() = True Then 'Obtenemos el nombre de archivo archivo = svFileDlg.FileName 'Mostramos el nombre de archivo en el titulo nombre = Path.GetFileName(archivo) Title = nombre 'Todo lo demas es igual

Dim fsGuardar As New FileStream(archivo, FileMode.CreateNew, FileAccess.Write) Dim escritor As New BinaryWriter(fsGuardar) For i As Integer = 0 To autos.Count - 1 escritor.BaseStream.Seek(longReg * i, SeekOrigin.Begin) escritor.Write(CType(autos.Item(i).ID, String)) escritor.Write(CType(autos.Item(i).Modelo, String)) escritor.Write(CType(autos.Item(i).Color.ToString, String)) escritor.Write(CType(autos.Item(i).Precio, Single)) Next escritor.Close() fsGuardar.Close() modificado = False End If End If BloquearControles() verRegistro(lv_autos.SelectedIndex) End Sub Private Sub ArchivoCerrar(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles menu_archivo_cerrar.Click ''Simplemente regresamos todos los valores a su estado original autos = New List(Of Auto) lv_autos.Items.Clear() BloquearRegistros() BloquearControles() BloquearArchivo() nombre = "" archivo = "" Title = "Autoneitor" End Sub Private Sub ArchivoSalir(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menu_archivo_salir.Click ''Cierra la ventana Close() End Sub Private Sub RegistroNuevo(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menu_registro_nuevo.Click 'Habilitamos controles necesarios Limpiar() DesbloquearControles() End Sub Private Sub RegistroGuardar(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menu_registro_guardar.Click 'Hacemos unas validaciones sencillas de los textBox Try Dim testPrecio As Single = CType(tbx_precio.Text, Single) ''Comprobamos que se pueda guardar como Single Catch ex As Exception MessageBox.Show("Llena correctamente todoos los campos", "Cuidado", MessageBoxButton.OK, MessageBoxImage.Warning) Return End Try

''Comprobamos que no esten vacios If String.IsNullOrWhiteSpace(tbx_id.Text) Or String.IsNullOrWhiteSpace(tbx_modelo.Text) Or String.IsNullOrWhiteSpace(tbx_color.Text) Or String.IsNullOrWhiteSpace(tbx_precio.Text) Then MessageBox.Show("Llena correctamente todoos los campos", "Cuidado", MessageBoxButton.OK, MessageBoxImage.Warning) Else If modificado Then 'Si se modifico guardamos en la posicion actual modificado = False 'guardamos en vector pero en la posicion actual autos.Item(lv_autos.SelectedIndex).ID = tbx_id.Text autos.Item(lv_autos.SelectedIndex).Modelo = tbx_modelo.Text autos.Item(lv_autos.SelectedIndex).Color = tbx_color.Text autos.Item(lv_autos.SelectedIndex).Precio = CType(tbx_precio.Text, Single) lv_autos.Items(lv_autos.SelectedIndex) = tbx_id.Text Else 'Si no se modifico 'guardamos en un nuevo objeto autos.Add(New Auto( tbx_id.Text, tbx_modelo.Text, tbx_color.Text, CType(tbx_precio.Text, Single))) lv_autos.Items.Add(autos.Last.ID) lv_autos.SelectedIndex = lv_autos.Items.Count - 1 End If BloquearControles() ActualizarIndice() menu_registro_actualizar.IsEnabled = True menu_registro_eliminar.IsEnabled = True menu_registro_nuevo.IsEnabled = True End If End Sub Private Sub RegistroCancelar(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menu_registro_cancelar.Click 'Habilitamos los controles necesarios menu_registro_cancelar.IsEnabled = False menu_registro_guardar.IsEnabled = False menu_registro_nuevo.IsEnabled = True modificado = False If autos.Count > 0 Then 'si minimo existe un registro menu_registro_actualizar.IsEnabled = True menu_registro_eliminar.IsEnabled = True verRegistro(lv_autos.SelectedIndex) End If BloquearControles() End Sub Private Sub RegistroActualizar(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menu_registro_actualizar.Click modificado = True 'habilitamos bandera que nos dice que esta modificando un registro

'habilitamos menus DesbloquearControles() End Sub Private Sub RegistroEliminar(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menu_registro_eliminar.Click 'Checamos si hay algo que eliminar If autos.Count > 0 Then 'Comprobamos que el usauario quiera eliminar If MessageBox.Show("Esta seguro que desea eliminar este registro?", "Cuidado", MessageBoxButton.YesNo, MessageBoxImage.Warning) = MessageBoxResult.Yes Then ''Quitamos el registro de ambas listas (la de objetos y el control de usuario) Dim aux As Integer = lv_autos.SelectedIndex autos.RemoveAt(aux) lv_autos.Items.RemoveAt(aux) lv_autos.SelectedIndex = aux - 1 End If End If BloquearControles() End Sub Private Sub SelectionChanged(sender As System.Object, e As System.Windows.Controls.SelectionChangedEventArgs) Handles lv_autos.SelectionChanged 'Checamos que existan registros en la lista If autos.Count > 0 Then 'Si es menor de 0, la colocamos en el registro 0 If lv_autos.SelectedIndex < 0 Then lv_autos.SelectedIndex = 0 Return End If If (tbx_id.IsEnabled = True) Then ''Si se estaba editando.... 'Cambiar el registro se concidera como cancelar si se estaba editando RegistroCancelar(sender, e) End If verRegistro(lv_autos.SelectedIndex) Else menu_registro_eliminar.IsEnabled = False menu_registro_actualizar.IsEnabled = False Limpiar() ActualizarIndice() End If End Sub Sub verRegistro(ByVal index) 'esta funcion nos desplaza entre los registros en memoria ''Si el indice es 0 o mayor If autos.Count > 0 Then If index >= 0 And index < autos.Count Then 'Llenamos los textbox con el el objeto en el indice en la lista de objetos que coincide con el indice que se selecciono en el listview (el control de usuario) tbx_id.Text = autos.Item(index).ID

tbx_modelo.Text = autos.Item(index).Modelo.ToString tbx_color.Text = autos.Item(index).Color tbx_precio.Text = autos.Item(index).Precio tbx_id.Focus() Else tbx_id.Text = autos.Item(0).ID tbx_modelo.Text = autos.Item(0).Modelo.ToString tbx_color.Text = autos.Item(0).Color tbx_precio.Text = autos.Item(0).Precio tbx_id.Focus() End If Else ''Si es menor de 0 significa que no se selecciono nada Limpiar() End If ActualizarIndice() End Sub Private Sub ActualizarIndice() ''Solo se cambia el label que muestra que indice vemos If (autos.Count = 0) Then lbl_indice.Content = "Sin registros" Else lbl_indice.Content = "Registro" & lv_autos.SelectedIndex + 1 & "/" & autos.Count End If End Sub #Region "Metodos Auxiliares" ''Estos metodos auxiliares solo bloquean o desbloquean los menus y los textbox Sub BloquearArchivo() menu_archivo_guardar.IsEnabled = False menu_archivo_guardarComo.IsEnabled = False menu_archivo_cerrar.IsEnabled = False End Sub Sub BloquearRegistros() menu_registro_actualizar.IsEnabled = False menu_registro_eliminar.IsEnabled = False menu_registro_nuevo.IsEnabled = False menu_registro_cancelar.IsEnabled = False menu_registro_guardar.IsEnabled = False End Sub Sub BloquearControles() menu_registro.Focus() tbx_id.IsEnabled = False tbx_modelo.IsEnabled = False tbx_color.IsEnabled = False tbx_precio.IsEnabled = False menu_registro_guardar.IsEnabled = False menu_registro_cancelar.IsEnabled = False End Sub Sub DesbloquearArchivo() menu_archivo_guardar.IsEnabled = True menu_archivo_guardarComo.IsEnabled = True

menu_archivo_cerrar.IsEnabled = True menu_registro_actualizar.IsEnabled = True menu_registro_eliminar.IsEnabled = True menu_registro_nuevo.IsEnabled = True End Sub Sub DesbloquearControles() tbx_id.IsEnabled = True tbx_modelo.IsEnabled = True tbx_color.IsEnabled = True tbx_precio.IsEnabled = True menu_registro_guardar.IsEnabled = True menu_registro_cancelar.IsEnabled = True menu_registro_actualizar.IsEnabled = False menu_registro_eliminar.IsEnabled = False menu_registro_nuevo.IsEnabled = False tbx_id.Focus() End Sub Sub Limpiar() tbx_id.Text = "" tbx_modelo.Text = "" tbx_color.Text = "" tbx_precio.Text = "" tbx_id.Focus() End Sub #End Region Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded End Sub End Class

También podría gustarte