Visual Basic 6.0程序设计

Download Report

Transcript Visual Basic 6.0程序设计

课程说明
教材与课时安排

教材
理论教材:VB程序设计简明教材(第二版)
龚沛曾、陆慰民等编著
高等教育出版社
实验教材: VB程序设计实验指导教程
刘光萍等编著 冶金工业出版社

课时安排
理论授课 :36学时
VB上机训练:18学时
1
上机安排:
上机地点:机房(?楼)
上机时间:另见上机课表
上机内容:
随教学进度的基础训练(上机调试每次作业)
第3~10周共18学时:VB程序设计实验教程
要求:
所有作业必须独立完成
上机作业必须经上机调试通过(抽查)
上机考勤3次缺席,按平时成绩不及格处理
发现上机时间上网,按缺席一次处理
2
做完上机作业后,上交实验报告(学习委员收齐)
Visual Basic 程序设计简明教程
第一章
Visual Basic程序设计概述(2)
第二章 VB简单的程序设计(6)
第三章 VB语言基础(4)
第四章 基本的控制结构(8)
第五章 数组(5)
第六章 过程(4)
第七章 常用控件(2)
第八章 界面设计(2)
第九章 文件(2)
第十章 图形(1)
第十一章 数据库技术(自学)
第十二章 系统开发案例 (自学)
3
第一章 Visual Basic概述
1.1
1.2
1.3
1.4
4
程序设计基本概念
VB的发展和特点
VB的安装和启动
VB集成开发环境
本书目录
本章目录
1.1程序设计基本概念
1.1.1程序和程序设计
1.程序
人们想用计算机解决一个问题,必须事先设计好计算机处理信息的步骤,把
这些步骤用计算机能够识别的指令编写出来并送入计算机执行,计算机才能
按照人的意图完成指定的工作。我们把计算机能执行的指令序列称为程序,
而编写程序的过程称为程序设计。
例如,下面是某一个学校颁奖大会的程序:
 宣布大会开始
 介绍出席大会的领导
程序主要用于描述完成某项功能所
 校长讲话
涉及的对象和动作规则
 宣布获奖名单
领导、校长、名单、代表、话、奖
 颁奖
等都是对象;
 获奖代表发言
而宣布、介绍、讲、颁等都是动作
 宣布大会结束
5
上一页
下一页
本章目录
Visual Basic编写的程序
显示教龄30年的教职工姓名
Sub Form_Click()
Open "zg.dat" For Input As #1
Do While Not EOF(1)
Input #1, 姓名, 部门, 教龄
If 教龄 >= 30 Then Print 姓名, 部门
Loop
Close #1
End Sub
6
上一页
下一页
本章目录
1.1.2程序设计语言
人与计算机交流使用的是“程序设计语言”。
同人类语言一样,程序设计语言也是由字、词
和语法规则构成的一个系统。
程序设计语言发展的过程,分为三类:
1.机器语言
2.汇编语言
3.高级语言
7
上一页
下一页
1.2 Visual Basic的发展和特点
• 要介绍Visual Basic,不能不提到BASIC语言。
BASIC是英文Beginner’s All-purpose Symbolic
Instruction Code(初学者通用符号指令代码)
的缩写,它是专门为初学者设计的高级语言。
8
• Visual Basic是Microsoft公司于1991年推出的基于窗口的
可视化程序设计语言。“Visual”是“可视化的”、“形象
化的”的意思。Visual Basic的语法与BASIC语言的语法基
本相同,因此Visual Basic也具有易学易用的特点,此外它
还提供了一套可视化设计工具,大大简化了Windows程序界
面的设计工作,同时其编程系统采用了面向对象、事件驱动
机制,与传统BASIC有很大的不同。目前Visual Basic的最
新版本是Visual Basic 6.0(简称VB 6.0),其功能十分强
大,应用Visual Basic可以方便地完成从小的应用程序,到
大型的数据库管理系统 、多媒体信息处理、功能强大的
Internet应用程序等各项任务。
9
 学习版:使用一组工具来创建功能完备的Windows应用程序,
(它包括所有的内部控件连同网络、数据绑定等控件)适用
于初学者
 专业版:在学习版的基础上添加了一些专门的工具和一个报表
编制工具。它主要针对计算机专业开发人员,(除了具有学
习版的全部功能外,还包括ActiveX和Internet控件开发工具
之类的高级特性)
 企业版:包括了用于客户/服务器应用程序的工具。(除了具
有专业版的全部功能外,还包括了一些特殊的工具)
 VB 6.0安装完成后,“Microsoft Visual Basic 6.0中文版”
