数据库原理及应用 《数据库原理及应用》课程组 Jmun_jsjxy@163.com 2007.3 荆楚理工学院
第七章 面向对象的程序设计 2007.3 荆楚理工学院
在VFP中,最常用到的对象有表单,表单集,表格,页框,命令按钮,文本框、标签、编辑框、列表框、组合框等等。 7.1 对象的基本概念 7.1 对象的基本概念 在VFP中,最常用到的对象有表单,表单集,表格,页框,命令按钮,文本框、标签、编辑框、列表框、组合框等等。 这些对象中有些可以再包含其他对象,我们称为容器。 面向对象程序设计方法从语言上去理解,就是以对象作为程序的基本构件来设计程序的方法。 2007.3 荆楚理工学院
7.1 对象的基本概念 对象和容器的包含层次称为对象层次。 外层的对象称为内层对象的父对象。 7.1 对象的基本概念 对象和容器的包含层次称为对象层次。 外层的对象称为内层对象的父对象。 每个对象一般都包含有许多属性——实际是一系列变量,它们各具不同的数值,例如:name 表示对象名;caption:对象标题文本,运行时向用户表现对象的意义;height:对象外观高度; 2007.3 荆楚理工学院
7.1 对象的基本概念 7.1 对象的基本概念 Left:对于控件,指其最左边相对于其父对象的左边位置。对于表单对象,指定表单的左边于VFP主窗口之间的距离。Top:对于控件,指其顶边与其父对象顶边的距离,对于表单对象,指定表单的顶边与VFP主窗口间的距离。Width:对象外观宽度。Visible:指定对象是可见还是隐藏,如其值为 .T.,对象在运行时可见,如其值为.F.对象在运行时不可见。 2007.3 荆楚理工学院
7.1 对象的基本概念 方法实际是指应用程序,有三类: 1、系统提供的程序称内部函数; 7.1 对象的基本概念 方法实际是指应用程序,有三类: 1、系统提供的程序称内部函数; 2、因某一事件而激活的程序。前一类当对象生成时自动建立,后者在对象生成时系统常自动建立程序框架,由设计者设计相应程序,通常在发生某一操作时被执行,发生某一操作称为发生一个事件,程序被执行称为受消息驱动; 3.用户自定义方法。它一般由用户程序显式地调用。 2007.3 荆楚理工学院
通过实例说明对一个基本表中的数据具有添加、修改、删除,查询功能的表单设计方法。 7.2 表单设计 7.2.1 利用生成器快速设计一个录改表单 通过实例说明对一个基本表中的数据具有添加、修改、删除,查询功能的表单设计方法。 设数据表“学生”其结构为: (学号C(14)),姓名C(8),出生日期D,性别C(2),体重kg I,班级C(6),备注M)求设计一套维护程序。具体操作如下: 2007.3 荆楚理工学院
操作:在命令框中输入:Md C:\xs &&建立目录:xs 7.2 表单设计 7.2.1 利用生成器快速设计一个录改表单 1、建立工作目录 操作:在命令框中输入:Md C:\xs &&建立目录:xs Cd C:\xs &&转目录xs 2. 建立管理项目 操作:选“文件→新建→项目→新建文件”,然后输入项目名称学生管理,最后保存。 2007.3 荆楚理工学院
在项目管理器中选“数据→自由表→新建→新建自由表”,然后输入表名:“学生”,最后保存。按提示建立如上所述的表结构同图 6.2.1。 7.2 表单设计 7.2.1 利用生成器快速设计一个录改表单 3、建表结构 在项目管理器中选“数据→自由表→新建→新建自由表”,然后输入表名:“学生”,最后保存。按提示建立如上所述的表结构同图 6.2.1。 4. 设计录改表单 2007.3 荆楚理工学院
7.2 表单设计 7.2.1 利用生成器快速设计一个录改表单 2007.3 荆楚理工学院
7.2.1 利用生成器快速设计一个录改表单 一、建立界面 7.2 表单设计 7.2.1 利用生成器快速设计一个录改表单 一、建立界面 在项目管理器中选文档->表单->新建->新建表单,再输入表单名称,例“学生录入”,建立界面如下图所示。 2007.3 荆楚理工学院
7.2.1 利用生成器快速设计一个录改表单 二、事件程序设计 7.2 表单设计 选择一些控件,选它们的一些事件(现在首先是对各按钮的CLICK事件),设计相应处理程序。 例如,设计添加按钮 功能:在学生表中添加一条空记录,以让操作人员输入记录数据。 CLICK程序清单: SELECT学生 &&选定学生表所在工作区 APPEND BLANK THISFORM.REFRESH() &&更新本表单中所有控件画面 双击添加按钮,对象已选定为COMMAND1,过程已默认为CLICK,输入上述程序, 以同样方法对其他按钮设计。 2007.3 荆楚理工学院
7.2 表单设计 7.2.2 加强表单的功能 利用控件“列表框”,列出全部记录或某个字段全部内容,利用滚动条让其滚动显示,当鼠标点击其中某行时,让表中指针指在该条记录上,各控件均显示该记录内容。 一、添加列表框和“等值查询”按钮 2007.3 荆楚理工学院
7.2.2 加强表单的功能 7.2 表单设计 二、让LIST框对应显示鼠标所指任意控件所对应字段的内容 7.2.2 加强表单的功能 二、让LIST框对应显示鼠标所指任意控件所对应字段的内容 在每个字段文本框的获得焦点事件(在鼠标点击该对象,或用键盘将光标移到该对象上时激活的事件)GOTFOCUS事件中可改设置LIST1的数据源。 其格式为:THISFORM. LIST1. ROWSOURCE= “<字段名>” 2007.3 荆楚理工学院
7.2.2 加强表单的功能 三、利用列表框实现代码变换 7.2 表单设计 7.2.2 加强表单的功能 三、利用列表框实现代码变换 为实现输入的标准化,我们常对这类字段设计相应代码表,要求用户输入时以这些代码表为参考依据,或直接使用列表框列出所有标准内容,用户只需用鼠标选择就可完成输入,既方便又准确可靠。 2007.3 荆楚理工学院
7.2.2 加强表单的功能 7.2 表单设计 四、对任何一个字段都能查询 7.2.2 加强表单的功能 四、对任何一个字段都能查询 在查询时,首先要清楚用户根据什么查,可设计一个选项按钮组,列出所有可供用户选的字段名,要求用户指定查询字段。利用宏替换,可在上述同一表单中实现这一功能。需作两方面修改:在每个控件GOTFOCUS事件中定义TEXT1代表的变量x1的初值。例如在每个控件的GOTFOCUS事件程序后面都加上“x1=x3. THISFORM.REFRESH( )”。 改查询的CLICK事件中查询语句(原为“LOCATE FOR学号=x1”)改为“LOCATE FOR &x3.=x1”。运行时,如欲按哪个字段查找,例按体重过51公斤者,操作时先用鼠标点击“体重”一栏,再在TEXT1中输入51,再点击“查询”,屏幕上将显示满足条件的第一条记录。 2007.3 荆楚理工学院
7. 2.3 功能更强的录改表单 一、绑定数据源改为内存变量 上述表单在应用中有三个缺点。 7.2 表单设计 荆楚理工学院 ● 所有CONTROLSOURCE都是表中字段,因而在屏幕 上改变数据,立即会对表中记录进行修改。修改操作虽然 方便,但难以保证数据安全。 ● 查询时,先要点击文本框,再在TEXT1中输入查找 内容,麻烦且容易出错。 2007.3 荆楚理工学院
7. 2.3 功能更强的录改表单 7.2 表单设计 荆楚理工学院 ● 录入数据要先按添加再输入数据,也不够自然。 7.2 表单设计 7. 2.3 功能更强的录改表单 ● 录入数据要先按添加再输入数据,也不够自然。 ● 当查询结果为多条记录时,只能显示查到的第一条 记录。例如按性别查询,只能显示第一个男同学数据。 虽然可用添加标志,修改各个指针定位按钮程序可以找 到解决办法,但进行批修改等操作、按查找结果打印、 统计等操作都不方便。 2007.3 荆楚理工学院
7. 2.3 功能更强的录改表单 7.2 表单设计 改进办法:将各控件绑定数据源改为内存变量。 设计要点:拷贝FORM2到FORM3,修改所有字段有关控件,改CONTROLSOURCE与控件名对象相同,(学号1,姓名1…)增加8个按钮:清屏、批修改、打印预览、打印,转EXCEL,条件查询,排序,索引。将“添加”按钮改为“录入存盘”,“修改”两个按钮,界面如图6.4.1所示。 2007.3 荆楚理工学院
7.2 表单设计 2007.3 荆楚理工学院
7.2 表单设计 7. 2.3 功能更强的录改表单 ● 原INPUTMASK属性增加一位,(使得查询时,输入查询内容等于预设长度时,光标不至于移走)LIST1数据源类型改为3-SQL语句。 ● 数据环境中,学生表设为独占方式(EXCLUSIVE=.T.)。 2007.3 荆楚理工学院
由于所有变量都改为内存变量,它们要在不同控件程序中调用其值,要将它们改为全局变量。 7.2 表单设计 ● FORM1.LOAD程序清单 由于所有变量都改为内存变量,它们要在不同控件程序中调用其值,要将它们改为全局变量。 SET SAFETY OFF &&改写已有文件不显示对话框 PUBLIC学号1,姓名1,出生日期1,性别1,体重1,班级1,备注1 &&所有代表字段的内存变量设为全局变量 PUBLIC 变量名,字段名 &&x1区分代码字段,非代码字段 “字段名”为字段名,变量名为内存变量名 THISFORM.P1 &&将变量初始化语句集中放在过程P1中,本句调当前表单的P1,对内存变量初始化。 SELECT学生 COPY TO学生1 USE学生1 IN 0 2007.3 荆楚理工学院
7. 2.3 功能更强的录改表单 7.2 表单设计 二、自定义方法 在程序中,反复会遇到将有关字段的内存变量清空,对内存变量赋值,对表中内容更新的语句,为了节省篇幅,程序中设计了P1、 P2、 P3三个过程,分别完成上述操作,将来在程序中遇到这类操作,只需使用“THISFORM.过程名”格式调用它们。 三、加强修改与查询功能(代码及说明见教材P146) 四、 打印与“转EXCEL” (代码及说明见教材P146) 2007.3 荆楚理工学院
7.3 报表设计 P148 7.3 报表格式文件设计 VFP里可利用Excel 打印报表和制作图表,对 于常用到的格式固定的复杂报表则是先设计固定 的报表格式文件,然后调用该文件打印。利用报 表向导或新建报表(向导)创建报表格式文件十 分方便。 2007.3 荆楚理工学院
7.3 报表文件设计 7.3 报表格式文件设计 一、 快速建立报表格式文件 在项目管理器中选“文档→报表→新建”,此时 显示两个大按钮:报表向导与新建报表。利用报表 向导设计十分简单,但格式常受限制,本节介绍后 者。我们常先快速生成,再对它修改。 报表设计界面如图6.5.1,生成报表格式如图6.5.2。 报表分为页标头带区、细节带区和页注脚等共三 个带区。 2007.3 荆楚理工学院
7.3 报表文件设计 2007.3 荆楚理工学院
7.3 报表设计 2007.3 荆楚理工学院
7.3 报表设计 二、对报表格式进一步修改,改后内容如图6.5.3。 2007.3 荆楚理工学院
7.3 报表格式文件设计 7.3 报表设计 三、 REPORT命令 意义:按报表格式文件输出数据,数据可供显示、打印或存入文件中。 命令主要部分格式: REPORT FORM 格式文件名 [范围] [FOR 条件表达式1 ] [WHILE 条件表达式2 ] [ HEADING 每页标题 ] [PLAIN] [RANGE 开始页号[,终了页号]] [PREVIEW] [TO PRINT [PROMPT] TO FILE TXT文件名 [ASCII]] [SUMMARY] 2007.3 荆楚理工学院
7.4 自定义类库设计 7.4 自定义类库设计 在面向对象程序设计中,我们把精力用在对象的设计和对象的应用上,除了利用系统提供的类库外,还应当构造自己的类库和对象。 一、设计有重用价值的控件 1,对表单FORM3中所用部分控件的分析。 2,建立自己的类库,如“按纽.vcx”, 3,添加新类存盘。 2007.3 荆楚理工学院
7.4 自定义类库设计 二、 使用自建类库 7.4 自定义类库设计 面向对象程序设计技术是前述技术--子程序、自定义函数、宏(库)技术的进一步发展。我们把程序中整个的可重用的结构包括数据(通过属性体现)、事件、方法及界面均封装起来以类的形式在类库中存放。我们要从大量实例应用中找出共性的地方,再以类的形式定义。这过程是一个抽象化的过程。 在程序设计时,在可视化的环境中由用户从类库中形象地选取类,生成对象安装在用户的界面中,这是一个再度具体化的过程。 我们设计的类,都来自某一个基类,它们一方面继承了父类的某些属性、方法,同时又允许设计人员作新的改变和扩展,表现出其子类自身的特点。 2007.3 荆楚理工学院
7.4 自定义类库设计 三、面向对象程序设计基本概念 1.对象(OBJECT) 对象是一种将数据和操作过程结合在一起的数据结构。包括可见的事物和非可见的事物(如思想,概念等)。 2007.3 荆楚理工学院
7.4 自定义类库设计 7.4 自定义类库设计 2、类(CLASS) 类是对象的抽象,它是定义对象的特征和描述对象的外观与行为的模板。把同一类型的对象的所有共性抽象出来就可形成一个类。类具有所有对象的共同特征和行为信息。对象是类的具体表现。 2007.3 荆楚理工学院
7.4 自定义类库设计 7.4 自定义类库设计 3、事件(EVENT) 事件是能被对象识别和响应的动作,它由特定的消息所触发,这些消息由操作人员动作产生,每一个对象所关联的事件集是特定的,不同对象关联的事件集不全相同。 2007.3 荆楚理工学院
7.4 自定义类库设计 7.4 自定义类库设计 4、 方法(METHOD) 指对象能够执行的一个操作,实质是一组程序代码的集合。 方法与事件常常紧密联系,一个事件必定有一个与之对应的 方法。用户的动作激活事件,但响应事件必须通过对应的方 法来实现。 2007.3 荆楚理工学院
7.4 自定义类库设计 7.4 自定义类库设计 5、属性(PROPERTY) 属性用于描述对象所具有的性质和特点,它表现对象本 身的物理特性,同一类对象有共同的属性集,允许用户扩充, 不同对象可有许多共同属性,一个具体的对象其各个属性值 是确定的,许多可通过属性窗口或在程序中赋值设置。 2007.3 荆楚理工学院
7.4 自定义类库设计 7.1 对象的基本概念 6、继承(INHERITANCE) 继承表示类与类之间的一种隶属关系。继承使程序代码重用性提高,也使程序设计走向规范化,标准化,减少了出错可能性、有助于提高软件质量。 7、 封装(ENCAPSULATION) 把对象的内部代码与操作过程隐藏起来,用户只需知道该对象具有什么功能及如何使用和设置,而不必了解这些功能是如何实现的。 2007.3 荆楚理工学院
7.4 自定义类库设计 7.4 自定义类库设计 8、 多态性(POLYMORPHISM) 多态性是封装所必然要求的,同一类对象在实际应用中要面对不同的应用,多态性就是方法名称完全相同,但允许所带的参数不相同,参数不同时对应程序代码不相同,在调用方法时,我们使用不同参数,就实现了使用同名方法而调用不同程序代码的目的。 继承、封装、多态性是类的主要特征,在此基础上面向对象的程序设计方法已成为软件面向对象设计方法的重要组成部分。 2007.3 荆楚理工学院
7.5 应用表格控件设计表单程序 7.5 应用表格控件设计表单程序 P155 VFP提供了“表格”控件可供我们设计更好用的界面。界面设计如图6.7.1所示。 返回 2007.3 荆楚理工学院
7.5 应用表格控件设计表单程序 7.5 应用表格控件设计表单程序 一、表格(GRID1)属性 ● GRID 列数和表中主要字段数一致。 ● 数据源类型 RECORD SOURCE TYPE 设为1-别名 ● 一个表格对应一个表,数据源RECORD SOURCE 在程序中设置,预先不作设置。 ●允许表格中添加新记录,即设置ALLOW ADD NEW 为.T. 2007.3 荆楚理工学院
7.5 应用表格控件设计表单程序 7.5 应用表格控件设计表单 ● 拆分表格时,左右窗格互相链接定义PANELLINK=.T. 为应用方便,可把表分为两个,均显示同一表数据,利用一个表格定格于部分字段,另一表格用于修改。一个表字段可能很多,不可能在一屏中显示,我们有时修改只对几个字段。但很难做到既将关键字等识别字段显示在屏幕上,同时又将修改字段放到屏幕上,但把表分为两个,就可办到了。 2007.3 荆楚理工学院
7.5 应用表格控件设计表单程序 7.5 应用表格控件设计表单程序 荆楚理工学院 ● 按像素点计,拆分表格为两个窗格时左边宽度定义 “PARTITION =0” ● 如拆分时两个窗格的显示方式可不同,“浏览”为按 列显示方式,“更改”为按行显示方式。本处定义 “VIEW=0-浏览”。 2007.3 荆楚理工学院
7.5 应用表格控件设计表单程序 7.5 应用表格控件设计表单程序 ● 列COLUMN 属性主要注意设置WIDTH 等位置有关属性。 每一列原定义文本框显示值,也可改为编辑框、复选框如一列中添加了编辑框、复选框、要设置:哪一个用来显示活动单元的值CURRENTCONTROL例加入编辑框EDIT1,可在CURRENTCONTROL栏中填入EDIT1。 2007.3 荆楚理工学院
7.5 应用表格控件设计表单程序 二、表单初始化 7.5 应用表格控件设计表单程序 荆楚理工学院 ● VFP5.0版“表格”控件在数据录入、删除等更新操作中,显示内容不能随之更新,因而我们在静态设置时不设置RECORDSOURCE 属性,而在FORM1.INIT事件,及添加、物理删除语句后增加对RECORDSOURCE定义的语句。 ●而VFP6.0版中,当表格与表绑定时,物理删除时易出现“文件已在另一个工作区打开”错,因此,表单涉及的所有数据表不要置于数据环境中,而要采取在FORM1.LOAD事件中打开所有表,在物理删除前先关闭所有表又重新打开的措施。 2007.3 荆楚理工学院
7.5 应用表格控件设计表单程序 ●每列中HEADER属性注意设置各栏目标题即CAPTION属性。 ●“表格”设计中,还可使用生成器。 三、列表框与按钮事件程序(见教材) 2007.3 荆楚理工学院
7.6 多表程序设计 P157 7.6 多表程序设计 一、 一个窗口中涉及两个表的程序 2007.3 荆楚理工学院
7.6 多表程序设计 二、学生成绩添加与修改程序 界面如下图所示。 2007.3 荆楚理工学院
7.7 一个功能强大的多条件组合查询表单 一、程序界面与功能设计 7.7 一个功能强大的多条件组合查询表单 一、程序界面与功能设计 设计构想:在前面录改程序中已设计了根据单一字段找的功能,操作时首先应指定字段,再给定查找值,然后选关系符。 在程序中形成条件表达式: 字段名 = 查找值 ,或“ 字段名 关系符 查找值 ”。例如“姓名=X1”,其中X1等于“王兵”或“王”$姓名,再开始查询。 2007.3 荆楚理工学院
7.7 一个功能强大的多条件组合查询表单 7.7 一个功能强大的多条件组合查询表单 组合查询设计的关键在于形成上述多个查询条件表达式并用逻辑关系符“AND”,“OR”连接即可,例如学号>“20010903010002”AND性别=“男”,由学号>“20010903010002”和性别=“男”两个表达式经逻辑关系“AND”连接得到。 二、初始化程序(见教材) 2007.3 荆楚理工学院
7.7 一个功能强大的多条件组合查询表单 组合查询表单的界面见图。 2007.3 荆楚理工学院
7. 8 简介其它常用容器和控件 一、计时器 设计可在时间到定时时间时中断。用于设计动画程序,通信程序。 二、形状 7.8 常用控件简介 7. 8 简介其它常用容器和控件 一、计时器 设计可在时间到定时时间时中断。用于设计动画程序,通信程序。 二、形状 用于对窗口装饰,使之美化。 2007.3 荆楚理工学院
7. 8 简介其它常用容器和控件 7.8 常用控件简介 三、图像 用于在窗口插入图片,美化窗口,制作图形标签或制作 动画。图片源可为图形文件(.BMP文件)、图标文件(.ICO文件)、静态指标文件(.CUR文件)等。主要属性:PICTURE填入图形文件名,还可在程序中动态定义该属性。 2007.3 荆楚理工学院
7.8 常用控件简介 7. 8 简介其它常用容器和控件 四、 页框 当一个表单需要多个窗口时,例如涉及对不同表的操作,对一个表的不同操作,对一个表不同部分的操作,为完成一个事务的不同操作等情况可利用页框,它是表单下的一个容器,将表单分为多个页面,每个页面上可安装不同控件。在程序运行中,只要用鼠标点击不同页面,就可实现窗口的改变。 2007.3 荆楚理工学院
7. 8 简介其它常用容器和控件 五、表单集与多文档界面 使用表单集可在界面上同时打开多个窗口,对多文档操作。 7.8 常用控件简介 7. 8 简介其它常用容器和控件 五、表单集与多文档界面 使用表单集可在界面上同时打开多个窗口,对多文档操作。 实现方法:设计生成第一个表单后,在主菜单上选表单→创建表单集。表单集FORMSET是表单FORM的上层容器。 2007.3 荆楚理工学院
7.8 常用控件简介 2007.3 荆楚理工学院
一、OLE (OBJECT LINKING AND EMBEDDING) 7.9 OLE与ACTIVEX控件 P177 7.9 OLE与ACTIVEX控件 一、OLE (OBJECT LINKING AND EMBEDDING) 即对象链接与嵌入,指把一个对象如文本、声音、图片或视频等数据,以链接的方式或以嵌入的方式包含在自己的应用程序里的技术。 通过OLE可以在自己程序里使用如EXCEL、WORD等WINDOWS应用程序。用户在需要它们时只需双击该OLE对象,就可在VFP中启动该应用程序。 2007.3 荆楚理工学院
7.9 OLE与ACTIVEX控件 7.9 OLE与ACTIVEX控件 二、ACTIVEX控件及其使用 2007.3 荆楚理工学院
7.9 OLE与ACTIVEX控件 返回 2007.3 荆楚理工学院
7.9 OLE与ACTIVEX控件 7.9 OLE与ACTIVEX控件 三、拨号通信表单设计 这里以一个通过MODEM拨号进行通信的程序为例说明ACTIVEX控件在VFP中的使用。 在表单控件工具栏上,选ACTIVEX控件,再点击表单在插入对象对话框中选“插入控件”,选MICROSOFT COMMUNICATIONS CONTROL VERSION 6.0,之后出现一个图标为电话机的拨号控件,其设计详细内容请看随机光盘中表单PHONE.SCX 。 表单界面设计如图6.11.2所示。 2007.3 荆楚理工学院
7.9 OLE与ACTIVEX控件 返回 2007.3 荆楚理工学院