-1

私は、ユーザーが曲の情報を見たり、曲の抜粋を再生したり、選択した曲を購入したりできるプログラムを作成しています。

そして、ユーザーが [購入] ボタンをクリックして、指定された曲を購入できるようにします。

チェックアウト時:

曲を購入していない場合、ユーザーはチェックアウトできませんが、プログラムを終了することはできます。

ユーザーが消費税率を入力できるように、InputBox を使用します。ユーザーが値を入力しているため、入力に対してデータ検証を実行する必要があります。

ユーザーが InputBox の [キャンセル] ボタンをクリックして、チェックアウト プロセスをキャンセルできるようにします。

入力ボックスが表示されているときは、テキスト ボックスにフォーカスがあり、正しくない税額が追加された場合は、正しくない値がクリアされ、テキスト ボックスに再びフォーカスがあるはずです。

Write/Writeline を使用して、PurchaseOrder.txt という名前の発注書テキスト ファイルを作成します。このファイルには、ファイルが作成された日付と、購入、小計、税、および合計の明細リストが含まれています。

選択した曲の「購入」ボタンをクリックし、「チェックアウト」ボタンをクリックすると、入力ボックスが表示され、数値を入力しますが、何度もループし続けます。なぜこれが起こっているのかわかりません。以下のコードの cmdCheckOut_Click サブルーチンを参照してください。私はそれが私のエラーを得ているところだと思います。

コードは次のとおりです。

   Public Structure musicInfo
    <VBFixedString(30)> Public title As String
    <VBFixedString(20)> Public artist As String
    <VBFixedString(20)> Public genre As String
    <VBFixedString(10)> Public duration As String
    Public year As Integer
    Public price As Double
    <VBFixedString(15)> Public songFileName As String
   End Structure

Public Const NoOfTunes = 5
Public songs(NoOfTunes - 1) As musicInfo


Option Explicit On
Imports System.IO
Public Class frmTunes
  Public index As Integer
  Public purchaseCount As Integer
  Public purchasePrice(10) As Decimal
  Public purchaseTitle(10) As String
  Dim decimal1 As Decimal
  Dim decimal3 As Decimal
  Dim decimal4 As Decimal
Private Sub frmTunes_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Dim i As Integer

    FileOpen(1, "music.dat", OpenMode.Random, , , Len(songs(0)))
    For i = 0 To NoOfTunes - 1
        FileGet(1, songs(i))
    Next
    FileClose(1)

    cmdPrevious.Visible = False

    DisplaySong(0)
End Sub

Sub DisplaySong(ByVal i As Int32)
    lblTitle.Text = songs(i).title
    lblArtist.Text = songs(i).artist
    lblGenre.Text = songs(i).genre
    lblDuration.Text = songs(i).duration
    lblYear.Text = Convert.ToString(songs(i).year)
    lblPrice.Text = Convert.ToString(songs(i).price)
End Sub

Private Sub cmdStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdStop.Click
    My.Computer.Audio.Stop()
End Sub

Private Sub cmdPurchase_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdPurchase.Click
    purchaseTitle(purchaseCount) = lblTitle.Text
    purchasePrice(purchaseCount) = Convert.ToDecimal(lblPrice.Text)
    purchaseCount = (purchaseCount + 1)
End Sub

Private Sub cmdPrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdPrevious.Click
    index = (index - 1)
    If (index < 4) Then
        cmdNext.Visible = True
    End If
    If (index = 0) Then
        cmdPrevious.Visible = False
    End If
    DisplaySong(index)
End Sub

Private Sub cmdNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdNext.Click
    index = (index + 1)
    If (index = NoOfTunes - 1) Then
        cmdNext.Visible = False
    End If
    If (index > 0) Then
        cmdPrevious.Visible = True
    End If
    DisplaySong(index)
End Sub

Private Sub cmdPlay_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdPlay.Click
    My.Computer.Audio.Play(songs(index).songFileName)
End Sub

Private Sub cmdCheckOut_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCheckOut.Click
    Dim str1 As String = ""
    If (purchaseCount = 0) Then
        MsgBox("You have not ordered any items!", MsgBoxStyle.Exclamation, "Order Error")
    Else
        Do Until ((IsNumeric(str1) And (Decimal.Compare(decimal3, Decimal.Zero) <= 10)) And (Decimal.Compare(decimal3, (10D)) >= 0))
            str1 = InputBox("Enter your tax rate as a %" & vbCrLf & "between and including 0 - 10:", "Tax Rate", "", -1, -1)
            If (str1 <> "") Then
                If (Not IsNumeric(str1)) Then
                    MsgBox("You must enter a numeric tax rate", MsgBoxStyle.Exclamation, "Tax Rate Error")
                Else
                    Dim decimal3 As Decimal = Convert.ToDecimal(str1)
                    If ((Decimal.Compare(decimal3, Decimal.Zero) < 0) Or (Decimal.Compare(decimal3, (10D)) > 0)) Then
                        MsgBox("You must enter a tax rate between and including 0% - 10%", MsgBoxStyle.Exclamation, "Tax Rate Error")
                    End If
                End If
            End If
        Loop
        Dim StreamWriter As StreamWriter = File.CreateText("PurchaseOrder.txt")
        StreamWriter.WriteLine("For Purchases dated: " & DateTime.Now.ToLongDateString())
        StreamWriter.WriteLine()
        Dim num2 As Integer = (purchaseCount - 1)
        Dim num1 As Integer = 0
        Do While (num1 <= num2)
            StreamWriter.Write(Strings.FormatCurrency(CType(Me.purchasePrice(num1), Decimal) & "     "))
            StreamWriter.WriteLine(purchaseTitle(num1))
            Dim decimal1 As Decimal = Decimal.Add(Nothing, purchasePrice(num1))
            num1 = (num1 + 1)

        Loop
        StreamWriter.WriteLine("------")
        StreamWriter.WriteLine(Strings.FormatCurrency(CType(decimal1, Decimal)) & "  Subtotal")
        Dim decimal2 As Decimal = New Decimal(((Convert.ToDouble(decimal3) * 0.01) * Convert.ToDouble(decimal1)))
        StreamWriter.WriteLine(Strings.FormatCurrency(CType(decimal2, Decimal)) & "  Tax")
        StreamWriter.WriteLine("------")
        Dim decimal4 As Decimal = Decimal.Add(decimal1, decimal2)
        StreamWriter.WriteLine(Strings.FormatCurrency(CType(decimal4, Decimal)) & "  Total")
        MsgBox("Purchase Order has been created", MsgBoxStyle.OkOnly)
        StreamWriter.Close()
        Me.Close()
    End If
End Sub
End Class
4

1 に答える 1