资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第四章 批量数据的处理,主讲:聂振钢,石家庄铁路职业技术学院 测绘工程系,1,批量数据的处理,4.1 循环结构,4.2 数组,4.3 过程,4.4 高级界面设计,4.5 批量数据的输入和输出*,4.6 应用举例,2,循环结构,利用循环结构可以实习语句的重复执行,VB提供了计数型循环和条件型循环,For循环语句属于计数型循环,Do循环和While循环属于条件型循环,3,For,循环语句(,计数型循环语句,),For循环用于实现循环次数已知的循环结构,For循环的格式如下:For 循环变量=初始值 To 终值 Step 步长 循环体 Exit For 循环体 Next 循环变量,关键词:循环变量、初始值、终值、步长、循环体、Exit For、Next 循环变量,4,For循环语句应用举例,例4.1:求1100的所有整数之和。,例4.1的进一步深入:求1100的所有奇数之和。,例4.1的变化:求1100的所有整数之积。,例4.3:求Pi的近似值,其计算公式为:,练习:用写出求下式的前一百项结果的VB代码,5,For循环语句应用举例(续一),例4.4:房屋贷款的年利率是4.81%,如果一次性贷款15万元,15年后归还,则归还时,应偿还的本息总额是多少?,例4.4的深入:若贷款分15年归还,每年归还本金相同,那么累计还款金额是多少?,6,For循环应用:打印ASCII码表,ASCII码是计算机常用的字符编码,例4.2:打印ASCII码表的程序,码表中:32以前的是非打印字符32对应的是空格09对应的ASCII码范围是4857大写字母对应的ASCII码范围是6590小写字母对应的ASCII码范围是97122,7,For循环应用:猴子吃桃,小猴子在一天摘了若干个桃子,当天吃掉了一半多一个;第二天接着吃了剩下的桃子的一半多一个;以后每天都吃掉剩余桃子的一半多一个,到第8天早上要吃的时候,只剩下一个桃子了,问:小猴子那天共摘了多少个桃子?,分析:设第n天的桃子数为 ,那么它是前一天桃子数的二分之一减一,即:或,8,For循环应用:素数判断,素数,也称质数,指一个大于,1,且只能被,1,和自身整除的正整数。,判别某数,m,是否为素数的方法很多,最简单的方法是根据素数的定义来求解,其算法思路是:,用 分别去除m,判断m能否被,i,整除,只要有一个能整除,m就不是素数,否则m是素数。,9,作业(思考题,下次课提问),用For循环语句实现如下计算:(1)求11000的所有偶数之和;(2)求11000的所有被3除余1的数之积;(3)求(4)求菲波那乞数列的第100项。菲波那乞数列:1,1,2,3,5,8,13,10,While循环(条件型循环),While 条件 循环体 Wend,条件:一般为条件表达式,值为True或False,条件在循环体内应有所变动,否则造成不循环或“死循环”;没有循环体的循环称“空循环”,11,While循环举例,使用While循环语句实现没有重复的学号抽取,使用While循环语句改写连加的例子,使用While循环语句改写连乘的例子,使用While循环语句改写素数判断程序,12,Do循环(条件型循环),先判断型Do循环语句:Do,While或Until 条件,语句体 Exit 满足某条件时 语句体Loop,后判断型Do循环语句:Do 语句体 Exit 满足某条件时 语句体Loop,While或Until 条件,13,Do循环举例,使用Do循环语句改写连加的例子,使用Do循环语句改写连乘的例子,没有条件的Do语句(使用Exit语句结束),使用Do循环语句实现没有重复的学号抽取,14,循环的嵌套,在一个循环体内又包含了一个完整循环的循环结构称为循环的嵌套。,注意:内外循环变量不能重名;内外循环不能交叉。,允许:两个并列的循环;正确的嵌套,15,循环嵌套的举例,例4.5:打印九九乘法表,例4.6:百元找零(穷举法举例),应用举例4.5.1:打印五角星,16,打印五角星,应用举例4.5.1:打印如下列各图所示的五角星,17,打印九九乘法表,例4.5:在窗体上打印出如下图所示的九九乘法表,18,百元找零(穷举法举例),把一张一百元的人民币,兑换成,40,张,1,元、,2,元或,5,元的零钱,编程计算可以有多少种兑换方法。,分析:,设,1,元、,2,元、,5,元的零币分别为,x,、,y,、,z,张,根据题目要求,列出方程为,三个未知数,只有两个个方程,因此解不确定,可以有如下两种方法求解:,三重循环,都是从0到40;三重循环,内循环利用外循环的条件。,19,作业,1.For循环语句的循环次数应如何计算?,2.For,循环与,Do,循环有何区别?哪种循环至少循环一次?什么叫“死循环”?什么叫“空循环”?,3.简述For循环语句执行的过程。,4.简述While循环语句执行的过程。,5.简述Do循环语句执行的过程。,20,第六次上机总结,1.求sinx的值:递推的使用以及防止溢出;,2.打印九九乘法表:重点。,3.百元买百鸡问题:两个条件;循环次数,4.打印五角星:分号的使用;打印起始位置的控制;打印行数的控制;五角星个数的控制。,21,数组,数组可以用来处理同一性质的成批数据,固定数组,动态数组,控件数组,22,引例:求15个观测值的均值方差,例4.8:求15个观测值 的均值和方差。,均值:中误差:,23,求15个观测值的均值方差:代码,不用数组的写法,算术平均值和中误差(不用数组),使用数组的写法,算术平均值和中误差(用数组),24,固定数组,数组的声明:,数组的基本操作:(1)给数组元素赋初值;(2)数组的输入和赋值;(3)数组的输出;(4)求数组最大元素所在的下标;(5)交换数组中各元素;(6)数组元素排序;(7)求数组各元素之和;(8)求二维数组行和、列和、对角线和,25,固定数组的声明,一维数组:,Dim 数组名(下标)As 类型,其中:,数组名,的命名规则与变量命名规则相同;,下标,必须为常数(要使用变量或者表达式,需用动态数组);,下标,的形式为下界 to 上界,省略下界时,默认为0;,类型,为任何一种VB的数据类型。,一维数组举例:,Dim A(6)As Integer 数组元素下标从0开始,共7个Dim a(1 to 7)As Interger 下标从1开始,共7个Dim x(15)As Double 下表从0开始,共16个,26,固定数组的声明(续),多维数组:,Dim 数组名(下标1,下标2,下标3,)As 类型其中:,下标个数,决定了数组的维数;数组,每一维的大小,与一维数组的计算方法相同;数组,总的大小,维每一维大小的乘积。,多维数组举例:,Dim Matrix(3,4)As DoubleDim a(1 to 3,1 to 4)As IntegerDim b(5,1 to 9,1 to 6)As LongDim c(1 to 4,7,3 to 9)as Single,27,数组的输入,给数组赋初值,For i=1 to 15 v(i)=0Next i,数组的输入,For i=1 to 15 v(i)=InputBox(“请输入第”&i&“个观测值”)Next i,数组的赋值,For i=1 to 15b(i)=a(i)或者 b=a (Vb6.0以后)Next i,28,数组的输出,一维数组的输出:,For i=1 to 15Print v(i);”Next i,二维数组的输出:,For i=1 to 15For j=1 to 15Print Q(i,j);”Next jPrint Next i,29,求数组中最大元素及其下标,Dim Max As Integer,iMax As Integer,sum As Integer,数组,V,赋初值,Max=V(1):iMax=1,For i=2 to 15,If V(i)Max Then,Max=V(i),iMax=i,End If,Next i,2,3,1,5,6,30,交换数组中各元素,将数组第1个元素与最后一个交换,第2个元素与倒数第2个元素交换,依此类推,结果如图所示:,For i=1 to 10 2Temp=v(i)v(i)=v(15 i+1)v(15 i+1)=TempNext i,31,思考题,1.如何求一维数组最小元素及其下标?如何求二维数组的最小元素及其下标?,2.进行数组元素交换操作时,为什么循环的终值是15 2,而不是15?如果要将数组的前一半元素与后一半元素交换,即第1个与第9个交换,第2个与第10个交换,上述代码应如何修改?,32,数组应用举例:40抽12的实现,从40个学号中直接抽出12个互不相同的学号点名:(1)完全不使用数组的写法;(2)使用数组进行重复判断的写法;(3)完全使用数组的写法;,33,控件数组,类型相同且功能相近的控件可以组成控件数组,它们使用相同的名称(Name),通过索引值(下标)来互相区别。,创建控件数组:(1)设计时创建;(2)运行时动态加载;,34,控件数组应用举例,应用举例4.5.7:考试成绩分析统计,应用举例4.5.5:矩阵运算程序*,35,动态数组,事先不知道数组大小时,可以声明该数组为动态数组,在需要时再用ReDim语句指定数组的大小。,创建动态数组的步骤:(1)声明数组为动态数组;(2)在需要时指定数组大小。,36,动态数组应用举例,应用举例4.5.2:观测值均值和中误差的计算,应用举例4.5.3:学号抽点程序的完善,37,求数组各元素之和,一维求和:,For i=1 to 15sum=sum+v(i)Next i,二维求和:,For i=1 to 15For j=1 to 15sum=sum+Q(i,j)Next jNext i,38,数组元素排序,选择法排序:,从n个数中选出最小数,将其与第1个数交换位置;除第1个数外,其余n-1个数再按步骤选出次小数,与第2个数交换位置;重复步骤 n-1次,构成递增序列。,39,数组元素排序(续一),Dim iA%(1 to 10),Min%,n%,i%,j%,temp%,iA(1)=8:iA(2)=6:iA(3)=9:iA(4)=3:iA(5)=2:iA(6)=7,n=6,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,40,数组元素排序(续二),冒泡法排序:,用第1个数开始,比较相邻两个数,若前一个数比后一个数大,则交换位置,经过一轮比较后,最小一个数已经冒出;从第2个数起,仿照步骤,则比较后,次小的数冒出到第2个位置;重复步骤n-1次,最后工构成递增序列。,41,数组元素排序(续三),冒泡法排序代码:,For i=1 To n-1 ,进行,n-1,轮比较,For j=i+1 To n ,从,ni,个元素进行两两比较,If iA(j)iA(i)Then,若次序不对,则交换位置,t=iA(j):iA(j)=iA(i):iA(i)=t,End If,Next j ,出内循环,一轮排序结束,最小数已冒到最上面,Next i,42,作业,1.如何声明一个一维固定数组?如何声明一个二维固定数组?如何声明相应的动态数组?,2.如何根据数组的声明语句计算数组的大小?如何通过LBound()函数和UBound()函数获得数组的大小?,3.什么是控件数组?如何创建控件数组(分别说明两种方法)?,43,第七次上机总结(一),均值和中误差的计算程序,,,算例,:对某个边长使用钢尺观测了12次,观测得到的结果分别为:23.106,23.107,23.114,23.099,23.100,23.112,23.095,23.102,23.109,23.110,23.102,23.097,使用编写的程序计算上述观测结果的均值和中误差。,44,第七次上机总结(二),彩票抽奖程序,(1)抽出特等奖1个,要求由8位数字组成,并用适当的方式显示出来。,(2)用同样的方法抽出一等奖3个,并用适当的方式显示出来。,(3)抽出二等奖5个和三等奖10个,分别使用数组来存放这些号码。,45,第七次上机总结(三),成绩分析统计程序,(1)使用InputBox输入若干成绩,计算平均分并显示出来;,(2)统计上述成绩中的优秀人数和不及格人数;,(3)统计上述成绩的优秀率和不及格率。,46,过程,过程:程序中较小的逻辑部件),子过程(Sub过程):响应事件时执行的代码,函数过程:使用Function语句自行编写的函数。,使用过程:(1)创建过程;(2)调用过程;(3)调用其他模块中的过程。,向过程传递参数*,几个常用的过程,47,子过程,子过程:相应事件时执行的代码块。作用:使查找和修改、以及重复使用代码更容易。,事件过程:Form_Load()事件过程;Command1_Click()事件过程;Form_Click()事件过程;Form_DblClick()事件过程;,通用过程:清空各文本框;(没有参数)交换两个数的过程;(两个参数)三个数排序的过程;(三个参数),48,函数过程,函数过程与子过程的区别在于函数过程具有返回值。,函数过程举例:计算某个函数表达式的值的函数;(一个参数)计算正弦值的函数;(一个参数)由三角形边长计算面积的函数;(三个参数)角度化算为弧度的函数;(一个参数)弧度化算为角度的函数;(一个参数)判断一个数是不是素数的函数;(一个参数),49,使用过程,创建过程,将已有代码修改成过程,调用Sub过程,调用函数过程,调用其它模块中的过程,50,参数的传递,形参和实参,传址和传值*,可选参数和可变参数*,51,过程应用举例:迭代法(附加题),例4.10:用两分法解非线性方程,在(,0,,,1,)内的根,要求精确到,0.0001,。,(,1,)取,a,与,b,的中点,c=(a+b)/2,,,将求根区间两分;,(2),判断根的三,种情况,:,52,53,几个常用的过程(教材P133、134),角度化为弧度,弧度化为角度,求两点间的距离,求两点间的坐标方位角,54,作业,1.子过程分为哪两类?如何定义一个子过程?,2.如何定义一个函数过程?,3.子过程与函数过程有何区别?,4.如何将例4.9的函数过程改写成一个子过程?改写后,程序在调用时应如何做相应的修改?,55,高级界面设计,键盘鼠标事件,多窗体,菜单,通用对话框,56,键盘鼠标事件,鼠标事件(1)MouseMove(2)MouseDown(3)MouseUp,键盘事件(1)KeyPress(2)KeyDown(3)KeyUp,57,鼠标事件,Private Sub Object_MouseMove(Button As Integer,Shift As Integer,X As Single,Y As Single),End Sub,Private Sub Object _MouseUp(Button As Integer,Shift As Integer,X As Single,Y As Single),End Sub,Private Sub Object _MouseDown(Button As Integer,Shift As Integer,X As Single,Y As Single),End Sub,58,鼠标事件应用举例,点不中的命令按钮,Private Sub Command1_MouseMove(Button As Integer,Shift As _ Integer,X As Single,Y As Single),Command1.Left=Command1.Left+Command1.Width,Command1.Top=Command1.Top+Command1.Height,End Sub,思考:要让命令按钮随机地上下左右躲避鼠标,应如何实现?,随鼠标移动的标签,Private Sub Form_MouseMove(Button As Integer,Shift As _ Integer,X As Single,Y As Single),Command1.Left=X,Command1.Top=Y,End Sub,思考:要让命令按钮的中心对准鼠标,应如何实现?,59,Button参数的取值,60,Shift参数的取值,61,鼠标事件应用:从天而降的小猫,小猫随鼠标移动,小猫从天而降,两种状态的切换,62,键盘事件,Private Sub Textl_KeyPress(KeyAscii As Integer),End Sub,Private Sub object_KeyDown(keycode As Integer,shift As Integer),End Sub,Private Sub object_KeyUp(keycode As Integer,shift As Integer),End Sub,63,键盘事件应用举例,按下Enter键时进行数据检查并执行某些操作,在KeyPress事件里检查输入数据的有效性;检查通过后,自动把焦点转到下一个控件;若检查不通过,则提示用户,清空文本框,等待重新输入。(三角形面积程序),让输入的字符都变成大写字母,对KeyPress事件编程,截获用户输入的信息,并修改它们。KeyAscii=Asc(Ucase(KeyAscii),64,KeyPress事件用于输入检查,Private Sub Text1_KeyPress(KeyAscii As Integer),If KeyAscii=13 Then,If Not IsNumeric(Text1.Text)Then,MsgBox 输入的不是数字,请重新输入!,Text1.Text=,Text1.SetFocus,ElseIf Val(Text1.Text)0 Then,MsgBox 输入的边长小于0,请重新输入!,Text1.Text=,Text1.SetFocus,Else,Text2.SetFocus,End If,End If,End Sub,65,KeyPress事件用于截获输入,Private Sub Textl_KeyPress(KeyAscii As Integer),KeyAscii=Asc(UCase(Chr(KeyAscii),End Sub,66,多窗体,多窗体指一个应用程序中有多个并列的普通窗体,每个窗体可以有自己的界面和程序代码,完成不同的功能。,添加窗体和移除窗体,设置启动对象,有关的语句、方法,不同窗体间数据的存取,67,添加窗体,单击“工程”菜单的“添加窗体”命令,弹出“添加窗体”对话框,“现存”:添加一个已,有窗体到本工程中。,“新建”:新建一个窗,体并添加到本工程中。,68,设置启动窗体,一个工程中有多个窗体时,默认第一个创建的窗体是启动窗体。,可以单击“工程”菜单的“工程1 属性”命令,弹出工程属性设置对话框。,在启动对象一栏,选择要设置为启动窗体的窗体。,69,多窗体有关语句、方法,(1)Load语句:将窗体装入内存。,(2)UnLoad语句:从内存中删除指定窗体。,(3)Show方法:加载并显示窗体。,(4)Hide方法:暂时隐藏窗体。,70,多窗体应用举例:测绘程序集,封面窗体 主窗体,71,不同窗体间的数据传递,控件的属性:,另一个窗体名,.,控件名,.,属性,变量的值:(,变量的作用域,)在标准模块(.BAS)中声明成全局变量,例子:不同窗体件数据传递的例子,72,变量的作用域,局部变量,在过程中声明,作用域是该过程内部。,模块变量,在窗体的通用声明段中声明,作用域是该窗体内部。,全局变量,在标准模块中用Public声明,作用域是整个工程。,返回,73,高级界面设计,键盘鼠标事件,多窗体,菜单,通用对话框,74,菜单,菜单是应用程序的组成部分之一,由菜单栏和下拉菜单组成。,建立菜单,把代码连接到菜单上,动态修改菜单状态,弹出式菜单,75,菜单应用举例一:记事本,76,把代码连接到菜单上,每个菜单项都是一个对象,都具有一些特定的事件过程。,在某菜单项的Click事件过程中编写代码,就可以使菜单在单击时实现相应的功能。,77,动态修改菜单的状态,菜单编辑器中的“有效”、“可见”选项对应菜单项的Enabled和Visible属性。,在程序运行当中修改这些属性,就可以动态地修改菜单的状态。,例如:在设计状态把某些菜单项隐藏,等到执行某种操作(如打开文件)后,再显示。,78,弹出式菜单,先在菜单编辑器中编辑该菜单。,使用PopupMenu方法实现弹出式菜单。,说明:(1)弹出式菜单在编辑时一般将可见选项设为不可见;(2)一般弹出式菜单都是在鼠标右键单击时弹出。,弹出式菜单举例,79,菜单应用举例二:控制网平差程序,80,通用对话框,通用对话框控件(CommonDialog Control):一组基于Windows的标准对话框界面。,六种样式的通用对话框:文件打开、文件另存为、颜色、字体、打印和帮助。,通用对话框只用于显示,不能真正实现各项功能:需要用户通过编程解决。,81,文件打开对话框,82,文件另存为对话框,83,颜色对话框,84,字体对话框,85,打印对话框,86,通用对话框的使用,调用通用对话框:给Action属性赋值 使用Show方法,共同属性:Action、DialogTitle,设置文件对话框:FileName、FileTitle、Filter、FilterIndex、InitDir,87,例4.17:菜单和通用对话框举例,设计一个程序,单击“打开”菜单,弹出打开文件对话框,选择文本文件,并调用记事本打开;单击“退出程序”菜单项,退出程序。,88,菜单设计,89,代码编写,Private Sub mnuOpen_Click()打开文件,CommonDialog1.Filter=文本文件(*.txt)|_*.txt|所有文件(*.*)|*.*,CommonDialog1.Action=1,Shell c:windowsnotepad.exe&_ CommonDialog1.FileName,vbNormalFocus,End Sub,90,应用举例,单导线计算程序的界面设计,应用举例4.5.4:水平角计算程序,91,单导线计算程序的界面,92,单导线程序中菜单功能的实现,“打开数据”功能:显示“打开”对话框,“保存数据”功能:显示“另存为”对话框,“退出”功能:退出程序,“关于”功能:显示关于窗体,93,水平角计算程序,94,水平角计算程序的完善,95,作业,1.MouseMove事件和MouseDown事件有何区别?,2.KeyPress事件与KeyUp事件有何区别?,3.如何实现不同窗体间的数据存取?,4.如何把代码连接到菜单上?如何实现弹出式菜单?,5.如何设置文件对话框的过滤文件类型?如何设置文件对话框的标题?如何设置文件对话框的默认路径?如何显示文件另存为对话框?,96,第四章小结,4.1 循环结构,4.2 数组,4.3 过程,4.4 高级界面设计,4.5 批量数据的输入和输出*,4.6 应用举例,97,
展开阅读全文