2014-03-07 2 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' 또는 개인용으로 변경하십시오 (이 후에 코드를 수정해야합니다). If item = "Wheat Bread"다음은 무엇을 의미합니까? ElseIf item = "White Bread"'? 그게 어떻게 가능해. 모든 변수를 '비공개'로 변환하십시오. 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입니다. 그 외에도,이 모든 것이 고정되어 있습니다. –