繁体   English   中英

使用Visual Basic中的模块执行计算

[英]Performing Calculations with Modules in Visual Basic

我正在为我的Visual Basic类编写一个程序,该程序应该能够计算从一个列表框中选择并添加到另一个列表框中的项目的最终总价。 其中2个项目的营业税必须加到最终价格中。 该程序还具有一个模块,该模块应该用于记录所有税款,并用于执行所有与税款有关的功能。

这是最新的代码。

Option Strict On
Public Class Form1

Private Sub btnAdd_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnAdd.Click
    If (txtQuantity.Text = "") Then
        MessageBox.Show("Please enter a quantity for the item you selected")
    ElseIf Not Integer.TryParse(txtQuantity.Text, CInt(txtQuantity.Text)) Then
        MessageBox.Show("The quantity entered is not numeric. Please add a numeric quantity.")
        Exit Sub
    Else
        lstPurchased.Items.Add(txtQuantity.Text & " " & lstSale.Text)
    End If
End Sub

Private Sub btnCalculate_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnCalculate.Click
    Dim int As Integer
    Dim total As Double = 0

    For i As Integer = 0 To lstPurchased.Items.Count - 1
        Dim lst() As String = lstPurchased.Items(i).ToString.Split({CChar(" ")}, 2)
        Integer.TryParse(lst(0), int)
        total += TaxesModule.SalesTax(int, lst(1))
    Next
    MessageBox.Show(CStr(FormatCurrency(total)))
End Sub

Private Sub btnClear_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnClear.Click
    lstPurchased.Items.Clear()
    txtQuantity.Clear()
End Sub

End Class

以及该模块的最新代码

Option Strict On

Module TaxesModule
Private Const DONUT_TAX As Decimal = CDec(0.083)
Private Const RAISIN_TAX As Decimal = CDec(0.02)
Private Const SS_TAX As Decimal = CDec(0.062) ' <-- you are not using this

Public Function SalesTax(ByVal Quantity As Integer, ByVal item As String) As Double
    Dim TotalWithSalesTax As Double
    If item = "Wheat Bread" Then
        TotalWithSalesTax += (Quantity * 1.15)
    ElseIf item = "White Bread" Then
        TotalWithSalesTax += (Quantity * 1.05)
    ElseIf item = "Donuts" Then
        TotalWithSalesTax += (Quantity * (0.5 * DONUT_TAX) + (Quantity * 0.5))
    ElseIf item = "Raisins" Then
        TotalWithSalesTax += (Quantity * (0.25 * RAISIN_TAX) + (Quantity * 0.25))
    End If
    Return TotalWithSalesTax
End Function

End Module

正如现在编写代码一样,我唯一的问题是“葡萄干”的TotalWithSalesTax无法正确计算。 例如,如果我从列表框中选择“葡萄干”,并将数量为1的葡萄干添加到另一个列表框中,则消息框中显示的总计为$ 0.00。

我开始认为问题出在以下代码部分:

For i As Integer = 0 To lstPurchased.Items.Count - 1
        Dim lst() As String = lstPurchased.Items(i).ToString.Split({CChar(" ")}, 2)

因为我曾尝试进行更改,例如

For i As Integer = 1 ...

这导致Donuts和Raisins在消息框中总共给了我$ 0.00。 因此,我想知道计数的设置方式是否不允许它遍历整个列表,但是我不知道该如何解决?

我仍然对Visual Basic真的很陌生,实际上对程序设计还真的很陌生,这是我第一次使用模块。 有人可以帮助我弄清楚我在做什么错,以便我可以进入程序的其他部分吗?

我已经修改了您的代码,希望这就是您想要的。 在代码中添加了注释。 注意我删除了所有公共变量。

Public Class Form1

    Private Sub btnAdd_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnAdd.Click
        If (txtQuantity.Text = "") Then
            MessageBox.Show("Please enter a quantity for the item you selected")
        ElseIf Not Integer.TryParse(txtQuantity.Text, txtQuantity.Text) Then
            MessageBox.Show("The quantity entered is not numeric. Please add a numeric quantity.")
            Exit Sub
        Else
            lstPurchased.Items.Add(txtQuantity.Text & " " & lstSale.Text)
        End If
    End Sub

    Private Sub btnCalculate_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnCalculate.Click
        Dim int As Integer
        Dim total As Double = 0
        'you have to loop through the list to calculate the total
        ' hope this is what you want
        For i As Integer = 0 To lstPurchased.Items.Count - 1
            ' We split the list item into the quantity and the item name
            Dim lst() As String = lstPurchased.Items(i).ToString.Split({CChar(" ")}, 2)
            'lst(1) contains the item name
            Integer.TryParse(lst(0), int)
            total += TaxesModule.SalesTax(int, lst(1))
        Next
        MessageBox.Show(CStr(FormatCurrency(total)))
    End Sub

    Private Sub btnClear_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnClear.Click
        lstPurchased.Items.Clear()
        txtQuantity.Clear()
    End Sub

End Class

模块

Module TaxesModule
    Private Const DONUT_TAX As Decimal = CDec(0.083)
    Private Const RAISIN_TAX As Decimal = CDec(0.02)
    Private Const SS_TAX As Decimal = CDec(0.062) ' <-- you are not using this

    Public Function SalesTax(ByVal Quantity As Integer, ByVal item As String) As Double
        Dim TotalWithSalesTax As Double
        If item = "Wheat Bread" Then
            TotalWithSalesTax = (Quantity * 1.15)
        ElseIf item = "White Bread" Then
            TotalWithSalesTax = (Quantity * 1.05)
        ElseIf item = "Donuts" Then
            TotalWithSalesTax = (Quantity * (0.5 * DONUT_TAX) + (Quantity * 0.5))
        ElseIf item = "Raisins" Then
            TotalWithSalesTax = (Quantity * (0.25 * RAISIN_TAX) + (Quantity * 0.25))
        End If
        Return TotalWithSalesTax
    End Function

End Module

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM