2014-03-07 31 views
1

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

这是最新的代码。

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 ... 

这引起了双方甜甜圈和葡萄干在消息框中给我总共0.00美元。所以我想知道如果计数如何设置不允许它通过整个列表,但我不知道如何解决这个问题?

对于Visual Basic来说,我还是个新手,一般来说编程是真的,这是我第一次使用模块。任何人都可以帮我弄清楚我做错了什么,所以我可以转移到程序的其他部分?

+0

我想你应该抓住一个基本的编程书并重新开始阅读。更多地关注变量作用域和If语句。你的代码中有很多问题。 – bansi

+0

哦,是的,我确定存在很多问题,我一直在处理这些代码,并且已经拿出东西,放入不同的东西,返回到一些较旧的东西等等,我不确定是否有一切都是我想要的。当我开始尝试添加模块中的东西时,我会搞砸一些东西,因为在我添加之前,至少在添加税前计算了它的应有方式。 –

+0

要删除“Public FinalTotal As Double”或将其更改为私有(您需要在此之后修复代码)。如果item =“Wheat Bread”,那么你是什么意思?Then .. ElseIf item =“White Bread”'?这怎么可能。将所有变量转换为“Private”。尽量不要使用Public变量,这是纯粹的邪恶。 – bansi

回答

1

我修改了你的代码,希望这是你想要的。在代码中添加了评论。请注意我删除了所有公共变量。

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 
+0

一切似乎都起作用,只是它没有计算出“葡萄干”的正确总数。如果我将葡萄干添加到购买清单中,数量为1,则消息框中显示的价格为0.00美元。除此之外,这固定了一切。 –