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