菜单选项即加入到“开始”菜单的“程序”组中。单击其中
的“Microsoft Visual Basic 6.0中文版”即可启动VB 6.0。
10
1.2.2 Visual Basic功能特点
本章目录
1 引例
例1.1简单的动画演示。
一行文字“欢迎使用Visual Basic”在具有背景图案
的窗体中上、下移动(稍改动也可左、右移动)。
移动方法有两种:单击手动按钮,移动50单位;单
击自动按钮,按时钟触发频率连续移动;当内容超
出窗体范围时,进行反弹。
11
上一页
下一页
本章目录
VB功能特点
2 功能特点
1) 具有面向对象的可视化设计工具
2) 事件驱动的编程机制
3) 提供了易学易用的应用程序集成开发环境
4) 结构化的程序设计语言
5) 强大的数据库功能
6) Active技术
7) 网络功能
8) 多个应用程序向导
9) 完备的Help联机帮助功能
12
上一页
下一页
本章目录
1.3 VB的安装和启动
1.3.1 安装
VB6.0是Windows下的一个应用程序,有学习版、专业版和企
业版三种版本形式。
VB6.0系统可以在一张CD盘上,也可以在Visual Studio产品的
第一张CD盘上。一般都有一个VB自动安装程序,也可以执行
VB6.0子目录下的Setup.exe,在安装程序的提示下进行,对初
学者可采用典型安装方式。
VB6.0联机帮助文件都使用MSDN文档的帮助方式,联机帮助
文件不在VB6.0系统盘上,而与Visual Studio产品的帮助集合
在两张CD盘上,在安装过程中,系统会提示插入MSDN盘。
13
上一页
下一页
本章目录
1.3.2 启动
选择程序菜单中的Microsoft Visual Basic 6.0中文版程序,就可
启动VB 6.0。
在VB 6.0窗口列出了VB能够建立的应用程序类型,初学者只要
选择默认标准.EXE。
在该窗口中有三个按钮:
新建:建立新工程
现存:选择和打开现有的工程
最新:列出最近使用过的工程
单击新建按钮,就可创建该
类型的应用程序。
14
上一页
下一页
本章目录
1.4 集成开发环境
工程窗口
工具箱
窗体窗口
属性窗口
窗体布局
立即窗口
15
上一页
下一页
本章目录
1.主窗口
应用程序窗口由标题栏、菜单栏和工具栏组成
2.窗体(form)窗口
设计vb程序的 界面
3.代码(code)窗口
编辑窗体、标准模块中的代码
4.属性(properties)窗口
所有窗体或控件的属性设置
5.工程资源管理器(project expror)窗口
保存一个应用程序所有的文件
6. 工具箱(toolbox)窗口
显示各种控件的制作工具,供用户在窗体上设计
16
上一页
下一页
本章目录
1.4.1 窗体窗口
窗体是建立VB应用程序的主要部分,用户通过与窗体上
的控制部件交互可得到结果。每个窗体窗口必须有一个
惟 一 的 窗 体 名 字 , 建 立 窗 体 时 默 认 名 为 Form1 、
Form2……
在设计状态的窗体由网格点构成,方便用户对控件的定
位,网格点间距可以通过工具|选项命令,在通用标签的
窗体设置网格中输入宽度和高度来改变;
运行时可通过属性控制窗体的可见性(窗体的网格始终不
显示)。
一个应用程序至少有一个窗体窗口,用户可在应用程序
中拥有多个窗体窗口。
17
上一页
下一页
本章目录
1.4.2 属性窗口
对象列表框
所有窗体或控
件的属性,如
颜色、字体、
大小等,可以
通过属性窗口
来修改。
属性显示排列方式
属性列表框
属性含义说明
18
上一页
下一页
1.4.3 工程资源管理器窗口
本章目录
工程资源管理器
窗口保存一个应
用程序所有属性
以及组成这个应
用程序所有的文
件。工程文件的
扩展名为 .VBP。
19
上一页
下一页
本章目录
1.4.4 代码窗口
代码窗口用来显示和编辑程序代码。打开代码窗口方法:
(1) 从工程窗口中选择一个窗体或标准模块,并选择查看代码
按钮;
(2) 从窗体窗口中打开代码窗口,可用鼠标双击一个控件或窗
体本身;
(3) 从视图菜单中选择代码窗口命令。
“过程”下拉式列表框
“对象”下拉式列表框
“代码”框
“过程查看”按钮
“全模块查看”按钮
20
上一页
下一页
本章目录
1.4.5 工具箱窗口
图形框(Picture Box)
工具箱窗口由21个被绘制成按钮形式的
文本框(Text Box)
图标所构成,显示了各种控件的制作工
命令按钮(Command Button)
具,利用这些工具,用户可以在窗体上
单选按钮(OptionButton)
设计各种控件。其中20个控件称为标准
列表框(List Box)
控件(注意,指针不是控件,仅用于移动
垂直滚动条(VScrollBox )
窗体和控件,以及调整它们的大小)。
驱动器列表框(DriveListBox)
用户也可通过工程|部件命令将来装入
文件列表框(FileList Box)
Windows中注册过的其他控件装入到工
直线(Line)
具箱。
数据控制(Data)
21
上一页
下一页
第二章 简单的VB程序设计
2.1 VB对象的概念
2.2 建立简单的应用程序
2.3 窗体和基本控件
2.4 工程的管理及环境的设置
2.5 使用帮助系统
2.6 程序调试
22
本书目录
2.1 Visual Basic对象的概念
本章目录
2.1.1 对象和类
1.对象
可以把对象想象成日常生活中的某个实在的物体。
例如,一个人、一辆汽车、一张桌子、一台电脑等都是一个
个对象。
任何对象都具有各自的特征(属性)、行为(方法)。
人有身高、体重、视力、听力等特征;也具有起立、行走、
说话、使用电脑、踢足球等行为。
在VB中,将反映对象的属性和行为封装在一起,是面向对
象编程的基本元素。
23
上一页
下一页
本章目录
2.类的概念
类是创建对象实例的模板,是同种对象的集合与抽象,它包
含所创建对象的属性描述和行为特征的定义。
例如,人类是人的抽象,一个个不同的人是人类的实例。各
个人具有不同的身高、体重等属性值和不同的行为。
在VB中,工具箱上的可视图标是VB系统设计好的标准控件
类。通过将控件类实例化,可以得到真正的控件对象,也就是
当在窗体上画一个控件时,就将类转换为对象,即创建了一个
控件对象,简称为控件。
24
上一页
下一页
本章目录
例:工具箱内的TextBox是类,它确定了TextBox的属性、方
法和事件。窗体上显示的是两个Text对象 。
TextBox 类
Text
对象
25
上一页
下一页
3.对象的建立和编辑
• 对象的建立
(1)在工具箱中单击左键进行选择
(2)在窗体上按下鼠标左键拖动到适当大小
• 对象的选定
单个对象:单击对象
多个对象:
(1)先选定一个对象,按CTRL键再单击其他对象
(2)拖动鼠标,将欲选定的对象包围在一个虚线框内
• 对象的复制和删除
复制:选中对象->单击复制->单击粘贴 ->弹出的对话框中
选“否”
删除:选中对象,按DEL键
26
2.1.2 对象的属性、事件和方法
本章目录
属性、事件和方法构成了对象的三要素。
1. 属性
属 性 保 存 对 象 中 的 数 据 。 例 如 , 控 件 名 称 (Name) 、 标 题
(Caption)、颜色(Color)、字体(FontName)等属性决定了对象
展现给用户的界面具有什么样的外观及功能。
可以通过以下两种方法设置对象的属性:
1) 在设计阶段利用属性窗口直接设置对象的属性值
2) 在程序运行时间通过语句 对象名.属性名=属性值 实现
例如:Command1.Caption="确定"
注意:有一些属性只能在设计阶段通过属性窗口设置,在程
序运行阶段不可改变,称为只读属性。
27
上一页
下一页
本章目录
事件
2. 事件、事件过程和事件驱动
(1) 事件
事件就是发生在对象上的事情。同一事件,作用于不同的对
象,就会引发不同的反应,产生不同的结果。
例如,在学校,教室楼的铃声是一个事件,教师听到铃声就
要准备开始讲课,向学生传授知识;学生听到铃声,就要准备
听教师上课,接受知识;而行政人员对铃声可不于响应。
在VB中,系统为每个对象预先定义好了一系列的事件。
例如,单击(Click)、双击(DblClick)、改变(Change)、获取
焦点(GotFocus)、键盘按下(KeyPress)等。
28
上一页
下一页
本章目录
事件过程
(2) 事件过程
应用程序处理事件的步骤就是事件过程。它是针对某一对象
的过程,并与该对象的一个事件相联系。
VB应用程序设计的主要工作就是为对象编写事件过程中的程
序代码。
事件过程的形式如下:
Sub 对象名_事件 ([参数列表])
… 事件过程代码
End Sub
例如单击命令按钮Command1 ,使按钮的字体大小改为20磅:
Sub Command1_Click()
Command1.FontSize=20
End Sub
29
上一页
下一页
本章目录
事件驱动
(3) 事件驱动程序设计
程序执行的先后次序与程序设计者无关,取决于用户的操
作,这就是事件驱动程序设计方式。
VB程序的执行步骤如下:
① 启动应用程序,装载和显示窗体;
② 窗体(或窗体上的控件)等待事件的发生;
③ 事件发生时,执行对应的事件过程;
④ 重复执行步骤②和③。
30
上一页
下一页
本章目录
方法
3. 方法
面向对象的程序设计语言,为程序设计人员提供了一种特殊
的过程和函数称为方法。
因为方法是面向对象的,所以在调用时一定要用对象。对象
方法的调用格式为:
[对象.]方法 [参数名表]
若省略了对象,表示为当前对象,一般指窗体。
例如:Form1.Print "欢迎您使用Visual Basic 6.0!"
使 用 Print 方 法 在 对 象 为 Form1 窗 体 中 显 示 “ 欢 迎 您 使 用
Visual Basic 6.0!”的字符串。
31
上一页
下一页
本章目录
2.2 建立简单的应用程序
例2.1编写一个人民币与美圆兑换的程序。
建立一个应用程序分为以下几步进行:
(1) 建立用户界面的对象;
(2) 对象属性的设置;
(3) 对象事件过程及编程;
(4) 保存和运行程序。
测验: 在屏幕上显示“您好,朋友”,采用4个
控件,文本控件用来显示信息,3个命令按纽分别
用来执行显示、清除、结束操作。
32
上一页
下一页
本章目录
2.3 窗体和基本控件
2.3.1 基本属性
(1)Name名称属性
所有对象都具有的属性,是所创建的对象名称。所有的控件
在创建时由VB自动提供一个默认名称。在程序中,对象名称
是作为对象的标识在程序中而引用。
(2)Caption标题属性
Top
该属性决定了控件上显示的内容。
(3)Height、Width、Top和Left属性
Left
Heig
ht
Width
Height和Width属性决定了控件的高
度和宽度,Top和Left属性决定了控件在窗体中的位置。
33
上一页
下一页
本章目录
2.3.1 基本属性之二
(4) Enabled属性
决定控件是否允许操作
True:允许用户进行操作,并对操作作出响应
False:禁止用户进行操作,呈暗淡色
(5) Visible属性
决定控件是否可见
True:程序运行时控件可见
False:程序运行时控件隐含起来,但控件本身存在
(6) Font属性组
改变文本的外观,其中:
FontName字体、FontSize字体大小、FontBold粗体、
FontItalic斜体、FontStrikethru删除线、FontUnderline下划线
34
例2.2 在窗体是建立两个命令按钮
上一页
下一页
本章目录
基本属性之三
(7) ForeColor属性
设置或返回控件的前景颜色
(8) BackColor属性
正文以外的显示区域的颜色
(9) MousePointer鼠标指针类型属性
当鼠标移动到对象的一个特定部分时,被显示的鼠标指针的
类型,设置值的范围为0~15 。若值为99,由用户提供的图
形文件定义鼠标指针形状。
(10) MouseIcon属性
设置自定义的鼠标图标,文件类型为.ico或.cur,图标库在
Graphics目录下。该属性必须在MousePointer属性设为99时使
用。
35
上一页
下一页
本章目录
基本属性之四
(11) TabIndex属性
TabIndex属性决定了按Tab键时,焦点在各个控件移动的顺序。
当对象具有焦点时,可接受用户的输入。Windows环境下,可
同时运行多个应用程序,有多个窗口,但焦点只有一个。
当窗体上有多个控件时,对大部分控件系统会分配一个Tab顺
序。所谓Tab顺序,就是按Tab键时焦点在各个控件上移动的顺
序。一般,其顺序与控件建立的顺序相同,若要改变顺序,可
以设置控件的TabIndex属性,TabIndex属性决定了它在Tab中的
位置。按默认值规定,第一个建立的控件的TabIndex属性值为0,
第二个为1,依次类推。
36
上一页
下一页
本章目录
基本属性之五
(12) 控件默认属性
所谓默认属性是程序运行时,可以改变某控件的值,而不必
指定该控件的哪个属性。
控 件
文本框
命令按钮
单选按钮
默认属性
Text
Default
Value
控 件
标签
图形、图像框
复选框
默认属性
Caption
Picture
Value
例如,下面两条语句是等价的:
Text1.Text="Visual BASIC"
Text1 ="Visual BASIC"
37
上一页
下一页
本章目录
2.3.2 窗体
窗体是一块画布,是所有控件的容器,用户可以根据自己的需
要利用工具箱上的控件在画布上画界面。
1. 主要属性
窗体属性决定了窗体的外观和操作。
图标
Icon
标题
Caption
最小化按钮
MinButton
最大化按钮
MaxButton
控制菜单框
ControlBox
边框样式
BorderStyle
38
上一页
下一页
本章目录
窗体-属性
(1) Caption属性
决定窗体标题栏显示的内容
(2) MaxButton和MinButton属性
控制窗体右上角有最大化按钮和最小化按钮的显示
(3) ControlBox属性
控制窗体左上角有控制菜单框是否出现,当无控制菜单框,时,
系统将MaxButton和MinButton自动设置为False。
(4) Icon属性
设置窗体最小化时显示图标
(5) Picture属性
设置窗体中要显示的图片
(6) BorderStyle属性
此属性决定窗体的边框类型
(7) WindowsState属性
窗体执行时显示状态,正常状态、最小化状态最大化状态
39
上一页
下一页
本章目录
窗体-事件
最常用的事件有Click、DblClick和Load。
Load事件是在窗体被装入工作区时触发的事件。当应用程序
启动,自动执行该事件,该事件通常用来在启动应用程序时
对属性和变量进行初始化。
例2.3使窗体无最大化按钮和最小化按钮,在窗体启动时,
在标题栏显示“装入窗体”,并在窗体上装入一背景图;当
用户单击窗体,在标题兰显示“鼠标单击”,在窗体中显示
“欢迎使用VB”,双击窗体,在标题兰显示“鼠标双击” ,
并在窗体中显示“结束使用VB” 。
40
上一页
下一页
本章目录
2.3.3 标签-属性
除了Caption、Font、Left、Top等外,还有:
(1) BackStyle属性
控制控件是否透明(0—透明, 1—不透明)
(2) BorderStyle属性
控件周围是否有边框(0—无, 1—有)
(3) Alignment属性
决定Caption属性值内容的对齐方式。
0-左对齐;1-右对齐;2-居中。
(4) AutoSize属性
AutoSize属性决定控件是否自动调整大小 WordWrap属性决定
标签内容超出标签宽度时,是否自动换行。
例2.4标签-属性
41
上一页
下一页
例2.4
控件设置
效果
42
默认控件名
标题
有关属性设置
Name
Caption
颜色、对齐、MousePointer=99,MouseIcon=Key04.ico
Form1
鼠标属性例
左对齐
Alignment=0, BorderStyle =1
Label1
居中
Alignment=1,BorderStyle =1
Label2
自动
AutoSize=True, BorderStyle =1
Label3
背景白
BackColor= &H00FFFFFF&, BorderStyle =0
Label4
前景红
ForeColor= &H000000FF&, BorderStyle =0
Label5
本章目录
2.3.3 标签-事件
标签经常接收的事件有:单击(Click),双击(DblClick)和
改变(Change)。但通常标签仅起到在窗体上显示文字作用,
因此,一般不需编写事件过程。
例2.5利用两个标签控件,显示具有浮雕效果的文字
实现思路:浮雕效果可利用两种颜色的文字错位叠加来实现。
为了实现错位,可使两个标签的Left、Top属性值有一点差
距。为了避免叠加上去的标签覆盖原来标签显示的文字,要
将标签的BackStyle背景样式属性设置为0,即透明的。
43
上一页
下一页
本章目录
2.3.4 文本框-属性之一
文本框是一个文本编辑区域,用户可以在该区域输入、编辑、
修改和显示正文内容。
1. 主要属性
(1) Text文本属性
文本框无Caption属性,显示的正文内容存放在Text属性中。
当程序执行时,用户通过键盘输入、编辑正文。
(2) Maxlength属性
指明文本框中能够输入的正文内容的最大长度。
0-任意长字符串;非零值-文本框中字符个数的最大值。
注意:在VB中字符长度以字为单位,也就是一个西文字符与
一个汉字都是一个字,长度为1。
44
上一页
下一页
本章目录
文本框属性之二
(3) MultiLine多行属性
当MultiLine属性为True时,文本框可以输入或显示多行正
文,同时具有文字处理器的自动换行功能,即输入的正文超
出显示框时,会自动换行。按Enter键可插入一空行。
(4) ScrollBars滚动条属性
当MultiLine属性为True时,ScrollBars属性才有效。
0(vbNone)无滚动条;
1(vbHorizontal) 加水平滚动条;
2(vbVertical) 加垂直滚动条;
3(vbBoth) 同时加水平和垂直滚动条。
注意:当加入了水平滚动条以后,文本框内的自动换行功能
会自动消失,只有按Enter键才能回车换行。
45
上一页
下一页
本章目录
文本框属性之三
(5) Locked属性
控制文本控件的内容是否可被编辑,当设置为True时,文本
控件相当于标签的作用。
(6) SelStart、SelLength和SelText属性
在程序运行中,用来标识用户选中的正文。
SelStart 选定的正文的开始位置,第一个字符的位置是0。
SelLength 选定的正文长度。
SelText 选定的正文内容。
设置了SelStart和SelLength属性后,VB会自动将设定的正
文存入SelText。
例2.6创建一个简单的文本编辑器
46
上一页
下一页
本章目录
2.3.4 文本框-事件
(1) Change事件
当Text属性值发生改变时会引发该事件。用户每输入一个字
符就会引发一次Change事件。
(2) KeyPress事件
当按下并且释放键盘上的一个键时,就会引发焦点所在控件
的KeyPress事件,参数KeyAscii指示按键的Ascii码值。
事件中最常用于判断是否输入回车符(KeyAscii的值为13)
(3) LostFocus事件
此事件是在一个对象失去焦点时发生。
(4) GotFocus事件
当一个对象获得焦点时发生。
47
上一页
下一页
本章目录
2.3.4 文本框-方法
文本框最有用的方法是SetFocus,
该方法是把光标移到指定的文本框
中。当在窗体上建立了多个文本框
后,可以用该方法把光标置于所需
要的文本框上。其形式如下:
[对象.]SetFocus
48
上一页
下一页
文本框的应用 数据过滤
例2.7 对输入的数据进行合法性检验,过滤不合法的数据。
当输入结束时,对于输入正确的数据,显示正确信息;对输入
的非数字数据显示错误信息、清除文本框中的内容,并使焦点
重新回到文本框。
分析:在文本框输入数据,可通过回车键或按Tab键表示输入
结束,当然引发的事件也不同。按回车键,焦点没有离开,通
过KeyPress事件来判断;按Tab键,焦点离开该控件,通过
LostFocus事件来判断。本例以按Tab键表示输入结束。
Text2_ LostFocus 当输入结束按Tab键时,该事件激发
IsNumeric(Text2) : 判断是否输入非数字数据.
Text2.SetFocus : 使焦点重新回到文本框
49
本章目录
2.3.5 命令按钮
在程序运行时,当用户选中某个命令按扭时就会执行相应的
事件过程。常用以下方法可以选中命令按钮:
(1) 用鼠标单击。
(2) 按Tab键将焦点移到相应按钮上,再按回车键。
(3) 快捷键(Alt+有下划线的字母)。
1. 主要属性
(1) Caption 属性
如果某个字母前加入&,则程序运行时标题中的该字母带有
下划线,该带有下划线的字母就成为快捷键。
(2) Style 属性
Style 属性设置为1,命令按钮可显示Picture属性中装入的
图形。
50
上一页
下一页
本章目录
2.3.5 命令按钮
(3) Picture属性
Style 属性设置为1,则Picture属性可显示图形文件。
(4) ToolTipText工具提示属性
与Picture属性同时使用。如果仅用图形作为对象的标签,那
么能够使用此属性以较少的文字解释每个对象。
2.事件
命令按扭接收Click事件
51
上一页
下一页
本章目录
2.5 综合应用
例2.9建立一个类似记事本的应用程序,该程序主要提供两类
操作:
(1)剪切、复制和粘贴的编辑操作;
(2)字体大小的格式设置。
分析:
(1)根据题目要求,建立一个文本框输入文本,文本框应
该有滚动条,为了便于调试,程序运行时文本框有初始值。
(2)为了解释命令按钮的属性,其中实现剪切、复制、粘
贴的3个命令按钮以图形形式显示,其他命令按钮以标准形
式显示;由于命令按钮较多,为了便于区分,用按钮的功能
重新设置Name名称。
52
上一页
下一页
常用方法
使用方法的语法形式: [对象.]方法 [参数列表]
1.Print方法
形式: [对象.]Print[{Spc(n)|Tab(n)}][表达式列表][;|,]
作用: 在对象上输出信息
对象:窗体、图形框或打印机(Printer) ,省略对象在窗体上输出。
Spc(n)函数:插入n个空格,允许重复使用。
Tab(n)函数:左端开始右移动n列,允许重复使用。
;(分号):光标定位上一个显示的字符后。
,(逗号):光标定位在下一个打印区的开始位置处。
无;,换行。
开始打印的位置是由对象的CurrentX和CurrentY属性决定,
缺省为打印对象的左上角0,0。
注意:Print方法在Form
_Load事件过程中起作用,必须设置窗体的
54
AutoRedraw为True。
例2.9 显示图形
Private Sub Form_Click()
For i = 1 To 5
Print Tab(i); String(6 - I, "▼"); Spc(6); String(I, "▲")
Next i
End Sub 考虑:若把Spc(6)换成Tab(6),效果如何?
55
本章目录
常用方法
1)Cls方法
形式 : [对象.]Cls
作用 : 清除运行时在窗体或图形框中显示的文本或图形。
注意 : 不清除在设计时的文本和图形。
2) Move方法
形式 : [对象.]Move 左边距离[,上边距离[,宽度[,高度]]]
作用 : 移动窗体或控件,并可改变其大小。
对象:可以是窗体及除时钟、菜单外的所有控件
例2.10移动图形示例,程序运行时在图像框装入一幅图,单
击窗体使图像框移到窗体的中心
56
上一页
下一页
工
程
的
管
理
及
环
境
的
设
置
2.4
本章目录
一.工程的组成
一个工程包括各种类型的文件:
• 工程文件(.Vbp):与该工程有关的全部文件和对象的清单
• 窗体文件(.frm):控件及属性、事件过程和自定义过程
• 窗体的二进制数据文件(.frx):当窗体上控件的数据属性含
有二进制值时(如图片),将窗体保存时,系统自动产生同
名.frx文件。
• 标准模块文件(.bas):包含模块级的变量和外部过程的声明
二.创建、打开和保存工程(略)
57
三.添加、删除和保存文件
窗体文件名
注意:
1.窗体名和窗体文件名概念,
窗体名
窗体名:窗体的Name属性,在代码中用来引用该窗体,同一工程不能有相
同的窗体名;
窗体文件名:窗体存放在磁盘上的文件名,该文件包含了该窗体的所有控
件属性和代码,同一文件夹不能有相同的文件名。
2. 在工程中添加现存的窗体时,只是将对该窗体文件的引用纳入工程,而
不是添加该文件的复制件。因此,如果更改窗体并保存它,会影响包含此窗
体文件的任何工程。
3. 在工程中删除窗体时,仅将此窗体从工程里删除掉,但是窗体文件仍存
在于磁盘上。但是,如果在VB之外删除一个窗体文件,VB不能更新此工程文
件,当打开此工程时,将显示一个文件丢失的错误信息。
4.对窗体文件改名(P43)
58
本章目录
2.5 使用帮助系统
使用MSDN Library查阅器
通过VB的帮助菜单,选择内容、索引或搜索菜单项
59
上一页
下一页
2.6 程序调试
本章目录
.错误类型
(1)编辑错误
在编辑代码时,VB会对键入的代码直接进行语法检查。当发
现代码存在打字错误,遗漏关键字或标点符等语法错误,VB
在Form窗口中弹出一个子窗口,提示出错信息,出错的那一
行变成红色。这时,用户必须单击“确定”按钮,关闭出错提
示窗,然后对出错行进行修改。
60
(2)编译错误
编译错误指按了“启动”按钮,VB开始运行程序前,
先编译执行的程序段时,产生的错误。此类错误由于用
户未定义变量、遗漏关键字等原因产生。这时,Visual
Basic也弹出一个子窗口,提示出错信息,出错的那一行
被高亮度显示。
61
(3) 运行错误
运行时错误指VB在编译通过后,运行代码时发生的错误。
这类错误往往是指令代码执行了一非法操作引起的。例
如类型不匹配、试图打开一个不存在的文件等。
62
(4) 逻辑错误
程序运行后,得不到所期望的结果,这说明程序存在逻
辑错误。这类错误往往是程序存在逻辑上的缺陷所引起。
例如,运算符使用不正确、语句的次序不对、循环语句
的起始、终值不正确等。通常,逻辑错误不会产生错误
提示信息,故错误较难排除,需要程序员仔细地阅读分
析程序以及调试。
63
2 调试错误
(1) VB的三种模式
• 设计模式[设计]
进行程序的界面设计、属性设置、代码编写等。
• 运行模式[运行]
执行“运行/启动”命令,可以查看程序代码,但不能修
改。
• 中断模式[中断]
当在运行模式,按了“中断”命令或当程序出现运行时错
误时进入中断模式。可以查看代码、修改代码、检查数据。
64
2 设置断点和逐语句跟踪
断点是告诉VB挂起程序执行的一个标记,当程序执
行到断点处即暂停程序的运行,进入中断模式。设置或
删除断点的步骤:
中断模式下,直接查看某个变量的值,只要把鼠标指
向所关心的变量处,稍停一下,就在鼠标下方显示该变
量的值。
断点标记
65
当前行
2.7 常见错误
1. 使用中文标点符号
系统产生“无效字符”,以红色显示
2. 字母和数字形状相似
小写字母“l”和数字“1”形式相同、小写字母“o”与数字“0”。
3. 对象名称(Name) 写错
Text1、Text2、Command1
txtInput、txtOutput、cmdOk
4.对象的属性名、方法名、标准函数名写错
尽量使用自动列出成员功能。正确的系统按规定的大小写表示。
5. 无意形成控件数组
建立控件时小心使用“复制”、“粘贴”按钮
6. 打开工程时找不到对应的文件
保存文件时先保存窗体.frm文件、再保存.vbp文件,注意路径。
66
第三章
础
3.1
3.2
3.3
3.4
3.5
67
Visual Basic语言基
数据类型
变量与常量
运算符和表达式
常用内部函数
编码规则
本书目录
本章目录
3.1 数据类型
68
上一页
下一页
3.1
VB中的数据类型
一 数据类型
在为计算机编程时,会使用各种各样的数据。
因此,我们在编写程序代码时就必须事先说明所
使用的数据类型,以便计算机能够正确识别.VB
中提供了:数值型、字符型、布尔型 、日期型、
对象型、变体型等数据类型 .
1 数值(Numeric)
数值型包括:整型Integer(%)、长整型Long
(&)、单精度型Single(!)、双精度型
Double(#)、货币型Currency(@)、字节型byte,
详细说明见P53表。
69
2 字符数据类型(String)
字符串(string)是一个字符序列,包括所有西文
字符和汉字,这符两侧用双引号括起来。
注意:P54
3 逻辑(Boolean)数据类型
逻辑型数据用于逻辑判断,它用True和False
表示某个事件的两个方面,且只有两种取值
(True / False),通常作为判断条件。当逻辑
型数据转换成整型数据时,True转换为-1,False
转换为0;当将其他类型数据转换成逻辑数据时,
非0数转换为True,0转换为False。
70
4 日期(Date)数据类型
日期型数据在VB中以8个字节来存储,包括日期
与时间,日期和时间的表示范围:
日期:公元100年1月1日到9999年12月31日
时间:00:00:00到23:59:59
任何字面上可被认作日期和时间的字符,只要用号
码符(#)括起来,都可以作为日期型数据。
例:#5/12/88# 、#May 1,77# 、#2000-4-9# 、
#1 May , 1998#等
71
72
另外,数值型还可转变为日期型。转换规则如下:
小数点左边的数字代表日期部分,负数代表的
是1899年12月30日之前的日期,正数据代表的是
1899年12月30日以后的日期;而小数点右边的数
据代表时间部分,0对应午夜,0.5对就中午12:
00:00。
例:Private Sub Text1_Change()
Dim y1 As Date
y1 = Val(Text1)
Text2 = y1
End Sub
5 变体数据类型(Variant)
变体数据是指定义变量时不指定特定的类型。
用变体数据类型声明的变量与用其它数据声明的
变量区另在于:
变体变量
其他变量
变量存在但无数据类型
变量存在且有数据类型
数据类型不固定
数据类型固定
变体型数据是对所有未定义的变量的缺省数据类型
定义,它对数据的处理完全取决于程序上下文的
需要。它可以包括数值型、日期型、对象型、字
符型的数据。
73
本章目录
3.2 变量与常量 (P55)
3.2.1 变量或常量的命名规则
变量:在程序运行中其存储的值可以改变。
常量:在程序运行中其值不可以改变。
命名 规则:
必须以字母或汉字开头,由字母、汉字、数字或下划线
组成,长度小于等于255个字符。
不能使用VB中的关键字。例:Left、 Mid、 Int、public、
Sub 、If、 End 。
VB中不区分变量名的大小写,一般变量首字母用大写字
母,其余用小写字母表示;常量全部用大写字母表示。
为了增加程序的可读性,可在变量名前加一个缩写的前
缀来表明该变量的数据类型。
74
上一页
下一页
• 3.2.2变量声明
使用变量之前,一般必须先声明变量名及其类
型。声明变量就是给变量分配内存空间。
1 用Dim语句声明变量
格式:Dim 变量名 [As 类型]
其中:
[As 类型]:缺省“AS 类型”时,则所创建的变
量默认为变体类型。
为了方便定义,可在变量名后加类型符来代替
“AS 类型”。此时变量名与类型符之间不能有
空格。
75
76
例:Dim dp4 As string
等价于: Dim dp4$
Dim na6 As integer
等价于: Dim na6%
注:一个Dim语句可以同时定义多个变量,
但每个变量必须有自己的类型声明,类型声明
不能共用。
例:Dim p1 as string , p5 as
string
该语句声明了字符串变量P1,P5,
而语句:Dim p1,p5 as string
它创建了变体型变量P1,字符型变量P5。
对字符串变量,根据其存放的字符串长度是
否固定,其定义方法有两种:
Dim 字符串变量名 AS String
Dim 字符串变量名 AS Strint*字符数
例:
Dim s1 As String
‘声明变长字符串
Dim s2 As String*50 ‘声明定长字符串变
量,可存放50个字符
对上例声明的定长字符串变量s2,若赋予的
字符少于50,则右部补空格;若赋予的字符
超过50个,则多余部分截去。
77
2 隐式声明
VB中允许对使用的变量未进行声
明而直接使用(不定义而直接使用的
变量),称为隐式声明。所有隐式声
明的变量都是Variant类型的。
注:若在菜单项“工具”→“选项”设
置(选择)了 →“要求变量声明”则
变量的隐式声明无效,必须对所使用
的变量进行声明。
78
在编程时使用隐式声明似乎很方便,但是
如果在以后的使用中要是把变量名拼错,会
导致一个难以查找的错误。因此,提倡使用
对变量进行声明的方法。
例:
Private Sub Form_click()
a1 = "Hollo!"
b = "Ok"
c = 123
Print al
Print b, c
End Sub
79
3.2.3 常量
常量是在程序运行中不变的量。在VB中,除
系统提供的常量外,还有两种常量:普通常量和
符号常量。
1 普通(直接)常量 P57。例:123,“程序”,
123D3
2 符号常量(用户声明的常量)
符号常量就是用标识符所代表的常量,在程序中
用该标识符来代替永远不变的数值或字符串。它
与一般变量的区别:不允许给常量重新赋值。例:
如果定义常量PI=3.14,在程序中如果再使用
PI=3.1415将是错误的。
80
(1)常量的命名
常量的命名规则与变量命名规则相同。
(2)常量的声明
格式:
Const
常量名
[As Type ] = 表达式
其中:
Const:说明该语句为常量声明语句;
AS Type:常量的数据类型,若省略则以所赋给常量的值的
类型所决定。
表达式:由数值常数或字符串常数及运算符组成的表达式。
例: Const Pi=3.14159
Const ST1 As String ="Name"
注:一般如果在程序中的几个地方用到同一个值,就可以
将该值声明为一个常量,如果以后想改变这个值,只须
更新Const声明即可。
81
本章目录
3.3 运算符和表达式
和其他语言一样,VB中也具有丰富的运算符,通过运算符
和操作数组合成表达式,实现程序编制中所需的大量操作。
运算符是表示实现某种运算的符号。VB中的运算符可分四
类:
算术运算符
字符串运算符
关系运算符
逻辑运算符
82
上一页
下一页
本章目录
3.3.1 运算符-算术运算符
ia=
注意:算术运算符两边的操作数应是数值型,若是数字设
字符或逻辑型,则自动转换成数值类型后再运算。
例如:
30-True
为数值0
3
结果是31,逻辑量True转为数值-1,False转
False + 10 + "4" 结果是14
例:5+10
mod 10 \ 9 / 3 +2 ^2 结果:10
83
上一页
下一页
本章目录
运算符-字符串运算符
& 、+ 字符串连接
& 两旁的操作数可任意,转换成字符型后再连接
+ 两旁的操作数应均为字符型;若为数值型则进行算术加
运算;若一个为数字字符,另一个为数值,则自动将数字
字符转换为数值后进行算术加;若一个为非数字字符型,
另一个为数值型,则出错。例如:
操作
结果
操作
结果
"abc" & 123 "abc123 "
"abcdef " + 12345 出错
"123" & 456 "123456"
"123" & True
"123True"
"123" + 456 579
"123" + True
122
注意:
在变量后使用运算符&时,变量与&间应加一个空格
84
上一页
下一页
本章目录
运算符-关系运算符
关系运算符是双目运算符,作用是将两个操作数进行大小
比较,若关系成立,则返回True,否则返回False。操作数
可以是数值型、字符型。比较规则:P61
85
上一页
下一页
本章目录
运算符-逻辑运算符
逻辑运算符除Not是单目运算符外,其余都是双目运算符,
作用是将操作数进行逻辑运算,结果是逻辑值True或False。
86
上一页
下一页
本章目录
3.3.2表达式
1.组成
变量、常量、函数、运算符和圆括号
2.书写规则
(1) 运算符不能相邻。例a+ -b是错误的。
(2) 乘号不能省略。例x 乘以y 应写成:x*y
(3) 括号必须成对出现,均使用圆括号。
(4) 表达式从左到右在同一基准上书写,无高低、大小。
3. 不同数据类型的转换
运算结果的数据类型向精度高的数据类型靠.
Integer<Long<Single<Double<Currency
但当long型数据与single型数据时,结果为double型
4. 优先级
算术运算符>字符运算符>关系运算符>逻辑运算
87
•测试:
上一页
下一页
例:用人单位招聘秘书:年龄小于40岁,女性,学历专科或本科
年龄<40 And 性别=“女” And(学历=“专科” Or学历=“本科”)
考虑:若分别写成:
年龄<40 And 性别=“女” And (学历=“专科” And 学历=“本科
”)
年龄<40 Or 性别=“女” Or (学历=“专科” Or 学历=“本科”)
3 x 7
例:表示算术表达式:
正确的VB表达式: 3〈=x And x <=7
或 3<=x Or x<=7
错误的VB表达式: 3<=x<=7
比a小,比b大 用 Or
a
小数
b
大数
比a大,比b小 用 And
88
a
小数
b
大数
表达式书写举例
abcd
efg
a*b*c*d/e/f/g
本章目录
或
a*b*c*d/(e*f*g)
选拔优秀生的条件为:年龄(Age)小于19岁,三门课总分(Total)
高于285分,其中有一门为100分,如果其表达式写为:
Age<19 And Total>285 And ( Mark1=100 Or Mark2=100 Or
Mark3=100 )
如果取消括号有何问题?请读者考虑。
89
上一页
下一页
本章目录
3.4 常用内部函数
VB提供大量的内部函数供编程时调用。按其功能可分成数学函
数、转换函数、字符串函数、日期函数和格式输出函数等。
通过帮
助菜单,
可获得
所有内
部函数
的使用
方法。
90
上一页
下一页
本章目录
3.4.1数学函数
VB提供大量的内部函数供编程时调用。按其功能可分成数学函
数、转换函数、字符串函数、日期函数和格式输出函数等。
函数名
91
含义
实例
结果
Abs(N)
取绝对值
Abs(-3.5)
3.5
Cos(N)
余弦函数
Cos(0)
1
Exp(N)
ex
Exp(3)
20.086
Fix(N)
取整
Fix(-3.5)
Fix(3.9)
-3
3
Log(N)
自然对数
Log(10)
2.3
Int(N)
取小于或等于
N的最大整数
Int(-3.5)
Int(3.5)
-4
3
上一页
下一页
本章目录
数学函数
函数名
含义
实例
结果
Rnd[(N)]
产生随机数
Rnd
[0,1)之间的数
Round(N)
四舍五入取整
Round(-3.5)
Round(3.5)
-4
4
Sin(N)
正弦函数
Sin(0)
0
Sgn(N)
符号函数
Sgn(-3.5)
-1
Sqr(N)
平方根
Sqr(9)
3
Tan(N)
正切函数
Tan(0)
0
Rnd函数返回0和1(包括0但不包括1)之间的双精度随机数.
每次运行时,要产生不同序列的随机数,先执行Randomize
语句。产生a~b的之间的随机整数:Int(Rnd *(b-a)+a)
92
上一页
下一页
本章目录
3.4.2 转换函数
函数名
功能
结果
Asc(C)
字符转换成ASCII码值
Asc("A")
CDate
转换成日期型
CDate("2003/11/13") 2003-11-13
Chr(N)
ASCII码值转换成字符
Chr$(65)
"A"
Hex(N)
十进制转换成十六进制
Hex(100)
64
Lcase$("ABC")
"abc"
Lcase$(C) 大写字母转为小写字母
93
实例
65
Oct(N)
十进制转换成八进制
Oct$(100)
"144"
Str(N)
数值转换为字符串
Str$(123.45)
"123.45"
Ucase(C)
小写字母转为大写字母
Ucase$("abc")
"ABC"
Val(C)
数字字符串转换为数值
Val("123AB")
123
上一页
下一页
本章目录
转换函数说明
(1) Chr和Asc函数互为反函数。
(2) Str函数将非负数值转换成字符类型后,会
在转换后的字符串左边增加一空格。
(3) Val将数字字符串转换为数值类型,当字符
串中出现数值类型规定的字符外的字符,则停
止转换,函数返回的是停止转换前的结果。例
如表达式:Val("-123.45ty3")结果为-123.45。
94
上一页
下一页
本章目录
3.4.3 字符串函数P66
函数名
说明
实例
InStr([N,]C1,C2[ 从n开始,在C1中找C2 InStr(2,"EFABCD
,M])
EFG","EF")
结果
7
Right(C,N)
取字符串右边n个字符
Right("ABCDE",3)
Left(C,N)
取字符串左边n个字符
Left("ABCDE",3)
"ABC"
Len(C)
字符串长度
Len("AB教育")
4
Trim(C)
去掉字符串两边的空格 Trim(" AB教育 ") " AB教育"
L(R)Trim(C)
去掉字符串左(右)边空格
LTrim("ABCD") "ABCD"
Mid(C,N1[,N2])
取字符子串
Mid("ABCDE",2,3) "BCD"
Replace(C,C1,C2) 用C2替代C1
95
测试:
Replace("ACDAB
CD","CD","3")
上一页
" CDE"
"A3AB3"
下一页
本章目录
3.4.4 日期函数
函数名
说明
实例
Date[()]
返回系统日期
Date
Day(C|N)
返回日期代号(1~31)
Day("2003,05,01")
Hour(C|N)
返回小时(0~24)
Hour(#1:12:56PM#)
Minute(C|N)
返回分钟(0~59)
Minute(#1:12:56PM#)
Month(C|N)
返回月份代号(1~12)
Month("2003,05,01")
Now
返回系统日期和时间
Now
Second(C|N)
返回秒(0~59)
Second(#1:12:56PM#)
Time[()]
返回系统时间
Time
Year(C|N)
返回年代号(1753~2078)
Year(365)
例3.1计算从现在开始计算离你毕业还有多少天
96
上一页
下一页
5.格式输出函数
用格式输出函数Format$可以使数值、字符串或日期按
指定的格式输出,一般用于Print方法之中。
形式: Format$(表达式1[,格式字符串])
其中:
表达式:要格式化的数值、日期和字符串类型表达式。
格式字符串:表示输出表达式值时所采用的输出格式。
格式字符串有三类:数值格式、日期格式和字符串格
式。格式字符串要加引号。
例题:
97
本章目录
数据输出控制
形式: Format (表达式[, "格式字符串"])
常用数值格式化符及举例 P68
符号
作 用
表达式
格式字符串
显示结果
0
用0填充不足的位置
1234.567
"00000.0000"
01234.5670
#
位置不足时不填充0
1234.567
"#####.####"
1234.567
,
千分位
1234.567
"##,##0.000"
1,234.567
%
数值乘以100,加百分号
1234.567
"####.##%"
123456.7%
$
在数字前强加$
1234.567
"$###.##"
$1234.57
E+
用指数表示
1234.567
"0.00E+00"
1.23E+03
98
上一页
下一页
本章目录
日期输出控制
常用日期和时间格式符P69
符号
作 用
d
显示日期 ,dd个位前加0
w
星期为数字(1是星期日)
m
显示月份,mm个位前加0
yyyy
显示4位数年份,yy为2位数年份
dddddd
显示完整长日期(yyyy年m月d日)
h
显示小时(0~23),hh个位前加0
m
在h后显示分(0~59),mm个位前加0
s
显示秒(0~59),ss个位前加0
99
上一页
下一页
5.格式输出函数
例3.1 利用Format函数显示有关的日期和时间。
Private Sub Form_CLICK()
FontSize = 12
MyTime = #9:21:30 PM#
MyDate = #7/21/1997#
Print Format(MyDate, "m/d/yy")
Print Format(MyDate, "mmmm-yy")
Print Format(MyTime, "h-m-s AM/PM")
Print Format(MyTime, "hh:mm:ss A/P")
' 显示系统当前日期和时间
Print Format(Now, "yyyy年m月dd日 hh:mm")
' 以系统预定义的格式 显示系统当前时间
Print Format(Date, "dddd,mmmm,dd,yyyy")
End Sub
100
本章目录
3.4.5 Shell函数
Shell函数可调用各种应用程序。格式如下:
Shell(命令字符串[,窗口类型])
其中:
命令字符串:要执行的应用程序名,包括路径,它必须是可
执行文件(扩展名为.com、.exe、.bat)。
窗口类型:表示执行应用程序的窗口大小,0~4,6的整型数
值,一般取1,表示正常正常窗口状态。
i = Shell("c:\windows\calc.exe")
提示:如果不知道应用程序的路径名,可用Start命令启动程序
例3.2 i = Shell(start & "calc.exe")
101
上一页
下一页
本章目录
3.5 编码规则
编码规则
(1)VB代码不区分字母的大小写。
对于VB中的关键字,首字母总被自动转换成大写,其余字母
被转换成小写。
对于用户自定义的变量、过程名,VB以第一次定义的为准,
以后输入的自动向首次定义的转换。
(2)语句书写自由
一行上可以书写多句语句,用冒号分隔,一行最多可达255
个字符。
单行语句可分若干行书写,在本行后加入续行符(空格和下
划线)。
102
上一页
下一页
本章目录
(3)增加注释有利于程序的阅读、维护和调试
注释以Rem开头,但一般用撇号 ‘ 引导注释内容,用撇号
引导的注释可以直接出现在语句后面。
也可以使用编辑工具栏的设置注释块、解除注释块按钮,使
选中的若干行语句(或文字)增加注释或取消注释十分方便。
103
上一页
下一页
常见错误总结
1.逻辑表达式书写错
例数学表达式 3≤x<10
VB表达式为
问题在于VB中的逻辑量与数值量可互转
3<=x<10?
2.同时给多个变量赋值
例 Dim x%,y%,z%
x=y=z=1
3. 标准函数名写错
4.变量名写错
检查方法:在通用声明段加Option Explicit
5.语句书写位置错
在通用声明段只能有Dim语句,不能有赋值等其他语句
104
第四章
4.1
4.2
4.3
4.4
4.5
4.6
105
基本的控制结构
顺序结构
选择结构
循环结构
其他辅助控制语句
综合应用
程序调试
本书目录
本章目录
4.1 顺序结构
一个VB程序由两部分组成:即Visual和Basic,前者是由
众多的对象构成了程序的可视界面,在VB中,界面设计非
常方便、直观;后者是响应各种事件的程序代码,也是程
序设计的重点和难点。VB也具有结构化程序设计的三种结
构,即顺序结构、选择结构、循环结构,它是程序设计的
基础。
顺序结构就是各语句按出现的先后次序执行。
一般的程序设计语言中,顺序结构的语句主要是赋值语句、
输入/输出语句等。在VB中也有赋值语句;而输入/输出可
以通过文本框控件、标签控件、Print方法、InputBox函数、
MsgBox函数等来实现。
106
上一页
下一页
本章目录
4.1.1 赋值语句
形式: 变量名=表达式
作用:计算右边表达式的值,然后赋给左边的变量。
一般用于给变量赋值或对控件设定属性值。
表达式可以是任何类型,一般应与变量名的类型一致。当
表达式的类型与变量的类型不一致时,强制转换成左边的
类型。 例:
sRate!=0.1
Text1.Text = "欢迎使用Visual Basic 6.0 "
Text1.Text = ""
' 清除文本框的内容
n%=3.5 ' n为整型变量,转换时四舍五入,n中的结果为4
iA% = 10
107
/
3
iA中的结果为3
上一页
下一页
本章目录
注意:
 赋值语句不允许写成 表达式=变量 ,虽然赋值号与关系
运算符等于号都用=表示,VB系统会根据所处的位置自动判
断符号的意义。不能在一句赋值语句中,同时给各变量赋值
例如:x=y=z=1,VB在编译时,将右边两个=作为关系运算
符处理,先进行y=z比较,结果为True(-1)或False(0) ;再将结
果与1比较,得到False并将其赋值给x。
赋值左边的变量只能是变量,不能常量、表达式。如:
5=x+y ‘左边是常量
x+y=3 ‘左边是表达式
 赋值语句形式 变量1=变量1+表达式 表示将变量1中的值与
表达式相加后再赋值给变量1。
假定n的值为5,执行了n=n+1后,n的值为6
108
上一页
下一页
例题
单击命令按钮,交换两个文本的值。界面如下所示。
Private Sub Command1_Click()
Dim t
t = Text1.Text
Text1.Text = Text2.Text
Text2.Text = t
End Sub
109
4.1.2 人机交互函数和过程
1. InputBox函数
InputBox(提示[,标题][,缺省][,x 坐标位置][,y坐标
位置])
其中:
提示:不能省略,在对话框中作为信息显示。若要多行显
示,可在每行行末加符号常数vbCrLf或用回车符 (Chr(13))、
换行符 (Chr(10)) 或回车换行符的组合 (Chr(13) &
Chr(10)) 来分隔
标题:对话框标题
缺省:显示文本框中的字符串表达式,在没有其它输入时
作为缺省值。如果省略缺省项,则文本框为空
x 坐标位置,y坐标位置:确定对话在屏幕上的位置
作用:打开一个对话框,等待用户输入内容 ,单击确定
按钮,返回字符串类型的值。
110
相应的语句如下:
Dim strName As String * 40, strS1 As String * 40
strName= InputBox( “请输入你的姓名” + vbCrLf + “然后单击
确定” , “输入框” )
也可以:
strS1 = “请输入你的姓名” + Chr(13) + “然后单击确定”
strName= InputBox(strS1, “输入框”, , 100,100)
当键盘输入“王晓明” 后,变量strName获得键盘输入的值.
111
注意:各项参数次序必须一一对应,除了“提
示”一项不能省略外,其余均为可选项。如果
要省略某些位置参数,则必须加入相应的逗号
分界符。也即,缺省部分也要用逗号占位符跳
过去。
例4.3 利用InputBox输入基本工资和营业额,按
营业额的5%提成,计算出实发工资后用Print方
法在窗体显示。
112
上一页
下一页
习题
 1.单击窗体,用Inputbox函数,从键盘上输入圆
半径,求出圆的周长、面积,并在窗体上输出。
周长,面积公式分别为:2πr,πr2。
 2.编写一个华氏温度与摄氏温度的转换程序。
公式:
• F=9/3C+32 摄氏转换为华氏,F为华氏温度
• C=5/9(F-32)华氏转换为摄氏,C为摄氏温度
113
2. MsgBox函数和MsgBox过程
本章目录
作用:打开一个信息框,等待用户选择一个按按钮。
MsgBox函数返回所选按钮的值,MsgBox过程不返回值
MsgBox函数形式:
变量[%] = MsgBox(提示[,按钮][,标题])
MsgBox过程形式:
MsgBox 提示[,按钮][,标题]
按钮:可选项,数值表达式是值的总和,指定显示“按钮”
的数目及形式,使用的图标样式以及缺省“按钮”是什么。
114
上一页
下一页
本章目录
MsgBox按钮设置
分组
按钮
数目
图标
类型
默认
按钮
115
内部常数
值
描
述
VbOkOnly
0
确定按钮
VbOkCancel
1
确定、取消按钮
VbAboutRetryIgnore
2
终止、重试、忽略按钮
VbYesNoCancel
3
是、否、取消按钮
VbYesNo
4
是、否按钮
VbRetryCancel
5
重试、取消按钮
VbCritical
16
关键信息图标
VbQuestion
32
询问信息图标
VbExclamation
48
警告信息图标
VbInformation
64
信息图标
VbDefaultButton1
0
第1个按钮为默认
VbDefaultButton2
56
第2个按钮为默认
VbDefaultButton3
512
第3个按钮为默认
上一页
下一页
本章目录
MsgBox所选按钮返回值
116
被单击的按钮
返回值
内部常数
确定
1
vbOk
取消
2
vbCancel
终止
3
vbAbort
重试
4
vbRetry
忽略
5
vbIgnore
是
6
vbYes
否
7
vbNo
上一页
下一页
例1:只显示一个“确定”按钮,并分行显示“大家好,我想
念你们! ” 。
Private Sub Form_Load()
i = MsgBox("大家好," + Chr(13) + Chr(10) + _
"我想念你们!", , "我的心声")
End Sub
• 例2:在对话框中显示红色Stop标志,显示是、否按钮,第
二个按钮为缺省按钮。
Sf=MsgBox ("继续输入数据",276, "输入框")
276=256+16+4
若选择了“否”按钮,则返回SF的值为7,若选择了“是”按
钮,则返回SF的值为6。
•
117
例3.2 编一帐号和密码检验程序。
要求:
帐号不超过6位数字,有错,清除原内容再输入.
密码输入时在屏幕上以 “*”代替; 若密码错,显示有关信
息,选择“重试”按钮,清除原内容再输入,选择“取消”
按钮,停止运行。密码3次有错,退出!
分析:
帐号6位,MaxLength为6 , LostFocus判断数字IsNumeric函数
密码PassWordChar为“*”,MsgBox函数设置密码错对话框.
118
课堂作业
• 从键盘上输入4个数,编写程序,计算并输
出这4个数的和及平均值。
要求:
(1)单击窗体,通过Inputbox函数输入数据。
(2)在窗体上显示这4个数及数的和、平均值。
程序运行界面如下图所示
119
本章目录
4.2 选择结构
计算机要处理的问题往往是复杂多变的,
仅采用顺序结构是不够的。必须利用选择
结构等来解决实际应用中的各种问题。VB
中提供了多种形式的条件语句来实现选择
结构,有If条件语句和Select情况语句等。
它们都是对条件进行判断,根据判断结果,
选择执行不同的分支。
120
上一页
下一页
本章目录
4.2.1 If条件语句
1. If…Then语句(单分支结构)
F
表达式
If <表达式> Then
语句块(可以是一句或多句语句)
End If
或 If <表达式> Then <语句>
T
语句块
表达式:关系表达式、逻辑表达式,算术表达式。
表达式值按非零为True,零为False进行判断。
该语句的作用是当表达式的值为True,执行Then后
面的语句块,否则不做任何操作。
121
上一页
下一页
本章目录
单分支结构
例:已知两个数x和y,比较它们的大小,使得x大于y。
If x<y Then
x
y
t=x

x=y
y=t
End If

t

或 If x<y Then t=x: x=y: y=t
简单If形式无End If,只能是一句语句或语句间用冒号分隔,
而且必须在一行上书写。
重要的是学会两个数的交换,若上述语句次序变一下,结
果如何?
122
上一页
下一页
本章目录
双分支结构
2. If…Then…Else语句
If 表达式 Then
语句块1
Else
语句块2
End If
或 If 表达式 Then
T
表达式
语句块 1
F
语句块 2
语句1 Else 语句2
当表达式的值为True时,执行Then后面的语
句块1,否则执行Else后面的语句块2
123
上一页
下一页
本章目录
双分支结构例
sin x  x 2  1
计算分段函数 y  
cos x  x 3  3x
单分支结构实现:
双分支结构实现:
124
x0
x0
y=cos(x)-x^3+3*x
If x<>0 Then y=sin(x)+sqr (x*x+1)
If x<>0 Then
y=sin(x)+sqr (x*x+1)
Else
y=cos(x)-x^3+3*x
End If
上一页
下一页
例题
• 例1:由键盘输入一个数,该数大于等于0,则
求该数的平方根,否则,输出错误信息。
• 例2:文本框Tex1作为数字输入框,当输
入的为数字,则将其在Tex2中输出。否
则清除Tex1中的内容,并将焦点定位在
Tex1中
125
本章目录
多分支结构
3. If…Then…ElseIf语句
If 表达式1 Then
语句块1
ElseIf 表达式2 Then
表达式
语句块2
…
T
F
1
表达式 2
T
[Else
语句块 n+1 ]
End If
F
F
表达式 n
T
语句块 1
语句块 2
语句块 n
语 句 块 n+ 1
该语句的作用是根据不同的表达式值确定执行哪个语句块
126
上一页
下一页
本章目录
多分支结构例
例4.5已知变量strC中存放了一个字符,判断该字符是字母字
符、数字字符还是其他字符。
If Ucase(strC) >="A" And Ucase (strC) <="Z" Then
Print strC + "是字母字符"
ElseIf strC >="0" And strC <="9" Then
Print strC + "是数字字符"
Else
Print strC + "其他字符"
End If
不管有几个分支,依次判断,当某条件满足,执行相应的语句,
其余分支不再执行;若条件都不满足,且有Else子句,则执行该
语句块,否则什么也不执行。.
ElseIf不能写成 Else If。
127
上一页
下一页
例 已知百分制成绩mark,显示对应的五级制成绩
哪些正确,哪些错误?
方法一
方法二
If mark >= 90 Then
If mark < 60 Then
Print "优"
Print "不及格"
ElseIf mark >= 80 Then
ElseIf mark < 70 Then
Print "良"
Print "及格"
ElseIf mark >= 70 Then
ElseIf mark < 80 Then
Print "中"
Print "中"
ElseIf mark >= 60 Then
ElseIf mark < 90 Then
Print "及格"
Print "良"
Else
Else
Print "不及格"
Print "优"
End If
End If
128
方法三
If mark >= 60 Then
Print "及格"
ElseIf mark >= 70 Then
Print "中"
ElseIf mark >= 80 Then
Print "良"
ElseIf mark >= 90 Then
Print "优"
Else
Print "不及格"
End If
返回
本章目录
If语句的嵌套
If语句的嵌套是指If或Else后面的语句块中又包含If语句
F
If 表达式1 Then
x<y
T
If 表达式11 Then
x 与 y 交换
…
x >y
End If 例已知x,y,z三个数
,使得x>y>z
…
F
y<z
用一个IF语句和一个嵌套的
End If
T
IF语句实现
If x<y Then t=x: x=y: y=t
If y<z Then
t=y: y=z: z=t
If x<y Then
t=x: x=y: y=t
129
End If
End If
x >y>z
y 与 z 交换
x< y
z 为最小数
F
T
x 与 y 交换
使得 x >y
上一页
下一页
本章目录
4.2.2 Select Case语句
Select Case 变量或表达式
Case 表达式列表1
语句块1
Case 表达式列表2
语句块2
…
[Case Else
语句块n+1]
End Select
130
表达式列表与变量或表达式的类型必须
相同,是下面4种形式之一 :
•表达式
例: "A"
•一组用逗号分隔的枚举值
•表达式1 To 表达式2
2,4,6,8
60 To 100
•Is 关系运算符表达式 Is < 60
上一页
下一页
本章目录
Select Case语句例
将例4.5改成Select Case语句实现如下:
Select Case strC
Case "a" To "z","A" To "Z"
Print strC + "是字母字符"
Case "0" To "9"
Print strC +"是数字字符"
Case Else
Print strC + "是其他字符"
End Select
对于多分支结构,用Select Case语句比用If…Then…ElseIf语
句直观,程序可读性强。但不是所有的多分支结构均可用
Select Case语句代替If…Then…ElseIf语句。
131
上一页
下一页
本章目录
Select Case语句例
例4.6 已知坐标点(x,y),判断其落在哪个象限。
代码一
代码二
If x > 0 And y >0 Then
Select Case x,y
Print "在第一象限"
Case x > 0 And y > 0
ElseIf x < 0 And y > 0 Then
Print "在第一象限"
Print "在第二象限"
Case x < 0 And y > 0
ElseIf x < 0 And y < 0 Then
Print "在第二象限"
Print "在第三象限"
Case x < 0 And y < 0
ElseIf x > 0 And y <0 Then
Print "在第三象限"
Print "在第四象限"
Case x > 0 And y <0
End If
Print "在第四象限"
End Select
代码二错误:
1. Select Case 后不能出现多个变量;
132
2. Case后不能出现逻辑表达式。
上一页
下一页
例 输入百分制成绩mark,显示对应的五级制成绩
方法一
Select Case mark
Case mark >= 90
Print "优"
Case mark >= 80
Print "良"
Case mark >= 70
Print "中"
Case mark >= 60
Print "及格"
Case Else
Print "不及格"
End Select
方法二
Select Case mark
Case Is >= 90
Print "优"
Case Is >= 80
Print "良"
Case Is >= 70
Print "中"
Case Is >= 60
Print "及格"
Case Else
Print "不及格"
End Select
133
哪些能实现,哪些不能实现?
方法三
Select Case mark
Case Is >= 90
Print "优"
Case 80 To 89
Print "良"
Case 70 To 79
Print "中"
Case 60 To 69
Print "及格"
Case Else
Print "不及格"
End Select
返回
例4.7由计算机来当一年级的算术老师,要求给出一系列的1~10的
操作数和运算符,学生输入该题的答案,计算机根据学生的答案判
断正确与否,当结束时给出成绩。
分析:产生1~10操作数,可通过Int(10 * Rnd + 1) 实现
label1
Text1
Picture1
134
Command1
本章目录
4.2.3 条件函数
1)IIf 函数
IIf(表达式,当表达式为True时的值,当表达式为False时的值)
例如,求x,y中大的数,放入Tmax变量中,语句如下:
Tmax=IIf(x > y,x,y)
2)Choose函数
Choose(数字型变量,值为1的返回值,值为2的返回值…)
例如,Nop是1~4的值,转换成 + 、-、×、÷运算符的语句如
下:
Op= Choose(Nop,"+","-","×","÷")
当值为1,返回字符串“+”,然后放入Op变量中,值为2,返
回字符串“-”,依次类推;当Nop是1~4的非整数,系统自动取
整再判断;若Nop不在1~4之间,函数返回Null值。
135
上一页
下一页
常见错误
1.在选择结构中缺少配对的结束语句
2. 多分支选择ElseIf关键字的书写
ElseIf 不要写成Else If;
3.条件表达式的表示
多个条件表达式次序问题,见例
3. Select Case语句的使用
Select Case 后不能出现多个变量;Case子句后不
能出现变量见例
136
课堂作业
•
137
某航空公司规定:在旅游旺季7—9月份,
如果订票超过20张,优惠票价的15%;
20张以下的优惠5%;在旅游淡季1—5
月份、10、11月份,订票超过20张,优
惠票价的30%;20张以下的优惠20%;
其它时间订票的一律优惠2%。(要求
要对输入的数据进行判断)
本章目录
4.3 循环结构
我们已经学习了顺序结构和分支结构,这种结构的特点
是任何一条语句至多只执行一次,但是在处理实际问题的过
程中,用这种结构来编写程序就长得不能忍受。
引例:求1+2+3+100的和?
S=0
S=S+1
S=S+2
S=S+3 ……共101条语句
实际上这就是一种重复循环操作, VB中提供了两种类型
的循环语句:一种是计数循环语句;另一种是条件型循
环语句。
138
上一页
下一页
本章目录
4.3.1 For循环语句
For循环语句用于控制循环次数预知的循环结构。
For 循环变量 =初值 To 终值 [Step 步长]
语句块
[Exit For]
语句块
Next 循环变量
循环变量必须为数值型。
循环次数
步长
139
 初值
 Int ( 终值步长
 1)
>0 初值<终值 =1 时,可省略
<0 初值>终值
=0 死循环
上一页
下一页
本章目录
For循环语句
循环变量=初值
循环变量是否在
终值范围内
T
F
语句块
有 Exit For
F
语句块
T
循环流程:
(1) 循环变量被赋初值,它仅
被赋值一次。
(2) 判断循环变量是否在终值
内,如果是,执行循环体;
如果否,结束循环,执行
Next的下一语句。
(3) 循环变量加步长,转(2),
继续循环
循环变量=循环变量+步长
Next 的下一语句
140
上一页
下一页
例: For I=2 To 13 Step 3
Print I ,
Next I
Print
Print “I=“, I
例4.8 计算1~100的
累加和
问题:求1~100中偶
数和、奇数和,如何
修改上例程序。
循环执行次数  Int ( 1332  1)  4
输出I的值分别为:
2
5
8
11
出了循环输出为: I=14
141
例题
• 例4.9求自然数15的阶乘,用图形框输出
• 例4.10:利用随机数函数(RND)产生200
个200~600之间的整数,每行输出10个数,
找出这些整数中最大数和最小数。
P90 例4.10(自学)
142
4.3.2 Do…Loop循环语句
本章目录
Do循环用于控制循环次数未知的循环结构。
形式1:
形式2:
Do { While|Until }<条件> Do
语句块
语句块
[Exit Do
[Exit Do
语句块]
语句块]
Loop
Loop { While|Until} <条件>
形式1为先判断后执行,有可能一次也不执行;
形式2为先执行后判断,至少执行一次。
143
上一页
下一页
描述
• 1、在DO循环中都可以使用EXIT DO退出循环。
• 2、DO WHILE 循环是首先判断条件是否为真(满足),为真
执行循环体,执行完循环体再判断条件是否为真,为真重复执
行,直至条件为假(不满足)时退出循环。先判断、后执行。
• 3、DO UNTIL循环是首先判断条件是否为真(满足),若条件
为真则退出循环,只有为假(条件不满足)时才执行循环。先
判断、后执行。
• 4、DO ……LOOP WHILE 循环是首先执行循环体,再判断条件
是否为真,若为真继续循环,条件为假(不满足)退出该循环,
它是先执行、后判断。
• 5、DO ……LOOP UNTIL 循环是首先执行循环体,然后再判断
条件,若条件为真(满足),则退出循环,若条件不满足,继
续循环。直到条件满足(为真)才退出该循环,它是先执行、
后判断。
144
本章目录
Do…Loop流程
表达式列表 1
F
语句块
T
有 Exit Do
语句块
T
F
有 Exit Do
语句块
T
F
语句块
T
表达式列表 1
F
Do While…Loop
145
Do …Loop While
上一页
下一页
例题
Do While <条件> Loop
s = 0: c = 0
Do While c <= 5
c=c+1
s = s + InputBox(“输入一个数")
Loop
Do Until <条件> Loop
s = 1: c = 2
Do Until c > 5
s=s*c
Print c, s
c=c+2
Loop
146
测试
• 分别用DO循环的5种形式编写求自然数
1~1000和的程序。
i = 1: sum = 0
Do While i <= 100
sum = sum + i
i=i+1
Loop
Print sum
147
i = 1: sum = 0
Do Until i > 100
sum = sum + i
i=i+1
Loop
Print sum
i = 1: sum = 0
Do
sum = sum + i
i=i+1
If i > 100 Then Exit Do
Loop
Print sum
本章目录
循环例题
例4.11 我国有13亿人口,按人口年增长0.8%计算,多少年后我
国人口超过26亿。
x = 13
n=0
Do While x < 26
x = x * 1.008
n=n+1
Loop
Print n, x
148
上一页
下一页
本章目录
循环例题
例4.12 用辗转相除法求两自然数的最
大公约数和最小公倍数。
求最大公约数的算法思想:
(1)对于已知两数m,n,使得m>n
(2) m除以n得余数r
(3)若r=0,则n为最大公约数,结束;否
则执行(4)
(4)m
n,n
r,再重复执行(2)
最小公倍数:两数相乘除以最大公约数
Do
r = m Mod n
If r = 0 Then
Exit Do
Else
m = n: n = r
End If
149
Loop While r <> 0
例 m=14 n=6 的最大公约数
m=14, n= 6 r=2
M=6, n=2
r=0
最大公约数为 :2
最小公倍数为:42
上一页
下一页
辗转相减法
m-n
m>n
1.对于已知m,n,计算 r = n-m
n>m
0
m=n
2.若r=0 ,则m或n为最大公约数,结束,否则,转3
3.m=min(m,n),n=r,再重复执行1
Do
If m > n Then
r=m-n
Else
r=n-m
End If
If r = 0 Then Exit Do
m = IIf(m < n, m, n): n = r
Loop
150
4.3.3 循环的嵌套
例4.13:二重循环。
Private Sub Command1_Click()
Dim m%, n%
For m = 1 To 3
For n = 1 To 2
Print m, n
Next n
Next m
End Sub
•
• 在一个循环体内又包含了一个完整的循环结构称为循环
的嵌套。循环嵌套对For循环语句和Do…Loop语句均适
用。
• FOR循环可以嵌套,但不能出现循环交叉。
151
4.3.3 循环的嵌套
• 例4.14:打印如下图形
★
★★★
★★★★★
★★★★★★★
★★★★★
★★★
★
152
ss = "★" :FontSize = 16
For i = 1 To 4
Form1.Print Spc(20 - i * 2);
For j = 1 To 2 * i - 1
Print ss;
Next j
Print
Next i
For i = 3 To 1 Step -1
Form1.Print Spc(20 - i * 2);
For j = 1 To 2 * i - 1
Print ss;
Next j
Print
Next i
本章目录
4.3.3 循环的嵌套
例4.15 打印九九乘法表
思考:打印上三角或下三角程序如何改动?
153
上一页
下一页
本章目录
4.4 其他辅助控制语句
4.4.1 Go To 语句
作用:无条件地转移到标号或行号指定的那行语句。
Go To {标号|行号}
注意:标号是字符序列,首字符必须为字母,标号后应有冒
号;行号是一个数字序列;
例4.16 判断输入的数是否为素数。(P97)
素数就是除1和本身以外,不能被其他任何整数整除的数。
根据此定义,要判别某数m是否为素数最简单的方法就是依
次用i=2~m-1去除,只要有一个数能整除 m,m就不是素数;
否则m是素数。
154
上一页
下一页
求100以内的素数
For m = 2 To 100
求100以内的素数
For i = 2 To m - 1
If (m Mod i) = 0 Then GoTo NotNextM
Next i
Print m
NotNextM:
Next m
155
m是否为素数
本章目录
4.4.2 退出和结束语句
1.Exit语句
在VB中,有多种形式的Exit语句,用于退出某种控制结构的
执行。Exit的形式如下:
Exit For、Exit Do、Exit Sub、Exit Function等。
2.End语句
独立的End语句用于结束一个程序的运行,它可以放在任何
事件过程中。
在VB中,还有多种形式的End语句,用于结束一个过程或块,
在控制语句或过程中经常使用。End语句的多种形式如下:
End If、End Select、End With、End Type 、End Sub 、
End Function 等,它与对应的语句配对使用。
156
上一页
下一页
4.5综合应用-试凑法
“穷举法”也称为“枚举法”或“试凑法”, 即将可能出现的各种情况
一一测试,判断是否满足条件,一般采用循环来实现。
例4.18 百元买百鸡问题。假定小鸡每只5角,公鸡每只2元,母鸡每只3元。
现在有100元钱要求买100只鸡,编程列出所有可能的购鸡方案。(P98)
设母鸡、公鸡、小鸡各为x、y、z只,根据题目要求,列出方程为:
x+y+z=100
3x+2y+0.5z=100
三个未知数,两个方程,此题有若干个解。
解决此类问题采用“试凑法”,把每一种情况都考虑到。
方法一:三个未知数利用三重循环来实现。
方法二:从三个未知数的关系,利用两重循环来实现。
157
常见错误
1. 不循环或死循环的问题
主要是循环条件、循环初值、循环终值、循环步长的设置有问题。
2.循环结构中缺少配对的结束语句
For 少 配对的Next
3.循环嵌套时,内外循环交叉
4.累加、连乘时,存放累加、连乘结果的变量赋初值问题
(1)一重循环
在一重循环中,存放累加、连乘结果的变量初值设置应在循环语句
前。
(2)多重循环
158 这要视具体问题分别对待。
第五章 数 组
5.1
5.2
5.3
5.4
5.5
5.6
5.7
159
数组的概念
静态数组及声明
动态数组及声明
数组的基本操作
控件数组
自定义数据类型
综合应用
本书目录
5.1 数组的概念
本章目录
1. 引例
例5.1 求100个学生的平均成绩,并统计高于平均分的人数。用简单变量和
循环,求平均成绩程序段如下:
aver = 0
For i = 1 To 100
mark = InputBox("输入学生成绩")
aver = aver + mark
Next i
aver = aver / 100
由于循环体内变量mark只能放一个学生的成绩,无法统计高于平均分的人数。
若用简单变量保存100个学生的成绩,则需定义100个变量和使用100句输入
语句。
已有知识解决方法:再重复输入成绩,带来两个问题:
(1)输入数据的工作量成倍增加;
(2)若本次输入的成绩与上次不同,则统计的结果不正确。
解决此问题的根本方法,引入数组,始终保持输入的数据,一次输入,多次
160
使用。
上一页
下一页
本章目录
数组的概念
用数组解决问题的程序如下:
Private Sub Command1_Click()
Dim mark(1 To 100) As Integer ' 声明有100个元素的数组mark
Dim aver!, overn%, i%
aver = 0
For i = 1 To 100
' 输入成绩,求分数和
mark(i) = InputBox("输入学生的成绩")
aver = aver + mark(i)
Next i
aver = aver / 100
' 求100人的平均分
overn = 0
For i = 1 To 100
' 统计高于平均分的人数
If mark(i) > aver Then overn = overn + 1
Next i
Print aver, overn
End Sub
161
上一页
下一页
本章目录
数组的概念
数组不是一种数据类型,而是一组相同类型的变量的集合。
在程序中使用数组的最大好处是用一个数组名代表逻辑上相
关的一批数据,用下标表示该数组中的各个元素,和循环语
句结合使用,使得程序书写简洁。
数组必须先声明后使用,数组声明后在内存可分配一块连续
的区域。
利用Dim语句可以声明数组名、类型、维数、数组大小;
声明时下标的个数确定数组的维数,最多可达60维;
按声明时的大小,数组分静态(定长)数组、动态(可变长)数
组。
162
上一页
下一页
本章目录
5.2 静态数组及声明
1. 一维数组
Dim 数组名(下标) [As 类型]
下标:必须为常数,不可以为表达式或变量。
下标的形式:[下界To ]上界,下标下界最小可为-32768,最
大上界为32767,省略下界,其默认值为0。一维数组的大小
为:上界-下界+1
As类型:缺省As类型,是变体数组。
例如:Dim a(10) As Integer,声明了数组名为a的一维整型
数组,有11个元素,下标范围0~10。
163
上一页
下一页
本章目录
Dim mark(1 To 100) As Integer
声明了一个一维定长数组,该数组的名字为mark,类型为整
型;共有100个元素,下标范围为1 To 100;mark数组的各
元 素 是 mark(1) , mark(2) , mark(3) , … , mark(100) ;
mark(i)表示由下标i的值决定是哪一个元素。mark数组内存
分配如下:
mark(1)
mark(2)
mark(3)
…
mark(99) mark(100)
每个数组元素有一个惟一的顺序号,下标不能超出数组声
明时的上、下界范围,否则会显示下标越界的出错提示。
数组元素的使用规则与同类型的简单变量相同。
例:Dim St(-3 To 5) As String*3
声明了St是数组名、字符串类型、一维数组、有9个元素;
下标的范围-3~5,每个元素最多存放3个字符。
164
上一页
下一页
本章目录
多维数组声明
Dim 数组名(下标1,下标2…) [As 类型]
下标个数:决定了数组的维数
每一维的大小:上界-下界+1;数组的大小为每一维大小的
乘积。
例 Dim x( 0 To 2, 0 To 4) As Long 或 Dim x(2,4) As Long
声明了一个长整型的二维数组 x;第一维下标表示行号,下
标范围为0~2;第二维下标为列号,下标范围为0~4;数组共
占据3×5个长整型变量的空间
165
x(0,0)
x(0,1)
x(0,2)
x(0,3)
x(0,4)
x(1,0)
x(1,1)
x(1,2)
x(1,3)
x(1,4)
x(2,0)
x(2,1)
x(2,2)
x(2,3)
x(2,4)
上一页
下一页
本章目录
数组声明注意
(1) 下界缺省为0,为了便于使用,在VB的窗体层或标准模块
层用Option Base n语句可重新设定数组的下界。
Option Base 1
' 设定下界为1
Dim x(10)
' 声明了x数组有10个元素
(2) 在数组声明中的下标说明了数组的整体,即每维的大小;
而在程序其他地方出现的下标表示数组中的一个元素。两者
写法形式相同,但意义不同。
例如:Dim x(10) As Integer
' 声明了x数组有11个元素
x(10)=100
‘ 对x(10)这个数组元素赋值
(3) 以下声明方法是错误的(下标是变量 )
n =InputBox(“输入n”)
Dim x(n) As Single
166
上一页
下一页
本章目录
5.3 动态数组及声明
建立动态数组要分两步:
用Dim 语句声明数组,但不指定数组的大小;
Dim 数组名( ) As 数据类型
(2) 用ReDim语句动态地分配元素个数。
ReDim 数组名 (下标[,下标2…])
例:Dim sArray( ) As Single
Sub Form_Load( )
… m=inpupbox(“请输入m”)
n=inputbox(“请输入n”)
ReDim sArray(m,n)
…
End Sub
例5.2 对例5.1改进,根据指定人数输入学生的成绩,计算
的平均分和高于平均分的人数。
167
上一页
下一页
本章目录
5.4 数组的基本操作
1. 給数组元素赋初值
(1)利用循环结构
For i = 1 To 10
iA(i)=0
Next i
对二维数组初始化要在双重循
环中完成。
FOR I =1 TO 3
FOR J=1 TO 4
A(I,J)=10
NEXT J
NEXT I
168
' iA数组的每个元素值为0
若单独对某一列(行)初始化
FOR I=1 TO 3
A(I,2)=7
NEXT I
上一页
下一页
本章目录
数组的基本操作
(2) 利用Array函数
Lbound和Ubound函数
形式: LBound(数组名[,维])
UBound(数组名[,维])
作用:获得数组中指定维的下界和上界。
例如显示数组名为x的一维数组的全部元素值:
For i = LBound(x) To UBound(x) ‘获得数组的下界和上界
Print x(i);
Next i
169
上一页
下一页
本章目录
数组的基本操作
Array函数
形式:数组名 = Array(数据列表)
例:如下程序段对a,b数组赋值,并显示结果:
Dim a As Variant, b As Variant, i%
a = Array(1, 2, 3, 4, 5)
' a数组有5个元素,上界为4
b = Array("abc", "def", "67") ' b数组有3个元素,上界为2
For i = 0 To UBound(a)
注意:
Picture1.Print a(i); " ";
(1)利用Array对数组各元素赋值,声
Next i
明的数组是可调数组或连圆括号都可省,
并且其类型只能是Variant。
For i = 0 To UBound(b)
(2)数组的下阶为零,上界由Array函
Picture1.Print b(i); " ";
数括号内的参数个数可决定,也可通过
Next i
函数Ubound获得。
170
上一页
下一页
本章目录
数组的基本操作
2. 数组的输入
(1)利用随机函数产生一定范围内的数据
例:利用随机函数产生0-100之间的随机函数赋值给mark数
组。
Dim a(1 To 10) As Integer
For i = 1 To 10
a(i) = Int(Rnd * 101)
Next i
171
上一页
下一页
本章目录
数组的基本操作-输入
(2)通过InputBox函数输入:
For i = 0 To 3
For j = 0 To 4
' 输入时显示: "输入 i j 元素的值",其中i,j的值在变化
sb(i, j) = InputBox("输入" & i &"," & j & "元素的值")
Next j
Next i
对于大量的数据输入,为了便于编辑,一般不用InputBox
函数,而用文本框再加某些技术处理 。
172
上一页
下一页
测试:
将1~100存入一个一维数组,并将其
输出,每行输出10个元素。
173
数组的基本操作
3.数组的赋值
在VB6.0中,提供了数组直接对数组的赋值。例如:
Dim a() As Variant, b() As Variant, i%
a = Array(1, 2, 3, 4, 5)
ReDim b(UBound(a))
b=a
For i = 0 To UBound(a)
b(i) = a(i)
Next i
注意:赋值号左边的数组只能声明为Variant的可调数组或简单变量。
174
数组的基本操作
4. 数组的输出
(1)一维数组的输出
For i = 1 To 4
Print A(i)
Next i
(2) 二维数组完整的输出(以一个3*4的数组为例)
FOR I=1 TO 3
FOR J=1 TO 4
PRINT A(I,J);
NEXT J
PRINT
NEXT I
175
数组的基本操作
(3) 输出方阵中的下三角元素
例:定义一个6行6列的二维数组,每一个数组元素的值为其
对应的下标之和(a(2,3)=2+3),输出其下三角元素。
Private Sub Form_click()
Dim i, j
Dim a(6, 6) As Integer
For i = 1 To 6
For j = 1 To i
a(i, j) = i + j
Print a(i, j); " ";
Next j
Print
Next i
End Sub
176
数组基本操作-求最大元素
本章目录
5.求数组的最大元素及所在下标及各元素之各
思想:求数组中最大元素及下标,一般假设第一个元素为最
大、其下标也对应为最大元素的下标,然后将该数与数组中
其他元素逐一比较,若有比最大值大的元素,马上就交换,
同时也交换最大值下标。
求最小值及最小值下标的方法也相似。
例:用随机数函数产生100个300~500之间的整数,将这些整数
赋予数组B,求出数组B中的最大值、最小值、累加、平均值。
用PICTURE控件对象输出该数组(要求每行输出10个数)及最
大数、最小数、累加和、平均值。
177
上一页
下一页
Private Sub picture1_click()
Randomize
Dim i% , h% , sum% , big% , smal l %
Dim B(100) As Integer
For i = 1 To 100
B(i) = Int(Rnd * 200 + 300)
Next i
h=0
For i = 1 To 100
Picture1.Print B(i); " ";
h=h+1
If h = 10 Then
Picture1.Print
h=0
End If
Next i
178
big = B(1): small = B(1): sum = 0
For i = 1 To 100
sum = sum + B(i)
If big < B(i) Then big = B(i)
If small > B(i) Then small = B(i)
Next i
Picture1.Print "最大值: "; big, ,
Picture1.Print "最小值: "; small
Picture1.Print "总和: "; sum, ,
Picture1.Print "平均值: "; sum / 100
End Sub
数组基本操作-求最大元素
本章目录
习题:定义数组A和数组B,其长度都为10,数组元素的值由
随机数产生,其值范围为(10-90)之间的整数,然后将两数
组对应的元素相加赋给数组C,分别将这三个数组输出。
179
Private Sub Form_Click()
Dim a(1 To 10), b(1 To 10), c(1 To 10)
For i = 1 To 10
a(i) = Int(Rnd * 91 + 10)
b(i) = Int(Rnd * 91 + 10)
c(i) = a(i) + b(i)
Next i
For i = 1 To 10
Print a(i);
Next i
Print
For i = 1 To 10
Print b(i);
Next i
Print
For i = 1 To 10
Print c(i);
Next i
End Sub
上一页
下一页
本章目录
数组基本操作-交换元素
6.将数组中各元素交换
交换数组中各元素实际上是找下标之间的规律,在数组操作
时经常使用。
交换的要求是将数组第1个元素与最后一个交换,第2个元素
与倒数第2个交换,以此类推。
交换前:
i= 1
2
2
2
4
3
4
6
4
6
8
8
10
5
6
10
1
3
5
7
1
7
8
3
9
9
5
10
7
9
…
交换后:
180
9
7
5
3
1
10
8
上一页
6
4
下一页
2
将数组中各元素交换代码如下:
For i =1 To 10\2
t=iA(i)
iA(i)=iA(10-i+1)
iA(10-i+1)=t
Next I
181
测试
• 用InputBox函数给A(3*4)输入数据,
输出该矩阵。
(1)找出其中最大的那个元素所在行和列,
并输出其值及行号和标号,
(2)将A矩阵转置(即行、列互换),并输
出转置后的矩阵。
182
5.5 控件数组
五. 控件数组
一组相同类型的控件组成。 它们共用一个控件名,具有相同的属性,建立
时系统给每个元素赋一个唯一的索引号(Index)。通过属性窗口的Index属性,
可以知道该控件的下标是多少,第1个下标是0。例如,控件数组cmdName(3)
表示控件数组名为cmdName的第4个元素。
控件数组共享同样的事件过程,通过返回的下标值区分控件数组中的各个
元素。
例: Private Sub cmdName _Click(Index As Integer)
…
If Index=3 then
‘ 处理第四个命令按钮的操作
End If
…
End Sub
183
本章目录
控件数组-建立
(1) 在设计时建立的步骤:
在窗体上画出某控件,建立的第一个元素。选中该控件,进
行Copy和Paste操作,系统提示
单击是(Y)按钮
184
上一页
下一页
本章目录
控件数组-建立
(2) 运行时添加控件数组
 在窗体上画出某控件,设置该控件的Index值为0,表示该
控件为控件数组,建立的第一个元素。
 编程通过Load方法添加其余的若干个元素,也可以通过
UNLOAD方法删除某个添加的元素
添加:LOAD
控件数组名(下标)
删除:UNLOAD 控件数组名(下标)
每个新添加的控件数组元素通过Left和Top属性,确定其在
窗体的位置,并将Visible属性设置为True。
例5.3建立一个专用于输入帐号的数字按钮。
185
上一页
下一页
本章目录
5.7 综合应用-排序
1. 数组排序
排序是将一组数按递增或递减的次序排列,例如按学生的成
绩、球赛积分等排序。排序的算法有许多,常用的有选择法、
冒泡法、插入法、合并排序等。
 选择法排序
基本思想:每次在若干个无序数中找最小(大)数,并放在相
应的位置。
假定有n个数的序列,要求按递增次序排序,实现的步骤是:
1) 从n个数中找出最小数的下标,最小数与第1个数交换位置;
通过这一轮排序,第1个数已确定好。
2) 除已排序的数外,其余数再按步骤1)的方法选出最小的数,
与未排序数中的第1个数交换位置。
3) 重复步骤 2),最后构成递增序列。
190
上一页
下一页
本章目录
综合应用-选择法排序
a(1)
a(2)
a(3)
a(4)
a(5)
a(6)
原始数据
第1轮比较
a(2)
a(3)
a(4)
a(5)
a(6)
第2轮比较
2 3 9 6 8 7
a(3)
a(4)
a(5)
a(6)
第3轮比较
2 3 6 9 8 7
a(4)
a(5)
a(6)
第4轮比较
2 3 6 7 8 9
a(5)
a(6)
第5轮比较
2 3 6 7 8 9
8 6 9 3 2 7
2 6 9 3 8 7
选择法排序过程示意
191
上一页
下一页
例5.4 对已知存放在数组中的n个数,用选择法按递增顺序排序。
(1) 从n个数的序列中选出最小的数(递增),与第1个数交换位置;
(2)除第1个数外,其余n-1个数再按(1)的方法选出次小的数,与
第2个数交换位置;
(3)重复(1)n-1遍,最后构成递增序列。
For i = 1 To n - 1
iMin= i
For j = i+1 To n
If iA(j) < iA(iMin) Then iMin = j
Next j
t= iA(i): iA(i) = iA(iMin) : iA(iMin) = t
Next I
192
本章目录
综合应用-冒泡法排序
 冒泡法排序
基本思想是:从第一个元素开始,对数组中两两相邻的元素比较,
将值较小的元素放在前面,值较大的元素放在后面,一轮比较比
较完毕,一个最大的数沉底成为数组中的最后一个元素,一些较
小的数如同气泡一样上浮一个位置。n个数,经过n-1轮比较后完
成排序。
a(1)
a(1)
a(1)
a(1)
a(1)
原始数据
a(2) a(3) a(4) a(5) a(6) 第1轮比较
a(2) a(3) a(4) a(5)
第2轮比较
a(2) a(3) a(4)
第3轮比较
a(2) a(3)
第4轮比较
a(2)
第5轮比较
193
例5.5
用冒泡排序法实现例5.4的问题。
8
6
6
3
2
2
上一页
6
8
3
2
3
3
9
3
2
6
6
6
3
2
7
7
7
7
2
7
8
8
8
8
7
9
9
9
9
9
下一页
本章目录
综合应用-数据输入
2. 大量数据的输入和编辑
在财务、工程计算中,经常需要对大量的数据进行输入和编
辑。为此可利用文本框通过编程来实现。
例5.6输入一系列的数据,输入结束将它们按分隔符分离后
存放在数组中。对输入的数据允许修改和自动识别非数字数
据。
处理方法:
 利用文本框输入和编辑功能输入数据;再将输入的内容
按规定的分隔符分离到数组中。
 利用Replace函数去除重复输入的分隔符。
 分离数据可利用Split函数(P66)。
194
上一页
下一页
本章目录
综合应用-插入数据
3.插入、删除数据
插入数据基本思想是:
1)首先查找待插入数据在数组中的位置k;
2)然后从最后一个元素开始往前直到下标为k的元素依次往后移
动一个位置;
3) 第k个元素的位置腾出,将数据插入。
④
1
4
7
10
x
14
13
16
③
19
②
22
①
25
k
例5.7在有序数组a中插入数值x。
195
上一页
下一页
本章目录
综合应用-删除数据
删除操作首先也是要找到欲删除的元素的位置k;然后从k+1到n个
位置开始向前移动;最后将数组元素减1。
①
1
4
7
10
13
14
②
16
③
④
19
⑤
22
25
k
例5.8要将值为13的元素删除。
196
上一页
下一页
八、数组中常见错误和注意事项
1.静态数组声明下标出现变量
n = InputBox("输入数组的上界")
Dim a(1 To n) As Integer
2.数组下标越界
引用的下标比数组声明时的下标范围大或小。
Dim a(1 To 30) As Long, i%
a(1) = 1: a(2) = 1
For i = 1 To 30
a(i) = a(i - 2) + a(i - 1)
Next I
print a(i)
3.数组维数错
数组声明时的维数与引用数组元素时的维数不一致。
Dim a(3, 5) As Long
a(I)=10
4.Aarry函数使用问题
197
只能对Variant的变量或动态数组赋值。
第六章
过
程
6.1 函数过程的定义与调用
6.2 子过程的定义与调用
6.3 参数传递
6.4 过程和变量的作用域
6.5 递 归
6.6 综合应用
198
本书目录
过程是完成特定功能的一组代码,以一个名字来标识,
通过该名字可以调用过程。
使用过程有两个重要的作用:
(1) 把一个复杂的任务划分为小任务,每个小任务用过
程来实现,便于调用和维护。
(2) 避免代码重用。
VB中有两类过程:一类是系统提供的内部函数过程和
事件过程,事件过程是构成VB应用程序的主体。另一类
是用户根据自己的需要定义、供事件过程多次调用的过程
199
自定义过程分类:
• 以“SUB”保留字开始的子过程;
• 以“FUNCTION”保留字开始的函数过程;
• 以“PROPERTY”保留字开始的属性过程;
• 以“EVENT”保留字开始的事件过程;
• 这里仅介绍用户自定义的子过程和函数过程。
200
6.1 函数过程的定义和调用
本章目录
b
1. 引例6.1已知多边形的各条边的长度,要
a S1
c
计算多边形的面积。
S2
计算多边形面积,可将多边形分解成若干个
g S3 e
三角形。计算三角形面积的公式如下:
f
1
area  c (c  x )( c  y )( c  z ) c  ( x  y  z )
2
定义函数过程area
Public Function area(x!, y!, z!) As Single
Dim c!
c = 1 / 2 * (x + y + z)
area = Sqr(c * (c - x) * (c - y) * (c - z))
End Function
201
调用函数过程:
Sub command1_click()
… 输入若干个三角形边长
S=area(a,b,c)+area(c,d,e)
S=S+area(e,f,g)
Print S
End Sub
上一页
下一页
d
本章目录
函数过程的定义
自定义函数过程有两种方法:
(1)利用工具|添加过程命令定义,生成一个函数的框架。
(2)利用代码窗口直接定义。
函数过程形式:
Function 函数过程名([参数列表]) [As 类型]
局部变量或常数定义
语句块
函数名 = 返回值
函数过程体
[Exit Function]
语句块
函数名 = 返回值
End Function
202
上一页
下一页
本章目录
函数过程的定义
函数过程名:命名规则同变量名
参数列表形式: [ByVal]变量名[()][As 类型]
称为形参或哑元,仅表示参数的个数、类型,无值。
函数名 = 返回值 在函数体内至少对函数名赋值一次
[Exit Function] :表示退出函数过程
例6.2:定义一个函数,计算1到n的累加和。
203
Function leijia(n As Integer)
Dim sum As Double
For i = 1 To n
sum = sum + i
Next i
leijia = sum
End Function
习题:编计算矩形面积的函数。
上一页
下一页
本章目录
函数过程的调用
函数过程调用形式:函数过程名([参数列表])
参数列表:称为实参或实元,它必须与形参个数相同,位置
与类型一一对应。可以是同类型的常量、变量、表达式。
Private Sub Command1_Click()
Print leijia(100)
End Sub
程序运
行流程
204
leijia(100)
leijia(n As Integer)
Function leijia(n As Integer)
Dim sum As Double
For i = 1 To n
sum = sum + i
Next i
leijia = sum
End Function
上一页
下一页
本章目录
函数过程的调用
Private Sub Command1_Click()
c = mj(5, 6)
End Sub
程序运
行流程
205
c = mj(5, 6)
mj(m As Single, n As Single)
Function mj(m As Single, n As Single)
Dim area As Single
area = m * n
mj = area
Print "该矩形的面积为:"; area
End Function
上一页
下一页
习题:编写一个函数Even判断一个整数是奇数还是偶数,若
是偶数,则返回True,否则返回False。
Public Function even(x As
Integer) As Boolean
If x Mod 2 = 0 Then
even = True
Else
even = False
End If
End Function
206
‘调用该函数过程
Private Sub Command1_Click()
Dim y As Integer
y = InputBox("请输入一个整数")
Print even(y)
End Sub
本章目录
6.2 子过程的定义与调用
以下情况使用函数过程存在不足:
不是为了获得某个函数值,而是为了某种功能的处理。
要获得多个结果。
VB中提供了使用更灵活的子过程。
1. 引例
例6.4编一过程,对Label1控件进行移动,其中通过参数
Tag的值(1或-1)决定向右下角还是左上角移动。
该过程不是为了计算获得某个结果,而是进行对控件移动
的处理。
208
上一页
下一页
本章目录
子过程的定义
子过程定义的方法同函数过程,形式如下:
Sub 子过程名[(参数列表)]
局部变量或常数定义
语句
[Exit Sub]
语句
End Sub
子过程名、形参同函数过程中对应项的含义一致,当无形
参时不要括号。
209
上一页
下一页
子过程与函数过程的区别
本章目录
(1) 函数过程有返回值,过程名就有类型;同时在函数过程
体内必须对函数过程名赋值。子过程名没有值,过程名也就
没有类型,同样不能在子过程体内对子过程名赋值。
(2) 把某功能定义为函数过程还是子过程,没有严格的规定。
一般若程序有一个返回值时,函数过程直观;当有多个返回
值时,习惯用子过程。
(3) 形参个数的确定。形参是过程与主调程序交互的接口,
从主调程序获得初值,或将计算结果返回给主调程序。不要
将过程中所有使用过的变量均作为形参。
(4) 形参没有具体的值,只代表了参数的个数、位置、类型
;只能是简单变量、数组名,不能是常量、数组元素、表达
式。
210
上一页
下一页
本章目录
子过程调用
子过程的调用是一句独立的调用语句,有两种形式:
Call 子过程名[(实参列表)]
子过程名 [实参列表]
用Call关键字时,若有实参,则实参必须用圆括号括起,无
实参圆括号省略
注意:若实参要获得子过程的返回值,则实参只能是与形参
同类型的简单变量、数组名,不能是常量、表达式,也不能
是控件名。
例6.5 分别编一统计字符串S中定冠次词The出现个数的子过
程和函数过程,并分别调用。
处理方法:利用InStr函数反复在字符串S找The子串。
将函数过程改为子过程,只需将函数过程的返回结果作为子
过程的形参。
211
上一页
下一页
例6.6 分别编一计算某级数部分和的子过程和函数过程,并调用。
级数为:
212
x2
xn
1  x   ...   ...
2!
n!
精度为:
n
x
 eps
