高中信息技术第六章教案(浙教版)

文档属性

名称 高中信息技术第六章教案(浙教版)
格式 zip
文件大小 323.1KB
资源类型 教案
版本资源 浙教版
科目 信息技术(信息科技)
更新时间 2009-03-25 14:41:00

文档简介

第六章 程序设计初步
通过前面五章的学习,我们知道计算机是人们处理信息的有效工具。但是一切信息的处理最终都要通过执行程序来完成,即首先必须编写程序。我们平常进行文字处理或表格处理时,事先没有进行程序设计(programming),实际上是使用别人已编写好的程序(program)直接操作。
Visual Basic是一种可视化的、面向对象、采用事件驱动方式的结构化程序设计语言,它不但具有早期Basic语言的一切功能,尤其提供了一种可视化的设计工具,可以直接使用窗体和控件设计程序的界面,极大的提高了程序设计的效率。本章以Visual Basic (简称VB)为载体,介绍使用VB编制程序的一般步骤和方法,主要包括:算法的概念和面向对象的程序设计方法,VB的编程环境, Basic语言的基本知识、基本语句,程序的控制结构和简单程序设计。通过本章学习,不仅要学会可视化编程技术,还要掌握一些解决简单问题的常用算法。
Visual Basic的基本知识
课题:Visual Basic 的基本知识
教学时间: 授课班级:
教学目标:了解窗口的组成, 掌握VB的几个核心概念
教学重点、难点:对象、属性和事件的含义
教学过程:
一、Visual Basic的启动和退出
Visual Basic是Microsoft公司于1991年开发推出的基于Windows 环境的Basic 语言, Visual意为“可视化的”, Basic指的是 BASIC (Beginners All-Purpose Symbolic Instruction Code,初学者通用符号指令代码) 语言。 VB是在早期Basic语言基础上发展起来的一种可视化的、面向对象、采用事件驱动方式的结构化高级程序设计语言,是目前广泛使用的一种程序设计语言(programming language)。
Visual Basic的启动
单击任务栏中的“开始”按钮,将指针依次指向“程序(P)”“Microsoft Visual Basic” “Visual Basic”,然后单击,即可启动 VB。
启动VB 后,显示如图6-4所示的“新建工程”对话框,对话框中有“新建”“现存”“最新”三个标签,可根据需要选择工程的类型。
新建:建立新工程;
现存:选择和打开现有工程;
最新:列出最近使用过的工程。
要新建一个工程时,单击“新建”标签,选择其 中的“标准EXE”项,然后单击“打开(O)”按钮,进入VB的工作环境。
Visual Basic的退出
单击“文件(F)”菜单中的“退出(V)”命令,或单击主窗中右上角的“关闭”按钮,就可退出Visual Basic。
二、Visual Basic窗口的组成
进入VB后,屏幕上显示出如图6-5所示的界面,主要由标题栏、主菜单、工具栏、窗体设计器窗口、工具箱、工程资源管理器窗口、属性窗口、代码编辑器窗口等组成。
⒈ 标题栏
标题栏用来显示窗口标题及Visual Basic的工作模式。Visual Basic有三种工作模式:
⑴设计模式
当设计程序界面、编写代码、设置属性时,标题栏显示“Microsoft Visual Basic[设计]”,表示VB工作在设计模式下。
⑵运行模式
当在Visual Basic中运行应用程序时,VB进入运行模式,标题栏自动切换成“Microsoft Visual Basic[运行]”,执行结束,回到设计模式。
⑶中断模式
当程序在运行过程中因某种原因中断时,VB进入中断模式,标题栏切换成“Microsoft Visual Basic[Break]”,此时可修改、调试程序。
⒉ 菜单栏
菜单栏显示可使用的VB命令。除了提供标准“文件(F)”“编辑(E)”“视图(V)”“格式(O)”“窗口(W)”“帮助(H)”菜单之外,还提供了编程专用的菜单,例如“工程(P)”“调试(D)”“运行(R)”等。
⒊ 工具栏
VB将一些常用的命令编制成图标形式的命令按钮,便于对常用命令的快速访问。启动VB后,缺省情况下,只显示其中的“标准”工具栏。
⒋ 窗体设计器窗口
窗体设计器窗口是进行界面设计的窗口。当创建一个新的程序时,VB自动创建一个新的窗体,命名为Form1。窗体是Visual Basic应用程序的基本构造模块,在程序运行时,是人与程序交互操作的实际窗口。一个应用程序可包含一个或多个窗体,每一个窗体都有自己的窗体设计器窗口。设计应用程序的界面时,该窗口就像一个画布,可直接在窗口上用鼠标画出所需的图形,如菜单、按钮、文本框等,而无需为设计界面编写大量的代码。
⒌ 工具箱
工具箱提供一组工具,如文本框、标签、按钮等,用于在窗体中放置控件设计应用程序的图形界面,如图6-6所示。
⒍ 工程资源管理器窗口
工程(project)是指用来建造应用程序的文件的集合,工程资源管理器窗口用于管理应用程序中的文件,如图6-7所示。一个VB应用程序主要包含以下两大类文件:
⑴ 窗体模块文件(扩展名为.frm)
用于存放窗体及其中控件的正文描述,包含窗体及控件的属性设置,窗体级的常量、变量,用户自定义过程以及用于响应外部操作的事件过程等。窗体文件与窗体窗口一一对应。
⑵ 标准模块文件(扩展名为.bas)
简单的应用程序可以只有一个窗体,程序的所有代码都保存在一个窗体模块中。当应用程序比较复杂时,往往包含不止一个窗体,如果几个窗体中都有要执行的公共代码,为了不在几个窗体中重复相同的代码,应建立一个独立模块,其中包含实现公共代码的过程,这样的模块就称为标准模块,标准模块是可选的。
工程资源管理器窗口还有三个小按钮,分别为:
查看代码:单击此按钮,出现代码编辑器窗口,可以输入、编辑或调试应用程序的代码。
查看对象:如果当前文件为窗体文件,单击此按钮后,出现窗体设计器窗口,其中显示出该文件所对应的窗体及其中控件的外观和布局。
切换文件夹:此按钮的作用是使工程中的文件是否按类型分层次显示。
一个应用程序即为一个工程,当把工程中的所有文件分别保存以后,可把整个工程存成一个文件,这就是工程文件(扩展名为.vbp)。
⒎ 属性窗口
用来描述各种对象属性的窗口,可在其中对对象的属性进行设置和修改。属性是指对象的外观特征,如大小、位置、颜色、标题等。
⒏ 代码编辑器窗口
代码编辑器窗口是应用程序用来显示和编辑程序代码的窗口。应用程序的每个窗体和标准模块都有一个单独的代码编辑器窗口。
三、面向对象的程序设计
对象
VB是一种面向对象的程序设计语言,VB中的对象(object)主要是系统设计好的对象,包括窗体、控件、菜单、打印机、剪贴板和数据库等,使用得最多的对象是窗体(form)和控件(control)。控件包含在窗体内部,是指用工具箱中的工具在窗体中画出的、能完成一定功能的部件,如用于输入和编辑文本内容的文本框、用于执行操作的命令按钮等。
⑴ 对象的建立
不同类型对象的建立方法不同,下面以命令按钮控件为例介绍控件对象的建立方法:
单击工具箱中绘制命令按钮控件的工具。
② 将鼠标指针移到窗体上适当位置,此时指针变成十字线,按住鼠标器左键不放,拖拉出一个大小合适的方框,释放鼠标器左键,就形成一个命令按钮,如图6-8所示。
图6-8
建立控件以后,工具箱中的相应工具和鼠标指针恢复原状。刚建好控件的四周有8个小方块,表示该控件为活动控件。用鼠标器单击控件可选定该控件并使其成为活动控件,拖动控件到新的位置放开可移动控件。用鼠标器拖动控件四周的小方块可改变控件的大小。
⑵ 对象的命名
每个对象都有自己的名字,有了名字才能在程序中引用该对象。在建立对象时,VB会自动提供一个形如Command1、Command2、Label1、Label2之类的缺省名。为了使程序容易阅读、理解,最好给对象设置一个有意义的名字,如cmdOk等。一般约定对象名由3个小写字母组成的前缀(指明对象的类型)和表示该对象作用的缩写字母组成,表6-2列出了常用控件的前缀规定和命名举例。
名字是对象的属性之一,可以通过在属性窗口设置名称属性来给对象命名。
表6-2
对象的类型 意义 前缀 名字举例
Form 窗体 frm frmFind
Command 命令按钮 cmd cmdOk
Label 标签 lbl lblInput
TextBox 文本框 txt txtSource
Timer 定时器 tmr tmrClock
象的属性、方法和事件
VB中的对象具有自己的属性、方法和事件。可以把属性看作对象的性质,把方法看作对象的动作,把事件看作对象对外部操作的响应,它们构成了对象的三要素。
日常生活中的对象,如小孩玩的气球同样具有属性、方法和事件。气球的属性包括可以看到的一些性质,如它的直径和颜色,以及其它一些描述气球状态的属性,如充气或未充气。气球还具有本身所固有的动作,如放气方法(排出气球中的气体)和上升方法(放手让气球飞走)。气球还有预定义的对某些外部事件的响应,例如,气球对刺破它的事件响应是放气,对放手事件的响应是升空。
⑴ 属性
属性(property)是对象的性质,对象的许多属性会影响对象的外观及功能,如窗体的Caption属性决定窗体标题栏中显示的内容,Name属性设置窗体的名称,Height和Width属性决定窗体的初始大小,Top和left属性决定窗体的位置,MaxButton和MinButton属性决定窗体能否最大化或最小化等。不同的对象有许多相同的属性,也有许多不同的属性。对象的属性可以在设计程序界面时通过属性窗口设置。也可以在运行时通过程序代码设置,方法如下:
对象.属性=属性值
例如,给文本框“txtSource”的“Text”属性赋值为字符串"20",代码如下:
txtSource.Text="20"
如果要获取对象的状态或特性,这时就要读取对象的属性值,方法如下:
变量=对象.属性
例如,读取文本框“txtSource”的“Text”属性的代码如下:
a = txtSource.Text
当然,属性也可以作为表达式的一部分直接参与运算,而不必先将其赋给变量。
⑵ 方法
在VB中将一些通用的过程和函数编写好并封装起来,作为方法直接调用,方法(method)是针对特定对象执行一项任务的特殊过程或函数,是对象本身所固有的动作。调用对象方法的格式如下:
[对象].方法 [参数名表]
例如:
Form1.Print "欢迎使用Visual Basic"
此语句使用Print 方法在Form1窗体中显示字符串“欢迎使用Visual Basic”。
在调用方法时,可以省略对象名和参数。省略了对象名,表示为当前对象,一般指窗体。
⑶ 事件及事件驱动
事件(event)是对象对外部操作的响应,如在程序执行时,用鼠标器单击命令按钮会产生一个Click事件。每个对象都有一系列预先定义的事件集,例如,命令按钮能响应Click(鼠标单击)、GotFocus(获取焦点)、LostFocus(失去焦点)等事件。
尽管系统对每个对象都预先定义了一系列的事件集,但要判定它们是否响应某个具体事件以及如何响应事件,就是编程的事情了,例如,需要命令按钮响应Click事件,就把完成Click事件功能的代码写到Click事件的事件过程中,事件过程是事件的处理程序,与事件一一对应。事件过程的形式如下:
Private Sub 对象_事件名([参数表])
… (事件过程代码)
End Sub
VB程序没有明显的开始和结束,程序的执行是由事件控制的,代码不是按照预定的路径执行,而是在响应不同的事件时执行不同的代码,事件的顺序决定了代码的执行顺序,这就是VB的事件驱动(event driven)的程序设计思想。
需要注意的是,VB虽是一种面向对象的程序设计语言,VB程序主要由界面和代码组成,界面是程序与使用者交互信息的窗口,而具体到解决特定问题或实现事件处理过程时,仍然要编写代码,编写代码时仍然要遵守结构化程序设计的基本原则,仍然必须依据一定的算法,所以在学习VB时,除了要学习界面设计,更要学习灵活运用VB实现各种算法。
实践与探索
VB为我们提供了功能强大的联机帮助功能,尤其是完全汉化的联机手册,它包括Visual Basic 文档、多媒体演示和一些不能在打印文档中说明的主题,它是一本集程序设计指南、用户使用手册等于一体的电子词典。学会使用帮助信息,是进一步学习和掌握VB的一条很好的途径。VB帮助的使用方法与其它Windiows应用软件相似,请利用VB的帮助功能,查找有关工具箱和窗体属性的帮助信息。
信息卡 约翰·凯梅尼与BASIC语言
约翰·凯梅尼(John George Kemeny)于1926年5月31日出生于匈牙利的布达佩斯,1940年来到美国。曾任达特茅斯学院(Dartmouth College)院长,和托马斯·库尔茨(Thomas Kurtz)合作发明了达特茅斯分时操作系统,并且创造了BASIC程序设计语言。
当时,计算机数量少而且价格昂贵,人们想要利用计算机运行自己的程序,必须先将程序做成穿孔卡片交给操作员,操作员将数十、数百个作业作为一批输入计算机,计算机分别运算后输出结果,为了求得一个数字往往要用2~3个星期,这种工作方式对使用计算机很不方便。人们希望自己上机操作,边运行边修改,当场得到结果。
1959年,凯梅尼和库尔茨决心实施一种当时带有开创性的设想:使所有大学生能自由地使用计算机,如同他们使用图书馆的藏书一样方便,研究从两个方面进行:一个是建立分时操作系统,另一个是编写程序设计语言。分时系统允许一台计算机同时为多个用户服务,操作系统采用时间片轮转的方式为用户服务。他们用通俗易懂的英语,加上一些中学代数一类的指令,设计成一种语言,外行人只要学会很少的指令,就能亲自动手编写有趣的程序。1963年9月,凯梅尼开始编写初稿, 1964年5月1日凌晨4时,第一个BASIC程序开始运行。由于凯梅尼的杰出贡献,1983年,获得美国信息处理学会联合会授予的教育奖。
练习
⑴ Visual Basic 5.0 的窗口主要包含哪几部分?
⑵ Visual Basic 5.0有几种工作方式?它们各自的作用是什么?
⑶ 简述窗体设计器窗口的作用。
⑷ 什么叫工程?Visual Basic的工程主要包含哪几类文件?
⑸ 什么叫对象?对象的三要素是什么?
⑹ 简述事件驱动程序的工作机制。
⑺ 以命令按钮为例,简述在窗体上建立控件的方法?
⑻ 在程序代码中如何设置和读取对象的属性?如何调用对象的方法?请举例说明。
图6-4
标题栏
菜单栏
工具栏
窗体设计器
工程管理器
属性窗口
工具箱
图6-5
图6-6
图6-7课题:程序的建立和运行
教学时间: 授课班级:
教学目标:能够独立的建立一个简单的程序,并会调试它
教学重点、难点:对象的属性的设置,原代码的编写
教学过程:
一、一个简单程序
建立一个完整的VB 应用程序,主要包括以下几个步骤:
① 建立应用程序界面;
② 设置对象的属性;
③ 编写事件处理程序;
④ 程序的运行和调试;
⑤ 保存文件。
下面通过一个简单的实例来说明这一实现过程。
【例6-3-1】我们经常在电影或电视上看到一些字幕的动态变化特技。本例运用VB的定时器控件定时改变标签控件的Caption属性的文字大小,实现文字的动态缩放效果。
建立应用程序界面
VB中的一个应用程序即为一个工程。因此,要建立新的应用程序,也就须建立一个新工程。单击“文件(F)”菜单中“新建工程(N)”命令,弹出一个与图6-8相似的对话框,提示选择应用程序的类型,一般选择“标准EXE”,单击“确定”按钮后出现窗体设计器窗口。一个新工程只包含一个窗体,缺省名为Form1。例共使用了两个控件:标签和定时器。标签控件用来在窗体中显示文字,定时器控件用于实现定时缩放。使用工具箱中的 、在窗体建立好这两个控件,建立好的程序界面如图6-9所示。
设置对象的属性
界面设计好后,必须设置对象的属性。对象的大多数属性可采用缺省值,设置属性的目的是为了使对象更符合应用程序界面的需要。一个窗体对应一个属性窗口,在工程资源管理器窗口中选定窗体Form1,单击“视图(V)”菜单中的“属性窗口(W)”命令,就可打开Form1的属性窗口,如图6-10所示。在Form1窗体上设计的所有控件均存于该窗口的对象框中。
设置属性的方法:在对象框中选择对象,在属性列表中选定某属性,在右列中输入或选定新的属性值。有的属性有预定义的设置值清单,单击设置框右边的向下的箭头,可以显示这个清单。
完成本程序界面需要设置的属性如表6-3。
表6-3
缺省的对象名 设置的对象名 属性 设置值
Form1 frmZoom Caption FrmZoom
Label1 lblZoom Caption 空白
ForeColor 红色
Timer1 tmrClock Enabled False
Interval 100
编写事件处理程序
属性设置好后,程序仍不能正常工作,还要考虑用哪些事件触发对象完成相应的功能,想让对象响应某个事件时,就把代码写入这个事件的事件过程之中。定时器控件(tmrClock)能有规律地以一定的时间间隔(Interval)触发计时器事件(Timer),本例通过对Timer事件过程进行编码,定时改变标签控件lblZoom的Caption属性的文字大小,来实现文字的动态缩放。
一个窗体对应一个代码编辑器窗口,在工程资源管理器窗口中选定窗体frmZoom,从“视图(V)”菜单选取“代码窗口(C)”命令,就可打开一个如图6-11所示的代码编辑器窗口。代码窗口的左边“对象列表框”列出了该窗体的所有对象,右边的“过程列表框”列出了选定对象的所有事件。在对象列表框中选择一个对象,在过程列表框中选择指定对象的事件,代码框中自动给出事件过程的定义语句,此时,在 Sub 和 End Sub 语句之间输入完成功能的代码。
'字幕特技
Dim s As String
Dim size As Integer, deltasz As Integer
'程序的初始化过程
'设置有关变量的初始值
Private Sub Form_Load()
tmrClock.Enabled = True
lblZoom.Visible = True
s = "欢迎使用Visue Basic"
size = 8: deltasz = 5
End Sub
Private Sub tmrClock_Timer()
size = size + deltasz
If size > 50 Then '当文字大小达到最大值时,
deltasz = -5 '将文字大小缩放量设为负值,
End If '来实现动态缩小
If size < 8 Then
size = 8
deltasz = 5
End If
lblZoom.Font.size = size
lblZoom.Left = (frmZoom.Width - lblZoom.Width) / 2
lblZoom.Top = (frmZoom.Height - lblZoom.Height) / 2
lblZoom.Caption = s
End Sub
从这个简单的程序可以看出:
Visual Basic的事件过程由一系列程序行组成,程序行由语句组成。
② 通常一个程序行只写一个语句,但也可以将两个或多个语句写在同一行,此时,语句间用冒号分隔。
③ 在程序中可以添加一些适当的注释,用以说明程序的目的与功能,注释内容应写在注释符(')后。注释可以和语句在同一行并写在语句的后面,也可单独占据一整行。
④ 采用缩进格式,突出程序的层次结构,避免所有行都从同一列开始,一般情况下,每个层次缩进一个制表位。
在输入源程序和调试程序的过程中,常需要对程序作某些修改。Visual Basic提供了功能较强的“文本编辑”功能。Visual Basic的编辑功能与Word的编辑功能非常相似,这里不再详述。
一个大型应用程序可包括多个窗体和模块,分别单击“工程(P)”菜单中的“添加窗体(F)”“添加模块(M)”命令,可建立新的窗体和模块。
运行程序
单击“运行(R)”菜单中“启动(S)”命令,或直接按F5键,运行当前程序, VB标题行上显示“Microsoft Visual Basic[运行]”,表示进入运行模式。程序运行后,启动frmZoom窗体,自动触发窗体的Load事件,在Load事件的事件过程中,定时器tmrClock控件的Enabled被设置为True,所以,本例的frmZoom窗体启动后,定时器就已开始工作,定时触发Timer事件,运行界面如图6-12所示。
若程序运行过程中出错,系统显示出错信息,自动进入“中断”模式,回到代码窗口提示修改代码,修改好后再次运行程序,直到正确为止。
实践与探索
单击“运行(R)”菜单中“启动(S)”命令或按F5键运行程序,只能看到程序的运行效果,关闭VB系统,程序便无法运行。VB还可将应用程序的源代码编译生成.EXE 可执行文件,关闭系统后,可象任何Windows应用程序那样,双击程序图标就可运行。请你把本例程序编译成可执行文件,说明具体操作步骤?并思考下述问题:生成的可执行文件是否可在任何环境下运行?为什么?如不行,请尝试找出解决办法。
保存工程
在程序编写过程中或运行结束后,应及时将有关文件保存到磁盘上,此便以后需要时调用。选择“文件(F)”菜单上“保存工程(V)”命令,屏幕上依次显示出输入窗体文件、工程文件对话框,在“文件名(N)”框中输入一个合法的文件名,如可把本例中的窗体文件命名不lt6-3-1.frm,工程文件命名为lt6-3-1.vbp。
至此,一个完整的VB程序编制完成,如果需要将过去已存盘的工程重新调入内存,可选择“文件(F)”菜单上“打开工程(O)”命令,屏幕上显示出当前目录下的全部工程清单,选定某个工程后,单击“打开(O)”按钮,就可把磁盘上的文件调入内存修改或运行。
二、常用控件
界面设计是程序设计中的一个很重要的工作,程序是否简便易用,与界面的质量有着很大关系。VB共提供了20个标准控件用于设计界面,每个控件都有一组自己的属性、方法和事件,本节仅介绍使用使用得最多的四个控件。
基本控件属性
每一控件都有自己的属性,改变控件的属性时,控件的行为和外观相应的发生变化。大多数属性可以采用缺省设置,也可以根据程序的需要设置新的属性。不同的控件有许多相同的属性,也有许多不同的属性。下面介绍一些控件的基本属性。
Name(名称)属性
Name是所创建对象的名称。VB在创建控件时自动提供一个缺省名称,如Form1、Command1等,在属性窗口的“名称”栏设置Name属性。
Height、Width、Top、Left属性
Height、Width属性决定控件的宽度和高度。
Top、Left属性决定控件在窗体中的位置。其中Top表示控件距窗体顶部的距离,Left表示控件距窗体左边的距离。
Enabled属性
Enabled属性决定控件是否有效,能否对用户的事件作出反应。缺省值为True,控件有效。当设置为False时,控件无效。
Visibled属性
Visibled属性决定控件是否可见。缺省值为True,运行时可见。设置为False时,运行时隐藏控件,但控件实际存在。
Font属性
设置控件所显示文字的字体、字型和字号,单击Font属性右侧带有省略号的按钮,可打开一个字体设置对话框。
BackColor、ForeColor属性
BackColor属性用来设置控件的背景颜色,ForeColor属性用来设置控件的前景颜色,即控件中文字的显示颜色。
BorderStyle属性
该属性用来设置控件的边框风格。
命令按钮
在VB程序中,使用户与程序交互的最简便的方法是提供一个按钮,无论何时,只要单击按钮,就会调用 Click 事件过程,将代码写入 Click 事件过程,执行想要执行的动作。用 VB提供的命令按钮(CommandButton)控件,来创建自己的“按钮”。
属性
除了上述一些控件的共同属性之外,命令按钮还有三个十分重要的属性:
Caption属性:用于设置命令按钮上显示的文字,如“确定”“取消”等。
Default属性:每个窗体上都可选择一个命令按钮作为缺省的命令按钮,也就是说,不管窗体上的哪个控件有焦点,只要用户按 ENTER 键,就相当于用鼠标器单击该按钮。为了指定一个缺省命令按钮,应将其Default属性设置为True。
Cancel属性:Cancel属性用于指定缺省的取消按钮。在把命令按钮的 Cancel 属性设置为 True 后,不管窗体的哪个控件有焦点,按 ESC 键,相当于单击此按钮。
(2) 事件
对命令按钮来说,最基本、最重要的事件是Click事件,即鼠标单击。单击命令按钮时将触发按钮的 Click 事件并调用已写入 Click 事件过程中的代码。
标签
标签控件(Label)通常用来在窗体中显示一些提示信息和注释。标签控件只能显示静态文本,其中的文字内容只能用属性值设置和修改,不能直接在窗体上编辑。
属性
标签控件的几个重要属性为:
Caption属性:设置标签控件中显示的文本。
Alignment 属性:对齐属性,缺省值为Left Justify (0),Caption中的文本左对齐;设置为Right Justify (1)时,文本右对齐;设置为Center (2)时,文本居中。
AutoSize属性:
缺省值为False,当输入到 Caption 属性的文本超过控件宽度时,超出部分将被裁剪掉。设置为 True时,控件可水平扩充以适应 Caption 属性内容。
事件
标签控件可以响应Click(单击)、Dbclick(双击)Change(改变)等事件。
文本框
文本框(TextBox)的作用是建立一个文本编辑区域,可在该区域输入、编辑、显示一些信息。
属性
Text 属性:程序执行时,通过键盘在文本框内输入的信息存放在Text 属性中,初始设置一般为空白,以使文本框不显示任何信息。
MaxLength属性:文本框能够输入的文本内容的最大长度。
MultLine属性:MultiLine 属性设置为 True,文本框可以输入或显示多行文本,同时具有自动换行功能。
ScrollBars 属性:为文本框加滚动条,必须在MultLine属性设置为True时,该属性值才有效。
0—None:无滚动条
Horizontal:加水平滚动条
2—Vertical:加垂直滚动条
3—Both:同时加水平和垂直滚动条
当加入了水平滚动条后,文本框内的自动换行功能自动消失,只有按Enter键才能回车换行。
SelStart、SelLength 和 SelText 属性:该属性在设计阶段无效,在程序运行过程中,对文本内容进行选择操作时,用来标识选中的哪部分文本。
SelStart:选定的文本的开始位置,第一个字符的位置为0。
SelLength:选定的文本长度。
SelText :选定的文本内容。
设置了SelStart、SelLength属性后,VB会自动将它们设定的文本送入SelText。这些属性一般用于设置插入点的范围,选择和清除字符串等,并且经常与剪贴板一起使用,完成文本信息的剪切、复制及粘贴功能。
方法
文本框最常用的方法是SetFocus,它的作用是把光标移到指定的文本框,以便接收输入数据,此时,我们就称该文本框具有焦点,SetFocus的格式如下:
[对象.]SetFocus
事件
Change:在文本框的Text属性即文本的内容发生变化时,触发本事件。
LostFocus:当文本框失去焦点时,触发本事件。LostFocus 事件过程主要是用来对更新进行验证和确认。
KeyPress:当按下并且释放键盘上的某一个键时,触发焦点所在控件的KeyPress事件,常用于测试击键的有效性或在字符输入时对其进行格式处理。
定时器
定时器控件(Timer)用于有规律地以一定的时间间隔触发定时器事件。在程序运行期间,定时器控件并不显示在屏幕上。
Enabled和Interval是定时器控件的两个最基本属性。当Enable设置为True时,定时器开始工作,为False时,定时器停止工作。Interval表示两个定时器事件之间的时间间隔,单位为ms,取值范围为0~65535。
定时器只有一个Timer事件,定时器每隔Interval指定的时间间隔发生一个定时器事件,并执行其中的代码。
实践与探索
程序设计学习的一个很重要的方法是多阅读与调试现成的程序,VB的联机帮助中提供的大量的示例代码,为学习VB程序设计提供了很好的示范,但只有把这些代码复制到你所建立的工程的代码窗口,才能运行。例如:联机帮助的TextBox文本框的Text属性的帮助示例中有如下代码:
Private Sub Text1_Change ()
Text2.Text = LCase(Text1.Text) ' 用小写的格式显示文本。
Text3.Text = UCase(Text1.Text) ' 用大写的格式显示文本。
End Sub
Private Sub Command1_Click () ' 删除文本。
Text1.Text = ""
End Sub
请问该怎样把这段代码复制到你的代码窗口?代码复制过来后,程序能不能正常运行?如不能,为什么?该如何解决?
练 习
⑴ 请叙述建立一个完整的VB应用程序的过程。
⑵ 学习本节后,请你谈谈对“Visual Basic”中“Visual”的理解。
⑶ 每个窗体都有一个属性窗口和代码窗口,在建立VB程序时如何打开这两个窗口?
⑷ 编写VB程序代码时,有哪些书写规则?
⑸ 分别改变[例6-3-1]中窗体的Caption属性和Name属性,运行后会出现什么结果,并分析这两个属性的作用有何不同?
⑹ 为了使一个控件在运行时不可见,应对该控件的什么属性进行何种设置?
⑺ 要使标签的大小随着Caption属性的值自动缩放,应对该控件的什么属性进行何种设置?
⑻ 标签和文本框都可以显示文本,它们之间有什么区别?
图6-9
对象框
排序标签
属性列表
图6-10
过程列表框
图6-11
对象列表框
代码框
图6-12课题:循环结构
教学时间: 授课班级:
教学目标:
学会用for …next语句和do…loop编写简单的程序,并会调试它
教学重点、难点:
For –next 语句的用法
Do-loop语句的用法
循环语句的嵌套
教学过程
在用计算机处理问题时,除了分支问题外,还有不少是需要重复执行某一组操作的问题。这就要采用循环结构,VB中提供了两种语句实现循环结构,For-Next语句和Do-Loop语句。
【例6-6-1】求s=1+2+3+……+100
利用赋值语句可写出如下形式的代码:
sum=0
sum= sum+1
sum= sum+2
sum=sum+3
……
sum=sum+100
很显然,使用这种形式也能得到结果,但程序很冗长。观察上面的代码可以发现,这段代码实际上重复了同一个操作:sum=sum+I,只不过是每次相加的自然数不同而已。使用VB提供的循环语句可以很容易实现这种重复操作功能。具体算法如下:
①设sum=0;
②设i=1;
③若i<=100则转④,否则算法停止,最后sum中的数值即是自然数列前100项之和;
④将sum与i相加,其结果送给变量sum,即sum+i→sum;
⑤使i值增加1,即i+1→i;
⑥转③。
流程图如图6- 23,程序及运行结果如下:
' 求1、2、3……、100之间自然数的和
Private Sub Form_Click()
Dim i As Integer
Dim sum As Integer
sum = 0
For i = 1 To 100
sum = sum + i ' 循环体
Next i
Print "sum="; sum
End Sub
运行结果为:
sum= 5050
For...Next循环
这个程序中使用的是For...Next循环,它的一般形式是:
For 循环变量=初值 To 终值 Step 循环变量增量
循环体
Next 循环变量
循环变量的初值、终值、循环变量增量都是数值型。其中要重复执行的操作称为循环体,增量可正可负,如果没有设置Step,则增量的缺省值为1。
For-Next循环的执行过程是:
①循环变量取初值;
②循环变量与终值比较,没有超过终值转③,否则循环结束,接着执行循环语句的后继语句;
③执行一次循环体;
④循环变量增加一个增量;
⑤重复步骤②~④。
从上看出,For-Next循环变量是一种当型循环,图6-24是它的执行过程。
说明:
① For语句与Next语句必须成对出现,而且它们当中的“循环变量”必须是同一个变量,如本例中均为i;
② 当循环变量增量为正时,循环变量超过终值,是指循环变量的值大于终值,若为负,则是指循环变量的值小于终值。 图6-24
从例6-6-1程序的流程图和For-Next循环的招待过程可以看出,执行For-Next循环时,先判断循环变量是否超过终值,如果没有超过终值,就执行循环体,这种循环称为当型循环,它的一般结构如图6-25所示。循环体A执行有限次后,条件P不再成立,从而退出循环。
图6-25
讨论与思考:
⒈ 本例中循环结束时,循环变量i的值是多少?
⒉ 若有如下一段代码:
For j=15 to 3 Step –2
Print j
Next j
则循环结束时,循环变量j的值是多少?
⒊循环变量的增量能否为0,如果为0,运行结果怎样?
【例6-6-2】设计一个界面如图6-26所示的程序,要求执行程序后,窗体上的星星在闪烁,单击“结束”按钮结束程序。
为了实现星星闪烁的效果,本例设置了一个定时器控件,窗体启动后,每隔500ms触发一次Timer事件,在该事件中使用循环语句随机产生50个坐标值,然后用窗体的Pset方法在这些坐标处画点,窗体上出现星星的效果,在Timer事件的开头,使用Cls方法清屏,以产生闪烁效果。完成本程序需要在设计阶段设计的属性如表6-11。
表6-11
缺省的对象名 设置的对象名 属 性 设置值
Form1 frmStar Caption 星星闪烁
BackColor 黑色
ForeColor 黄色
Command1 cmdEnd Caption 结束
Timer1 tmrAnimation Enabled False
Interval 500
程序代码如下:
′星星闪烁
Dim xpos As Integer, ypos As Integer
Dim i As Integer
Private Sub Form_Load()
tmrAnimation.Enabled = True
Randomize
End Sub
Private Sub tmrAnimation_Timer()
′清屏,产生闪烁效果
Cls
For i = 1 To 50
xpos = Int(frmCircle.Width * Rnd)
ypos = Int(frmCircle.Height * Rnd)
PSet (xpos, ypos)
Next i
End Sub
Private Sub cmdEnd_Click()
End
End Sub
二、Do...Loop循环
For-Next循环的次数是确定的,有的问题只知道循环结束的条件,重复执行的次数事先并不知道,这时需用Do-Loop循环。
格式一:Do While 条件
循环体
Loop
当VB执行Do While -Loop循环时,先判断指定的条件是否为真,若条件为真,执行循环体,条件为假时退出循环。这也是一种当型循环。
【例6-6-3】设计一个界面如图6-27所示的程序,从键盘输入任意两个正整数a、b,输出它们的最大公约数。
图6-27
本程序运行时,通过单击“计算”按钮在“最大公约数”框中显示a与b的最大公约数,因此,求最大公约数的代码就编写在“计算”按钮的Click事件中。完成本程序界面需要设置的属性如表6-12。
表6-12
缺省的对象名 设置的对象名 属 性 设置值
Form1 frmDivisor Caption 最大公约数
Label1 lbla Caption 输入A
Label2 lblb Caption 输入B
Label3 lblDivisor Caption 最大公约数
Text1 txta Text (空白)
Text2 txtb Text (空白)
Text3 txtDivisor Text (空白)
Command1 cmdCalcu Caption 计算
Command2 cmdEnd Caption 结束
求两个正整数a、b(a>b)的最大公约数的算法见例6-1-3,流程图见图6-3,程序代码如下:
′求最大公约数
Private Sub cmdCalcu_Click()
Dim a As Integer
Dim b As Integer
Dim r As Integer
a = Val(txta.Text)
b = Val(txtb.Text)
r = a Mod b
Do While r <> 0
a = b
b = r
r = a Mod b
Loop
txtDivisor.Text = Str(b)
End Sub
Private Sub cmdEnd_Click()
End
End Sub
格式二:Do
循环体
Loop Until 条件
这种循环的执行过程如图6-28所示,进入循环后,先执行一次循环体A,然后再检查条件是否成立,如果不成立,就执行循环体A,直到条件D成立,退出循环。这种循环结构称为直到型。
图6-28
【例6-6-4】 如果我国人口以每年平均1.5%的速度增长,问多少年后我国人口达到或超过15亿,设现在人口为12.3亿。
解决这个问题的思路是:设现在人口为p0=12.3亿,人口增长率r=1.5%=0.015,则一年后人口为p1=p0+p0×r=p0×(1+r),看它是否达到或超过15亿;如果未达到,再算二年后的人口p2=p1+p1×r=p1×(1+r);如果未达到,再计算三年后的人口……,直到n年后的人口数达到或超过15亿。
流程图见图6-29,程序代码如下:
′直到型循环
Private Sub Form_Click()
Dim p As Single
Dim r As Single
Dim n As Integer
p = 1230000000#
r = 0.015
n = 0
Do
p= p * (1 + r)
n = n + 1
Loop Until p >= 1500000000#
Print n; "年后", "人口="; p
End Sub
运行结果如下;
14年后 人口=1.51506E+09
三、循环的嵌套
在一个循环中又完整地包含另一个循环,称为循环的嵌套。前面介绍的几种类型的循环可以互相嵌套,例如可以在一个For-Next循环中包含另一个For-Next循环,也可以在一个Do-Loop循环中包含一个For-Next循环。
【例6-6-5】设计一个程序,打印如下所示的图案。
*
***
*****
*******
*****
***
*
为解决这个问题,可以采用如下的算法:使用双重For-Next循环,外循环确定行数和各行起始打印位置,内循环用来确定各行打印的个数。设外循环的循环变量为i,内循环的循环变量为j 。由于图案上下对称,上下两半对应行的起始位置和字符个数完全一致,所以i的取值也应对称:i=-3 To 3。设i=0行的起始打印位置为5,则第i行的起始打印位置为Tab(Abs(i)+5),第i行的字符的个数为2*(4-Abs(i))-1。流程图如图6-30所示,程序代码如下:
′打印菱形图案
Private Sub Form_Click()
Dim i As Integer, j As Integer
For i = -3 To 3
Print Tab(Abs(i) + 5); ′确定每行的起始位置
For j = 1 To 2 * (4 - Abs(i)) - 1
Print "*";
Next j
Print ′换行
Next i
End Sub
【例6-6-6】求3到100之间的全部质数。
质数是除了1和它本身之外,不能被其它任何整数整除的大于1的自然数。要验证一个自然数n是否为质数,方法很多。我们采用的算法是:一个数n是否是质数,只需将n被2~ 间全部整数除即可,如果都除不尽,n就是质数。图6-31先计算出k= ,然后将n被i=2~k除。Flag是个“标志变量”,初始时Flag=0,表示n未被任何一个整数整除,如果在某一次n被一个整数i整除,则Flag改变为1,表明该数不是质数。如果n不被任何一个i整除,则Flag始终保持为0。因此,在结束循环后根据Flag的值为0或1,来判断一个数是否为质数。
′求3到10之间的全部质数
Private Sub Form_Click()
Dim n As Integer, i As Integer
Dim flag As Integer
Dim k As Integer
For n = 3 To 100 Step 2
k = Int(Sqr(n))
i = 2
flag = 0
Do While i <= k
If n Mod i = 0 Then
flag = 1 ′n能被某一个数整除
End If
i = i + 1
Loop
If flag = 0 Then Print n
Next n
End Sub
运行结果为:
3 5 7 11 13
17 19 23 29 31
37 41 43 47 53
59 61 67 71 73
79 83 89 97
说明:
①由于偶数决不会是质数,不必对偶数进行测试,因此外循环的增量为2;
②内循环中n Mod i=0中的Mod为取余运算,若n能被i整除,则余数为0;
实践与探索
请考察程序的内循环部分,如果n是一个质数,如n=11,则内循环结束时,标志变量flag的值仍为0;如果n不是一个质数,如n=63,则进行第二次循环时,n能被3整除,此时flag的值为1,已经可以判断出n不是质数,但程序中的内循环仍然要执行6次,程序的效率不高。请问该如何修改程序,当flag的值为1时直接结束循环。
练 习
⑴ 比较三种循环结构: For-Next、Do While-Loop、Do-Loop Until,指出各在什么情况下使用?Do While-Loop与Do-Loop Until 之间又有什么区别?
⑵ 写出下列程序的执行结果。
① Private Sub Form_Click()
Dim x As Integer
Dim n As Integer
n = 0
For x = 3 To 11 Step 2
n = n + 1
Print "x ="; x
Next x
Print "n="; n
Print "x="; x
End Sub
② Private Sub Form _Click()
Dim a As Integer
Dim b As Integer
Dim c As Integer
a = 1: b = 1: c = 1
Do While a + b + c <= 10
a = a + 1
b = b * 2
c = b / 2
Print a, b, c
Loop
End Sub
③ Private Sub Form _Click()
Dim x As Integer
Dim y As Integer
x = 3
y = 77
Do
Print x
Let x = x + 2
Loop Until x > Sqr(y)
End Sub
④ Private Sub Form _Click()
Dim k As Integer
Dim t As Integer
Dim s As Integer
s = 0: t = 1
For k = 2 To 4
s = s + k
t = t * k
Next k
Print "s="; s, "t="; t
End Sub
⑤ Private Sub Form _Click()
Dim a As Integer
Dim b As Integer
Dim c As Integer
Dim s As Integer
Dim i As Integer
a = 2: b = 1: s = 0
For i = 10 To 6 Step -1
s = s + a
c = a + b
a = b
b = c
Next i
Print "s="; s
End Sub
⑥ Private Sub Form _Click()
Dim i As Integer
Dim j As Integer
Dim y As Integer
Dim s As Integer
s = 1: y = 1
For i = 2 To 4
For j = 1 To 2
y = y * j
Next j
s = s + y
Next i
Print "s="; s
End Sub
⑦ Private Sub Form _Click()
Dim i As Integer
Dim j As Integer
For i = 1 To 6
For j = 1 To i
Print "^";
Next j
Print
Next i
End Sub
⑶ 编写计算下列各式的程序:
① P=n!(n!=n*(n-1)*(n-2)*(n-3)*…1,n由键盘输入)
② S=1-1/2+1/3-1/4+1/6-1/6+…+1/99-1/100
④ S=1!+2!+3!+4!+……+10!
⑷ 某工厂1997年总产值为200万元,若总产值以每年5%的速度增长,问多少年后总产值翻一番?
⑸ 编写求下式中n最大值的程序,画出流程图。
12+22+32+……+n2<=1000
⑹ 编写程序打印下列图形:
① * ②*********
** *******
*** *****
**** ***
***** *
⑺ 设计一个界面如图6-32所示的程序,图中上排的两个文本框用于输入一个分数的分子分母,中排有一个结果框,用于显示计算结果,下排为“计算”和“退出”按钮。单击“计算”钮时,在中间框中立即显示出该分数的化简结果,单击“退出”钮时,结束程序。要求写出完成该程序所要绘制的控件及需要重新设置的属性,并编写程序。
化简分数的算法如下:
① 求分子与分母的最大公约数;
② 将分子、分母分别用最大公约数相除;
③ 用上步求出的两个数组成化简分数,送到结果框显示。
例如:分子框输入126,分母框输入210,单击“计算”按钮后,化简分数框显示3/5。
图6-23
开 始
0→sum
1→i
i<=100
sum+i→sum
i+1→i
输出sum
结 束
Y
N
图6-26
A
P
N
入口
出口
Y
图 6-29
结 束
图6-30
换 行
j+1→j
Y
N
开 始
-3→i
i<=3
1→j
确定每行
起始位置
j<=2*(4-Abs(i))-1
输出"*"
i+1→i
Y
N
Y
Y
Y
N
N
N
N
Y
n<=100
图6-31
图6-32课题:面向对象的程序设计
教学时间: 授课班级:
教学目标:
1.理解对象、窗体和控件的概念,掌握建立控件对象的一般步骤,了解对象的命名规则。
2.知道对象的三要素,知道读取和设置对象属性的方法,知道调用对象方法的格式,知道事件过程的格式。
3.了解事件驱动设计思想和面向对象的设计方法。
教学重点:
1.对象、窗体、控件、属性、方法、事件等基本概念。
2.对象三要素及事件驱动设计思想。教学难点:位图图像存储容量的计算
教学过程:
一、课程导入:
1、说出所指的窗口的名称。
2、请把下列窗口名称和窗口的功能用线一一对应联起来。
工具箱窗口 设置对象的各种属性
窗体设计器窗口 管理程序中的各类文件
工程管理器窗口 进行程序界面的设计
属性窗口 提供设计程序界面的工具
代码窗口 显示和编辑程序代码
二、新课讲授:
前面我们已经熟悉了VB的操作界面和VB中窗口的不同功能,而VB又是一种面向对象的程序设计语言,那么构成一个完整的VB应用程序主要是由对象来组成的,而每个不同的对象都有各自的窗口来进行编辑。
1、对象
[提问] 什么叫对象、窗体、控件?
对象:就是在VB系统中设计好的窗体(Form)、控件、菜单、打印机、剪贴板和数据库等,而使用最多的对象是窗体和控件。
窗体:VB应用程序的基本构造模块,在程序运行时,是人与程序交互操作的窗口。
控件:指用工具箱中的工具在窗体中画出的、能实现一定功能的部件。
[演示](1)对象的建立
A.建立命令按钮控件
①单击工具箱中绘制命令按钮控件的工具。
②将指针移到窗体适当位置,指针变成十字线,拖动指针画出一个大小合适的方框。
③释放左键。命令按钮控件就完成。
B.选定命令按钮控件
单击命令按钮控件,在控件的四周有8个小方块,表示为活动控件。
C.移动命令按钮控件
先选定,再拖动命令按钮控件,可改变命令按钮控件的位置。
D.改变命令按钮控件的大小
先选定,再拖动命令按钮控件四周的小方块可改变控件的大小。
总结:通过同样的方法建立标签控件、文本框控件、定时器控件等。
[演示练习1]在窗体上设计2个命令按钮、1个文本框控件、1个标签控件和1个定时器控件;并操作任一个控件(选定、移动、改变大小)。
(2)对象的命名
[提问]为什么要给对象命名?
每个对象都要有自己的名字,有了名字才能在程序中引用该对象。
在建立对象时,VB提供缺省名:Command1,Command2,Label1等
为了容易理解,最好给对象设置一个有意义的名字。
对象的类型 意义 前缀 名字举例
Form 窗体 frm frmFind
Command 命令按钮 cmd cmdOk
Label 标签 lbl lblInput
TextBox 文本框 txt txtSource
Timer 定时器 tmr tmrClock
对象命名约定:
对象名由3个小写字母组成的前缀(指明对象的类型)和表示该对象作用的缩写字母组成。
对象命名注意:
在同一窗体中不同对象的名字不允许相同。
[演示练习2]通过在属性窗口设置名称属性来给对象命名,把Form1改名为frmfind,command1改为cmd1,Command2改为cmd2, Text1改为txt1,Label1改为lbl1,Timer改为tmrclock。
2、对象的三要素
属性:对象的性质
方法:对象的动作
事件:对象对外部操作的响应
类比:小孩玩的气球:
属性:大小、颜色、有无充气等
方法:放气、上升
事件:气球对刺破事件的响应是放气(响声)
正在播放中的录音机:
属性:大小、形状等
方法:正在播放音乐
事件:按“stop”键的响应是停止播放。
1)属性(对象的性质)
属 性 说明
BackColor (ForeColor) 设置对象的背景(前景)颜色
Font 设置对象上文本的字体、字号等
Name 设置对象的名称
Caption 设置对象上显示的文本
Width (Height) 设置对象的宽度(高度)
Left(Top) 指定控件左上角的横(纵)坐标
MaxButton(MinButton) 设置窗体能否最大(小)化
[演示练习3] 设置对象属性
对象 属性 设置值
Form1 Caption 欢迎使用Visual Basic
Command1 Caption 显示
Font 楷体、四号
Top 600
Text1 Text 你好
Font 楷体、四号
ForeColor 蓝色
A.设置属性的值
对象.属性=属性值
例:假定收音机的音量可设置在0到10之间,如果通过VB控制收音机,则可以程序代码中使用下列语句将收音机的音量调节到中等音量。
Radio.Volume=5
则Command1.Caption=”显示” Text1.Text=””
B.读取属性的值
变量=对象.属性
例:下列语句就是将当前音量的值赋值给变量Col.
Col=Radio.Volume
则a=Command1.Width aa=Text1.Text
2)事件(对象对外部操作的响应)
[提问]创建事件过程中应该使用哪一个窗口?
答:代码编辑窗口
[设问]如何使用代码编辑器窗口来创建所需要的事件过程呢?
[演示练习4]创建三个“命令”按钮的事件过程,代码如下:
“显示”按钮
Private Sub Command1_Click( )
Text1.Text=”很高兴你能学习VB语言”
End Sub
“清除”按钮
Private Sub Command2_Click( )
Text1.Text=””
End Sub
“退出”按钮
Private Sub Command3_Click( )
End
End Sub
VB为每个对象预定义了一系列的事件集。如Click(单击)、DbClick(双击)、GotFocus(获取焦点)、LostFocus(失去焦点)等
[提问]“显示”按钮的代码窗口中,事件过程名是什么?VB中事件过程名是如何构成的?
答案:Command1_Click 是事件过程名
VB中事件过程名由对象名、下划线和事件名组合而成的。
[提问] Text1.Text=”很高兴你能学习VB语言”这一行代码的作用?
答案:在程序运行时,若单击“显示”按钮则改变文本框对象Text1的Text属性的值。
事件过程的形式如下:
Private Sub Command1_Click( )
……(事件过程代码)
End Sub
事件驱动:
VB程序没有明显的开始和结束,程序的执行是由事件控制的,代码不是按照预定的路径,而是在响应不同的事件时执行不同的代码,事件的顺序决定了代码的执行的顺序,这就是VB的事件驱动的程序设计思想。
3)方法(对象的动作)
方法:是针对特定对象执行一项任务的特殊过程或函数,是对象本身所固有的动作。
格式:[对象]。方法[参数名表]
例:Form1.Print “欢迎使用Visual Basic”
[演示练习5]Private Sub Form_Click()
Form1.Print "你好"
End Sub
三、小结:
理解对象、窗体、控件、属性、方法、事件的定义。
对象的建立、命名和对象的属性设置、方法执行、事件响应。课题:分支结构
教学时间: 授课班级:
教学目标:学会用if …else…end if 语句编写简单的程序,并会调试它
教学重点、难点:
运算规则
IF 语句的用法
Msbox()等函数的涵义及用法
教学过程
用前面介绍的语句已能编写出顺序执行的简单程序。但在用计算机解决实际问题时,有时需要先对某个条件进行判断,然后根据判断的结果进行不同的操作。例如:求三个数中的最小数,用流程图表示如图6-2,图中包含有两个判断框。其中第一个判断框是根据给定的条件“a图6-19
一、条件
If语句是根据给定的条件是否满足,决定应执行的路径。如“ab、x<0、"a"<>"b"等都是合法的关系表达式。关系运算符及其示例见表6-10。
表6-10
关系运算符 含义 相当的数学符号 关系表达式示例
= 等于 = x=0
> 大于 > x*y>x+y
< 小于 < "QB"<"VB"
<> 不等于 ≠ X<>0
>= 大于等于 ≥ x>=10
<= 小于等于 ≤ x<=0
关系表达式的运算顺序是:先进行算术运算或字符串运算,然后再进行比较运算。其运算结果是一个逻辑值,即True(真)或False(假)。如果条件成立,则关系表达式取True;如果条件不成立,则关系表达式的值为False。
如果关系运算符的两边表达式的运算结果是数值,则按其大小比较。例如:
ax+y>5(x=3,y= -2) 其值为False
如果是字符串,则按字符的ASCII码从左到右一一比较,即首先比较两个字符串的第一个字符,其ASCII码值大的字符串大,如果第一个字符相等,则比较第二个字符,依此类推,直至出现不同的字符为止。如果两个字符串的长度相等,且每一个相应位置上字符都一样,就认为两个字符串相等。如果两个字符串长度不相等,但一个字符串是另一个字符串的前部,则长度大的字符串大。例如:
"VB">"VISUAL BASIC" 其值为False
"Basic"="Basic" 其值为True
"Windows">"Window" 其值为True
二、行If语句
行If语句是指在一行中写完的If语句,它的一般格式为:
格式一:If 条件 Then 语句
执行这种形式的If语句时,首先对条件进行判断。若条件成立,则执行Then后面的语句;若条件不成立,则执行If语句后继程序行的语句。
格式二:If 条件 Then 语句1 Else 语句2
执行这种形式的语句时,先进行判断,若条件成立,则执行语句1;否则执行语句2。
【例6-5-1】输入三个不相同的数,求出其中最小数。
算法设计见第一节,流程图如图6-2,程序代码如下:
' 求三个数中的最小数
Private Sub Form_Click()
Dim a As Single, b As Single, c As Single
Dim min As Single
a = InputBox("输入a", "输入框")
b = InputBox("输入b", "输入框")
c = InputBox("输入c", "输入框")
If a < b Then min = a Else min = b
If c < min Then min = c
Print "最小数="; min
End Sub
若从键盘输入的三个数分别为-981,56,23,运行结果如下:
最小数=-981
【例6-5-2】编一程序,求如下分段函数y的值,x从键盘输入。
本程序界面很简单,x的值可在程序中调用InbputBox函数,在弹出的标准输入对话框中输入,程序的计算结果可直接用Print方法输出在窗体上。算法如下:
① 输入x;
② 判断x的值,如果x<0,则x2+1→y,否则x2-x+1→y;
输出y的值;
流程图如6-20所示,程序代码如下:
' 分段函数
Private Sub Form_Click()
Dim x As Single, y As Single
x = Val(InputBox("请输入自变量x", "输入框"))
If x <= 0 Then y = x * x + 1 Else y = x * x - x + 1
Print "y="; y
End Sub
三、块If语句
上述If-Then语句,只能根据条件的真假是否执行一条语句。但是当Then部分和Else部分包含的内容较多时,则可选用“块If”结构。
格式三:If 条件 Then
语句块
End If
格式四:If 条件 Then
语句块1
Else
语句块2
End If
格式四If语句的功能是:若条件为真,则执行语句块1,然后再继续执行End if 后的语句;若条件为假,则执行语句块2,再继续执行End if后的语句。
【例6-5-3】设计一个界面如图6-21所示的算术练习程序,由计算机自动产生一位数加法练习题。学生输入答案后,单击“确认”按钮,如答案正确,自动产生下一题,否则重新输入答案。
本题算法的关键是产生一位数的加法题,VB提供了一个可以产生[0,1)之间均匀分布的随机数的随机函数Rnd,一般地,要产生[a,b]之间的随机整数,可使用下面的表达式:
Int((b-a+1)*Rnd)+a
所以,要产生一位整数,可使用以下的算术表达式:Int(10*Rnd)。缺省情况下,每当运行一个程序时,Rnd函数总是产生相同序列的随机数,因此,在调用Rnd函数之前,可先执行Randomize语句初始化随机数生成器,以使每次运行程序时,Rnd函数能够产生不同的随机数序列。
本例中除了两个命令按钮外,设置了一个标签控件用于显示产生的算术题,一个文本框控件用于输入答案,同学们可以自己设置界面中对象的属性。
程序代码如下:
' 算术练习程序
Dim a As Integer
Dim b As Integer
Dim c As Integer
' 程序的初始化过程
Private Sub Form_Load()
frmTest.Show
Randomize ' 初始化随机数生成器
a = Int(10 * Rnd): b = Int(10 * Rnd)
lblTest.Caption = Str(a) + "+" + Str(b) + "="
txtInput.Text = ""
txtInput.SetFocus
End Sub
' 确认按钮事件过程
Private Sub cmdOk_Click()
c = Val(txtInput.Text)
If c = a + b Then
MsgBox "正确,请做下一题", vbOKOnly, "提示信息"
a = Int(10 * Rnd): b = Int(10 * Rnd)
lblTest.Caption = Str(a) + "+" + Str(b) + "="
Else
MsgBox "错误,再试试", vbOKOnly + vbInformation, "提示信息"
End If
txtInput.Text = ""
txtInput.SetFocus
End Sub
Private Sub cmdEnd_Click()
End
End Sub
Load事件在运行程序装载窗体时发生,其中的代码用于初始化有关变量或控件的属性,此处主要用于产生第一道算术题,Show是窗体的方法,用于显示窗体。
讨论与思考
⒈本例程序中,输入错误答案后,要求重新输入。如果要求重试不超过3次,程序该如何修改?
⒉如果要求输入错误答案后,不再重新输入,而在结束程序前,显示本次练习的统计数据:答对题数、错误题数、正确率,又该如何修改程序?
信息卡
编译程序和COBOL语言的创始人
——格蕾斯莫里霍波
格蕾斯莫里霍波(Grace Murry Hopper),一个79岁时才从美国海军退役的女将军,为计算机事业的发展作出了杰出贡献。
我们前面介绍过,当时的计算机使用穿孔卡片输入、输出数据,为了几分钟的计算不得不准备相当长的时间,为了使计算机简单易用,她编写了世界上第一个编译器,能够将类似英语的符号代码转换成计算机识别的二进制指令,从而被人们尊称为“编译器之母”。格蕾丝的另一个重要贡献就是发明了面向商业的计算机高级语言——COBOL,与当时用于科学计算的Fortran语言不同的是,COBOL语言的句法更接近自然英语,将程序和数据截然分开,有较强的文件处理能力,特别适用于管理存储在磁带和磁盘上的大量数据。这一点后来对数据库管理系统的发展产生重大影响。COBOL语言在六、七十年代得到了广泛的应用,因此,格蕾斯也被人们称为“COBOL之母”。
另一个值得一提的事情是格蕾斯创造了Bug这个词,1947年,格蕾斯正用马克—2计算机进行一项计算,突然机器停止了运行,她和同事们在一个继电器中发现了一个已经死掉的飞蛾,正是这个虫子造成了机器的故障,后来人们就把程序中的错误称为Bug(虫子),排除错误称为Debugging(除虫)。也是当年的格蕾斯,在发明COBOL语言时,为了节约计算机存储器,只用后两位数字表示年份,为我们留下了一条危害巨大的“千年虫”。
练 习
⑴ 写出下列关系表达式的值:
① a>b(已知a=3,b=4)
② x+1>=10(已知x=7)
③ i<100(已知i=99)
④ x*y⑵ 改正下列程序段或语句中的错误:
① If a≤11 Then x=x+1 Else x=x-1
② If |y|≠15 Then y=3
③ If x>0
Then y=1
Else y=0
End
⑶ 写出下列程序的执行结果。
Private Sub Form_Click()
Dim x As Single
Let x = 38
If x < 20 Then
Print "x<20"
Else
If x <= 50 Then
Print "20<=x<=50"
Else
Print "x>50"
End If
End If
End Sub
⑷ 从键盘输入三个数,输出其中绝对值最大的数,画出流程图。
⑸ 设C盘\BMP目录下有15个BMP格式图像文件:XXX01.BMP、XXX02.BMP、XXX03.BMP、……、XXX15.BMP。设计一个界面如图6-24所示的看图程序,图的正中为图形框,单击“上图”“下图”钮显示上幅、下幅图像。要求写出完成该程序所要绘制的控件及需要重新设置的属性,并编写程序。
程序运行过程中,利用LoadPicture(String)函数设置图片框的Picture 属性显示
图像,String参数为要显示的图像文件的路径名和文件名,例如:Picture1.Picture = LoadPicture("c:\bmp\xxx01.bmp")。
图6-22
A
B
Y
N
入口
出口
P
开 始
输入x
x<=0
x2+1→y
x2-x+1→y
输出y
结 束
Y
N
图6-20
图6-21