结构化程序设计APPT课件_第1页
结构化程序设计APPT课件_第2页
结构化程序设计APPT课件_第3页
结构化程序设计APPT课件_第4页
结构化程序设计APPT课件_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

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

文档简介

程序设基础 教学目标 能完成简单程序编写 重点 程序的控制结构 难点 程序结构及功能的实现 学习方法 着重理解老师例题程序的设计思想 并且注意独立编程的练习 本章要点 算法VisualFoxPro的工作方式程序文件的建立与编辑程序文件的调用程序的基本结构分支结构循环结构过程 思考题 实验 算法初步 算法的概念算法的表示方法结构化程序设计 算法的概念 什么是算法所谓算法 就是程序处理问题的步骤与方法 程序 数据结构 算法 算法的特性一个方法要成为我们可以在程序设计中所使用的算法 需要具备如下特征 1有穷性2确定性3有零个或多个输入4有一个或多个输出5可执行性 算法的表示方法 算法的实质是一种逻辑关系 对于这样一种关系 可以用多种方式来表达 常用的有自然语言 流程图 传统的流程图和结构化的流程图 伪代码 N S流程图 计算机语言等 一 结构化程序设计和面向对象程序设计 VFP程序设计包括结构化程序设计和面向对象程序设计 1 结构化程序设计传统的 结构化程序设计 方法是由荷兰学者Dijkstra在70年代提出的 它把面向机器代码的程序抽象为三种基本程序结构 顺序结构 选择结构和循环结构 并提出了一系列的设计原则 如自上而下 逐步求精 模块化编程等 程序是由传递参数的函数集合组成 每个函数处理它的参数 并可能返回某个值 这种程序是以过程为中心的 在传统的面向过程的程序设计中 程序员必须基于过程来组织模块 2 面向对象程序设计面向对象的程序设计方法与编程技术不同于标准的结构化程序设计 程序设计人员在进行面向对象的程序设计时 不再是单纯地从代码的第一行一直编到最后一行 而是考虑如何创建对象 利用对象来简化程序设计 提供代码的可重用性 对象可以是应用程序的一个自包含组件 一方面具有私有的功能 供自己使用 另一方面又提供公用的功能 供其他用户使用 面向对象的程序设计方法是一种系统化的程序设计方法 允许抽象化 模块化的分层结构 具有多态性 继承性和封装性 VF中的两种程序设计方法 结构化程序设计 传统的程序设计方法 是面向对象程序设计的基础 面向对象程序设计 面向对象 用户界面可利用VFP提供的辅助工具来设计 应用于程序也可自动生成 但是仍需用户编写一些过程代码 在VisualFoxPro中 表单及控件是应用程序中的对象 用户通过对象的属性 事件和方法程序来处理对象 VisualFoxPro面向对象的语言扩展部分为应用程序中的对象提供了更多的控件 同时也使得创建和维护可重用代码库更为容易 结构化程序设计结构化程序设计的基本思路是 把一个复杂的问题的求解过程分阶段进行 每个阶段处理的问题都控制在人们容易理解的范围之内 采取以下的方法保证得到结构化的程序 自顶向下 逐步细化 求精 模块化设计 结构化编码 结构化程序具有如下的特征 一个程序单元由顺序 分支和循环这三种基本结构组成 一个大的程序由若干个不同功能的小模块组成 每一个小模块只用一个入口和一个出口 常见的算法举例 一 1 2 3 4 5二 水杯中水的交换三 1 1 2 1 3 1 4 1 99 1 100 VisualFoxPro的工作方式 VisualFoxPro系统提供有三种工作方式 即单命令方式 菜单方式及程序文件方式 1 单命令方式所谓单命令方式 即输入一条命令 完成一个操作的工作方式 2 菜单方式所谓菜单方式 即通过打开不同的菜单选择并完成不同的操作 3 程序文件方式程序文件 简称程序 也叫做命令文件 运用程序文件方式进行数据库管理 是通过程序文件编辑工具 将对数据库资源进行操作管理的命令和对系统环境进行设置的命令 集中在一个以 PRG 为扩展名的命令文件中 然后再通过菜单方式或命令方式运行该命令文件 所谓命令方式 即通过程序文件中的命令完成不同的操作 程序文件的建立与编辑 建立 编辑程序文件有两种方式 1 命令方式MODIFYCOMMAND 程序文件名 2 菜单方式打开 文件 新建 程序 新建文件 程序文件的调用 在这里仅介绍其中两种方法 1 命令方式DOProgramName1 ProcedureName INProgramName2 WITHParameterList 参数 ProgramName1指定要执行的程序的名称 如果执行的程序不包含扩展名 VisualFoxPro就以下列顺序查找并执行这些版本的程序 EXE 可执行版本 APP 一个应用程序 FXP 已编译的版本 PRG 程序 若要使用DO执行一个特定的菜单程序或者查询 则必须包含它的扩展名 MPR 或 QPR 当使用DO运行一个程序时 包含在程序文件中的命令一直执行 直到下列某一事件发生 遇到RETURN语句 执行了CANCEL命令 执行了另一个DO命令 到达文件末尾 执行了QUIT命令 2 菜单方式以菜单方式调用程序文件 操作方法如下 1 在VisualFoxPro系统主菜单下 打开 程序 菜单 选择 运行 2 在 运行 窗口 输入被调用的程序文件名即可 程序书写规则 命令分行 程序中每条命令都以回车键结尾 若命令需要分行书写 则应在一行末尾键入续行符 分号 然后再敲回车键 命令注释 提高可读性 注释行以符号 开头 它是非执行命令 仅在程序中显示 还可以 为注释符号 程序文件中的专用命令 程序结尾的专用命令 在程序末尾可以放一条RETURN命令 他能使程序执行结束 并返回到调用它的上级程序继续执行 若无上级命令则返回到命令窗口 RETURN命令可以缺省 CANCEL 能使程序运行终止 清除程序的私有变量 并返回到命令窗口 QUIT 退出到VFP系统 与 文件 菜单的 退出 命令功能相同 1 基本输入命令INPUT TOACCEPT TO功能 从键盘接收用户键入的内容 并将其保存在内存变量中 如 input 请输入一个三位数 ton1accept 输入待查人姓名 toname说明 1 Input接收任何类型的常量 但用户输入C型值须加定界符 故一般用该语句接收N型值 2 Accept只接收C型值 一般用它来接收字符串 2 基本输出命令 功能 先计算表达式的值 再换行或同行在屏幕显示输出 如 计算结果为 n1 A1 B1 space 5 工资报表 3 文本输出命令格式 TEXTENDTEXT功能 原样输出文本内容说明 该命令只适用于程序中 且Text和Endtext必须配对使用 如在程序中可出现 text1 添加2 删除3 修改4 退出endtext 输入输出专用命令 定位输入输出命令 格式 SAY GET DEFAULT 说明 在屏幕的指定行列输出SAY子句的表达式值 并可修改GET子句的变量值 表示数据在窗口中的显示位置 都从0开始编号 SAY子句用来输出数据 GET子句用来输入及编辑数据 GET子句的变量必须有初值 或用DEFAULT来指定初值 初值一旦指定 该变量的类型在编辑期间就不能改变 GET子句的变量必须用READ命令来激活 换句话说 在带有GET子句的定位输入输出命令后 必须遇到READ命令才能编辑GET变量 2 MESSAGEBOX 函数格式 MESSAGEBOX 文本 数值 标题文本 功能 显示一个用户自定义对话框 文本 对话框内显示的文本信息 数值 指定对话框中的按钮和图标 显示对话框时的默认按钮以及对话框的行为 例 messagebox 的使用 cmessagetitle 我的对话框 cmessagetext 记录没找到 重新搜索吗 ndialogtype 4 32 256nanswer messagebox cmessagetext ndialogtype cmessagetitle input 请输入数字6或7作选择 tonanswerdocasecasenanswer 6waitwindow youchoseyes casenanswer 7waitwindow youchoseno endcase 程序的基本结构 VisualFoxPro系统的程序有两个特点 一是程序控制流模式 由顺序 分支 循环三种基本结构构成 二是面向对象可视化的结构程序模块 在每个模块的内部也是由程序控制流组成 常见的控制结构如下 1 顺序结构顺序结构是在程序执行时 根据程序中语句的书写顺序依次执行的命令序列 VisualFoxPro系统中的大多数命令都可以作为顺序结构中的语句 2 分支结构 分支结构是在程序执行时 根据不同的条件 选择执行不同的程序语句 用来解决有选择 有转移的诸多问题 3 循环结构 循环结构则能够使某些语句或程序段重复执行若干次 如果某些语句或程序段需要在一个固定的位置上重复操作 使用循环是最好的选择 4 过程结构 在许多应用程序中 有一些程序段需要反复执行多次 这些程序段不在一个固定的位置上 而是分散在程序的许多位置上重复执行 可将其与嵌入它的程序分开 形成独立的程序序列 待使用时再调入程序中 以实现不同位置上的重复操作 这样做增强了程序的可读性和模块化 我们称这种具有独立功能而且可以被其它程序调用的程序序列为过程 程序的三种控制结构 1 顺序结构 指按程序中语句的书写顺序执行程序语句 2 分支结构之简单分支格式 IFENDIF 分支结构之条件分支格式 IFELSEENDIF IIF 函数 IIF lExpression eExpression1 eExpression2 功能 根据逻辑表达式的值 返回两个值中的某一个 如果lExpression计算结果为 真 T 返回eExpression1 如果lExpression为 假 F 则返回eExpression2 对于简单的条件表达式 该函数可以代替IF ENDIF语句 如 Input n ton IIF mod n 2 0 是2的倍数 不是2的倍数 嵌套式条件语句语法 IF IF IF 条件成立时所要执行的语句 ENDIF 条件成立时所要执行的语句 ENDIF 条件成立时所要执行的语句 ENDIF 分支结构之结构分支格式 DoCasecase case otherwiseEndcase N 多重条件语句语法DOCASECASECASECASE OTHERWISE ENDCASE 使用分支语句应注意的几点 1 IF ENDIF和DOCASE ENDCASE必须配对使用 DOCASE与第一个CASE 条件表达式 之间不应有任何命令 2 条件表达式 可以是各种表达式或函数的组合 其值必须是逻辑值 3 命令行序列 可以由一个或多个命令组成 可以是条件控制语句组成的嵌套结构 4 DOCASE ENDCASE命令 每次最多只能执行一个 命令行序列 在多个CASE项的 条件表达式 值为真时 只执行第一个 条件表达式 值为真的 命令行序列 然后执行ENDCASE的后面的第一条命令 usestudentlocatefornot性别iffound display姓名 学号 年龄 成绩replace年龄with年龄 1display姓名 年龄endifusereturn USEsongACCEPT 输入歌手姓名 TONAMELOCATEALLFORsinger NAMEIFFOUND STR RECNO 2 SPACE 2 singer sonname birthdayIFsex 男 ELSE 女 ENDIF companyELSE 给定记录不存在 ENDIFWAIT 请按任一键继续 WINDOWTIMEOUT10CLOSEDATABASES 请思考 给一百分制成绩 要求输出成绩等级 A 90分以上 B 80 89分 C 70 79 D 60 69 E 60分以下 USEstudentDOWHILE EOF IF计算机 90等级 A ELSEIF计算机 80等级 B ELSEIF计算机 70等级 C ELSEIF计算机 60等级 D ELSEIF计算机 0等级 E ENDIFENDIFENDIFENDIFENDIF USESTUDENTDOWHILE EOF DOCASECASE计算机 90等级 A CASE计算机 80等级 B CASE计算机 70等级 C CASE计算机 60等级 D CASE计算机 0等级 E ENDCASE 思考题 1 输入4个数 按从大到小的顺序排列 并输出2 水仙花数的求解 3 求Fibonaccia数列的前40个数 F1 1F2 1FN FN 1 FN 24 求1 1 3 1 5 1 7 的值 3 循环结构格式 DOWhile Loop Exit ENDDO 循环结构 常用的循环语句有以下三种形式 1 当 型循环控制语句 当 型循环控制语句 即根据条件表达式的值 决定循环体内语句的执行次数 1 语句格式 DOWHILE 条件表达式 命令行序列 ENDDO 2 语句功能 该语句通过 条件表达式 的值来控制循环 执行语句时 反复判断 条件表达式 的值 当 条件表达式 的值为 真 时 执行 命令行序列 否则 结束循环 并执行ENDDO后面的第一条命令 DOWHILE与ENDDO必须配对 之间的成为 循环体 执行时 判断是否成立 若是就执行循环体部分 否则就跳出循环语句 转到ENDDO后执行 若执行循环体部时遇到LOOP语句 则直接返回执行DO语句 并测试条件以决定是否继续循环 若执行循环体部时遇到EXIT语句 则不执行下面的循环体语句序列 直接跳出循环 执行ENDDO后面的语句 2 计数 型循环控制语句 计数 型循环控制语句 即根据用户设置的循环变量的初值 终值和步长 决定循环体内语句的执行次数据 1 语句格式 FOR 循环变量 循环变量初值 TO 循环变量终值 STEP 循环变量步长 命令行序列 ENDFOR NEXT 2 语句功能 该语句用 循环变量 来控制 命令行序列 的执行次数 执行语句时 首先将 循环变量初值 赋给 循环变量 然后判断 循环变量 是否大于或小于 循环变量终值 若结果为 真 则结束循环 执行ENDFOR后面的第一条命令 否则 执行 命令行序列 循环变量 自动按 循环变量步长 增加或减少 再重新判断 循环变量 当前的值是否大于或小于 循环变量终值 直到其结果为真 3 指针 型循环控制语句 指针 型循环控制语句 即根据用户设置的表中的当前记录指针 决定循环体内语句的执行次数据 1 语句格式 SCAN 范围 FOR 条件表达式1 WHILE 条件表达式2 命令行序列 ENDSCAN 2 语句功能 该语句在指定的范围内 用数据记录指针来控制循环次数 执行语句时 首先判断函数EOF 的值 若其值为 真 则结束循环 否则 结合 条件表达式1 或 条件表达式2 执行 命令行序列 记录指针移到指定的范围和条件内的下一条记录 重新判断函数EOF 的值 直到函数EOF 的值为真时结束循环 4 使用循环语句时应注意的几点 1 DOWHILE和ENDDO FOR和ENDFOR SCAN和ENDSCAN必须配对使用 2 命令行序列 可以是任何FoxPro命令或语句 也可以是循环语句 即可以为多重循环 3 循环变量 应是数值型的内存变量或数组元素 4 EXIT和LOOP命令嵌入在循环体内 可以改变循环次数 但是不能单独使用 EXIT的功能是跳出循环 转去执行ENDDO ENDFOR ENDSCAN后面的第一条命令 LOOP的功能是转回到循环的开始处 重新对 条件 进行判断 相当于执行了一次ENDDO ENDFOR ENDSCAN命令 它可以改变 命令行序列 中部分命令的执行次数 EXIT LOOP可以出现在 命令行序列 的任意位置 a1 prgsettalkoffdowhilem 100i 3n int sqrt m 1dowhilei nif int m i m iexitendifi i 2enddo mm m 2enddo ireturn 多重循环控制 求1 100之间的所有素数 过程 在VisualFoxPro系统中 程序是独立存放在磁盘上的程序文件 使用时用户通过文件名调用并执行 为了实现用户的某种目的 很可能需要由多个程序完成 1 调用过程语句 即执行已有的过程 1 语句格式 DO 过程名 2 语句功能 执行以 过程名 为名的过程 2 过程返回语句 即返回过程的调用处 1 语句格式 RETURN TOMASTER TO 过程名 2 语句功能 将控制返回到调用程序中调用命令的下一语句 例 参数的值的传递 a 3b 5dosubwitha b a bproceduresubParax yx x 10y y 10return 实参是如何将值传给形参的 dosubwitha b 参数是如何传递的 Parax y a 3b 5 x x 10 y y 10 a b 本章要点 多模块程序设计子程序自定义函数过程文件及过程内存变量的作用域多模块程序的参数传递定义功能键 多模块程序设计 一 多模块程序设计 多模块程序的基本概念 一个VF应用系统 由于开发过程以及软件功能需要 往往由若干个程序共同组成 一般形式为 一个主程序 若干子程序或者自定义函数 它们之间是调用与被调用的关系 这种将一个系统分为多个程序编写然后组合的设计方法称为多模块程序设计 多模块程序形式的分类 多模块程序按其形式可分为 子程序 自定义函数 过程等 子程序 二 子程序 程序编写者为了简化程序和使程序更有条理 可将一个程序中反复出现的部分语句 程序段 单独建立成一个程序以便其他需要使用这部分语句的程序调用 该程序被称为子程序 而调用它的程序称为主程序 一 子程序的基本格式 PARAMETERS LPARAMETERS RETURN TOMASTER TO 当程序为带参子程序时 PARA语句应为第一条可执行语句 以Return作为程序结束语句 子程序 二 子程序的调用方法 1 无参子程序 DO 2 带参子程序 DOWITH 三 子程序的参数传递规则1 实际参数与形式参数一一对应 2 传递的双向性 调用时Para命令从主程序将实参值接收给形式参数 子程序执行完成后 形参将值回传给实参 即 传递实际参数形式参数回传3 一般情况下 除非形参被定义为公共变量 形参将值回传给实参后即被清除 自定义函数 三 自定义函数 VF允许程序编写者自己定义函数 用以补充系统函数不能完成的功能 自定义函数实际上也是程序 和子程序相似 用户自定义函数包括以 PRG扩展名保存的独立的程序 以及程序中的过程 一 自定义函数的基本格式 FUNCTION PARAMETERS LPARAMETERS RETURN 自定义函数 说明 当程序为带函数时 PARA语句应为第一条可执行语句 以RETURN作为程序结束语句 若缺省则函数返回 T FUNCTION 表示该函数包含在调用程序中 否则为独立文件 二 自定义函数的调用方法 同系统函数 1 无参函数 2 带参函数 过程文件及过程 四 过程文件及过程 程序编写者将所有程序 如 子程序 自定义函数 调试完毕后 为了减少文件总数 提高程序执行速度 需要将多个分散的文件组合成一个或几个文件 这种由多个程序组合生成的文件称为过程文件 它也是程序 过程是过程文件的基本组成元素 它是由组合前的单个程序 如 子程序 自定义函数等 改编而来 或者根据需要临时建立 每个过程均有一个过程名 即组合前单个程序的程序名 过程文件及过程 二 过程文件的打开及关闭1 打开过程文件 SETPROCTO2 关闭过程文件 SETPROCTO或CLOSPROC或CLOSEALL 三 过程的调用打开过程文件后 过程文件中的过程全部被装入内存 可作为子程序或自定义函数调用 也可直接调用某个程序中的过程 调用方法如 DO IN程序名 WITH实参 或 参数 等形式 过程文件及过程 所谓的过程的嵌套调用 就是在调用一个过程的过程中 又调用了其它过程 如在主函数中调用了a过程 而在a过程中又调用了b过程 在b过程中又调用了c过程 这就是过程的嵌套调用 其调用过程如下图所示 过程的嵌套调用 a a b c b c 内存变量的作用域 五 内存变量的作用域 在多模块程序中 每一个内存变量都有自己的有效范围 生存期 也就是指该变量在多大范围内能够被识别 通常我们称之为作用域 按照内存变量的作用域可将其分为三类 公共变量 PUBLICVARIABLE私有变量 PRIVATEVARIABLE本地 局部 变量 LOCALVARIABLE 内存变量的作用域 一 公共变量 PUBLICVARIABLE指用PUBLIC命令所定义的内存变量 它的作用域包含系统中所有的程序模块 PUBLIC说明 将中的变量设置为公共变量 初值为 F 命令窗口中定义的变量默认为公共变量 但不能在程序方式下利用 程序终止后 公共变量不会自动清除 要依靠clear release等语句来清除 内存变量的作用域 二 私有变量 PRIVATEVARIABLE私有变量在VisualFoxPro中是默认的 不需要特殊的关键字定义 但是 如果在更高一级例程中已经有同名变量 可以用PRIVATE关键字予以声明 以限定其范围 PRIVATE ALL LIKE EXCEPT 说明 私有变量作用范围为定义它的模块及其下层模块 运行结束后自动清除 PRIATE语句并不对变量赋值 只是将上层同名变量暂时屏蔽 内存变量的作用域 三 本地 局部 变量 LOCALVARIABLE 本地变量指只能在建立它的程序模块中使用的变量 它的作用域只有建立它的程序本身 其他过程或函数不能访问此变量的数据 LOCAL说明 建立新变量时初值为 F 使用时自动隐藏上级变量 模块结束后自动清除 进入下级模块后自动隐藏 A1 prgA 3B 5Dob1witha b a bReturn Procb1Parax yY x y s yreturnendp a2 prgPublicaA 1C 5Dosub a b creturn sub prgPrivatecA a 1PublicbB 2C 3D 4 a b c dreturn 多模块程序的参数传递 六 多模块程序的参数传递 程序模块之间可利用参数进行数据传递 DO WITH或 参数 表示上层程序在调用过程或自定义函数时将参数值传递给被调用程序 此时的参数一般称之为 实际参数 PARAMETERS或LPARAMETERS接收从上层程序模块中转递过来的值 一般称之为 形式参数 一般来说 参数的传递性具有 双向性 即 传递实际参数形式参数 但要受变量作用域的影响 回传 PARAMETERS自动将形参定义为私有变量 LPARAMETERS自动将形参定义为本地变量 在调用自定义函数或过程时 如果形参和实参均使用数组 则实参数组名前应加上 标记 VisualFoxPro在向用户自定义函数 UDF 传递参数时 有按值传递和引用传递两种方式 可通过以下命令设置 SETUDFPARMSTOVALUE REFERENCETOVALUE向一个用户自定义函数按值传递一个变量 当按值传递变量时 在用户自定义函数中可以更改变量的值 但调用程序中变量的原值不变 TOREFERENCE向一个用户自定义函数通过引用传递一个变量 当通过引用传递变量时 如果在用户自定义函数中更改了变量的值 则调用程序中变量的原值也随之更改 默认情况下 变量以值传递方式传递给用户自定义函数 用DO WITH传递给过程的变量为引用传递 不管S

温馨提示

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

评论

0/150

提交评论