10

Agenda Mod

Embed Size (px)

DESCRIPTION

jjjj

Citation preview

PENTIUM

Imports System

Imports System.IO

Module Module1

'ESCRIBIR UN PROGRAMA QUE GESTIONE UNA AGENDA DE DIRECCIONES. LOS DATOS DE LA AGENDA SE ALMACENAN EN MEMORIA EN' UN ARREGLO DE ESTRUCTURA, 'CADA UNA DE LAS CUALES TIENE LOS SIGUIENTES CAMPOS:' *NOMBRE' *DIRECCIN' *TELFONO FIJO' *TELFONO MVIL' *DIRECCIN DE CORREO ELECTRNICO'EL PROGRAMA DEBE PERMITIR AADIR UNA ENTRADA A LA AGENDA,BORRAR UNA ENTRADA, BUSCAR POR NOMBRE Y ELIMINAR UNA ENTRADA'DETERMINADA POR EL NOMBRE. 'BERNARDINO PEREZ LOPEZ 'JORGE LUIS ANDALCO CID Dim lista As CListaAgenda Public Class CAgenda Private nombre As String Private direccion As String Private telefono As String Private movil As String Private correo As String Public Sub New()

End Sub Public Sub New(ByVal nom As String, ByVal dir As String, ByVal tel As String, ByVal mov As String, ByVal cor As String)

nombre = nom

direccion = dir

telefono = tel

movil = mov

correo = cor

End Sub Public Sub asignarNombre(ByVal nom As String)

nombre = nom

End Sub Public Function obtenerNombre() As String Return nombre

End Function Public Sub asignarDireccion(ByVal dir As String)

direccion = dir

End Sub Public Function obtenerDireccion() As String Return direccion

End Function Public Sub asignarTelefono(ByVal tel As String)

telefono = tel

End Sub Public Function obtenerTelefono() As String Return telefono

End Function Public Sub asignarMovil(ByVal mov As String)

movil = mov

End Sub Public Function obtenerMovil() As String Return movil

End Function Public Sub asignarCorreo(ByVal cor As String)

correo = cor

End Sub Public Function obtenerCorreo() As String Return correo

End Function Public Function longitud() As Integer Return nombre.Length * 2 + direccion.Length * 2 + telefono.Length * 2 + movil.Length * 2 + correo.Length * 2 + 5

End Function End Class Public Class CListaAgenda Private fs As FileStream Private bw As BinaryWriter Private br As BinaryReader Private nregs As Integer Private tamaoReg As Integer = 140

Private regsEliminados As Boolean = False Public Sub New(ByVal fichero As String)

If (Directory.Exists(fichero)) Then Throw New IOException(Path.GetFileName(fichero) & "no es un archivo")

End If fs = New FileStream(fichero, FileMode.OpenOrCreate, FileAccess.ReadWrite)

bw = New BinaryWriter(fs)

br = New BinaryReader(fs)

nregs = Math.Ceiling(fs.Length / tamaoReg)

End Sub Public Sub cerrarFichero()

bw.Close() : br.Close() : fs.Close()

End Sub Public Function numeroDeRegs() As Integer Return nregs

End Function Public Function escribirRegs(ByVal i As Integer, ByVal obj As CAgenda) As Boolean If (i >= 0 And i tamaoReg) Then Console.WriteLine("Tamao de de registro excedido")

Else bw.BaseStream.Seek(i * tamaoReg, SeekOrigin.Begin)

bw.Write(obj.obtenerNombre())

bw.Write(obj.obtenerDireccion())

bw.Write(obj.obtenerTelefono())

bw.Write(obj.obtenerMovil())

bw.Write(obj.obtenerCorreo())

Return True End If Else Console.WriteLine("nmero de registro fuera de lmites ... " & nregs)

End If Return False End Function Public Function aadirReg(ByVal obj As CAgenda) As Boolean If (escribirRegs(nregs, obj)) Then nregs += 1

Return True Else Return False End If End Function Public Function leerReg(ByVal i As Integer) As CAgenda If (i >= 0 And i < nregs) Then br.BaseStream.Seek(i * tamaoReg, SeekOrigin.Begin)

