VB ElseIf语句不起作用

时间:2014-09-28 03:55:29

标签: vb.net if-statement conditional-statements

家庭作业问题:互联网服务提供商为其客户提供三种订阅套餐 非营利组织的折扣: 一个。套餐A:10个小时的访问费用,每月9.95美元。额外的小时是2.00美元 每小时。 湾套餐B:20小时访问,每月14.95美元。额外的时间是 每小时1.00美元。 C。套餐C:无限制使用,每月19.95美元。 d。非营利组织:服务提供商为所有非营利组织提供服务 所有套餐均可享受20%的折扣。 用户应选择客户购买的包裹(从一组收音机中选择) 按钮)并输入使用的小时数。一个复选框标题为非营利组织 组织也应出现在表格上。应用程序应该计算和 显示到期总金额。如果用户选择了公益组织检查 盒子,应从最终费用中扣除20%的折扣。履行 注意:必须使用符号常量声明所有费率,限制和折扣 (使用Const关键字)。

使用以下数据确定应用程序是否正确计算: 套餐和营业时间每月费用 套餐A,5小时,非营利组织$ 7.96 套餐A,25小时$ 39.95 套餐B,10小时,非营利组织$ 11.96 套餐B,25小时19.95美元 套餐C,18小时,非营利组织15.96美元 套餐C,25小时$ 19.95

我的代码:

Private Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click
    'Declare input and output variables
    Dim intHoursUsed As Integer
    Dim decTotalDue As Decimal

    'Calculate Price if Package A is selected. No discount applied.
    If radPackageA.Checked = True Then
        If intHoursUsed < 10 Then
            decTotalDue = CDec(9.95)
        ElseIf intHoursUsed > 10 Then
            decTotalDue = CDec((9.95) + ((intHoursUsed - 20) * 2))
        End If
    End If

    'Calculate Price if Package B is selected. No discount applied.
    If radPackageB.Checked = True Then
        If intHoursUsed <= 20 Then
            decTotalDue = CDec(14.95)
        ElseIf intHoursUsed > 20 Then
            decTotalDue = CDec((14.95) + ((intHoursUsed - 20) * 1))
        End If
    End If

    'Calculate Price if Package C is selected. No discount applied.
    If radPackageC.Checked = True Then
        decTotalDue = CDec(19.95)
    End If

    'Declare named constant for Nonprofit Discount rate (0.8)
    Const Nonprofit As Decimal = CDec(0.8)

    'Add and calculate discount if checkbox is checked.
    If chkNonprofit.Checked = True Then
        decTotalDue = CDec(decTotalDue * Nonprofit)
    End If

    'Display Total Amount Due in label as string in currency format
    lblTotalDue.Text = decTotalDue.ToString("c")

    'Display Error Message it Hours exceed 744
    If CInt(txtHoursUsed.Text) > 744 Then
        MessageBox.Show("Please try again. Value must be a numeric inter and must not exceed 744.")
        txtHoursUsed.Clear()
        lblTotalDue.Clear()
    End If
End Sub

当我计算A和B套餐时,无论多少小时,答案只有9.95美元和14.95美元。请帮忙!我很沮丧。我找不到什么问题(我是菜鸟)。

2 个答案:

答案 0 :(得分:0)

答案可能会通过格式化来揭示,正如Unihedron上面提到的那样。

Private Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click
'Declare input and output variables
Dim intHoursUsed As Integer
Dim decTotalDue As Decimal

'Get the total hours
intHoursUsed = CInt(txtHoursUsed.Text)

'Calculate Price if Package A is selected. No discount applied.
If radPackageA.Checked = True Then
    If intHoursUsed <= 10 Then
        decTotalDue = CDec(9.95)
    ElseIf intHoursUsed > 10 Then
        decTotalDue = CDec((9.95) + ((intHoursUsed - 20) * 2))
    End If
/* Missing End If here */

    'Calculate Price if Package B is selected. No discount applied.
    If radPackageB.Checked = True Then
        If intHoursUsed <= 20 Then
            decTotalDue = CDec(14.95)
        ElseIf intHoursUsed > 20 Then
            decTotalDue = CDec((14.95) + ((intHoursUsed - 20) * 1))
        End If
    End If
/*Rest omitted for brevity */

缺少的End If会使所有内容都通过第一次检查radPackageA.Checked = True进行过滤。如果不是这样,那么除此之外的任何代码都不会被查看。正确的代码格式化可能会帮助您更快地找到它,阅读代码的人也会非常感激。

答案 1 :(得分:0)

如果您在任何地方都没有为intHoursUsed变量赋值,那么您从程序中得到的答案就非常有意义:

Dim intHoursUsed As Integer = CInt(txtHoursUsed.Text)
......

在这种情况下,intHoursUsed值默认为0,然后intHoursUsed < 10intHoursUsed <= 20始终为true。这样,正如你所说,无论多少小时,答案总是9.95美元和14.95美元。