结构化程序设计讲义.pptx

上传人:夺命阿水 文档编号:363199 上传时间:2023-04-27 格式:PPTX 页数:71 大小:835.37KB
返回 下载 相关 举报
结构化程序设计讲义.pptx_第1页
第1页 / 共71页
结构化程序设计讲义.pptx_第2页
第2页 / 共71页
结构化程序设计讲义.pptx_第3页
第3页 / 共71页
结构化程序设计讲义.pptx_第4页
第4页 / 共71页
结构化程序设计讲义.pptx_第5页
第5页 / 共71页
点击查看更多>>
资源描述

《结构化程序设计讲义.pptx》由会员分享,可在线阅读,更多相关《结构化程序设计讲义.pptx(71页珍藏版)》请在课桌文档上搜索。

1、2023年4月27日星期四,1,结构化程序设计讲义,本章要求:1.掌握VFP程序的建立、修改、运行。2.掌握程序的三种基本结构。3.了解过程和过程文件。本章要点:程序的三种控制结构。学时安排:6学时(理论)+6学时(实践),课程要求,结束,作业,第8章 程序设计基础,8.1 程序文件及其编辑环境 8.2 程序中几种常用命令 8.3 程序的基本控制结构 8.4 过程和用户自定义函数,8.1 程序文件及其编辑环境,在Viusal FoxPro中,程序是由一系列Viusal FoxPro可以理解的命令、函数和操作组成的,这些命令和函数可以在Viusal FoxPro中的命令窗口和以人工方式逐一执行,

2、也可以把它们放在一个程序文件中,以文件的形式来执行。【8.1】假定学号的前四位为入学年份,第5,6位为专业代码.编写命令文件test.prg,分别统计所有学生和2010年入学,专业代码为03的学生选修课程号为101课程的平均成绩.,SET TALK OFFSET DEFAULT TO d:学生管理OPEN DATA 学生管理SELECT AVG(成绩)FROM 成绩 WHERE;课程号=“101”INTO ARRAY m1SELECT AVG(成绩)FROM 成绩 WHERE;课程号=“101”AND LEFT(学号,4)=“2010”;AND SUBS(学号,5,2)=“03”INTO AR

3、RAY m2CLEAR?”所有学生的平均成绩:”font“宋体”,20,m1(1)font“宋体”?”指定学生的平均成绩:”font“宋体”,20,m2(1),font“宋体”CLOSE DATASESET TALK ONRETURN,(1)以命令方式建立、修改程序文件,Modify Command,格式:,功能:,创建、编辑以“程序文件名”为名的程序文件,说明:,1.在编辑窗口输入一条条命令。2.w或关闭窗口存盘、q或者放弃存盘3.程序文件的扩展名为.prg,可以省略。,(2)以菜单方式建立、修改程序文件,文件,新建,文件,打开,已有的程序文件,.prg,8.1.1 程序文件的建立和运行,1

4、程序文件的建立,(2)命令方式,(1)菜单方式,程序,运行,Do,格式:,功能:,运行程序文件,程序文件建立后,可以用多种方式、多次执行它。下面是两种常用的方式。,选中,运行,2.程序文件的运行、调用,8.1.2 Visual FoxPro编程特点,1.变量不区分大小写,建议的变量命名约定,2.变量不需预先声明,当把一个值保存到某一变量而该变量原先不存在时,Visual FoxPro系统会隐含地声明它,并有初始值存在。用户在变量里放什么数据,变量就是什么类型。,3.命令分行,程序中每条命令都以回车键结尾,一行只能写一条命令。若需分行书写,可以使用分号“;”表示续行。,4.添加注释,Visual

