Ejercicios resueltos VB y .NET. Arreglos estáticos, Do While, StreamReader, readLine, ficheros (CU00334A-2)

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.

 

Visual Basic
 

 

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:

guardar datos en archivo visual basic

 

 

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:

programa libreria visual basic

 

visual basic buttons

 

 

 

 

 

 

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.

Donar o colaborar

Este sitio se mantiene abierto gracias al apoyo de muchas personas. Si crees que merece la pena apoyar económicamente este sitio web puedes realizar una donación o colaborar. Contacta con nosotros.

¿Puedo yo aprender?

Seas o no del área informática, si quieres aprender a programar te ofrecemos una solución guiada y personalizada: realizar un curso tutorizado on-line. Con este tipo de curso, podrás aprender a programar de forma ágil y amena.

Acceder a detalles y precios de los cursos tutorizados on-line

Política sobre cookies

Utilizamos cookies propias y de terceros para ofrecerte una mejor experiencia y servicio, de acuerdo a tus hábitos de navegación.

Si continúas navegando, consideramos que aceptas su uso. Puedes obtener más información en nuestra Política de Cookies.

En Facebook!

Ahora puedes seguirnos en Facebook. Noticias, novedades y mucho más ¡Te esperamos!

RANKING APR2+

Ranking de lenguajes y entornos de programación aprenderaprogramar.com
 

JULIO - AGOSTO 2017

1. Java / J2EE
2. Entornos Oracle
3. Entornos SQL Server
4. JavaScript, jQuery
5. .NET, C#
6. HTML, CSS
7. Android, iOS
8. Php, MySql


Acceder a detalles sobre el ranking de programación aprenderaprogramar.com

FOROS APR2+

Pregunta, responde, consulta, lee, intercambia...

Participa!!! Entra en los foros aprenderaprogramar.com.

             Copyright 2006-2017 aprenderaprogramar.com                La web abierta a cualquier persona interesada en la programación