Visual FoxPro第5章程序设计基础.ppt
《Visual FoxPro第5章程序设计基础.ppt》由会员分享,可在线阅读,更多相关《Visual FoxPro第5章程序设计基础.ppt(81页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Visual FoxPro程序设计教程第5章 程序设计基础l5.1 程序设计概述程序设计概述l5.2 结构化程序设计(结构化程序设计(重点重点)l5.3 面向对象的程序设计面向对象的程序设计5.1程序设计概述l什么是程序?什么是程序?程序是一个指令序列,指令是计算机能够识别和程序是一个指令序列,指令是计算机能够识别和执行的命令。执行的命令。l程序的作用是什么?程序的作用是什么?用来处理数据,程序的输入对象成为用来处理数据,程序的输入对象成为“输入数据输入数据”,程序的结果为,程序的结果为”输出数据输出数据”。l如何编写程序?如何编写程序?采用编程语言来编写,如,采用编程语言来编写,如,Java
2、,C,C+,VFP,VB等等,等等,这些统称为编程语言。这些统称为编程语言。采用编程工具,如采用编程工具,如.NET2005,Visual FoxPro 6.0等。等。l程序设计的概念程序设计的概念 利用系统所有提供的设计工具,按照程序设计语利用系统所有提供的设计工具,按照程序设计语言的规范描述解决问题的算法并进行程序编写的言的规范描述解决问题的算法并进行程序编写的过程。过程。l程序设计的方法程序设计的方法结构化方法结构化方法(SP)面向对象的方法面向对象的方法(OOP)结构化设计l产生的原因产生的原因 早期的程序设计,早期的程序设计,编写很随意使用编写很随意使用“goto”语句语句可以任何的
3、跳转到程序的任何地方。使得程序的可以任何的跳转到程序的任何地方。使得程序的可读性差,难以维护。可读性差,难以维护。l结构化设计的规则结构化设计的规则自顶向下自顶向下逐步求精逐步求精限制使用转移语句限制使用转移语句(goto语句语句)l结构化程序设计的三种结构:结构化程序设计的三种结构:顺序、分支顺序、分支和循环和循环面向对象程序设计l设计思想设计思想 认为世界是由各种对象构成,一个较复杂的对象可以由多认为世界是由各种对象构成,一个较复杂的对象可以由多个简单的对象组成,因而采用编程语言来描述对象。个简单的对象组成,因而采用编程语言来描述对象。某一类对象的集合抽象为类,如某一类对象的集合抽象为类,
4、如“学生学生”,“教师教师”都是都是类,而某一个具体的学生,如类,而某一个具体的学生,如“张三张三”是是“学生学生”这个类这个类中的一个对象。中的一个对象。类中包含一些对象的属性和行为类中包含一些对象的属性和行为(方法方法),如,如,“学生学生”中中包含属性:学号,姓名,系等,包含行为:选课,上课等包含属性:学号,姓名,系等,包含行为:选课,上课等行为。行为。对象与对象之间通过消息来联系。对象与对象之间通过消息来联系。lOOP的三个重要特性:的三个重要特性:封装性封装性继承性继承性多态性多态性lOOP与与SP的比较的比较 OOP更接近人的解决问题的思路,能够节省编程更接近人的解决问题的思路,能
5、够节省编程的时间,可应付复杂的软件项目。但是在的时间,可应付复杂的软件项目。但是在OOP也也是以是以SP为基础的,类中的方法就是以为基础的,类中的方法就是以SP的思想编的思想编写的。写的。下面是一个完整的下面是一个完整的VFP过程化程序,可以引出几个过程化程序,可以引出几个基本概念。基本概念。*功能说明:求圆形的面积。功能说明:求圆形的面积。*文件名:文件名:RR.PRG CLEAR SET TALK OFF INPUT 请输入圆的半径,半径请输入圆的半径,半径=TO R S=PI()*R*R?半径为半径为+ALLTRIM(STR(R)+的圆,面积的圆,面积=,S SET TALK on RE
6、TURN 5.2 结构化程序设计1、从形式上看,VFP的程序是由若干有序的命令行组成,且满足下列规则:一个命令行内只能写一条命令,命令行的长度不一个命令行内只能写一条命令,命令行的长度不得超过得超过2048个字符,命令行以回车键结束。个字符,命令行以回车键结束。如果一行写不下一条语句,可以换行,但必须加如果一行写不下一条语句,可以换行,但必须加“;”2、从功能上看,程序可以分为三个部分:第一部分是程序的说明部分第一部分是程序的说明部分第二部分是进行数据处理的部分第二部分是进行数据处理的部分第三部分是程序的控制返回部分第三部分是程序的控制返回部分5.2.1 创建、修改程序文件l过程化程序设计基本
7、操作过程化程序设计基本操作(1)建立和修改程序文件。建立和修改程序文件。使用菜单命令使用菜单命令“文件文件”-“新建新建”,选择程序,选择程序 使用工具栏上面得使用工具栏上面得“新建新建”按钮按钮 在项目管理器中选择在项目管理器中选择“代码代码”页面,在选择页面,在选择“程序程序”,然后选择,然后选择“新建新建”在命令窗口执行如下命令:在命令窗口执行如下命令:MODIFY COMMAND Filename|?(2)运行程序运行程序 运行程序的三种方法:运行程序的三种方法:当程序处于编辑窗口时,点击当程序处于编辑窗口时,点击“!”按钮按钮在项目管理器中选择某一程序,点击在项目管理器中选择某一程序
8、,点击“运行运行”在命令窗口使用在命令窗口使用DO命令,格式:命令,格式:DO ProgramNameWITH ParameterList 期中期中ProgramName为程序文件名为程序文件名,with子句指子句指定参数。定参数。当程序运行,系统会自动生成一个当程序运行,系统会自动生成一个“伪编译伪编译”程序程序(.FXP)。执行时,实际上执行的是。执行时,实际上执行的是.FXP文件。文件。例例 用户通过VFP的命令窗口建立上例程序文件。在VFP的命令窗口中输入下条命令后按回车键。MODIFY COMMAND RR打开程序编辑窗口在程序编辑窗口中输入程序代码用Ctrl+W存盘退出编辑窗口,或
9、单击程序编辑窗口上的【关闭】按钮,在弹出的对话窗口中确定存盘,生成RR.prg文件。5.2.2 顺序结构l所谓顺序结构,是指程序运行时按照语句排所谓顺序结构,是指程序运行时按照语句排列的先后顺序,一条接一条地依次执行。列的先后顺序,一条接一条地依次执行。语句A语句B例例5.1 store 4.12 to p s=p*p*3.14?圆面积为:,s例例5.2 下面程序的功能是显示一个字符串在另下面程序的功能是显示一个字符串在另一个字符串中的位置。一个字符串中的位置。C=“Visual FoxPro”CC=“Fox”?AT(CC,C)&显示结果为显示结果为85.2.3 分支结构l所谓分支结构,是指程
10、序在运行过程中,所谓分支结构,是指程序在运行过程中,根据条件执行不同的操作。在根据条件执行不同的操作。在VFP中,有两中,有两种实现分支结构的语句:种实现分支结构的语句:IFELSEENDIF语句语句 DO CASEENDCASE语句语句(1)IFELSEENDIF语句 格式:IF ELSE ENDIF根据根据 的结果决的结果决定程序执行语句的顺序。如定程序执行语句的顺序。如果结果为果结果为.T.T.,则执行,则执行 1,执行完了就执行,执行完了就执行ENDIFENDIF后面的语句;如果结后面的语句;如果结果为果为.F.F.则执行则执行 2,然后执行,然后执行ENDIFENDIF后面的后面的语
11、句。语句。IF前的语句Lexp语句组1语句组2Endif后面的语句.F.T.IF语句的流程图语句的流程图例例5.3下列程序的功能是根据变量下列程序的功能是根据变量x的值决定的值决定变量变量y的值的值(为为1或或-1)。if x0 y=1 else y=-1 endif 等价于等价于y=-1If x0 y=1Endif例例5.4 下面程序的功能是解决一元二次方程。其中,下面程序的功能是解决一元二次方程。其中,PARAMETERS语句用于接收程序的参数语句用于接收程序的参数(三个参三个参数数a,b,c分别对应于一元二次方程的系数。分别对应于一元二次方程的系数。)parameters a,b,c i
12、f a=0 =Messagebox(“二次项目系数不能为零!二次项目系数不能为零!”,48,”错误显示对话框错误显示对话框”)return endif delta=b*b-4*a*c if delta0?“方程有两个不等的实根:方程有两个不等的实根:”?(-b+SQRT(delta)/(2*a)?(-b-SQRT(delta)/(2*a)else if delta=0?”方程有两个相等的实数根:方程有两个相等的实数根:”?-b/(2*a)else?”方程有两个复根:方程有两个复根:”real_part=-b/(2*a)&实部实部 img_part=sqrt(-delta)/(2*a)&虚部虚部
13、?ALLTRIM(STR(real_part)+”+”+ALLTRIM(str(img_part)+”i”?ALLTRIM(STR(real_part)+”-”+ALLTRIM(str(img_part)+”i”endif endif 因为上面的程序,定义了三个参数,所以因为上面的程序,定义了三个参数,所以执行程序时需要用执行程序时需要用”WITH”子句给出三个子句给出三个参数的值,如求方程参数的值,如求方程X2+2X-8=0的根:的根:DO abc with 1,2,-8 其中其中abc为程序文件的名称,为程序文件的名称,1,2,-8分为别分为别为给参数为给参数a,b,c指定的值。指定的值。
14、2.DO CASE ENDCASE语句语句 If语句只能判断最多两种情况,即语句只能判断最多两种情况,即“二分支二分支”。若。若要判断多于两种可能的情况,有两种方法可以实要判断多于两种可能的情况,有两种方法可以实现:现:在在IF语句中再嵌套语句中再嵌套IF语句语句 采用采用DO CASEENDCASE语句语句 但是当嵌套的但是当嵌套的IF语句太多时,会使得程序的结构语句太多时,会使得程序的结构不清晰。所以当有多种判定的情况时,采用不清晰。所以当有多种判定的情况时,采用CASE语句。语句。CASE语句的格式:语句的格式:DO CASE CASE lExpression1 Commands1 CA
15、SE lExpression2 Command2 CASE lExpressionN CommandN OTHERWISE Commands ENDCASE程序执行时,首先从第一个程序执行时,首先从第一个CASE开始,判断其后的条开始,判断其后的条件表达式件表达式lExpression1,如,如果为果为.T.。就执行语句。就执行语句Commands1然后直接执行然后直接执行ENDCASE之后的语句,否之后的语句,否则就进行第二个则就进行第二个CASE语句语句进行判断,依次类推。如果进行判断,依次类推。如果所有的所有的CASE语句后面的条语句后面的条件都为件都为.F.,就执行,就执行OTHERW
16、ISE后面的语句后面的语句(如果有)。(如果有)。DO CASELexp1Lexp2Lexpn其他语句组语句组1语句组2语句组3ENDIF后面的语句DO CASE语句的流程语句的流程图图例例5.5 用用DO CASE语句实现例语句实现例5.4中程序的功能。中程序的功能。parameters a,b,c if a=0 =Messagebox(“二次项目系数不能为零!二次项目系数不能为零!”,48,”错误显示对话框错误显示对话框”)return endif delta=b*b-4*a*c do case case delta0?“方程有两个不等的实根:方程有两个不等的实根:”?(-b+SQRT(d
17、elta)/(2*a)?(-b-SQRT(delta)/(2*a)case delta=0?”方程有两个相等的实数根:方程有两个相等的实数根:”?-b/(2*a)case delta64 and nc0 p=left(c,1)+p c=substr(c,2)enddo?cc+”的反序为的反序为”+p例例5.11 下列程序的功能是将由任意字符下列程序的功能是将由任意字符(包括汉字包括汉字)组成的字符串进行反序显示:组成的字符串进行反序显示:store abcdef to c,cc p=space(0)do while len(c)0 if x127 i=2 else i=1 endif p=le
18、ft(c,i)+p c=substr(c,2)enddo?cc+”的反序为的反序为”+p例例5.12 下列程序的功能是统计字符串中大、小写英文字母的个数。下列程序的功能是统计字符串中大、小写英文字母的个数。clear c=“Visual FoxPro”cc=c Nmax=0 Nmin=0 do while“”c do case case asc(left(c,1)64 and asc(left(c,1)96 and asc(left(c,1)123)Nmin=Nmin+1 endcase c=subs(c,2)enddo wait wind“大写字符的个数:大写字符的个数:”+str(Nmax
19、,2)+”小写的个数:小写的个数:”+str(Nmin)例例5.13 下列程序的功能是对表达式下列程序的功能是对表达式1/(123)+1/(234)+1/(n(n+1)(n+2),进行求和,进行求和,并且要求计算结果精度小于并且要求计算结果精度小于0.0000001 clear nS=0 i=1 do while.T.nS=nS+1/(i*(i+1)*(i+2)if 1/(i*(i+1)*(i+2)0.0000001 exit endif i=i+1 enddo 3.SCANENDSCAN循环结构循环结构 SCANENDSCAN构建的循环仅用于处理表的记录。若构建的循环仅用于处理表的记录。若对
20、表中的所有记录执行某一操作,可以使用该语句。随着对表中的所有记录执行某一操作,可以使用该语句。随着记录指针的移动,记录指针的移动,SCAN循环对每条记录执行相同的命令循环对每条记录执行相同的命令组。格式:组。格式:SCANScope FOR lExpression1 Commands ENDSCAN例例5.14 下列程序的功能是显示所有籍贯为下列程序的功能是显示所有籍贯为”江苏江苏“的学生姓名和籍贯。的学生姓名和籍贯。clear use xs scan for 江苏江苏$jg?xm,jg endscan5.25 过程与用户自定义函数 用户可以将经常执行的具有某种功能的一用户可以将经常执行的具有
21、某种功能的一段程序代码独立出来,将其作为一个过程段程序代码独立出来,将其作为一个过程或用户自定义函数,在需要该功能的时候或用户自定义函数,在需要该功能的时候调用这个过程或函数。调用这个过程或函数。*以下程序的功能是求圆的面积以下程序的功能是求圆的面积parameters RS=R*R*3.14return s*以下程序时求圆柱的体积以下程序时求圆柱的体积Parameters R,HS=R*R*3.14V=s*h?圆柱的体积为:圆柱的体积为:Vl函数与过程的区别函数与过程的区别函数与过程都是用于处理某一功能函数与过程都是用于处理某一功能函数有返回值,但过程没有返回值。函数有返回值,但过程没有返回
22、值。但在但在VFP中,两者没有区别只是定义的形式不同。中,两者没有区别只是定义的形式不同。1.过程与自定义函数的定义过程与自定义函数的定义 创建过程或函数时,需要使用关键字创建过程或函数时,需要使用关键字PROCEDURE或或FUNCTION语句进行定义。语句进行定义。过程的定义格式:过程的定义格式:PROCEDURE ProcedureName PARAMETERs ParameterList Commands RETURNeExpression ENDPROC其中,其中,ProcedureName为过程的名称,为过程的名称,ParameterList为为参数的列表,参数的列表,RETURN
23、后面为返回的值,后面为返回的值,eExpression缺缺省时返回为省时返回为.T.。l将上面的求圆面积的程序改为过程:将上面的求圆面积的程序改为过程:PROCEDURE jsCircle Parameters R S=R*R*3.14 return s ENDPROC函数定义的基本语法格式:函数定义的基本语法格式:FUNCTION FunctionName PARAMETERS ParameterList Commands RETURNeExpression ENDFUNCl将圆的程序在改为函数将圆的程序在改为函数 FUNCTION jsCircle Parameters R S=R*R*3
24、.14 return s ENDFUNC例例5.15 下列自定义函数下列自定义函数ntoc()的功能是将一个的功能是将一个09之间的阿拉伯数字转换为一个之间的阿拉伯数字转换为一个“零零九九”之间的中之间的中文字符。例如,文字符。例如,ntoc(7)的返回值为的返回值为“七七”。function ntoc parameters pDigit local cString cString=“零一二三四五六七八九零一二三四五六七八九”return substr(cString,pDigit*2+1,2)endfunc2.过程与自定义函数的调用过程与自定义函数的调用 在调用过程或自定义函数时,可以使用在
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Visual FoxPro第5章程序设计基础 FoxPro 章程 设计 基础
限制150内