《《精编》Visual FoxPro程序设计入门课程》由会员分享,可在线阅读,更多相关《《精编》Visual FoxPro程序设计入门课程(87页珍藏版)》请在金锄头文库上搜索。
1、5 1VFP程序 命令文件的建立和执行5 2VFP常用编程命令及函数5 3VFP流程图介绍5 4顺序执行5 5判断分支5 6循环结构5 7过程与用户自定义函数 第五章VisualFoxPro程序设计入门 返回 5 1VFP程序 命令文件的建立和执行5 1 1建立和编辑命令文件1 用MODIFYCOMMAND命令建立命令文件命令格式 MODIFYCOMMAND 命令功能 打开命令文件编辑窗口创建 编辑指定命令文件 说明 文件名的默认扩展名为 PRG 指定文件存在时 首先在磁盘上复制一同名 同内容的 BAK文件 编辑结束时 可用 End或 W结束命令并存盘 也可用Esc键作废编辑并结束命令 2 使
2、用菜单操作建立命令文件操作过程 文件 新建 选择 程序 单选按钮 单击 新建文件 将打开一编辑窗口 供用户输入程序 3 使用项目管理器建立命令文件有关项目管理器的详细内容参见第十三章 操作过程 首先打开项目管理器 选择 代码 选项卡 选择 程序 选项 单击 新建 按钮 也将打开一编辑窗口供用户输入程序 5 1 2执行命令文件命令基本格式 DO命令功能 首先打开指定的命令文件 然后从其第一条语句开始执行 执行完毕 自动关闭该命令文件 5 2VFP常用编程命令及函数 1 SETTALK命令命令格式 SETTALKON OFF命令功能 使命令结果显示 不显示 5 2VFP常用编程命令及函数1 系统初
3、始化命令 CLEARALL命令格式 CLEARALL命令功能 关闭所有打开的库文件 表文件及其相关文件 索引文件 备注文件等 清除所有内存变量 清除所有用户自定义下拉菜单 弹出式菜单和窗口 选择1号工作区为当前工作区 2 清屏命令 CLEAR命令格式 CLEAR命令功能 清除VFP主窗口或当前用户自定义窗口 3 终止程序执行语句 CANCEL命令格式 CANCEL命令功能 终止正在执行的程序 把控制权返回给COMMAND窗口 4 程序注释语句 NOTE 命令格式1 NOTE命令格式2 命令功能 标识一个非执行的注释行 5 3VFP流程图介绍 在编制程序尤其是编制复杂程序时 常用流程图来进行程序
4、设计和介绍程序的结构 流程图是形象的描述程序设计思想的好方法 它的特点是比较直观 清晰 5 4顺序执行 5 4 1顺序执行程序顺序执行程序特点 命令的执行顺序就是命令在程序中的排列顺序 每条命令均被执行一次 例1根据圆的半径计算圆的面积 程序清单 ClearInput 请输入半径 tor 圆的面积为 pi r r 5 5判断分支 5 5 1条件转向语句 IF ENDIF这是一种简单的分支语句 语句格式如下 IFENDIF值为 真 时 顺序执行IF和ENDIF间的语句行序列 然后再执行ENDIF后的语句 若其值为 假 时 则直接跳到ENDIF后面的语句继续执行 IF和ENDIF必须成对出现 图5
5、 4条件转向语句流程图 例2读程序清单 分析程序功能 ClearInput 请输入一个随机正整数 tonIfmod n 7 0 Pass Endif 5 5 2条件选择转向语句 IF ELSE ENDIF语句格式 IFELSEENDIF执行过程 计算条件表达式的值 若为真 则执行 然后跳过 从ENDIF后面的语句继续执行 否则 执行 然后再执行ENDIF后面的语句 例3读程序清单 分析程序功能 ClearInput 请输入一个随机正整数 tonIfmod n 7 0 Pass Else Sorry Endif 5 5 3IF语句的嵌套例4为鼓励存款 对定期存款时间少于1年的 利率为3 等于或大
6、于1年而少于3年的 利率为5 等于或大于3年而少于5年的 利率为7 5年以上的 利率为9 程序清单如下 图5 8例4的流程图 5 5 4情况语句 DOCASE ENDCASE情况语句格式 DOCASECASECASE CASE OTHERWISE ENDCASE 执行过程 依次计算每一个CASE语句对应的条件表达式 遇到第一个为真值者 则执行该语句下面对应的语句序列段 执行完后 直接跳转至ENDCASE后 如果所有的条件都不为真值 若无OTHERWISE子句 则不执行任何语句序列 跳转至ENDCASE后 有可选项OTHEWISE时 执行OTHERWISE子句对应的语句序列 再跳转至ENDCAS
7、E后 如果有多个条件表达式为真值 也仅仅执行第一个条件表达式为真值者对应的语句序列 DOCASE和ENDCASE必须成对出现 DOCASE与第一个CASE之间的任何语句将不会被执行 例5用情况语句重新编制例4 比较情况语句与条件转向语句的用法 5 6循环结构 5 6 1三种循环语句1 DOWHILE循环 1 语句格式 DOWHILEENDDO 2 执行过程 执行到DOWHILE语句时 首先计算的值 为真时 顺序执行循环体中的语句 即执行循环体 为假时 跳到ENDDO的下面一句去执行 即跳出循环体 循环结束 执行到循环结束语句ENDDO时 系统返回循环起始语句 再一次执行DOWHILE语句 3
8、说明 ENDDO和DOWHILE语句必须成对出现 在循环体内必须有使逐渐为假的语句 否则 将进入死循环 图5 11DOWHILE循环语句流程图 例 将一张厚度0 1mm并充分大的纸对折多少次后厚度超过珠峰的高度 2 SCAN循环语句格式 SCAN FOR ENDSCAN其中 SCAN为循环起始语句 ENDSCAN为循环结束语句 语句功能 对当前表指定范围内满足条件的记录依次执行所规定的操作 范围省略值为ALL 例 使用循环在一行内显示女职工姓名 3 FOR循环 1 语句格式 FOR TO STEP ENDFOR NEXT 2 执行过程 3 说明 在执行循环体时 若对初值 终值和步长三个表达式中
9、所含变量的值作了修改 不会影响循环初值 循环终值和步长 循环初值 循环终值和步长值必须合理 否则 不执行循环 执行循环体时 若修改了循环变量值 将会影响到循环执行次数 例 计算N 1 2 3 N例 计算 I 1 2 3 N例 找出3位的水仙花数 若一个3位正整数的各位数字的立方和等于该数本身 则称这样的数为水仙花数 算法 枚举 把100 999之间的每一个数都检验一遍 输出满足定义的即可 5 6 2对表文件记录进行操作时的循环控制方式1 对表文件记录进行逐条操作的循环控制方式格式1 SCANENDSCAN格式2 DOWHILE NOT EOF SKIPENDDO 例11用逐条记录循环操作的方法
10、 打印输出表文件职工 DBF中每条记录的姓名和工资 依题意 本例的流程图如下 图5 13例11的流程图 CLEARSETPRINTERON 姓名工资 OPENDATABASE雇员管理USE职工SCAN 姓名 工资ENDSCAN USECLOSEDATABASESETPRINTEROFF 2 选择表文件中符合条件的记录进行循环操作格式1 SCAN FOR ENDSCAN格式2 LOCATE FOR DOWHILEFOUND CONTINUEENDDO 例12修改表文件职工 DBF中职工的工资 对工资不超过600元且不低于500元者加10元 依题意 画流程图如图所示 图5 14例12的流程图 采用
11、SCAN语句 程序如下 CLEAROPENDATABASE雇员管理USE职工SCANFOR工资 500REPLACE工资WITH工资 10ENDSCANUSECLOSEDATABASE 若采用DOWHILE语句 则程序其它部分不变 仅把循环部分改为 LOCAFOR工资 500DOWHILEFOUND REPL工资WITH工资 10CONTENDDO 5 6 3循环结构的两条专用语句1 退出循环语句 EXIT前面介绍的循环语句格式中 一旦进入循环 循环次数实际上已经确定 但在实际应用中 常希望在某种情况下 强迫循环语句结束 去继续执行循环语句后的其它语句 EXIT语句可实现这一要求 语句格式 E
12、XIT语句功能 立即退出循环 转去执行循环终端语句之后的语句 EXIT语句通常包含在IF语句或DOCASE语句中 当某条件出现时 才被执行 通常用于无限次循环的控制 例如 DOWHILE T IFEXITENDIFENDDO类似地 EXIT可出现在DOCASE的某语句序列中 例13打印某种报表 每打印完一张 便提示用户是否还要打印 由用户输入的信息来进行控制 试编程序实现这种功能 依题意画流程图如图所示 程序如下 图5 15例13的流程图 CLEARALLDOWHILE T CLEARANSWER MESSAGEBOX 继续打印吗 36 打印提示 IFANSWER 7EXITENDIFENDD
13、O 2 短路循环语句 LOOP语句格式 LOOP语句功能 强迫结束本次循环体的执行 使流程返回循环开始语句 例14假设有一个表文件 工资 DBF 其中包括有 姓名 实发工资 等字段 有20个记录 现在要求显示出此表中前10个记录的 姓名 和 实发工资 但是 如果遇到 姓名 为 王林 的则不显示 编程序实现 依题意绘制流程图如图所示 图5 16例14的流程图 采用SCAN循环语句 程序如下 CLEAROPENDATABASE雇员管理USE工资SCANFORRECNO 10IF姓名 王林 LOOPENDIF 姓名 实发工资ENDSCANUSECLOSEDATABASE采用DOWHILE循环语句的程
14、序见P 98 自学 例15令计算机从零开始计数 并将奇数累加求和 当奇数累加和大于300时 结束计数 否则 继续计数 依题意编程如下 X 0JSH 0DOWHILE T X X 1DOCASECASEINT X 2 X 2LOOP CASEINT X 2 X 2JSH JSH XIFJSH 300EXITENDIFENDCASEENDDO 奇数和 JSH 5 6 4循环结构应用举例1 循环语句与其它分支判断语句的嵌套所谓嵌套 即为 在一个语句结构中 包含了另一个完整的语句结构 例16建立一个命令文件修改表文件职工 DBF中的工资 对于工资500元与600元之间的职工增加20元 而对于工资大于6
15、00元的职工增加100元 要求逐条记录进行操作 OPENDATABASE雇员管理USE职工SCANDOCASECASE工资 500REPLACE工资WITH工资 20CASE工资 600REPLACE工资WITH工资 10ENDCASEENDSCANUSECLOSEDATABASE 在嵌套使用时 注意不要互相交叉 下面给出两种错误的形式 如图5 18所示 例17假设某中学有一个管理记录本校学生成绩的表文件XSCJ DBF 它的结构如下 学号 N 5 姓名 C 8 性别 C 2 年级 N 2 语文 N 5 2 数学 N 5 2 物理 N 5 2 化学 N 5 2 英语 N 5 2 主平均 N 5
16、 2 总平均 N 5 2 升留判定 C 6 编写程序 根据表中录入的各门课成绩 计算出每个学生的语文和数学两门主课的平均成绩与五门课的总平均成绩 然后根据学生的成绩来决定学生是升级 留级 还是补考 如果主课平均成绩及格者 则升级 主课平均成绩不及格 但总平均成绩及格的 则同意补考 主课平均成绩不及格且总平均成绩也不及格者 则留级 最后分别打印出升级学生名单 留级学生名单和补考学生名单 依题意 本例的流程图如图5 19所示 图5 19例17的流程图 USEXSCJSCANREPLACE主平均WITH 语文 数学 2REPLACE总平均WITH 语文 数学 物理 化学 英语 5DOCASECASE主平均 60REPLACE升留判定WITH 升级 CASE主平均 60REPLACE升留判定WITH 补考 ENDCASEENDSCAN LISTFOR升留判定 升级 TOPRINTLISTFOR升留判定 留级 TOPRINTLISTFOR升留判定 补考 TOPRINTUSE 2 多重循环多重循环即循环的嵌套 在一个循环的循环体中 包含有另一个循环 我们称外层循环为外循环 被包含的循环称为内循环