《vf05第五章 结构化程序设计课件.ppt》由会员分享,可在线阅读,更多相关《vf05第五章 结构化程序设计课件.ppt(34页珍藏版)》请在三一办公上搜索。
1、1,第五章结构化程序设计,2,第一节 程序文件,一、Visual FoxPro程序的几点说明 1注释语句【格式1】* 【格式2】& 【功能】增强程序文件的易读性2对话开关语句【格式】SET TALK OFF|ON【功能】关闭或打开命令执行时的对话开关3命令的分行 Visual FoxPro程序是命令行的序列,每个命令都以回车键结束,一行只能写一条命令;若一条命令太长,一行写不下,也可分行书写,并在分行处加上续行符“;”,再按回车键。,3,二、程序文件的建立、修改与执行,1建立或修改程序文件 1)命令方式: MODIFY COMMAND程序文件名 2)菜单方式: 打开“文件”菜单,选择“新建”;
2、在“新建”窗口,选择“程序”,再选择“新建文件”,4,3)项目管理器: 选定项目管理器“代码”选项卡中的“程序”项,选择“新建”命令。2保存程序文件 程序输入、编辑完毕,单击【文件】|【保存】菜单项,或按Ctrl+W复合键,在“另存为”对话框中指定程序文件的存放位置和文件名,并单击“保存”按钮保存程序文件并退出文本编辑器。程序文件的默认扩展名是.PRG。,5,3执行程序文件程序文件建立后,可以用多种方式、多次执行它。 下面是两种常用的方式。 1)菜单方式 单击【程序】【运行】菜单项,打开“运行”对话框; 从文件列表框中选择要运行的程序文件,并单击“运行”命令按钮,启动运行该程序文件 2)命令方
3、式 【格式】DO 【功能】执行指定、下的程序文件 当程序文件被执行时,文件中包含的命令将被依次执行,直到所有命令被执行完毕。,6,第二节程序的基本结构,由顺序、分支、循环三种基本结构构成。(1)顺序结构,如图6-1所示,该结构先执行A操作,再执行B操作。(2)分支结构:如图6-2所示,该结构中P代表一个条件,当条件P成立时执行A操作,否则执行B操作。,图6-1 顺序结构流程图 图6-2 分支结构流程图,7,(3)循环结构:循环结构则能够使某些语句或程序段重复执行若干次。如果某些语句或程序段需要在一个固定的位置上重复操作,使用循环是最好的选择。,8,三条输入命令的异同 ACCEPT TO ACC
4、EPT命令只能接受字符型数据,不需定界符,输入完毕按回车键结束。WAIT TOWAIT命令只能输入单个字符,且不需定界符,输入完毕不需按回车键。INPUT TO INPUT命令可接受数值型、字符型、逻辑型、日期型和日期时间型数据,如果是字符串,需用定界符,输入完毕按回车键结束。,9,分支结构形式有如下三种:1单向分支 单向分支语句,即根据用户设置的条件表达式的值,决定某一操作是否执行。 【语句格式】IF条件表达式 命令行序列 ENDIF【语句功能】该语句首先计算条件表达式的值,当条件表达式的值为真时,执行命令行序列;否则,执行ENDIF后面的第一条命令。,三、分支结构,10,【例6-9】求一元
5、二次方程AX2BXC0的实根。程序文件名为PROG9.PRG。SET TALK OFFCLEARINPUT TO AINPUT TO BINPUT TO CZB2-4*A*CIF Z=0X1=(-B+SQRT(Z)/(2*A)X2=(-B-SQRT(Z)/(2*A)? X1,X2ENDIFSET TALK ON,11,2双向分支 双向分支语句,即根据用户设置的条件表达式的值,选择两个操作中的一个来执行。【语句格式】 IF条件表达式 命令行序列1 ELSE 命令行序列2 ENDIF【语句功能】 该语句首先计算条件表达式的值,当条件表达式的值为真时,执行命令行序列1中的命令;否则,执行命令行序列2
6、中的命令;执行完命令行序列1或命令行序列2后都将执行ENDIF后面的第一条命令。,12,【例6-10】编写一密码校验程序(假设密码为ABC)。程序文件名为PROG10.PRG。SET TALK OFFCLEARACCEPT “请输入您的密码:” TO AAAIF AAA=”ABC”CLEAR? ”欢迎使用本系统!”ELSE?”密码错误!”ENDIFSET TALK ON,13,3多向分支 多向分支语句,即根据多个条件表达式的值,选择执行多个操作中的一个对应执行 。【语句格式】 DO CASE CASE条件表达式1 命令行序列1 CASE条件表达式2 命令行序列2 CASE条件表达式N命令行序列
7、N OTHERWISE 命令行序列N+1 ENDCASE,14,【语句功能】 该语句根据给出的N个条件表达式的值,选择N+1个命令行序列中的一个执行。当所有CASE中条件表达式的值都是假时,如果有OTHERWISE项,则执行命令行序列N+1,再执行ENDCASE后面的第一条命令;否则,直接执行ENDCASE后面的第一条命令。【例6-11】假设收入(P)与税率(R)的关系如下表,编程求税金。程序文件名为PROG11.PRG。 0 P800R= 0.05 800 P2000 0.08 2000P5000 0.1 P5000,15,SET TALK OFFCLEARINPUT “请输入收入:” TO
8、 PDO CASECASE P800 R=0CASE P2000 R=0.05CASE P5000 R=0.08OTHERWISE R=0.1ENDCASETAX=P*R? ”税金为:”,TAXSET TALK ON,16,四、循环结构,1DO WHILE循环语句【格式1】DO WHILE ENDDO,17,【格式2】DO WHILE LOOP EXIT ENDDO,LOOP语句:强行返回到循环开始语句。EXIT语句:强行跳出循环,接着执行ENDDO后的语句,18,【例6-12】编程求123100之和。程序文件名为PROG12.PRG。SET TALK OFFCLEARS=0I=1DO WHI
9、LE I=100 S=S+I I=I+1ENDDO? ”123100”,SSET TALK ON,19,【例6-13】逐条显示在STUDENT数据库的STUD表中性别为“男”的所有记录。程序文件名为PROG13.PRG。 SET TALK OFF CLEAR CLOSE DATABASE ALL OPEN DATABASE STUDENT USE STUD DO WHILE .NOT. EOF() IF 性别=”男” DISPLAY ENDIF SKIP ENDDO CLOSE DATABASE ALL SET TALK ON,20,【例6-14】编程显示STUDENT数据库的STUD表中除“
10、孙业 ”以外的所有记录。程序文件名为PROG14.PRG。SET TALK OFFCLEARCLOSE DATABASE ALLOPEN DATABASE STUDENTUSE STUDDO WHILE .NOT. EOF() IF 姓名=”孙业 ” SKIP LOOP ENDIF DISPLAY SKIPENDDOCLOSE DATABASE ALLSET TALK ON,21,2FOR循环语句 【格式】 FOR = TO STEP LOOP EXIT ENDFOR/NEXTFOR语句的执行流程如右图所示。,22,使用FOR循环语句的有关说明: 省略STEP ,则步长为默认值1;初值、终值和
11、步长都可以是数值表达式,但这些表达式仅在循环语句开始执行时计算一次。循环语句执行过程中,初值、终值和步长是不会改变的,并由此确定循环的次数; EXIT和LOOP命令可以出现在循环体内。执行LOOP命令时,结束本次循环,循环变量增加一个步长值,返回FOR循环头判断循环条件是否成立。执行EXIT命令时,程序跳出循环,执行循环尾后面的语句 。,23,3“指针”型循环控制语句 “指针”型循环控制语句,即根据用户设置的表中的当前记录指针,决定循环体内语句的执行次数据。【语句格式】 SCANFOR条件表达式 命令行序列 ENDSCAN【语句功能】 该语句在指定的范围内,用数据记录指针来控制循环次数。执行语
12、句时,首先判断函数EOF()的值,若其值为“真”,则结束循环,否则,结合(条件表达式) ,执行(命令行序列),记录指针移到指定的范围和条件内的下一条记录,重新判断函数EOF( )的值,直到函数EOF( )的值为真时结束循环。,24,【例6-18】输出STUDENT数据库的STUD表中所有男生的姓名和地址。程序文件名为PROG18.PRG。SET TALK OFFCLEARCLOSE DATABASE ALLOPEN DATABASE STUDENTUSE STUDSCAN FOR 性别=“男” ? 姓名,地址ENDSCANCLOSE DATABASE ALLSET TALK ON,25,4使用
13、循环语句时应注意的几点 (1)DO WHILE和ENDDO、FOR和ENDFOR、SCAN和ENDSCAN必须配对使用。 (2)循环变量应是数值型的内存变量或数组元素。 (3)EXIT和LOOP命令嵌入在循环体内,可以改变循环次数,但是不能单独使用。EXIT的功能是跳出循环,转去执行ENDDO、ENDFOR、ENDSCAN后面的第一条命令;LOOP的功能是转回到循环的开始处,重新对“条件”进行判断。,26,第三节 过程的模块化,VFP模块化在具体实现上提供三种形式,它们是子程序、过程和函数。 一 子程序 子程序也叫外部过程,是以程序文件(.PRG)的形式单独存储在磁盘上。子程序的结构与一般的程
14、序文件一样,可以用MODIFY COMMAND命令来建立、修改、和存盘,扩展名也默认为.PRG。子程序与其他程序文件的唯一区别是其末尾或返回处必须有返回语句RETURN。 子程序的调用:DO ,27,二、过程(内部),内部过程:把多个过程组织在一个文件中(这个文件称之为过程文件),或者把过程放在调用它的程序文件的末尾。 过程文件格式为:PROCEDURE PARAMETER RETURN 过程有两种存放方式:(1)把所有的过程集中写入一个被称为过程文件(.prg文件)的磁盘文件中 (2)直接把过程写在调用它的主程序文件中,主程序被打开时,过程同时被调入内存(调用时可节省时间)。(3)如果缺省R
15、ETURN,则在过程尾部自动执行一条隐含的RETURN命令,若不带则返回逻辑值.T.。,28,【例6-22】建立如下程序文件,过程放在程序文件中。* MAIN.PRG SET TALK OFF? ”正在执行主程序”DO SUB1SET TALK ONProcedure SUB1? ”正在执行SUB1”RETURN,29,三、过程文件的建立,过程文件的建立方法与程序文件相同。可用MODIFY COMMAND 命令或调用其他文字编辑软件来建立。过程文件的结构一般为:PROCEDURE RETURNPROCEDURE RETURNPROCEDURE RETURN,30,1过程文件的调用 调用某过程文
16、件中的过程时,必须先打开该过程文件,打开过程文件命令为: 【格式】SET PROCEDURE TO 任何时候系统只能打开一个过程文件,当打开一个新的过程文件时,原已打开的过程文件自动关闭。 调用过程文件 DO WITH 参数表2过程文件的关闭关闭过程文件可用下列命令: 【格式一】SET PROCEDURE TO 【格式二】CLOSE PROCEDURE,31,参数传递,当用主程序调过程时,可以将主程序中的参数传递给过程,在过程中经过处理后再返回到主程序。调用程序的格式:格式1:DO WITH , , 格式2: , , 实参可以是常量、变量或表达式。调用程序时将发送实参。接收参数命令:PARAM
17、ETERS , ,此时形参为私有变量。L PARAMETERS , ,此时形参为局部变量。,32,规则:(1)当实参数量大于形参数量时,系统将提示出错。(2)当实参数量等于形参数量时,实、形参数一一对应发、接参数。(3)当实参数量小于形参数量时,多余的形参将被赋值为逻辑假F。参数的两种传递方式:(1)按值传递。形参变量值的改变不会影响实参变量的值。(2)按地址(引用)传递。形参变量值的改变时,实参变量也随之改变。两种方式的设置命令:SET UDFPARMS TO VALUEREFERENCE,按值传递,按地址,33,变量的作用域,变量的作用域指的是变量在什么范围内是有效(或能够被访问)的。内存变量可分为:公共、私有、局部三类。1.公共变量:在任何模块中都可使用的变量称为公共变量。 可用:PUBLIC 建立,其初值被赋为逻辑假.F.。2.私有变量:可在本模块及其下属的各层模块中使用。 在程序中直接使用的变量,均为私有变量。一但建立它的模块程序运行结束,私有变量将自动清除。3.局部变量:只能在建立它的模块中使用,当建立它的模块程序结束时,局部变量自动释放。 可用:LOCAL 建立,其初值被赋为逻辑假.F.。,34,结束,
链接地址:https://www.31ppt.com/p-1481566.html