版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第五章Visual Foxpro程序设计,程序的工作原理 基本的输入输出命令 结构化程序设计 过程 变量的作用域,命令执行的两种方式,单命令工作方式:(交互工作方式)即每执行一步都能 立即得到相应的运行结果。,批命令工作方式:(程序执行方式)将许多命令按照一定 的逻辑结构,编写成一个能够实现指 定功能的完整的命令序列,即应用程 序,该命令文件以文件的形式存储在 磁盘上,可一次性批量执行。,5.1 程序的编辑、编译与执行,一、建立、编辑 内部编辑器: Modify Command 利用编辑命令编辑 存盘:W 不存盘:Q或ESC 其他字处理软件,clear Use D:dbfts locate a
2、ll for 书号=7900101926 DISP USE,二、输入程序文件时应注意以下几点:,命令行最多有254个字符,一个命令可占若干行,可利用;将一行分为若干行。 注释行以符号*开头,它是一条非执行命令,仅在程序中显示。命令后也可添加注释,这种注释以符号&开头。例如, 例:* 本程序用于修改表的指定记录 SET DATE USA &日期格式置为MM-DD-YY 文件编辑完毕可存盘(Ctrl+W、Ctrl+END、文件菜单中的SAVE)或退出(Ctrl+Q、Esc),三、程序的执行,源程序文件 .prg Do 命令文件名 说明: 1、若DO命令末指定文件的扩展名,则默认的是.PRG程序 2
3、、若要运行其它程序,文件名中必须包括扩展名。例如要执行某查询文件CX.QPR,则命令应为:DO CX.QPR 3、.PRG程序的目标程序的扩展名是.FXP,查询程序的目标程序的扩展名是.QPX。,四、程序的调试,1、程序中的常见错误 (1)语法错误 (2)超出系统允许范围的错误 (3)逻辑错误 2、检查程序中的错误 (1)设置断点 ?”X=,X & 显示x值 WAIT WINDOW & 程序暂停执行,(2)单步执行:一次执行一个命令。(3)跟踪:,(4)设置错误陷阱: 3、调试器 选定VFP工具菜单的调试器命令 在命令窗口键入DEBUG命令,五、程序中的专用命令,1、RETURN RETURN
4、:放在程序的末尾 2、CANCEL CANCEL命令能使程序终止执行,并清除程序中的局部变量,执行命令后返回到命令窗口,该语句可在程序的任何位置出现。 3、QUIT 退出VFP系统返回到Windows,5.1.4 基本的输入输出命令,1.常用的键盘输入命令 2.常用的显示输出命令 3. 简单的格式化输入输出命令 返回,1ACCEPT命令 ACCEPT TO 内存变量) 注意: 该命令只能接收字符型数据,且输入字符串时不要用引号括起来,否则引号将作为字符串的内容存储到内存变量中。 返回,例,clear use d:dbfts accept请输入要查找的书号: to sh locate all f
5、or 书号=sh disp use,例,clear use d:dbfxs accept 请输入要查找的入学分数: to fs locate all for rxzf=fs disp use locate all for rxzf=val(fs) locate all for str(rxzf,5,1)=fs,2INPUT命令 INPUT To 该命令可从键盘向内存变量输入任意类型数据,内存变量的类型由输入数据的类型决定。当直接输入不同类型的数据常量时,需用各自的定界符区分。 返回,clear use d:dbfxs input 请输入要查找的入学分数: to fs locate all fo
6、r rxzf=fs disp use,3WAIT命令 WAIT TO WINDOWNOWAITCLEAR TIMEOUT 该命令从键盘向输入一单个字符。若直接按回车键,则取空字符 。 返回,例,clear use d:dbfxs input 请输入要查找的入学分数: to fs locate all for rxzf=fs wait 按任意键继续! disp use,一、命令格式: SAY(表达式1)GETDEFAULT READ 二、功能:在屏幕的指定行列位置输出SAY子句的表达式值,并可修改GET子句的变量值。,4. 格式化输入输出命令,例,clear use d:dbfxs 10,20
7、say 请输入要查找的入学分数: get fs default 0 read locate all for rxzf=fs wait 按任意键继续! disp use,例5-1试编一程序,该程序能根据书号修改某类书的单价和册数。,CLEAR USE d:dbfts sh=space(10) &设置变量的初值 2,10 SAY 请输入书号: GET sh READ locate for 书号=sh 4,10 SAY 请修改该书的单价和册书: 6,10 SAY 单价 GET 单价 8,10 SAY 册数 GET 册数 READ USE,clear use d:dbfts 10,20 say “请输
8、入要查找的书号: get sh default space(10) read locate all for 书号=sh disp use,clear use d:dbfts 10,20 say “请输入要查找的书号: get sh default space(10) read locate all for 书号=sh 12,20 say 书号 14,20 say 书名 use,1、 顺序结构:语句按照它们在程序中出现的 先后顺序执行。 2、分支结构:根据条件是否成立,选择两个分支中的一个分支执行。 3、循环结构:根据一定的条件重复执行某语句或某段程序。,5.2结构化程序设计的三种基本结构,5.
9、2.1 顺 序 结 构 程 序 设 计,特点:程序的控制流程与语句的书写顺序完全一致,即计 算机执行程序时是按语句的自然顺序依次执行的。 流程图:只有一个起始框,一个终止框和几个执行框。 例:求长方形的面积和周长。,5.2.2 选择 结 构 程 序 设 计(1),简单分支 IF ENDIF 选择分支 IF ELSE ENDIF,clear use d:dbfts 10,20 say “请输入要查找的书号: get sh default space(10) read locate all for 书号=sh If .not.eof() 12,20 say 书号 14,20 say 书名 endi
10、f use,clear use d:dbfts 10,20 say 请输入要查找的书号: get sh default space(10) read locate all for 书号=sh If .not.eof() 12,20 say 书号 14,20 say 书名 Else 12,20 say “查无此书! endif use,*prog5-2.prg SET TALK OFF USE dz CLEAR 2,10 SAY 请输入姓名: GET xm DEFAULT SPACE(8) READ LOCATE ALL FOR 姓名=xm IF 单位=东财信息系 and 类别=学生 ? “姓名
11、:”+姓名+“编号:”+编号 ENDIF SET TALK ON USE RETURN,根据输入X的值,计算下面分段函数的值,并显示结果。,SET TALK OFF CLEAR INPUT x= TO x IF x=0 y=x*x+4*x-1 ELSE y=x*x+1 ENDIF ? 分段函数值为:+STR(y,10,2) SET TALK ON,5.2.3 选择 结 构 程 序 设 计(2),IF命令的嵌套结构 (IF语句允许嵌套,但不允许交叉嵌套) IF ELSE IF ELSE (.) ENDIF ENDIF,*prog5-3.prg SET TALK OFF USE ts CLEAR
12、10,10 SAY 请输入书名: GET sm DEFAULT SPACE(50) READ LOCATE ALL FOR 书名=sm IF EOF() WAIT 库中没有该书记录,按任意键继续 WINDOW ElSE DISPLAY OFF WAIT 删除该记录吗(YN)? TO ans WINDOW,IF UPPER(ans)=Y DELETE ELSE WAIT 您没有选择删除该记录的操作,程序结束 WINDOW NOWAIT ENDIF ENDIF USE SET TALK ON RETURN,5.2.2 选择 结 构 程 序 设 计(3),多分支选择语句 DO CASE CASE C
13、ASE CASE Otherwise ENDCASE,* prog5-7 SET TALK OFF CLEAR INPUT x= TO x DO CASE CASE x0 .and. x10 y=x*x+1 ENDCASE ? 分段函数值为:+STR(y,10,2) SET TALK ON,根据输入X的值,计算下面分段函数的值,并显示结果。,*prog4-4.prg SET TALK OFF USE ts CLEAR sm=space(40) 5,5 SAY 请输入书名: GET sm READ LOCATE ALL FOR 书名=sm IF EOF() WAIT 库中无此书,结束程序 WIN
14、DOW NOWAIT ELSE,DO CASE CASE year(出版时间)=1980 and year(出版时间)=2002 ? sm+是一本新书 ENDCASE ENDIF USE SET TALK OFF RETURN,【例5.4】对商品.dbf进行操作,输入待查商品号,如果该商品为日用品,则显示其品名和售价。,* prog5-4.prg SET TALK OFF CLEAR USE 商品 4,10 SAY 请输入商品号: GET bh DEFAULT SPACE(6) READ LOCATE ALL FOR alltrim(商品号)=bh IF alltrim(类别)=日用品 8,1
15、0 SAY 商品名称:+品名 10,10 SAY 商品零售价格:+STR(售价,8,2) ENDIF USE SET TALK ON,【例5.5】求解一元二次方程aX2+bX+c=0。用户通过键盘输入a、b、c的值,当方程有实根时,显示两个根的值;当方程无实根时,显示“此方程无实根!”,* prog5-5.prg SET TALK OFF CLEAR INPUT 请输入系数a= TO a INPUT 请输入系数b= TO b INPUT 请输入系数c= TO c d=b*b-4*a*c IF d=0 x1=(-b+SQRT(d)/(2*a) x2=(-b-SQRT(d)/(2*a) ? 此方程
16、的一个根是:,x1 ? 此方程的另一个根是:,x2 ELSE ? 此方程无实根! ENDIF SET TALK ON RETURN,* prog5-6.prg CLEAR USE 商品 4,10 SAY 请输入商品号: GET bh DEFAULT SPACE(6) READ LOCATE ALL FOR alltrim(商品号)=bh IF EOF() 8,10 SAY 库中无此商品! ELSE IF alltrim(类别)=日用品 8,10 SAY 商品名称:+品名 10,10 SAY 商品零售价格:+STR(售价,8,2) ELSE 8,10 SAY 此商品不属于日用品类! ENDIF
17、ENDIF USE,clear use d:dbfts 10,20 say 请输入要查找的书号: get sh default space(10) read locate all for 书号=sh If .not.eof() 12,20 say 书号 14,20 say 书名 Else 12,20 say “查无此书! endif use,4.2.3 循 环 结 构 程 序 设 计(1),当循环结构语句 Do While EndDo,clear use f:shxts CLEAR aa=space(10) 20,20 say请输入书号: get aa READ locate all for
18、书号=aa,if .not.eof() 22,20 say 书号 24,20 say 书名 else 22,20 say 查无此书! endif USE,clear use f:shxts ans=Y do while upper(ans)=Y CLEAR aa=space(10) 20,20 say请输入书号: get aa READ locate all for 书号=aa,if .not.eof() 22,20 say 书号 24,20 say 书名 else 22,20 say 查无此书! endif wait 是否继续y/n?“ to ans window enddo USE,Loo
19、p与exit 语句,Loop: 该命令是将控制转到本循环的开始处 Exit: 该命令是强行跳出循环 Do While loop exit EndDo,clear use f:shxts do while .t. CLEAR aa=space(10) 20,20 say请输入书号: get aa READ locate all for 书号=aa if .not.eof() 22,20 say 书号 24,20 say 书名,else 22,20 say 查无此书! endif wait 是否继续y/n? to ans WINDOW if upper(ans)=Y loop else exit
20、endif enddo USE,* prog5-8.prg SET TALK OFF CLEAR USE 商品 LOCATE FOR alltrim(类别)=日用品 DO WHILE not EOF() DISP 商品号,品名,售价 CONTINUE WAIT 按任意键,继续显示下一个 WINDOWS ENDDO USE SET TALK ON,求1-100的累加和 clear sum=0 i=1 do while i=100 sum=sum+i i=i+1 enddo ?sum=+str(sum,5),5.2.4 循 环 结 构 程 序 设 计(2),FOR 循环命令(用于次数确定的循环计算
21、) FOR = TO STEP exit loop ENDFOR | NEXT,clear sum=0 for i=1 to 100 step +1 sum=sum+i endfor ?sum=+str(sum,5),clear sum=0 for i=100 to 1 step-1 sum=sum+i endfor ?sum=+str(sum,5),思考:偶数和、阶乘?,INT(i/2)=i/2 Mod(i,2)=0,输出1200之间能被3和5整除的数的数量。 * prog5-10.prg SET TALK OFF CLEAR s=0 FOR i=1 TO 100 IF INT(i/3)=i
22、/3 and INT(i/5)=i/5 s=s+i ENDIF ENDFOR ? s=,s SET TALK ON,SET TALK OFF USE d:dbfdz CLEAR N=0 DO WHILE NOT EOF() IF 单位=东财会计学院 n=n+1 ENDIF SKIP ENDDO ? 会计学院的读者人数为+STR(n,3)+人 SET TALK ON USE,5.2.5 循 环 结 构 程 序 设 计(3),SCAN循环命令(用于对数据库文件进行操作) SCAN 范围 FOR while ENDSCAN 功能:若eof()为假,则执行循环体 一次并 执行skip 若eof()为真
23、,则退出SCAN循环,SET TALK OFF USE d:dbfdz CLEAR n=0 SCAN FOR 单位=东财会计学院 n=n+1 ENDSCAN ? 会计学院的读者人数为+STR(n,3)+人 SET TALK ON USE RETURN,* prog5-11.prg SET TALK OFF CLEAR USE 商品 SCAN FOR alltrim(类别)=日用品 DISP 商品号,品名,售价 WAIT 按任意键,继续显示下一个 WINDOWS ENDSCAN USE SET TALK ON,SET TALK OFF USE d:dbfts S=0 CLEAR DO WHILE
24、 NOT EOF() IF year(出版时间)=2002 SKIP LOOP ENDIF,S=S+1 ? 书名,作者,单价,出版时间 SKIP ENDDO ? 2002年以前出版的书籍数量为+STR(s,3)+种 USE SET TALK ON RETURN,SET TALK OFF USE dz DO WHILE .T. CLEAR Xm=space(8) 10,2 SAY 请输入要删除读者的姓名: GET xm READ LOCATE ALL FOR 姓名=xm IF EOF() WAIT 库中没有该读者记录,按任意键继续 WINDOW,ELSE DISPLAY WAIT 删除该记录吗(
25、YN)? TO ans WINDOW IF UPPER(ans)=Y DELETE ELSE WAIT 您没有选择删除该记录的操作,按任意键继续 WINDOW ENDIF ENDIF,WAIT 继续删除其他记录吗(YN)? TO ans WINDOW IF UPPER(ans)=N EXIT ENDIF ENDDO USE SET TALK ON RETURN,*prog4-6.prg CLEAR SET TALK OFF USE dz LOCATE ALL FOR 单位=东财信息系 DO WHILE NOT EOF() CLEAR DISPLAY OFF CONTINUE WAIT 按任意键
26、,继续显示下一个 WINDOW ENDDO USE RETURN,习题 1.1到10的阶乘 2.求一到十的平方和 3. S=1+2+。+100 4.编程输出1000以内能被7整除不能被3整除的数的和 5.统计出1-200间能被29整除的数的个数 6. 1-300之间同时被6和8整除的数的和 7.求S=1+22+33+1010 8. T=1+(1+2)+.+(1+2+20),循环程序的嵌套结构,Do While For . . Do While for . . EndDo next(endfor) . EndDo Next(endfor),clear for i=1 to 2 for j=1 t
27、o 3 ?i,j endfor endfor,5.2.6 宏的使用,5.2.6 宏替换 格式:&. 功能:用的值替换&符号和其后的字符型内存变量名。 使用举例: 1.转换数据类型 2.替换出变量 n=“68” x=10 ?&n-10 a=“x” 58 ?&a 10 返回,宏替换应用举例(续),3.替换出运算符 4.替换出命令 b=“/” ls=“list structure” store “10&b.5” to m use ts ?m,&m &ls(显示ts.dbf的 10/5 2 结构) 5.替换出文件名 accept”输入表文件名” to filename use &filename(打开
28、一个表文件),5.3 子程序、过程、自定义函数,5.3.1程序 1、主程序和子程序的概念 2、子程序的调用 DO WITH IN 3、子程序的嵌套,【例5.12】求从2开始的连续偶数阶乘的和。,主程序如下: * prog5-12.prg CLEAR input 输入一个偶数 to m s=0 for n=2 to m step 2 p=1 do sub1 s=s+p endfor ?s,子程序如下: *sub1.prg for i=1 to n p=p*i endfor return,本例还可以写成带参数的形式。 主程序 :DO WITH 子程序 :第一句必须设置相应的参数PARAMETERS
29、 来接收语句,主程序如下: * prog5-12.prg input 输入一个偶数 to m s=0 for n=2 to m step 2 p=1 do sub1 with n,p s=s+p endfor ?s,子程序如下: *sub1.prg PARAMETERS x,y for i=1 to x y=y*i endfor return,5.3.2 过程,1、过程及过程文件的定义 过程的结构如下: PROCEDURE PARAMETERS RETURN,2、过程的调用,* prog5-13.prg clear input “输入一个偶数” to m s=0 for n=2 to m st
30、ep 2 p=1 do a1 s=s+p endfor ?s PROCEDURE a1 for i=1 to n p=p*i endfoR return,PROCEDURE RETURN PROCEDURE RETURN,3.过程文件的调用 主程序 :开始set PROCEDURE to 过程名 结束:关闭过程文件CLOSE PROCEDURE 子程序建立过程文件:用modi comm过程名,主程序如下: * prog5-14.prg clear set PROCEDURE to 过程1 input “输入一个偶数” to m s=0 for n=2 to m step 2 p=1 do a1 s=s+p endfOR ?s,过程文件如下: 用modi comm 建立过程1.prg *过程1.prg PROCEDURE a1 for i=1 to n p=p*i endfOR return,5.3.3用户自定义函数 FUNCTION PARAMETERS RETURN 将 的值返回给函数调用表达式,即作为该调用表达式的值。 【
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河北省2026届初三第十一模(最后一卷)生物试题含解析
- 2026年湖南省长沙市雅礼教育集团下学期初三期中生物试题试卷含解析
- 粉色卡通风妊娠期口腔保健
- 辽宁省锦州市滨海期实验校2025-2026学年初三月考(一)化学试题含解析
- 2026年痕量气体探测PPM级精度实现方法
- 2026年八层立体鸡笼自动喂料传送带系统设计
- 2026年生活照护类20项服务项目内涵详解
- 2026届天津市红桥区高三下学期一模英语试题(含解析)
- 2025年临床执业《外科护理》真题试卷
- 乐器制造企业技术发展部主任的技术创新规划与实施
- 防欺凌家校联动共育
- 实验室计量器器具校准操作规程
- 土工布铺设工程监理实施细则
- 汽车贴膜类招商加盟计划书
- DL∕T 547-2020 电力系统光纤通信运行管理规程
- JCT2166-2013 夹层玻璃用聚乙烯醇缩丁醛(PVB)胶片
- 建筑材料说课公开课一等奖市赛课获奖课件
- 充电桩合作框架协议
- 新一代大学英语提高篇视听说教程2答案
- 再生水厂退水管线出水口及钢模围堰施工方案
- 二十世纪西方文论课件
评论
0/150
提交评论