Vb.net 使用select case的Visual basic成员资格程序?

Vb.net 使用select case的Visual basic成员资格程序?,vb.net,select,Vb.net,Select,我正在编写一个程序,要求用户提供他们的年龄和他们成为会员的年数,我试图通过使用select case来做到这一点。然而,这似乎不起作用,所有年龄段的人都可以,但如果我用复选框说他们是老兵,应该得到折扣,这是行不通的。此外,他们成为会员的年数不会改变价格/类别,我的计划很简单,我不知道为什么它不起作用 程序的屏幕截图: 代码: 公共类表单1 私有子btnCalc_Click(ByVal发送方作为System.Object,ByVal e作为System.EventArgs)处理btnCalc。单击

我正在编写一个程序,要求用户提供他们的年龄和他们成为会员的年数,我试图通过使用select case来做到这一点。然而,这似乎不起作用,所有年龄段的人都可以,但如果我用复选框说他们是老兵,应该得到折扣,这是行不通的。此外,他们成为会员的年数不会改变价格/类别,我的计划很简单,我不知道为什么它不起作用

程序的屏幕截图:

代码:

公共类表单1
私有子btnCalc_Click(ByVal发送方作为System.Object,ByVal e作为System.EventArgs)处理btnCalc。单击
作为整数的Dim x
Dim y作为整数
x=Val(txtAge.Text)
y=Val(txtYears.Text)
选择案例x
情况是=50
lblPrice.Text=(“80英镑”)
lblcategrary.Text=(“超过50”)
案例chkVeteran。已检查
lblPrice.Text=(“50英镑”)
情况是=2
lblPrice.Text=(“40英镑”)
lblCategory.Text=(“2年期初级折扣”)
案例>=50且y>=10
lblPrice.Text=(“90英镑”)
lblCategory.Text=(“10年优先折扣”)
案例chkVeteran.已检查且y>=10
lblPrice.Text=(“20英镑”)
lblCategory.Text=(“10年退伍军人折扣”)
结束选择
端接头

End Class只能运行一个
案例
块,但您似乎希望运行多个块。考虑子句的子句:

Case Is <= 18
    lblPrice.Text = ("£60")
    lblCategory.Text = ("Junior")
Case chkVeteran.Checked
    lblPrice.Text = ("£50")
Case Is <= 18 And y >= 2
    lblPrice.Text = ("£40")
    lblCategory.Text = ("2 year junior discount")
这两个条款是排他性的,因此在任何时候都只能适用其中一个条款。将按照从头到尾的顺序检查每个子句,并执行匹配的第一个子句。因此,您应该设置逻辑,以便匹配的第一个子句应该是唯一匹配的子句


编辑:响应单独的评论线程

您将逻辑定义为:

体育俱乐部有三类会员费。少年(18岁以下)年薪60英镑,老年人(19-49岁)年薪120英镑,退伍军人(50岁及以上)年薪80英镑。入会两年或两年以上的青少年可享受20英镑的折扣。已成为会员10年或以上的老年人和退伍军人可享受30英镑的折扣

这听起来像是两个条件序列。第一个定义基本利率,类似于:

If age < 19 Then
    rate = 60
Else If age < 50 Then
    rate = 120
Else
    rate = 80
End If
If age < 19 And tenure > 1 Then
    rate = rate - 20
Else If age > 18 And tenure > 9 Then
    rate = rate - 30
End If
您可以为其中每一项创建函数,如:

Function IsJunior(ByVal age As Integer) As Boolean
    Return age < 19
End Function
函数是作为布尔值的junior(ByVal age作为整数)
返回年龄<19岁
端函数

这将实现的细节提取到较小的辅助函数中,并允许用语义概念而不是实现细节来表示顶级逻辑,允许逻辑的整体表达式与需求给出的描述更为清晰地匹配。

使用选择案例非常困难,因为当使用案例is=2这样的代码时,u将无法同时传递x和y的值

如果有更好的用途,那就用别的吧

