上海立信会计学院本科实验报告
班级: 学号: 姓名: 指导教师: 系部: 专业: 实验时间:
实验6 列表框、组合框与过程
一、 实验目的
1. 掌握列表框和组合框的使用
2. 掌握自定义函数过程和子过程的定义和调用方法 3. 掌握形参和实参之间的对应关系 4. 掌握值传递和地址传递的传递方式
二、实验要求
1. 在C:\\下建立子文件夹“VB实验6”,按照题目要求,在该文件夹下为各题保存相应的
文件,如本实验中的第一题,需保存的文件有:工程文件(61.vbp)、窗体文件(61.frm) 及可执行文件(61.exe),本实验中的第二题,需保存的文件有:工程文件(62.vbp)、窗体文件(62.frm) 及可执行文件(62.exe),其余实验依此类推。
2. 撰写实验过程中出现了哪些问题、错误,你是如何解决的,做一个小结。
三、 实验内容:
1. 设计一个选课的运行界面,如图6-1(a)所示。它包含2个列表框,左边为可供选择的
课程名称,通过Form_Load事件加入,并按拼音字母顺序排序;当单击某门课程名称后,将该课程加入到右边的列表框中,并在左边列表框中删除该课程。当右边课程数已满5门时,不允许再加入并出现如图6-1(b)所示的提示。窗体及所有控件字体默认、大小均为小四。
图6-1 (a) 图6-1 (b)
Private Sub Form_Load()
List1.AddItem \程序设计 \ List1.AddItem \程序设计 \ List1.AddItem \数据库数据与应用 List1.AddItem \硬件技术基础\ List1.AddItem \程序设计\ List1.AddItem \多媒体技术与应用\ List1.AddItem \网络技术与应用\ List1.AddItem \软件技术基础\ List1.AddItem \大学计算机基础\End Sub
Private Sub List1_Click() If List2.ListCount < 5 Then List2.AddItem List1.Text
List1.RemoveItem List1.ListIndex Else
MsgBox \超过5门功课,不能再选\信息提示\ End If End Sub
2. 在窗体上建立一个简单组合框,在组合框的文本区输入数字字符,按回车键后加入到组
合框的列表区内(非数字则不加入),然后清空文本区,如图6-2(a)所示;单击“交换”按钮后,可将组合框列表区中最小值项目和第0个项目交换;最大值项目与最后项交换, 如图6-2(b)所示。窗体中所有控件字体默认大小。
图6-2(a) 图6-2(b) Private Sub Combo1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then
If IsNumeric(Combo1.Text) Then Combo1.AddItem Combo1.Text
End If
Combo1.Text = \ End If End Sub
Private Sub Command1_Click() Dim i%, min%, max%, x% min = 0
For i = 1 To Combo1.ListCount - 1
If Val(Combo1.List(i)) < Val(Combo1.List(min)) Then min = i Next
x = Combo1.List(0)
Combo1.List(0) = Combo1.List(min) Combo1.List(min) = x
max = Combo1.ListCount - 1
For i = 0 To Combo1.ListCount - 2
If Val(Combo1.List(i)) > Val(Combo1.List(max)) Then max = i Next
x = Combo1.List(Combo1.ListCount - 1)
Combo1.List(Combo1.ListCount - 1) = Combo1.List(max) Combo1.List(max) = x End Sub
3. 设计一个点菜程序,当单击“添加到我点的菜单中”按钮时,将组合框“饭店菜单”中
选中的菜添加到列表框“我点的菜”中,当单击“添加到饭店菜单中”按钮时,可以将文本框中输入的菜单名添加到组合框“饭店菜单”中,如已存在将不重复添加。要求:设计窗体界面,窗体中所有控件字体默认、大小为小四,并设计代码,初始时文本框、列表框、组合框内容均为空。
图6-3
Private Sub Command1_Click() Dim i%, flag As Boolean flag = False
For i = 0 To List1.ListCount - 1
If List1.List(i) = Combo1.Text Then flag = True Exit For End If Next i
If flag = False Then List1.AddItem Combo1.Text End Sub
Private Sub Command2_Click() Dim i%, flag As Boolean flag = False
For i = 0 To Combo1.ListCount - 1
If Combo1.List(i) = Text1.Text Then flag = True Exit For End If Next i
If flag = False Then Combo1.AddItem Text1.Text End Sub
4. 编写一个子过程ProcMin(a(),amin),求一维数组a中的最小值amin。要求主调程序在随
机产生10个-300 ~ -400之间的数,在窗体上显示所产生的数组中的各元素,通过Form_Load事件加入;调用ProcMin(a(),amin)过程,在窗体上显示数组中的最小值。窗体中所有控件字体默认、大小为小四,效果如图6-4所示。
图6-4
Private Sub Form_Load() Dim min%, i% Dim s%(1 To 10) Randomize
Print \数组中的各元素:\ For i = 1 To 10
s(i) = Int(Rnd * (-101) - 300) Print s(i);
Next Print
Call ProcMin(s, min) End Sub
Public Sub ProcMin(a%(), aMin%) Dim i!
aMin = a(LBound(a))
For i = LBound(a) + 1 To UBound(a) If a(i) < aMin Then aMin = a(i) Next Print
Print \数组中的最小值是:\End Sub
5. 编写一个自定义函数过程MySin(x),求:
-5xx3x5x7x2n?1n?1。当第n项的值小于|10|时结束,MySin(x)????????(?1)13!5!7!(2n?1)!x为弧度。主调程序同时调用MySin(x)函数和内部函数Sin(x),计算x=2时的函数值。
要求:通过单击按钮事件在窗体上显示结果,进行比较验证,窗体中所有控件字体默认、
大小为小四,效果如图6-5所示。
图6-5
Option Explicit
Public Function Mysin#(x#, eps#) Dim n%, t# n = 1
Mysin = 0
t = (-1) ^ (n - 1) * x ^ (2 * n - 1) / Fac(2 * n - 1) Do While (Abs(t) > eps) Mysin = Mysin + t n = n + 1
t = (-1) ^ (n - 1) * x ^ (2 * n - 1) / Fac(2 * n - 1) Loop