[理学]数据库第9章.ppt_第1页
[理学]数据库第9章.ppt_第2页
[理学]数据库第9章.ppt_第3页
[理学]数据库第9章.ppt_第4页
[理学]数据库第9章.ppt_第5页
已阅读5页,还剩75页未读 继续免费阅读

下载本文档

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

文档简介

第9章 结构化程序设计,VFP提供一种程序执行方式,这种方式就是预先把需要执行的多条命令按一定的结构组成一个有机序列以文件的形式存储在磁盘上,这个文件就称为程序文件,这个序列的设计、编码和调试的过程就是程序设计。,9.1 程序设计基础,9.1.1 程序设计的概念,9.1.2 程序的控制结构 任何复杂的程序都由3种基本控制结构组成。它们是顺序结构、选择结构和循环结构。,图9.1程序的控制结构,9.1.3 结构化程序设计方法 结构化程序设计采用自顶向下、逐步求精和模块化的分析方法。 自顶向下是指对设计的系统要有一个全面的理解,从问题的全局入手,把一个复杂问题分解成若干个相互独立的子问题 。逐步求精是指程序设计的过程是一个渐进的过程,先把一个子问题用一个程序模块来描述,再把每个模块的功能逐步分解细化为一系列的具体步骤 。模块化是结构化程序的重要原则。所谓模块化就是把大程序按照功能分为较小的程序。,9.1.4 程序文件的建立与执行,1命令方式建立或修改程序文件,命令格式: MODIFY COMMAND ? MODIFY.FILE.文件名? 功能:启动VFP提供的文本编辑器来建立或编辑程序文件。,2菜单方式建立编辑程序文件,命令格式: DO 程序文件名 功 能 : 将程序文件从磁盘调入内存, 编译成.FXP目 标文件后并执行。,3.程序文件的执行,菜单方式:.CANCEL:终止程序运行,清除所有的私有变量,返回命令窗口。 .RETURN:结束程序执行,返回调用它的上级程序,若无上级程序则返回命令窗口。 .QUIT:结束程序执行并退出Visual.FoxPro系统,返回操作系统。,9.2 顺序结构程序,顺序结构是最简单、最基本的一种程序结构。在顺序结构程序中,各命令按照各自出现的先后顺序,依次执行。,9.2.1 程序文件中的辅助命令,一输入类语句,格 式1: STORE 表达式 TO 内存变量名表 格 式2: 内存变量 表达式 功 能:给内存变量赋值。,. 赋值语句,. 交互式语句/键盘输入命令,1. 字符串数据输入命令,格式: ACCEPT TO ,功能:在屏幕上显示提示信息,等待用户从键盘输入,再把输入内容赋值给指定的内存变量。,注:ACCEPT命令只能接受字符型常量,输入时不需加定界符。,键盘输入命令主要用于程序执行过程中原始数据的输入。,例9-1:要求用户从键盘上输入用户名,然后把输入的用户名显示出来。,ACCEPT “请输入用户名:” TO NAME,?NAME,格式:INPUT TO ,2. 数据输入命令,功能:在屏幕上显示提示信息,等待用户从键盘输入,再把输入内容赋值给指定的内存变量。,注:INPUT命令能接受任何类型的表达式: 输入C 型数据时,要使用 或 “ ” 作为定界符; 输入L 型数据时,.T. 和 .F. ,两边的 . 不能省; 输入D 型数据时,要用 或CTOD( ) 将字符串转成日期型变量。,例9-2:求任意两数之和。,INPUT “请输入一个数x:” TO X,?X+Y,INPUT “请输入另一个数y:” TO Y,J=2800 INPUT “输入 J+200 :” TO A ACCEPT “输入 J+200 :” TO B ?“A=”,A ? “B=”,B 注:执行时,先后两次输入同样的内容:J+200,例9-3: 给出下列A、B的结果,格式:WAIT TO TIMEOUT ,3. 只能输入一个字符的命令,功能:当程序执行某一处需要暂停时使用此命令。,注:WAIT命令响应速度快,它只接受一个字符,不需用户键入回车键。,* 数据表操作命令菜单 * 打开工作数据表 增加数据表记录 删除数据表记录 修改数据表记录 打印数据表记录 关闭工作数据表,? “您选择的是第” + CHOICE + “个选项”,WAIT “请选择相应代码:” TO CHOICE,例9-4:,格式: SAY GET RANGE , READ,4. 格式输入语句,功能:在屏幕指定的坐标位置上显示提示或输入数据。, READ 一般与GET 联合起来用: 当有READ时, GET 的内容可以从键盘上修改; 没有READ时,GET 后的变量只能显示内容,不能修改; 一个READ可以修改它前面的多个GET项的内容,但它可以由CLEARGETS命令隔断。,注: :该变量应在其前面定义过,( 赋初值 ) 。, 8, 18 SAY “* 数据表操作命令菜单 *” 9, 18 SAY “ 1.打开工作数据表 ” 10, 18 SAY “ 2. 增加数据表记录 ” 11, 18 SAY “ 3. 删除数据表记录 ” 12, 18 SAY “ 4. 修改数据表记录 ” 13, 18 SAY “ 5. 打印数据表记录 ” 14, 18 SAY “ 6. 关闭工作数据表 ”, 18, 28 SAY “您选择的是:” + LTRIM(STR(CHOICE), 16, 28 SAY “ 请选择相应代码:” GET CHOICE,READ,例9-5:,二输出类语句,1. 非格式输出语句,格式1: ? 内存变量名表,格式2: ? 内存变量名表,注:语句1 是在光标所在行的下一行开始显示, 语句2 则是在当前光标位置开始显示。,功 能:显示内存变量、常量或表达式的值。,格式: SAY FUNCTION PICTURE ,2. 格式输出语句,功能:按指定的坐标位置在屏幕上输出表达式的值。,注: 若选用PICTURE、 FUNCTION子句,则按一定的格式输出 ,分别见教材P131的表6.1、6.2。,格式: TEXT ENDTEXT,3. 文本输出语句,功能:在屏幕上原样显示TEXT和ENDTEXT之间的内容。,注: TEXT、ENDTEXT是一条子句,不能省略其中任一条子句。,* 数据表操作命令菜单 * 打开工作数据表 增加数据表记录 删除数据表记录 修改数据表记录 打印数据表记录 关闭工作数据表,? “您选择的是第” + CHOICE + “个选项”,WAIT “请选择相应代码:” TO CHOICE,例6-6,TEXT,ENDTEXT,三. 设置会话状态语句,语句格式2: SET TALK OFF,功能 语句1:设置会话状态开通。 语句2:设置会话状态关闭。,语句格式1: SET TALK ON,四. 清屏与注释语句,语句格式: CLEAR,1. 清屏语句,功 能 :清除屏幕上所有显示内容,光标回到屏幕左上角。,2. 注释语句,语句格式2: * ,注:语句1、2、3 在程序中,系统不执行。,语句格式1: NOTE ,功 能 : 在程序中加入说明性语句。,语句格式3: & ,五. RETURN命令,注:一般RETURN出现于程序末尾。,格式: RETURN /TO MASTER/TO ,功能 : 结束一个程序的执行。,六. 终止程序执行语句,语句格式2: QUIT,注: 语句1:在终止程序执行后,返回到VFP命令状态; 语句2:返回到操作系统状态。,语句格式1: CANCEL,功能:终止程序执行,关闭所有打开的命令文件。,顺序结构程序:按语句的先后顺序组织的程序,即把处理过程的各个步骤按执行的先后顺序列出。 其流程图如右图所示。,顺序结构程序设计,A,B,C,N,图中箭头表示程序执行的方向,方框代表不同的可执行语句。,例9-7 变量的初始化和变量的赋值。,SET TALK OFF STORE 0 TO X,Y,Z A=3 B=A+1 C=A*B ? X, Y, Z ? A, B, C SET TALK ON,例9-8 执行以下命令序列,问答问题:,最后显示的值是: 所有职工的平均工资; 所有工资在1000元以上的职工的平均工资; 所有工资在1000元以上的职工人数; 所有职工人数 。,USE zgb SUM 基本工资 FOR 基本工资1000 TO SGZ COPY FOR 基本工资1000 TO GZK2 USE GZK2 num=reccount( ) ave=sgz/num ? ave,在计算机应用的许多场合,要求程序根据不同的条件采用不同的处理方法。如果条件满足,则执行某一些语句;如果条件不满足,则执行另一些语句。这些需要根据判断条件来控制程序走向的程序设计称为选择结构程序设计,又称分支结构程序设计。 Visual FoxPro提供双分支选择语句、多分支选择语句两种选择结构。,9.3 选择结构程序设计,语句格式: IF 条件 语句序列1 ENDIF,9.3.1 双分支选择语句(选择判断语句),.T.,.F.,.Y.,.N.,ELSE 语句序列2,注: (1) IF和ENDIF必须配对使用,而ELSE可选。 (2) IF、ELSE、ENDIF必须各占一行。 (3) 可以为关系表达式、逻辑表达式。 (4)在语句序列1和语句序列2中可以嵌套IF语句。,执行过程: 如果成立,就执行语句序列1; 如果不成立,执行语句序列2。,例 请改用分支结构语句编程计算电费: 不超过50度, 每度0.52元; 超过50度时, 超出部分每度0.75元。,SET TALK OFF INPUT “请输入所用电量:“ TO DL DF=IIF(DL=50,0.52*DL,0.52*50+0.75*(DL-50)) ? “应缴电费为:” + LTRIM(STR(DF,10,2) + “元“ SET TALK ON RETURN,SET TALK OFF INPUT “请输入行李重量:“ TO W IF 1 YF=0.22*W ELSE YF= 0.22*40 + 1 ENDIF ? “应交托运费为:“+LTRIM(STR(YF,10,2)+“元“ SET TALK ON RETURN,例 火车托运行李: 每人不超过40公斤,每公斤0.22元;超过40公斤时, 超出部分每公斤0.40元。填空完成以下程序。,W 40,(W-40) * 0.4,SET TALK OFF Set defa to f:jfvfpprg USE zgb ACCEPT “请输入要查找人的姓名: ” TO N LOCATE ALL FOR XM=N IF FOUND( ) DISP ELSE ? 查无此人 ENDIF USE SET TALK ON RETURN,例 编程:在ZGB.DBF中查找某人。,9.3.2 多分支选择语句(选择语句|情况语句),说明: DO CASE和第一个CASE子句之间不能插入任何语句。 DO CASE和ENDCASE必须配对使用,且DO CASE,CASE,OTHERWISE和ENDCASE各子句必须各占一行。 在语句序列中可嵌套情况语句。,语句格式: DO CASE CASE 条件表达式1 语句序列1 CASE 条件表达式2 语句序列2 CASE 条件表达式n 语句序列n OTHERWISE 语句序列n+1 ENDCASE,功能:系统依次测试语句中各个条件表达式的值: 若为真,即执行相应条件表达式后的语句序列, 然后脱离情况语句,执行ENDCASE的下一语句。若所有的条件表达式的值均为假,则执行OTHERWISE后面的语句序列, 然后脱离情况语句,执行ENDCASE下一语句 。,开始判断,语句序列1,序列2,序列n,序列n+1,ENDCASE后面的语句,条件1,条件2,条件n,其它,例 已知cjb.dbf中包含xingming,avcj等字段。试用avcj来判断该生成绩属于优(90)、良(80)、及格(60)或不及格(60)。,USE cjb ACCEPT 请输入姓名: TO xm LOCATE FOR ALLTRIM(xingming)=ALLTRIM(xm) navcj DO CASE CASE n=90 dj=优 CASE n=80 dj=良 CASE n=60 dj=及格 OTHERWISE dj=不及格 ENDCASE 5,10 SAY xingming+同学的成绩等级为:+ dj,A=3000 DO CASE CASE A=1000 B=A CASE A=2000 B=2*A CASE A=3000 B=3*A ENDCASE ? B,例 阅读下列程序段,写出运行结果:,Set talk off Set defa to f:yyfox clear cho=0 8, 18 SAY “* 数据表操作命令菜单 *” 9, 18 SAY “ 1. 打开工作数据表 ” 10, 18 SAY “ 2. 增加数据表记录 ” 11, 18 SAY “ 3. 删除数据表记录 ” 12, 18 SAY “ 4. 修改数据表记录 ” 14, 18 SAY “ 5. 关闭工作数据表 ” 15, 28 SAY “ 请选择相应代码:” GET cho Read Do case case cho=1 accept “请输入表文件名:” to bm use &bm,例 利用CASE语句实现简单的菜单功能,case cho=2 append case cho=3 input “请输入要删除的记录号:” to jlh go jlh dele case cho=4 browse case cho=5 use otherwise 15, 28 SAY “ 选择代码错!” endcase Set talk on return,循环,就是按给定的条件连续地重复执行一段特定功能的程序。循环结构也称为重复结构。,9.4 循环结构程序设计,Visual FoxPro给出了三种循环结构: 条件循环(DO WHILEENDDO) 计算循环(FORENDFOR) 扫描循环(SCANENDSCAN),语句格式: DO WHILE LOOP EXIT ENDDO,循环体,ENDDO后的语句,条件,.T.,.F.,条件循环结构流程图,一、条件循环,循环体,功能:有条件连续地重复执行DO WHILE与ENDDO之间的语句序列,直到为假或因执行EXIT语句而结束。,条件,(2)循环体中的LOOP是可选项。遇到LOOP时,不再执行后面的语句,转回DO WHILE处重新判断。其作用相当于一个特殊的“短路”返回控制。 (3)循环体中的EXIT也是可选项。遇到它时便无条件地退出循环,转到ENDDO后面的语句。其作用相当于一个紧急出口。 (4)通常LOOP或EXIT出现在循环体内嵌套的分支语句中,根据条件来决定是LOOP回去,还是EXIT出去。,功能说明: (1)系统执行该语句时,先判断循环开始DO WHILE的条件是否成立, 如果条件为真,则执行循环体中的语句序列。当执行到ENDDO时,返回到DO WHILE,再次判断条件是否为真,以确定是否再次执行循环体。若条件为假,则结束循环 ,执行ENDDO后面的语句。 如果第一次判断条件时,条件即为假,则循环体一次都不执行,这就是称为“先判断后执行”的语句。,SET TALK OFF,SET TALK ON,RETURN,CLEAR,例 在屏幕上换行显示字符串“OK”20次,i=1,? OK,i=i+1,ENDDO,DO WHILE,SET TALK OFF,SET TALK ON,RETURN,CLEAR,i=20,1,1,2,2,2,3,20,20,21,&设置循环变量初值,&修改循环变量,例 在屏幕上换行显示字符串OK20次,? OK,在以循环变量作为循环控制参数的条件循环中, 循环体内一定要有修改循环变量的语句,否则 就会出现死循环。,注意,例 求自然数1至4的和。,分析算法:,1. i=1 , s=0 ;,2. 累加第 i 个数,3. 累加次数加1,4. 当 i= 4 重复做2 ;,5. ? s 。,例 求自然数1至4的和。,SET TALK OFF,S=0,&定义一个变量表示和,并初始化,&指定以循环次数作判断条件,S=S+i,&把S的值加上i后再赋给S,即求和,&修改循环变量,? S,&输出求和的结果,SET TALK ON,RETURN,&设置循环变量的初值,S=0,i=1,1=4,S=0+1,i=1+1,.T.,2=4,S=1+2,i=2+1,3=4,S=3+3,i=3+1,4=4,S=6+4,i= 4+1,5=4,.F.,? 10,SET TALK OFF S=0 i=1 DO WHILE i=4 S=S+i i=i+1 ENDDO ? S SET TALK ON RETURN,若求自然数1至N的和呢?,程序:求自然数1至4的和,SET TALK OFF,S=0,i=1,INPUT 请输入N的值: TO N,DO WHILE i=4,S=S+i,i=i+1,ENDDO,?S,SET TALK ON,RETURN,i=N,推广1,若求自然数1至N的积呢?,程序:求自然数1至N的和,SET TALK OFF,S=0,i=1,INPUT 请输入N的值: TO N,DO WHILE i=N,S =S + i,i =i + 1,ENDDO,?S,SET TALK ON,RETURN,推广2,S=1,S=S*i,例 阅读程序,并说出程序的运行结果,程序结果,2,3,4,5,6,程序结果,2,4,5,6,E,E,例 求1100以内所有奇数的和。,SET TALK OFF S=0 I=0 Do while I100 I = I + 1 If int(I/2) = I/2 Loop endif S = S + I Enddo ? “1到100的奇数和 S= ”, S SET TALK ON Return,以循环变量作为控制参数控制循环。,S=0 I=1 Do while I100 S = S + I I = I + 2 Enddo ? s,程序改进:,SET TALK OFF CLEAR USE zgb ACCEPT “请输入要查找人的姓名: ” TO N LOCATE ALL FOR XM=N DO WHILE .NOT. EOF( ) DISP CONTINU WAIT “按任意键继续,按ESC键退出” ENDDO USE ?“查找结束” SET TALK ON RETURN,例 编程:在zgb.dbf中查找某人。,利用数据表的操作函数的返回值控制循环,例 求连乘数1*2*3*4*,当积大于720时退出程序。,Set talk off Clear S=1 I=1 Do while .T. S = S * I I = I + 1 Enddo ? “ S= ”, S Set talk on Return,循环控制条件恒为真,要使用EXIT语句结束循环,例 求1,100内所有能被3或被5整除的数的个数。,IF MOD(i,3)=0 .OR. MOD(i,5)=0,N=N+1,ENDIF,N= 0,&定义一个变量表示个数,并初始化,&总个数增加1,SET TALK OFF,? 满足条件的数的个数为,N,SET TALK ON,RETURN,? i,&显示满足条件的这个数,语句格式: FOR XA TO B STEP C LOOP EXIT ENDFOR | NEXT,二、计数循环,循环体,功能:将FORENDFOR循环中的执行指定的次数。,循环变量,循环初值,步长值,循环终值,例 求1100之和。,SET TALK OFF Clear S=0 for I=1 to 100 S = S + I Endfor ? “S = ”, S SET TALK ON Return,若求100的阶乘呢?,思考1,例 求1100之奇数和。,SET TALK OFF Clear S=0 for I=1 to 100 step 2 S = S + I Next ? “S = ”, S SET TALK ON Return,若求1100的偶数和呢?,思考2,例 阅读程序,写出程序运行结果,思考3 若改成EXIT呢?,语句格式: SCAN FOR LOOP EXIT ENDSCAN,三、表文件扫描循环,循环体,功能:在指定的范围内,扫描满足给定条件的记录,执行相应的语句。,SET TALK OFF USE zgb ACCEPT “请输入要查找人的姓名: ” TO N SCAN FOR XM=N DISP WAIT “按任意键继续,按ESC键退出” ENDSCAN USE ?“查找结束” SET TALK ON RETURN,例 用SCAN语句编程:在zgb.dbf中查找某人。,对数据表扫描时三种循环的等价格式,表文件扫描循环: SCAN FOR ENDSCAN,条件循环: DO WHILE .NOT. EOF() SKIP ENDDO,计数循环: n=RECCOUNT() FOR i=1 TO n GO i ENDFOR,循环嵌套,循环体内又设置循环的情况称为多重循环,又称为循环嵌套。 内外循环的层次必须分明,不允许有交叉现象出现。 循环结构可以与分支结构嵌套,同样不允许有交叉现象出现。,以下交叉情形不允许出现:,例 已知S1=1,S2=1+2,S3=1+2+3, Sn=1+2+3+N,编程求S1+S2+S100的和。,s=0 n=1 Do while n=100 i=1 sub=0 Do while i=n sub = sub + i i = i + 1 Enddo s = s + sub n =n + 1 Enddo ? “ S1+S2+S100= ”, s ,(1)求1,30之间所有偶数的乘积。,(3)求 s=1!+2!+n!,练 习,(2)已知S=1*2*3*N 当S800时退出,求此时最小的S值,(4)求,(5)求,9.5 程序的模块化,9.5.1 子程序、过程和函数 1.子程序 (1).子程序的结构 子程序与其他程序文件的惟一区别是其末尾或返回处必须有返回语句。 命令格式:RETURN.TO.MASTERTO.程序文件名表达式,(2).子程序的调用 子程序调用命令与主程序执行命令相同,其格式都是:DO程序文件名过程名WITH.参数表 (3).子程序的嵌套调用 主程序可以调用子程序,子程序还可以调用另外的子程序,这就是子程序的嵌套调用。实际上,子程序和主程序都是相对的,任何一个程序可以调用其他程序,也可以被其他程序调用。每个被调用程序的末尾或返回处都要加上RETURN命令。,2.自定义函数 (1).自定义函数的结构 FUNCTION.函数名 PARAMETERS.参数表 命令组 RETURN.表达式 (2).自定义函数的调用 调用格式是: 函数名(自变量表),3.过程与过程文件 (1).过程的结构 过程的一般格式是: PROCEDURE过程名 PARAMETERS参数表 命令组 RETURN (2).过程文件 一个过程可以以文件形式单独存在,也可以将多个过程合并到一个文件中,这个文件称为过程文件。在过程文件中,每个过程仍然是独立的,可以单独调用。,(3).过程文件的打开与关闭 打开过程文件命令格式是: SET.PROCEDURE.TO.过程文件名 关闭过程文件命令格式是: SET.PROCEDURE.TO或者 CLOSE.PROCEDURE,9.5.2 内存变量的作用域,1.全局内存变量 定义全局变量的命令格式:

温馨提示

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

评论

0/150

提交评论