Vb.net 使用select case的Visual basic成员资格程序?
我正在编写一个程序,要求用户提供他们的年龄和他们成为会员的年数,我试图通过使用select case来做到这一点。然而,这似乎不起作用,所有年龄段的人都可以,但如果我用复选框说他们是老兵,应该得到折扣,这是行不通的。此外,他们成为会员的年数不会改变价格/类别,我的计划很简单,我不知道为什么它不起作用 程序的屏幕截图: 代码: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。单击
公共类表单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