《Visual Basic 程序设计》作业
参考答案
作业1
一、选择题
题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
答案 | D | B | C | C | B | D | A | B | A | C |
题号 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
答案 | C | C | B | D | A |
二、填空题
1.视图 工具箱
2.对象 事件
3..vbp .frm
4.窗体 控件 菜单
5.完成某种特定的功能 对象名.方法名 Form1.Show
6.Multiline True
7.4000
8.AutoSize True
9.窗体布局窗口
10.txtshow.text="GOOD WORK!"
11.Click()、frm1.show
12.单击 双击 装载 多 响应某个事件后所执行的程序代玛 cmd1 Click
13.完成某种特定的功能 对象名.方法名 Form1.Show
14.工具 选项 选项 自动语法检测
15.Timer Interval ms
三、问答题
1.参考答案
答:可视化编程是目前最直观的一种编程方法,人们一般用Visual一词表示它。之所以叫做“可视”,是指你无需编程,仅通过直观的操作方式即可完成界面的设计工作。因此,可视化语言是目前最好的Windows应用程序开发工具。
在这种语言中引入了控件的概念,每个控件都有若干方法和事件,并通过一系列的属性来控制控件的外观。利用这些控件,编程过程就如同画画,随意点几下鼠标,一个按钮就完成了,这些工作在使用传统编程语言的情况下,需要编写大量复杂的程序代码才能实现。
可视化编程主要用到了事件驱动机制,其原理是:当应用程序运行后,程序处于等待状态,当某个事件发生后,程序就去执行此事件的事件过程,当这个事件过程执行完后,应用程序又处于等待另一个事件发生的状态。
2.参考答案
答:对象是代码和数据的封装体,在VB中,“数据”表现为属性,“代码”则表现为事件和方法。建立一个对象后,其操作通过与该对象的有关属性、事件和方法来描述。
属性是一个对象的基本特性,每个对象都有它自己的属性。通过修改对象的属性,可以改变对象的外观和功能。
方法就是要对象执行的动作,一般可以将它理解为VB提供的一种特殊的过程和函数。其特殊性在于,这些过程和函数是封装在对象内部的,是在对象上实施的某种操作功能。
事件就是在对象上所发生的事情。对象的事件是由VB预先设置好的、能被对象识别的动作。用户不能建立新的事件,但可以根据需要对事件进行编程。从非严格意义上讲,可以将事件理解为一种特殊的方法。
3.参考答案
答:传统的面向过程的应用程序中,应用程序自身控制了执行哪一部分代码和按何种顺序执行代码,程序从第一行代码开始执行并按应用程序中预定的路径执行,用户无法改变程序的执行流程。
在事件驱动的应用程序中,程序的执行发生了根本的变化,代码不是按照预定的路径执行,而是在响应不同的事件时执行不同的代码片段。每个对象都有一个相应的事件集,每个事件发生都要执行一段程序代码。事件可以由用户操作触发,也可以由操作系统或其它应用程序的消息触发,甚至可由应用程序本身的消息触发。这些事件的顺序决定了代码执行的顺序,因此,应用程序每次运行所经过的代码路径是不确定的,它的执行流程由用户来决定。在程序设计时,不需要指出先执行哪部分代码,或按什么顺序执行代码,只需编写针对某个事件的程序代码即可。
4.参考答案
答:事件驱动是VB应用程序的基本机制,其基本过程是:
(1)启动应用程序,装载和显示窗体。
(2)窗体或窗体上的控件等待事件的发生。事件可由用户引发(例如键盘操作或鼠标点击)、可由系统引发(例如定时器控件)、也可由代码间接引发(例如当代码装载其他窗体时产生的Load事件)。
(3)当某个事件发生后,执行其对应的事件过程代码。
(4)重复执行第2和第3步。直到遇到End语句或单击“结束”按钮停止程序的运行。
四、程序设计题
1.
Private Sub Form_Load()
Text1.Text = "VB程序设计"
Text1.FontSize = 16
End Sub
Private Sub Command1_Click()
Text1.Visible = False
End Sub
Private Sub Command2_Click()
Text1.Visible = True
End Sub
2.
Private Sub Command1_Click()
Text1.Text = ""
Text2. Text = ""
[Text3.Text = ""
End Sub
Private Sub Command2_Click()
If Text1 Text = " " Or Text2.Text = "" Or Text3.Text = " " Then
MsgBox "成绩输入不全!"
Else
Text4.Text = (Val(Text1.Text) + Val(Text2.Text) + Val(Text3.Text)) /3
End If
Sub End
Private Sub Command3_Click()
Unload Me
End Sub
3.
Private Sub Command1_Click()
If Text1.Text = "" Then
MsgBox "至少要输出单价!"
Text1.SetFocus
Exit Sub
End If
If Text2.Text = "" Then Text2.Text = 1
If Text3.Text = "" Then Text3.Text = 1
Text4.Text = Text1.Text * Text2.Text * Text3.Text
End Sub
作业2
一、选择题
题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
答案 | B | C | D | B | D | A | B | C | A | D |
题号 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
答案 | C | B | D | C | A | B | C | B | D | B |
二、填空题
1.下拉式菜单 弹出式菜单
2.打开 另存为 颜色 字体 打印
3.文本框 列表框
4.Option Base 1
5.Call语句
6.工程 工程属性 通用 Form1.Show
7.0
8.Sub过程的过程名不能返回值,而Function过程能通过过程名返回值
9.窗体模块 标准模块 类模块
10.移出内存 无效状态
11.(1)2*Cos(*Sin(/(2*()
(2) Sqr(s*(s-a)*(s-b)*(s-c))
(3) Sin(45*3.14/180)
12.(1)x>=1 And x<12
(2) A+B>=C Or a-c<=c
(3) a>0 And b>0 Or(a<0 And b<0)
13.False
14.For While Do
15.3
三、阅读下列程序,给出程序运行结果。
1.程序运行后,单击窗体,输出结果为:5050。
2.
3.
4.
3.4 3
5.
*
***
*****
*******
*********
四、程序设计题
1.
Private Sub Command1_Click()
Dim x As Single, y As Single
x = Val(Text1.Text)
If x < 100 Then
y = x
Else
If x < 200 Then
y = 9.5 * x
Else
If x < 300 Then
y = 0.9 * x
Else
If x < 500 Then
y = 0.8 * x
Else
y = 0.7 * x
End If
End If
End If
End If
Text2.Text = y
End Sub
2.
Private Sub Form_Load()
Dim x As Integer
x = 100
Do Until x > 200
If x Mod 3 <> 0 Then
Text1.Text = Text1.Text & Str(x) & Chr(13) & Chr(10)
End If
x = x + 1
Loop
End Sub
3.
Private Sub Form_Click()
Print "*";Tab(9);3,Tab(18);6;Tab(27);9;Tab(36);12
Print
For I=15 to 18
Print I;
For j=3 to 12 Step 3
Print Tab(3*j);j*I;
Next j
Print
Next I
End sub
4.
Private Sub Command1_Click()
Unload Me
End Sub
Private Sub Option1_Click()
Text1.Text = 10 * 2
End Sub
Private Sub Option2_Click()
Text1.Text = 10 / 2
End Sub
Private Sub Option3_Click()
Text1.Text = 10 + 2
End Sub
Private Sub Option4_Click()
Text1.Text = 10 - 2
End Sub
5.
Private Function Day(n As Integer)
Select Case n
Case 0
Day = "星期日" & Chr(13) & "(Sunday)"
Case 1
Day = "星期一" & Chr(13) & "(Monday)"
Case 2
Day = "星期二" & Chr(13) & "(Tuesday)"
Case 3
Day = "星期三" & Chr(13) & "(Wednesday)"
Case 4
Day = "星期四" & Chr(13) & "(Thursday)"
Case 5
Day = "星期五" & Chr(13) & "(Friday)"
Case 6
Day = "星期六" & Chr(13) & "(Saturday)"
End Select
End Function
Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim n As Integer
n = Val(Text1.Text)
If KeyAscii = 13 Then
If n >= 0 And n < 7 Then
Label1.Caption = Day(n)
Else
MsgBox "请输入0~6之间的整数!"
End If
End If
Text1.SelStart = 0
Text1.SelLength = Len(Text1.Text)
End Sub
6.
新建一个工程,在默认的窗体Form1上放置一个Picture控件,然后编写如下代码。
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then
MsgBox "You pressed right Button"
Picture1.MousePointer = vbArrow
End If
End Sub
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Picture1.MousePointer = vbUpArrow
End Sub
7.
Private Sub Form_Load()
List1.AddItem "李敏"
List1.AddItem "张华"
List1.AddItem "吕晓烨"
List1.AddItem "赵巍"
List1.AddItem "袁莉"
List1.AddItem "王津"
List1.AddItem "何小渴"
List1.AddItem "崔宁"
List1.AddItem "陈曦"
List1.AddItem "刘伟楠"
End Sub
Private Sub Command1_Click()
If Text1.Text <> "" Then
List1.AddItem Text1.Text
Text1.Text = ""
Else
MsgBox "请在文本框中输入信息!"
End If
End Sub
Private Sub Command2_Click()
List1.RemoveItem List1.ListIndex
End Sub
Private Sub Command3_Click()
If Command3.Caption = "修改" Then
Text1.Text = List1.Text
Text1.SetFocus
Command1.Enabled = False
Command2.Enabled = False
Command3.Caption = "修改确认"
Else
List1.List(List1.ListIndex) = Text1.Text
Command1.Enabled = True
Command2.Enabled = True
Text1.Text = ""
Command3.Caption = "修改"
End If
End Sub
Private Sub List1_Click()
If List1.ListIndex <> -1 Then
Command2.Enabled = True
Command3.Enabled = True
End If
End Sub
作业3
一、选择题
题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
答案 | B | B | B | A | C | C | D | C | C | C |
题号 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
答案 | B | B | A | B | C | C | B | A | C | B |
题号 | 21 | |||||||||
答案 | A |
二、填空题
1.Output
2.FileCopy"c:\command.com", "d:\command.com"
3.Kill"d:\tem.tmp"
4.Open"SEQNEW.DAT"For Output As # 1
5.Open"SEQOLD.DAT"For Input As # 2
6.右 上
7.False
8.Picture1.Line(500,500)-(1000,1000),RGB(255,0,0),BF
9.520
10.ActiveConnection
11.外部数据库、远程数据库
12.ADOrs("学号")
13.增加、删除、修改(或者Select、Delete、Update)
14.Select * from Table1 Where 学号='001'
15.本地数据库、远程数据库
三、程序设计题
1.
Private Sub Form_Load()
Drive1.Drive = "c:\"
File1.Pattern = "*.bmp;*.gif;*.jpg"
End Sub
Private Sub Drive1_change()
Dir1.Path = Drive1.Drive
End Sub
Private Sub Dir1_Change()
File1.Path = Dir1.Path
End Sub
Private Sub File1_click()
If Right(File1.Path, 1) = "\" Then
f$ = Form1.File1.Path + Form1.File1.FileName
Else
f$ = Form1.File1.Path + "\" + Form1.File1.FileName
End If
Picture1.Picture = LoadPicture(f$)
Picture1.AutoSize = True
End Sub
2.
Private Sub Form_Click()
Dim i As Single, twopie As Single
twopie = 8 * Atn(1) '求pi
DrawWidth = 2 '设置点的大小
Scale (-twopie, 1)-(twopie, -1) '设置坐标系
For i = -twopie To twopie Step twopie / 360 '画x轴
PSet (i, 0)
Next i '标x轴
CurrentY = 0
CurrentX = -twopie
Print "-2pi";
CurrentX = -twopie / 2
Print "-pi";
CurrentX = twopie / 2
Print "pi";
CurrentX = twopie - 0.6
Print "2pi";
Print "p"
For i = -1 To 1 Step 0.01 '画y轴
PSet (0, i)
Next i
CurrentX = 0 '标y轴刻度
For i = -1 To 1 Step 0.5
CurrentY = i
Print i
Next i
For i = -twopie To twopie Step 0.1 '画余弦曲线
PSet (i, Cos(i))
Next i
End Sub
3.
Private Sub Check1_Click()
If Check1.Value = 1 Then
Line1.BorderWidth = 4
Else
Line1.BorderWidth = 1
End If
End Sub
Private Sub Option1_Click(Index As Integer)
Line1.BorderWidth = 1
Check1.Value = 0
Select Case Index
Case 1
Line1.BorderStyle = 1
Case 2
Line1.BorderStyle = 2
Case 3
Line1.BorderStyle = 3
End Select
End Sub
4.
Private Sub Option1_Click(Index As Integer)
Select Case Index
Case 0
Shape1.Shape = 0
Case 1
Shape1.Shape = 1
Case 2
Shape1.Shape = 3
Case 3
Shape1.Shape = 4
End Select
End Sub
Private Sub Option2_Click(Index As Integer)
Select Case Index
Case 0
Shape1.FillStyle = 1
Case 1
Shape1.FillStyle = 3
Case 2
Shape1.FillStyle = 2
Case 3
Shape1.FillStyle = 6
End Select
End Sub
Private Sub Option3_Click(Index As Integer)
Shape1.BorderWidth = 1
Select Case Index
Case 0
Shape1.BorderStyle = 0
Case 1
Shape1.BorderStyle = 1
Case 2
Shape1.BorderStyle = 4
Case 3
Shape1.BorderStyle = 2
Case 4
Shape1.BorderStyle = 3
End Select
End Sub
5.(以SQL Server数据库为例)
'声明对象变量ADOcn,用于创建与数据库的连接
Private ADOcn As Connection
Private Sub ReadFromTable()
Dim strtmp As String
Dim ADOrs As New Recordset
ADOrs.ActiveConnection = ADOcn
ADOrs.Open "select * from students order by 学号"
MSFlexGrid1.Clear
MSFlexGrid1.Rows = 0
MSFlexGrid1.Cols = 3
strtmp = "学号" + vbTab + "姓名" + vbTab + "专业"
MSFlexGrid1.AddItem strtmp
Do While Not ADOrs.EOF
strtmp = ADOrs("学号") + vbTab + ADOrs("姓名") + vbTab + ADOrs("专业")
MSFlexGrid1.AddItem strtmp
ADOrs.MoveNext
Loop
MSFlexGrid1.FixedCols = 0
MSFlexGrid1.FixedRows = 1
End Sub
Private Sub Command1_Click()
Unload Me
End Sub
Private Sub Form_Load()
'定义数据库连接字符串
Dim strDB As String
'用于连接SQL Server数据库,其中:
'Server为服务器名称
'User ID为登录账号
'Password为登录口令
'Database为具体的数据库名
strDB = "Provider=SQLOLEDB;LSF;User ID=sa;Password=;Database =学生"
'如果还没有建立与数据库的连接,则用以下代码创建。
If ADOcn Is Nothing Then
Set ADOcn = New Connection
ADOcn.Open strDB '连接SQL Server数据库
End If
ReadFromTable '调用过程显示students表中的记录
End Sub
作业4
一、选择题
题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
答案 | A | B | A | D | B | C | A | B |
二、填空题
1.A.DataArrival事件、SendData方法
2.TCP/IP(或者回答TCP协议)
3.EXE
4.用户自定义接口、标准接口
5.LocalIp方法
6.GetData方法
7.使用服务程序处于侦听状态;
8.Winsock
9.实时错误、逻辑错误
10.On Error Goto 0
三、问答题
1.参考答案
答:Socket是TCP/IP网络中最为通用的API(应用程序接口),也是在Internet上进行应用程序开发最为通用的API。它为网络中的每台计算机中提供了一个通信端口,通过这个端口,任何两台具有Socket接口应用程序就可进行信息收发通信了。程序员只需要对Socket接口进行数据的读写操作,根本不必关心两台计算机间的通信细节就能够完成数据的发送和接收工作。基于Socket的通信过程如图1所示。
图1
2.参考答案
答:VB中一般可按下列步骤设计错误处理程序:
第1步:捕获错误,并强制程序跳转
即在错误发生时,捕获并告知应用转向哪段代码进行错误处理。VB中通常可采用On Error GoTo语句启用错误捕获机制。
第2步:编写错误处理程序,对所有可预见的错误做出反应
编写错误处理程序的第一步是添加一个行标识符,比如“CheckError:”,以标志错误处理程序的开始。行标识符的名称最好具有良好的可读性,并且后面必须跟一个冒号。常规错误处理程序通常放在过程的结束处,紧跟Exit Sub或Exit Function的行标识符之后。这样在没有错误发生时,过程就不会执行错误处理程序了。
第3步:退出错误处理程序
通常情况下,只有当错误处理程序位于过程中间位置时,才需要用到专门的错误处理程序退出语句。一般可使用Resume或Resume Next语句退出错误处理程序。Resume语句会继续执行引发错误的那句代码,而Resume Next语句则会跳过该语句,执行引发错误代码的下一句代码。如果通过错误处理程序能够修正错误,则可以使用Resume语句,否则就使用Resume Next语句,或者直接使用Exit Sub或Exit Function语句直接退出过程。
3.参考答案
答:调试程序是一件复杂的工程,不但要求程序员对系统设计结果非常熟悉,思路清晰,更需要不断地在实践中积累经验。以下技巧可供参考:
首先,应事先做好备份:尽管VB提供了众多的调试工具,但要利用这些工具查找、定位程序中的错误并非易事,对于一些规模较大的程序,即使是有经验的程序员也常常要损失好几小时甚至几天的时间来查找错误。在调试过程中,很容易意外地修改、覆盖或删除掉必要的代码部分。因此事先做好备份非常重要。
其次,尽可能地分离受怀疑的程序:对于那些代码规模较大,窗口众多的程序而言,如果能将错误的范围定位于某个窗体或某段代码,则可以使用分离程序的调试方法。基本思路是:试着找到出错的代码行(块)或窗体,选择并复制这些代码到一个新的工程中,然后运行新工程,看一看是否还会出现同样的错误。这样就可以尽可能地排除程序其他部分的干扰,提高调试的效率。
第三,缩小搜索范围:如果有可能的话,可删除工程中任何第三方控件和自定义控件,或者任何看来与问题无关的代码,逐步缩小搜索范围。或者采用相反的策略,先调试某一段代码或窗体,再象搭积木似的逐步扩大调试的范围。这种方法与“分离受怀疑的程序”方法相结合,对复杂大系统的调试非常有效。
最后,使用MsgBox语句:如果怀疑程序的错误是由于执行路径或者变量的值不正确等原因造成的,除了采用设置断点的方式进行调试外,还可以借助于MsgBox语句。即在程序运行路径的关键点上插入一系列的MsgBox语句,用来展示程序运行的路径和重要变量的值。
4.参考答案
答:利用Winsock控件开发网络通信系统时,通常要涉及服务器和客户机两类应用程序。一般过程是:
(1)服务器程序的开发模式
* 服务器程序必须设置好LocalPort属性,作为侦听端口。该值可设置成任意一个整数,只要其他应用程序没有使用过的值均可,但习惯上应大于1000。
* 使用Listen方法使服务器进入侦听状态,等待客户机程序的连接请求。
* 客户机程序发出连接请求后,将触发服务器程序的ConnectionRequest事件,该事件得到一个参数requestID。
* 服务器程序使用Accept方法接受客户机程序的requestID请求。至此,服务器程序就可以使用SendData方法向客户机发送数据了。此时应特别注意两点:一是Accept方法必须用到上一步得到的requestID作为其参数;二是在执行Accept方法前,服务器仍处于侦听状态,此时应首先使用Close方法关闭服务器,然后再调用Accept方法。
* 当服务器程序接收到数据时,会产生DataArrival事件。在该事件中可以使用GetData方法接收数据。
(2)客户机程序的开发模式
* 客户程序首先应设置好RemoteHost属性,用来指向运行服务器程序的主机名或IP地址。
* 设置RemotePort属性,用来指向服务器程序的侦听端口号。
* 使用Connect方法向服务器提出连接请求。
* 如果服务器接受了上述连接请求,客户机程序会产生Connect事件。可以根据需要,在此事件中编写程序,比如使用MsgBox函数向用户提示“连接已成功”之类的信息。
* 连接成功后,就可以根据需要使用SendData方法向服务器发送数据了。
* 当客户机程序接收到数据时,会产生DataArrival事件,可以用GetData方法接收数据。
四、程序题
1.共有两处错误,改正如下:
错误1:'排序
For c=1 To 20
For j=c+1 To 20
IF A(c)>A(j) Then
T=A(j)
A(j)=A(c)
A(c)=T
End If
Next
Next
错误2:'在窗体上输出结果
Cls
For c=1 To 20
Print A(c)
Next c
2.程序运行结果及代码请参考主教材和实验教材相关内容。
1