Dim nombre1, direccion1, telefono1, movil1, correo1 As String nombre1 = br.ReadString()

direccion1 = br.ReadString()

telefono1 = br.ReadString()

movil1 = br.ReadString()

correo1 = br.ReadString()

Return New CAgenda(nombre1, direccion1, telefono1, movil1, correo1)

Else Console.WriteLine("nmero de registro fuera de lmites")

Return Nothing End If End Function Public Function eliminarReg(ByVal Ide As String) As Boolean Dim obj As CAgenda Dim reg_i As Integer For reg_i = 0 To nregs - 1

obj = leerReg(reg_i)

If (obj.obtenerNombre() = Ide) Then obj.asignarNombre(-1)

escribirRegs(reg_i, obj)

regsEliminados = True Return True End If Next Return False End Function Public Function tieneRegsEliminados() As Boolean Return regsEliminados

End Function Public Function buscarReg(ByVal cad As String, ByVal posicion As Integer) As Integer Dim obj As CAgenda Dim tip1 As String If (cad = Nothing) Then Return -1

If (posicion < 0) Then posicion = 0

Dim reg_i As Integer For reg_i = posicion To nregs - 1

obj = leerReg(reg_i)

tip1 = obj.obtenerNombre()

If (tip1.IndexOf(cad) > -1) Then Return reg_i

Next Return -1

End Function End Class Public Function menu() As Integer Console.WriteLine()

Console.WriteLine("********************************************************" & vbCrLf & "******** B I E N V E N I D O S *********")

Console.WriteLine("Seleccione una de las siguientes Opciones....." & vbCrLf)

Console.WriteLine("1. Buscar")

Console.WriteLine("2. Buscar siguiente coincidencia")

Console.WriteLine("3. Modificar (haber ejecutado la opcion 1 o 2 anteriormente)")

Console.WriteLine("4. Aadir")

Console.WriteLine("5. Eliminar")

Console.WriteLine("6. Mostrar")

Console.WriteLine("7. Salir")

Console.WriteLine()

Console.Write(" Opcin==>> ")

Dim op As Integer Do op = Int16.Parse(Console.ReadLine())

Loop While (op < 1 Or op > 7)

Console.WriteLine()

Return op

End Function Public Function modificar(ByVal nreg As Integer) As Boolean Dim No, Di, Te, Mo, Co As String Dim op As Integer Dim obj As CAgenda = lista.leerReg(nreg)

If (obj Is Nothing) Then Return False Do Console.WriteLine()

Console.WriteLine("Modificar dato:")

Console.WriteLine("1. Nombre: ")

Console.WriteLine("2. Direccin: ")

Console.WriteLine("3. Telefono Fijo: ")

Console.WriteLine("4. Telefono Mvil: ")

Console.WriteLine("5. Correo: ")

Console.WriteLine("6. Salir y salvar cambios")

Console.WriteLine("7. Salir sin salvar cambios")

Console.WriteLine()

Console.Write(" Opcin ==>> ")

op = Int16.Parse(Console.ReadLine())

Select Case (op)

Case 1

Console.Write("Nombre: ") : No = Console.ReadLine() : obj.asignarNombre(No)

Case 2

Console.Write("Direccin: ") : Di = Console.ReadLine() : obj.asignarDireccion(Di)

Case 3

Console.Write("Telefono Fijo: ") : Te = Console.ReadLine() : obj.asignarTelefono(Te)

Case 4

Console.Write("Telefono Mvil: ") : Mo = Console.ReadLine() : obj.asignarMovil(Mo)

Case 5

Console.Write("Correo: ") : Co = Console.ReadLine() : obj.asignarCorreo(Co)

Case 6

lista.escribirRegs(nreg, obj)

Return True Case 7

End Select Loop While (op 5)

Return False End Function Public Sub actualizar(ByVal fActual As String)

Dim ficheroTemp As String = "lista.tmp" Dim ftemp As CListaAgenda = New CListaAgenda(ficheroTemp)

Dim nregs As Integer = lista.numeroDeRegs()

Dim obj As CAgenda Dim reg_i As Integer For reg_i = 0 To nregs - 1

obj = lista.leerReg(reg_i)

