数据库lesson4

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

22
4.3 多模块程序
模块是可以命名的一个程序段,可指主程序、子程序和 自定义函数
4.3.1 子程序
一、调用与返回 两个具有调用关系的程序文件,称调用程序为主程序, 被调用程序为子程序 主程序遇到DO命令,转向子程序执行,称为调用程子程 序。 子程序执行到RETURN语句(或缺省该语句),返回到 主程序中的DO命令的下一个语句执行,称为返回主程序
7
三、WAIT命令
暂停程序的运行,直到用户输入一个字符,也可用于输出一条提示信息 省略则显示“按 任意键继续…. 保存键入的字符,省 略TO子句不保存 TIMEOUT子句设定等待 时间(以秒为单位)
WAIT [<信息文本>] [TO <内存变量>] [WINDOW [AT <行>,<列>]] [NOWAIT] [CLEAR] [NOCLEAR] [TIMEOUT <数值表达式>] 不等待用 户输入 关闭提 示窗口 不关闭提示窗口,直到下一 个WAIT命令自动关闭
27
二、数组参数的传递
发送参数数组前加@,接收参数数组不需定义。 *例4-14数组传送,P140 clear dimension fs(2) fs(1)=1 fs(2)=0 @5,10 say "一次项系数:" get fs(1) @7,10 say "常 数 项:" get fs(2) read ?"x:",root(@fs) &&树组前加@可传递数组 function root parameters js && js(1)=fs(1),js(2)=fs(2) return iif(js(1)=0,"无解",-js(2)/js(1))
二、步长循环
FOR <内存变量>=<数值表达式1> TO <数值表达式2 > [STEP <数值表达式3 >] <语句序列> ENDFOR|NEXT 终值
初值
步长,默 认为1
18
[P135 例4-9] s=0 for i=1 to 100 s=s+i next ?"s=",s
三、扫描循环
SCAN [<范围>] [FOR <逻辑表达式1>] [WHILE <逻辑表达式2 >] <语句序列> ENDSCAN
DO <文件名>
例如:DO MCZZ.QPR &&运行查询程序
3
4.1.1 程序文件的建立与执行
举例
例4-3:设计程序创建数据库SBSJ{SB,BMDM,DX,ZZ}
creat data sbsj add tabl sb add tabl zz add tabl dx add tabl bmdm close data
10
二、带ELSE的条件语句
IF <逻辑表达式> <语句序列1> ELSE <语句序列2> ENDIF
11
三、宏替换函数
函数格式: &<字符型内存变量>[.<字符表达式>] 功能:替换出字符型内存变量的值 [P131 例4-4] m=5 x="m" ? x &&显示m ? &x &&显示5 若宏替换函数后还有非空的<字符表达式>,则需要在 此<字符表达式>前加“.”。
EXIT:立即退出循环,转去执行循环外的语句
DO WHILE <逻辑表达式> …… EXIT …… ENDDO
20
[P136 例4-11]
store 0 to i,s,t do while i<100 i=i+1 s=s+i if int(i/2)=i/2 loop endif t=t+i enddo ?"1+2+3+...+100=",s 21 ?"1~100奇数和为",t
28
4.3.3
过程
VFP准许一个.PRG文件中设置多个程序模块,除主 程序以外每个模块为一个过程 过程的格式如下: PROCEDURE <过程名>
[PARAMETERS <参数表>] <命令序列> [RETURN] 过程部分往往位于程序文件的最后.
29
[P141 例4-15]
set decimals to 2 &&设置小数点后保留两位 ymj=0 @5,10 say "请输入半径:" get bj default 0 read do js with bj,ymj ?"ymj=",ymj return procedure js parameters r,s s=pi()*r*r return
8
WINDOW子句使屏幕出现一个WAIT提示窗 口, 内容由<信息文本>确定, 位置有AT子句指 定.省略AT子句则出现在屏幕右上角
4.2 程序的控制结构
顺序结构:按命令的书写顺序依次执行 基本结构 分支结构:根据指定条件的当前值在两条 或多条路径中选择一条执行 循环结构:由指定条件的当前值来控制循 环体中的语句(或命令)序列 是否要重复执行。
指定变量初值
6
[P128 例4-1]
CLEAR && 清屏幕 USE sb jlh=1 && GET 变量必须赋初值 @2,10 SAY "请输入记录号:" GET jlh READ GO jlh @4,10 SAY "请修改第"+STR(jlh,1)+"个设备的数据" * 输出提示字符串 @6,10 SAY "价格" GET 价格 *价格是字段变量,已经有初值 @8,10 SAY "部门" GET 部门 READ USE
2
4.1.1 程序文件的建立与执行
文件的退出与保存
Ctrl+W: 文件存盘推出
ESC:若程序文件修改过,将询问“放弃修改吗?” 双击左上角控制菜单:将询问“将所做的更改保存到*.prg吗?” 单双击右上角关闭按钮:将询问“将所做的更改保存到*.prg吗?” “文件”菜单:“保存”、“另存为”或“还原”命令 默认扩展名为.PRG,若为其 二、程序的执行 它类型必须指明扩展名
23
二、带参数子程序的调用和返回
可以是表达方式,内存变量必须赋初值
DO <程序名1> [WITH <参数表>] [IN <程序名2 >] 当<程序名1>是<程序名2>中 的一个过程时,必须指明 相对应的在子程序中,用PARAMETERS来接收和回送参数。 PARAMETERS <参数表> 1、该语句应为子程序的第一条命令, 2、 PARAMETERS参数应与WITH参数表一一对应
13
三、多分支语句
DO CASE CASE <逻辑表达式1> <语句序列1> CASE <逻辑表达式2> <语句序列2> …………… CASE <逻辑表达式n> <语句序列n> [OTHERWISE <语句序列n+1>] ENDCASE
14
[P132 例4-6]
clear yue=month(date()) &&获取月份 do case case inlist(yue,3,4,5) jj="春" case inlist(yue,6,7,8) jj="夏" case inlist(yue,9,10,11) jj="秋" case inlist(yue,12,1,2) jj="冬" endcase wait jj window at 8,30 &&当前季节显示在WAIT窗口
15
4.2.2 循环结构
一、条件循环 DO WHILE <逻辑表达式> <语句序列> ENDDO [P133 例4-7] use sb do while not eof() if 价格>10000 ? 名称 endif skip enddo 16 use
循环条件
Байду номын сангаас循环体
[P134 例4-8]
store 0 to k1,k2,k3 use sb do while not eof() do case case 价格>90000 k1=k1+1 case 价格<10000 k3=k3+1 otherwise k2=k2+1 endcase skip enddo ?"9万元以上设备个数:"+str(k1) ?"1~9万元设备个数 :"+str(k2) ?"1万元以下设备个数:"+str(k3) 17 use
4
4.1.1 程序文件的建立与执行
三、程序的书写规则
1、命令分行 一行只写一条命令,结尾回车 一行写不完,则加续行号“;”回车 2、命令注释 注释行以“*”号开头 一条命令后可加“&&”引出注释 例如: *本程序修改指定记录 SET DATE USA &&日期格式为MM-DD-YY
5
4.1.2 程序文件中的专用命令
24
三、子程序嵌套
子程序还可以调用其它子程序(嵌套),因嵌套引出 多两种返回方式
返回最外层主程序 强制返回指定程序
RETURN [TO MASTER|TO <程序名>]
省略,返回外层调用程序
任何时候要推出VFP,只要执行QUIT命令
25
4.3.2
自定义函数
一、自定义函数的建立
使用它表示该函数包含在调用程序中, 缺省则函数为一个独立文件 [FUNCTION <函数名>] [PATAMETERS <参数表>] <语句序列> [RETURN <表达式>] 用于返回表达式的函数 值,省略则返回.T.
30
过程文件
主程序文件
ymj=0 @5,10 say "请输入半径:" get bj default 0 read do js with bj,ymj in js1 &&调用过程文件js1中的过程js ?"ymj=",ymj return
五、多重循环
循环体内包含其它循环→循环嵌套
clear use sb @5,10 say "请输入价格:" get jg default 0 read scan &&外循环 if 价格<jg ?编号+space(3)+名称+space(3)+str(价格,9,2) ? &&换行 for i=1 to 30 &&内循环 ??"-" endfor endif endscan use
一、程序结尾的专用命令
RETURN:使程序结束,返回到上级或命令窗口,准许缺省 CANCEL:正常终止,清除程序私有变量,返回到命令窗口 QUIT:退出VFP系统,自动删去临时文件,返回WINDOWS
二、定位输入输出专用命令
数据在窗口显示位置 输出数据 输入及编辑数据
@<行,列> [SAY <表达式1>] [GET <变量名>] [DEFAULT <表达式2 >]
在<范围>内依此寻找满足FOR条件或WHILE条件的记录,并 对找到的记录执行<语句序列> [P135 例4-10] use sb scan for 价格>10000 ? 名称 endscan 19 use
四、循环辅助语句
LOOP:使执行转向循环语句的头部继续循环
DO WHILE <逻辑表达式> …… LOOP …… ENDDO
函数体
26
自定义函数不能和系统函数、内存变 量同名,使用方法与系统函数相同
[P139 例4-14]
解法二 *例4-14解法二 clear @5,10 say "一次项系数:" get a default 1 @7,10 say "常 数 项:" get b default 0 IIF系统函数, read 若u=0,值为 ?"x:",root(a,b) “无解”;否 则为-v/u function root parameters u,v return iif(u=0,"无解",-v/u)
4.2.1 分支结构
9
VFP可用条件语句或分支语句实现分支结构
一、简单的条件语句
IF <逻辑表达式> <语句序列> ENDIF
[P130 例4-3]
USE sb LOCATE FOR NOT 主要设备 IF FOUND() && 若查到,FOUND函数返回.T. DISPLAY 名称,价格 REPLACE 价格 WITH 价格*(1-0.1) DISPLAY 名称,价格 ENDIF USE RETURN
第四章 程序设计初步
第一节 程序文件 第二节 程序的控制结构 第三节 多模块程序 第四节 窗口设计样例
1
4.1 程序文件
VFP程序设计包括结构化程序设计和面向对象程序设 计,但结构化程序设计仍是面向对象程序设计的基础。 4.1.1 程序文件的建立与执行
一、程序文件的建立与修改 MODIFY COMMAND <文件名> 程序文件由VFP命令组成 文件名由用户指定, 扩展名为.PRG
12
[P131 例4-5]
clear @5,10 SAY "请输入表名:" GET bm DEFAULT SPACE(10) READ bm=ALLTRIM(bm) &&删去两端的空格 IF FILE("&bm..dbf") && &bm后用一个.来连接.dbf use &bm browse ELSE WAIT "该文件不存在,按任意键退出" WINDOW ENDIF
相关文档
最新文档