5、 FoxPro 系统对整行注释和行中部分注释有不同的格式。整行注释使用“*”引导,行中部分注释使用“&”引导。,8.2 程序中几种常用命令,8.2.1 基本输入命令,1.Wait命令,暂停程序的运行,直到用户输入一个字符,也可用于输出一条提示信息WAIT TO WINDOW AT,NOWAIT CLEAR NOCLEAR TIMEOUT,保存键入的字符,省略TO子句不保存,省略则显示“按任意键继续.,不等待用户输入,关闭提示窗口,不关闭提示窗口,直到下一个WAIT命令自动关闭,WINDOW子句使屏幕出现一个WAIT提示窗口,内容由确定,位置有AT子句指定.省略AT子句则出现在屏幕右上角,TIM

6、EOUT子句设定等待时间(以秒为单位),说明:若指定WINDOWS子句,则会出现一个WAIT提示窗口,用以显示提示信息.提示窗口在主窗口的右上角,也可以用AT短语指定其在主窗口中的位置.若同时选用NOWAIT短语和WINDOWS子句,系统将不等待用户按键,直接往下执行.若选用NOCLEAR短语,则不关闭提示窗口,直到用户执行下一条WAIT WINDOWS命令或WAIT CLEAR命令为止.TIMEOUT子名用来设定等待时间(秒数)。,例如执行:Wait“欢迎使用!”Windows,在屏幕右上角弹出一个窗口,显示“欢迎使用!”,按任意键后窗口消失。,2.Accept命令,Accept To,格式

7、:,功能:,在程序执行过程中,暂停执行,等待用户从键盘输入字符串。当用户以回车键结束输入完数据后,系统将用户输入的内容作为字符串赋值给指定内存变量。然后继续往下执行程序。,说明:,(1)如果选用提示信息,系统会在屏幕上显示提示信息;(2)输入的数据只能是字符型数据,并且不用定界符;(3)如果用户什么数据都不输,就按下回车键,系统认为是输入了一个空串,自动会把空串赋给指定的内存变量中。,【例8.2】编程从键盘输入某数据库的文件名,要求打开该数据库并显示其内容.程序文件名为 PROG1.PRG。SET TALK OFFSte default to d:学生管理CLEARACCEPT 请输入数据库名

8、:TO AAAOPEN DATABASE&AAAACCEPT 请输入表名:TO BBBUSE&BBBbrowseUSESET TALK ONRETURN,Do prog1请输入数据库名:学生管理请输入表名:学生,Use 人才档案 Exclusive Accept 请输入编号:To bh Locate For 编号=bh?编号,姓名 Use,set default to d:人才管理 open data 人才管理 Accept 请输入职称:to zc select*from 专业特长;where 职称=zc,【例8.3】输入姓名,在人才档案表中查询某编号对应的姓名,【例8.4】编写程序,浏览专业

9、特长表中不同职称的记录集。,Do 8.4请输入职称:教授,Do 8.3请输入编号:sh01001Sh01001 金银桥,输入字符串时不加定界符,3.Input命令,Input To,格式:,功能:,(1)如果选用,那么系统会首先显示该提示信息的值,作为提示信息。(2)输入的数据可以是常量、变量,也可以是一般的表达式。但不能不输入任何内容直接按回车键。(3)输入字符串是必须加定界符“”,输入逻辑型常量要用圆点定界符(如.T.,.F.),输入日期时间型常量是要用大括号(如 2012-03-01)。,说明:,等待用户从键盘输入数据,用户可以输入任意合法的表达式。当以回车键结束输入时,系统将表达式的值

10、存入指定的内存变量,程序继续运行。,【例8.5】编写命令文件test1.prg,查找指定日期 以后出生的学生 SET DEFAULT TO d:学生管理OPEN DATABASE 学生管理INPUT 输入日期:TO mrqSELECT 学号,姓名,出生日期 FROM 学生;WHERE 出生日期 mrq;NOWAITCLOSE DATABASERETURN,Do test1输入日期:1993-01-01,ClearInput“长方形一边的长为:”TO AInput“长方形另一边的长为:”TO BS=A*B?长方形的面积为:,S,【例8.6】从键盘输入两个任意正数,编程求以两数为边长的长方形面积。

