2014-02-28 60 views
-2

因此,我要编写一个程序来计算信用卡帐单的余额和最低付款额。程序应该使用下面显示的事件过程。财务费用是旧余额的1.5%。如果新余额为20美元或更少,最低支付金额应为全部新余额。否则,最低支付金额应为20美元加10美元以上新余额的10%。事件过程是:程序返回0的值

Private Sub btnCalcBal_Paymt_Click(sender As Object, e As EventArgs) Handles btnCalcBal_Paymt.Click 
    Dim oldBalance, charges, credits, newBalance, minPayment As Double 
    InputData(oldBalance, charges, credits) 
    CalculateNewValues(oldBalance, charges, credits, newBalance, minPayment) 
    DisplayData(newBalance, minPayment) 
End Sub 

Sub InputData(oldBalance As Double, charges As Double, credits As Double) 
    oldBalance = CDbl(txtOldBal.Text) 
    charges = CDbl(txtCharges.Text) 
    credits = CDbl(txtCredits.Text) 
End Sub 
Function CalculateNewValues(oldBalance As Double, newBalance As Double, minPayment As Double, charges As Double, credits As Double) As Double 
    Dim rate As Double = 1.015 
    newBalance = (rate * oldBalance) + charges - credits 
    Return newBalance 
    If newBalance <= 20 Then 
     minPayment = newBalance 
    Else 
     Return minPayment + (0.1 * newBalance) 
    End If 
End Function 

Sub DisplayData(newBalance As Double, minPayment As Double) 
    txtNewBal.Text = newBalance.ToString("c") 
    txtMinPmt.Text = minPayment.ToString("c") 
End Sub 

当我编译我得到零结果。无法弄清楚原因。

+1

那么,什么问题? –

+0

请扩大主题,先生。 –

+0

所以我要编写一个程序来计算信用卡对帐单的余额和最低付款额。程序应该使用下面显示的事件过程。财务费用是旧余额的1.5%。如果新余额为20美元或更少,最低支付金额应为全部新余额。否则,最低支付金额应为20美元加10美元以上新余额的10%。事件过程是:Dim oldBalance,charge,credits,newBalance,minPayment as Double InputData(oldBalance,charges,crdits)CalculateNewValues(oldBalance,charges,credits,newBal,minPmt)DispD(newBal,minPmt) – Bennymania

回答

0

你的问题是你没有正确修改变量。将参数传递给子函数的方法不会修改btnCalcBal_Paymt_Click方法中的值。你可以使用Function来返回你需要的值,尽管你这样做的方式会更困难。最后,您可以在参数中使用ByRef,以便变量通过参考而不是(参见here)传递给子功能。

Private Sub btnCalcBal_Paymt_Click(sender As Object, e As EventArgs) Handles btnCalcBal_Paymt.Click 
    Dim oldBalance, charges, credits, newBalance, minPayment As Double 
    InputData(oldBalance, charges, credits) 
    CalculateNewValues(oldBalance, charges, credits, newBalance, minPayment) 
    DisplayData(newBalance, minPayment) 
End Sub 

Sub InputData(ByRef oldBalance As Double, ByRef charges As Double, ByRef credits As Double) 
    oldBalance = CDbl(txtOldBal.Text) 
    charges = CDbl(txtCharges.Text) 
    credits = CDbl(txtCredits.Text) 
End Sub 
... 

让我知道这是否有帮助!

+0

@downvoter,关心评论? – davidsbro

+0

我没有投票支持你,但是你的代码在一个函数之外使用'dim',这个函数从我们有限的信息中可以使它们成为全局变量,这是不好的。至少它们是声明的类宽变量(并且被分配内存插槽),而不管它们是否被实际使用。最初的提问者会更好地将所有参数标记为“byref”,然后修改这些值。 –

0

您正在使用太多的函数来完成相当简单的任务。您可以在单个事件处理程序中完成您想要的任何操作。像:

Private Sub btnCalcBal_Paymt_Click(sender As Object, e As EventArgs) Handles btnCalcBal_Paymt.Click 
    Dim oldBalance, charges, credits, newBalance, minPayment As Double 
    oldBalance = CDbl(txtOldBal.Text) 
    charges = CDbl(txtCharges.Text) 
    credits = CDbl(txtCredits.Text) 

    Dim rate As Double = 1.015 
    newBalance = (rate * oldBalance) + charges - credits 
    If newBalance <= 20 Then 
     minPayment = newBalance 
    Else 
     minPayment = minPayment + (0.1 * newBalance) 
    End If 

    txtNewBal.Text = newBalance.ToString("c") 
    txtMinPmt.Text = minPayment.ToString("c") 
End Sub 
0

我意识到这太迟了,但也许其他挣扎的学生可以使用它。这是有效的,它可以做这本书要你做的事情。

Public Class Form1 


Private Sub btnCompute_Click(sender As Object, e As EventArgs) Handles btnCompute.Click 


    Dim oldBalance, charges, credits, newBalance, minPayment As Double 
    InputData(oldBalance, charges, credits) 
    CalculateNewValues(oldBalance, charges, credits, newBalance, minPayment) 
    DisplayData(newBalance, minPayment) 


End Sub 

Sub InputData(ByRef oldBalance As String, ByRef charges As String, ByRef credits As String) 
    oldBalance = CDbl(txtOldBal.Text) 
    charges = CDbl(txtCharges.Text) 
    credits = CDbl(txtCredits.Text) 
End Sub 

Sub CalculateNewValues(ByRef oldBalance As Double, ByRef charges As Double, ByRef credits As Double, ByRef newBalance As Double, ByRef minPayment As Double) 
    Dim rate As Double = 1.015 
    newBalance = (rate * oldBalance) + charges - credits 
    If newBalance <= 20 Then 
     minPayment = newBalance 
    Else 
     minPayment = ((newBalance - 20) * 0.1) + 20 
    End If 

End Sub 

Sub DisplayData(newBalance As Double, minPayment As Double) 
    lblMinPay.Text = minPayment.ToString("C") 
    lblNewBal.Text = newBalance.ToString("C") 
End Sub 

End Class