




已阅读5页,还剩76页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VisualFoxPro程序设计教程 第5章程序设计基础 5 1程序设计概述5 2结构化程序设计 重点 5 3面向对象的程序设计 5 1程序设计概述 什么是程序 程序是一个指令序列 指令是计算机能够识别和执行的命令 程序的作用是什么 用来处理数据 程序的输入对象成为 输入数据 程序的结果为 输出数据 如何编写程序 采用编程语言来编写 如 Java C C VFP VB等等 这些统称为编程语言 采用编程工具 如 NET2005 VisualFoxPro6 0等 程序设计的概念利用系统所有提供的设计工具 按照程序设计语言的规范描述解决问题的算法并进行程序编写的过程 程序设计的方法结构化方法 SP 面向对象的方法 OOP 结构化设计 产生的原因早期的程序设计 编写很随意使用 goto 语句可以任何的跳转到程序的任何地方 使得程序的可读性差 难以维护 结构化设计的规则自顶向下逐步求精限制使用转移语句 goto语句 结构化程序设计的三种结构 顺序 分支和循环 面向对象程序设计 设计思想认为世界是由各种对象构成 一个较复杂的对象可以由多个简单的对象组成 因而采用编程语言来描述对象 某一类对象的集合抽象为类 如 学生 教师 都是类 而某一个具体的学生 如 张三 是 学生 这个类中的一个对象 类中包含一些对象的属性和行为 方法 如 学生 中包含属性 学号 姓名 系等 包含行为 选课 上课等行为 对象与对象之间通过消息来联系 OOP的三个重要特性 封装性继承性多态性OOP与SP的比较OOP更接近人的解决问题的思路 能够节省编程的时间 可应付复杂的软件项目 但是在OOP也是以SP为基础的 类中的方法就是以SP的思想编写的 下面是一个完整的VFP过程化程序 可以引出几个基本概念 功能说明 求圆形的面积 文件名 RR PRGCLEARSETTALKOFFINPUT 请输入圆的半径 半径 TORS PI R R 半径为 ALLTRIM STR R 的圆 面积 SSETTALKonRETURN 5 2结构化程序设计 1 从形式上看 VFP的程序是由若干有序的命令行组成 且满足下列规则 一个命令行内只能写一条命令 命令行的长度不得超过2048个字符 命令行以回车键结束 如果一行写不下一条语句 可以换行 但必须加 2 从功能上看 程序可以分为三个部分 第一部分是程序的说明部分第二部分是进行数据处理的部分第三部分是程序的控制返回部分 5 2 1创建 修改程序文件 过程化程序设计基本操作 1 建立和修改程序文件 使用菜单命令 文件 新建 选择程序使用工具栏上面得 新建 按钮在项目管理器中选择 代码 页面 在选择 程序 然后选择 新建 在命令窗口执行如下命令 MODIFYCOMMAND Filename 2 运行程序运行程序的三种方法 当程序处于编辑窗口时 点击 按钮在项目管理器中选择某一程序 点击 运行 在命令窗口使用DO命令 格式 DOProgramName WITHParameterList 期中ProgramName为程序文件名 with子句指定参数 当程序运行 系统会自动生成一个 伪编译 程序 FXP 执行时 实际上执行的是 FXP文件 例用户通过VFP的命令窗口建立上例程序文件 在VFP的命令窗口中输入下条命令后按回车键 MODIFYCOMMANDRR 打开程序编辑窗口 在程序编辑窗口中输入程序代码 用Ctrl W存盘退出编辑窗口 或单击程序编辑窗口上的 关闭 按钮 在弹出的对话窗口中确定存盘 生成RR prg文件 5 2 2顺序结构 所谓顺序结构 是指程序运行时按照语句排列的先后顺序 一条接一条地依次执行 语句A 语句B 例5 1store4 12tops p p 3 14 圆面积为 s 例5 2下面程序的功能是显示一个字符串在另一个字符串中的位置 C VisualFoxPro CC Fox AT CC C 显示结果为8 5 2 3分支结构 所谓分支结构 是指程序在运行过程中 根据条件执行不同的操作 在VFP中 有两种实现分支结构的语句 IF ELSE ENDIF语句DOCASE ENDCASE语句 IF ELSE ENDIF语句格式 IF ELSE ENDIF 根据的结果决定程序执行语句的顺序 如果结果为 T 则执行 执行完了就执行ENDIF后面的语句 如果结果为 F 则执行 然后执行ENDIF后面的语句 IF前的语句 Lexp 语句组1 语句组2 Endif后面的语句 F T IF语句的流程图 例5 3下列程序的功能是根据变量x的值决定变量y的值 为1或 1 ifx 0y 1elsey 1endif 等价于 y 1Ifx 0y 1Endif 例5 4下面程序的功能是解决一元二次方程 其中 PARAMETERS语句用于接收程序的参数 三个参数a b c分别对应于一元二次方程的系数 parametersa b cifa 0 Messagebox 二次项目系数不能为零 48 错误显示对话框 returnendifdelta b b 4 a c ifdelta 0 方程有两个不等的实根 b SQRT delta 2 a b SQRT delta 2 a elseifdelta 0 方程有两个相等的实数根 b 2 a else 方程有两个复根 real part b 2 a 实部img part sqrt delta 2 a 虚部 ALLTRIM STR real part ALLTRIM str img part i ALLTRIM STR real part ALLTRIM str img part i endifendif 因为上面的程序 定义了三个参数 所以执行程序时需要用 WITH 子句给出三个参数的值 如求方程X2 2X 8 0的根 DOabcwith1 2 8其中abc为程序文件的名称 1 2 8分为别为给参数a b c指定的值 2 DOCASE ENDCASE语句If语句只能判断最多两种情况 即 二分支 若要判断多于两种可能的情况 有两种方法可以实现 在IF语句中再嵌套IF语句采用DOCASE ENDCASE语句但是当嵌套的IF语句太多时 会使得程序的结构不清晰 所以当有多种判定的情况时 采用CASE语句 CASE语句的格式 DOCASECASElExpression1Commands1 CASElExpression2Command2 CASElExpressionNCommandN OTHERWISECommands ENDCASE 程序执行时 首先从第一个CASE开始 判断其后的条件表达式lExpression1 如果为 T 就执行语句Commands1然后直接执行ENDCASE之后的语句 否则就进行第二个CASE语句进行判断 依次类推 如果所有的CASE语句后面的条件都为 F 就执行OTHERWISE后面的语句 如果有 DOCASE Lexp1 Lexp2 Lexpn 其他语句组 语句组1 语句组2 语句组3 ENDIF后面的语句 DOCASE语句的流程图 例5 5用DOCASE语句实现例5 4中程序的功能 parametersa b cifa 0 Messagebox 二次项目系数不能为零 48 错误显示对话框 returnendifdelta b b 4 a c docasecasedelta 0 方程有两个不等的实根 b SQRT delta 2 a b SQRT delta 2 a casedelta 0 方程有两个相等的实数根 b 2 a casedelta 0 方程有两个复根 real part b 2 a 实部img part sqrt delta 2 a 虚部 ALLTRIM STR real part ALLTRIM str img part i ALLTRIM STR real part ALLTRIM str img part i endcase 5 2 4循环结构 在应用程序中经常会遇到重复性操作 重复的次数有时可知 有时不可知 为了适应这样的要求 程序设计语言提供了循环语句 循环入口 Lexp 语句组 循环体后的语句 T F 在VFP中 实现循环结构的语句有三种 FOR ENDFOR DOWHILE ENDDO SCAN ENDSCAN 三个基本概念 循环的入口 循环开始的语句称为循环的入口语句 如SCAN FOR和DOWHILE语句循环出口 循环的结束语句称为循环的出口语句 循环体 在入口语句和出口语句之间的语句 1 FOR ENDFOR循环结构若预先知道循环的次数 可以使用FOR语句实现循环 FOR语句的语法格式 FORnVar nInitialValueTOnFinalValue STEPnIncrement CommandsENDFOR NEXTnVar 称为循环变量 用于控制循环的次数nInitialValue 赋给循环变量的初始值nFinalValue 设置循环变量的最终值nIncrement 为步长 是指每次给循环变量增加或减少多少 也就是变化的量 在循环体Commands中 可以包含Loop和EXIT语句 Loop表示结束本次循环 进入下一次循环 Exit表示结束循环 执行循环语句后面的语句 FOR循环的执行过程如下 将初值赋给循环变量判断循环变量的值是否超出最终值 若超出最终值 则结束循环 否则执行循环体计算循环变量的值 循环变量 循环变量 步长撞到 b 步骤执行 例5 6下列程序的功能是计算100以内的奇数之和 S 1 3 5 99 n 100s 0fori 1tonstep2s s Iendfor ALLT STR n 以内的奇数和S S 计算100以内数字的阶乘p 1fori 1tonp p iendfor ALLT str n 的阶乘P p 例5 7下列程序的功能是求1 100之间所有奇数 且这些奇数不能被3整除 之和 s 0fori 1to100step2ifmod i 3 0loopendifs s iendfor s S 0fori 1to100step2if mod i 3 0s s iendifendfor s 等价 例5 8下列程序的功能是显示如图所示的文字clearc 金字大宝塔 n len c 2fori 1ton space 5 i forj 1toi subs c 2 i 1 2 INKEY 0 5 endforendfor 例子5 9下列程序的功能是将由英文字母组成的字符串加密 加密的算法是 如果是大写字母 用原字母后面第4个字母代替原字母 否则用原字母后面第2个字母代替原字母 例如 明文 China 的密文事 Gjkpc 分析 C是大写 则密文是c后面的第4个字母Gh是小写 则密文是h后面的第2个字母j如何将字母转换为数字 用ASC 函数将字母转换为与其对应的ASCII码值如果将数字转换为字母 用CHR 将数字转换为以该数字为ASCII码值的字母 m space 0 c China fori 1tolen c nc asc substr c i 1 ifnc 64andnc 91m M CHR nc 4 elsem m CHR nc 2 endifendforwaitwindowc 字符加密后为 m 2 DOWHILE ENDDO循环结构如果预先不能确定循环的次数 而要根据某一条件决定是否结束循环 可以使用DOWHILE ENDDO语句 格式为 DOWHILElExpressionCommandsENDDO其中lExpression是个条件语句 用于判断是否执行Commands语句 如果条件为 T 则执行 否则不执行 例5 10下列程序的功能是将由ASCII码字符组成字符串进行反序显示 即字符串 ABCD 显示为 DCBA store abcdef toc ccp space 0 dowhilelen c 0p left c 1 pc substr c 2 enddo cc 的反序为 p 例5 11下列程序的功能是将由任意字符 包括汉字 组成的字符串进行反序显示 store abcdef toc ccp space 0 dowhilelen c 0ifx 127i 2elsei 1endifp left c i pc substr c 2 enddo cc 的反序为 p 例5 12下列程序的功能是统计字符串中大 小写英文字母的个数 clearc VisualFoxPro cc cNmax 0Nmin 0dowhile cdocasecaseasc left c 1 64andasc left c 1 96andasc left c 1 123 Nmin Nmin 1endcasec subs c 2 enddowaitwind 大写字符的个数 str Nmax 2 小写的个数 str Nmin 例5 13下列程序的功能是对表达式1 1 2 3 1 2 3 4 1 n n 1 n 2 进行求和 并且要求计算结果精度小于0 0000001clearnS 0i 1dowhile T nS nS 1 i i 1 i 2 if1 i i 1 i 2 0 0000001exitendifi i 1enddo 3 SCAN ENDSCAN循环结构SCAN ENDSCAN构建的循环仅用于处理表的记录 若对表中的所有记录执行某一操作 可以使用该语句 随着记录指针的移动 SCAN循环对每条记录执行相同的命令组 格式 SCAN Scope FORlExpression1 Commands ENDSCAN 例5 14下列程序的功能是显示所有籍贯为 江苏 的学生姓名和籍贯 clearusexsscanfor 江苏 jg xm jgendscan 5 25过程与用户自定义函数 用户可以将经常执行的具有某种功能的一段程序代码独立出来 将其作为一个过程或用户自定义函数 在需要该功能的时候调用这个过程或函数 以下程序的功能是求圆的面积parametersRS R R 3 14returns 以下程序时求圆柱的体积ParametersR HS R R 3 14V s h 圆柱的体积为 V 函数与过程的区别函数与过程都是用于处理某一功能函数有返回值 但过程没有返回值 但在VFP中 两者没有区别只是定义的形式不同 1 过程与自定义函数的定义创建过程或函数时 需要使用关键字PROCEDURE或FUNCTION语句进行定义 过程的定义格式 PROCEDUREProcedureName PARAMETERsParameterList Commands RETURN eExpression ENDPROC其中 ProcedureName为过程的名称 ParameterList为参数的列表 RETURN后面为返回的值 eExpression缺省时返回为 T 将上面的求圆面积的程序改为过程 PROCEDUREjsCircleParametersRS R R 3 14returnsENDPROC 函数定义的基本语法格式 FUNCTIONFunctionName PARAMETERSParameterList Commands RETURN eExpression ENDFUNC将圆的程序在改为函数FUNCTIONjsCircleParametersRS R R 3 14returnsENDFUNC 例5 15下列自定义函数ntoc 的功能是将一个0 9之间的阿拉伯数字转换为一个 零 九 之间的中文字符 例如 ntoc 7 的返回值为 七 functionntocparameterspDigitlocalcStringcString 零一二三四五六七八九 returnsubstr cString pDigit 2 1 2 endfunc 2 过程与自定义函数的调用在调用过程或自定义函数时 可以使用DO命令 也可以使用函数的调用方式 区别 在于以函数的形式调用时有返回值 Do命令执行过程或函数的语法格式为 DOProcedureName INProgramName withParameterList 其中 IN子句用于指出过程或函数所在的文件 with子句用于指定执行过程或函数需要的参数 必须和定义过程中的参数要一样 在调用某个过程或自定义函数时 也可以在调用之前通过SETPROCEDURETO命令打开该过程文件 假如文件的名为procs prg 则命令如下 SETPROCEDURETOprocs prg当在DO命令后使用函数名或过程名时 VisualFoxPro按照以下顺序查找函数或过程 在包含DO命令的文件中查找 在已打开的过程文件中找 在运行链中查找 即查找从最近运行的程序到首次运行的程序 在独立程序中找 在求圆柱体积的程序中调用求圆面积的过程 parametersr hs jscircle r v s h 圆柱的体积为 v 子程序或过程调用及返回示意图 例5 16下列程序用于计算S 1 2 3 4 5 s 0fori 1to5s s fjc i endfor sfunctionfjcparametersxp 1forn 1toxp p nendforreturnpendfunc 5 3面向对象的程序设计 回顾面向对象设计基本思想认为世界是由各种对象构成 一个较复杂的对象可以由多个简单的对象组成 因而采用编程语言来描述对象 某一类对象的集合抽象为类 如 学生 教师 都是类 而某一个具体的学生 如 张三 是 学生 这个类中的一个对象 类中包含一些对象的属性和行为 方法 如 学生 中包含属性 学号 姓名 系等 包含行为 选课 上课等行为 对象与对象之间通过消息来联系 5 1类和对象概述 面向对象程序设计是通过对类 子类和对象的设计来体现的 什么是类 类与对象的区别是什么 类是某一类对象的抽象集合 是对象的设计蓝图 对象是属于某类的一个实例 类是一个静态的概念 对象是动态的概念 程序在运行的过程中需要用类创建对象 执行对象中的方法和属性 对象的相关特征属性 定义对象的某个特征 如人的体重 身高 汽车的颜色 载重等 方法 是对象能够执行的某一个操作 现实世界中的对象的行为 在程序设计中用方法来实现 比如选课 事件 是由对象识别的一个动作 可以编写相应的代码对此动作进行响应 如 用户点击鼠标 选中某一个按钮 点击某个按钮 都会引发相应的事件 注意 对象的事件集是固定的 用户不能创新新的事件 事件源 某一事件 调用事件处理方法 引发事件的对象 如被点击按钮 某个对象事件的集合是固定 来处理引发的事件 Vfp中的面向对象主要用于创建用户图形界面上 如表单 按钮等 5 3 2基类 Vfp中 类可以分为三大类 基类 子类和用户自定义类 基类 是vfp系统内部定义的类 不要用户创建子类 在某一个类的基础上创建的类 如在person类的基础上创建 student类 那么student类就是person类的子类用户自定义的类 除了系统自带的基类 用户也可以根据需要自己创建类 根据基类是否能够包含其他类 又可以将基类分为 容器类和控件类 容器类 可以包含其他类的基类 如表单 页框 命令按钮组等 控件类 可以包含在容器类中的基类 如 按钮 文本框等 根据是否可见 基类又分为可视类和非可视类可视类 用户可以看见的 具有一定得外观的类 如按钮 表单非可视类 没有外观 用户不可见 如Timer计时器 5 3 3处理对象 当通过某个类来创建了对象之后 就可以设置或获取对象的相关属性 调用对象中的方法了 这称之为 处理对象 1 引用对象在引用对象时 首先要弄清楚对象所在的层次关系 即对象被包含在哪一个容器中 该容器又被包含在哪一容器中 如同我们访问磁盘上的某个文件一样 在引用对象时 容器与对象之间用 隔开 下面看个例子 表单集formSet1中包含了两个表单form1和form2 表单form1中包含两个文本框Text1和Text2 一个选项按钮组optionGroup1 一个页框pageFrame1 页框PageFrame1中包含两个页面page1和page2 页面Page1中包含一个表格Grid1 表格中包含两列Column1和Column2 1 绝对引用绝对引用是指从容器的最高层到被引用的对象 所有对象都被一一列举出来 如引用表单Form1中表格Grid1中第一列的列表头的对象 formSet1 Form1 PageFrame1 Page1 Grid1 Header1注意 当表单的名称与表单文件的名称不同名时 引用表单中的对象 一定要用表单的文件名 如 表单名 Form1 而表单的文件名为 abc 则引用表单中对象Text1时 要用abc Text1 2 相对引用相对引用是指在容器层次中相对某个容器层次的引用 一般用在某个控件的事件处理代码中 经常使用This ThisForm ThisFormset等 如 要在选项按钮组OptionGroup1的某个事件代码中引用文本框Text1 则可以使用如下的相对引用之一 This PARENT Text1 ThisForm Text1 ThisFormSet Form1 Text1 此外 当我们不知道当前要处理的对象的名称时 可以使用ActiveForm和ActiveControl的组合来使用 SCREEN ActiveForm SCREEN ActiveForm ActiveControl其中 SCREEN表示屏幕对象 即系统的主窗口 2 设置对象属性每一个对象都有相关的属性 那么如何获取这些属性的值呢 以及如何给这些属性设置新值呢 获取对象的属性值格式 变量 引用的对象 属性s label1 caption设置对象的属性格式 引用的对象 属性 值如 label1 caption 你好 又如 给Text1文本框的值 和前景色 背景色 字体设置属性 FormSet1 Form1 Text1 Value Date FormSet1 Form1 Text1 ForeColor RGB 0 0 0 FormSet1 Form1 Text1 BackColor RGB 192 192 192 FormSet1 Form1 Text1 FontName 黑体 如果给同一个对象的多个属性赋值可用with endwith语句 withFormSet1 Form1 Text1 Value Date ForeColor RGB 0 0 0 BackColor RGB 192 192 192 FontName 黑体 endwith 3 调用对象的方法对象中除了包含一些属性外 还包含一些方法 这些方法说明了该对象具有哪些功能 调用对象方法的格式为 引用对象名称 方法名如 FormSet1 Form1 Text2 SetFocusFormSet1 Form1 Refresh注意 如果方法程序具有返回值 则需要在方法后面加 需要参数的方法 参数也必须写在 中 如 s form1 A F 5 4 对事件的响应当对象的某个事件发生 该事件的处理程序将被执行 来处理该事件 但如果没有编写该事件的处理程序 则不会发生任何操作 5 3 4事件模型 核心事件见表5 6 容器层次与类层次中的事件容器不处理与所包含的控件相关联的事件 如果没有与控件相关的事件代码 vfp将在类层次的更高层次上检查是否与此事件相关联的控件代码 虽然 Form1具有click事件处理方法 而Commad1按钮没有 但是Form1是容器 因而不会处理Commad1按钮的click事件 但是也有两种特殊情况 就是选项按钮组和命令按钮组 当某一个选项按钮被单击时 如果有自己的Click事件的处理程序 则执行自己的 否则如果选项按钮组存在click事件处理程序 则执行选项按钮组的 Option1具有click事件处理方法 将label控件输出 你好 Optiongroup1也click事件处理方法 将labe
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四年级数学(小数加减运算)计算题专项练习与答案汇编
- 郴州职业技术学院《建筑力学二》2024-2025学年第一学期期末试卷
- 大连汽车职业技术学院《室内装饰材料与施工工艺》2024-2025学年第一学期期末试卷
- 哈尔滨城市职业学院《中学数学案例分析》2024-2025学年第一学期期末试卷
- (2025年标准)宠物托运自负协议书
- 聊城大学《程序设计语言1(c)》2024-2025学年第一学期期末试卷
- 浙江长征职业技术学院《独立式住宅设计》2024-2025学年第一学期期末试卷
- 湖南大学《小学生心理健康与心理咨询》2024-2025学年第一学期期末试卷
- 吉林城市职业技术学院《实验室安全》2024-2025学年第一学期期末试卷
- 郑州黄河护理职业学院《形势政策与明德教育》2024-2025学年第一学期期末试卷
- 计件工资协议书
- 美发店租工位合同协议
- 孕产妇围产保健技能竞赛题库
- 2025台州市路桥区路桥街道社区工作者考试真题
- 2025慢病管理行业市场分析报告
- GB/T 196-2025普通螺纹基本尺寸
- 供电一线员工服务规范培训
- 皮肤医美行业分析
- 安全培训课件(八大作业)
- 2025年信息技术实习生培训协议
- ESD防静电知识培训
评论
0/150
提交评论