11、程序文件名为8.6.prg,在命令窗口中输入:Modify Command 8.6,Do 8.6长方形一边的长为:5长方形另一边的长为:6运行结果:长方形的面积为:30,屏幕显示,键盘输入,Set default to d:人才管理Input 请输入要删除的人的出生日期:to CsrqDelete from 人才档案 where 出生日期=CsrqSelect 人才档案 BrowClose data,【例8.7】编写程序,将人才档案表中指定的出生日期的记录逻辑删除。,请输入要删除的人的出生日期:1969-02-03,4.格式输入语句,格式:,Say get Say get.Read,功能:,在

12、指定的行、列位置输入一个常量,当执行到Read语句时,将常量赋值给指定的变量。,说明:,1、多个语句可以配置一个Read语句。但是中间不能有别的语句。2、Get后面的变量要先赋值。,ClearSet default to d:人才管理Use 专业特长 ExclusiveAccept 请输入职称:to zcLocate All For 职称=zc2,10 Say 编号 Get 编号 3,10 Say 专业 Get 专业4,10 Say 毕业学校 Get 毕业学校5,10 Say 专业年限 Get 专业年限6,10 Say“职称”Get 职称ReadClose data,【例8.8】编写程序,在指

13、定的位置显示修改“专业特长”表中指定职称的记录。,Say Picture,格式:,功能:,(1)在指定的行、列输出表达式的值。(2)格式描述符用来限定数据输出的类型、长度及格式。,8.2.2 基本输出语句,1.格式输出语句,常用格式描述符的功能,Use 人才档案 Exclusive Accept 请输入编号:to bh Locat For 编号=bh 13,20 Say 编号 Picture!14,20 Say 姓名 Picture xxxxxxxxx Use,【例8.9】输入编号,在人才档案表中查询某编号对应的姓名。,字符转换成大写,任意字符,x1=Messagebox(您真的要退出系统吗?

14、,4+16+0,退出系统)If x1=6 ReturnEndif,Messagebox(,),格式:,功能:,在屏幕上弹出一个指定格式的对话框。,说明:,对话框类型是由“按钮个数+显示图标+默认按钮”组成。,提示信息,对话框标题,提示信息,对话框标题,对话框类型,按钮个数,显示图标,默认按钮,2.对话框MessageBox函数,P67,按钮个数代码,显示图标代码,默认焦点按钮的代码,单击对话框按钮的返回值,4+16+0,单击“否”,返回7,返回值送到x1,如果x1=“是”,返回系统,单击“是”,返回6,8.2.3 程序结尾命令,1、程序的末尾可以使用Return命令,能使程序执行结束,并返回到

15、调用它的上级程序继续执行,若无上级程序则返回到命令窗口。2、使用另一条命令为Cancel,它可以中止程序运行,并返回到命令窗口。3、使用Quit命令可以结束程序运行退出Visual FoxPro系统,8.3 程序的基本控制结构,常见的控制结构如下:1顺序结构 顺序结构是在程序执行时,根据程序中语句的书写顺序依次执行的命令序列。Visual FoxPro系统中的大多数命令都可以作为顺序结构中的语句。2分支结构 分支结构是在程序执行时,根据不同的条件,选择执行不同的程序语句,用来解决有选择、有转移的诸多问题。3循环结构 循环结构则能够使某些语句或程序段重复执行若干次。如果某些语句或程序段需要在一个

16、固定的位置上重复操作,使用循环是最好的选择。,8.3.1 顺序结构,顺序结构是一种线性结构。是程序设计中最简单同时也是最基本的结构。它要求顺序地执行每一个基本的加工处理单位。,【例8.10】计算圆的周长和面积。,ClearInput 请输入圆的半径:To r&输入半径c=2*3.14*r&计算圆的周长s=3.14*r*r&计算圆的面积?圆的周长:,c&输出周长?“圆的面积:”,s&输出面积Return,8.3 程序的基本控制结构,分支结构是在程序执行时,根据不同的条件,选择执行不同的程序语句。,If EndIf,格式:,功能:,首先计算条件表达式的值,当条件表达式的值为真时,执行语句序列;否则

