《数据库及应用——VFP》-- 程序设计基础ppt课件.ppt_第1页
《数据库及应用——VFP》-- 程序设计基础ppt课件.ppt_第2页
《数据库及应用——VFP》-- 程序设计基础ppt课件.ppt_第3页
《数据库及应用——VFP》-- 程序设计基础ppt课件.ppt_第4页
《数据库及应用——VFP》-- 程序设计基础ppt课件.ppt_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

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

文档简介

第九课 面向过程程序设计基础 1 本章要点 VisualFoxPro的工作方式程序文件的建立与编辑程序文件的调用程序的基本结构常用的交互输入语句分支结构循环结构过程与过程文件程序设计实例程序设计的一般问题程序调试工具 2 VFP提供了三种工作方式 即命令方式 菜单方式和程序文件方式 程序设计包括结构化程序设计和面向对象的程序设计 1VFP编程基础 命令方式 在 命令 窗口中 可以操作命令完成对数据库的操作 系统环境的设置和建立 运行命令文件 菜单方式 通过系统菜单提供的菜单选项对数据库进行操作 对系统环境进行设置以及建立 运行命令文件 程序文件方式 程序文件 简称程序 也叫命令文件 在VisualFoxPro环境下 利用程序文件方式进行数据库管理 是通过程序文件编辑工具 将对数据库操作的命令和对系统环境进行设置的命令 集中在一个以 PRG 为扩展名的程序文件中 然后再通过菜单方式或命令方式运行该程序文件 3 创建 维护 调试程序 用菜单方式创建 运行程序1 启动VFP 选择 文件 菜单 再选择 新建 2 在弹出的 新建 对话框中 选择 程序 项 点击 新建文件 3 在弹出的 程序1 prg 窗口中 点击 保存 按钮 4 存盘完毕后 点击工具栏上的 运行 按钮 在VFP主窗口中就可以显示程序运行的结果 用菜单方式打开 修改程序1 启动VFP 选择 文件 菜单 再选择 打开 在弹出的 打开 对话框进行操作 4 程序是指示VFP执行的一系列指令集合 把各种不同的命令 函数 汇集在一起 形成一个VFP的程序文件 prg 1 程序文件的建立与修改 命令格式 MODIFYCOMMAND 功能 打开文本编辑窗口 用来建立或修改程序文件 程序文件的扩展名为 PRG MODIFYCOMMAND学生 打开或新建学生 PRGMODIFYCOMMAND 打开编辑窗口文件名 工程1 PRG 1VFP编程基础 2 程序文件的执行 DO说明 DO命令默认运行 PRG程序 如果要运行的是 PRG程序 DO命令中的文件名只需取文件主名 要运行其它程序 文件名中需包括扩展名 DO学生 注意 没有createcommand命令 5 1VFP编程基础 3 一个程序文件的基本构成程序由若干条程序行组成 每一程序行由一条语句或命令组成 每一行都以键结束 程序可开始或行后可加注释 4 程序书写规则命令分行 应在一行终了时键入续行符 然后按回车键 命令注释 注释行以符号 开头 命令后也可添加注释 这种注释以符号 开头 6 1VFP编程基础 5 程序基本结构 顺序结构 分支结构 循环结构6 程序末尾可加结束语句 如 cancel return quit等Return命令能使程序执行结束并返回到调用它的上级程序继续执行 若无上级程序则返回到命令窗口 return命令允许缺省 Cancel命令能使程序运行终止 清除程序的私有变量并返回到命令窗口 Quit命令与文件菜单的退出命令功能相同 使用quit命令正常退出 就不会出现数据丢失或打开的文件被破坏等情况 还会自动删去磁盘中的临时文件 程序终止运行后将返回到WINDOWS 7 例 用程序方式显示表student中的全部数据并逻辑删除第2条记录 1 在命令窗口键入modifycommandp1 prg 并回车 2 在命令程序编辑窗口依次输入下列命令usestudentbrowsedeleterecord2return3 按CTRL W键保存程序4 在命令窗口输入DOP1并回车执行该程序 1VFP编程基础 8 1 1输入语句 p2 prg 一 ACCEPT TOAccept 输入姓名 toxm只能接收字符型数据 输入时不必加定界符如果指定的变量不存在 创建该变量 提示信息 省略则不显示 usestudentaccept 请输入记录号 tohb val h gobdelebrowusereturn 9 二 INPUT TO可输入数值型 字符型 逻辑型或日期型数据 字符型数据要加定界符 先表达式值 再赋内存变量 其它与ACCEPT相同input 输入要查询的基本工资 togzclearuset1exclusiveinput 请输入出生日期 tobdaydisplayallfor出生日期 bdayreturn非格式化输出语句 10 2VFP程序的基本结构 VisualFoxPro系统的程序有两个特点 一是程序控制流模式 由顺序 选择 循环三种基本结构构成 二是面向对象可视化的结构程序模块 在每个模块的内部也是由程序控制流组成 常见的控制结构如下 1 顺序结构 2 选择结构 3 循环结构4 过程结构 在许多应用程序中 有一些程序段需要反复执行多次 可将其与嵌入它的程序分开 形成独立的程序序列 待使用时再调入程序中 11 2 1顺序结构程序设计 顺序结构是在程序执行时 根据程序中语句的书写顺序依次执行的命令序列 例 鸡兔共笼 已知鸡兔的总头数为h 总脚数为f 求鸡兔各多少只 算法 X 4h f 2Y f 2h 2程序 clearINPUT h TOhINPUT f TOfx 4 h f 2y f 2 h 2 共有鸡 x 共有兔 yreturn 顺序结构程序设计 12 例 按基本入学成绩查询学生情况clear 清除屏幕上的所有显示内容 光标回到屏幕坐上角 accept 请输入文件名 tof1use f1 宏替换input 输入要查询入学成绩 tochjlistfor入学成绩 chjreturn 顺序结构程序设计 2 2顺序结构程序设计 13 2 3选择结构 选择结构选择结构又称为分支程序结构 是指在程序执行过程中 根据一定的条件判断来确定程序走向的一种程序结构 选择结构一般分为单向选择 双向选择和多向选择三种格式 1 单向选择语句格式 IFENDIF 分支程序设计 功能 当条件表达式的值为真时 执行 否则执行ENDIF后面的语句 14 例 修改student表中的数据 将姓名为 申强 的专业由 新闻 改为 外贸 xz USEstudentLOCATFOR姓名 申强 iffound dispreplace专业with 外贸 dispendifusereturn 15 2 双向选择语句格式 IFELSEENDIF功能 系统执行该语句时 首先判断条件表达式的值 若为真 则执行 然后执行ENDIF后的语句 若为假 则执行 然后执行ENDIF后的语句 说明 1F ELSE和ENDIF必须配对使用 且这三条子句应各占一行 和中可以嵌套IF语句 16 If else endif 例 clearinput 请输入x值 toxifx 0y x 1elsey 1 xendif 输出y值 y xz2 输入两个数a b 将值较大的存入变量c中 并输出 17 例 在表worker中查找名为 李华 的记录 如果找到把该记录加上删除标记 没有找到则显示 查无此人 提示信息 xz3 clearuseworkerexclusivelocateallfor姓名 李华 ifnoteof deletedisplayelse 查无此人 endifusereturn 18 3 多向选择语句格式 DOcaseCase后的 若所有的的值均为假 则执行OTHERWISE后面的语句序列 19 例 将百分制成绩转化成分数等级 xz4 ClearInput 请输入学生成绩 ToCjDoCaseCaseCj 90 And Cj 80 And Cj 70 And Cj 60 And Cj 69 及格 CaseCj 60 不及格 Otherwise 输入的成绩不符合条件 EndcaseReturn 20 小结 1 If endif和doCase endcase必须配对使用 doCase与第一个case之间不应有任何命令 2 可以是各种表达式或函数的组合 其值必须是逻辑值 3 可以由一个或多个命令组成 可以是条件控制语句组成的嵌套结构 4 DoCase endcase命令 每次最多只能执行一个 在多个case的值为真时 只执行第一个值为真的 然后执行Endcase的后面的第一条命令 21 在顺序结构和选择结构的程序中 每条语句只执行一次 如果要反复执行一个程序段 则要使用循环结构程序设计 VFP提供了三种循环语句 DoWhile EnddoFor EndforScan Endscan 程序控制流模式 顺序结构 选择结构和循环结构 9 2 3程序的基本结构 循环结构 22 9 2 3程序的基本结构 循环结构 在顺序结构和选择结构的程序中 每条语句最多只执行一次 如果要反复执行一段程序 则要使用循环结构程序设计 23 程序控制流模式 顺序结构 选择结构和循环结构 23 n 0s T Dowhiles T n n 1 现在圈数是 nIFn 3S F 累了ENDIFEnddo 你可以休息了 9 2 3程序的基本结构 循环结构 开始跑步 你可以休息了 1 2 0 24 3 24 思考 循环体内若没有n n 1 会怎样 什么时候结束呀 累死我了 开始跑步 25 0 注意 对跑步者来说 就是要跑无数圈 对于程序而言 若循环条件一直成立 则循环体部分执行无数次 即 死循环 循环体循环条件 9 2 3程序的基本结构 循环结构 25 语句格式1 DoWhile 循环体 EnddoDOWHILE与ENDDO必须配对 成为 循环体 执行时 判断是否成立 若条件成立就执行循环体部分 否则就跳出循环语句 转到ENDDO后执行 1 Dowhile enddo 26 Dowhile enddo 求1 2 n的和放入变量s中 定义 i 1 s 0循环条件 i n循环体语句 s s ii i 1 27 Dowhile enddo input 请输入n的值 toni 1s 0dowhilei ns s ii i 1enddo 1 2 3 n的和为 s 求1 2 n的和放入变量s中 编程求n s 1 s s i 编程求s 1 2 3 n xh1 prg 28 input 请输入n的值 toni 1m 0s 1dowhilei ns s im m si i 1enddo 1 2 3 n 的和为 s 求1 2 3 n 将结果存入变量s中 29 2 For循环 计数循环 2 语句格式 For To step Loop 语句序列2 Exit 语句序列3 Endfor Next 功能 将循环变量赋初值 判断循环变量的值是否超过终值 若超过终值则跳出循环 执行ENDFOR后面的语句 否则执行循环体内的语句序列 当遇到ENDFOR子句时 返回FOR语句 并将循环变量加上步长再一次与循环终值比较 如此重复执行 直到循环变量的值超过循环终值 30 求1 2 n的和 input 请输入n的值 tons 0fori 1tonstep1s s iendfor 1 2 3 n的和为 sreturn 求s n 31 编写程序 计算n 并将结果存入变量s中 s 1Input 输入n的值 tonfori 1to10step1s s iendfor s 步长是1Step可以省略 32 说明 当省略步长值时 系统默认步长为1 当初值小于终值时 步长值为正值 当初值大于终值时 步长值为负值 步长值不能为0 否则造成死循环 在循环体内不要随便改变循环变量的值 否则会引起循环次数发生改变 LOOP 和 EXIT 语句的功能和用法与条件循环中该语句的功能和用法相同 33 Dowhile enddo 例 修改表文件内容USEsalDOWHILE NOT EOF 判断是否到文件尾DOCASEcase工资 1000repl工资with150case工资 3000repl工资with工资 80case工资 5000repl工资with工资 50case工资 7000repl工资with工资 30ENDCASEskipENDDOReturn 34 语句格式2 DoWhile Loop Exit Enddo若执行循环体部时遇到loop语句 则直接返回执行do语句 并测试条件以决定是否继续循环 若执行循环体部时遇到exit语句 则不执行下面的循环体语句序列 直接跳出循环 执行enddo后面的语句 35 例 根据用户输入的记录号在worker表中查询记录 并显示记录的内容 USEworkerCounttondowhile T input 请输入记录号 0表示退出 toidocasecasein 记录号太大 loopothergoidisplayendcaseenddocancel 36 3 库文件扫描循环语句格式 Scan for while Loop Exit Endscan功能 在当前打开的数据库文件中按条件指定记录 若条件满足 则执行循环体内的语句序列 否则跳出循环 执行ENDSCAN后面的语句 说明 该语句可方便地对当前库文件中所有满足条件的记录进行处理 避免了在循环体内重复执行库文件查询等命令 LOOP 和 EXIT 语句的功能和用法与条件循环中该语句的功能和用法相同 3 库文件扫描循环 37 例 查询sal表文件中基本工资大于2000元的所有姓刘的职工信息 usesalexclusiveclearscanallfor工资 2000ifsubstr 姓名 1 2 刘 displayendifendscanusecancel 38 例 用SCAN型循环 统计sal表中工资超过3000元的人数Clearrc 0UseSalScanAllFor工资 3000rc rc 1Endscan 工资在3000元以上的人数为 rcUseReturn 39 例编程计算s 1 2 90 并求1 90之间的奇数之和 Store0Toi s tDoWhilei 90i i 1s s iIfint i 2 i 2 或i 2 0loopendift t ienddo 1 2 90 s 1 90之间的奇数和为 t 40 小结 DoWhile和EndDo For和EndFor Scan和EndScan必须配对使用 2 可以是任何VFP命令或语句 也可以是循环语句 即可以为多重循环 3 应是数值型的内存变量或数组元素 4 Exit和Loop命令嵌入在循环体内 可以改变循环次数 但是不能单独使用 5 在各种循环语句的循环体中可以插入LOOP和EXIT语句 前者能使执行转向循环语句头部继续循环 后者则用来立即退出循环 转去执行ENDDO ENDFOR或ENDSCAN后面的语句 41 3子程序 子程序在程序设计中 常把重复书写的一段程序独立设计 这种具有相对独立性和通用性的程序段称为子程序 子程序能被程序多次调用 调用子程序的程序称为主程序 使用子程序设计 大大简化程序设计和调试过程 使程序结构化 即模块化 子程序实质也是一个独立的程序文件 以 prg为扩展名 应以独立的程序文件存放在磁盘上 其设计与建立一般的程序文件的方法一样 42 2 子程序的建立与调用DO说明 从指定的磁盘中 调出所指子程序并立即执行 该子程序若不在当前文件夹下 必须指明路径 子程序的扩展名 prg一般省略不写 该子程序执行完后 由其本身的RETURN语句控制返回调用它的主程序中去 主程序调用子程序 子程序又可调用另一个子程序 但子程序不可调用主程序 43 看一个简单的参数传递的例子 主程序 MAIN0 PRG input 输入p值 topDOsub0WITHp PRETURN子程序 SRSJ0 PRG PARAMETERSCC C CRETURN 44 子程序调用过程中的数据传送为了使数据能够共享 在程序调用过程中 子程序和主程序之间应有数据的传递 称为参数传递 参数传递是主程序在调用子程序时发送数据而子程序接受数据的过程 主程序可以用 with 向子程序传递参数 DOWITH说明 调用子程序 用向子程序传递参数 使用内存变量作参数时 可把被执行的子程序的参数新值带回 在子程序中的第一条语句中用下面的命令接受传递过来的参数 格式 PARAMETERS当用参数调用命令时 被调用的子程序的第一语句必须PARAMETERS语句 45 参数传递的进一步说明 中的参数应与中的参数一一对应 即参数个数 数据类型都要一致 但名称可以不同 中的实参可以是常量 变量或表达式 但中的形参只能是变量 若实参是常量则数据不能回传 若实参是表达式则将表达式对应的值传递给子程序 无论是实参还是形参都不能是字段变量 需要传递字段变量的值时 可先赋值给一内存变量 46 主程序 MAIN1 PRG input 英语成绩 topinput 数学成绩 toqinput 计算机成绩 toka 0DOSRSJ1WITHP Q K a ARETURN子程序 SRSJ1 PRG PARAMETERSC D E aa E C D 3RETURN 47 4局部变量和全局变量 局部变量是指只能在说明它的程序及被它调用的下属各级子程序中使用的内存变量 全局变量是指在所有程序模块中 都可以引用及修改的变量 甚至在命令窗口也可以引用 全局变量的定义 PUBLIC说明 内存变量为全局变量 内存变量必须在说明为全局变量之后 再赋值 全局变量可在主程序或子程序中定义 也可在命令窗口中定义 48 主程序MAIN3 PRGPUBLICi Ji 1J 0DOSUB3 i i J J K K 在MAIN3 PRG中的值 CANCEL子程序SUB3 PRGi i 2J i 1K i J i i J J K K 在SUB3 PRG中值 RETURN在上两个程序中存在一个错误 可究竟错在在那里 49 再看下面的两个程序吧 主程序main4 PrgPublicI jI 1J 0DoSub4 I i j j k k 在main4 Prg中的值 Cancel子程序sub4 PrgPublicKI i 2J i 1K i j I i j j k k 在sub4 Prg中值 Return 50 1VFP程序 再改动一下上面二个程序主程序MAIN5 PRG publicI ji 1J 0DOSUB1 i i J J K K 在MAIN5 PRG中的值 CANCEL子程序SUB5 PRGPUBLICKi i 2J i 1K i J i i J J K K 在SUB5 PRG中值 RETURN这说明了什么问题 在主程序中定义的局部变量在其子程序中都有效 因为i j没有使用public定义 所以i j只能是局部变量 但这样就有一个问题 在主程序中建立的一个局部变量n 不小心在子程序也建立了一个同名的变量n 那么在调用子程序时 就会改变主程序中变量n的值 有什么办法解决主程序和子程序中变量重名的问题呢 51 我们可以采用定义私有变量的方法 定义格式为 private功能 指定中的变量为本程序模块中的私有变量 说明 私有变量也是局部变量 这些局部变量仅在定义它的程序中及该程序调用的子程序中起作用 并把同名的全局变量或上层模块中定义同名变量隐藏起来 52 下例中表现了私有变量的作用 主程序MAIN4 PRGi 1J 0k 1doSUB4 i i J J K K 在MAIN1 PRG中的值 cancel子程序SUB4 PRGprivateKi i 2J i 1K i J i i J J K K 在SUB1 PRG中值 53 过程与自定义函数1 过程 过程文件的概念在调用多个子程序时 运行速度下降 且打开的文件数也受限制 将多个子程序组合起来 组成一个过程文件 提高程序运行效率 过程文件中的每个子程序称为一个过程 一个过程也是一个程序文件 其后缀为 PRG 一个过程文件中可以包含多个过程 54 建立 格式格式 Procedure Parameters ReturnProcedure Parameters Return 说明 过程文件中的每个过程不再是一个单独的命令文件 而是这个过程文件中的一个程序段 55 过程rsglgc Prg中的内容 子程序1 ProcSub1AppeReturn 子程序2 ProcSub2ClearInput 请输入要修改记录的职工号 ToZghLocaFor职工号 zghEditReturn 56 5过程文件的调用 打开过程文件 SetProcedureTo调用过程 DoWith关闭过程文件 SetProcedureTo或CloseProcedure说明 调用一个过程前必须将过程文件打开 任何一个时刻只能打开一个过程文件 当打开另一个过程文件时 原先打开的过程文件将自动关闭 57 例如 主程序mainproc prg如下 clearsetproceduretosubprocn 23m 9result 0doaddm n result resultdosubn m result resultdomulm n result resultcloseprocedurereturn 例如 过程文件subproc prg如下 procedureaddparaa b cc a breturnproceduresubparaa b cc a breturnproceduremulparaa b cc a breturn 58 6自定义函数 格式 function parameters return调用方式 说明 自定义函数与子程序概念基本相同 但其执行结束后必须要返回一个函数值 自定义函数不能与系统函数和内存变量重名 59 函数的使用 1 将函数作为一个独立的文件主程序main prgclearsetdefaulttod input 请输入第一条边的长度 toainput 请输入第二条边的长度 tobinput 请输入第三条边的长度 tocresult mj a b c 面积为 resultreturn 计算三角形面积的自定义函数 mj prgParaA b cP a b c 2S sqrt p p a p b p c ReturnS 60 2 将函数作为主程序中的一个程序段 主程序main prgclearinput 请输入第一条边的长度 toainput 请输入第二条边的长度 tobinput 请输入第三条边的长度 tocresult mj a b c 面积为 resultreturnfunctionmjparaa b cp a b c 2s sqrt p p a p b p c returns 61 文本输出语句格式 textendtext功能 在屏幕上原样显示text和e

温馨提示

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

评论

0/150

提交评论