Visual FoxPro 数据库全套课件_第1页
Visual FoxPro 数据库全套课件_第2页
Visual FoxPro 数据库全套课件_第3页
Visual FoxPro 数据库全套课件_第4页
Visual FoxPro 数据库全套课件_第5页
已阅读5页,还剩428页未读 继续免费阅读

下载本文档

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

文档简介

第11章

SQL视图、VFP8.0的CursorAdapter和客户/服务器编程11.1客户/服务器结构(Client/Server)安装ODBC数据源:(1)转到Windows控制面板(ControlPanel),并选ODBC图标。(2)在数据源(DataSources)对话框选添加(Add)。(3)在添加数据源(AddDataSource)对话框选择SQLServerODBC程序,并选确定(OK)。(4)在ODBCSQLServer安装对话框,键入数据源名称(DataSourceName,例如:SQL2000)、说明(Description,例如:SQLserverVersion2000)和其它合适的信息,然后选确定。(5)在数据源对话框选关闭(Close)。11.2创建和使用视图(SQLView)一、本地视图和远程视图远程视图:使用远程SQL句法从远程ODBC数据源选择信息。本地视图:使用VFPSQL句法从表或视图选择信息。

数据库中使用的视图设计器与查询设计器基本类似,不同点:视图不象查询,它是可修改的,在SQLView中修改数据后,VFP会自动修改与视图有关的基表(即视图建立在之上的表)中的数据;视图只能作为数据库的一部分保存下来而不是作为一个单独的文件(选择文件+保存菜单项去存贮视图,视图名不能含路径),而查询可以作为单独的QPR文件存贮;视图可以包含远程服务器中的表,用户在自己的计算机上所作的修改可以送回到服务器。二、创建本地视图(LocalView)

为创建本地视图,可在菜单“文件”(File)→“打开”(open),打开一个项目后在项目管理器(ProjectManager)选择一个数据库(Database),然后选本地视图(LocalView),再选“新建”(New)去打开视图设计器(ViewDesigner);或者使用CREATESQLVIEW命令带AS子句。例11.2:建立一个包括Products表中全部字段的视图:CREATESQLVIEWProduct_ViewAs;SELECT*FROMtestdata!products三、创建多表视图

用户若想访问存贮在两个或更多的表中的相关信息时,可创建多表视图。在用视图设计器创建一个视图时,添加多个表,或者用CREATESQLVIEW命令能建立多表视图。通过修改已存在的视图或通过创建新视图,创建多表视图。1.修改一个视图例11.3:用程序码在视图设计器中显示Product_view视图:OPENDATABASEtestdataMODIFYVIEWProduct_view2.用语言创建一个多表视图(1)在WHERE子句中使用联接条件例11.4:如果想知道订单的信息,包括接收订单雇员和发出订单顾客的信息,可建立一个使用Customer、Orders和Employee表的视图,用WHERE子句指出连接条件(即视图中只包含满足此条件的记录)。OPENDATABASEtestdataCREATESQLVIEWcust_order_emp_wiewAS;SELECT*;FROMtestdata!customer,testdata!orders,testdata!empoyee;WHEREcustomer.cust_id=orders.cust_id;.AND.employee.emp_id=orders.emp_id(2)用FROM子句指定视图的联接条件例11.5:OPENDATABASEtestdataCREATESQLVIEWcust_orders_viewAS;SELECT*FROMtestdata!customer;INNERJOINtestdata!orders;ONcustomer.cust_id=orders.cust_id例11.6:OPENDATABASEtestdataCREATESQLVIEWcust_orders_viewAS;SELECT*FROMtestdata!customer;LEFTOUTERJOINTESTDATA!Orders;ONcustomer.cust_id=order.cust_id11.2.3定义一个连接(Connection)1.定义一个连接(Connection)可采用如下方法之一:(1)在项目管理器数据库(Database)列表中,选择连接(Connection),然后选“新建”(New)去打开连接设计器(ConnectionDesigner)。(2)或,打开一个数据库,并使用CREATECONNECTION命令去打开连接设计器。(3)或,使用带有一个连接名字的CREATCONNECTION命令去打开连接设计器。2.显示存在的连接用户可在项目管理器选择一个数据库(database),然后选择连接(Connections)。或者使用DISPLAYCONNECTIONS命令确定存在的连接。例11.8:显示testdata数据库的连接。OPENDATABASEtestdataDISPLAYCONNECTIONS11.2.4创建远程视图(RemoteView)在项目管理器,选择一个数据库(Database),再选择“远程视图”(RemoteView),然后选“新建”(New)去打开视图设计器。或,使用带有REMOTE和(或)CONNECTION子句的CREATESQLVIEW命令去建立一个远程视图。如果在CREATESQLVIEW命令中使用CONNECTION子句,不必再包括REMOTE关键字,VFP也会指定视图为远程的。例11.9:从远程服务器上Testdata数据库的products表建立一个远程视图。OPENDATABASEtestdataCREATESQLVIEWproduct_remote_viewCONNECTOINremote_01;ASSELECT*FROMproducts11.2.5更名或删除视图11.2.6使用视图1.在多工作区打开一个视图2.显示视图结构3.设置视图和连接(Connection)属性1.3更新视图的数据视图属性 缺省设置Table 具有可更新字段和具有至少一个主关键字段的全部表KeyField 数据库关键字段和表的远程主关键字UpdateName 所有字段形式为表名.列名Updatable 除了主关键字段的全部字段SendUpdates 它原始设为假(.F.),只在工作期内有效。如果改变它为真(.T.),则成为该工作期中所建立的全部视图的默认值11.4集成视图(CombiningView)1.集成本地和远程数据在视图中用户通过创建基于本地视图和远程视图的新本地视图,可以集成本地和远程数据。要创建一个集成本地和远程数据的视图,可以:(1)在项目管理器选择一个数据库(database),再选本地视图(Localviews)和选“新建”(New)去打开视图设计器。在视图中添加表、本地视图和远程视图。(2)或使用CREATESQLVIEW命令。2.在一个视图中更新本地和远程数据当用户在一个多级视图中更新数据时,更新“走”到下一级(顶级视图所基于的视图)。如果想更新多级视图的基表,必须为结构中的各视图发出TABLEUPDATE命令。为多级视图更新基表最容易的方法是从顶级向下关闭(close)视图结构,因为当关闭一个视图时,VFP自动发出一个TABLEUPDATE命令。11.5使用视图和SQL传递进行C/S模式编程11.5.1使用视图(SQLViews)进行C/S模式编程可以使用视图作为开发一个强有力的客户/服务器应用程序的核心方法。远程视图是一个功能强大的技术,它设计来使你能够从远程服务器选择恰好需要的数据下载到本地VFP临时表(cursor)中,然后可以使用它去查看和更新远程数据。一个视图是来自SQLSELECT语句的一个基本结果集。可使用参数化的SELECT语句下载特定的小数据集合(参数化查询详见VFP的帮助)。11.5.2升迁及升迁向导(UpsizingWizard)VFP提供两个升迁向导:“Oracle升迁向导”和“SQLServer升迁向导”。这两个向导可创建一个Oracle数据库或SQLServer数据库,实现VFP数据库中各表的功能。还可以重定向VFP视图,使其使用新建的远程数据而不是本地数据。以及实现将本地应用程序移植为客户/服务器应用程序等升迁。11.5.3使用SQL传递(SQLPass-through)进行C/S模式编程SQL传递(SPT)技术用VFP的SQL传递函数去直接访问远程服务器。这些函数允许超过视图的功能进行附加的服务器访问和控制。例如,使用SQL传递可以完成远程服务器上的数据定义,设置服务器属性和访问服务器存贮过程(Procedures)等。SQL传递是建立只读结果集和使用任何其它当地SQL语法最好的工具。与视图(它只是来自SQLSELECT语句的一个结果集)不同,SQL传递可使用SQLEXEC()函数去发送任何希望的东西到服务器。