17、,执行EndIf后面的第一条语句。,1.简单的条件语句,8.3.2 条件分支结构,ClearInput X=TO xInput Y=TO yIf x/3=Int(x/3)y=y+xEndIf?Y=,y,【例8.11】编写程序:先从键盘接收两个数x和y,然后判断x能否被3整除。如果x能被3整除,那么y的值增加x;否则y的值不变。,If mod(X,3)=0,【例8.12】编写程序:修改“专业特长”表中的数据,把编号为“zj01002”的职称从“副教授”改为“教授”。,ClearUse 专业特长 ExclusiveLocate For 编号=zj01002 If 职称=副教授 Replace 职称

18、 With 教授 EndIfBrowse Last,2.带Else的条件语句,If条件表达式 语句序列1 Else 语句序列2 EndIf,格式:,功能:,该语句首先计算条件表达式的值,当条件表达式的值为真时,执行语句序列1中的命令;否则,执行语句序列2中的命令;执行完命令行序列1或命令行序列2后都将执行EndIf后面的第一条语句。,【例8.13】输入一个姓名,在“学生”表中查找该姓名的学生,如果找到,显示该记录的姓名、性别和出生日期,否则显示“查无此人!”,程序名为test2.prg,SET DEFAULT TO d:学生管理OPEN DATABASE 学生管理USE 学生 IN 0SELE

19、CT 学生ACCEPT“请输入待查学生姓名:”TO NAMELOCATE FOR 姓名=NAMEIF EOF()=.F.?”姓名:”+姓名 FONT“宋体”,20?”性别:”+IIF(性别=.t.,“男”,”女”)FONT“宋体”,20?”出生日期:”+DTOC(出生日期,1)FONT“宋体”,20ELSE?”查无此人!”FONT“宋体”,20ENDIFCLOSE DATABASERETURN,messagebox(“查无此人!”,0+48+0,”例8.13”),语句执行时,依次判断Case后面的条件是否成立。当发现某个Case后面的条件成立时,就执行该Case和下一个Case之间的语句序列,

20、然后执行EndCase后面的语句令。如果所有的条件都不成立,则执行Otherwise与EndCase之间的语句序列,然后转向EndCase后面的语句。,3.多分支语句,Do Case Case条件表达式1 语句序列1 Case条件表达式2 语句序列2 Case条件表达式N 语句序列N Otherwise 语句序列N+1 EndCase,格式:,功能:,不管有几个Case条件成立,只有最先成立的那个Case条件的对应命令序列被执行。如果所有的Case条件都不成立,且没有Otherwise子句,则直接跳出本结构。Do Case 和 EndCase必须配对使用,Do Case 是本结构的入口,End

