河北工业大学计算机软件技术基础(VB)
课程设计任务书
本题难度级别:C实现基本要求代码: 约150行
主要控件及算法:Command、 Label、Text及Combo;Combo控件和数组的使用。
一、设计题目:算术四则运算(出题人:李惠然)
二、目的与要求
1.目的
培养学生综合利用VB语言进行程序设计的能力,主要是通过使用VB的标准控件,加深对控件的多个属性的认识及如何使用属性进行程序设计。
2.基本要求
?每次出题数为随机 1-20题、每次1题、每次2题、……、每次20题。
?试题分为10、20、30、40、50、100、1000以内的加减乘除整数运算题。
?题型分为加、减、乘、除、加减、乘除,共 6 种方式。
?除法题目要确保不出现不能整除的情况。
?用户答题完成后,单击“交卷”,程序马上进行对错判断,根据正确率的百分比显示得分,如果错误会给出正确答案。
?单击“开始”,程序根据设定的题数、题型等条件给出下一组试题。
3.创新要求
?在完成基本要求后,可进行如下创新设计:
?题型增加加减乘除混合运算方式。
?输入法不论处在英文还是中文状态,都能保证用户输入正确的数字。
三、设计方法和基本原理
1.问题描述
?单击VB环境中的“运行”按钮,弹出如下图所示界面;
单击“开始”按钮,系统给出30以内的加法运算共10题。
?给出一道题的答案后按回车键,光标自动转到下一文本框中;
?当做完全部题目后单击“交卷”按钮,系统评分并给出对错标志及正确答案。
?若想改变出题数、运算类型和运算范围,请在3个组合框中进行。之后单击“开始”
按钮,继续出题。
?单击“退出”按钮,结束程序运行。
2. 问题的解决方案
在窗体中放置 9 个控件,它们分别是:
?Label1:在属性窗口将其 Index 属性设置为 1
?Label2:在属性窗口将其 Index 属性设置为 1
?Label3:不用设置任何属性
?Text1:在属性窗口将其 Index 属性设置为 1
?Combo1:不用设置任何属性
?Combo2:不用设置任何属性
?Combo3:不用设置任何属性
?Command1:不用设置任何属性
?Command2:不用设置任何属性
四、主要技术问题的描述:
本题技术问题不多,主要解决vb中组合框的使用。
组合框的使用
组合框控件(ComboBox)将文本框控件(TextBox)与列表框控件(ListBox)的特性结合为一体,兼具文本框控件与列表框控件两者的特性。它可以如同列表框一样,让用户选择所需项目;又可以如文本框一样通过输入文本来选择表项。
组合框默认的名称是 ComboX(X为阿拉伯数字 1、2、3 ,等等),规则的命名方式为:CboX(X为用户自定义的名字,如 CboName、CboColor ,等等)。
(1)组合框控件的主要属性:
列表框控件的大部分属性同样适合于组合框,此外,组合框还有一些自己的一些属性:
?Style(类型)属性
组合框共有三种 Style :
当值为 0 ,组合框是“下拉式组合框”(DropDown Combo),与下拉式列表框相似,但不同的是,下拉式组合框可以通过输入文本的方法在表项中进行选择,可识别 Dropdown 、Click、Change 事件。
当值为 1 ,组合框称为“简单组合框”(Simple Combo),由可以输入文本的编辑区与一个标准列表框组成,可识别 Change 、DblClick 事件。
当值为 2 ,组合框称为“下拉式列表框”(Dropdown ListBox),它的右边有个箭头,可供“拉下”或“收起”操作。它不能识别DblClick 及Change 事件,但可识别Dropdown 、Click 事件。
综上所述,如果你想让用户能够输入项目,则应将组合框设置成 0 或 1 ,如果只想让用户对已有项目进行选择,则应将组合框设置成 2
?Text(文本)属性:
本属性值返回用户选择的文本或直接在编辑区域输入的文本,可以在界面设置时直接输入但要显示多个选项,不能简单地用 Text 属性指定,因为后一选项会覆盖前面的选项,这时,常常要用到窗体的载入事件 Form_Load
Form_Load 的意思是,在打开窗口的同时,将指定的内容载入。
(2)组合框的事件:
根据组合框的类型,它们所响应的事件是不同的。
例如,当组合框的 Style 属性为 1 时,能接收 DblClick 事件,而其他两种组合框能够接收 Click 与 Dropdown 事件;当 Style 属性为 0 或 1 时,文本框可以接收 Change 事件。
(3)组合框的方法:
跟列表框一样,组合框也适用 AddItem 、Clear 、RemoveItem 方法。
(4)组合框举例:
在名为 CboChoose 的下拉组合框中任意选择一种机型,自动会在名为 LblShow 的标签上显示出来。
程序代码如下:
Private Sub Form_Load()
CboChoose.AddItem "IBM"
CboChoose.AddItem "AST"
CboChoose.AddItem "Compaq"
CboChoose.AddItem "联想"
CboChoose.AddItem "长城"
CboChoose.AddItem "东海"
End Sub
Private Sub CboChoose_Click()
LblShow.Caption = "你的机型是:" & CboChoose.Text
End Sub
五、参考资料
Visual Basic 程序设计教程及 Visual Basic 实验教程
MSDN中文版,课程设计网站上提供的其它资料。Dim a() As Integer
Dim b() As Integer
Dim c() As String
Private Sub Combo1_Click()
For i = 0 To 9
Text1(i).Visible = True
Next
If Combo1.ListIndex < 9 Then
For i = 9 To Combo1.ListIndex + 1 Step -1
Text1(i).Visible = False
Next
End If
Label1.Caption = ""
ReDim a(Combo1.ListIndex)
ReDim b(Combo1.ListIndex)
ReDim c(Combo1.ListIndex)
End Sub
Private Sub Combo3_Click()
If Combo3.ListIndex = 3 Or Combo3.ListIndex = 5 Then
For i = 0 To Combo1.ListIndex
While a(i) Mod b(i) <> 0
b(i) = Int(((Combo2.ListIndex + 1) * 10) * Rnd + 1) Wend
Next
End If
Select Case Combo3.ListIndex
Case 0
For i = 0 To Combo1.ListIndex
c(i) = "+"
Next
Case 1
For i = 0 To Combo1.ListIndex
c(i) = "-"
Next
Case 2
For i = 0 To Combo1.ListIndex
c(i) = "*"
Next
Case 3
For i = 0 To Combo1.ListIndex
c(i) = "/"
Next
Case 4
For i = 0 To Combo1.ListIndex
Randomize
If Int(10 * Rnd + 1) Mod 2 = 0 Then c(i) = "+"
Else
c(i) = "-"
End If
Next
Case 5
For i = 0 To Combo1.ListIndex
Randomize
If Int(10 * Rnd + 1) Mod 2 = 0 Then
c(i) = "*"
Else
c(i) = "/"
End If
Next
End Select
End Sub
Private Sub Command1_Click()
For i = 0 To Combo1.ListIndex
Randomize
If Combo2.ListIndex < 5 Then
a(i) = Int(((Combo2.ListIndex + 1) * 10) * Rnd + 1)
b(i) = Int(((Combo2.ListIndex + 1) * 10) * Rnd + 1)
Else
If Combo2.ListIndex = 5 Then
a(i) = Int(((Combo2.ListIndex + 1) * 100) * Rnd + 1)
b(i) = Int(((Combo2.ListIndex + 1) * 100) * Rnd + 1)
Else
a(i) = Int(((Combo2.ListIndex + 1) * 1000) * Rnd + 1)
b(i) = Int(((Combo2.ListIndex + 1) * 1000) * Rnd + 1)
End If
End If
Next
Label1.Caption = ""
Call Combo3_Click
For i = 0 To Combo1.ListIndex
Label1.Caption = Label1.Caption + "(" & i + 1 & ")" & a(i) & c(i) & b(i) & "=" & vbCrLf & vbCrLf
Next
Label2.Caption = ""
For i = 0 To 9
Text1(i).Text = ""
Next
End Sub
Private Sub Command2_Click()
For i = 0 To Combo1.ListIndex
Select Case c(i)
Case "+"
If a(i) + b(i) = Val(Text1(i).Text) Then
Label2.Caption = Label2.Caption & "√" & vbCrLf & vbCrLf
Else
Label2.Caption = Label2.Caption & "正确答案是:" & a(i) + b(i) & vbCrLf & vbCrLf
End If
Case "-"
If a(i) - b(i) = Val(Text1(i).Text) Then
Label2.Caption = Label2.Caption & "√" & vbCrLf & vbCrLf
Else
Label2.Caption = Label2.Caption & "正确答案是:" & a(i) - b(i) & vbCrLf & vbCrLf
End If
Case "*"
If a(i) * b(i) = Val(Text1(i).Text) Then
Label2.Caption = Label2.Caption & "√" & vbCrLf & vbCrLf
Else
Label2.Caption = Label2.Caption & "正确答案是:" & a(i) * b(i) & vbCrLf & vbCrLf
End If
Case "/"
If a(i) / b(i) = Val(Text1(i).Text) Then
Label2.Caption = Label2.Caption & "√" & vbCrLf & vbCrLf
Else
Label2.Caption = Label2.Caption & "正确答案是:" & a(i) / b(i) & vbCrLf & vbCrLf
End If
End Select
Next
End Sub
Private Sub Command3_Click()
End
End Sub
Private Sub Form_Load()
Command2.Enabled = False
For i = 1 To 10
Combo1.AddItem "每次" & i & "题"
Next
For i = 10 To 50 Step 10
Combo2.AddItem i & "以内"
Next
Combo2.AddItem "100以内"
Combo2.AddItem "1000以内"
Combo3.AddItem "加"
Combo3.AddItem "减"
Combo3.AddItem "乘"
Combo3.AddItem "除"
Combo3.AddItem "加减"
Combo3.AddItem "乘除"
Combo1.Text = Combo1.List(0)
Combo2.Text = Combo2.List(0)
Combo3.Text = Combo3.List(0)
End Sub
Private Sub Text1_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer) If KeyCode = 13 Then
If Index = Combo1.ListIndex Then
Command2.Enabled = True
Command2.SetFocus
Else
Text1(Index + 1).SetFocus
End If
End If
End Sub