VF数据库第11章程序设计基础.ppt_第1页
VF数据库第11章程序设计基础.ppt_第2页
VF数据库第11章程序设计基础.ppt_第3页
VF数据库第11章程序设计基础.ppt_第4页
VF数据库第11章程序设计基础.ppt_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

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

文档简介

第十一章结构化程序设计 11 1VFP的工作方式 Vfp系统提供了三种工作方式 即命令方式 菜单方式和程序文件方式 1 命令方式特点 输入一条操作命令 系统完成一个数据库的操作 2 菜单方式 通过菜单选择相应的操作 3 程序方式 所谓程序执行方式 就是将实现某一功能的VFP命令序列 在编辑器中编成特定的程序文件 存放在磁盘中 其文件扩展名为Prg 当我们需要实现这一功能时 就执行该程序 特点 通过程序文件中的命令 完成对数据库的操作和系统环境的设置 4 程序文件的建立 执行和编译1 命令方式ModifyCommand2 菜单方式 单击系统菜单 文件 新建 弹出 新建 窗口 在 新建 窗口中 选择 程序 新建文件 进入 程序文件编辑 窗口 在 程序文件编辑 窗口中 逐条输入命令行 结束后 单击系统菜单 文件 保存 在窗口的 保存文档为 对话框中 输入程序文件名 默认的文件类型为 Prg 单击 保存 按钮 建立程序文件的操作结束 5 程序文件的执行程序文件保存在磁盘上 在需要运行时可从磁盘调入内存执行 注意 程序运行后 会自动产生一个文件类型为 Fxp的同名的编译程序 1 命令方式Do 程序文件名 2 菜单方式单击系统菜单的 程序 运行 在弹出的 运行 窗口中 选择路径 双击需要运行的程序名 11 2程序的基本结构 在VFP中 常见的程序基本控制结构有 1 顺序结构 顺序结构是最基本 最普通的结构形式 运行时 也是按照命令书写时的先后次序来执行 在程序执行的过程中不改变命令执行次序的一种结构 2 分支结构 编写顺序结构程序虽然简单 但在实际应用中 经常需要对事物做出一定的判断 并依据判断的结果采取不同的处理行为 例如 求圆的面积 对半径要做处判断 是否大于0 如果是才能参加运算 否则不能运算 输出参数错误信息 分支结构有三种基本格式 单分支选择 二分支选择 选择函数 和多分支选择 3 循环结构 重复循环操作 特别是若根据条件来决定是否重复执行某段程序 那么顺序结构和分支结构显然是无能为力 Vfp提供的循环结构程序设计就可以解决这一问题 事实上70 以上的实际问题的处理过程都需要使用循环结构 循环结构是当条件满足时 反复执行循环体内的命令系列 一直到条件为假时 才退出循环 执行循环体外的系列命令 4 过程结构 在程序的许多位置反复执行某些程序段 且常将这些程序段和嵌入它的程序分开 形成独立的程序序列 待使用时再调入程序中 以实现不同位置上的重复操作 1 输入语句输入语句提供了在程序运行的过程中暂停程序的执行 等待用户从键盘上输入数据 当用户以回车键结束输入时 系统将表达式的值存入指定的内存变量 程序继续运行 输入语句有非格式化输入命令和格式化输入命令两种 1 非格式化输入命令非格式化输入命令共有三条 Input Accept和Wait Input To 内存变量 Accept To 内存变量 Wait To 内存变量 11 3顺序结构语句 参数说明 Input命令能接受除备注型 通用型以外的数据类型 但数据为字符型 日期型或逻辑型时应使用相应的定界符 Accept命令只接受字符型数据 输入字符串时 不需要用定界符 Wait To 内存变量 命令只接受单个字符 如果执行不带任何参数的Wait命令会弹出 按任意键继续 的提示 例 在学生档案表中 按姓名直接定位查询学生记录 Use学生档案表Accept 请输入查询学生的姓名 ToA1LocateFor姓名 A1Display例 在学生档案表中 按年龄顺序定位查询学生记录 Use学生档案表Input 请输入查询学生的年龄 ToA2LocateFor年龄 A2DisplayContinueDisplay 2 屏幕格式输入语句在指定行 列的位置 从键盘上为变量赋值 这个变量可以是内存变量 也可以是字段变量 如果是内存变量 必须事先定义好 如果是字段变量 必须事先打开相应的数据表 Say Get 参数说明 Say 是作为被编辑的变量前面出现的提示 一般都是用字符串表示 Get 变量可以是内存变量 也可以是字段变量 如果是内存变量必须在使用前先定义 如果是字段变量 则要先打开相应的数据表 数据类型可以是数值型 字符型 日期型 逻辑型或备注型 Get命令 必须用Read语句来激活才能完成对数据的编辑 多个 Get命令 可以用一个READ语句来激活 例 用屏幕格式输入语句输入数值 计算公式C 2A 3B的值 A 0B 0 10 20Say 请输入数值 GetA 11 20Say 请输入数值 GetBRead C 2A 2B Str 2 A 2 B 例 请编辑一个程序 能根据学号和课程名称来修改成绩 CLEARXh Space 7 Kcdm Space 3 Use学生成绩表Excl 10 20Say 请输入要修改成绩的学号 Getxh 12 20Say 请输入要修改成绩的课程代码 GetkcdmReadLocateFor学号 Xh And 课程代码 Kcdm 12 20Say 请输入修改成绩 Get成绩Read 2 输出语句 1 非格式化输出命令格式 表达式表 格式2 表达式表 格式3 表达式表 计算表达式的值并输出 参数说明 表示在当前行的下一行的首位输出 表示在当前行光标处输出 表示向打印机输出 如果是字符 日期 逻辑常量应使用定界符 如果是一个表达式 则各部分的数据类型必须一致 如果是 各表达式之间用逗号 分隔 例 显示当前的日期和时间与表达式的值 今天的日期是 DATE 时间是 TIME 如果用 连接该如何表达A 10B 20 A 10 B Str A 10 B Space 2 A 20 B Str A 20 B 4 例 显示字符型表达式的值 祝贺 北京申奥 成功 字符串的连接 2 屏幕格式输出命令 SAY Picture P223在指定行 列位置上输出表达式的值 参数说明 Say 表达式可以是常量 字符 日期 逻辑常量需要使用相应的定界符 内存变量 字段变量以及由它们组成的表达式 表达式只能是一个 而且 表达式的各部分的数据类型必须一致 例 显示字符串常数 3 5Say 这是一个显示字符串常数的例子 例 显示学生档案表的第四条记录的字段内容 Use学生档案表Goto4 6 6Say 学号 学号 7 6Say 姓名 姓名 9 6Say 年龄 Str 年龄 2 数据类型必须一致 10 6Say 出生日期 Dtoc 出生日期 二 清屏与注释语句1 清屏语句Clear清除屏幕上所有显示的内容 2 注释语句Note Note和 注释语句在程序中单独作为一行 作为程序的注释 注释语句一般写在命令的后面 作为该命令的注释 三 终止程序执行语句1 Return或Cancel终止程序的执行 关闭打开的命令文件 返回到Foxpro系统的命令窗口 2 Quit终止程序的执行 关闭打开的命令文件 返回到windows操作系统状态 3 Retry终止程序的执行 返回到调用行本身 可以实现程序的重复调用 4 文本输出命令TEXT格式 TEXT 提示信息 ENDTEXT 例 编写一个求梯形面积的程序 Input 请输入梯形的上底 ToMInput 请输入梯形的下底 ToNInput 请输入梯形的高 ToH 梯形面积 Str M N H 2 10 2 Return例 编写一个在 学生档案表 中查询年龄大于18岁的98级浙江籍的学生记录的程序 注意 假设数据表字段中只有出生日期而无年龄字段 学号前二位为年级 ClearUse学生档案表ListForYear Date Year 出生日期 23 And Subs 学号 1 2 98 And 籍贯 浙江 UseReturn 编写顺序结构程序虽然简单 但在实际应用中 经常需要对事物做出一定的判断 并依据判断的结果采取不同的处理行为 例如 求三角形的面积 对三条边要做处判断 是否构成三角形 如果是才能参加运算 否则不能运算 输出参数错误信息 分支结构有三种基本格式 单分支选择 二分支选择 选择函数 和多分支选择 11 4分支结构语句 1 单分支选择IfEndifReturn参数说明 单分支选择结构是当条件表达式为真时 执行 然后 再执行EndIf后面的 如果条件表达式为假 则直接执行EndIf后面的 IF和EndIf必须成对出现 缺一不可 可以是表达式或表达式的逻辑组合 表达式的值必须是逻辑值 例 从键盘上输入一个数 若是偶数 则输出 Input 请输入数据 ToXIfInt X 2 X 2 X 为偶数 EndifReturn例 在学生档案表中 查询王启明的籍贯是否为 江西 如果是 则输出本记录的姓名 学号 班级和年龄 ClearUse专业特长LocateFor编号 GZ05002 If职称 教授 replalce职称with 副教授 Endifbrowselast 在上程序并不完善 即当条件不满足时 程序中不能做出进一步的处理 这就说明单分支的功能是有限的 不能完善地解决分支处理问题 而二分支选择结构就可以处理好这个问题 2 双向分支选择结构If 条件表达式 A系列命令 Else B系列命令 Endif D系列命令 Return 二分支选择结构 首先判断 条件表达式 的逻辑值 若条件为 真 时 执行 A系列命令 然后 再执行ENDIF后面的 D系列命令 若条件为 假 时 执行Else后面的 B系列命令 然后 再执行ENDIF后面的 D系列命令 例 当行李重量W20KG时 其超过部分则加倍计算收费 Input 请输入行李重量 ToWIfW 20Y W 0 15ElseY W 0 15 W 20 0 3Endif 运费y YReturn 例 用二分支选择结构完善例5 19程序 Input 输入三角形的a边 ToAInput 输入三角形的b边 ToBInput 输入三角形的c边 ToCIfA B C And B C A And C A BP A B C 2S Sqrt P P A P B P C 三角形的面积为 SElse 输入的边长有错 无法构成三角形 EndifReturn 补充 3 IIF 选择函数IIF 函数是双分支选择语句If Else Endif的简单形式 在某些情况下 可以用IIF 函数代替If Else Endif语句 从而简化条件描述 提高程序的执行速度 IIF 参数说明 若的值为真 则函数返回的值 否则 返回的值 返回值的类型可以是字符型 日期型 数值型和逻辑型 与的数据类型必须是一致 例 在工资管理数据表中 如果基本工资小于700时 将基本工资加150 否则 加120 Use工资管理数据表ReplAll基本工资With基本工资 Iif 基本工资 700 150 120 4 多向分支选择结构虽然可用IF语句嵌套的方式解决多分支选择问题 但是 如果选择的分支很多 则编写的程序可读性差且易出错 这时 一般使用DOCASE ENDCASE多重分支选择结构来解决 参数说明 执行多重分支选择结构时 会依次判断至的逻辑值 只要一遇到条件表达式为真时 就执行该条件表达式下面的语句序列 执行结束后 立即转向执行Endcase之后的语句 其余的Case语句 即使条件成立 也不执行判断 当所有的Case语句条件都不成立时 如果有Otherwise选项 则执行Otherwise选项下面的语句 否则 转向执行Endcase之后的语句 DoCase Endcase必须配套 DoCase与第一个Case之间不允许插入任何可执行语句 例 当输入x为10时 程序执行的结果为 Input 请任意输入一个数 X ToXDoCaseCaseX 10Y 2 X 5CaseX 15AndX 20Y X 5OtherwiseY 10 X 5EndCase Y 请问当X 18时 结果是多少 例 利用DoCaseEndcase语句实现菜单选择 对于一般的数据库应用系统 总是先编一个主控模块 也叫主菜单 它反映了这个系统的几个主要功能 展现在用户的面前 供用户选择所要完成的工作 以下程序是学生管理系统的主菜单 Use学生档案表 6 6Say 显示主菜单 7 6Say 1 退出系统 8 6Say 2 学生数据录入 9 6Say 3 学生数据修改 10 6Say 4 学生数据查询 Accept 请选择功能码 1 4 ToOk DoCaseCaseOk 1 CancelCaseOk 2 Append 执行学生数据录入CaseOk 3 Accept 请输入修改数据的学号 ToXhLocateFor学号 XhEditCaseOk 4 Accept 请输入查询的学号 ToXhLocateFor学号 XhDisplayOtherwise 输入数字错误 Endcase 重复循环操作 特别是若根据条件来决定是否重复执行某段程序 那么顺序结构和分支结构显然是无能为力 Vfp提供的循环结构程序设计就可以解决这一问题 事实上70 以上的实际问题的处理过程都需要使用循环结构 循环结构是当条件满足时 反复执行循环体内的命令系列 一直到条件为假时 才退出循环 执行循环体外的系列命令 在Vfp中 循环结构有三种形式 当 型循环 条件循环 DoWhile Enddo 计数循环For Endfor和 指针 型循环Scan Endscan 11 5循环结构语句 1 简单的 当 型循环结构 1 简单 循环结构的基本形式DoWhile 条件表达式 实现功能的语句系列 Loop 循环体语句 Exit Enddo重复判断 条件表达式 的逻辑值 当其值为 真 时 反复执行DoWhile与Enddo之间的 循环体语句 直到 条件表达式 的逻辑值为 假 时 结束循环 执行Enddo后面的语句 在循环体中如遇到Loop短路语句 就不执行Loop与Enddo之间的所有语句 直接返回DoWhile循环起始语句 继续进行下一轮的循环判断 在循环体中如遇到Exit命令 就强行退出循环 即不执行Exit与Enddo之间的所有语句 直接转向执行Enddo语句后面的命令 结束循环 2 当 型循环结构程序一般由四个主要部分组成1 循环的初始部分常写在循环程序的起始语句前 给循环变量赋初值 2 循环的起始语句 控制语句 它表示循环由此开始并判断本次循环是否执行 当 条件表达式 其值为 真 时 则进入循环体执行一次循环 然后 通过执行Enddo循环的终端语句 自动返回到DoWhile循环起始语句 进行下一次的循环判断 若 条件表达式 的逻辑值为 假 时 就结束循环 执行Enddo后面的语句 3 循环体语句 功能的实现部分它是循环程序中被反复执行的循环体的一部分 完成循环程序的主要的操作 实现程序功能 它一般由实现功能的命令系列组成 循环变量的修改部分为防止死循环 在循环体中 必须修改循环变量的值 它保证在循环的过程中 使循环变量的值按一定的规律变化来修改 从而 实现退出循环 4 循环的终端语句返回循环的起始语句 进行下一次循环判断 3 While的三种基本形式1 随机次数的循环DoWhile T 随机次数的循环也称 永真 循环是用于进行随机次数的循环场合 它适合在数据库中 进行任意次数的查询 修改 增加 删除记录的操作 永真 循环通常由操作者在需要时 用Exit命令来强制退出循环 Use 数据表名 DoWhile T 循环体语句 Wait 还继续吗 Y N ToA1IfUpper A N Exit 强制退出循环EndifEnddo 例 在学生档案表中 按姓名查找某一学生 找到后 用格式化命令输出该同学的姓名 班级 年龄 出生日期 否则 输出 查无此学生 要求进行多次查找 直到用户不再想查找时结束 Use学生档案表DoWhile T Accep 请输入姓名 ToXmLocateFor姓名 Xm IfFound 6 12Say 姓名 姓名 6 28Say 班级 班级 7 12Say 年龄 Str 年龄 2 0 7 28Say 出生日期 Dtoc 出生日期Else 查无此学生 EndifWait 是否继续查询 Y N ToAaIfUpper Aa N Exit 强制退出循环命令EndifEnddoReturn 2 库扫描循环 未知循环次数 DoWhileNot Eof 用于未知循环次数的场合 适合在数据表中进行统计 如果用Locate直接定位 则Locate命令必须写在循环体的外面 循环体内用Continue继续定位 来移动记录指针 如果用Seek Find索引定位 则Seek Find命令必须写在循环体内 用Skip命令来移动记录指针 库扫描循环用文件尾函数控制循环 当函数Eof 的值为 F 时 执行循环体 当Eof 的值为 T 时 终止循环 Use 数据表名 DoWhile Not Eof 循环体语句 Skip Continue Enddo 例 在学生档案表中按籍贯统计学生人数及平均入学年龄 1 用Locate直接定位N1 0 设置初值 存放记录个数S1 0 设置初值 存放年龄总和Use学生档案表Accept 请输入要统计的籍贯 ToJgLocateFor籍贯 JgDoWhile Not Eof N1 N1 1S1 S1 入学年龄ContinueEnddo Jg 的学生人数 Str N1 4 人 Jg 学生的平均入学年龄 Str S1 N1 2 0 岁 UseReturn 2 用索引定位N1 0 设置初值 存放记录个数S1 0 设置初值 存放年龄总和Use学生档案表Indexon籍贯tojgAccept 请输入要统计的籍贯 ToASeekADoWhile Not Eof N1 N1 1S1 S1 入学年龄SkipEnddo A 的学生人数 Str N1 4 人 A 学生的平均入学年龄 Str S1 N1 2 0 岁 UseReturn 3 有限循环doWhileK N用于已知循环次数的场合 常用于数值计算和图形显示 固定次数的循环在程序开始时 确定一个内存变量用来控制循环的次数 称为循环变量 首先为循环变量赋一个初值 在DoWhile语句后面以循环变量与循环变量终值的逻辑关系为表达式 也就是说规定了当循环变量达到某一个数值时循环终止 由于循环变量的值在程序中通常是不能够自动增加或者减少的 所以 通常用K K 1来修改循环变量值 强迫循环变量随循环次数的增加而改变 以达到退出循环的值 控制循环 Input 请输入n的值 ToNK 1 置k的初始值DoWhileK N 循环体语句 K K 1 修改循环变量值Enddo 例 任意输入20个自然数 编程求其和及平均值 分析 用循环控制输入20个自然数并求和 故设置一个累加器sum和循环计数器k Sum 0K 1 设置循环条件初值DoWhileK 20 循环控制的起始语句Input 请输入自然数 ToXSum Sum X 循环体语句K K 1 用来修改循环条件Enddo 循环结束语句 20个自然数的总和为 SUM 平均值为 SUM 20Return 例9 32求1到100之间的奇数和 分析 判断某一数N是否为奇数 只要Int N 2 N 2 即该数除以2的商与取整后的结果一致 该数为偶数 否则为奇数 通过计数器N N 1产生0 100之间的数据 逐一进行判断 当为偶数时 用Loop语句返回DoWhile起始循环 当为奇数时进行累加求和 其程序如下 ClearS 0N 1DoWhileN 100IfInt N 2 N 2N N 1 用来修改循环条件LoopElseS S NN N 1 用来修改循环条件EndifEnddo 1到100的奇数和 SReturn 四 计数循环计数循环其功能相当于已知循环次数的条件循环 对于事先已经知道循环变量的初值与终值 并且循环变量是有规律的变化 有步长增量的概念 时 一般往往使用FOR计数循环结构 计数循环变量的值会自动按步长增加 可以省去条件循环结构修改循环变量的命令 计数循环结构适合解决循环次数确定的应用问题 如 公式计算和图形显示 1 简单的计数循环For To Step 步长 Loop ExitEndFor 参数说明 For是循环起始语句 EndFor是循环终端语句 必须配套使用 两者之间是循环体 是数值型的内存变量 不必先定义 为循环变量的增量 每循环一次循环变量会自动按步长增加 它为可选项 若其省略 系统默认步长为1 若为正值 则为递增型循环 若为负值 则为递减型循环 步长不能为0 否则会造成死循环 循环体中可以使用Exit命令来强行退出For循环 也可以使用Loop命令直接返回For起始语句 而不执行Loop与EndFor之间的语句 例 完成实现计算p 1 1 2 2 1 10 10 的程序 P 0ForN 1To10 N NEndfor P PReturn 例 编写求n 的程序 Input 输入n的值 ToNP

温馨提示

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

评论

0/150

提交评论