21、Case是本结构的出口。Do Case和第一个Case子句之间不能插入任何命令。,说明:,Do Case Case条件表达式1 命令行序列1 Case条件表达式2 命令行序列2 Case条件表达式N 命令行序列N Otherwise 命令行序列N+1 EndCase,Input 请输入考试成绩:To x Do Case Case x60?不及格 Case x70?及格 Case x80?中等 Case x90?良好 Otherwise?优秀EndCase,【例8.13】显示当前季节。程序文件如下。,ClearYue=Month(Date()Do Case Case yue4 jj=春 Case

22、 yue7 jj=夏 Case yue10 jj=秋 Otherwise jj=冬EndcaseWait jj Window,从今天的日期里取出月份送到yue,测试表达式的值是否在表达式中,是就返回.T.,【例8.14】假设收入(P)与税率(R)的关系如下表,编程求税金。,0 P 3500R=0.05 3500 P 4500 0.08 4500P 6500 0.1 P6500,ClearInput 请输入收入:To PDo CaseCase P=3500 R=0Case P=4500 R=0.05Case P=6500 R=0.08Otherwise R=0.1EndCaseTax=(p-35

23、00)*r?税金为:+Str(tax),【例8.15】输入一个字符“男”或者“女”到变量“性别”中,再输入一个数值到变量“身高”中。计算:如果性别=“男”并且身高又在180以上,输出“参加篮球比赛”,否则输出“参加足球比赛”。如果性别为“女”并且身高在170以上输出“参加模特大赛”,否则输出“参加健美操比赛”。,Acce 请输入你的性别:To 性别Input 请输入你的身高:To 身高If 性别=男 Do Case Case 身高=180?参加篮球比赛!Case 身高 180?参加足球比赛!EndCaseElse,Do Case Case 身高=170?参加模特比赛!Case 身高 170?参

24、加健美操比赛!EndCaseEndIfReturn,用Case包含If语句怎么写?,b,c,a,解题步骤:交换a、b的值 交换a、c的值 交换b、c的值,【例8.16】编写程序,对任给的三个数,按从小到大的顺序输出。,输入a,b,c的值,开始,Input 请输入第1个数:to aInput 请输入第2个数:to bInput 请输入第3个数:to c?排序前,a,b,cIf a b t=a a=b b=tEndifIf a c t=a,a=c c=tEndifIf b c t=b b=c c=tEndif?“排序后,a,b,c,a,b排序,a,c排序,B,c排序,8.4 循环结构程序,循环结构

25、也称为重复结构,是指程序在执行的过程中,程序中的某段代码被重复执行若干次。被重复执行的代码段,通常称之为循环体。,1.条件循环,根据条件表达式的值决定循环体内语句的执行次数。,格式1:,功能:,Do While EndDo,首先计算条件表达式的值,当条件表达式的值为真时,执行循环;否则,执行EndDo 后面的第一条命令。如果第一次判断条件为假,一次也不循环。,【例8.17】统计“人才档案”表中工资超过7000元的人数。,ClearSet default to d:人才管理Use 人才档案 ExclusiveGo TopRc=0Do While Eof()=.f.If 工资现状7000 rc=r

26、c+1 EndIf SkipEndDo2,30 Say 工资在7000元以上的人 2,60 Say rcUse,ClearSet default to d:人才管理Use 人才档案 ExclusiveLocate for 工资7000Rc=0Do While Eof()=.f.rc=rc+1 continueEndDo?工资在7000元以上的人“,rcUse,ClearS=0I=1Do While I=100 S=S+I I=I+1EndDo?123100,S,【例8.18】编程求123100之和。,一个循环结构一般应具备如下的条件:(1)循环的初始条件:一般为给循环控制变量赋初值;(2)循环

27、头:循环语句的起始,设置、判断循环条件;(3)循环尾:循环语句的结尾;(4)循环体:位于循环头和循环尾之间、循环控制重复执行的语句序列。,求s=1+3+5+7-+51求 s=1*2*3*-*100(s=100!)求 s=1!+2!+3!+n!求 s=1!+2!+3!+n!,Do While Loop Exit EndDo,格式2:,功能:,Loop语句:强行返回到循环开始语句。Exit语句:强行跳出循环,接着执行EndDo后的语句,ClearJi=0Ou=0Do while.t.Input”输入一个整数:”To a If a=0 Exit Else If mod(a,2)=0 ou=ou+1

28、endif,【例8.19】输入任意整数,分别统计偶数和奇数的个数,输入0为结束程序。,If mod(a,2)0 ji=ji+1 Endif EndifEnddo?”奇数的个数为:”,ji?”偶数的个数为:”,ouReturn,Flag=0I=2Input 请输入一个大于2的整数 To N Do While i0 I=I+1 Loop Else Flag=1 Exit EndIfEndDo,【例8.20】验证一个大于2的整数n是否为素数。,一个数除了1和它本身之外,没有其他整数能整除的整数为素数。判别一个大于2的整数n是否为素数可以:用2,3,n-1作除数除n,只要有一个能整除n,n就不是素数。

29、否则,n为素数。,If Flag=0?Str(n,3)+是素数Else?Str(n,3)+不是素数Endif,If n/i=int(n/i),【例9.21】全班50个同学报名参加运动会。如果是男同学并且身高又在180以上,输出“参加篮球比赛”,否则输出“参加足球比赛”。如果是女同学并且身高在170以上输出“参加模特大赛”,否则输出“参加健美操比赛”。最后统计参加各项比赛的人数。,else?参加足球比赛!B=B+1 EndifElse if 身高=170?参加模特比赛!C=C+1 else?参加健美操比赛!D=D+1 EndifEndIfSUM=SUM-1EndDo?参加篮球比赛的人数,A?参加

30、足球比赛的人数,B?参加模特比赛的人数,C?参加健美操比赛的人数,D,A=0B=0C=0D=0Sum=50Do While SUM 0Acce 请输入你的性别 TO 性别Input 请输入你的身高 TO 身高If 性别=男“if 身高=180?参加篮球比赛!A=A+1,2.步长循环,步长循环控制语句,即根据循环变量的初值、终值和步长,决定循环体内语句的执行次数。,For=To Step EndFor|Next,格式:,功能:,首先将初值赋给循环变量,然后判断循环条件是否成立(若步长为正值,循环条件为“循环变量=终值”)。若循环条件成立,则执行循环体,然后循环变量增加一个步长值,并再次判断循环条

31、件是否成立,以确定是否再次执行循环体。若循环条件不成立,则结束该循环语句,执行EndFor后面的语句。,1、省略Step 步长,则步长为默认值1;2、初值、终值和步长都可以是数值表达式,当初值小于终值,步长必须为正,当初值大于终值,步长必须为负才可以循环;3、可以在循环体内改变循环变量的值,但会改变循环执行次数;4、Exit和Loop命令可以出现在循环体内。执行Loop命令时,结束本次循环,循环变量增加一个步长值,返回For循环头判断循环条件是否成立。执行Exit命令时,程序跳出循环,执行循环尾后面的语句,说明:,注意:,1、循环终止的条件是:“循环变量的值超出终值”,而不是循环变量的值等于终

32、值。2、超出的含义:当为正时,检查是否大于 当为负时,检查是否小于 当步长为0 时,循环永不终止。,For=To Step EndFor|Next,For=To Step EndFor|Next,ClearS=1I=1Do While I=100 S=S*I I=I+1EndDo?1*2*3*100,S,【例8.22】编程求1*2*3*100之和。,ClearS=1For i=1 to 100 s=s*IEndFor?1*2*3*100,S,【例8.23】全班50个同学报名参加运动会。如果是男同学并且身高又在180以上,输出“参加篮球比赛”,否则输出“参加足球比赛”。如果是女同学并且身高在17

33、0以上输出“参加模特大赛”,否则输出“参加健美操比赛”。最后统计参加各项比赛的人数。,else?参加健美操比赛!D=D+1 EndifEndIfEndFor?参加篮球比赛的人数,A?参加足球比赛的人数,B?参加模特比赛的人数,C?参加健美操比赛的人数,DReturn,A=0B=0C=0D=0For I=1 TO 50Acce 请输入你的性别 TO 性别Input 请输入你的身高 TO 身高If 性别=男 Do Case if 身高=180?参加篮球比赛!A=A+1 else?参加足球比赛!B=B+1 EndifElse if 身高=170?参加模特比赛!C=C+1,【例8.24】输入任意10个

34、整数,将所有正整数显示出来。,ClearFor i=1 to 10 Input“输入一个整数”To a If a 0?a Else Loop EndifEndFor,在For循环语句中执行Loop语句,将会先修改循环变量的值,然后转向循环语句头部。,3 扫描循环,扫描循环控制语句,即根据表中的当前记录指针决定循环体内语句的执行次数,扫描当前表中满足表中的记录。,Scan For While EndScan,格式:,功能:,执行该语句时,记录指针在当前表的指定范围内自动从上往下依次移到满足条件的记录上,并对每一条记录执行循环体内的命令。,(1)的默认值是All。(2)当指针移到文件尾时,自动退出

35、循环。,说明:,【例8.25】用扫描循环控制语句,统计人才档案数据表中男同学的人数。,clearRc=0Use 人才档案 ExclusiveScan all for 性别=“男”rc=rc+1EndScan?“男同学的人数为,rcUse,【例8.26】用扫描循环控制语句,显示人才档案数据表中年龄大于等于25的记录。,clearUse 人才档案 ExclusiveScan all for year(date()-year(出生日期)=25 display 编号,姓名EndScanUse,练习:下列程序段执行后,输出结果是:,记录号 名称 1 男子排球 2 女子排球 3 男子足球 4 女子足球 5

36、 男乒乓球,Use 运动员表 ExclusiveGo 2Scan Next 4 For Left(名称,2)=“男 If Right(名称,2)=“球 Exit EndifEndscan?名称,男子足球,4.多重循环,如果在一个循环内包含另一个循环结构,则称为多重循环,或循环嵌套,嵌套的层数可以根据需要而定,嵌套一层称为二重循环,嵌套二层称为三重循环。下面是几种常见的二重嵌套形式:,1.For I=.For J=.Next J.Next I,2.FOR I=.DO WHILE.ENDDO.NEXT I,3.DO WHILEL.DO WHILE.ENDDO.enddo,对于循环的嵌套,要注意以下

37、事项:(1)内循环变量与外循环变量不能同名;(2)外循环必须完全包含内循环,不能交叉;(3)不能从循环体外转向循环体内,也不能从外循环转向内循环。,For A For B For C Next C Next BNext A,For AFor BFor C Next B Next ANext C,不能交叉,正确的嵌套,错误的嵌套,【例8.27】分析下面程序的运行结果:,clear For i=1 To 3 For j=5 To 7?I,j Next j Next i Return,1 51 61 72 52 62 73 53 63 7,对于两个具有调用关系的程序文件,常称调用程序为主程序,被调用

38、程序为子程序。子程序的建立和一般命令文件的建立方法相同,都是Modify Command,文件默认的扩展名还是Prg。调用方法是在主程序中用Do命令。,8.4.1 主程序和子程序,Do 子程序文件名,Modify Command 过程文件名,文件格式:,与程序一样,主程序调用:,返回主程序:,Return To Master,建立子程序:,没有可选项,返回到调用处,有可选项,返回到调用的最高一级。,1.子程序的调用和返回,8.4 过程和用户自定义函数,【例8.28】分析下面程序的运行结果:,&MAIN.PRG Clear Do JADo JB Do JC Return,&JA.RPG?*Do

39、JBDo JCReturn,&JB.RPG?#Return,&JC.RPG?*Return To Master,【例8.29】利用子程序计算圆的面积:,*主程序:Do While.T.Clear Wait“是否要计算圆的面积(Y/N)?”To ja If Upper(ja)=“Y”&为“N”时结束程序 Do zcx1.prg Else Exit EndifEnddoReturn,*子程序zcx1:ClearInput 输入圆的半径:to bjS=3.14*bj*2?圆的面积为:,sReturn,2.带参数的子程序调用,调用子程序时参数表中的参数要传送给子程序,子程序也必须设置相应的参数接受语句

40、。Parameters可以完成此项功能,但是必须是子程序的第一条语句。,主程序调用:,子程序接收:,Do,Parameters,各种各类型的常数、有具体值的变量,没有具体指的变量,个数、位置和类型要和主程序的实际参数一样,但是名字可以不一样。,例如:,主程序:Do zcx With“张三”,89,性别子程序:Parameters a,b,c,变量姓名必须是赋过值的,变量没有具体值,【例8.30】利用子程序计算圆的面积:,*主程序:Clear ymj=0&初始化用于接收圆面积的变量Input“请输入圆的半径:“To bj Do zcx2 With bj,ymj&带参数调用子程序7,10 Say

41、圆的面积为:+Str(ymj,10,2)Return,*子程序zcx2:Parameters cj,s S=3.14*cj*2Return,变量bj初始值为0,计算后的面积,函数名(实际参数表),3.自定义函数,自定义函数与子程序的区别在于自定义函数必须返回一个函数值,而子程序则无此限制。,主程序调用格式:,Function Parameters 命令序列Return,如果是单独的程序,就可以省略这一句,如果自定义函数和主程序是一个程序,不能省略。,从表达式返回函数值到主程序,自定义函数格式:,例如:,主程序:?a1(bb)自定义函数:Parameters bb Return bb,【例8.3

42、1】利用自定义函数计算圆的面积:,*主程序:clearInput“请输入圆的半径:“To bj 7,10 Say 圆的面积为:+str(zcx3(bj),10,2)Return,带参数调用自定义函数zcx3,*自定义函数zcx3:Parameters r S=3.14*r*2Return s,调用时bj是半径,返回时,bj是面积,*主程序:clearInput“请输入圆的半径:“To bj 7,10 Say 圆的面积为:+str(zcx3(bj),10,2)Return*自定义函数Function zcx3Parameters r S=3.14*r*2Return s,如果主程序和自定义函数放

43、在一个文件中,那么一定要加上这么一句。,8.4.2 过程文件,多个过程可以保存在一个过程文件中。过程文件打开后,其中的过程能被任何其它程序调用。称为内部过程调用。要调用内部过程,需在主程序中首先打开过程文件,然后再调用过程文件中的过程。,打开过程文件:,调用过程:,关闭过程文件:,Set Procedure To,Do with 参数表,Set Procedure To,1.打开、调用、关闭过程文件,2.过程的建立,1、Procedure 表示一个过程的开始,并命名过程名,过程名必须以字母或下划线开始。为18 个字符;2、过程执行到Return处返回到调用程序或命令窗口。,定义过程:,Proc

44、edure Return To Master Procedure Return,说明:,过程文件可以单独建立成命令文件,也可以放在主程序的后面,【例8.32】有2个文件:程序文件Prog1.Prg是主文件,Pp1.Prg过程文件。,ClearSet Procedure To pp1.prgInput 请从键盘输入一个数:To aInput 请从键盘输入一个数:To bDo P1Do P2Set Procedure To?a=,a,b=,b?a+b=,a+b,a-b=,a-b?a*b=,a*b,a/b=,a/bReturn,*PP1.PRGProcedure P1 C=1 D=2 C=C+D D

45、=D+C?c=,C,d=,DReturn Procedure P2?p2=,200Return,打开pp1.prg过程文件,pp1过程文件放了2个过程P1和P2,关闭PP1.PRG过程文件,【例8.33】编写计算园的面积和周长的程序。,ClearSet Procedure to zcx1N=0Do while.t.Clear10,10 say 请选择以下功能:11,10 say 1-计算圆的面积:12,10 say 2-计算圆的周长:13,10 say 3-退出14,10 say 请输入您的选择:get nRead,Do case case n=1 do proc1&面积Case n=2 do

46、 proc2&周长Case n=3 Exit EndcaseEnddoSet Procedure toReturn,打开过程文件,关闭过程文件,*zcx1Procedure proc1 Clear Input 请输入半径:to bj s=3.14*bj?“圆的面积为:,sWaitReturn Procedure proc2Clear Input 请输入半径:to bj i=2*3.14*bj?圆的周长为:,iWaitReturn,本章小结,Visual FoxPro既是一种数据库管理系统,也是一种程序设计语言。本章介绍了Visual FoxPro陈序设计的基本内容,包括程序的概念、程序的基本结构、多模块程序设计等等。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号