公开课表格1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim x As Integer
    Dim y As Integer

    x = Val(txtAge.Text)
    y = Val(txtYears.Text)


    If x <= 18 Then
        lblPrice.Text = ("£60")
        lblCategory.Text = ("Junior")
    ElseIf x >= 19 And x <= 49 Then
        lblPrice.Text = ("£120")
        lblCategory.Text = ("Senior")
    ElseIf x >= 50 And y < 10 Then
        lblPrice.Text = ("£80")
        lblCategory.Text = ("Over 50")
    ElseIf chkVeteran.Checked And y> Then
        lblPrice.Text = ("£50")
    ElseIf x <= 18 And y >= 2 Then
        lblPrice.Text = ("£40")
        lblCategory.Text = ("2 year junior discount")
    ElseIf x >= 50 And y >= 10 Then
        lblPrice.Text = ("£90")
        lblCategory.Text = ("10 year senior discount")
    ElseIf chkVeteran.Checked And y >= 10 Then
        lblPrice.Text = ("£20")
        lblCategory.Text = ("10 year veteran discount")
    Else
        MessageBox.Show("Some of the fields are empty")
    End If
End Sub
Private子按钮1\u单击(ByVal sender作为System.Object,ByVal e作为System.EventArgs)处理按钮1。单击
作为整数的Dim x
Dim y作为整数
x=Val(txtAge.Text)
y=Val(txtYears.Text)
如果x=19,x=50,y<10,则
lblPrice.Text=(“80英镑”)
lblcategrary.Text=(“超过50”)
ElseIf chkVeteran.选中,y>然后
lblPrice.Text=(“50英镑”)
ElseIf x=2那么
lblPrice.Text=(“40英镑”)
lblCategory.Text=(“2年期初级折扣”)
如果x>=50,y>=10
lblPrice.Text=(“90英镑”)
lblCategory.Text=(“10年优先折扣”)
ElseIf chkVeteran.选中且y>=10,则
lblPrice.Text=(“20英镑”)
lblCategory.Text=(“10年退伍军人折扣”)
其他的
Show(“某些字段为空”)
如果结束
端接头

期末班定义“它不工作”。它做什么?当您在调试器中单步执行此操作时,观察到的行为与预期的行为有何不同?发生这种情况时的运行时值是什么?
Select Case x
指定选择
x
,然后将其与不相关的
Case chkVeteran进行比较。选中
。我会将值和字符串放入变量中,然后在大小写后应用复选框逻辑,然后更新UINone,这很有意义,所以我决定将其作为if语句来执行。如果我使用Elseif,如果我使用'Elseif x=19到49“@Finn:Define”不起作用,为什么它不起作用。“有错误吗?更新的代码是什么?调试时它是如何运行的?我现在正在编写,完成后会发布
If IsJunior(age) Then
    rate = 60
Else If IsSenior(age) Then
    rate = 120
Else If IsVeteran(age) Then
    rate = 80
End If
Function IsJunior(ByVal age As Integer) As Boolean
    Return age < 19
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim x As Integer
    Dim y As Integer

    x = Val(txtAge.Text)
    y = Val(txtYears.Text)


    If x <= 18 Then
        lblPrice.Text = ("£60")
        lblCategory.Text = ("Junior")
    ElseIf x >= 19 And x <= 49 Then
        lblPrice.Text = ("£120")
        lblCategory.Text = ("Senior")
    ElseIf x >= 50 And y < 10 Then
        lblPrice.Text = ("£80")
        lblCategory.Text = ("Over 50")
    ElseIf chkVeteran.Checked And y> Then
        lblPrice.Text = ("£50")
    ElseIf x <= 18 And y >= 2 Then
        lblPrice.Text = ("£40")
        lblCategory.Text = ("2 year junior discount")
    ElseIf x >= 50 And y >= 10 Then
        lblPrice.Text = ("£90")
        lblCategory.Text = ("10 year senior discount")
    ElseIf chkVeteran.Checked And y >= 10 Then
        lblPrice.Text = ("£20")
        lblCategory.Text = ("10 year veteran discount")
    Else
        MessageBox.Show("Some of the fields are empty")
    End If
End Sub