小学教育第三章 VF程序设计基础-课件_第1页
小学教育第三章 VF程序设计基础-课件_第2页
小学教育第三章 VF程序设计基础-课件_第3页
小学教育第三章 VF程序设计基础-课件_第4页
小学教育第三章 VF程序设计基础-课件_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章VisualFoxPro

程序设计基础基本学习目标:1.掌握建立、修改、运行程序的方法2.掌握和使用顺序结构、选择结构和循环结构进阶学习目标:1.灵活运用各种结构进行程序设计2.了解多模块程序结构1第三章VisualFoxPro

程序设计基础基本学习目标3.1程序概述程序:为了完成某项任务而编写的命令序列。程序的本质都是进行数值计算或数据处理,得出有用的信息。程序是完成大型的、复杂的、综合性较强而且需要多次重复执行的任务的最适合方式。VFP同时支持面向过程(OP)和面向对象(OO)的程序设计方法。其中OP是OO的基础。23.1程序概述程序:为了完成某项任务而编写的命令序列。程3.1.1程序设计的步骤建立编辑保存执行调试相关概念:程序代码:以命令形式出现的指令、函数或任何VFP能理解的操作指令。保存程序代码的文件称为命令文件、程序文件或程序。代码的使用:在程序、命令窗口中,以及表单、类、菜单、报表等的事件、过程或方法程序中。33.1.1程序设计的步骤建立相关概念:31.建立程序建立程序:3种方法(1)命令:MODIFYCOMMAND[<盘符>][<路径>]〈文件名〉MODIFYFILE[<盘符>][<路径>]〈文件名〉(2)选择“文件”|“新建”|选择文件类型为“程序”|单击“新建文件”按钮。(3)在项目管理器中选择“代码”选项卡|选择“程序”|单击“新建(N)…”按钮。无论使用哪种方法,VFP都会打开程序窗口,用户就可在其中编制代码,完成程序设计。41.建立程序建立程序:3种方法42.程序的编辑和保存(1)编辑:先打开:3种方法①命令:MODIFYCOMMAND|FILE程序文件名②菜单:“文件”|“打开”|选择文件类型为“程序”|选择需要打开的程序文件|单击“确定”按钮。③项目管理器:选“代码”选项卡,选中需打开的程序文件,再单击“修改(M)”按钮。(2)保存(应随时保存),默认扩展名.PRG。5种方法:①按下Ctrl+S快捷键,存盘但不退出程序窗口。②按下Ctrl+W则存盘退出程序窗口。③选择“文件”|“保存”或“另存为”命令。④单击工具栏上的“保存”按钮。⑤在关闭程序窗口系统询问是否保存时选择是即可保存52.程序的编辑和保存(1)编辑:先打开:3种方法53.执行程序:4法(1)命令:DO[<盘符>][<路径>\]<文件名> 执行程序文件时,将依次执行文件中的命令,直到所有命令执行完毕,或者执行到以下命令: ①CANCEL:终止程序运行,清除所有的私有变量,返回命令窗口; ②RETURN:结束程序执行,返回调用它的上级程序,若无上级程序则 返回命令窗口; ③QUIT:结束程序执行并退出VFP,返回操作系统。(2)菜单:选“程序”|“运行”命令打开“运行”对话框,选择需执行的程序后单击“运行”按钮。(3)项目管理器:在“代码”选项卡中选择需要执行的程序文件再单击“运行(U)”按钮。(4)程序窗口中:按下Ctrl+E或单击工具栏上的“!”运行按钮,也可以右击程序窗口,从快捷菜单中选择“执行XXX.PRG”命令(XXX.PRG表示当前程序窗口中的程序文件名)63.执行程序:4法(1)命令:DO[<盘符>][<3.1.2程序中的常用命令

简单的输入输出

数组与表中数据的传送命令

内存变量与表中记录的传送命令

73.1.2程序中的常用命令71.简单的输入输出命令ACCEPTINPUTWAIT@…SAY…GET\\\TEXT…ENDTEXT81.简单的输入输出命令8(1)ACCEPT命令格式: ACCEPT[<提示信息>]TO<内存变量>

功能: 提示并等待用户输入一个字符串给指定内存变量。注意:该命令只能输入字符型数据,所输入的字符串不需要加定界符。

9(1)ACCEPT命令格式:9【例3-1】打开并显示数据表的内容CLEARACCEPT“请输入数据库名:”TOkmOPENDATABASE&kmACCEPT"请输入表名"TObmUSE&bmLISTUSE10【例3-1】打开并显示数据表的内容CLEAR10(2)INPUT命令格式: INPUT[<提示信息>]TO<内存变量>

功能:用以提示并等待用户输入数据。可以输入字符型、数值型、逻辑型、日期型和日期时间型等类型数据,而且可以是常量、变量、函数或表达式等形式,按回车键结束输入。系统会将用户输入数据(若需要,则先行计算出结果)赋值给指定内存变量。11(2)INPUT命令格式:11【例3-2】输入长方形的长和宽,求面积CLEARINPUT“长方形的长为:”TOchangINPUT“长方形的宽为:”TOkuans=chang*kuan?“长方形的面积为:”,s12【例3-2】输入长方形的长和宽,求面积12(3)WAIT命令格式:WAIT[<提示信息>][TO<内存变量>][WINDOW[AT<行>,<列>]][NOWAIT][CLEAR|NOCLEAR][TIMEOUT<数值表达式>]功能:暂停并显示提示信息,用户按任意键或单击鼠标时才继续执行程序。说明:可选项[TO<内存变量>],将输入的单个字符存入指定的<内存变量>;若用户是按Enter键或单击鼠标,<内存变量>的值为空串。若省略所有可选项,屏幕显示“键入任意键继续……”的默认提示信息。13(3)WAIT命令格式:13【例3-3】按学号查“学生成绩”CLEARUSE学生成绩ACCEPT“请输入待查学生的学号:"TOnIFLEN(n)=0 WAIT“输入无效,结束程序运行!”;

WINDOWTIMEOUT5ELSE LISTFORn=学号ENDIFUSE14【例3-3】按学号查“学生成绩”CLEAR14ACCEPT、WAIT、INPUT比较ACCEPT命令只能接受字符串,不需要定界符,输入完毕按回车键结束WAIT命令只能输入单个字符,也不需定界符,但输入完毕不需按回车键INPUT命令功能最强,可接受数值型、字符型、逻辑型、日期型和日期时间型数据,数据形式可以是常量、变量、函数和表达式,如果是字符串,需要用定界符,输入完毕按回车键结束。15ACCEPT、WAIT、INPUT比较ACCEPT命令只能接(4)定位输入输出命令@<行,列>[SAY<表达式1>][GET<变量名>][DEFAULT<表达式2>]功能:在指定行列位置显示<表达式1>的值,并允许修改<变量名>的值。指定数据起始显示位置需要显示的串需要输入或修改的变量变量的初值说明:①行号和列号都从0开始的十进制整数。②先输出表达式1(背景色以标准型显示),再空一格后接着显示变量值(背景色以增强型显示),无SAY子句则从指定位置显示变量值。③变量要有初值(可用DEFAULT指定)其类型在编辑期间不能改变,字符型的宽度和数值型的小数位数也不可更改。④GET子句必须由READ子句激活后才能编辑GET变量值。直到光标移出由这些GET变量组成的区域时READ命令才算执行结束。16(4)定位输入输出命令@<行,列>[SAY<表达式1CLEARUSE学生成绩@2,5SAY"待修改的记录号:"GETJLHDEFA1READGOJLHSCATTERMEMV&&将记录数据导出到与字段变量同名的一组内存变量中@4,5SAY"学号:"GETM.学号@6,5SAY"高数:"GETM.高数@8,5SAY"英语:"GETM.英语@10,5SAY"计算机:"GETM.计算机READ@14,5SAY"保存修改?(Y/N):"GETOKDEFA"y"READIFUPPER(OK)=“Y" GATHERMEMV @16,5SAY"存盘完毕!"ELSE @16,5SAY"你放弃了修改。"ENDIFUSE【例3-4】修改“学生成绩”记录17CLEAR【例3-4】修改“学生成绩”记录17(3)文本输出命令\、\\①\或\\命令格式:<\>|<\\>文本串功能:\:先换行,再原样输出文本串中的所有字符。\\:不换行直接输出。若文本串中有需要计算的表达式,可先用命令SETTEXTMERGEON设置文本的合并计算,然后用一对<<>>将要计算的表达式括起来。这样,在输出到<<>>部分时,先计算出其中的表达式的值,再将该值和剩余文本串输出来。如:SETTEXTMERGEON\今天是<<month(date())>>月<<day(date())>>日&&若今天是9月5日则会输出“今天是9月5日”的文本。18(3)文本输出命令\、\\①\或\\命令18②text…endtext命令格式:TEXT 文本行1 文本行2 文本行3 …ENDTEXT功能:先换行,然后将text…endtext之间的所有文本行原样输出。19②text…endtext命令192.数组与表中数据的传送命令(1)将表中数据传送给数组格式:COPYTOARRAY<数组名>[FIELDS<字段名表>|FIELDSLIKE<通配符>|FIELDSEXCEPT<通配符>][范围子句][条件子句][NOOPTIMIZE]功能:将当前工作区中打开的表中的数据传送到一维/二维数组中。一维数组仅存一条记录,二维数组可存多条记录。202.数组与表中数据的传送命令(1)将表中数据传送给数组20数组与表中数据的传送说明:如右图所示:表中的备注字段不会存入数组如:COPYTOARRAYaTempFIELDSLIKEa*,p*&&把表中符合字段首字符为a或p的记录存入数组aTemp中。如:COPYTOARRAYaMyArray;

FIELDSLIKEA*,P*EXCEPTPARTNO*&&把表中符合字段首字符为A或P但以PARTNO开头的字段

除外的记录数据存入数组aMyArray中说明21数组与表中数据的传送说明:如右图所示:表中的备注字段不会存入如:USE学生成绩 &&打开“学生成绩”表DIMENSIONa(3,4)&&定义3行4列的二维数组COPYNEXT3TOARRAYa

&&把表中头3条记录存入二维数组a中。DISPLAYMEMORYLIKEa

&&显示数组中各元素信息,结果如图所示:

22如:USE学生成绩 &&打开“学生成绩”表22(2)将数组中的数据添加到数据表中格式:APPENDFROMARRAY<数组名>[FOR条件];[FIELDS<字段列表>|FIELDSLIKE<通配符>|FIELDSEXCEPT<通配符>]功能:与COPYTOARRAY刚好相反,是将数组中符合条件的数据追加到当前工作区中打开的数据表中。说明:①若数组列数多,则忽略多余列。反之,若数组列数少,则多出的字段被置为相应类型的空值。如字符型的则置为指定宽度的空格串。②忽略数组中的备注型、通用型数据。③若数组中某列的值与相应字段的类型不匹配,则对应字段也被置为相应类型的空值。④二维数组中有多少行,则在表中追加相应行数的记录。若是一维数组,仅追加一行,具体参照二维数组中的一行来处理。23(2)将数组中的数据添加到数据表中说明:23如:DIMENSIONa(4)a=60a(1)="2000130205"USE学生成绩&&打开“学生成绩”表APPENDFROMARRAYaUSE该段代码将在“学生成绩”表中追加一条新记录,其学号、高数、英语、计算机字段的值分别为"2000130205",60,60,60。24如:该段代码将在“学生成绩”表中追加一条新记录,其学号、高数3.内存变量与表中记录的传送命令(1)将当前记录传送到数组或内存变量中格式:SCATTER[FIELDS<字段名表>][TO<数组名>︱MEMVAR][BLANK]功能:与COPYTOARRAY功能相似。用来将数据表中当前记录的内容导出到数组或者与字段变量同名的内存变量中。253.内存变量与表中记录的传送命令(1)将当前记录传送到数组或说明①当使用TO<数组名>子句时,相当于COPYTOARRAY到一维数组中。但不同的是当数组列数少于表中字段数时,会自动扩大数组到适合大小。②当使用MEMVAR子句时,将数据表中当前记录的内容导出到与字段变量同名的一组内存变量中。若这些同名的内存变量不存在,则自动创建这组变量。若同时还有BLANK子句,则只创建这组变量,并不传送数据。③忽略表中的备注型、通用型字段数据。26说明①当使用TO<数组名>子句时,相当于COPYTO(2)用数组或内存变量值替换当前记录格式:GATHER[FROM<数组名>]︱[MEMVAR]|NAME<对象名>[FIELDS<字段列表>|FIELDSLIKE<通配符>|FIELDSEXCEPT<通配符>][MEMO]功能:与SCATTER命令的传送方向刚好相反,是以数组或指定内存变量中的数据替换当前工作区里打开的数据表中的当前记录。27(2)用数组或内存变量值替换当前记录27说明:①若选用FROM<数组名>子句,则与APPENDFROMARRAY从一维数组中添加记录类似,只是此处是替换当前记录而不是追加记录。当数组列数大于表中字段数,则忽略多余的元素。反之,表中多出的字段的值不受影响。②若选用MEMV子句,则使用同名的内存变量值来替换表中相应的字段值。③若需要替换表中的备注字段值,可加上MEMO子句,但是不能替换通用字段值。④若选用NAME<对象名>子句,则可用指定对象中的同名属性值来替换表中当前记录相应的字段值。28说明:28USE学生成绩&&打开“学生成绩”表SCATTERMEMVBLANKM.学号="2000130209"STORE70TOM.高数,M.英语,M.计算机APPENDBLANKGATHERMEMVUSE在“学生成绩”表追加一条新记录,其学号、高数、英语、计算机字段值分别为"2000130209",70,70,7029USE学生成绩&&打开“学生成绩3.1.3系统运行环境的命令设置(1)SETDEFAUTTO[<路径字符串>]

&&设置默认搜索目录搜索顺序:I.当前目录,II.命令指定的目录,III.系统默认目录。若都找不到,才报告出错信息。(2)SETCENTURYON|OFF设置D、T型“年”的显示位数。默认OFF,2位;ON,4位。(3)SETFIELDSTO[<字段列表>]|[ALL]|[ALLLIKE|EXCEPT<通配符>] &&设置字段表(投影),选取用户关心的字段,不在<字段列表>中的字段数据不显示。用SETFIELDSOFF恢复所有字段。(4)SETSAFETYON|OFF&&设置安全操作提示若设为ON,将同名新文件覆盖旧文件时会询问是否覆盖,此时选择否可不覆盖,否则覆盖;用ZAP命令彻底删除表中的所有记录时也会询问是否彻底删除表中的所有记录,选择否可不删除,否则删除。若设为OFF,则遇到上面两种情况都不提示而直接覆盖或删除。默认为ON。303.1.3系统运行环境的命令设置(1)SETDEF(5)SETTALKON|OFF功能:打开或关闭对话开关,默认为ON。若设为ON,允许把对话结果发送到VFP主窗口、系统信息窗口、图形状态栏或用户自定义窗口中。若先为OFF后再改为ON,那么对话结果将传送到发出SETTALKOFF命令之前的输出位置。若设为OFF:阻止把对话结果发送到VFP主窗口、系统信息窗口、图形状态栏或用户自定义窗口中31313.2程序的基本结构1.顺序结构:按语句的书写顺序依次执行。VFP中的大多数命令都可以作为顺序结构中的语句。2.分支结构:根据不同的条件,选择执行不同的程序语句,用来解决有选择、有转移的诸多问题的控制结构。3.循环结构:使某些语句或程序段重复执行若干次。如果某些语句或程序段需要在一个固定的位置上重复操作,使用循环是最好的选择。4.过程结构:在许多应用程序中,有一些程序段需要反复执行多次,这些程序段不在一个固定的位置上,而是分散在程序的许多位置上重复执行,可将其与嵌入它的程序分开,形成独立的程序序列,待使用时再调入程序中,以实现不同位置上的重复操作。这样做增强了程序的可读性和模块化。我们称这种具有独立功能而且可以被其它程序调用的程序序列为过程。323.2程序的基本结构1.顺序结构:按语句的书写顺序依次执3.2.1分支结构分支结构形式有三种单向分支双向分支多向分支。333.2.1分支结构分支结构形式有三种331.单向分支:有条件执行某一操作。(1)单向分支语句:IF〈条件表达式〉 〈语句序列〉ENDIF(2)执行过程:第一步:计算〈条件表达式〉的值。第二步:决定是否执行〈语句序列〉。若该值为真,则执行〈语句序列〉;否则,不执行。第三步:执行ENDIF后面的第一条命令。341.单向分支:有条件执行某一操作。(1)单向分支语句:(2)【例3-5】求一元二次方程ax2+bx+c=0的实根。INPUTTOaINPUTTObINPUTTOcz=b^2-4*a*cIFz>=0 x1=(-b+SQRT(z))/(2*a) x2=(-b-SQRT(z))/(2*a) ?x1,x2ENDIF35【例3-5】求一元二次方程ax2+bx+c=0的实根。352.双向分支:从两个分支中选择一个执行。(1)语句格式:IF〈条件表达式〉 〈语句序列1〉ELSE 〈语句序列2〉ENDIF(2)执行过程:第一步:计算〈条件表达式〉的值。第二步:决定执行哪个操作。当该值为真时,执行〈语句序列1〉中的命令;否则,执行〈语句序列2〉中的命令。第三步:执行ENDIF后面的第一条命令。362.双向分支:从两个分支中选择一个执行。(1)语句格式:(2【例3-6】编写一密码校验程序(假设密码为ABC)CLEARACCEPT“请输入您的密码:”TOmmIFmm=”ABC” CLEAR ?”欢迎使用本系统!”ELSE WAIT”密码错误!”ENDIF37【例3-6】编写一密码校验程序(假设密码为ABC)373.多向分支:从多个分支中选择

一个执行(1)语句格式:DOCASE CASE〈条件表达式1〉 <语句序列1> CASE〈条件表达式2〉 <语句序列2> …… CASE〈条件表达式n〉 〈语句序列n〉 [OTHERWISE 〈语句序列n+1〉]ENDCASE383.多向分支:从多个分支中选择

一个执行(1)语句格式:3(2)执行过程:第一步:计算〈条件表达式1〉的值。第二步:决定下一步的操作。若该值为真,执行〈语句序列1〉,转第2n+2步,否则执行第三步的操作。第三步:计算〈条件表达式2〉的值。第四步:决定下一步的操作。若该值为真,执行〈语句序列2〉,转第2n+2步,否则执行第五步的操作。第五步:计算〈条件表达式3〉的值。第六步:决定下一步的操作。若该值为真,执行〈语句序列3〉,转第2n+2步,否则执行第七步的操作。……第2n-1步:计算〈条件表达式n〉的值。第2n步:决定下一步的操作。若该值为真,执行〈语句序列n〉,转第2n+2步,否则执行第2n+1步的操作。第2n+1步:若有OTHERWISE子句则执行〈语句序列n+1〉。第2n+2步:执行ENDCASE后的第一条命令。39(2)执行过程:39CLEARINPUT“请输入收入:”TOpDOCASE CASEp<800 r=0 CASEp<2000 r=0.05 CASEp<5000 r=0.08 OTHERWISE r=0.1ENDCASETax=p*r?”税金为:”,taxRETURN【例3-7】如表5-1,编程求税金。40CLEAR【例3-7】如表5-1,编程求税金。404.使用分支语句的注意事项(1)IF…ENDIF和DOCASE…ENDCASE必须配对使用,DOCASE与第一个CASE〈条件表达式〉之间不应有任何命令。(2)〈条件表达式〉可以是各种表达式或函数的组合,其值必须是逻辑值。(3)〈语句序列〉可以由一个或多个命令组成,也可以是条件控制语句和循环控制语句组成的嵌套结构。(4)DOCASE…ENDCASE命令根据给出的n个〈条件表达式〉的值,选择n+1个〈语句序列〉中的一个执行。每次最多只能执行一个〈语句序列〉。在多个CASE项的〈条件表达式〉值为真时,只执行第一个〈条件表达式〉值为真的〈语句序列〉。当所有CASE中〈条件表达式〉的值都是假时,如果有OTHERWISE项,则执行〈语句序列n+1〉,否则一个分支也不执行。414.使用分支语句的注意事项(1)IF…ENDIF和DOC3.2.2循环结构循环结构有三种语句:DOWHILEFORSCAN423.2.2循环结构循环结构有三种语句:421.DOWHILE循环DOWHILE<条件表达式> <语句序列1> [LOOP] <语句序列2> [EXIT] <语句序列3>ENDDO执行过程:参阅图5-6第一步:求解循环头DOWHILE后的<条件表达式>,若值为.T.,则依次执行循环体中的语句,否则转第五步。循环体为位于DOWHILE和ENDDO之间的语句序列。第二步:循环体执行过程中,若执行了LOOP语句,则结束本次循环,转到第一步。第三步:循环体执行过程中,若执行了EXIT语句,则强行跳出循环,转到第五步。第四步:若循环体中所有语句均已经执行,转第一步。第五步:本循环语句执行结束,转去执行ENDDO之后的语句。

431.DOWHILE循环DOWHILE<条件表【例3-8】用DOWHILE循环将学生档案表中“张三”之前(含“张三”)的所有学生的数据显示出来。Clearuse学生档案dowhile.not.eof() DISP if姓名<>"张三" skip loop endif exitenddouseRETURN44【例3-8】用DOWHILE循环将学生档案表中“张三”之前FOR循环变量=初值TO终值[STEP步长] <语句序列1>

[LOOP]

<语句序列2>

[EXIT]

<语句序列3>

ENDFOR|NEXT2.FOR循环执行过程:参阅图5-7。第一步:将初值赋给循环变量。第二步:判断循环变量的值是否超过终值。超过的含义是:若步长大于0,则循环变量大于终值即为超过终值;若步长小于0,则循环变量小于终值就是超过。根据判断的结果决定本结构的是否再执行。若未超过,则执行循环体(为FOR到与之配对的ENDFOR或NEXT之间的所有语句。若超过,转第六步。第三步:若执行LOOP命令,结束本次循环,循环变量增加一个步长值,转第二步。若省略STEP<步长>,则〈步长〉为默认值1。第四步:若执行EXIT命令,转第六步。第五步:若循环体中所有语句均已经执行,转第二步。第六步:结束FOR循环,执行其后的语句。

45FOR循环变量=初值TO终值[STEP步长CLEARs=1fh=1FORi=2TO100 s=s+i*fh fh=-1*fhENDFOR?”1+2-3+……+100=”,sRETURN【例3-9】编程求1+2-3+4-5+……-99+100之和。46CLEAR【例3-9】46CLEARINPUT“请从键盘输入一个数:”TOxSTORExTOmax,minFORi=2TO10 INPUT“请从键盘输入一个数:”TOx IFmax<x max=x ENDIF IFmin>x min=x ENDIFENDFOR?“最大值为:”,max?“最小值为:”,minRETURN【例3-10】从键盘输入10个数,编程找出其中的最大值和最小值47CLEAR【例3-10】473.“指针”型循环:SCAN…ENDSCANSCAN[<范围>][FOR<条件表达式1>| [WHILE<条件表达式2>]

] <语句序列>ENDSCAN功能:在指定的范围内,用数据记录指针来控制循环次数。执行语句时,首先判断函数EOF()的值,若其值为“真”,则结束循环,否则,结合<条件表达式1>或<条件表达式2>,执行〈语句序列〉(满足条件时执行);然后,记录指针移到指定的范围和条件内的下一条记录,重新判断函数EOF()的值,直到函数EOF()的值为真时结束循环。483.“指针”型循环:SCAN…ENDSCANSCAN[<CLEARUSE学生档案SCANFORNOT是否贷款 ?姓名,出生地ENDSCANUSERETURN【例3-11】输出“学生档案”表中所有未贷款学生的姓名和出生地。49CLEAR【例3-11】输出“学生档案”表中所有未贷款学生的4.使用循环语句的说明(1)DOWHILE…ENDDO、FOR…ENDFOR、 SCAN…ENDSCAN须配对使用。(2)〈语句序列〉可以是任何VFP命令或语句,若为循环语句则构成多重循环。(3)〈循环变量〉应是数值型的内存变量或数组元素。(4)EXIT和LOOP命令嵌入在循环体内,可以出现在〈语句序列〉的任意位置,用以改变循环次数,但是不能单独使用。(5)EXIT的功能是跳出循环,转去执行ENDDO、ENDFOR、ENDSCAN后面的第一条命令(6)LOOP的功能是转回到循环的开始处,重新对“条件”进行判断,相当于执行了一次ENDDO、ENDFOR、ENDSCAN命令,它可以改变〈语句序列〉中部分命令的执行次数。504.使用循环语句的说明(1)DOWHILE…ENDDO、F3.2.3结构的嵌套应用顺序、分支和循环等结构可以相互嵌套,但不允许交叉,必须保证下一个嵌套要完整地包含在上一个的结构体内。正确的嵌套关系如:DOWHILE<条件表达式1> <语句序列11> FOR<循环变量>=<初值>TO<终值>[STEP<步长>] <语句序列21> SCAN[范围][FOR|WHILE<条件表达式3>] <语句序列3> ENDSCAN <语句行序列22> ENDFOR <语句行序列12>ENDDO513.2.3结构的嵌套应用顺序、分支和循环等结构可【例3-12】用多重循环编程输出下三角形乘法口诀表52【例3-12】用多重循环编程输出下三角形乘法口诀表52【例3-12】程序:CLEARFORi=1TO9j=1DOWHILEj<=i k=i*j ??STR(j,1)+"*"+STR(i,1)+"="+STR(k,2)+"" j=j+1ENDDO?ENDFORRETURN53【例3-12】程序:533.3自定义函数和过程在程序设计中,常把完成一个功能的程序编写成一个单元,以便在其他程序中使用该功能时调用该程序。这种为完成一个特定功能而编写的程序称为自定义函数或过程。函数的特点:有返回值过程的特点:忽略返回值,重视处理流程543.3自定义函数和过程在程序设计中,常把完成一个功能的程3.3.1自定义函数VisualFoxPro8虽然提供了三百多种函数,但不可能完全满足用户的各种需求,为了满足某些特殊需要,VisualFoxPro允许用户根据需要编写一个专用函数,这就是自定义函数。自定义函数的语法如下:FUNCTION函数名 PARAMETERS参数表 语句序列 RETURN返回值ENDFUNC定义函数名称,其他程序要通过这个名称来调用这个函数。

定义形式参数,用来接收主调程序传递过来的数据(实参)。若无需接收参数,此句可省略。将处理结果值带回主调程序,无此语句将带回.T.“FUNCTION函数名”表示函数的开始,缺省时文件名即为函数名。“ENDFUNC”表示函数的结束,缺省时在遇到下一个Function或者文件结束时结束。语句序列是用户为完成应用需要而编写的代码。

553.3.1自定义函数VisualFoxPro8虽然提供CLEARINPUT“x=”TOx?x,”的阶乘为:”,jc(x)FUNCTIONjc

PARAMETERSn y=1 FORi=1TOn y=y*i ENDFOR RETURNyENDFUNC【例3-13】将计算阶乘的程序写成自定义函数并调用。56CLEAR【例3-13】将计算阶乘的程序写成自定义函数并调用3.3.2 过程过程的实现和函数基本相同,一般无返回值。若需要,可以通过PARAMETERS语句返回。过程定义的语法如下:PROCEDURE过程名 PARAMETERS参数表 语句序列ENDPROC定义过程名称,其他程序要通过这个名称来调用这个过程。

定义形式参数,用来接收主调程序传递过来的数据(实参),并可将处理结果值带回主调程序。若无需接收参数,此句可省略。“PROCEDURE过程名”表示过程的开始,缺省时文件名即为过程名。“ENDPROC”表示过程的结束,缺省时在遇到下一个Function、PROCEDURE或者文件结束时结束。语句序列是用户为完成应用需要而编写的代码。

过程调用格式:DO过程名[WITH参数表]如果没有参数,可省略[WITH参数表]573.3.2 过程过程的实现和函数基本相同,一般无返回值。若需【例3-14】实现一个字符串输出的过程。

CLEARDOssPROCEDUREss ?"欢迎使用VFP8系统!"ENDPROC【例5-15】实现一个传参求累加和的过程。CLEARINPUT"输入一个数"TOxDOaddouWITHxPROCEDUREaddou PARAMETERSx sum=0 F

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论