暨南大学专用实验报告纸_4
课程名称: 实验四 成绩评定:
实验项目名称: 文件及其他 指导教师 张冰 实验项目编号: VB1104 实验项目类型: 综合 实验地点: 计算中心C305
学生姓名: 学号: 学院: 系 专业: 实验时间 2016 年 5 月 21 日 下 午~ 6 月 18 日 下 午 一、 实验目的
1. 掌握常用控件的常用属性、事件和方法。包括窗体、文本框、标签、命令按钮、组
合框、列表框、单选按钮、复选框等。 2. 熟练合理使用不同的控制结构和函数过程。
3. 掌握数组的相关操作和常用算法,以及自定义数据类型数组的使用。
4. 掌握顺序文件的特点,掌握顺序文件的打开、读写和关闭的方法。掌握Line Input
和Input 的使用。
5. 能够根据应用程序的需要读写脱机数据。 6. 掌握菜单的设计方法。
二、 实验内容
(一) 综合练习
1. 设计如下图所示界面的窗体。
(1) 将左侧组合框设置为升序,当添加新的待选课程名称时自动放至合适的位置上。 (2) 编写事件过程。
a) 当窗体加载时,分别从文件“待选课.txt ”、“已选课.txt ”中读取数据显示在左
侧的组合框和右侧的列表框中。
b) 在左侧组合框中输入数据按回车键时,检查无重复后,添加新的待选课程名称
至待选课列表框中。 c) 编写移动按钮事件:
● “>”:将选中的课程移至已选课列表中 ● “>>”:将所有待选课程移至已选课列表中
● “
和“已选课.txt ”文件中。
e) 编写SortASC 和SortDSC 过程对已选课列表框中的数据进行排序,在单击“升
序”按钮时调用SortASC 过程,并将按钮的标题修改为“降序”,反之亦然。 f)
以EX4-1保存窗体和工程。
2. 实验要求
a) 将左侧组合框设置为升序时,需要设置什么属性?该属性的设置能否用代码完
成,为什么?
b) 添加新的待选课程名称到组合框时需要检查有无重复,请在下面空白处写出正
确的代码。
Private Sub Combo1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then
End If End Sub
c) “>”按钮单击事件中,如果没有选中任何待选课程,会出现什么样的情况?
原因是什么?
d) 以下是对列表框数据进行升序排序的子过程SortASC ,请完善。 Sub SortASC(a As ) ‘选择法排序的子过程 For i = 0 To For j = i + 1 To a.ListCount - 1 If a.List(i) > a.List(j) Then End If Next j Next i End Sub
(二) 综合练习
1. 在窗体上放置一个文本框,并设计如下图所示菜单。
(1) 编写事件过程。
a) “文件”-“打开”:打开应用程序所在目录的student1.dat 文件。
“文件”-“保存”:将文本框中内容保存至student2.dat 文件。
b) 在读取或者保存数据时需要保存数据的格式,因此在处理文件中的数据时需要
使用自定义数据类型的数组。数据文件中的数据类型StudType 定义如下: Private Type StudType Name As String * 3 Sex As String * 1 Age As Integer End Type
Dim s() As StudType ‘定义一个StudType 类型的动态数组
c) “格式”-“字体”:设置文本框中字体格式为“宋体”或者“隶书”
“格式”-“字号”:增大或者减小字体大小。 d) “排序”-“年龄”:按照年龄进行升序或降序排序
“排序”-“性别”:按照性别进行升序或降序排序。
(2) 要求在文本框中输出时对齐,如下图。
(3) 右键点击文本框时出现格式菜单,并且禁止系统菜单的出现。
(4) 运行通过后用文件名EX4-2分别保存窗体和工程。
2. 实验要求
a) 由于不清楚文件中的数据有多少,所以要使用动态数组来存放文件中的数据。下面
代码的功能是从当前目录中读取学生的信息,请完善。
Open App.Path & "\student1.dat" For As #1 i = 0
Do While Not Input #1, iName, iSex, iAge i = i + 1
ReDim s(i).Name = iName: s(i).Sex = iSex: s(i).Age = iAge
Text1.Text = Text1.Text & & vbCrLf ‘保证文本框中每行存放一个学生的信息, Loop Close #1
b) 文本框中如何实现对齐?请写出你的解决方案。中文字符与英文字符所占的宽度是
否相同?
c) 以下是对自定义数据类型数组s 按照年龄进行排序的代码,请完善。
For i = LBound(s) To UBound(s) - 1 For j = i + 1 To UBound(s)
If s(i).Age
d) 升序或者降序时如何显示check 标记。
e) 显示右键菜单的代码如下,请完善。
Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
'可使VB 本身定义的系统右键菜单无效
If Then PopupMenu End Sub
f) 说出该题的难点(至少2个) 及解决方法。