n!
程序运行流程:
Private Sub Command1_Click()
Dim f1#, f2#
找函数名调用jishu1
①
f1 = jishu1(2#, 0.000001)
函数名带了值返回
④
⑤
②
Function jishu1(x!, eps#) As Doubl
③ …
jishu1=表达式
End Function
找子过程名调用jishu2 ⑥
Call jishu2(f2, 2#, 0.000001)
Sub jishu2(s#, x!, eps#)
Print "f1="; f1, "f2 = "; f2
213 Sub
End
…⑦
s=表达式
⑧
End Sub
测试
编写一个求阶层的函数Funjc,调用该函
数求1+1/2!+1/3!+···+1/10!
214
本章目录
6.3 参数传递
在调用过程时,一般主调过程与被调过程之间有
数据传递,即将主调过程的实参传递给被调过程
的形参,完成实参与形参的结合,然后执行被调
过程体。在VB中,实参与形参的结合有两种方
式,即传址(ByRef)和传值(ByVal),其中传址又
称为引用,是默认的方法。区分两种结合的方法
是在要使用传值的形参前加“ByVal”关键字。
215
上一页
下一页
本章目录
6.3.1 传址与传值
传值的结合过程:当调用一个过程时,系统将实参的值复制
给形参,实参与形参断开了联系。被调过程中的操作是在形
参自己的存储单元中进行,当过程调用结束时,这些形参所
占用的存储单元也同时被释放。因此在过程体内对形参的任
何操作不会影响到实参。
传址的结合过程:当调用一个过程时,它将实参的地址传递
给形参。因此在被调过程体中对形参的任何操作都变成了对
相应实参的操作,实参的值就会随过程体内对形参的改变而
改变。
216
上一页
下一页
本章目录
6.3.1 传址与传值
传值与传址的选用规则:
(1) 形参是数组只能用传址方式;
(2) 若要将过程中的结果返回给主调程序,则形参必须是传
址方式。这时实参必须是同类型的变量名(包括简单变量、数
组名),不能是常量、表达式。
(3) 若形参不是前两种情况,一般应选用传值方式。这样可
增加程序的可靠性和便于调试,减少各过程间的关联。
217
上一页
下一页
例6.7编写交换两个数的过程,Swap1用传值传递,Swap2用传
址传递 。
Sub Swap1(ByVal x%, ByVal y%)
t = x: x = y: y = t
End Sub
Private Sub Command1_Click()
a = 10: b = 20
Swap1 a, b '传值
Print "A1="; a, "B1="; b
a = 10: b = 20
Swap2 a, b
'传地址
Print "A2="; a, "B2="; b
End Sub
218
Sub Swap2(x%, y%)
t = x: x = y: y = t
End Sub
ByVal 传值
a
实参
a
10
x
形参
传地址
10
x
10
a 的地址
测试:传址与传值调用的比较
• 写出下列程序的运行结果。
Function hscs(ByVal x!)
x = x + 10
Print "x="; x
hscs = x
End Function
Private Sub Form_Click()
Dim a!, b!,x!
a = 12: b = hscs(a)
Print "b="; b
Print "a="; a
End Sub
219
本章目录
6.3.2 数组参数的传递
在VB中允许参数是数组,数组只能通过传址方式进行传递。在
传递数组时还要注意以下事项:
(1) 在实参列表和形参列表中放入数组名,忽略维数的定义,
但数组的圆括号不能省。
(2) 如果被调过程不知道实参数组的上下界,可用LBound和
UBound函数确定实参数组的下界和上界。
例6.8编一子函数过程,求任
意一维数组中各元素之积,主
调程序调用该函数,分别求:
t1 
a
i 1
220
10
5
i
t2 
b
i
i 2
例6.9 编两个子过程:子过程
一求数组中最大值和最小值;
子过程二以每行5列显示数组
结果。主调程序有10个元素,
分别调用两个子过程。
上一页
下一页
使用过程注意事项:
1. 确定自定义的过程是子过程还是函数过程
函数过程名有值,子过程名无值。
2.过程中形参的个数和传递方式的确定
过程中参数的作用是实现过程与调用者的数据通信。
(1)从主调程序获得初值,值传递。
(2)将结果返回给主调程序,地址传递。
3. 实参与形参结合时对应问题
个数、类型、位置、次序一一对应。
221
6.4 变量、过程的作用域
本章目录
一个变量、过程随所处的位置不同,可被访问的范围也不同,
变量、过程可被访问的范围称为变量、过程的作用域。
6.4.1 过程的作用域
1. 窗体/模块级
所定义的子过程或函数过程前加Private关键字,过程只能被本
窗体(在本窗体内定义)或本标准模块(在本标准模块内定义)中
的过程调用。
2. 全局级
加Public关键字(缺省)的过程,可供该应用程序的所有窗体
和所有标准模块的过程调用。
(1) 在窗体定义的过程,外部过程要调用时,必须在过程名前
加该过程所处的窗体名。
(2) 在标准模块定义的过程,外部过程均可调用,但过程名必
222
须惟一,否则要加标准模块名。
上一页
下一页
223
本章目录
6.4.2 变量的作用域
1. 局部变量
在过程内用Dim语句声明的变量(或不加声明直接使用的变量),
只能在本过程中使用的变量,别的过程不可访问。一旦该过程
体结束,变量的内容自动消失,占用的存储单元释放。不同的
过程中可有相同名称的变量,彼此互不相干。
2. 窗体/模块级变量
在通用声明段中用Dim语句或用Private语句声明的变量,可
被本窗体/模块的任何过程访问。
3. 全局变量
在通用声明段中用Public语句声明的变量,可被应用程序的任
何过程或函数访问。只有当整个应用程序执行结束时,全局变
量的值才会消失。
224
上一页
下一页
本章目录
变量的作用域
例如在下面一个标准模块文件中不同级的变量声明:
Public Pa As integer
' 全局变量
Private Mb As string *10
' 窗体/模块级变量
Sub F1( )
Dim Fa As integer
' 局部变量
…
End Sub
Sub F2( )
Dim Fb As Single
' 局部变量
…
End Sub
225
上一页
下一页
本章目录
6.4.3 静态变量
声明形式:
Static 变量名 [AS 类型]
Static Function 函数过程名([参数列表]) [As 类型]
Static Sub 子过程名[(参数列表)]
过程名前加Static,表示该过程内的局部变量都是静态变量。
静态变量在程序运行过程中可保留变量原来的值。而用Dim说
明的变量,每次调用过程时,重新初始化。
例6.10比较Dim和Static两者说明了变量的区别。
Private Sub Form_Click()
Dim i% ,isum%
For i = 1 To 5
isum = sum(i)
Print isum
Next i
226
End Sub
Private Function sum(n As Integer)
Static j As Integer
j=j+n
sum = j
End Function
上一页
下一页
本章目录
6.5 递归
递归过程在自身定义的内部调用自己。
例6.11编fac(n)=n! 的递归函数
n 1
1
fac(n)  
最典型的例子是对阶乘
n * fac(n  1) n  1

运算作如下的定义:
Function fac(n As Integer) As Integer
n!  n  ( n  1)!
If n = 1 Then
fac = 1
( n  1)!  ( n  1)  ( n  2)!
Else
fac = n * fac(n - 1)
Sub Command1_Click()
End If
Print “fac(4)=”;fac(4)
End Function
End Sub
用自身的结构来描述自
身就称为递归。
227
结果:
fac(4)=24
上一页
下一页
本章目录
递归结构
递推
fac(4)=4*fac(3)
回归
fac(3)=3*fac(2)
fac(2)=2*fac(1)
fac(1)=1
fac(4)=4*6
fac(3)=3*2
fac(2)=2*1
递推过程:每调用自身,当前参数压栈,直到达到递归结束条件。
回归过程:不断从栈中弹出当前的参数,直到栈空。
递归算法设计简单,但消耗的机时和占据的内存空间比非递归大。
构成递归的结构如下:
递归结束条件及结束时的值;
能用递归形式表示,并且递归向终止条件发展。
228
上一页
下一页
例6.11利用递归求最大公约数
 n
gcd( m, n)  
gcd( n, m Mod n)
m Mod n  0
m Mod n  0
Public Function gcd(m As Integer, n As Integer) As Integer
If (m Mod n) = 0 Then
gcd = n
Else
gcd = gcd(n, m Mod n)
End If
End Function
Private Sub Form_Click()
Print gcd(10, 4)
End Sub
229
递归常见错误:
1.递归调用出现“栈溢出”
在递归调用时,其中的参数要向终止方向收敛。
如下求阶乘的递归函数过程:
Public Function fac(n As Integer) As Integer
If n = 1 Then
fac = 1
Else
fac = n * fac(n - 1)
End If
End Function
Private Sub Command1_Click()
Print “fac(5)=”;fac(5)
Print “fac(5)=”;fac(-5) ‘ 栈溢出
End Sub
230
本章目录
本章目录
6.6 综合应用
1. 数制转换
不同进制数之间的转换,可通过编程来实现;也可通过VB提
供的内部函数:十进制转换为八进制函数(Oct)、转换为
十六进制函数(Hex)来实现。
例6.13编一函数,实现一个十进制整数转换成二至十六任意
进制的字符。
一个十进制正整数m转换成r进制数的思路是:将m不断除r取
余数(若余数超过9,还要进行相应的转换,例如10变成A,
11变成B等),直到商为零,以反序得到结果,即最后得到的
余数在最高位。
231
上一页
下一页
6.6常用算法(三)
1.数制转换
例6.13 将一个十进制整数m转换成 r (2-16)进制字符串。
方法:将m不断除 r 取余数,直到商为零,以反序得到结果。
232
本章目录
综合应用-加密
2.加密和解密
在当今信息社会,信息的安全性得到了广泛的重视,信息加
密是一项安全性的措施之一。信息加密有各种方法,最简单
的加密方法是:将每个字母加一序数, 称为密钥。例如,加
序数5,这时AF,a f,B G… Y D,ZE;解密是
加密的逆操作。
例6.14 编一加密和解密的程序,即将输入的一行字符串中
的所有字母加密,加密后还可再进行解密。
233
上一页
下一页
2.例6.14加密和解密
简单加密的思想是:
将每个字母C加一序数K,式子 c=chr(Asc(c)+k),
例如序数k为5,这时 “A”“F”, “a”“f”,“B”“G”…
当加序数后的字母超过“Z”或“z”则 c=hr(Asc(c)+k -26)。
解密为加密的逆过程。
234
综合应用-查找、字符处理
本章目录
3.查找
查找在日常生活中经常遇到,利用计算机快速运算的特点,
可方便地实现查找。查找是在线性表(在此为数组)中,根据
指定的关键值,找出与其值相同的元素。一般有顺序查找和
二分法查找。顺序查找根据查找的关键值与数组中的元素逐
一比较,若相同,查找成功,若找不到,则查找失败。
例6.15实现顺序查找。
4. 字符处理应用
例6.16 编写一个英文打字训练的程序,要求如下:
(1) 在标签框内随机产生30个字母的范文;
(2) 当焦点进入输入文本框时开始计时,并显示当时的时间;
(3) 当输入了30个字母时结束计时,禁止向文本框输入内容,显示打字的
速度和正确率。
235
上一页
下一页
3.查找
(1)顺序查找例6.15。
顺序查找根据查找的关键值与数组中的元素逐一比较.数组可无序。
Public Sub Search(a() As Variant, ByVal key As Variant, index%)
Dim i%
For i = LBound(a) To UBound(a)
If key = a(i) Then
' 找到,元素的下标在index中,结束查找
index = i
Exit Sub
End If
Next i
index = -1
' 找不到, index形参的值为-1
End Sub
平均查找次数 n/2
236
(2)二分法查找
要查找的数组必须有序。
思想:要查找的关键值Key同数组的中间mid项元素比较:
Key<a(mid) high=mid-1 查找区域缩小一半,继续
Key=a(mid)
找到 结束
Key>a(mid) low=mid+1
查找区域缩小一半,继续
Low
直到找到或查找区域中无元素.
本例用递归实现6.16
Sub birsearch(a(), low%, high%, key , index%) mid
237
444
Key
high
12
34
56
78
111
222
333
444
555
666
777
888
4.排序
选择、冒泡、插入法排序等。
前两种排序欲排序的数据全部输入后,再进行排序;
插入法排序每输入一项,马上插入到数组应在的位置,数组始终有序。
例6.17 实现的步骤:
(1)输入欲排序的数据项x;在数组a中找x应所处的位置j;
(2)从数组的最后一个元素开始到下标j依次往后移,使j位置空出;
(3)将x放入位置j处,一个数据插入完成;
(4)有若干个数重复(1)~(3)。
238
5. 例6.18 高次方程求根
f ( x)
有牛顿迭代法、二分法、弦截法等
(1)牛顿迭代法
迭代公式:
f ( xi )
xi 1  xi 
f ' ( xi )
思想:
对方程给定一个初值x0作为方程的
近似根,利用迭代公式,求得x1,
当
x1  x0  
x1为求得的近似根,否则x1作为x0再迭代。
239
x1
x0
(2) 二分法求根
思想: 已知求根区间[a,b]有一根,每次把求根区间缩小一半,直到找到解或
求根区间足够小。
方法:求[a,b]的中点c,判断
f(c)=0, c为求得的根,结束;
f(a)与f(c)同号,则[a,c]无根,代替a;
否则[c,b]无根,c代替b;
使求根区间缩小一半,重复上述步骤,直到区间小于精度。
Public Function halfRoot(ByVal a!, ByVal b!)
Dim c!
Do While Abs(b - a) > 0.00001
c = (a + b) / 2
If f(c) = 0 Then
Exit Do
ElseIf f(a) * f(c) > 0 Then
a=c
Else
b=c
End If
Loop
240
halfRoot = c
End Function
f(x)
a
a
c
b
x
6.例6.19数值积分
有矩形法、梯形法、抛物线法(又称辛卜生法)等。
梯形法积分的思想是:
将积分区间[a,b]n等分,小区间的长度为, h
第i块小矩形的近似面积为:si

f ( xi )  f ( xi 1 )
h
2

ba
n
整个积分的结果为这n块小面积的累加,即 :
n
1
f ( xi )  f ( xi 1 )
S 
 h   ( f (a)  f (b)) 
2
i 1
2

f ( x i )  h
i 1

Public Function trapez(ByVal a!, ByVal b!, ByVal n%) As Single
Dim sum!, h!, x!
h = (b - a) / n
sum = (f(a) + f(b)) / 2
For i = 1 To n - 1
x=a+i*h
sum = sum + f(x)
Next i
241
trapez = sum * h
End Function
n 1

7.字符串处理
例6.20编写一个英文打字训练的程序.要求如下:
(1)在标签框内随机产生30个字母的范文;
(2)当焦点进入文本框时开始计时,并显示当时时间;
(3)在键入文本框按产生的范文输入相应的字母;
(4)当键入满了30个字母结束计时,禁止向文本框输入内
容 ,键入的字符逐一范文比较,显示打字的速度和正确
率。
242
第七章
7.1
7.2
7.3
7.4
7.5
7.6
243
常用控件
单选按钮、复选框和框架
列表框和组合框
滚动条、Slider和Progress控件
定时器和Animation控件
鼠标和键盘
综合应用
本书目录
本章目录
控件分类
1. 标准控件
标准控件总是出现在工具箱中,不能够从工具箱中删除。
2. ActiveX控件
用ActiveX技术创建的对象组成 ActiveX部件, 部件文件扩展
名ocx,存放在Windows的SYSTEM目录中,是可以重复使用
的编程代码和数据。可分为ActiveX控件、ActiveX.EXE、
ActiveX.DLL和ActiveX文档4种。
可通过工程|部件命令添加到工具箱上,像标准控件一样使用
3.可插入对象
可插入对象是Windows应用程序的对象,例如Excel工作表。
可插入对象也可以添加到工具箱中,具有与标准控件类似的
属性,可以同标准控件一样使用。
244
上一页
下一页
控件分类
1. 标准控件
内部控件,出现在工具箱上的控件,20个
2. ActiveX控件
ActiveX部件:是可以重复使用的编程代码和数据
是由用ActiveX技术创建的一个或多个对象所组成
ActiveX部件文件:扩展名OCX,在Windows的SYSTEM目录中
ActiveX控件
ActiveX文档
ActiveX部件
ActiveX DLL
ActiveX EXE
ActiveX控件添加到工具箱:
245
工程/部件
选定控件
常用ActiveX控件所在的文件:
ActiveX控件
ActiveX部件
文件名
通用对话框
(CommonDialog)
Microsoft Common Dialog Control 6.0
COMDLG32
.OCX
ToolBar
StatusBar
Microsoft Windows
Common Control 6.0
MSCOMCTL
.OCX
ProgressBar
Slider
Animation
UpDown
246
Microsoft Windows
Common Control-2 6.0
MSCOMCT2
.OCX
ActiveX控件与ActiveX DLL/EXE的区别:
ActiveX控件:
有界面
用“工程/部件”命令加载
工具箱上有图标
ActiveXDLL/EXE:
没有界面
用“工程/引用”设置引用
工具箱上没有图标
3. 可插入对象
247
Windows应用程序的对象
可插入对象可添加到工具箱上
同标准控件一样使用
例如:Microsoft Excel工作表
7.1 单选按钮、复选框和框架
本章目录
1)单选钮(OptionButton)的左边有一个○。
单选钮必须成组出现,用户在一组单选钮中必
须选择一项,并且最多只能选择一项。单选钮
主要用于在多种功能中由用户选择一种功能的
情况。
(2)检查框(CheckBox)的左边有一个□。检查
框列出可供用户选择的选项,用户根据需要选
定其中的一项或多项。检查框主要用于选择某
一种功能的两个不同状态的情况。
248
上一页
下一页
7.1 单选按钮、复选框和框架
本章目录
1.单选按钮(OptionButton)
Caption属性:文本标题。
Alignment属性
0:控件钮在左边,标题显示在右边。
1:控件钮在右边,标题显示在左边。
Value属性
True:选定
False:未选定
事件 Click
249
上一页
下一页
本章目录
复选框
2.复选框(CheckBox)
Caption属性:文本标题。
Alignment属性
0:控件钮在左边,标题显示在右边。
1:控件钮在右边,标题显示在左边。
Value属性
0--Unchecked:未被选定
1--Checked:选定
2--Grayed:灰色,禁止选择
事件 Click
例7.1 通过单选按钮和复选框设置文本框的字体。
250
上一页
下一页
本章目录
框架
单选钮的一个特点是当选定其中的项,其余自动关闭。但
当需要在同一窗体中建立几组相互独立的单选钮时,就需
要用框架(Frame)将每一组单选钮框起来,这样在一个
框架内的单选钮为一组,它们的操作不影响框外其他组的
单选钮。
在窗体上创建框架及其内部控件时,必须先建立框架,然
后在其中建立各种控件。
注:创建控件不能使用双击工具箱上工具的方式。
如果要用框架将现有控件分组,则可先选定所有控件,将
它们剪切(Ctrl+X)到剪贴板,然后选定框架并将剪贴板
上的控件粘贴(Ctrl+V)到框架上
251
上一页
下一页
本章目录
框架
3.框架(Frame)
具有容器功能
Caption属性:框架标题
Enabled属性
False,不允许对框架内的对象进行操作。
Visible属性
True:框架及其控件可见。
False:框架及其控件被隐含起来。
事件 Click、DblClick
一般不需要编写框架的事件过程。
例7.2 框架用法示例
252
上一页
下一页
本章目录
7.2 列表框和组合框
列表框通过显示多个选项,供用户选择,不能直接修改其中
的内容。组合框是组合了文本框和列表框的特性而形成的一
种控件。在组合框中选定某项后,其内容自动装入文本框。
组合框有3种式样。
下拉式组合框
简单组合框
下拉式列表框
253
上一页
下一页
列表框和组合框共有的属性
共有属性:
1.List属性:
该属性是一个字符型数组,存放列表框的项目。List 数组
的下标是从0开始的,即第一个元素的下标是0。
1.ListIndex
该属性只能在程序中设置或引用。
ListIndex的值表示执行时选中的列表项序号。如果未选中
任何项,则ListIndex的值为-1。
3.ListCount
该属性只能在程序中设置或引用。
ListCount的值表示列表框中项目的数量。ListCount-1表
示列表中最后一项的序号。
254
4.Sorted 属性
该属性只能在设计状态设置。
Sorted属性决定列表框中项目在程序运行期间是否按字母顺
序排列显示。如果Sorted为True,则项目按字母顺序排列显
示;如果Stored为False,则项目按加入先后顺序排列显示。
5.Text属性
该属性是默认属性,只能在程序中设置或引用。它的值是被
选中列表项文本内容。
列表框特有属性:
Selected :该属性只能在程序中设置或引用。
Selected属性是一个逻辑数组,表示对应的项在程序运行期间
是否被选中。例如Selece(0)的值为True表示第一项被项中,如
为False表示未被选中。
255
组合框特有属性:
Style属性
0 (缺省) : 下拉式组合框,显示在屏幕上的仅
是文本编辑框和一个下拉箭头。执行时,用户可
用键盘直接在文本框区键入内容,也可用鼠标单
击右边的下拉箭头,打开列表框供用户选择,选
中的内容显示在文本框上。
1 :简单组合框,它列出所有项目供用户选择,用
户也可用键盘直接在文本框区键入内容,右边没
有下拉箭头,列表框不能被收起和拉下,与文本
编辑框一起显示在屏幕上。
2:下拉式列表框,其功能与下拉式组合框类似,区
别是不能输入列表框中没有的项。
256
列表框各主要属性的值:
List1
257
List1.ListIndex = 3 (下标从0开始的)
List1. ListCount = 5
List1. Selected(3) = True,其余为False。
List1. Sorted = False,没有排序。
List1. Text 为 “cox” ,
与List1. List(List1. ListIndex)相等
Combo1
下拉式组合框
简单组合框
下拉式列表框
列表框各主要属性的值:
Combo1.ListIndex = 0
Combo1. ListCount = 8
Combo1. Sorted = False
Combo1. Text 为 “李宁”
258
列表框和组合框常用方法
本章目录
(1) AddItem方法
对象.AddItem Item [,Index]
把一个选项加入到列表框或组合框。
Item:为加入的项目,必须是字符串表达式。
Index:决定新增选项在列表框或组合框中的位置,如果
省略,则新增选项添加在最后。
例:将“李宁”、“张伟”、“王春华”、“关红梅”4个学生
的姓名,在Form_Load事件过程中用AddItem方法添加到列表框
lstStudent中。
Sub Form_Load()
lstStudent.AddItem “李宁”
lstStudent.AddItem “张伟”
lstStudent.AddItem “王春华”
lstStudent.AddItem “关红梅”
259 End sub
上一页
下一页
本章目录
列表框和组合框常用方法
(2) RemoveItem方法
对象.RemoveItem Index
从列表框或组合框中删除指定的项目。
例:单击命令按钮,将列表框中选中的项目删除。
(3) Clear方法
对象.Clear
清除列表框或组合框的所有项目。
260
上一页
下一页
例7.3 对列表框进行项目添加、修改和删除操作。
261
本章目录
7.3 滚动条控件
滚动条(ScrollBar)通常用来附在窗
体上协助观察数据或确定位置,也可用
来作为数据输入的工具。滚动条有水平
和垂直两种。
262
上一页
下一页
本章目录
滚动条
(1) 属性
Value属性 滑块当前位置所代表的值,缺省值为0。
Min属性 滑块处于最小位置时所代表的值(-32768~32767)
Max属性 滑块处于最大位置时所代表的值(-32768~32767)
SmallChange属性 单击滚动条的箭头,Value属性改变值
LargeChange属性 单击滚动条的空白处,Value属性改变值
(2) 事件
Change事件
改变Value属性时触发
Scroll事件
当拖动滑块时触发
例7.4使用滚动条设计一个调色板应用程序,用合成色设置文
本框的前景色或背景色。
263
上一页
下一页
本章目录
7.4 定时器
1. 定时器(Timer)
以一定的时间间隔产生Timer事件。
(1) 属性
Interval 是时钟控件最重要的属性。它表示两个计时器事件之
间的时间间隔,其值以ms(0.001s)为单位,介于
0~64767ms之间。在程序运行期间,时钟控件并不显示在屏
幕上。当Interval为0时表示计时器不起作用。如果希望每半
秒钟产生一个计时事件,那么Interval属性值应设为500。这
样,每隔500ms引发计时器事件,从而执行相应的Timer事件
过程。
264
上一页
下一页
本章目录
7.4 定时器
Enabled属性 为False时定时器不产生Timer事件。
产生Timer事件的两个条件:Enabled=True;Interval>0。
(2) 事件
定时器控件只有一个Timer事件。
例:在设置一个数字计时器显示系统当前时间
Private Sub Timer1_Timer()
Label2.Caption = Time
End Sub
例7.6用一个定时器控制蝴蝶在窗体内的飞舞。
265
上一页
下一页
本章目录
7.5 鼠标和键盘
7.5.1 鼠标
鼠标事件 需要注意事件发生在窗体还是控件对象上
Click事件、DblClick事件
MouseDown事件
按下任意一个鼠标按钮时被触发
MouseUp事件
释放任意一个鼠标钮时被触发
MouseMove事件 移动鼠标时被触发
各事件中Button参数指示用户按下或释放了哪个鼠标按钮
266
值
VB常数
1
vbLeftButton
对应鼠标按钮
鼠标左键
2
vbRightButton
鼠标右键
4
vbMiddleButton
鼠标中键
上一页
下一页
本章目录
7.5.1 鼠标
各鼠标事件中X,Y 参数指示当前鼠标的位置。
例7.11 显示鼠标器指针所指的位置。
例7.12 设计一个最简单的画图程序。程序运行时,按住鼠标
右键移动画圆,按住鼠标左键移动画线。
267
上一页
下一页
本章目录
7.5.2 键盘
1. KeyPress事件
只对会产生ACSII码的按键有响应 ,事件参数KeyAscii为所
按键的ASCII码值。
2. KeyDown事件和KeyUp事件
当焦点在某个对象时,用户按下键盘上的任一键,便会引发
该对象KeyDown事件,释放按键便触发KeyUp事件。
事件参数KeyCode值指示所操作的物理键,不区分键大小写
状态。
例7.13编写一个程序,按下Alt+F5组合键可终止程序的运行。
268
上一页
下一页
本章目录
7.6 综合应用
例7.14 设计一个字幕滚动程序。要求用时钟控件和滚动条调
节和控制字幕滚动速度,文字的大小及距窗体顶端的距离是
随机的,从右向左连续滚动。
分析:字幕滚动可用Move方法移动标签来实现,通过改变移
动步长控制速度。
例7.15 利用时钟控件和图像控件,编写一个自动红绿灯模拟
程序。
分析:解决红绿灯延迟问题的一个简单方法是改变时钟的
Interval属性。例如,如果红灯延迟4秒,则在切换到红灯后
把Interval设置为4000,这样过4秒后发生Timer事件再切换到
其他颜色的灯。
269
上一页
下一页
第八章
界面设计
8.1 通用对话框
8.2 菜单设计
8.3 多重窗体
8.4 应用程序向导
8.5 综合应用
270
本书目录
本章目录
8.1 通用对话框
VB提供了一组基于Windows的标准对话框界面。用户可以利
用通用对话框工具在窗体上创建六种标准对话框,分别为打
开(Open)、另存为(Save As)、颜色(Color)、字体(Font)、打印
机(Printer)和帮助(Help)。
通用对话框不是标准控件,位于Microsoft Common Dialog
Control 6.0部件中,需要使用 工程|部件命令加载。
在设计状态,窗体上显示通用对话框图标,但在程序运行时
,窗体上不会显示通用对话框,直到在程序中用Action属性
或Show方法激活而调出所需的对话框。通用对话框仅用于应
用程序与用户之间进行信息交互,是输入输出的界面,不能
真正实现文件打开、文件存储、设置颜色、字体设置、打印
等操作,如果想要实现这些功能则需要编程实现。
271
上一页
下一页
本章目录
8.1.1 通用对话框
1. 通用对话框的基本属性和方法
(1) Action属性和Show方法
打开通用对话框
通用对话框的类型
Action属性
Show方法
打开(Open)文件对话框
1
ShowOpen
另存为(Save As)对话框
2
ShowSave
颜色(Color)对话框
3
ShowColor
字体(Font)对话框
4
ShowFont
打印机(Printer)对话框
5
ShowPrinter
帮助(Help)对话框
6
ShowHelp
该属性不能在属性窗口内设置,只能在程序中赋值。
272
上一页
下一页
本章目录
通用对话框
(1) DialogTiltle属性 设置通用对话框标题。
(2) Action:打开通用对话框。
(3) CancelError属性
True:选择取消按钮,将错误对象Err.Number设置为
32755(cdCancel)以便供程序判断。
False:选择取消按钮,没有错误警告。
273
上一页
下一页
本章目录
8.1.2 打开对话框属性
InitDir
Filter
FileName
FilterIndex
274
上一页
下一页
本章目录
InitDir
FileName
Filter
FilterIndex
FileName属性 文件名称,包含路径
FileTitle属性 只读属性,返回文件名称,不包含路径
Filter属性
确定所显示文件的类型
例如:Text Files|*.txt|所有文件|*.*显示文本文件和所有文件
FilterIndex属性
决定文件列表框中显示第几组类型的文件
275
InitDir
打开对话框时初始目录
本章目录
8.1.3 另存为对话框
另存为对话框是当Action为2时的通用对话框。它为用户在
存储文件时提供一个标准用户界面,供用户选择或键入所要
存入文件的驱动器、路径和文件名,同样,它并不能提供真
正的存储文件操作,储存文件的操作需要编程来完成。
另存为对话框,涉及的属性基本上和打开对话框一样,另外
还有一个DefaultExt属性,它表示所存文件的缺省扩展名。
例8.2 为例8.1中的另存为命令按钮编写事件过程,把文本框
内的信息存盘。
277
上一页
下一页
本章目录
8.1.4 颜色对话框
颜色对话框是当Action为3时的通用对话框,
供用户选择颜色。对于颜色对话框,除了
基本属性之外,还有一个重要属性Color,
它返回或设置选定的颜色。在调色板中提
供了基本颜色(Basic Colors),还提供了用
户的自定义颜色(Custom Colors),用户可
自己调色,当用户在调色板中选中某颜色
时,该颜色值赋给Color属性。
例8.3 为例8.1中的颜色命令按钮编写事件
过程,设置文本框的前景色。
278
上一页
下一页
本章目录
8.1.5 字体对话框
在显示字体对话框
前必须设置Flags属
性,否则将发生不
存在字体错误 。通
常设置为H103。
FontName
FontBold、FontItalic FontSize
Min、Max
FontStrikethru
FontUnderline
Color
例8.4 为例8.1中的字体命令按钮编
写事件过程,设置文本框的字体。
279
上一页
下一页
5. “打印”对话框
属性
FromPage:起始页号
ToPage:终止页号
Copies:打印份数
如果打印驱动程序不支持多份打印,该属性有可能始终返回 1。
例8.1中“打印...”按钮的事件过程
6. “帮助”对话框
帮助文件需要用其他的工具制作,如Microsoft Windows
Help Compiler。
属性
例8.5
HelpCommand:在线Help帮助类型
HelpFile:Help文件的路径及其名称
HelpKey:在帮助窗口显示由该帮助关键字指定的帮助信息。
280
本章目录
8.2 菜单设计
下拉式菜单系统的组成结构 :
主菜单名
主菜单条
快捷键
菜
单
项
热键
下级子菜
单标记
子菜单名
分隔线
281
上一页
下一页
8.2.1 菜单编辑器的使用
菜单项属性
操作按钮
菜单列
表框
本章目录
2. 名称(Name)
程序中用来标识该菜单项:
分隔符也应有名称。
3. 快捷键(Shortcut)
4. 复选(Checked)框
设为TRUE时,菜单后有
5. 有效(Enabled)框
6. 可见(Visible)框
常用属性:
1.标题(Caption)
热键:字母前面加&
若设计的下拉菜单要分成若干组,则在建立菜单时在标题文
本框中输入一个 “—”(减号),那么菜单显示时形成一
282
上一页
个分隔符。
下一页
例
1.设计一个包含加、减、乘、除算术运算及其清零功能的菜单
及窗体如下图所示
2.建立一个应用程序,该程序窗口中有一个文本框,设计菜单,
菜单项如下图所示。编制程序,完成各菜单项的功能
283
本章目录
8.2.2 弹出菜单
弹出菜单是独立于窗体菜单栏而显示在窗体内的浮动菜单。
显示位置取决于单击鼠标键时指针的位置。设计与普通菜单
相同(如果不希望菜单出现在窗口的顶部,该菜单名Visible属
性设置为False )。菜单弹出的方法:
[对象.]PopupMenu 菜单名[, 标志, x, y]
标志,表示弹出的位置和触发的键
MouseDown P171
Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then PopupMenu EditMenu
End Sub
284
上一页
下一页
8.3 多重窗体
本章目录
多重窗体是指一个应用程序中有多个并列的普通窗体,每个
窗体可以有自己的界面和程序代码,完成不同的功能。
1. 添加窗体
通过工程|添加窗体命令,每个窗体以独立的Frm文件保存,
添加一个已有的窗体到当前工程时,要注意两点:
A.工程内每个窗体的Name属性不能相同,否则不能将现有窗
体添加进来
B.添加进来的窗体与原工程共享,对该窗体所做的改变,会
影响到共享该窗体的其它工程。
2. 设置启动对象
通过工程|属性指定启动对象(缺省为第一个创建的窗体)。如
果启动对象是Main子过程,则程序启动时不加载任何窗体,
以后由该过程根据不同情况决定是否加载窗体。 Main子
285 过程必须放在标准模块中。
上一页
下一页
本章目录
窗体语句
(1)Load语句
该语句把一个窗体装入内存。执行Load语句后,可以引用
窗体中的控件及各种属性,但此时窗体没有显示出来。
其形式如下:
Load 窗体名称
(2)Unload语句
该语句与Load语句的功能相反,它从内存中删除指定的窗
体。其形式如下:
Unload 窗体名称
Unload的一种常见用法是Unload Me,其意义是关闭窗体自己。
在这里,关键字Me代表Unload Me语句所在的窗体。
286
上一页
下一页
本章目录
窗体语句
(3)Show方法
显示一个窗体
它兼有加载和显示窗体两种功能。也就是说,在执行
Show时,如果窗体不在内存中,则Show自动把窗体装入内存,
然后显示出来。
[窗体名称].Show [模式]
模式为0:关闭才能对其他窗体进行操作。
模式为1 :可以同时对其他窗体进行操作。
(4) Hide方法
隐藏窗体,没有Unload删除
[窗体名称.] Hide
287
上一页
下一页
本章目录
不同窗体数据的存取
(1) 存取控件中的属性
当前窗体中要存取另一个窗体中某个控件的属性:
另一个窗体名.控件名.属性
Text1 = Val(Form2.Text1) + Val(Form2.Text2)
(2) 存取变量的值
涉及的变量必须声明为全局(Public)变量:
另一个窗体名.全局变量名
例8.8 多重窗体应用示例。输入学生五门课程的成绩,计算总
分及平均分并在不同窗体内显示。
288
上一页
下一页
本章目录
8.4 应用程序向导
是方便的程序生成器,用来生成一个应用程序的界面。
选择文件|新建工程|VB应用程序向导命令:
289
上一页
下一页
本章目录
选择菜单和子菜单项
290
上一页
下一页
本章目录
选取工具栏按钮
291
上一页
下一页
本章目录
8.5 应用案例
例8.9 设计应用程序。菜单系统如下所示:
Form1窗体
菜单标题
菜单名
Menu1
菜单1
OpenImage
…浏览图形
Quit
…退出
Menu2
菜单2
OpenText
…浏览文本
Form2窗体
菜单标题
菜单名
Return
返回
Form1窗体上放置了一个图形控件和一个通用对话框,Form2
窗体上放置了一个文本框。如果选择浏览图形命令,则在
Form1的图像框中显示图形,图形框支持弹出菜单;如果选
择浏览文本命令,则隐藏Form1并且在Form2的文本框中显示
文件内容;选择返回命令,则关闭Form2,返回Form1。
292
上一页
下一页
第九章
文件
9.1 文件系统控件
9.2 文件的读写
9.3 常用的文件操作语句和函数
293
本书目录
本章目录
9.1 文件系统控件
文件系统控件有驱动器列表框(DriveListBox),目录列表框
(DirListBox)和文件列表框(FileListBox) 三种控件。
294
上一页
下一页
本章目录
文件系统控件-重要属性
属 性
适用的控件
作 用
Drive
驱动器列表框
Path
目录和文件列表框 包含当前路径
FileName 文件列表框
Pattern
文件列表框
选定的驱动器名
示 例
Drive1.Drive = "C"
Dir1.Path = "C:\WINDOWS"
选定的文件名
MsgBox File1.FileName
显示的文件类型
File1.Pattern = "*.BMP"
FileName和Pattern属性能够在设计时设置,而Drive和Path属性
只能在运行时设置,不能在设计状态设置。
295
上一页
下一页
本章目录
文件系统控件-重要事件
事 件
适用的控件
事件的触发
Change
驱动器
目录列表框
选择一个新的驱动器或改变Drive属性设置
双击一个新的目录或通过代码改变Path属
性设置
PathChange
文件列表框
当文件列表框的Path属性改变时发生
PatternChange
文件列表框
当文件列表框的Pattern属性改变时发生
Click
目录和文件列表框
用鼠标单击时发生
DblClick
文件列表框
用鼠标双击时发生
文件系统控件之间能产生同步效果:
Sub Drive1_Change()
Sub Dir1_Change()
Dir1.Path = Drive1.Drive
File1.Path = Dir1.Path
End Sub
End Sub
296
例9.1
设计文件管理系统。
上一页
下一页
本章目录
9.2 文件的读写
9.2.1 文件及其结构
1. 记录
计算机处理数据的基本单位,由若干个相互关联的数据项组
成。例如,由学生的学习成绩信息组成的记录
数据项
学号
姓名
数学成绩
语文成绩
物理成绩
总分
2. 文件及其种类
文件是记录的集合,VB提供了三种访问模式 ,按照访问模
式可将文件分为三类:
顺序访问模式:顺序文件
随机访问模式:随机文件
二进制访问模式:二进制文件
297
上一页
下一页
本章目录
文件及其种类
(1) 顺序文件
顺序访问模式是专门用来处理文本文件的。文本文件中的每
一行字符串就是一条记录,每一条记录可长可短,并且记录
与记录之间是以“换行”字符为分隔符号。
记录1 记录2
…
记录3
记录n-1
记录n
(2) 随机文件
记录长度相同,记录与记录之间不需要特殊的分隔符号。根
据记录号可直接访问任意一个记录。
#1记录1
#2记录2
…
记录n-1
#n记录n
(3) 二进制文件
直接把二进制码存放在文件中。
298
上一页
下一页
9.2.2 顺序访问模式-打开文件
本章目录
1. 打开文件
Open 文件名 [For 模式] As [#]文件号
模式 OUTPUT:写操作
INPUT:读操作
APPEND:追加到文件未尾
文件号 1~511
例如,打开C:\SCORE,供写入数据,指定文件号为#1。
OPEN "C:\VB\SCORE" FOR OUTPUT AS #1
注意:文件名可以为字符串常量,也可以是字符变量。
299
上一页
下一页
本章目录
顺序访问模式-写入
2. 写入命令
Print #文件号,[输出列表]
保存文本框Text1到文件TEST.DAT。
方法1:Open "TEST.DAT" For Output As #1
Print #1, Text1
一次性地写入文件
Close #1
方法2:Open "TEST.DAT" For Output As #1
For i=1 To len(Text1)
Print #1,Mid(Text1, i, 1); 按字符写入文件
Next i
Close #1
例9.2利用Print # 语句把数据写入文件。
300
上一页
下一页
本章目录
顺序访问模式-关闭文件
写入命令
Write #文件号,[输出列表]
以紧凑格式存放,数据项之间插入逗号并给字符串加双引号。
例如, "One","Two",123
例9.3利用Write #语句把数据写入文件C:\Text.txt 。
3. 关闭文件
Close [[#]文件号][, [#]文件号]...
例如,Close #1, #2, #3
301
上一页
下一页
302
例:利用Print # 和write #语句把数据写入文件。
Private Sub Command1_Click()
Open "d:\myfile1.txt" For Output As #1
Print #1, "学号"; Spc(3); "姓名", "党员否", "英语"
Print #1, 1; Spc(3); "张三", False, 69
Print #1, 2; Spc(3); "李强", True, 80
Print #1, 3; Spc(3); "王文", False, 70
Close #1
End Sub
Private Sub Command2_Click()
Open "d:\myfile2.txt" For Output As #1
Write #1, "学号", "姓名", "党员否", "英语"
Write #1, 1; "张三", False, 69
Write #1, 2; "李强", True, 80
Write #1, 3; "王文", False, 70
Close #1
End Sub
本章目录
顺序访问模式-读文件
4. 读顺序文件
INPUT #文件号,变量列表
把读出的每个数据项分别存放到所对应的变量。(最好是用
Write语句写入的文件)
LINE INPUT #文件号,字符串变量
读一行到变量中,主要用来读取文本文件。
INPUT$(读取字符数,#文件号)
随意读取字符
5. 函数
LOF(文件号):返回文件的长度(总字节数)。
EOF(文件号):判断文件指针是否到达文件尾。
指针在文件尾时,EOF函数为True,否则为False。
303
上一页
下一页
顺序访问模式-读文本文件
本章目录
读文本文件Myfile.txt到文本框Text1
方法1:一行一行读
Text1.Text = ""
Open " Myfile.txt " For Input As #1
Do While Not EOF(1)
Line Input #1, InputData
Text1.Text = Text1.Text + InputData+vbCrLf
Loop
Close #1
304
上一页
下一页
顺序访问模式-读文本文件
本章目录
方法2:一个个字符读
Dim InputData as String*1
Text1.Text = ""
Open "Myfile.txt" For Input As #1
Do While Not EOF(1)
InputData= Input$(1,#1)
Text1.Text = Text1.Text + InputData
Loop
Close #1
方法3:一次性读(不能用来读取含有汉字的文本文件)
Text1.Text = ""
Open "Myfile.txt" For Input As #1
Text1.Text = Input$( LOF(1), 1)
Close #1
305
上一页
下一页
本章目录
9.2.3 随机访问模式
1. 打开
Open 文件名 For Random As #文件号 [Len=记录长度]
2. 写操作
Put [#]文件号,[记录号],变量名
将一个记录变量的内容写到指定的记录位置处。忽略记录号,
则表示在当前记录后的位置插入一条记录。
3. 读操作
Get [#]文件号,[记录号],变量名
忽略记录号,则读出当前记录后的那一条记录。
例9.6编写学生信息管理程序。追加记录按钮的功能是将一个
学生的信息作为一条记录添加到随机文件末尾,显示记录按
钮的功能是在窗体上显示指定的记录。
307
上一页
下一页
本章目录
9.2.4 二进制访问模式
1. 打开
Open 文件名 For Binary As #文件号
2. 写操作
Put [#]文件号,[位置],变量名
写入长度等于变量长度的数据。
3. 读操作
GET [#]文件号,[位置],变量名
从指定位置开始读出长度等于变量长度的数据存入变量中,
数据读出后移动变量长度位置,如果忽略位置,则表示从文
件指针所指的位置开始读出数据,数据读出后移动变量长度
位置。
例9.7 编写一个复制文件的程序。
308
上一页
下一页
9.3 常用的文件操作语句和函数
本章目录
1. FileCopy语句
复制一个文件
FileCopy 源文件 , 目标文件
FileCopy语句不能复制一个已打开的文件。
2. Kill语句
删除文件
Kill 文件标识符
可以使用统配符“*”和“?”
例如:Kill "*.TXT“
3. Name 语句
重命名一个文件或目录
Name 原文件 As 新文件
不能使用统配符“*”和“?”,不能对一个已打开的文件上使
用Name语句。
309
上一页
下一页
常用的文件操作语句和函数
本章目录
4. ChDrive 语句
改变当前驱动器
ChDrive 驱动器符
5. MkDir 语句
创建一个新的目录
MkDir 目录路径
6. ChDir 语句
改变当前目录
ChDir 目录路径
例如:ChDir "D:\TMP"
7. RmDir 语句
删除一个存在的空目录
RmDir 目录路径
8. CurDir函数
确定驱动器的当前目录
CurDir[(驱动器符]
310
上一页
下一页
常用的文件操作语句和函数
本章目录
例9.8利用ChDrive和ChDir语句改写例9.1的File1_DblClick()事件过程。
Sub File1_DblClick()
ChDrive Drive1.Drive
'设置缺省驱动器
ChDir File1.Path
'设置缺省目录
RetVal = Shell(File1.FileName, 1)
End Sub
例9.9 为例9.1添加过程File1_MouseDown(),使之支持Del键。
Sub File1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyDelete Then
ChDrive Drive1.Drive
ChDir File1.Path
Kill File1.FileName
File1.Refresh
' 文件删除后更新文件列表框
End If
End Sub
311
上一页
下一页
本章目录
9.4 综合应用
例9.10 设计一个图形、文本浏览器。
分析:为了显示文本文件和图像,在窗体上放置文本框和图
像框。这两个控件放在同一个位置,显示图片时文本框不可
见,显示文本文件时图像框不可见。
例9.11 统计文本文件中各个字母出现的个数(大小写不区
分),存放在S字符串数组中,统计结果在窗体上显示出现过
的字母和出现的次数。要求:
(1) 统计的文件名通过文件列表框获得,文件列表框的名称为
File1,文件列表框仅显示扩展名为.txt的文件。
(2) 当双击文件列表框中某个文件时,将文件内容全部读入文
本框(Text1),然后其进行统计。
312
上一页
下一页
第十章
图形操作
10.1 图形操作基础
10.2 绘图属性
10.3 图形控件
10.4 图形方法
10.5 综合应用
313
本书目录
本章目录
10.1 图形操作基础
10.1.1 坐标系统
每个容器都有一个坐标系,构成一个坐标系,需要三个要素:
坐标原点、坐标度量单位、坐标轴的长度与方向。坐标度量
单位由容器对象的ScaleMode属性决定。缺省时为Twip。
无论采用哪一种坐标单位,缺省的坐标原点(0,0)为对象的左上角,横
向向右为X轴的正向,纵向向下为Y轴的正向。
Height
314
原点
ScaleHeight
上一页
下一页
本章目录
10.1.2 自行定义坐标系
方法一:通过窗体对象的ScaleTop、ScaleLetf、
ScaleWidth和ScaleHeight四项属性来实现。
属性ScaleTop、ScaleLeft的值用于控制对象左上角的坐标,
它们的缺省值均为0。
属性ScaleWidth、ScaleHeight的值可确定对象坐系X轴与
Y轴的正向及最大值。
Form1.ScaleWidth = -500
Form1.ScaleHeight = -400
Form1.ScaleLeft = 200
Form1.ScaleTop = 250
则该窗体的坐标系如何?
315
上一页
下一页
本章目录
10.1.2 自行定义坐标系
方法二、VB还提供了Scale方法来设置坐标系。Scale方法是建
立用户坐标系最方便的方法,其语法如下:
[对象.]Scale [(xLeft,yTop)-(xRight,yBotton)]
其中:对象可以是窗体、图形框或打印机;(xLeft,yTop)表
示对象的左上角坐标值,(xRight,yBotton)为对象右下角坐标
值。
例10.1在Form_Paint 事件中定义窗体的坐标系。
316
上一页
下一页
本章目录
10.2 绘图属性
10.2.1 当前坐标
CurrentX,CurrentY属性给出窗体或图形框或打印机在绘图时
的当前坐标。
这两个属性在设计阶段不能使用,使用CLS方法后,CurrentX、
CurrentY属性值为0
例10.2用Print方法在窗体上随机显示50个“★”和50个“☆”
317
上一页
下一页
10.2.2 线宽与线型
本章目录
线宽(DrawWidth)
窗体或图形框的DrawWidth属性给出这些对象上所画线的宽度
或点的大小。该属性以像素为单位来度量,最小值为1。
如果使用控件,则通过BorderWidth属性来定义线的宽度或点
的大小。
线型(DrawStyle)
DrawStyle属性:给出对象上所画线的形状(以上线型仅当
DrawWidth属性为1时才能产生)。如果使用控件,则通过
BordeStyle属性给出所画线的形状。
Private Sub Picture1_Click()
Picture1.DrawWidth = 1
Picture1.DrawStyle = 3
Picture1.Line (0, 0)-(1500, 1800)
318
End Sub
上一页
下一页
本章目录
10.2.3 填充与色彩
封闭图形的填充方式由FillStyle、FillColor这两个属性决定。
FillColor指定填充图案的颜色,默认的颜色与ForeColor相同。
FillStyle属性指定填充的图案,共有8种内部图案。
颜色指定
1. RGB函数
RGB(红,绿,蓝) 三基色使用0~255之间的整数
2 . QBColor函数
QBColor(颜色码) 0~15之间的整数,16种颜色
例10.4 演示颜色的渐变过程。
要定义渐变,可多次调用RGB函数,每次对RGB函数的参数
稍作变化。
319
上一页
下一页
本章目录
10.3 图形控件
10.3.1 图形框
PictureBox控件的主要作用是为用户显示图片,也可作为其他
控件的容器。实际显示的图片由Picture属性决定。在程序运行
时装入图形 :
图形框对象.Picture = LoadPicture("图形文件名")
从图形框中删除一个图形,可用LoadPicture()
Autosize属性
True 图形框能自动调整大小与显示的图片匹配。
False 图形超过图形框的部分将被剪裁掉
注意 PictureBox控件不提供滚动条
320
上一页
下一页
本章目录
10.3.2 图像框Image
使用方法与图形框相同。图像框占用更少的内存,描绘得更
快。图像框内不能存放其他控件。
Stretch属性
False 图像框可自动改变大小以适应其中的图形
True 图形可根据图像框的大小自动调整尺寸
与图形框一样,在程序运行时可以使用LoadPicture()在图像
框中装入图形
例10.5 本例说明图形框与图像框内图形的加载方法,图形框
的Autosize属性与图像框的Stretch属性对加载的图形的影响。
321
上一页
下一页
10.3.3 Line控件和Shape控件
本章目录
1.Line控件
用来画线
设计时Line控件重要属性是BorderWidth和BorderStyle属性。
BorderWidth确定线的宽度,BorderStyle确定线的形状。
运行时最重要的属性是x1,y1和x2,y2属性,控制线的两个
端点的位置。
2.形状控件Shape
用来画矩形、正方形、椭圆、圆、圆角矩形及圆角正方形。
Shape属性 确定所需要的几何形状
FillStyle属性 指定填充的图案
例10.6 用Shape控件的Shape属性显示Shape控件的6种形状,并
填充不同的图案。
322
上一页
下一页
本章目录
10.4 图形方法
10.4.1 Line方法
用于画直线或矩形:
[对象.] Line [ [Step] (x1,y1)]-[Step] (x2,y2) [,颜色][,B[F]]
(x1,y1)为线段的起点坐标或矩形的左上角坐标;
(x2,y2)为线段的终点坐标或矩形的右下角坐标;
关键字Step表示采用当前作图位置的相对值;
关键字B表示画矩形;
关键字F表示用画矩形的颜色来填充矩形,F必须与关键字B
一起使用。
323
上一页
下一页
本章目录
10.4.2 Circle方法
用于画圆、椭圆、圆弧和扇形:
[对象.]Circle [Step] (x,y),半径[,[颜色][,[起始角][,[终止角][,长短轴比率]]]]
(x,y)为圆心坐标,Step表示采用当前作图位置的相对值。
圆弧和扇形通过参数起始角、终止角控制。当起始角、终止角取值在0~2p
时为圆弧,当在起始角、终止角取值前加一负号时,画出扇形。
椭圆通过长短轴比率控制,默认值为1时,画出的是圆。
例:在窗体上画同心圆 Private Sub Form_Click()
Dim cx, cy, radius
Form1.ScaleMode = 3
cx = Form1.ScaleWidth / 2
cy = Form1.ScaleHeight / 2
For radius = 1 To 100
Circle (cx, cy), radius, RGB(Rnd * 255,
Rnd * 255, Rnd * 255)
Next radius
End Sub
324
上一页
下一页
本章目录
10.4.3 Pset方法
Pset方法用于画点: [对象.] Pset [Step] (x,y) [,颜色]
(x,y)为所画点的坐标,Step表示采用当前位置的相对值。
325
例:画正弦曲线。Y=sin(x)
Private Sub Form_Click()
Dim x As Single, y As Single
Scale (-15, 5)-(15, -5)
Form1.ForeColor = QBColor(12)
Line (0, 4.5)-(0, -4.5)
Line (14.5, 0)-(-14.5, 0)
For x = 0 To 2 * 3.1415926 Step
0.01
y = Sin(x): Y1 = Cos(x)
Form1.ForeColor = QBColor(10)
PSet (x, y)
Form1.ForeColor = QBColor(6)
PSet (x, Y1)
Next x
End Sub
上一页
下一页
本章目录
10.4.4 Point方法
返回指定点的RGB颜色: [对象.] Point (x,y)
(x,y)指定点的坐标。如果( x, y)点位于对象之外,Point 方法
将返回True。
例10.10用Point方法获取一个区域的信息并使用Pset方法进行
仿真。
窗体与图形框的坐标系设置值相同,但窗体的实际宽度和高度比
图形框大,故仿真输出时放大了原来的字符。
326
上一页
下一页
本章目录
10.5 综合应用
在用绘图方法绘图前,一般需要定义坐标系,定义坐标系通
常是采用Scale方法。图形绘制可结合对象的绘图属性来达
到特殊效果。凡是具有Picture属性的对象都可以装入图形 。
例10.11利用绘图方法及绘图属性,根据给定的数据绘制折
线图、散点图、饼图、直方图等统计图形。
设计思路:散点图用Pset语句绘制;折线图可用Line语句实
现;直方图可用带参数BF的Line语句来绘制 ;立体直方图
的绘制建立在平面直方图的基础上,在每一个矩形框的上方
和右侧用Line语句绘制出两个平行四边形,形成立体效果;
饼图绘制用Circle语句,绘图时需要计算出每个绘图数据在
圆内占的百分比,定出该数据对应扇形的起始角和终止角
327
上一页
下一页
第十一章
11.1
11.2
11.3
11.4
11.5
11.6
328
数据库技术
数据库概述
ADO数据控件
记录集对象Recordset
使用SQL查询数据库
报表制作
综合应用
本书目录
本章目录
11.1 数据库概述
11.1.1 VB数据库的访问
Visual Basic支持多种类型的数据库,如Access数据库、FoxPro
数 据 库 、 Microsoft Excel 、 SQL Server 和 Oracle 等 。 Visual
Basic6.0提供了ActiveX数据对象ADO(ActiveX Data Objects),
它以统一的方式管理和访问存储在不同信息源中的数据。数
据交换采用数据消费者和数据提供者的模型来实现,数据消
费者就是从引擎接口(一种数据库控制的驱动程序)中获取数据
的 应 用 程 序 , 数 据 提 供 者 是 数 据 库 管 理 系 统 ( DataBase
Management System,DBMS )或数据库引擎。
329
上一页
下一页
本章目录
数据库访问过程
Visual Basic应用程序通过ADO访问数据库的过程
应用程序
ADO技术
(ADO对象
ADO控件)
数据库
Access
FoxPro
Oracle
SQL
Server
Excel …
使用ADO数据对象时,需要通过编写一定数量的代码来建立与
数据源的联系。
VB提供的ADO数据控件可直接使用VB内置的数据库引擎用最
少的代码创建数据库应用程序。
330
上一页
下一页
11.1.2 关系型数据库模型
本章目录
数据库是数据库系统的核心和管理对象。所谓数据库,就是
以一定的组织方式将相关的数据组织在一起,存放在计算机
外存储器上形成的,能为多个用户共享的,与应用程序彼此
独立的一组相关数据的集合。
关系型数据库模型将数据用表的集合来表示,通过建立简单
表之间的关系来定义结构。关系模型已经成为数据库设计事
实上的标准。
数据库
331
表
上一页
下一页
本章目录
关系型数据库模型
记录
字段
凭证表
凭证日期
凭证编号
科目号
凭证摘要
2003-1-10 X200301001
101
购办公用品
2003-1-10 X200301001
521
管理费
2003-1-11 Y200301001
102
备用金
2003-1-11 Y200301001
118
备用金
2003-1-12 Y200301002
102
银行提现
2003-1-12 Y200301002
101
现金
2003-1-14 Z200301001
151
固定资产
2003-1-14 Z200301001
155
计提折旧
借方金额
贷方金额
360.00
360.00
5,000.00
5,000.00
2,500.00
2,500.00
3,215.00
3,215.00
表是有关信息的逻辑组,行被称为记录,列则被称为字段。
332
上一页
下一页
本章目录
账务处理数据库
一个账务处理数据库通常应包括如下表:
(1)凭证表,用于存放会计记账凭证信息。从会计专业的角度
来看,经审核的凭证一旦记账,该凭证就具有法律效力,成
为正式的会计档案。根据凭证表的数据可产生会计明细账、
日记账、总账和会计报表。
(2)科目表,用于记录账务处理所设置的科目。
(3)科目余额发生额表。在用计算机处理账务时,不需要对每
个科目设置一个账簿,而是把每个科目的余额、发生额汇总
数放在一个数据表内,称之为“科目余额发生额表” 。
(4)银行对账表,用于记录企业与银行往来的业务数据,如银
行对账单、银行日记账未达账项(企业没有对上账的银行业
务)等。
333
上一页
下一页
本章目录
账务处理数据库
科目余额发生额表
科目号
期初余额
借方发生额
贷方发生额
期末余额
101
10,000.00
3,600.00
9,600.00
4,000.00
102
50,200.00
38,000.00
18,200.00
70,000.00
211
1,502,340.35
10,672.00
3,215.00
1,509,797.35
一级科目表
科目号
334
科目名称
分类
101
现金
资产
211
应付工资
负债
321
本年利润
权益
401
生产成本
成本
521
管理费用
损益
通过主键创建表
与表之间的联系
上一页
下一页
本章目录
一对一关系
第一个表的一条记录只能和第二个表的一条记录相关联,第二
个表的一条记录也只能和第一个表的一条记录相关联。
科目号
335
科目名称
分类
101
现金
资产
102
银行存款
资产
211
应付工资
负债
科目号
…
…
…
101
10,000.00
3,600.00
102
50,200.00
38,000.00
211
1,502,340.35
10,672.00
一对一(科目号)
期初余额
上一页
借方发生额
下一页
本章目录
一对多关系
第一个表中的一条记录对应第二个表中的一条或多条记录,但
第二个表中的一条记录只能和第一个表的一条记录相关联。
科目号
一对多(科目号)
科目号
336
凭证摘要
101
购办公用品
521
管理费
102
备用金
118
备用金
102
银行提现
101
现金
借方金额
贷方金额
360.00
科目名称
分类
101
现金
资产
102
银行存款
资产
211
应付工资
负债
…
…
…
360.00
5,000.00
5,000.00
2,500.00
2,500.00
上一页
下一页
本章目录
记录集对象
可以将一个或几个表中的数据构成记录集Recordset对象,记
录集也由行和列构成,它与表类似。
凭证日期
科目号
2003-1-11
101
2003-1-12
521
科目号
借方金额
360.00
360.00
科目名称
分类
101
现金
资产
102
银行存款
资产
…
…
贷方金额
数据库
…
科目名称 借方金额 贷方金额
银行存款 5,000.00
现金
360.00
。。。
337
。。。 。。。 。。。。。
上一页
记
录
集
下一页
本章目录
记录集对象
在VB中数据库内的表格不允许直接访问,而只能通过记录集
对象进行记录的操作和浏览,因此,记录集是一种浏览数据
库的工具。
数据库
338
记录集
上一页
下一页
本章目录
11.1.3 数据库管理器
单击外接程序|可视化数据管理器命令
建立表和查询:
右单击数据库窗
口
对表的操作:
右单击某表名
339
上一页
下一页
本章目录
数据库管理器
数据库管理器使用小结:
1.建立新表:
鼠标右键单击数据库窗口,弹出菜单,选择对应命令。
2.打开、删除表,修改表结构和建立表间的关联等操作:
右键单击数据库窗口内的表名,弹出菜单,选择对应命令。
3.编辑记录:
双击表名,打开表格输入窗,编辑、增删记录。
340
上一页
下一页
本章目录
11.2 ADO数据控件
11.2.1 ADO数据控件使用基础进
在窗体上添加ADO 数据控件
先通过工程|部件菜单命令选择Microsoft ADO Data Control
6.0 (OLE DB)选项,将ADO数据控件添加到工具箱。
工具箱内ADO
控件图标形状
画在窗体
上的外观
341
上一页
下一页
本章目录
ADO控件连接属性
使用ADO数据控件建立与数据库的连接,从数据库中选择数
据构成记录集,是通过设置控件的三个基本属性来完成的。
ConnectionString
CommandType
连接数据库
命
令
类
型
关系型
数据库
数据
RecordSource
构成记录集
342
上一页
下一页
本章目录
ConnectionString属性
(1)ConnectionString属性
ConnectionString属性是一个字符串,包含了用于与数据源建
立连接的相关信息 。主要参数 :
参 数
Provide=
描
述
指定连接提供者的名称(提供者是一种数据接口)
Data Source = 用于指定所要连接的数据源文件
File Name=
用于连接提供者指定的数据源文件(所关联的提供者)
使用Microsoft.Jet.引擎,连接c:\caiwu.mdb数据库,则ADO数据
控件ConnectionString属性只需设置为:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source = c:\caiwu.mdb
343
上一页
下一页
本章目录
RecordSource 属性
(2)RecordSource属性
RecordSource确定具体可访问的数据,这些数据构成记录集对
象Recordset。
该属性值可以是数据库中的单个表名;
一个存储过程(指一个预编译的SQL语句流的集合,它被存储
在一个名称下并作为一个处理单位)
也可以是使用SQL查询语言的一个查询字符串。
例如,要指定记录集对象为caiwu.mdb数据库中的科目表:
则设置RecordSource="科目表"
RecordSource="Select * From 凭证表 Where 科目编号= '101' ",
则表示用SQL查询语句从凭证表中获取所有101科目的数据构
成记录集对象。
344
上一页
下一页
CommandType属性
本章目录
(3) CommandType属性
用于指定获取记录源命令类型,有4个取值 :
常 量
属性值
1
adCmdText
RecordSource描述
由命令文本产生,通常使用SQL
单个表名
2
adCmdTable
4
adCmdStoredProc 由存储过程产生
8
adCmdUnknown
命令类型未知,通常使用SQL
如果直接选取单个表构成记录集对象,则CommandType属性设
置为2,若用SQL查询语句从数据库中获取数据构成记录集对
象,则CommandType属性必须设置为8。
345
上一页
下一页
本章目录
数据源连接设置操作
右单击ADO控
件,选择快捷
菜单ADODC
属性命令,打
开ADO控件属
性页窗
1.连接数据
源的方式
单击
346
上一页
下一页
本章目录
数据源连接设置操作
2.选择提供者
数据提供者即连接数据库的驱动程序
Access 数据库使用Jet 4.0 OLE DB Provider
347
上一页
下一页
连接设置-指定数据库文件
本章目录
3.用户数据库
指定数据库文件名注:如果所设计的窗体文件与数据库文
件在同一文件夹内,可将数据库名称前的目录路径删除,
形成相对路径。
348
上一页
下一页
连接设置-指定数据库文件
本章目录
指定记录源,设置RecordSource 属性和CommandType属性
设置CommandType属性
用 SQL 构
成记录集
349
上一页
下一页
本章目录
ADO控件的其他属性
EOFAction和BOFAction属性
记录指针指向Recordset对象的开始或结束时,数据控件数
据控件要采取的操作。当设置EOFAction为2时,可向记录
集加入新的空记录,在输入数据后,只要移动记录指针就
可将新记录写入数据库。
Recordset属性
产生ADO数据控件实际可操作的记录集对象。记录集对象
中的每个字段值用Recordset.Fields(“字段名”)获得。
350
上一页
下一页
本章目录
ADO控件的事件和方法
Refresh方法
刷新ADO数据控件的连接属性,当在运行状态改变ADO数
据控件的数据源连接属性后,必须使用Refresh方法激活这
些变化。
例如,在程序中执行了Adodc1.RecordSource= “科目表”,
必须再执行Adodc1.Refresh命令,才能使记录集的内容从
凭证表改变为科目表。如果不使用Refresh方法,记录集的
内容还是来源于凭证表中的数据。
WillMove事件与MoveComplete事件
当用某种方法改变记录集的指针使其从一条记录移到另一
条记录,会产生WillMove事件。MoveComplete事件发生在
一条记录成为当前记录后,它出现在WillMove事件之后。
351
上一页
下一页
本章目录
11.3.2绑定控件
数据控件只能连接数据库产生记录集,不能显示记录集中的
数据,要显示数据必须通过能与它绑定的控件来实现。
记录集
数据库
绑定控件
科目编号 101
名称 现金
352
上一页
下一页
本章目录
绑定控件
绑定控件具有DataSource 和DataField两个重要属性:
DataSource属性 将绑定控件连接到一个数据源上
DataField属性 使控件与数据源中字段建立联系
记录集
凭证日期
科目编号
2003-1-11
101
2003-1-12
521
借方金额
贷方金额
360.00
360.00
数据库
353
上一页
下一页
本章目录
简单数据绑定示例
单数据绑定指所使用的绑定控件一次只能处理一条记录中的
一个字段的内容。在窗体上要显示n项数据,就需要使用n个
绑定控件。
例11.1设计一个记账凭证显示/输入窗,用以处理caiwu.mdb
数据库中凭证表的内容。
354
上一页
下一页
本章目录
复杂数据绑定示例
Visual Basic 6.0提供了几个比较复杂的网格控件,几乎不用
编写代码就可以实现多条记录数据显示。
DataGrid网格控件
可显示文本内容,并具有编辑操作
功能。在MicroSoft DataGrid Control 6.0(OLE DB)部件
中 。
MSHFlexGrid控件
有图形功能,网格的单元格中可以
同时存放文本和图片,对于具有相同内容的相邻单元格可实
现单元格合并操作,但显示在MSHFlexGrid网格内的数据不
能直接进行编辑操作。在MicroSoft MSHFlexGrid Control
6.0 部件中。
例11.2用数据网格显示caiwu.mdb数据库中凭证表的内容。
355
上一页
下一页
本章目录
DataGrid控件
DataGrid控件属性设置
356
上一页
下一页
本章目录
MSHFlexGrid控件
例11.3用MSHFlexGrid数据网格显示caiwu.mdb数据库中凭证
表的内容,要求同一凭证号的单元合并。
单元格合并需设置MergeCells属性为1,被合并的单元格所在
行和列的MergeRow或MergeCol属性为True。
需要编写一段代码:
Private Sub Form_Load()
MSHFlexGrid1.MergeCells = 1
' 合并方式自由合并
For i = 0 To MSHFlexGrid1.Cols – 1
' Cols返回网格的列数
MSHFlexGrid1.MergeCol(i) = True
' 按列设置单元格合并
Next i
End Sub
357
上一页
下一页
本章目录
11.2.3 数据窗体向导
通过数据窗体向导能建立一个访问数据的窗口。在使用前
必须执行外接程序|外接程序管理器命令,将VB 6数据窗体
向导装入到外接程序菜单中。
例11.4使用数据窗体向导建立凭证表数据访问窗口。
1.执行外接程序|数据窗体向导命令
358
上一页
下一页
本章目录
数据窗体向导
2.选择数据库类型。
359
上一页
下一页
本章目录
数据窗体向导
3.选择数据库
360
上一页
下一页
本章目录
数据窗体向导
4.设置应用窗体的工作特性
361
上一页
下一页
本章目录
数据窗体向导
5.选择记录源(所需要的实际数据)
362
上一页
下一页
本章目录
数据窗体向导
6.选择所需要的操作按钮
363
上一页
下一页
本章目录
11.3 记录集对象
11.3.1 浏览记录集
1. AbsoloutPostion属性
返回当前记录指针值,从1到Recordset对象所含记录数。
2. BOF和EOF的属性
BOF判定记录指针是否在首记录之前,若BOF为True,则当前
位置位于记录集的第1条记录之前。EOF判定记录指针是否在
末记录之后。
如果BOF和EOF的属性值都为True,则记录集为空。
BOF和EOF属性与AbsoloutPostion属性存在相关性。
记录指针位于BOF,AbsoloutPostion属性返回AdPosBOF(-2)
记录指针位于EOF,AbsoloutPostion属性返回adPosEOF (-3)
记录集为空,AbsoloutPostion属性返回AdPosUnknown(-1)
364
上一页
下一页
本章目录
浏览记录集
3. Bookmark属性
系统为当前记录生成一个称为书签的标识值,包含在
Recordset对象的Bookmark属性中。
4. RecordCount属性
对Recordset对象中的记录计数,该属性为只读属性。
5. Find方法
在Recordset对象中查找与指定条件相符的一条记录,并使之
成为当前记录。如果找不到,则记录指针指在记录集末尾。
Recordset.Find 搜索条件 [,[位移] , [搜索方向], [开始位置]]
365
上一页
下一页
本章目录
浏览记录集
6. Move方法组
Move方法可代替对数据控件对象的4个箭头按钮的操作遍历整
个记录集。5种Move方法是:
(1) MoveFirst方法移至第1条记录。
(2) MoveLast方法移至最后一条记录。
(3) MoveNext方法移至下一条记录。
(4) MovePrevious方法移至上一条记录。
(5) Move [n] 方法向前或向后移n条记录,n为指定的数值。如
果n 大于零,则当前记录位置将向前移动(向记录集的末尾)。
如果n 小于零,则向后移动(记录集的开始方向)。
例11.5设计窗体,用命令按钮代替数据控件对象的4个箭头按
钮的功能。
例11.6使用Find方法查找记录。
366
上一页
下一页
本章目录
记录集属性方法小结
BOF
MoveFirst
MovePrevious
科目号
科目名称
分类
101
现金
资产
102
银行存款
资产
…
MoveLast
211
…
应付工资
MoveNext
…
负债
EOF
Adodc1.Recordset. Find "科目号= '211' "
367
上一页
下一页
本章目录
11.3.2 数据修改
1.修改数据的方法
对记录集中数据的增、删、改涉及到如下4个方法:
(1)AddNew方法
AddNew方法在记录集中增加入一个新行。
(2)Delete方法
删除记录集中的当前记录。
(3)Update方法
确定所做的修改并保存到数据源中。
(4)CancelUpdate方法
取消未调用Update方法前对记录所做的所有修改。
368
上一页
下一页
本章目录
增加新记录
2.增加新记录
增加一条新记录通常要经过以下三步:
(1) 调用AddNew方法,在数据表内增加一条空记录。
(2) 给新记录各字段赋值。可以通过绑定控件直接输入,也可
使用程序代码给字段赋值,用代码给字段赋值的格式为:
Recordset.Fields.Item("字段名") = 值。
(3) 调用Update方法,确定所做的添加,将缓冲区内的数据写
入数据库。
注意:如果使用AddNew方法添加了新的记录,但是没有使用
Update方法而移动到其他记录,或者关闭了记录集,那么所做
的输入将全部丢失,而且没有任何警告。
369
上一页
下一页
本章目录
删除记录
3. 删除记录
从记录集中删除记录通常要经过以下三步:
(1) 定位被删除的记录使之成为当前记录。
(2) 调用Delete方法。
(3) 移动记录指针。
注意:使用 Delete 方法当前记录立即删除,不加任何的警告
或者提示。删除一条记录后,绑定控件仍旧显示该记录的内
容。因此,必须移动记录指针刷新绑定控件。
4. 编辑记录
当改变数据项的的内容时,ADO自动进入编辑状态,在对数
据编辑后,只要改变记录集的指针或调用Update方法,即可确
定所做的修改。
例11.7在例11.6的基础上加入增、删、改功能。
370
上一页
下一页
本章目录
数据修改小结
科目号
科目名称
分类
101
现金
资产
102
银行存款
资产
…
211
…
应付工资
数据库
…
负债
UpData
填入新数据
Adodc1.Recordset. AddNew
编辑记录
• 给各字段赋值
• 调用Update方法
371
增加记录
删除记录
调用Delete方法
移动记录指针
上一页
下一页
11.4 使用SQL查询数据库
本章目录
结构化查询语言(Structure Query Language,SQL)是操作关
系数据库的工业标准语言。通过SQL命令,可以从数据库的多
个表中获取数据,也可对数据进行更新操作。 SQL的主要语
句如表所示:
命 令.
372
分类
描
述
SELECT
数据查询
在数据库中查找满足特定条件的记录
DELETE
数据操作
从数据表中删除记录
INSERT
数据操作
向表中插入一条记录
UPDATE
数据操作
用来改变特定记录和字段的值
CREATE
数据定义
在数据库中建立一个新表
DRUP
数据定义
从数据库中删除一个表
上一页
下一页
本章目录
11.4.1 SELECT语句
1.SELECT语句的基本语法形式
SELECT 目标表达式列表 FROM 表名
[ WHERE 查询条件 ]
[ GROUP BY 分组字段 HAVING 分组条件 ]
[ ORDER BY 排序关键字段 [ASC|DESC] ]
它包含4部分,其中SELECT和FROM子句是必须的,通过使
用SELECT语句返回一个记录集。
例如,要在凭证表中查询有关现金科目的凭证:
SELECT * FROM 凭证表 WHERE 科目编号 = "101"
373
上一页
下一页
SELECT语句-输出表达式
本章目录
2.目标表达式的建立
目标表达式包含了查询结果要显示的字段清单,字段之间用
逗号分开。数据的显示顺序由字段清单的顺序决定。
可用星号*代表所有字段;
可用AS短语指定字段别名,例如,科目编号 AS 科目代号;
可通过构造表达式对原始数据进行复杂的运算处理,产生查
询结果。
例如,根据期初余额、借方金额、贷方金额计算出余额数据:
SELECT 科目编号, (期初余额+借方金额-贷方金额) AS 余额
FROM 余额表
374
上一页
下一页
本章目录
SELECT语句-查询条件
3.设定查询条件
WHERE子句用于限制记录的选择。
例如,查询借方金额在10 000和100 000之间的凭证:
SELECT * FROM 凭证表 WHERE 借方金额
BETWEEN 10 000 AND100 000
运算符BETWEEN用于指定某闭区间内的数据。
如果要枚举出若干项进行查询,例如,查询科目101和102的
数据,可以使用运算符IN:
SELECT * FROM 凭证表 WHERE 科目编号IN ("101", "102")
它等价于:
SELECT * FROM 凭证表 WHERE 科目编号= "101" OR 科目编号
= "102"
375
上一页
下一页
SELECT语句-合计函数
本章目录
4. 使用合计函数
SQL提供了几个合计函数可对记录进行操作,用于对记录集进
行统计。常用的合计函数如表所示:
描
述
合计函数
AVG
用来获得特定字段中的值的平均数
COUNT
用来返回选定记录的个数
SUM
用来返回特定字段中所有值的总和
MAX
用来返回指定字段中的最大值
MIN
用来返回指定字段中的最小值
例如,要统计现金凭证的数量:
SELECT COUNT(*) AS 凭证数 FROM 凭证表 WHERE 科目编号="101"
COUNT(表达式)格式统计时忽略表达式值为空值的记录
COUNT(*)在计数中包含值为空值的记录
376
上一页
下一页
SELECT语句-分组
本章目录
5.分组
GROUP BY子句能把指定字段列表中有相同值的记录合并成
一条记录。如果该字段当前的取值有n种,则可产生n条记录。
例如,要产生每个科目的借方发生额和贷方发生额:
SELECT 科目编号,SUM(借方金额) AS 借方发生额,
SUM(贷方金额) AS 贷方发生额 FROM 凭证表 GROUP BY 科目编号
GROUP BY子句对数据进行分组,如果对分组后的数据还要
进行过滤,可在GROUP BY子句后结合HAVING子句用于在
分组中选择。
下面的语句将查询出借方发生额超过100 000的科目。
SELECT科目编号,SUM(借方金额) AS 借方发生额,SUM(贷方金额) AS 贷
方发生额 FROM 凭证表 GROUP BY 科目编号 HAVING SUM(借方金
额)>100 000
377
上一页
下一页
本章目录
SELECT语句-排序
6.输出排序
ORDER BY子句决定了查询结果的排列顺序。在ORDER BY
子句中,可以指定一个或多个字段作为排序关键字,ASC选
项代表升序,DESC代表降序。
7.多表连接
若查询的数据分布在多个表中,则必须建立连接查询:
表1 INNER|LEFT|RIGHT JOIN 表2 ON 连接条件
例如,凭证表中只有科目编号,如何在查看凭证的同时能够
直观地看到科目名称?这就要在两表之间建立连接。SQL语句
如下:
SELECT 科目表.科目名称, 凭证表.* FROM 凭证表 INNER
JOIN 科目表 ON 凭证表.科目编号=科目表.科目编号
378
上一页
下一页
本章目录
11.4.2 SQL查询实例
在Visual Basic应用程序中使用SQL,在CommandType属性设
置为8的前提下,可以直接在ADO控件的RecordSource属性栏
中输入SELECT语句,也可在程序执行时对RecordSource属性
设置SELECT语句。
例11.8设计一个程序,用SQL语句查询凭证表中指定科目的所
有凭证记录。
例11.9设计一个查询程序,根据输入条件统计指定日期段内某
科目的借方发生额和贷方发生额。
程序要求能提供多条件查询。根据输入界面的安排,日期的输入可能会出
现4种情况:同时有起始日期和终止日期、只有一个起始日期或一个终止
日期、无起始日期和终止日期。科目编号的查询条件存在两种可能:指定
科目或未指定科目。由这两部分的输入可构成8种查询条件。在程序中用If
语句来判定输入条件是哪一种情况。可以用两个变量rqtj、kmtj分别存放日
期查询条件和科目条件。
379
上一页
下一页
本章目录
11.5 报表制作
执行工程|添加Data Report命令,将报表设计器加入到当前工
程中,产生一个DataReport1对象。
使用报表设计器处理的数据需要利用数据环境设计器创建与
数据库的连接,然后产生Command对象连接数据库内的表。
例11.10使用Caiwu.mdb数据库内凭证表,建立报表。
(1) 建立新工程,在窗体上放置两个命令按钮。
(2) 执行工程| Data Environent命令,加入一个DataEnvironent1
对象。用鼠标右击Connection1,选择快捷菜单中的属性选项,
打开数据链接属性对话框,完成与指定数据库的连接。
(3)鼠标右击Connection1,创建Command1对象。
(4)鼠标右单击Command1,打开Command1属性对话框,设置
Command1对象连接的数据源为需要打印的数据表。
380
上一页
下一页
本章目录
11.5 报表制作
(5) 执行工程|添加Data Report命令,产生一个DataReport1
对象。设置DataReport1的DataSource为DataEnvironent1对
象,DataMember属性为Command1对象。
(6) 将数据环境设计器中Command1对象内的字段拖动到数据
报表设计器的细节区。
(7) 使用标签控件,在报表标头区插入报表名。
(8) 要显示报表,可使用DataReport1对象的Show方法。
DataReport1.Show
(9) 报表打印可直接使用预览窗口左上角打印按钮,也可以使
用DataReport1对象的PrintReport方法:
DataReport1. PrintReport True
381
上一页
下一页
本章目录
11.6 综合应用
下面按一个账务系统的不同功能,示例说明应用程序的设计。
1.建立明细账簿
账务系统的明细账簿实质是同一科目凭证数据的集合,可以
使用查询语句得到。账簿中还要出现余额数据,这可通过计
算产生。明细账簿的显示格式可采用电子表格。
明细账中的余额需要通过循环计算产生。为了简化程序,程
序中只使用资产类的余额计算公式:当前余额=余额+借方金
额-贷方金额,并假定余额的初始值为100 000。公式中的借
方金额和贷方金额为当前记录内的值,余额为上一条记录内
的值。
例11.11设计一个程序,可根据指定的科目从凭证表中产生明
细账簿,账簿数据按凭证日期升序排列。数据控件的标题栏
要显示明细账中记录总数。
382
上一页
下一页
本章目录
综合应用
2.建立总账账簿
账务系统的总账账簿是在一个月内各科目借方发生额和贷方
发生额数据的集合,并由此形成余额表。总账账簿数据来源
于凭证表和余额表。由于本书介绍的内容限定在ADO控件和
SELECT语句上,可用如下方法建立总账账簿:
 对凭证表按科目分组,并使用合计函数计算借方金额和贷
方金额,产生各科目借方发生额和贷方发生额。
 使用另一个ADO控件连接余额表,通过循环将凭证表产生
的各科目借方发生额和贷方发生额填入到余额表,并计算出
当月期末余额。
例11.12设计一个程序,根据凭证表和余额表产生总账账簿。
383
上一页
下一页
第十二章 考试系统开发案例
应用软件系统开发的一般过程:
(1)
在软件开发的分析阶段,信息收集是决定软件项目可行性的
重要环节。程序设计者要通过对开发项目信息的收集,确定
系统目标、软件开发的总体思路及所需的时间等。
(2)
在软件开发的设计阶段,首先要对软件开发进行总体规划,
认真细致地搞好规划可以省时、省力、省资金;然后具体设
计程序完成的任务、程序输入输出的要求及采用的数据结构
等,并用算法描述工具详细描述算法。
384
本书目录
上一页
下一页
系统开发的一般过程
(3)
在软件开发的实施阶段,要按系统论的思想,把程序对象视
为一个大的系统,然后将这个大系统分成若干小系统,保证
高级控制程序能够控制各个功能模块。一般采用自顶向下的
设计思想开发高级控制程序,并逐级控制更低一层的模块,
每一种模块执行一个独立、精确的任务,且受控于高级程序。
编写程序时要坚持使程序易阅读、易维护的原则,并使过程
和函数尽量小而简明,使模块间的接口数目尽量得少。
(4)
在软件开发的维护阶段,要经常修正系统程序的缺陷,增加
新的性能。在这个阶段,测试系统的性能尤为关键,要通过
调试检查语法错误和算法设计错误,并加以修正。
385
上一页
下一页
12.1 系统功能设计
12.1.1系统分析
考试环节是教学中不可缺少的部分,计算机无纸化考试是对
传统考试方式的改革。要实现计算机无纸化考试,必须要有
一套专用的软件系统,它包括试题库建立与维护,组卷,学
生考试答题和评分、分析等。
本章的目的是介绍应用软件开发思想和方法,因而仅对学生
考试答题部分进行详细分析。学生考试答题系统应具备通用
功能,一套软件要能适应多种课程的考试需求。通常应包括
考生登录、答卷和数据保存等。
386
上一页
下一页
12.1.2 系统设计
系统设计包括模块设计、数据库设计、编码设计。
1.模块设计
学生考试答题系统依据系统分析,学生考试答题系统模块结
构如图所示。
学生考试答题系统
登
录
387
单
选
题
填
充
题
程
序
题
编
程
题
保
存
检
查
帮
助
上一页
下一页
12.1.2 系统设计
启动考试系统
考试答题系统主要包括
考生登录、各种题型答
题处理、数据保存、未
答题检查和帮助等功能
模块。
题型1
考生登录可作为独立窗
体。为便于处理,卷面
部分可根据不同题型提
供相应的窗体界面。采
用多文档接口处理答卷、
数据保存等功能。程序
流程如所示。
388
考生登录
题型K
…
保存答案
N
未答题提
示
结束
上一页
结束
否?
Y
下一页
12.1.2 系统设计
2.数据库设计
假定考试系统的试题类型分为单选题、填充题、程序填充和编
程题,采用DBF数据库存放4种类型的试题
3.编码设计
为了考试的安全,需要对考生验证信息、试题中的关键数据编
码。如果要当场对考生进行自动评分,必须对标准答案加密处
理。
389
上一页
下一页
12.2 编程设计
12.2.1 考生登录窗体
为描述记录结构,在标准模块(BAS文件)中定义记录结构类
型,然后在窗体的通用栏中定义记录类型变量。
12.2.2 答卷窗体
单选题窗体界面用一个数据控件连接数据库,由于单选按钮不
能被数据控件绑定,需要通过程序来解决。
填充题窗体用一个数据控件连接数据库,1个标签与字段“题
名”绑定,3个文本框构成数组并与字段“答A”~“答C”绑定。
390
上一页
下一页
结
束
391