Escrito por Mario R. Rancel
Resumen: Entrega nº33-2 del curso Aprender a programar en Visual Basic desde cero.
Codificación aprenderaprogramar.com: CU00334A-2
EJERCICIOS RESUELTOS VISUAL BASIC
El objetivo de estos ejercicios es aplicar conocimientos sobre "Herramientas básicas para la programación" a un lenguaje como es Visual Basic. Para su realización debemos tener conocimientos básicos sobre algoritmia, uso de bucles o estructuras iterativas y apertura y cierre de archivos.

EJERCICIO RESUELTO EJEMPLO DE USO DE ARRAYS ESTÁTICOS, DO WHILE … LOOP, IF … THEN, USO DE FICHEROS...
Desarrollar un programa que permita resolver el siguiente problema. Una librería dispone de un archivo donde se guarda información relativa a un lote de libros estructurada de la siguiente manera:
Dato(1) = [Número de ISBN, 10 dígitos]
|
Dato(2) = [Precio de venta al público, en euros]
|
Dato(3) = [Señalero, -33 Libro de menos de un año de antigüedad
-66 Libro de uno a tres años de antigüedad
-99 Libro de más de tres años de antigüedad]
|
Dato(4) = [Número de ISBN]
|
.
.
.
|
Dato(n – 1) = [Señalero -33, -66, -99]
|
Dato(n) = [Señalero -500, Fin del lote]
|
Se desea desarrollar un programa que permita:
a) Consultar el precio de un libro dado su ISBN.
b) Conocer el precio del lote de libros en conjunto.
Teniendo en cuenta lo siguiente: si el libro tiene menos de un año de antigüedad su precio coincide con el registrado. Si tiene entre uno y tres años deberá aplicarse un descuento del 15%. Si tiene más de tres años deberá aplicarse una rebaja del 25%.
Nota: considerar que el número total de datos es igual o inferior a 50, y que se encuentran en el fichero libros.dat. Crear un botón para poder introducir el isbn de un libro y otro botón para poder calcular el precio del lote. En un archivo al que llamaremos libros.dat pondremos una simulación de datos como la siguiente:

SOLUCIÓN
El código sería:
Código (versionesVB menos recientes) |
Código (versiones VB más recientes) |
Rem Curso VB aprenderaprogramar.com
Option Explicit
Dim i%, Canal As Integer
Dim Dato(50) As Single
Dim ISBN!, Precio!, Valorlote As Single
Dim Encontrado As Boolean
Private Sub Form_Load()
Show
Form1.Caption = "Libros"
CommandLibro.Caption = "Precio de un libro"
CommandLote.Caption = "Precio del lote"
LabelResultado.Alignment = 2
LabelResultado.FontBold = True
End Sub
Private Sub CommandLibro_Click()
Encontrado = False
ISBN = InputBox("¿Cuál es el ISBN del libro?", "ISBN")
Canal = FreeFile
i = 1
Open "C:\libros.dat" For Input As Canal
Input #Canal, Dato(i)
Do While Dato(i) <> -500
If Dato(i) = ISBN Then
Input #Canal, Dato(i + 1)
Input #Canal, Dato(i + 2)
Precio = Dato(i + 1)
If Dato(i + 2) = -66 Then
Precio = 0.85 * Precio
End If
If Dato(i + 2) = -99 Then
Precio = 0.75 * Precio
End If
LabelResultado = "El precio del libro con ISBN " & ISBN & " es de " & Precio
Encontrado = True
End If
i = i + 3
Input #Canal, Dato(i)
Loop
Close
If Encontrado = False Then
LabelResultado = "No se ha encontrado el ISBN deseado"
End If
End Sub
Private Sub CommandLote_Click()
Valorlote = 0
Canal = FreeFile
i = 1
Open "C:\libros.dat" For Input As Canal
Input #Canal, Dato(i)
Do While Dato(i) <> -500
Input #Canal, Dato(i + 1)
Input #Canal, Dato(i + 2)
Precio = Dato(i + 1)
If Dato(i + 2) = -66 Then
Precio = 0.85 * Precio
End If
If Dato(i + 2) = -99 Then
Precio = 0.75 * Precio
End If
Valorlote = Valorlote + Precio
i = i + 3
Input #Canal, Dato(i)
Loop
Close
LabelResultado = "El precio del lote es " & Valorlote
End Sub
|
REM Curso Visual Basic aprenderaprogramar.com
Option Explicit On
Public Class Form1
Dim Dato(50) As Single
Dim ISBN, Precio, Valorlote As Single
Dim Encontrado As Boolean
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Text = "Libros"
CommandLibro.Text = "Precio de un libro"
CommandLote.Text = "Precio del lote"
LabelResultado.TextAlign = ContentAlignment.MiddleCenter
LabelResultado.Font = New Font("Arial", 10, FontStyle.Bold)
LabelResultado.Text = ""
End Sub
Private Sub CommandLibro_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CommandLibro.Click
Dim i As Integer
Encontrado = False
ISBN = InputBox("¿Cuál es el ISBN del libro?", "ISBN")
Dim myFileToRead As New System.IO.StreamReader("C:\Users\Toshiba\Desktop\libros.dat", False)
i = 1
Dato(i) = myFileToRead.ReadLine()
Do While Dato(i) <> -500
If Dato(i) = ISBN Then
Dato(i + 1) = myFileToRead.ReadLine()
Dato(i + 2) = myFileToRead.ReadLine()
Precio = Dato(i + 1)
If Dato(i + 2) = -66 Then
Precio = 0.85 * Precio
End If
If Dato(i + 2) = -99 Then
Precio = 0.75 * Precio
End If
LabelResultado.Text = "El precio del libro con ISBN " & ISBN & " es de " & Precio
Encontrado = True
End If
i = i + 3
Dato(i) = myFileToRead.ReadLine()
Loop
myFileToRead.Close()
If Encontrado = False Then
LabelResultado.Text = "No se ha encontrado el ISBN deseado"
End If
End Sub
Private Sub CommandLote_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CommandLote.Click
Dim i As Integer
Valorlote = 0
Dim myFileToRead As New System.IO.StreamReader("C:\Users\Toshiba\Desktop\libros.dat", False)
i = 1
Dato(i) = myFileToRead.ReadLine()
Do While Dato(i) <> -500
Dato(i + 1) = myFileToRead.ReadLine()
Dato(i + 2) = myFileToRead.ReadLine()
Precio = Dato(i + 1)
If Dato(i + 2) = -66 Then
Precio = 0.85 * Precio
End If
If Dato(i + 2) = -99 Then
Precio = 0.75 * Precio
End If
Valorlote = Valorlote + Precio
i = i + 3
Dato(i) = myFileToRead.ReadLine()
Loop
myFileToRead.Close()
LabelResultado.Text = "El precio del lote es " & Valorlote
End Sub
End Class
|
Gráficamente:


Para acceder a la información general sobre este curso y al listado completo de entregas pulsa en este link: Ver curso completo.
Para hacer un comentario o consulta utiliza los
foros aprenderaprogramar.com, abiertos a cualquier persona independientemente de su nivel de conocimiento.