If (obj.obtenerNombre() -1) Then ftemp.aadirReg(obj)

End If Next lista.cerrarFichero()

ftemp.cerrarFichero()

File.Copy(ficheroTemp, fActual, True)

File.Delete(ficheroTemp)

End Sub Sub ImprimeRegistro(ByVal NumeroReg As Integer, ByVal Agenda As CAgenda)

If Not (Agenda.obtenerNombre().Equals("-1")) Then Console.WriteLine(NumeroReg + 1 & ". " & Agenda.obtenerNombre() & " " & Agenda.obtenerDireccion() & " " & Agenda.obtenerTelefono() & " " & Agenda.obtenerMovil() & " " & Agenda.obtenerCorreo())

End If End Sub Sub ImprimeResultadoBusqueda(ByVal posicion As Integer, ByVal cadena As String)

Dim Tipo As CAgenda = New CAgenda()

If (posicion -1) Then Tipo = lista.leerReg(posicion)

Console.WriteLine()

Console.WriteLine("Datos ENCONTRADOS ... ")

ImprimeRegistro(posicion, Tipo)

' OK : Console.WriteLine(posicion + 1 & ". " & Alum.obtenerNombre() & " " & Alum.obtenerMateria() & " " & " " & Alum.obtenerCalif()) Else Console.WriteLine(cadena & " no esta en el archivo")

End If End Sub Public Sub Main(ByVal args() As String)

Dim Fichero As String = "ListaAgenda.dat" Dim opcion As Integer Dim pos As Integer Dim nomb, dirc, telf, movi, corr, cadenabuscar As String Dim Agenda As CAgenda = New CAgenda()

lista = New CListaAgenda(Fichero)

Do opcion = menu()

Select Case (opcion)

Case 1 ' Buscar Console.Write("Nombre? ")

cadenabuscar = Console.ReadLine()

pos = lista.buscarReg(cadenabuscar, 0)

ImprimeResultadoBusqueda(pos, cadenabuscar)

Case 2 ' Buscar siguiente coincidencia pos = lista.buscarReg(cadenabuscar, pos + 1)

ImprimeResultadoBusqueda(pos, cadenabuscar)

Case 3 ' Modificar If (modificar(pos)) Then Console.WriteLine("Registro modificado !")

Else : Console.WriteLine(" Registro SIN modificar !")

End If Console.ReadLine()

Case 4 ' Aadir Console.Write("Nombre: ") : nomb = Console.ReadLine()

Console.Write("Direccin: ") : dirc = Console.ReadLine()

Console.Write("Telefono Fijo: ") : telf = Console.ReadLine()

Console.Write("Telefono Mvil: ") : movi = Console.ReadLine()

Console.Write("Correo: ") : corr = Console.ReadLine()

If (lista.aadirReg(New CAgenda(nomb, dirc, telf, movi, corr))) Then Console.WriteLine("Registro AADIDO satisfactoriamente .... " & lista.numeroDeRegs())

Else Console.WriteLine("Registro NO AADIDO .... " & lista.numeroDeRegs())

End If Case 5 ' Eliminar Console.WriteLine()

Console.Write("Nombre del Contacto: ") : nomb = (Console.ReadLine())

If (lista.eliminarReg(nomb)) Then Console.WriteLine("Registro eliminado !")

Else : Console.WriteLine("Registro SIN eliminar")

End If Case 6 ' Mostrar DATOS del archivo Dim reg_i As Integer For reg_i = 0 To lista.numeroDeRegs() - 1

Agenda = lista.leerReg(reg_i)

ImprimeRegistro(reg_i, Agenda)

'Por PROBAR : If (Alumno.obtenerCalif() -1) Then ImprimeRegistro(reg_i, Alumno) 'OK : Console.WriteLine(reg_i + 1 & ". " & Alumno.obtenerNombre() & " " & Alumno.obtenerMateria() & " " & Alumno.obtenerCalif()) Next Console.ReadLine()

Case 7 ' Salir If (lista.tieneRegsEliminados()) Then actualizar(Fichero)

lista = Nothing End If End Select Loop While (opcion 7)

System.Console.ReadLine()

End SubEnd Module