1、二级 VISUAL+BASIC 机试-127 及答案解析(总分:100.00,做题时间:90 分钟)一、1 基本操作题(总题数:1,分数:30.00)1.注意:下面出现的“”均为 c:/wexam/25160001。请根据以下各小题的要求设计 Visual Basic 应用程序(包括界面和代码)。(1) 在名称为 Form1 的窗体上放置一个名称为 Drive1 的 Drive ListBox 控件,一个名称为 Dir1 的 DirListBox 控件和一个名称为 Filel 的 FileListBox 控件。程序运行时,可以对系统中的文件进行浏览;当双击 File1 中的文件名时,用 Msg
2、Box 显示文件名(不显示路径名)。如图 16-1 所示。注意:程序中不得使用任何变量;保存时必须存放在考生文件夹下,窗体文件名为 sjt1.frm,工程文件名为 sjt1.vbp。(2) 在名称为 Form1 的窗体上放置一个名为 Text1 的文本框控件和一个名为 Timer1 的计时器控件,程序运行后,文本框中显示的是当前的时间,而且每一秒文本框中所显示的时间都会随时间的变化而改变。注意:程序中不得使用任何变量;保存时必须存放在考生文件夹下,窗体文件名为 sjt2.frm,工程文件名为 sjt2.vbp,如图 16-2 所示。(分数:30.00)_二、2 简单应用题(总题数:1,分数:4
3、0.00)2.注意:下面出现的“考生文件夹”均为 c:/wexam/25160001。(1) 在考生文件夹下有工程文件 sjt3.vbp 及窗体文件 sjt3.frm,该程序是不完整的,请在有?号的地方填入正确内容,然后删除?及所有注释符(即号),但不能修改其他部分。存盘时不得改变文件名和文件夹。如图 16-3 所示。在名称为 Form1 的窗体上有 1 个 Labe1 控件,四个 Text 控件及七个命令按钮,功能为:开始启动工程时,界面上除“开始录入”及“退出”按钮之外,其他按钮均不可用(灰色显示);单击“开始录入”按钮之后,利用 InputBox 让用户连续且必须录入 10 个数。若录入
4、为非数字符号,则给出警告“输入数据无效,请重新输入数值数据,请输入第 n 个数”;录入完毕后,“开始录入”变灰,其他变为可用状态;按相应的按钮可分别求出所录入数据的升序、降序排列及最大数和最小数,并在右侧对应的文本框中显示(注意用 A(10)存放最大数,A(1)存放最小数);单击“清除”按钮将所有文本框清空。(2) 在考生文件夹下有工程文件 sit4.vbp 及窗体文件 sjt4.frm,该程序是不完整的,请在有?号的地方填入正确内容,然后删除?及所有注释符(即号),但不能修改其他部分。存盘时不得改变文件名和文件夹。如图 16-4 所示。在名称为 Form1,标题为“求和程序”的窗体上有 3
5、个 Labe1 控件,2 个 Text 控件和 3 个命令按钮。该程序的主要功能是求从 1 到 Text1 中用户输入的任意自然数 n 的累加和。刚启动工程时,“显示结果”和“清除”按钮均为灰色;可以在输入框内输入任意自然数(n 值太大时,运算时间将很长,建议不超过 9位)。在输入数的同时“显示结果”变为可用。当输入为非数值时,累加结果为 0;单击“显示结果”可以在 Text2 中显示累加和,且该框内的文字不可修改,同时“显示结果”变灰,“清除”变为可用;单击“清除”,输入框和显示框均显示“0”单击“关闭”按钮结束程序的运行。(分数:40.00)_三、3 综合应用题(总题数:1,分数:30.0
6、0)3.注意:下面出现的“考生文件夹”均为 c:/wexam/25160001。在考生文件夹下有工程文件 sjt5.vbp 及窗体文件 sjt5.frm,该程序是不完整的,请在有?号的地方填入正确内容,然后删除?及所有注释符(即号),但不能修改其他部分。存盘时不得改变文件名和文件夹,相应的 dat 文件也保存到考生文件夹下,否则没有成绩。如图 16-4 所示。本题描述如下:在名称为 Form1 的窗体上有五个 Labe1 控件和两个命令按钮,数据文件 grade.dat 存放一些成绩。按“开始”按钮后,从考生文件夹下的 grade.dat 中读出数据并求出它们的平均数,将结果写入考生文件夹下的
7、average.dat 文件中;执行完毕,“开始”按钮变成“完成”,且无效(变灰)。(分数:30.00)_二级 VISUAL+BASIC 机试-127 答案解析(总分:100.00,做题时间:90 分钟)一、1 基本操作题(总题数:1,分数:30.00)1.注意:下面出现的“”均为 c:/wexam/25160001。请根据以下各小题的要求设计 Visual Basic 应用程序(包括界面和代码)。(1) 在名称为 Form1 的窗体上放置一个名称为 Drive1 的 Drive ListBox 控件,一个名称为 Dir1 的 DirListBox 控件和一个名称为 Filel 的 FileL
8、istBox 控件。程序运行时,可以对系统中的文件进行浏览;当双击 File1 中的文件名时,用 MsgBox 显示文件名(不显示路径名)。如图 16-1 所示。注意:程序中不得使用任何变量;保存时必须存放在考生文件夹下,窗体文件名为 sjt1.frm,工程文件名为 sjt1.vbp。(2) 在名称为 Form1 的窗体上放置一个名为 Text1 的文本框控件和一个名为 Timer1 的计时器控件,程序运行后,文本框中显示的是当前的时间,而且每一秒文本框中所显示的时间都会随时间的变化而改变。注意:程序中不得使用任何变量;保存时必须存放在考生文件夹下,窗体文件名为 sjt2.frm,工程文件名为
9、 sjt2.vbp,如图 16-2 所示。(分数:30.00)_正确答案:(解析 在窗体上建立好控件后,先设置控件属性,再编写事件过程。文件系统控件有 3 种:驱动器列表框(DriveListBox),目录列表框(DirListBox)和文件列表框(FileListBox)。3 个文件系统控件必须协调工作才能构成一个文件管理系统,当用户在驱动器列表框中选择一个新的列表框或在当目录列表框 Path 的属性改变都触发 Change 事件,将三者(利用本题中 3 个对象的名称)实现同步的代码为:File1.Path=Dir1.Path,Dir1.Path= Drive1.Drive。双击触发 Dbl
10、Click事件弹出 MsgBox 显示文件名,其格式为:MsgBox 提示,按钮,标题。解题步骤:第一步:建立界面并设置控件属性。程序中用到的控件及其属性见表 16-1。表 16-1标 题 属 性 设 置 值DriveListBox Name DrivelDirListBox Name DirlFileListBox Name Filel第二步:编写程序代码。参考代码:Option ExpliCitPrivate Sub Dir1_Change()File1.Path=Dir1.PathEnd SubPrivate Sub Drive1_Change()Dir1.Path=Drive1.Dri
11、veEnd SubPrivate Sub File1_dblClick()MsgBox Filel.FileNameEnd SubPrivate Sub Form_Load()Dir1.Path=Drive1.DriveFile1.Path=Dir1.PathEnd Sub第三步:调试并运行程序。第四步:按题目要求存盘。(2) 解析 在窗体上建立好控件后,先设置控件的属性,再编写事件过程。时钟控件作用是以一定的时间间隔激发计时器事件(Timer)而执行相应程序代码,其 Interval 属性决定时间间隔的长短,以毫秒为单位,所以要实现每一秒文本框的时间改变只要使该属性设置为 1000 即可,要
12、使程序运行后取得当前时间可用 Time 函数取得,程序用到的 Str 函数将其中的内容转化为字符串。解题步骤:第一步:建立界面并设置控件属性。程序中用到的控件及其属性见表 16-2。表 16-2标 题 属 性 设 置 值Text Name Text1Timer Name Interval Timer1 1000 第三步:调试并运行程序。第四步:按题目要求存盘。答案考生文件夹)解析:二、2 简单应用题(总题数:1,分数:40.00)2.注意:下面出现的“考生文件夹”均为 c:/wexam/25160001。(1) 在考生文件夹下有工程文件 sjt3.vbp 及窗体文件 sjt3.frm,该程序是
13、不完整的,请在有?号的地方填入正确内容,然后删除?及所有注释符(即号),但不能修改其他部分。存盘时不得改变文件名和文件夹。如图 16-3 所示。在名称为 Form1 的窗体上有 1 个 Labe1 控件,四个 Text 控件及七个命令按钮,功能为:开始启动工程时,界面上除“开始录入”及“退出”按钮之外,其他按钮均不可用(灰色显示);单击“开始录入”按钮之后,利用 InputBox 让用户连续且必须录入 10 个数。若录入为非数字符号,则给出警告“输入数据无效,请重新输入数值数据,请输入第 n 个数”;录入完毕后,“开始录入”变灰,其他变为可用状态;按相应的按钮可分别求出所录入数据的升序、降序排
14、列及最大数和最小数,并在右侧对应的文本框中显示(注意用 A(10)存放最大数,A(1)存放最小数);单击“清除”按钮将所有文本框清空。(2) 在考生文件夹下有工程文件 sit4.vbp 及窗体文件 sjt4.frm,该程序是不完整的,请在有?号的地方填入正确内容,然后删除?及所有注释符(即号),但不能修改其他部分。存盘时不得改变文件名和文件夹。如图 16-4 所示。在名称为 Form1,标题为“求和程序”的窗体上有 3 个 Labe1 控件,2 个 Text 控件和 3 个命令按钮。该程序的主要功能是求从 1 到 Text1 中用户输入的任意自然数 n 的累加和。刚启动工程时,“显示结果”和“
15、清除”按钮均为灰色;可以在输入框内输入任意自然数(n 值太大时,运算时间将很长,建议不超过 9位)。在输入数的同时“显示结果”变为可用。当输入为非数值时,累加结果为 0;单击“显示结果”可以在 Text2 中显示累加和,且该框内的文字不可修改,同时“显示结果”变灰,“清除”变为可用;单击“清除”,输入框和显示框均显示“0”单击“关闭”按钮结束程序的运行。(分数:40.00)_正确答案:(解析 在窗体上建立好控件后,先设置控件属性,再编写事件过程。用数组 a(10)来接收 InputBox 输入的 10 数,InputBox 的格式为:InputBox(提示,标题,默认,X坐标位置,Y 坐标位置
16、);控件是否可用可利用其 Enabled 属性设置,当该值为 True 时可用,为 False时不可用(灰色);判断是否是数字可用 IsNumeric(),如果是数字返回 True,否则返回 False;本程序中用到的排序方法是将某一个元素做为标杆,其后的每一个元素与其比较,若小于标杆则两者交换,依此类推,题中要求排完序后 a(1)至 a(10)依次存放大数,在文本框中显示升序和降序的时候只要两者反序显示即可,即升序可依次显示 a(1)到 a(10),降序可依次显示 a(10)到 a(1)。解题步骤:第一步:建立界面并设置控件属性。程序中用到的控件及其属性见表 16-3。表 16-3控 件 属
17、 性 设 置 值标签 Caption 点击“开始录入”按钮,录入 10个数文本NameScrollbarsMultilane Text12-verticaltrue 文本NameScrollbarsMultilaneText42-verticaltrue 文本 Name Text2文本 Name Text3按钮 Name Caption Command1 最大数 按钮 Name Caption Command2 最小数按钮 Name Caption Command3 升序排列按钮 Name Caption Command4 降序排列 按钮 Name Caption Command5 退出按钮
18、Name Caption Command6 开始录入按钮 Name Caption Command7 清除第二步:编写程序代码。程序提供的代码:Option ExplicitDim a(10) As VariantDim i As Integer, j As IntegerDim m As SinglePrivate Sub Command1_Click()Text2.Text=Command1.Enabled=FalseCommand7.Enabled=TrueEnd SubPrivate Sub Command2_Click()Text3.Text=?Command2.Enabled=Fa
19、lseCommand7.Enabled=TrueEnd SubPrivate Sub Command3_Click()For i=1 To 10Text1.Text=Text1.Text &?& “,“Next iCommand3.Enabled=FalseCommand7.Enabled=TrueEnd SubPrivate Sub Command4_Click()For i=10 To 1 Step -1Text4.Text=Text4.Text &?& “,“Next iCommand4.Enabled=FalseCommand7.Enabled=TrueEnd SubPrivate S
20、ub Command5_Click()EndEnd SubPrivate Sub Command6_Click()Label1.Enabled=FalseFor i=1 To 10a(i)=InputBox(“请输入第“ & i & “个数,请务必输入数值数据! “,“输入“)Do While IsNumeric(a(i) )=Falsea(i)=InputBox(“输入数据无效,请重新输入数值数据! ! !“ & “请输入第“ & _i & “个数“,“输入“)LoopNext iFor i=1 To 9For j=i+1 To 10If Val(a(j) ) ?Val(a(i) ) The
21、nm=a(j)a(j)=a(i)a(i)=mEnd IfNext jNext iCommand6.Enabled=FalseCommandl.Enabled=TrueCommand2.Enabled=TrueCommand3.Enabled=TrueCommand4.Enabled=TrueCommand5.Enabled=TrueCommand7.Enabled=FalseEnd SubPrivate Sub Command7_Click()Text1.Text=?Text2.Text=?Text3.Text=?Text4.Text=?Label1.Enabled=TrueCommand6.
22、Enabled=TrueCommand4.Enabled=FalseCommand3.Enabled=FalseCommand2.Enabled=FalseCommandl.Enabled=FalseCommand7.Enabled=FalseEnd SubPrivate Sub Form_Load()Command1.Enabled=FalseCommand2.Enabled=FalseCommand3.Enabled=FalseCommand4.Enabled=FalseCommand7.Enabled=FalseEnd Sub参考代码:Option ExplicitDim a(10) A
23、s VariantDim i As Integer, j As IntegerDim m As SinglePrivate Sub Command1_Click()Text2.Text=a(10)Command1.Enabled=FalseCommand7.Enabled=TrueEnd SubPrivate Sub Command2_Click()Text3.Text=a(1)Command2.Enabled=FalseCommand7.Enabled=TrueEnd SubPrivate Sub Command3_Click()For i=1 To 10Text1.Text=Text1.T
24、ext & a(i) &“,“Next iCommand3.Enabled=FalseCommand7.Enabled=TrueEnd SubPrivate Sub Command4_Click()For i=10 To 1 Step -1Text4.Text=Text4.Text & a(i) &“,“Next iCommand4.Enabled=FalseCommand7.Enabled=TrueEnd SubPrivate Sub Command5_Click()EndEnd SubPrivate Sub Command6_Click()Label1.Enabled=FalseFor i
25、=1 To 10a(i)=InputBox(“请输入第“ & i & “个数,请务必输入数值数据!“,“输入“)Do While IsNumeric(a(i) )=Falsea(i)=InputBox(“输入数据无效,请重新输入数值数据! ! !“ & “请输入第“ & i & _“个数“,“输入“)LoopNext iFor i=1 To 9For j=i+1 To 10If Val(a(j) ) Val(a(i) ) Thenm=a(j)a(j)=a(i)a(i)=mEnd IfNext jNext iCommand6.Enabled=FalseCommand1.Enabled=TrueC
26、ommand2.Enabled=TrueCommand3.Enabled=TrueCommand4.Enabled=TrueCommand5.Enabled=TrueCommand7.Enabled=FalseEnd SubPrivate Sub Command7_Click()Text1.Text=“Text2.Text=“Text3.Text=“Text4.Text=“Label1.Enabled=TrueCommand6.Enabled=TrueCommand4.Enabled=FalseCommand3.Enabled=FalseCommand2.Enabled=FalseComman
27、d1.Enabled=FalseCommand7.Enabled=FalseEnd SubPrivate Sub Form_Load()Command1.Enabled=FalseCommand2.Enabled=FalseCommand3.Enabled=FalseCommand4.Enabled=FalseCommand7.Enabled=FalseEnd Sub第三步:调试并运行程序。第四步:按题目要求存盘。(2) 解析 控件是否可用可利用其 Enabled 属性设置,当该值为 True 时可用,为 False 时不可用(灰色);计算从 1 到 n 的数字的和可从 1 开始向后计算,每一
28、步计算的结果都保留然后再用上一步计算的值和后面的数字计算;清除可使文本框的内容置空来实现(文本框.Text=“);显示结果框内的文字不可修改,是通过 Locked 属性变为 True 时锁定的。解题步骤:第一步:建立界面并设置控件属性。程序中用到的控件及其属性见表 16-4。表 16-4标 题 属 性 设 置 值Label Name CaptionLabel1该程序的功能是求SS=1+2+3+nLabel Name CaptionLabel2请输入:n(0n999999999)Label Name Caption Label3 结果显示框Text Name Text1Text Name Cap
29、tion Text2 TrueCommandbuttonNameCaptionCommand1显示结果CommandbuttonNameCaptionCommand清除CommandbuttonNameCaptionCommand关闭第二步:编写程序代码:程序提供的代码:Option ExplicitPrivate Sub Command1_Click()Dim i As DoubleDim sum As DoubleDim n As Doublesum=0n=Val(Text1.Text)For i=1 To n sum=?Next 1Text2.Text=?Command1.Enabled
30、=FalseCommand2.Enabled=TrueEnd SubPrivate Sub Command2_Click()Text1.Text=?Text2.Text=?Command1.Enabled=TrueCommand2.Enabled=FalseEnd SubPrivate Sub Command3_Click()EndEnd SubPrivate Sub Form_Load()Command1.Enabled=FalseCommand2.Enabled=FalseEnd SubPrivate Sub Text1_Change()Command1.Enabled=TrueEnd S
31、ubOption ExplicitPrivate Sub Command1_Click()Dim i As DoubleDim sum As DoubleDim n As Doublesum=0n=Val(Text1.Text)For i=1 To nsum=sum+iNext iText2.Text=sumCommand1.Enabled=FalseCommand2.Enabled=TrueEnd SubPrivate Sub Command2_Click()Text1.Text=0Text2.Text=0Command1.Enabled=TrueCommand2.Enabled=False
32、End SubPrivate Sub Command3_Click()EndEnd SubPrivate Sub Form_Load()Command1.Enabled=FalseCommand2.Enabled=FalseEnd SubPrivate Sub Text1_Change()Command1.Enabled=TrueEnd Sub第三步:调试并运行程序。第四步:按题目要求存盘。)解析:三、3 综合应用题(总题数:1,分数:30.00)3.注意:下面出现的“考生文件夹”均为 c:/wexam/25160001。在考生文件夹下有工程文件 sjt5.vbp 及窗体文件 sjt5.frm
33、,该程序是不完整的,请在有?号的地方填入正确内容,然后删除?及所有注释符(即号),但不能修改其他部分。存盘时不得改变文件名和文件夹,相应的 dat 文件也保存到考生文件夹下,否则没有成绩。如图 16-4 所示。本题描述如下:在名称为 Form1 的窗体上有五个 Labe1 控件和两个命令按钮,数据文件 grade.dat 存放一些成绩。按“开始”按钮后,从考生文件夹下的 grade.dat 中读出数据并求出它们的平均数,将结果写入考生文件夹下的average.dat 文件中;执行完毕,“开始”按钮变成“完成”,且无效(变灰)。(分数:30.00)_正确答案:(解析 命令按钮的标题由 Capti
34、on 属性来设置,单击命令按钮触发 Click 事件;执行完毕,“开始”按钮变成“完成”,且无效(变灰):Open grade.dat For Input As #1 以只读方式打开文件,读出数据;求平均数则先求每个数的和然后除以数字的个数即可;程序中用到的 Input 读文件的格式为:Input#文件号,变量列表,在将数据写入文件时,要使用 Write#语句而不是使用 Print#语句,因为Write#语句能够将各个数据项正确的区分开。解题步骤:第一步:建立界面并设置控件属性。程序中用到的控件及其属性见表 16-5。表 16-5控 件 属 性 设 置 值label Name Caption
35、Label1 考试文件夹/GRADE.DATlabel Name CaptionLabel2考试文件夹/AVERAGE.DATlabel Name Caption Label3 源文件:label Name Label4 目标文件:label Name CaptionLabel5从源文件中读出数据并求出它们的平均数后,写入目标文件CommandbuttonNameCaptionCOMSTART开始CommandbuttonNameCaptionCOMSTART退出第二步:编写程序代码。程序提供的代码:Private Sub COMEXIT_Click()EndEnd SubPrivate Su
36、b COMSTART_Click()Dim g As Single, N As Integer, S As Singlemyfile1=App.Path & “/“ & “grade.txt“myfile2=App.Path & “/“ & “average.txt“Open ? For ? As #1Open ? For ? As ?Do While Not EOF(1) Input ?, gN=N+1S=S+gLoopClose #1S=S / ?Write #2, ?CloseCOMSTART.Caption=COMSTART.Enabled=End Sub参考代码:Private Su
37、b COMEXIT_Click()EndEnd SubPrivate Sub COMSTART_Click()Dim g As Single, N As Integer, S As Singlemyfile1=App.Path & “/“ & “grade.txt“myfile2=App.Path & “/“ & “average.txt“Open myfile1 For Input As #1Open myfile2 For Output As #2Do While Not EOF(1)Input #1, gN=N+iS=S+gLoopClose #1S=S/NWrite #2, SCloseCOMSTART.Caption=“完成“COMSTART.Enabled=FalseEnd Sub第三步:调试并运行程序。第四步:按题目要求存盘)解析: