




已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,第六章,结构化程序设计,2,本章目录,第一节 程序文件 第二节 程序的基本结构 第三节 程序的模块化 第四节 程序调试,3,第一节 程序文件,VF中的程序设计 程序文件的建立 结构化程序设计基础 编程的几点说明,4,一、VF中的程序设计,VF的工作方式有两种: 交互操作方式(命令、菜单) 程序文件方式 Visual FoxPro系统提供的命令丰富,且功能强大,把这些命令和程序设计语句有效地组织在一起,就形成了实现某一特定功能的程序。 Visual FoxPro系统的程序有两个特点:一是程序控制流模式,由顺序、分支、循环三种基本结构构成。二是面向对象可视化的结构程序模块,在每个模块的内部也是由程序控制流组成。,5,二、程序文件的建立,建立、修改程序文件 Modify Command d:path程序文件名 程序文件扩展名为.PRG 运行程序文件 Do d:path 程序文件名 With 参数表 程序文件名(参数表) 程序文件可被修改并重新运行,且可多次运行;一个程序可调用其他程序(子程序、过程),6,1原则和方法 结构化程序设计是一种程序设计方法,其设计原则和方法是:自顶向下,逐步求精,程序结构模块化。 2结构化程序的三种基本结构 顺序结构:在程序执行时,根据程序中语句的书写顺序依次执行的命令序列。 选择结构:在程序执行时,根据不同的条件,选择执行不同的程序语句。 循环结构:使某些语句或程序段重复执行若干次。 每一个基本结构可以包含一个或多个命令。 过程结构:如果一些程序段需要反复执行多次,但这些程序段不是集中在一个固定的位置上重复执行,就可把这些程序段独立出来形成一个过程或自定义函数。,三、结构化程序设计基础,7,图6-1 顺序结构流程图 图6-2 分支结构流程图,三、结构化程序设计基础,图6-3 当型循环结构流程图形 图6-4 直到型循环结构流程图,8,四、编程的几点说明,注释语句 以note、* 或 & 开头的代码行 命令后添加注释,则以&开头 命令如果分行书写,应在行尾加续行符; Quit:退出VF系统。 Wait语句 Wait 提示符 windows at 行,列 Timeout 数值表达式 Set default to 默认路径 &设置默认路径 Set talk on|off &打开|关闭命令执行时的对话开关 Set century on | off &是否用四位表示年 Set fields to 字段名表 &设置字段筛选 Set filter to 条件 &设置记录筛选 Set sysmenu to default &恢复系统的默认菜单,9,第二节 程序的基本结构,顺序结构 选择结构 循环结构,10,一、顺序结构,顺序结构是指按程序书写的先后顺序执行。 例:p1.prg set talk off set dafault to e:图书管理系统 open database 学生管理学生管理 wait “按任意键显示学生表的内容” select * from 学生 &显示学生表的内容 close database all,11,二、分支结构,1.单向分支 单向分支语句,即根据条件表达式的值,决定某一操作是否执行。 If 条件 命令行序列 EndIf,12,2.双向分支 双向分支语句,即根据条件表达式的值,选择两个操作中的一个来执行。 IF 条件 命令行序列1 ELSE 命令行序列2 EndIf,二、分支结构,13,举例:闰年问题,输入一个年份,编程判断是否是闰年。 一个年份满足以下条件之一即为闰年: 能被4整除且不能被100整除 能被400整除 Input “请输入年份:” to year IF year%4=0 AND year%100!=0 or year%400=0 ? “是闰年“ ELSE ? “不是闰年“ ENDIF,14,3.多向分支 Do Case Case 条件1 命令行序列1 Case 条件2 命令行序列2 Otherwise 命令行序列n+1 EndCase 举例:将求闰年问题改成多向分支结构,二、分支结构,15,举例:成绩判定,Input “请输入成绩:“ to 成绩 do case case 成绩=85 ? “优秀“ case 成绩=75 ? “良好“ case 成绩=60 ? “及格“ case 成绩=0 ? “不及格“ otherwise ? “成绩输入错误!“ ENDcase,16,4.使用分支语句应注意的几点 IfEndIf和Do CaseEndCase必须配对使用 条件可以是各种表达式或函数的组合,其值必须是逻辑值。 命令行序列:可以由一个或多个命令组成,可以是条件控制语句组成的嵌套结构。 Do CaseEndCase命令中,若有多个Case的条件值为真时,只执行第一个条件值为真的,然后执行 EndCase的后面的第一条命令。,二、分支结构,17,三、循环结构,1.“当”型循环 “当”型循环,即根据条件表达式的值决定循环体内语句的执行次数。 Do While 条件 命令行序列 EndDo,18,举例:累加和累乘,求1+2+3+100 i=1 s=0 do while i=100 s=s+i i=i+1 enddo ? S 思考:求10!程序怎样改?,求1!+2!+3!+10! n=1 sum=0 do while n=10 i=1 s=1 do while i=n s=s*i i=i+1 enddo sum=sum+s n=n+1 enddo ? sum,19,2.“计数”型循环 “计数”型循环,即根据循环变量的初值、终值和步长,决定循环体内语句的执行次数。 For 循环变量=初值 To 终值 Step 步长 命令行序列 EndForNext,三、循环结构,20,举例:累加和累乘,求1+2+3+100 s=0 for i=1 to 100 step 1 s=s+i enddo ? S 思考:求10!程序怎样改?,求1!+2!+3!+10! sum=0 For n=1 to 10 s=1 for i=1 to n s=s*i endfor sum=sum+s endfor ? sum,21,3.“指针”型循环 “指针”型循环,即根据表中的当前记录指针决定循环体内语句的执行次数。只适合于表循环。 Scan 范围 For 条件 命令行序列 EndScan,三、循环结构,22,程序举例,求每门课程的前三名,包含课程号,学号和成绩,并将结果存放 在表result中。 select 课程号,学号,成绩 from 成绩 where .f. into dbf result select dist 课程号 from 成绩 into cursor kcID select kcid scan select 课程号,学号,成绩 from 成绩 where 成绩.课程号=kcid.课程号; order by 成绩 desc top 3 into array sz insert into result from array sz endscan,23,4.使用循环语句应注意的几点 Do While和EndDo、For和EndFor、Scan和EndScan必须配对使用。 命令行序列:可以是任何FoxPro命令或语句,也可以是循环语句,即可以为多重循环。 循环变量:应是数值型的内存变量或数组元素。 Exit和Loop命令嵌入在循环体内,可以改变循环次数,但是不能单独使用。 Exit:退出循环。 Loop:重新下一次循环。,三、循环结构,24,编程示例:随机产生x个09的随机整数,para x DIME A(x) FOR I=1 TO x A(I)=INT( 10*RAND() ) ? A(I) ENDFOR,25,编程示例:求水仙花数,for i=1 to 9 for j=0 to 9 for k=0 to 9 if(i*3+j*3+k*3=i*100+j*10+k) ? i*100+j*10+k endif endfor endfor endfor,for i=100 to 999 x=i%10 y=int(i/10)%10 z=int(i/100)%10 if (x*3+y*3+z*3=i) ? i endif endfor,26,编程示例:x元钱买x只鸡,*para x x=100 for cock=1 to int(x/5) for hen=1 to int(x/3) for chick=1 to x-2 if (cock+hen+chick=x and; cock*5+hen*3+chick/3=x) ? Cock,hen,chick endif endfor endfor endfor,27,第二节 过程和过程文件,过程和过程文件 过程和过程文件的建立 过程和过程的使用 变量的作用域 参数传递,28,一、过程与过程文件,过程是由一个或多个命令、语句构成的程序段。它以过程说明语句Proc开头,以返回语句Return结束。 过程文件可以存储多个过程。 打开一个过程文件后,就可以调用其中定义的每个过程。 使用过程时,通过过程名调用并执行。,29,1. 过程文件的建立 modify command 过程文件名 2. 过程的定义(放在过程文件中) Proc 过程名 Para 参数表 命令行序列 Return 返回值 EndProc,二、过程与过程文件的创建,function 过程名 Para 参数表 命令行序列 Return 返回值 Endfunc,30,1. 过程文件的打开 Set Proc to 过程文件名 2. 过程的调用 Do 过程名 过程名() Do 过程名 with 实参表 过程名(实参表) 3. 过程文件的关闭 Set Proc to Close Proc,三、过程与过程文件的使用,31,4. 参数传递 Do 过程名 with 实参表 如果参数是常量或表达式,则按值传递; 如果参数是变量,则按引用传递(实参和形参是同一变量,尽管它们的名字可能不同)。 过程名(实参表) 默认为按值传递 使用命令可改变参数传递方式: set UDFP to value &设置成按值传递 set UDFP to refe &设置成按引用传递,三、过程与过程文件的使用,32,Clear all X=100 ? X Proc sub1 x=20 Endproc,函数参数传递举例,Clear all X=100 ? X Proc sub1 local x x=20 Endproc,Clear all X=100 ? X Proc sub1 private x x=20 Endproc,33,VF中的内存变量按作用域可分为三类:公共变量、私有变量和局部变量 1. 公共变量:在任何模块中都可使用的变量。 Public 内存变量表 2. 私有变量:在建立它的模块及其下属各层模块中使用的变量。 3. 局部变量:只在建立它的模块中使用的变量。 Local 内存变量表 4. 变量的隐藏 private 内存变量表 功能:隐藏上层模块中可能存在的同名内存变量。 说明: 1. 程序中没有说明的内存变量,均为私有变量。 2. 命令窗口中建立的内存变量,均为公共变量。 3. 用Para说明的形参为私有变量,用Lpara说明
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版科技园区廉洁从业自律合作协议
- 二零二五年大理石石材市场调研与分析服务协议
- 二零二五年度旅游服务标准化合同协议
- 2025版南通市区人才公寓租赁管理协议
- 2025版艺术品担保答辩状范本编制合同
- 2025至2030年中国抗菌肽生物兽药行业发展监测及市场发展潜力预测报告
- 二零二五版智能化设备租赁与操作培训合同
- 二零二五年度仓储物流场地租赁协议范本
- 二零二五年度专业二手车买卖及售后服务合作协议
- 二零二五年度土地储备使用权转让合同
- 鼓胀中医护理
- 2024年青海省门源回族自治县事业单位公开招聘村务工作者笔试题带答案
- 设备整厂出售合同协议
- 2025-2030中国高k和ALD和和CVD金属前体行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国缝纫机器人行业市场发展趋势与前景展望战略研究报告
- 2025年4月12日衢州事业单位及市直遴选(选调)笔试真题及答案解析
- 油气仓储物流优化-全面剖析
- 妊娠剧吐护理查房
- 机械设备维护手册
- 广东省五校(朝汕实验、高州中学、石门、湛江一中等)2024-2025学年高三上学期开学联考数学试题(解析版)
- 城市轨道交通列车司机初级工理论习题集
评论
0/150
提交评论