11.6VFP8.0的CursorAdapter与C/S模式编程11.6.1VFP8.0的CursorAdapter概述11.6.2CursorAdapter的属性、事件和方法及工作本节先介绍CursorAdapter工作的例子,从而引导读者了解CursorAdapter的PEMS,即它的属性(Properties),事件(Events)和方法(Methods)。下面的例子可得到来自后端SQLServer的Northwind数据库Customers表中Brazilian客户的一定的字段。其Cursor是可更新的,所以如果在Cursor做任何改变后关闭它,再重新运行此程序,便可以看到此变化已存贮到后端数据库中。11.6.3使用naive的CursorAdapter11.6.4使用ODBC的CursorAdapter

ODBC实际上是DataSourceType4个设置中最直接的。可以设置DataSource为一个打开的ODBC连接柄(handle),设置有用的属性和调用CursorFill去取回数据。如果“填充”好KeyFieldList、Table、UpdatableFieldList和UpdateNameList的内容,VFP将自动产生合适的UPDATE、INSERT和DELETE语句,并用其带来的任何变化去更新数据库。如果想使用一个存贮过程(storedprocedure)代替之,则应合适地设置*Cmd、*CmdDatasource和*CmdDatasourceType属性。11.6.5使用ADO的CursorAdapter11.6.6使用XML的CursorAdapter例11.25:LocallowsasdataserverwebserviceLows=NEWOBJECT(〝Wsclient〞,HOME()+〝ffc\_webservices.vcx〞)Lows.cWSName=〝dataserverwebserviceLows=lows.setupClient(http://localhost/sQDataServer/dataServer.WSDL″,; 〝dataserver〞,〝dataserverSoapPort〞)lcXML=lows.GetCustomers()returnlcXML例11.26:LocalloXMLasMSXML2.XMLHTTPLoXML=createobject(′MSXML2.XMLHTTP′)LoXML.open(′POST′,′http://localhost/northwind/template/′+;′getallcustomers.xnl′,.F.)loXML.setRequestHeader(′Content-type′,′text/xml′)loXML.send()returnloXML.responseText第八章设计应用程序实例—文档管理信息系统程序设计8.1设计应用程序的方法1.系统分析和总体设计阶段

(1)系统要求;

(2)初步调查;

(3)系统分析;

(4)总体设计;

2.详细设计阶段(5)详细调查;(6)详细数据流图和详细模块;(7)数据库设计;(8)I/O(输入/输出)设计;(9)模块功能设计;(10)处理过程设计;

3.系统实施阶段(11)程序设计;(12)程序调试;(13)系统测试;(14)试运行;

4.系统维护阶段(15)评价;(16)写系统说明书;(17)维护与改进;(18)其他(用户有偿委托新增事务)。1.系统功能概述 本系统能在任何IBMPC微机及兼容机上运行,用FoxPro关系数据库语言编制,是实用的对文档、单位自拟或上、下级所发文件、汇报、文献、论文、文章、合同等管理应用的软件系统。 系统采用模块化程序技术及用人机对话、汉字提示、菜单驱动,人机界面友好、操作方便、简单易行。 要求该系统建立文档数据表,具有输入、修改、插入、删除文档目录卡片的功能。能显示、打印文档登录报表和文档目录卡片。具有多种检索手段,能快速查找文档卡片,以便文档管理人员和用户查阅或提取文档。

8.2文档管理信息系统要求:用面向对象的程序设计完成“文档管理系统”软件2.系统运行的软、硬件环境 (1)硬件环境:IBMPC微机及兼容机系统。 (2)软件环境: 操作系统:Windows及其汉字系统或相应平台的中文版操作系统。关系数据库系统:VFP。3.文档数据表的设计 文档数据表DF.DBF的结构有如下: 字段 字段名类型 宽度 小数

1 登录号(DEN) C 9 2 登录时间(STIM) D 8 3 主题关键词或分类号(NO) C 11 4 行文者号(WO) C 10 5 文档名(BK) C 50 6 行文者名(WR) C 50 7 行文地(AD) C 50 8 登出刊物(UN) C 20 9 行文时间(TIM) D 8 10 页数(P) N 3 11 涉及金额(S1) N 11 2 12 该文处理情况(Z) C 50 13 摘要(CO) M 44.系统模块总框图 略。其中检索模块和打印、显示模块都具有子模块结构。5.系统主要数据表和模块程序文件名

(1)文档数据表名:DF.DBF (2)主控模块:DM.PRG (3)输入模块:DIP.PRG (4)修改摸块:DRE.PRG (5)插入模块:DIN.PRG (6)删除模块:DEL.PRG (7)检索模块:DFI.PRG (8)打印及显示模块:DDP.PRG第二章常量、变量和表达式2.1常量2.2变量2.3表达式(自学)第二章常量、变量和表达式2.1常量类型:字符常数、日期常数、逻辑常数、数值常数、货币常数和日期时间常数。2.2变量 字段变量(field)

变量: 一般内存变量 内存变量(memvar): 系统内存变量 数组变量。

一、字段变量字段变量:数据表中的每一个字段,字段名就是字段变量名。字段变量的当前值等于表中当前记录该字段所对应的内容

。如:表STU1中:学号,姓名,数学成绩等等字段都是字段变量名,其值是每一个学生相应的数据。二、内存变量

内存变量:用内存单元存贮的变量。内存变量名:由汉字、26个英文字母、0-9数字字符或下划线(_)组成。必须由字母字符或汉字开头。内存变量的类型则是“动态型”,即在程序执行期间当变量建立时才赋予。如:A1,BB,XT,注:内存变量名一般不要与正打开的表的字段名同名,VFP内存变量有如下的型:A Array (数组型)C character (字符型)D Data (日期型)L logical (逻辑型)N Number (数字型)Y Currency (货币符号型)T Datetime (日期时间型)系统内存变量:(systemmemory)是一种特殊的内存变量,它是用来保持含有信息(例如,文本报表应打印的拷贝数等)的系统变量。可通过一个前导下划线(例如,_pcopies)来识别它。系统内存变量由VFP预先定义好了的,所以属性是固定的。例如:numcopy=2&&建立叫numcopy的内存变量为N型。_pcopies=2&&赋值于已存在的系统内存变量

numcopy="Hello" &&改变变量的型为C型_pcopies="Hello" &&错误,不能改变为C型1、建立内存变量赋值命令格式1:STORE<表达式>TO<内存变量表>格式2:[<内存变量>]=<表达式>例:AB=5 &&数值5赋给变量AB?AB5STOREAB+8TOAN&&将AB的值+2存入AN中AA=“成都”(或STORE“成都”TOaa)xy=12345X1=.t.2、释放内存变量格式:RELEASEALL[LIKE|EXCEPT<结构>]|<内存变量表>例如:releaseAAreleasealllikeA*(或:releaseallexceptX*)3.显示内存变量格式:DISPLAYMEMORY[TOPRINT] LISTMEMORY[TOPRINT]见书P274.内存变量文件(.MEM)格式:SAVETO<文件名>[ALLLIKE/EXCEPT<结构>]功能:保存当前内存中的内存变量于指定的文件名中。格式:RESTOREFROM<文件名>[ADDITIVE]

功能:将存贮内存文件中的内存变量调入内存。

作业:1、自学2.2.3—2.3节。2、习题(2.4不做)。第九章表单(FORM)和面向对象的程序设计9.2 应用程序的组装“模块”:VFP类与对象9.1 表单及表单设计9.3表单对象的应用实例9.4设置表单或表单集模板(Template)9.1表单及表单设计

表单又叫“窗体”,提供给用户一个对数据查看、输入的屏幕“界面”;提供了一个能适应用户事件和系统事件的强有力的对象集,使用户能方便地完成信息管理任务。

一、表单的类型1.从创建单文档和多文档界面来分表单类型在VFP中有两种应用程序界面:多文档界面(MDI)单文档界面(SDI)第十章表单(FORM)和面向对象的程序设计本章将介绍:表单、表单集的设计及应用;面向对象的程序设计;VFP中的类和对象。

多文档界面(MDI):由单一的主窗口组成,其它应用程序窗口在主窗口中或浮动在主窗口之上。VFP本身就是一个MDI的窗口,包含了命令窗口,编辑窗口和设计窗口等。单文档界面(SDI):由一个或多个相互独立的窗口组成,这些窗口单独显示。但也有一些应用程序综合了SDI和MDI的特性,需要将SDI和MDI混合使用。例如,VFP将调试器显示为一SDI应用程序,而它本身又包含了自己的MDI窗口

为了支持这两种类型的界面,VFP允许创建以下几种类型的表单:子表单(ChildForm):用于创建MDI窗口中一个表单,子表单不可移至父表单(主表单)边界之外,当其最小化时将显示在MDI窗口的底部。如主窗口最小化时,它也一同最小化。浮动表单(FloatingForm):属于一主表单,但并不是包含在主表单中,它可以移至屏幕的任何位置,但不能在主窗口后台移动。最小化时,它将显示在桌面的底部。当MDI最小化,一同最小化。顶层表单(Top-leveform):没有父表单的独立表单,用于创建一个SDI应用程序,或用作MDI应用程序中其它子表单的父表单。顶层表单与其他Windows应用程序同级,可出现在其前台或后台,并且显示在Windows任务栏中。表单类型ShowWindow属性MDIForm Desktop主表单2-作为顶层表单 .F. .F.子表单0-在屏幕中 .T.最大化时子表单和父表单相连.F. 1-在顶层表单中.F.最大化时子窗口为分开窗口浮动表单0-在屏幕中.F. 2-作为顶层表单 .T.

设置表单的下同类型:表单在新建立时方法都是一样的,只有通过更改表单的属性可以将表单设置为所需的类型1、新建三个表单,其属性设置如下:

表单文件名 captionshowwindowsnameMidFormDesktop1、MdiForm.scxMdi表单2-作为顶层表单frmMDI.F. .F.2、ChilsForm.scx子表单1-在顶层表单中frmchlid.T..F.3、FloatForm.scx浮动表单0-在屏幕中frmfloat.F..T.2、修改表单,在表单文件MdiForm.scx中添加二个命令按钮:其一Caption分别为“显示子菜单”,代码为DOFormChildForm.scx,另一为“显示浮动菜单”,代码为DOFormFloatForm.scx三类表单演示操作让我们进行演示,建立三个表单,分别为:MDIform.scx、Childform.scx、loatForm.scx作为数据(库)表数据信息的输入、输出显示屏幕的界面2、从表单用途分类,主要有以下两类:作为应用程序主屏幕(主采单)的界面文档管理信息系统输入修改检索删除打印、显示退出按分类号按分类号按文档名按任意条件按分类号按任意条件打印全部卡片打印登记报表显示全部卡片表单设计主菜单表单设计的各种界面三个表单

二、创建表单及表单集方法:

•文件菜单笺—新建—表单—新文件(或向导)

•顶目管理器—文档—表单—新建即可进入表单设计器

常使用表单向导(FormWizard)或表单设计器(FormDesigner)来新建表单。1、在表单设计器中用户自已设计表单2、使用向导建立新表单在表单向导对话框中,按提示(与使用其它向导一样)一步步选择完成。3、扩展表单为表单集 表单集是由一个或多个表单组成,可以作为一个整体单元操作,可以同时显示或隐蔽全部表单。建立了一个表单集便可以对它添加多个表单。(1)建立表单集方法:先建立一个表单,然后在“表单”菜单中选择“创建表单集”(CreateFormset)即建立了一个表单集。(2)添加和移除表单:可从“表单”(Form)菜单选“添加新表单”(AddNewForm)。为从表单集去掉一个表单,可以在表单设计器底部的“表单”(Form)框选择表单,然后从“表单”(Form)菜单选“移除表单”(RemoveForm)。(3)移除一个表单集:可从表单(Form)菜单选“移除表单集”(RemoveFormset)。四、创建表单集 表单集是一个或多个表单的“父亲”容器。可对多个表单进行统一管理和使用。一、创建表单集 新建或打开一个已存在的表单,在主菜单笺“表单”中选”创建表单集”二、添加、移除表单 在主菜单笺“表单”中选”添加表单”或“移除表单”4、设置数据环境 表单和表单集的数据源:表(Tables)和视图(Views),以及表之间的关系,用数据环境设计器来添加。

在属性窗口中一般的数据环境属性设置如下:属性 描述 缺省设置AutoCloseTables 当表或表单集释放时,控制是否表和 真(.T.)

视图被关闭AutoOpenTables 当表单运行时,控制数据环境中的表 真(.T.)

和视图是否打开

InitialSelectedAlias当表单运行时,所选择的表或视图 在设计时,如果没有指 定,则选定在运行时第 一个加到数据环境的临 时表三、添加和操作表单对象

步骤 每个表单都有相应的属性、事件、方法。常用表单控制工具栏、调色板工具栏、布局工具栏、属性窗口、数据环境等进行设计。设计一个表单的步骤:

(1)创建表单并设置表单的属性(2)给表单添加适当的容器、控件(3)设置容器、控件的属性(4)编写事件代码选定对象查看类标签文本框编辑框命令按钮命令按钮组选项按钮组复选框组合框列表框微调控件表格图象计时器页框Active控件绑定控件线条形状容器分隔符超级链接生成器锁定按钮锁定通过“表单控制工具栏”添加对象到一个表单,对象可是:(1)容器(Container)(2)控件(Controls)(3)用户自定义类(4)OLE对象1、添加VFP容器到表单:命令按钮组(Commandbuttongroup)

表格(Grid)

选项按钮组(Optionbuttongroup)

页框(Pageframe)2、添加VFP控件到表单:复选框(Checkbox)、组合框(Combobox)、命令按钮(Commandbutton)、编辑框(Editbox)、图像(Image)、标签(Label)、线条(Line)、列表框(Listbox)、OLE绑定型控件(OLEBoundControl)、OLE容器控件(OLEContainerControl)、形状(Shape)、微调控件(Spinner)、文本框(Textbox)、记时器(Timer)。功能和所选控件对应关系功能类型 应该选择的控件提供给用户预先设定的选择选择按钮组、列表框和下拉列表框、复选框接受不能预先设定的用户输入文本框、编辑框、组合框接受有一定值范围的输入 微调执行具有一定时间间隔的特定任务计时器显示信息 图像、标签、文本框、编辑框 、形状操作练习:向表单添加控件1、图像、标签、文本框、编辑框、形状。2、用生成器锁定控件、按钮锁定控件给表单添加控件。3、按钮组、列表框和下拉列表框、复选框4、微调、计时器

9.2 面向应用程序的组装“模块”:VFP类与对象 在学习表单设计中,通过上机实践对面对象的程序设计已有了一定的认识,下面以表所示来小结:面向对象方法与结构程序设计方法之区别:设方式方法计方式数据显示方式处理方式使用方式处理顺序结构程序面向对象程序过程性(Process)对向性(Object)显示型隐藏型单一程序编码对象模块化一次使用可以重用定位方式非定位方式设计方式

指对问题处理的程序设计方式。1、过程性的设计思想中

•是针对问题采用顺序性的程序处理决问题。

•采用逻辑概念设计程序文件。

•在解决问题的过程中,常发生调用子过程程序文件。2、面向对象程序设计方法,是采用“对象”为设计思想中心。

•不采用顺序性处理方式,对问题采用了对象本身的属性与方法来解决问题。

•在处理问题过程中,可以直接在对象中设计事件程序,直接触发问题。一、VisualFoxPro中的对象1、什么是对象? 对象是VFP程序的基本构造块,对象具有属性(Properties)、方法(Mathod)以及键盘、鼠标或程序触发等的事件程序,通过属性、事件和方法等等所组合而成的具体抽象实体,就称为对象。

而通过属性、事件和方法,可以实现一个对象的功能。2、对象的属性、事件和方法 “属性”(Properties)封装了数据,每个对象都具有“属性”。“属性”值可以在设计时设置,也可以在运行时更改,但有的“属性”是只读属性,不可改变。 “事件”(Events)是预先定义的动作,由用户或者系统激活。VFP中的事件通常包括了键盘“事件”和鼠标“事件”,如单击或双击鼠标,移动鼠标、按键盘等(见P247)。 “方法”(methods)是指对象为实现一定功能而编写的代码,“方法”和对象相连。事件中的代码可以认为是基于事件的响应方法。但“方法”是可以独立于事件的单独代码,必要时可以由其它方法或程序代码进行显示的调用。

事件通常已经预先由系统定义好了,不能随便的扩充,而方法和属性却可以无限的扩展,事件的发生具有一定的顺序, 如:load和click,load在执行表单时就激活了,而click在执行表单后需单击命令按钮才激活。如:下例:

FORM(事件):load代码:thisform.backcolor=rgb(255,0,0) Command(事件):click代码:thisform.label2.caption="abcdefg"执行表单文件,立即form的背景为红色。当单击command1,label1的值才显示出来。二、VisualFoxPro中的类

VisualFoxPro中的对象的概念和类的概念是密切相关的,但是有区别的,类作为一个对象的整体定义而存在,它是对象的轮廓和蓝图。

对象和类的关系就如同一台机床和图纸的关系,图纸决定了某一种类型的机床的功能和外观,而一台具体的机床可以看作一个对象而存在。某种类型的,根据机床的初始设计图可以设计出一个系列的机床产品图,这就如同由一个父类派生出若干子类一样,属于某个系列的某一台具体的机床可以看作是一个具体的对象。

所有对象的属性、事件、方法在定义类时都将被指定。类的三大特性:封装性、继承性、再分类性(子类)。(1)封装性

如一台电话只需一根电话线连接就可以拨号使用,而不必去了解电话内部的设置。你看到的是电话类的一个对象,其内部的接收、转换、电子信号的处理等复杂性(属性、事件、方法)被隐藏了。

通过对事务的抽象,由类定义的对象可以将自己内部的复杂性封装起来。 封装就是指将对象的方法、属性代码包装在一起。图1电话如下图所示,“电话”种类可以有很多种,但都具有基类电话的基本属性。即可从父电话类派生出一系列的子电话类,这些子类的形状虽然有改变或新增加了一些属性(功能),但仍继承了父类的基本属性、事件和方法。图2(2)继承性子类可以继承父类的所有的属性和方法,也可根据需要加入新的属性和方法。(3)再分类(SubClass) 意义要于类(Class)本身可以不受层次的限制,往下扩展更多的类,让子类继承上一层类的方法,并且有其本身的属性与方法定义。这样使程序编码减至最低。甚至在修改时,只需要修改其中一层的类,其子类(SubClass)均自动调整。增加维护效率。如: IC产生掌上型扫描仪,又将掌上型扫描仪某一功能板装至桌上型扫描仪,最后又将桌上型扫描仪某一元件装至投影片扫描仪。Class:掌上型扫描仪SubClass:桌上型扫描仪、投影片扫描仪图3

存贮该新建的命令子类,用于表单中实现“退出”功能。其代码及caption的属性“退出”都被封装,看不到了。而且继承了命令按钮类(父类)的原已有的属性等。2、类的创建、修改及使用创建类有二种方法:用类设计器创建、通过写代码创建。下面用类设计器来创建类(同时对类的三大特性进一步了解)命令按钮类,子类:代码:thisform.release由它创建创建:新建文件类新文件类设计器保存:文件类型为类

修改:打开类类文件名进入类设计器可修改。例1:例2:创建“电子查看”类方法:新建表单文件另存为类。ifthis.parent.label1.left+this.parent.label1.width>0 this.parent.label1.left=this.parent.label1.left-20elsethis.parent.label1.left=this.parent.shape1.widthendif自定义类演示将整个表单另成为“电子查看”类(自定义类),类文件名为JZ.vcx将生成的自定义类添加到类库操作:1、新建表单集,拖放JZ到表单集(bdj.scx),双击“计时器”,看不到代码,被封装。

2、执行结果,文本内容显示。3、打开JZ类进行修改:删除文本“文档管理信息系统”,再打开表单集(bdj.scx),可见其类(JZ.vcx)自动被修改。4、以JZ.vcx为父类,创建子类jzz.vcx。(方法与例1同)(可用例1建的类,代码:thisformset.release)5、拖放到表单集(BDJ.SCX)form2中,增加文本执行三、类的层次如书P2481、VFP的基类和层次书P2492、容器(container)类和控件(Control)类VFP的类有两种主要类型:容器类和控件类。(1)容器类 容器类包含其它对象,并且允许访问这些对象。见表9-8列出了各容器类所能包含的对象。(2)控件类 控件类的封装比容器类更为严密,但因此损失了一些灵活性。控件类没有“Addobject”方法程序。(”没有增加对象“)四、对象的处理1、在容器层次中引用对象为处理一个对象,需要知道它相对于容器层次的关系。例如,如果要在表单集中处理一个表单的控件,则需要引用表单集、表单和控件。在其容器层次中引用对象好比给VFP提供这个对象的地址。(1)绝对引用通过提供对象的完整容器层次来引用它:命令:frsFormSet.frmForm1.cmdButton1例:为了让表格列(gridcolumn)中的控件不起作用,需要提供下面的地址:Formset.Form.PageFrame.Page.Grid.column.Control.Enabled=.F.对象的完整容器层次(2)相对引用在容器层次中引用对象时,例如在表单集合中表单命令按钮的Click(单击)事件,可以通过快捷键方式指明所要处理的对象。下表列出了一些属性和关键字,这些属性和关键字允许更方便地从对象层次中引用对象。

属性或关键字 引用

Parent 该对象的直接容器。

THIS 该对象。

THISFORM 包含该对象的表单。

THISFORMSET 包含该对象的表单集。

应用: 命令 何处包含此命令THISFORMSET.frm1.cmd1.Caption=ˊABCˊ 在此表单集合的任何表单上任 何控件的事件或 方法码中。THISFORM.cmd1.Caption=ˊABCˊ 在cmd1所在同样的表单上任何 控件的事件或方 法代码中。THIS.Caption=ˊABCˊ 在需要改变标题(caption)的控件 的事件或方法代码中。THIS.Parent.BackColor=RGB(192,0,0) 在表单上一个控件的事件或方 法代码中,此命 令改变表单的 背景颜色为暗红色。2、设置属性语法:Parent.Object.Property=Value(即:父.对象.属性=值)设置多个属性语法:WITH…ENDWITH例如,在表单集的一个表单中,要设置表格列的多个属性,可以使用如下语法结构:WITHfrsFormSet1.frmForm1.grdGrid1.grcColumn1.width=5.Resizable=.F..ForeColor=RGB(0,0,0).BackColor=RGB(255,255,255,).SelectOnEntry=.T.ENDWITH3、调用方法一旦对象被建立,就可以在应用程序的任何一个地方调用此对象的方法。调用方法的语法如下:Parent.Object.Method(即:父.对象.方法)例:调用显示一个表单的方法:frsFormset.frmForm1.Show4、响应事件当事件发生时,该事件的过程代码将被执行。系统响应用户动作时,事件将被自动触发。例如,当用户单击一个控件时,系统自动执行为Click事件编写的代码。事件代码也能由系统事件触发,例如在计时器控件中的Timer事件。1.核心事件下表列举了VFP的核心事件集,并适用于多数控件:事件 激发后动作Load 表单或表单集被加载进内存。Unload 表单或表单集从内存中释放。Init 对象被创建。Destroy 对象从内存中释放。Click 用户用主鼠标按钮单击对象。DblClick 用户用主鼠标按钮双击对象。RightClick 用户用辅(右)鼠标按钮单击对象。GotFocus 对象接收焦点,由用户动作(如按Tab键和单击),或者在代 码中使用SetFocus方法引起。

LostFocus 对象失去焦点,由用户动作(如按Tab键和单击),或者在代 码中使用SetFocus方法引起。KeyPress 用户按下或释放一个键。MouseDown 当鼠标指针停在一个对象上时用户按下鼠标按钮。MouseMove 用户在对象上移动鼠标。MouseUp 当鼠标指针停在一个对象上时用户释放鼠标按钮。InteractiveChange 交互式改变对象值。ProgrammaticChange 可编程地改变对象值。2.VFP事件顺序见P2543、编写事件代码

每个对象(控件)都可进行属性、事件、方法的设置,现在学习如何定义事件、如何给控件写入方法代码。例题1:设置表单1(背景练习):其中有三个命令按钮控件,作用分别为单击COMMAND1时,表单1的背景图改变,单击COMMAND2时,表单1的背景图又被改变,单击COMMAND3时,释放表单(关闭表单)。方法代码

thisform.picture="c:\programfiles\microsoftvisualstudio\vfp98\fox.bmp"thisform.picture="c:\programfiles\microsoftvisualstudio\vfp98\wizards\wizstone.bmp"thisform.release事件:click背景练习例题2:登录表单Ifthisform.text1.value="12345".and.thisform.text2.value="abc" do文档管理信息系统.scxelse messagebox("口令或用户名有错,请重输入!",0,"提示") thisform.text1.setfocusendifthisform.text1.value=""thisform.text2.value=""thisform.text1.setfocusthisform.release登录表单演示4、面向对象程序语法(OOP)

<object>.<Properties/Methed>=<Define/Result>如:thisform.text1.value=“12345”.and.thisform.text2.value="abc"thisform.picture="c:\programfiles\microsoftvisual studio\vfp98\fox.bmp"对象对象的属性或方式定义或结果5、信息窗口的送出使用了函数MessageBox(),其语法如下:MESSAGEBOX(cMessageText[,nDialogBoxTyoe[,cTitleBarText]])第一个参数:为定义信息窗口提示内容。第二个参数:为定义信息窗口按钮组合与图标(Icon)样式的数据,一般为两个数字间以“+”串联。第一个数字为信息窗口按钮组合,第二个为图标Icon类别。如4+48,表示按钮组合为“是”以及“否”,48为警叹号。第三个参数:为信息窗口标题Caption内容定义。例如:MESSAGEBOX("请输入学号",4+48,"信息窗口")运行例2登录表单,按确定按钮后(口令和登录姓名错)的显示:

Messagebox("口令或用户名有错,请重输入!",0,"提示")Messagebox("口令或用户名有错,请重输入!",2,"提示")Messagebox("口令或用户名有错,请重输入!",1,"提示")表单(Form)或表单集(Formset)对象常用语句:Thisform.release 表单释放Thisform.refresh 表单刷新Thisform.hide 表单隐藏(对表单集中的一个表单)thisform.parent.form1.show 表单显示(对表单集中的一 个表单) 9.3表单对象的应用实例见P264大学生通用习题测试系统 9.4设置表单或表单集模板(Template)见P274第六章 VFP程序设计6.1程序的建立和执行6.2程序的交互式命令6.3 结构化程序设计6.4子程序与过程文件及用户自定义函数6.5屏幕显示格式程序设计6.6报表设计器(ReportDesigner)6.7菜单程序设计与菜单设计器(MenuDesigner)6.8程序的调试和调试器(上机实际操作)

二种工作方式:1、交互式——命令窗口

2、程序方式——程序编辑窗口,以文件形式保存,叫命令文件,其扩展名为.prg一、程序的建立 格式:MODIFYCOMMAND<文件名>

功能:建立或修改<文件名>所指的命令文件。 说明:作为新建立程序,指该<文件名>为新文件名。作为修改程序,指该<文件名>已存在。修改程序时,将自动复制一个与命令文件同名但扩展名为.BAK的备份文件。第六章 VFP程序设计6.1程序的建立和执行二、程序的执行 格式:DO<文件名>

功能:执行<文件名>所指的程序。例如:建立程序AA.PRG命令窗口: Modifycommandaa进入程序编辑窗口,输入命令语句,以文件名AA.PRG保存。执行程序:命令窗口:DOAA三、菜单方式1、建立程序:主菜单笺文件——新建——新文件——进入程序编辑区(注:不能用向导方式建立命令文件。)

2、执行程序:主菜单笺程序——程序——运行——文件名运行结果显示在屏幕上,如程序有错,则显示错误信息并指出错误语句,修改后再运行,直到运行结果正确。3、修改程序:主菜单笺程序——打开——文件名,进入程序编辑窗口,进行修改。如:习题4.38

6.2 程序的交互式命令一、人机交互式输入语句 程序在运行过程中需要用户从键盘上输入任意数据,此时程序运行暂停,等待用户输入数据并回车,才继续向下执行程序。这种人机对话方式实现赋值语句有以下三种:1、ACCEPT格式:ACCEPT[<提示信息>]TO<内存变量>功能:从键盘上输入字符串并赋给内存变量。2、WAIT格式:WAIT[<提示信息>][TO<内存变量>]功能:从键盘上输入单字符,可赋给内存变量。注:如命令中无选项[<提示信息>]屏幕将显示“按任意键继续…”3、INPUT格式:INPUT[<提示信息>]TO<内存变量>功能:从键盘上输入数据并赋给内存变量。注:数据可是字符型、数值型、逻辑型,内存变量的类型由输入的数据类型决定。SETTALKOFFCLEARUSEstu1ACCEPT“请输入查询学生的学号:”TONALOCATEALLFOR学号=NADISPOFF学号,姓名,计算机基础SETTALKONUSE例题1:现有学生成绩表STU1,编程查询某学生的信息。在命令窗口输入:MODIFYCOMMANDXM

(进入程序编辑窗口,输入命令语句如下:)1运行程序:DOXM 请输入查询学生的姓名:962104

姓名学号计算机基础王小菲96210494.00程序2:SETTALKOFFCLEARUSESTU1INDEXON学号TOXHSETINDEXTOXHACCEPT“请输入查询学生的姓名:”TONNSEEKNNDISPOFF学号,姓名,计算机基础WAIT“需要打印吗(Y/N)?:”TOABIFAB=“Y” SETPRINTON

?姓名,学号,计算机基础

SETPRINTOFFENDIFSETTALKONUSE程序1:SETTALKOFFCLEARUSESTU1ACCEPT“请输入查询的课程名:”TOKZMINDEXON&KZMTOKKSetindextokkINPUT“请输入查询的分数:”TOFSSEEKFSDISPSETTALKONUSE

例题2:查询某课程某分数的学生信息。程序2:SETTALKOFFCLEARUSESTU1ACCEPT“请输入查询的课程名:”TOKZMINPUT“请输入查询的分数:”TOFSLOCATEFOR&KZM=FSDISPOFFSETTALKONUSE二、程序设计的辅助命令1、中止程序命令格式一:CANCEL功能:结束程序的运行,返回命令窗口,同时关闭所有文件。格式二:SUSPEND功能:暂时中止程序的运行,返回命令窗口。 当选择主菜单笺程序—继续运行或在命令窗口输入RESUME命令。系统都将从中止程序的地方继续执行。2、注释命令格式一:NOTE

*<注释字符串>格式二:&&<注释字符串>3、文本显示命令格式:TEXT <文本字符>ENDTEXT功能:TEXT与ENDTEXT之间的<文本字符>原样输出。例:settalkoff text

调课通知

00511班今天上午1、2节的《计算机基础》课程改在明天1、2节上课。请互相转告

endtext settalkon 6.3 结构化程序设计一、程序设计的概念和步骤(1)分析问题(2)确定算法(3)画出流程框图(4)编写程序(5)调试程序(6)建立建全的文档资料二、结构化N-S流程图1、顺序结构 2、选择结构3、循环结构三、顺序结构程序设计 根据编写程序所需命令语句的先后顺序书写每一条命令,该顺序则是程序的执行顺序。如习题3.41程序。命令语句序列1命令语句序列2命令语句序列3……..四、分支结构程序设计1、简单选择格式:IF<条件> <命令序列1> ENDIF功能:判断条件如为.T.,执行<命令序列1>中的语句,否则跳过<命令序列1>而执行ENDIF后的语句。

T条件F命令序列1命令序列22、选择判断格式:IF<条件> <命令序列1> ELSE <命令序列2>ENDIF功能:判断条件如为.T.,执行<命令序列1>中的语句,执行ENDIF后的语句;如<条件>为.F.,则执行<命令序列2>,再执行ENDIF后的语句。例题6.7:从键盘上任意输入一个数,请判断是偶数还是奇数。程序如下:SettalkoffInput“请输入任意数”tonoIfint(no/2)=no/2 ?“是偶数”Else ?“是奇数”EndifSettalkon3、多种选择(IF的嵌套)格式:if<条件1><命令序列1>if<条件2><命令序列2>else<命令序列3>endifElse<命令序列4>EndifSettalkoffUsestu1Indexon学号toxjAcce“输入学号”tonoSeeknoIf.not.Eof()&&测试文件结束函数

if计算机基础<60?学号,计算机基础不及格

elseIF计算机基础>=80?学号,“计算机基础为优良”

ELSE ?学号,“计算机基础为中”

ENDIFendifElse?”没有该学号的学生。“Endif程序中如嵌套次数过多(大于三次),易发生逻辑错误。例如:用学生成绩表STU1.DBF来查询某学生计算机基础课成绩是优良(>=80)或中(80>成绩>=60)、不及格。4、选择语句格式:DOCASE CASE<条件1> <命令序列1> CASE<条件2> <命令序列2> CASE<条件3> <命令序列3> … … CASE<条件n> <命令序列n> [OTHERWISE] [<命令序列N+1>] ENDCASE

功能:按顺序判断<条件>,当其中某<条件>为真.T.时,程序执行其<条件>下的<命令序列>,执行完后转到ENDCASE后继续执行。注:当所有<条件>都为.F.时,如果有选项[OTHERWISE]则执行[<命令序列N+1],如无则执行ENDCASE后面的语句。T F条件1条件2…条件N其他命令序列1命令序列2…命令序列N命令序列n+1多项选择流程图例题6.9:根据奖学金评定的条件查询STU1。DBF文件中某学生奖学金情况(甲等:平均成绩大于等于90分,操行成绩为优;乙等:平均成绩大于等于80分,操行成绩为良以上;丙等:平均成绩大于等于75分,操行成绩为良以上)。程序如下:Settalkoff’Usestu1Indexon学号toxh1Sele2Usestu2Indexon学号toxh2SeleaSetrelarionto学号intobAccept“请输入学生学号”tonoSeeknoZx=“b.操行成绩”If.not.eof()Docasecase平均分>=90.and.&zx=“优”JXJ=“甲等“case平均分>=80.and.(&zx=“优”.or.&zx=“良”)JXJ=“乙等”case平均分>=75.and.(&zx=“优”.or.&zx=“良”)JXJ=“丙等”OtherwiseJXJ=““Endcase?“学号:”,学号,“姓名:”,姓名??“奖学金:”,JXJEndifCloseallSettalkon5、循环结构程序设计(1)当型循环当条件循环体命令语句序列(2)直到循环循环体命令语句序列直到条件功能:判断条件,如为.T.执行循环体内的命令序列,直到条件为.F.才终止执行循环内命令语句。而执行ENDDO后的语句。注:对(2)种结构,则相反,是先执行命令序列,再判断条件,如为.T.则继续执行命令序列,直到条件为.F.才终止执行循环内命令语句。1、命令格式:DOWHILE<条件> <命令序列>ENDDO

循环结构中其条件非常重要,由<条件>判断的结果:.T.或.F.决定了循环的次数,常用来控制循的<条件>有以下几种:(1)、计数形式如…n=1 &&循环的初值

dowhilen<45&&循环的终值

… <命令序列>&&循环的内

…n=n+1&&循环计数

enddo…(2)测试文件开始(BOF())或结束(EOF())函数说明:当指针走过第一条记录时,文件开始函数BOF()为.T.

当指针走过最后一条记录时,文件结束函数EOF()为.F.如:…useaa…go1dowhile.not.eof()… <命令序列> … skip+1 enddo …例6.10将所有学生有奖学金都评出来,并写入STU2表文件中。Settalkoff’Usestu1Indexon学号toxh1Sele2Usestu2Indexon学号toxh2SeleaSetrelarionto学号intobZx=“b.操行成绩”Dowhile.not.eof()Docasecase平均分>=90.and.&zx=“优”

JXJ=“甲等“case平均分>=80.and.(&zx=“优”.or.&zx=“良”)JXJ=“乙等”case平均分>=75.and.(&zx=“优”.or.&zx=“良”)JXJ=“丙等”OtherwiseJXJ=““EndcaseSELE BReplace奖学金withJXJSELE ASKIPENDDOLISTCloseallSettalkON(3)在程序执行中,从键盘上输入数据如:…A=“Y”dowhileupper(A)=“Y”… <命令序列>…wait“Y/n?” to Aenddo…(4)直接用.T.作条件,用EXIT控制循环。

…dowhile.t.…<命令序列>…if<条件>exitendifenddo…2.SCAN和ENDSCAN命令与DOWHILE和ENDDO命令相似,循环可以用SCAN和ENDSCAN命令实现。格式:SCAN <命令序列> ENDSCAN功能:在一个表中建立一个执行<命令序列>的循环,并执行对每一条记录的操作,直到表文件记录完为止。说明:该命令的使用相当于

DOWHILE.NOT.EOF() <命令序列> SKIP+1 ENDDO1、补充作业:用习题3.41的两个表文件,编程(1)查询任意一个编号的商品名,销售量。(2)分别按商品名统计一天销售量的总和.2、书上作业:6.1、6.3(1)要求:做在作业本上,实验上机调试通。1366.4子程序与过程文件及用户自定义函数一、子程序概念:主程序——调用子程序的程序。 子程序——被调用的程序。其建立和修改与程序一 样,但最后一个语句必是RETURN(返回语句)。1、子程序的调用格式:DO<子程序文件名>WITH<参数表>功能:程序调用(执行)<子程序文件名>所指的程序, WITH用于主程序与子程序之间传递参数。2、参数的接受 主程序可用[WITH]选项向子程序传递参数,在子程序中第一条语句用以下命令接受传递过来的参数。

格式:

PARAMETERS<变量名表>

说明:<变量名表>中变量的个数与WITH<参数表>中参数的个数相同。若WITH后用变量作参数传递,则PARAMETERS中与之对应的变量的数据将被带回主程序。例6.13:计算长方形面积CC.PRG,

(TYPECC.PRG)

(TYPECFX-1.PRG)*SUB1

温馨提示

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

评论

0/150

提交评论