《第5章 程序设计基础精选文档.ppt》由会员分享,可在线阅读,更多相关《第5章 程序设计基础精选文档.ppt(72页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第5章章 程序设计基础程序设计基础本讲稿第一页,共七十二页5.1 程序设计概述程序设计概述l程序设计:利用系统提供的设计工具,按照程程序设计:利用系统提供的设计工具,按照程序设计语言的规范描述解决问题的算法并进行序设计语言的规范描述解决问题的算法并进行程序编写的过程。程序编写的过程。l两类:两类:结构化程序设计面向对象的程序设计本讲稿第二页,共七十二页5.2结构化 程序设计5.2.1 创建、修改和运行程序lVFP程序是包含一系列命令的文本文件l创建:项目管理器MODIFY COMMAND 程序文件名.PRGl修改:项目管理器l运行:生成.FXP项目管理器DO 程序文件名 本讲稿第三页,共七十
2、二页l5.2.2 顺序结构 P139l5.2.3 分支结构(根据逻辑表达式的值决定程序的流程)(根据逻辑表达式的值决定程序的流程)IFELSE ENDIF P140DO CASE CASE 表达式1 命令组1 CASE 表达式 2 命令组2 -OTHERWISE 命令组 ENDCASE P141本讲稿第四页,共七十二页l5.2.4 循环结构FOR 循环变量=初值 TO 终值 STEP 步长 命令组 ENDFOR|NEXTlLOOP:跳出本次循环跳出本次循环,进入下一次循环进入下一次循环lEXIT 退出循环退出循环 P143DO WHILE 条件 命令组 ENDDO P145SCAN 范围 FO
3、R 条件 命令组 ENDSCAN P146本讲稿第五页,共七十二页l结构可以嵌套结构可以嵌套例例:输出九九乘法表的下三角形式输出九九乘法表的下三角形式 FOR K=1 TO 9 FOR J=1 TO K?STR(K*J,4)ENDFOR?ENDFOR 本讲稿第六页,共七十二页5.2.5 过程与用户自定义函数l定义PROCEDURE/FUNCTION PARAMETER RETURN 表达式表达式ENDPROC/ENDFUNCP147过程或自定义函数可以作为独立的程序文件保存,或多个过程和自定义函数保存在一个称为过程文件的程序文件中,或位于一个程序的底部 实验书P72本讲稿第七页,共七十二页过程
4、与函数调用DO 过程名过程名 WITH 参数参数函数名函数名(参数参数)P148本讲稿第八页,共七十二页:完善程序SET TALK OFF ;CLEAR;X=SPACE(0)FOR I=1 TO X=X+ALLT(STR(I)?STR(VAL(X)+”*9+”+”=“+ALLT(STR(VAL(X)*9+I+1)ENDFOR 1*9+2=11 12*9+3=111 123*9+4=1111 1234*9+5=11111 12345*9+6=111111 123456*9+7=1111111 1234567*9+8=11111111 12345678*9+9=111111111 12345678
5、9*9+10=1111111111本讲稿第九页,共七十二页运行结果?TT(”123E%n w$O 4q*5n6”)FUNCTION TT PARAMETERS cStr cResult=SPACE(0)FOR n=1 TO LEN(ALLT(cStr)c=SUBSTR(cStr,n,1)IF!BETWEEN(c,”A”,”Z”)AND!BETWEEN(c,”a”,”z”)LOOP ENDIF cResult=cResult+CHR(ASC(c)+1)ENDFOR RETURN cResultENDFUNCTION本讲稿第十页,共七十二页CLEARI=0N=0DO WHILE I=10 IF M
6、OD(I,2)=0 N=N+1 ENDIFI=I+1ENDDO?N本讲稿第十一页,共七十二页下列函数功能是:当传送17之间的数值型参数时,返回一个中文形式的“星期日-星期六FUNCTION NTOC PARAMETERS N LOCAL CHCH=“日一二三四五六”MCH=“星期”+SUBSTR(CH,_,2)RETURN MCHENDFUNC本讲稿第十二页,共七十二页显示结果CLEARDO WHILE N10 IF INT(N/2)=N/2?”W”ENDIF?”Fox”N=N+1ENDDO显示_行,内容为_本讲稿第十三页,共七十二页完善程序,以显示7-1000以内能被7整除且含有数字5的所有
7、整数.(如35,56,105等)FOR N=7 TO 1000 _ CH=ALLT(STR(N)IF“5”$CH?N ENDIFENDFOR本讲稿第十四页,共七十二页5.3 面向对象的程序设计基础面向对象的程序设计基础本讲稿第十五页,共七十二页6.1.1 面向对象的程序设计方法面向对象的程序设计方法(object-oriented programming,简称OOP)l以对象为中心的问题求解方法以对象为中心的问题求解方法:用什么做用什么做-要要做什么做什么本讲稿第十六页,共七十二页5.3.1 类和对象类和对象一、类(class):面向对象程序设计的核心。将具有相同结构,操作,并遵守相同规则的对
8、象聚合在一起,这组对象称为类。类是一个具有相同行为的对象的抽象。二、对象(object)是类的一个实例.三、类和对象的关系程序由一个或多个类组成,在程序运行时需要创建该类的各个对象(实例)。类是静态概念,而对象是动态概念。在VFP中,表单,表单集,控件都是对象。本讲稿第十七页,共七十二页 而这个类的实例对象,便是 一 部 电 话。电话的电路结构和设计布局可以是一个类本讲稿第十八页,共七十二页品牌品牌型号型号颜色颜色大小大小听筒有拿起和挂上听筒有拿起和挂上两种状态两种状态对象具有属性对象具有属性(Property)l每个对象都有属性。每个对象都有属性。l属性定义了对象的特征或某一方属性定义了对象
9、的特征或某一方面的行为。面的行为。l属性由对象所基于的类决定。可属性由对象所基于的类决定。可以定义新的属性。以定义新的属性。l有些属性值既能在设计时也可在有些属性值既能在设计时也可在运行时进行设置;有些只能在设运行时进行设置;有些只能在设计阶段设计,不能在运行阶段设计阶段设计,不能在运行阶段设置;有些则不能进行设置。置;有些则不能进行设置。本讲稿第十九页,共七十二页例如,表单中一个按钮的部分属性例如,表单中一个按钮的部分属性lCaption按钮上按钮上的说明性文字。的说明性文字。lEnabled按钮按钮能否被用户操作。能否被用户操作。lForeColor标题文本的颜色。标题文本的颜色。lLef
10、t按钮按钮左边的位置。左边的位置。lMousePointer在按钮上鼠标指针的形状。在按钮上鼠标指针的形状。lTop顶边的位置。顶边的位置。lVisible是否可见。是否可见。本讲稿第二十页,共七十二页对象具有与之相关联的事件对象具有与之相关联的事件(event)和方法和方法(method)程序程序l事件事件(Event)是由对象识别的一个动作。如)是由对象识别的一个动作。如l单击鼠标(Click)l移动鼠标(MouseMove)l按键(KeyPress)等l事件由用户动作产生,也可以由程序或系统产生。事件由用户动作产生,也可以由程序或系统产生。l可以对事件编写相应的代码对此动作进行响应。可以
11、对事件编写相应的代码对此动作进行响应。l事件集合是固定的,用户不能创建新的事件,事件集合是固定的,用户不能创建新的事件,本讲稿第二十一页,共七十二页对象具有与之相关联的事件对象具有与之相关联的事件(event)和方法和方法(method)程序程序l方法程序:方法程序:对象能够执行的一个操作。是与对象相关对象能够执行的一个操作。是与对象相关联的过程,方法程序紧密地和对象连接在一起。联的过程,方法程序紧密地和对象连接在一起。l事件可以具有与之相关联的方法程序。例如,为事件可以具有与之相关联的方法程序。例如,为 Click 事件编写的方法程序代码将在事件编写的方法程序代码将在 Click 事件出现事
12、件出现时被执行。时被执行。l方法程序也可以独立于事件而单独存在,此类方法程方法程序也可以独立于事件而单独存在,此类方法程序必须在代码中被显式地调用。序必须在代码中被显式地调用。l可由用户创建,因此方法程序集合却可以无限扩展。可由用户创建,因此方法程序集合却可以无限扩展。本讲稿第二十二页,共七十二页5.3.2基类基类l所有对象的属性、事件和方法程序在定义类时被指定。所有对象的属性、事件和方法程序在定义类时被指定。基类是系统内部提供的类,可作为其他用户自定义类的基础。子类是以其他的类(基类和子类)为起点自定义的类,子类继承任何对父类所做的修改用户自定义类与基类相似,但由用户定义,并可派生子类。l类
13、还有如下特征:类还有如下特征:封装性封装性、多态性多态性和和继承性继承性 P137 P137:本讲稿第二十三页,共七十二页本讲稿第二十四页,共七十二页继承性说明了子类延用父类特征的能力。如果父类特征发生改变,则子类将继承这些新特征。多态性主要是指一些关联的类包含同名的方法程序,但方法程序的内容可以不同。封装是指将对象的方法程序和属性代码包装在一起。本讲稿第二十五页,共七十二页基类分两种基类分两种l容器类容器类(container classes)是包容其他类的基类。)是包容其他类的基类。基于容器类创建的对象称为容器对象可以将容器类的对象作为一个整体进行操作也可以分别对其包容的对象分别处理。l控
14、控件件类类(control classes),也也可可称称为为非非容容器器类类,是是可可以以包包含含在在容容器器类类中的基类。中的基类。l控件对象可以包含在容器对象中但不能作为其它对象的父对象。l基类P151表5-1,容器类表5-2;所有基类都有最小属性集(表5-3;最小事件集(表5-4)本讲稿第二十六页,共七十二页VFP中的类的层次中的类的层次本讲稿第二十七页,共七十二页容器类以及可以包含的对象容器类以及可以包含的对象本讲稿第二十八页,共七十二页5.3.3 处理对象处理对象本讲稿第二十九页,共七十二页1 引用对象引用对象引用对象必须知道:引用对象必须知道:l对象的容器层次关系对象的容器层次关
15、系l对象的名(对象的名(name)本讲稿第三十页,共七十二页本讲稿第三十一页,共七十二页对象引用分为对象引用分为绝对引用绝对引用和和相对引用相对引用l绝对引用绝对引用是指从容器的最高层次引用对象,给出对是指从容器的最高层次引用对象,给出对象的绝对地址。象的绝对地址。l例如:表单例如:表单Form1对象的绝对引用可表示为:对象的绝对引用可表示为:FormSet1.Form1l表格的第一列对象的绝对引用表格的第一列对象的绝对引用FormSet1.Form1.Pageframe1.page1.grid1.column1本讲稿第三十二页,共七十二页对象引用分为对象引用分为绝对引用绝对引用和和相对引用相
16、对引用l相相对对引引用用是是指指在在容容器器层层次次中中相相对对于于某某个个容容器器层层次次的的引用。引用。l相相对对引引用用通通常常运运用用于于某某个个对对象象的的事事件件处处理理代代码码或或方方法程序代码中。法程序代码中。本讲稿第三十三页,共七十二页相对引用对象时所用的关键字相对引用对象时所用的关键字lActiveForm 当前活动表单当前活动表单lActivePage 当前活动表单中的活动页面当前活动表单中的活动页面lActiveControl 当前活动表单中具有焦点的控件当前活动表单中具有焦点的控件lPARENT 该对象的直接容器该对象的直接容器lTHIS 该对象该对象lTHISFOR
17、M 包含该对象的表单包含该对象的表单lTHISFORMSET 包含该对象的表单集包含该对象的表单集lTHIS、THISFORM、THISFORMSET只能在方法程序或事件处理代码中使用。本讲稿第三十四页,共七十二页l如在选项按钮组的事件代码中引用文本框如在选项按钮组的事件代码中引用文本框TEXT1,l THIS.PARENT.TEXT1l THISFORM.TEXT1l THISFORMSET.FORM1.TEXT1本讲稿第三十五页,共七十二页系统变量系统变量 _SCREENl系系 统统 变变 量量 _SCREEN表表 示示 屏屏 幕幕 对对 象象,与与ActiveForm等等组组合合可可以以
18、在在不不知知道道表表单单名名的的情情况况下处理活动表单。下处理活动表单。l例如,对当前活动表单的引用:例如,对当前活动表单的引用:_SCREEN.ActiveForml对当前活动控件的引用:对当前活动控件的引用:_SCREEN.ActiveForm.ActiveControl本讲稿第三十六页,共七十二页2 设置对象属性设置对象属性l在在设计时设计时设置对象属性设置对象属性在“属性”窗口中进行l在在运行时运行时设置对象属性设置对象属性对象.属性=值l例如例如FormSet1.Form1.Text1.Value=DATE()FormSet1.Form1.Text1.ForeColor=RGB(0,
19、0,0)_screen.FontSize=18_screen.BackColor=RGB(255,0,0)本讲稿第三十七页,共七十二页l利用利用WITHENDWITH语句简化对同一对语句简化对同一对象的多个属性的设置象的多个属性的设置WITH ThisFormSet.Form1.Text1.Value=DATE().ForeColor=RGB(0,0,0).BackColor=RGB(192,192,192).FontName=黑体ENDWITH本讲稿第三十八页,共七十二页3 调用方法程序调用方法程序引用对象引用对象.方法程序方法程序例如:FormSet1.Form1.ShowFormSet1
20、.Form1.text2.setfocus_SCREEN.Line(1,1,100,100)本讲稿第三十九页,共七十二页4 响应事件响应事件l事件是由对象识别的一个动作l可以编写相应的代码对此动作进行响应l注意:若新建的方法与某个事件重名,则当该事件发生时,同名方法被执行。用户通常不能通过编程的方式激发事件的产生,但可以在需要时调用任一事件的处理代码。本讲稿第四十页,共七十二页5.3.4 事件模型事件模型本讲稿第四十一页,共七十二页1 核心事件核心事件lVFP基类的事件集合是固定的,不能进行扩充。用基类的事件集合是固定的,不能进行扩充。用户不能设计产生新的事件。户不能设计产生新的事件。l最小事
21、件集包括最小事件集包括Init、Destroy和和Error事件。事件。Init当对象创建时激活当对象创建时激活Destroy当对象从内存中释放时激活当对象从内存中释放时激活Error当类中的事件或方法程序中发生错误时激活当类中的事件或方法程序中发生错误时激活本讲稿第四十二页,共七十二页Load表单或表单集被加载到内存中。表单或表单集被加载到内存中。Unload从内存中释放表单或表单集。从内存中释放表单或表单集。Init创建对象。创建对象。Destroy从内存中释放对象。从内存中释放对象。Click用户使用主鼠标按钮单击对象。用户使用主鼠标按钮单击对象。DblClick用户使用主鼠标按钮双击对
22、象。用户使用主鼠标按钮双击对象。RightClick用户使用辅鼠标按钮单击对象。用户使用辅鼠标按钮单击对象。GotFocus对象接收焦点,由用户动作引起,如按对象接收焦点,由用户动作引起,如按Tab键或单击,键或单击,或者在代码中使用或者在代码中使用SetFocus方法。方法。LostFocus对象失去焦点,由用户动作引起,如按对象失去焦点,由用户动作引起,如按Tab键或单击,或者在键或单击,或者在代码中使用代码中使用SetFocus方法。方法。KeyPress用户按下或释放键。用户按下或释放键。MouseDown当鼠标指针停在一个对象上时,用户按下鼠标按钮。当鼠标指针停在一个对象上时,用户按
23、下鼠标按钮。MouseMove用户在对象上移动鼠标。用户在对象上移动鼠标。MouseUp当鼠标指针停在一个对象上时,用户释放鼠标按钮。当鼠标指针停在一个对象上时,用户释放鼠标按钮。InteractiveChange以交互方式改变对象值。以交互方式改变对象值。ProgrammaticChange以编程方式改变对象值。以编程方式改变对象值。本讲稿第四十三页,共七十二页2 容器层次与类层次中的事件容器层次与类层次中的事件l容器不处理与所包含的控件相关联的事件;容器不处理与所包含的控件相关联的事件;l如如果果没没有有与与控控件件相相关关联联的的事事件件代代码码,VFP将将在在类类层层次次的的更更高高层
24、层上上检查是否有与此事件相关联的控件代码。检查是否有与此事件相关联的控件代码。l每个对象独立地接收自己的事件。每个对象独立地接收自己的事件。l当当事事件件发发生生时时,只只有有与与事事件件相相关关联联的的最最里里层层对对象象识识别别该该事事件件,更更高高层层的的容容器器不不识识别别该该事事件件。例例外外:对对于于选选项项按按钮钮组组与与命命令令按按钮钮组组来来说说,组组中中个个别别按按钮钮如如果果没没有有编编写写事事件件处处理理代代码码,则则当当事件发生时将执行组事件的处理代码。事件发生时将执行组事件的处理代码。本讲稿第四十四页,共七十二页3 事件激发的顺序事件激发的顺序本讲稿第四十五页,共七
25、十二页l有固定激发顺序的事件(如表单在创建或删除时发生的事件序列)l独立发生的事件(如Timer事件等)l用户与VFP的交互操作时伴随发生其它一系列事件lP156 表5-7 VFP中事件顺序中事件顺序本讲稿第四十六页,共七十二页4 常用事件常用事件本讲稿第四十七页,共七十二页1 鼠标事件lMouseMove事件lClik事件lRightClick事件lDblClick事件lMouseDown事件lMouseUp事件lDrapDrop事件lDragOver事件lDropDown事件lScrolled事件lDownClick事件lUpClick事件本讲稿第四十八页,共七十二页MouseMove 事
26、件事件l当用户在一个对象上移动鼠标时发生。l不能应用于:formset,timerl语法:PROCEDURE Object.MouseMoveLPARAMETERS nIndex,nButton,nShift,nXCoord,nYCoord 或者 LPARAMETERS nButton,nShift,nXCoord,nYCoord本讲稿第四十九页,共七十二页MouseMove 事件事件lnIndex:唯一的标识控件数组中的一个控件:唯一的标识控件数组中的一个控件 lnButton指定鼠标键的状态1(左)2(右)4(中)lnShift指定SHIFT、CTRL和ALT键的状态:l1(SHIFT)2
27、(CTRL)4(ALT)l3(SHIFT+CTRL)l5(SHIFT+ALT)l6(CTRL+ALT)lnXCoord,nYCoord存放表单中鼠标指针当前的水平(nXCoord)和垂直(nYCoord)位置。本讲稿第五十页,共七十二页Click 事件事件l当用户在一个对象上单击鼠标左键时发生。l不能应用于:formset,timer,columnl语法:PROCEDURE Object.ClickLPARAMETERS nIndex本讲稿第五十一页,共七十二页Click 事件在以下情况发生:事件在以下情况发生:l用鼠标左键单击一个控件时。用鼠标左键单击一个控件时。l在组合框或列表框中选择一项
28、时。在组合框或列表框中选择一项时。l在在命命令令按按钮钮、选选项项按按钮钮或或复复选选框框有有焦焦点点时时按按SPACEBAR。l表表单单中中有有Default属属性性设设置置为为“真真”(.T.)的的命命令令按按钮并且按钮并且按ENTER时。时。l按按一一个个控控制制的的访访问问键键。例例如如,若若一一个个命命令令按按钮钮的的标标题为题为“Go”,则按,则按ALT+G可触发可触发Click事件。事件。l单击微调控件的文本输入区单击微调控件的文本输入区本讲稿第五十二页,共七十二页Click 事件在以下情况不发生:事件在以下情况不发生:l当指针位于标题栏、控制菜单框或窗口边界上时,不发生表单的C
29、lick事件。l单击废止的控制时,该控件的Click事件不发生,而该控件所在的容器将发生Click事件。本讲稿第五十三页,共七十二页2 键盘事件键盘事件-KeyPress事件l当用户按下并释放某个键时发生此事件。l应用于:复选框、组合框、命令按钮、编辑框、表单、列表框、选项按钮、微调、文本框。l语法为:语法为:PROCEDURE Object.KeyPressLPARAMETERS nIndex,nKeyCode,nShiftAltCtrlnKeyCode数值标识被按下的键本讲稿第五十四页,共七十二页3 改变控件内容的事件改变控件内容的事件lInteractiveChange事件lProgra
30、mmaticChange事件本讲稿第五十五页,共七十二页InteractiveChange事件l在使用键盘或鼠标更改控制的值时发生。在使用键盘或鼠标更改控制的值时发生。l应应用用于于:复复选选框框、组组合合框框、命命令令组组、编编辑辑框框、列列表表框框、选选项项组组、微微调调、文文本本框框。其其处处理理程程序序的的l语法为:语法为:PROCEDURE Control.InteractiveChangeLPARAMETERS nIndex本讲稿第五十六页,共七十二页4 焦点事件焦点事件lGotFocus事件lLostFocus事件lWhen事件lValid事件本讲稿第五十七页,共七十二页GotF
31、ocus事件l当通过用户操作或执行程序代码使对象接收到焦点时,此事件发生。l当当表表单单没没有有控控件件,或或者者它它的的所所有有控控制制已已废废止止或或不可见时,此表单才能接收焦点。不可见时,此表单才能接收焦点。l只有当对象的Enabled属性和Visible属性均设置为“真”(.T.)时,此对象才能接收焦点。本讲稿第五十八页,共七十二页lLostFocus事件事件当某个对象失去焦点时发生。lWhen事件事件在控制接收焦点之前此事件发生。lValid事件事件在控制失去焦点之前发生。本讲稿第五十九页,共七十二页5 表单事件表单事件lLoad事件:创建对象前发生lUnload事件:对象被释放时发
32、生lActivate事件:激活表单,表单集或页对象,或者显示工具栏对象时lDeactivate事件:对容器对象,当所包含的对象没有焦点而不再处于活动状态或工具蓝使用HIDE 隐藏时lPaint事件:当表单或工具栏重画时发生lResize事件:调整对象大小时发生。本讲稿第六十页,共七十二页6 数据环境事件数据环境事件lAfterCloseTables事件lBeforeOpenTables事件本讲稿第六十一页,共七十二页7 其它事件其它事件lTimer事件:经过事件:经过INTERVAL指定的毫秒时指定的毫秒时lInit事件;创建对象时发生,容器中的对象在事件;创建对象时发生,容器中的对象在容器之
33、前容器之前lDestroy事件:释放对象时发生,容器在容器中事件:释放对象时发生,容器在容器中对象之前对象之前lError事件:运行出错时发生事件:运行出错时发生本讲稿第六十二页,共七十二页5.3.5 事件驱动和事件循环事件驱动和事件循环面向对象的程序设计方法设计的应用程序,其功能的实现是由事件驱动的本讲稿第六十三页,共七十二页事件驱动事件驱动l程序代码的执行总是由某个事件的发生而引起。l程序设计人员不必设计程序执行的精确顺序。本讲稿第六十四页,共七十二页事件循环事件循环l利用VFP进行应用程序设计时,必须创建事件循环l事件循环是由READ EVENTS命令建立、CLEAR EVENTS命令终
34、止的交互式的运行时刻环境。本讲稿第六十五页,共七十二页6.5 方法方法lP167表表6-8本讲稿第六十六页,共七十二页示例1(累加)l计算 S=1+2+99 S=0 FOR K=1 TO 99 STEP 1 S=S+K ENDFORl计算 S=1*1+3*3+5*5+.+25*25S=0FOR K=1 TO 25 STEP 2 S=S+K*KENDFOR本讲稿第六十七页,共七十二页示例2(累乘)l计算 P=3*5*7*9*11*.*25P=1FOR K=3 TO 25 STEP 2 P=P*KENDFOR本讲稿第六十八页,共七十二页示例3(累加+累乘)l计算 S=1!+2!+3!+20!S=0
35、FOR I=1 TO 20 P=1FOR J=1 TO IP=P*JNEXT lS=S+PNEXT 累乘累加本讲稿第六十九页,共七十二页示例4(随机数的产生之一)l产生50个随机数。DIMENSION A(50),B(5,10)FOR I=1 TO 50A(I)=RAND()ENDFORFOR I=1 TO 5FOR J=1 TO 10B(I,J)=RAND()NEXT lNEXT 本讲稿第七十页,共七十二页示例5(随机数的产生之二)l产生10个(10-50)之间的随机整数。DIMENSION X(10)FOR I=1 TO 10N=5;赋初值DO WHILE N50N=INT(RAND()*100)ENDDO X(I)=NENDFOR 取数本讲稿第七十一页,共七十二页示例6(排序)l将数组A(10)中的10个元素按升序进行排序。(降序如何处理?)FOR I=1 TO 10FOR J=I+1 TO 10IF A(I)A(J);比较比较T=A(I)A(I)=A(J)A(J)=TENDIFENDFORENDFOR交换本讲稿第七十二页,共七十二页
限制150内