程序设计实用教程课件_第1页
程序设计实用教程课件_第2页
程序设计实用教程课件_第3页
程序设计实用教程课件_第4页
程序设计实用教程课件_第5页
已阅读5页,还剩347页未读 继续免费阅读

下载本文档

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

文档简介

1VisualFoxPro

程序设计实用教程

2第一章VisualFoxPro基础31.1数据库系统简介1.1.1数据库系统的产生与发展1.1.2数据库产品的发展历史1.1.3VisualFoxPro的特点41.1.1数据库系统的产生与发展问题什么是数据库?为什么要发展数据库技术?5数据:是一组用来描述事物情况的物理符号序列。数据处理:是指对各种形式的数据进行收集、存储、加工和传播的一系列活动的总和。数据库:是以一定的组织方式存储在一起的相互关联的数据的集合。不仅包括描述事物的数据本身,而且还包括相关事物之间的联系。数据库管理系统:是为数据库的建立、使用和维护而配置的软件。它建立在操作系统的基础上,对数据库进行统一的管理和控制。6数据库系统:是一个具有管理系统数据库功能的计算机系统,它是由计算机硬件、数据库管理系统、数据库、应用系统和管理人员组成的整体。数据库技术所研究的问题,就是如何科学地组织和存储数据,如何高效地获取和处理数据。7数据处理的中心是数据管理数据管理:指的是对数据的分类、组织、编码、存储、检索和维护。数据处理经过三个阶段8人工管理阶段(20世纪50年代中期以前)背景:计算机主要用于科学计算硬件:外存只有磁带、卡片、纸带,没有磁盘等直接存取的存储设备。软件:没有操作系统,无管理数据的软件,数据处理方式是批处理方式。9特点数据不保存没有专门的软件系统对数据进行管理数据的组织必须由程序员自行设计一组数据对应一个程序,数据是面向应用的,无法共享。10程序与数据的关系

应用程序1应用程序2应用程序n数据组1数据组2数据组n……

11文件系统阶段(20世纪50年代后期~60年代中期)背景:科学计算、大量用于管理硬件:外存有了磁盘、磁鼓等直接存储的设备软件:操作系统已经有了专门的管理数据软件,一般称为文件系统处理方式:文件批处理、联机实时处理12特点数据需要长期保存,反复处理程序与数据有了一定的独立性文件已经多样化数据的存取基本上以纪录为单位缺点数据冗余度大数据和程序缺乏独立性数据缺乏集中管理,无法保证安全性、完整性13程序与数据的关系存取方法应用程序n应用程序2文件2文件n应用程序1文件114数据库系统阶段(20世纪60年代后期)背景:计算机用于管理的规模庞大、应用更广泛、数据量急剧增长、数据共享要求更强;有了大容量的磁盘,联机实时处理要求更多,软件价格上升,硬件价格下降,为编制和维护系统软件及应用程序所需的成本相对增加。15特点采用特定的数据模型和数据结构存放数据。不仅描述数据本身,还描述数据之间的联系。数据的结构化是数据库的主要特征,是数据库系统与文件系统的根本区别。数据统一管理,达到数据实现共享、减少数据冗余、易扩充数据和程序的相互依赖性减弱,数据独立性强数据统一控制,提高了数据的安全性和完整性16数据的安全性:是指保护数据以防止不合法的使用所造成数据的泄密和破坏。数据的完整性:是指数据的正确性、有效性和相容性。17在数据库管理阶段,应用程序与数据之间的关系数据库管理系统数据库应用程序2应用程序1应用程序n18数据库系统结构分为四个部分硬件软件数据库人员191.1.2数据库产品的发展历史1982年推出了dBaseII1984年推出了dBaseIII1986年推出了dBaseIIIplus1984年推出了FoxBASE

1987年7月推出了FoxBASE+2.01988年7月推出了FoxBASE+2.11989年推出了FoxPro1.01991年推出了FoxPro2.01992年下半年推出了FoxPro2.5版1995推出了VisualFoxPro3.01998年推出了VisualFoxPro6.0201.1.3

VisualFoxPro的特点VisualFoxPro6.0系统是一个关系型DBMS,是微软公司1998年推出的可视化开发套件VisualStudio6.0系统中的一个产品。XBASE(dBASE、FoxBASE、FoxPro、VisualFoxPro)系列数据库管理系统在我国具有广泛的应用基础,随着版本的更新,增加、完善了许多功能,开发、应用能力不断提升。目前,VisualFoxPro6.0系统是一种比较普及的小型关系型DBMS21真正的关系型数据库概念可视化编程技术支持面向对象程序设计提供多种事件处理编程方式提供了可视化编程工具统一的用户界面和方便灵活的工具栏使用表单设计器生成应用程序界面各类文档的统一管理新增多种数据类型、索引关键字类型,SQL语句更加丰富最优化系统22提供快速查询技术使用32位方式支持客户机/服务器结构用数据词典定义规则查看远程或异种数据用事件处理来控制共享访问实现客户机/服务器应用程序同其他软件的高度兼容性共享数据导入和导出数据使用自动OLE控制其它软件231.2数据模型与关系数据库1.2.1实体的描述1.2.2数据模型1.2.3关系运算241.2.1实体的描述实体(Entity)现实世界存在的各种事物,事物与事物之间存在着联系,并且可以相互区别的事物称为实体。可以是人、物、概念、事物的联系。举例

一个学生、一门课、学生的一次选课25实体的属性

描述实体特性的称为属性。举例

学生实体由学号、姓名、年龄、性别、系、年级等属性组成。26码(Key)唯一标识实体的属性举例学号是学生实体的码27域(domain)某个属性的取值范围举例性别的域为(男、女)28实体型(Entitytype)

具有相同属性的实体具有共同的特征和性质。用实体名及其属性名集合来抽象和刻画同类实体,称为实体型。举例

学生(学号、姓名、年龄、性别、系、年级)29实体集(EntitySet)

同型实体的集合称为实体集。举例

全体学生30实体间的联系

实体之间的对应关系称为联系,它反映现实世界事物之间的相互关联。两类联系实体内部实体之间(3种)31一对一联系若对于实体集A中的每一个实体,实体集B中至多有一个实体与之联系,反之亦然,则称实体集A与实体集B具有一对一联系,记为1:1举例球队和主教练两个实体型,一个球队只有一个主教练,一个主教练不能同时担任其他球队的教练,这时,两者存在1:1的联系。32一对多联系若对于实体集A中的每一个实体,实体集B中有n个实体(n>=0)与之联系,反之,对于实体集B中的每一个实体,实体集A中至多只有一个实体与之联系,则称实体集A与实体集B有一对多的联系,记为1:n举例一个部门有若干职工而每个职工只在一个部门工作,则部门与职工之间是一对多的联系。33多对多联系若对于实体集A中的每一个实体,实体集B中有n个实体(n>=0)与之联系。翻过来,对于实体集B中的每一个实体,实体集A中也有m个实体(m>=0)与之联系,则称实体集A与实体集B具有多对多联系,记为m:n举例一个项目有多个职工参加而一个职工可以参加若干项目的工作,则项目和职工之间具有多队多的联系。341.2.2数据模型数据模型表示实体及实体之间联系的模型叫数据模型。数据模型的种类层次模型、网状模型和关系模型。

VisualFoxPro是关系数据库管理系统。35层次模型(Hierarchical

Model)用树形结构来表示层次模型基本层次联系:指两个记录型及它们之间的一对多(包括一对一)的联系。满足下面两个条件的“基本层次联系”的集合为层次模型(1)有且仅有一个结点无双亲,这个结点称为根结点。(2)其他结点有且仅有一个双亲。36不能直接表示m-n关系,要想用层次模型表示m-n关系,必须先将关系分解为多个1-m关系,然后再用层次模型表示。适用于表示1-1关系和1-m关系37网状模型(NetworkModel)用网状结构来表示实体之间联系的数据模型称为网状模型。特点:每一个结点都可以有多个父结点,每一个结点都可以和其他任一结点相连。可以直接表示m-n关系。38关系模型(RelationalModel)

一个关系的逻辑结构就是一个二维表格,用二维表格来表示实体和实体间联系的数据模型叫关系模型39主要术语关系:一个关系对应于我们平常说的一张表元组:表中得一行属性:表中的一列,每一列的名称叫属性名主码:表中的某个属性组,他们的值唯一地标识一个元组域:属性的取值范围分量:元组中的一个属性值关系模式:对关系的描述,用关系名(属性1,…,属性n)来表示40在关系型数据库管理系统中,满足以下条件的二维表格都可以作为一个关系处理。表中的每一列属性都有相同的数据类型表中不能包含有其他的表不允许有完全相同的两行行和列的次序都可以调换411.2.3关系运算两类关系运算传统的集合运算并、差、交专门的关系运算选择、投影、连接42并(Union)由属于这两个关系的元组组成的集合差(Difference)设有两个相同结构的关系R和S,R差S的结果由属于R但不属于S的元组组成的集合交(Intersection)两个相同结构的关系R和S,R交S是由既属于R又属于S的元组组成的集合43

RABCSABC

a1b1c1a1b2c2a1b2c2a1b3c2a2b2c1a2b2c1

44

RUSABC

a1b1c1a1b2c2a2b2c1a1b3c245

R-SABC

a1b1c146

RnSABC

a1b2c2a2b2c147选择(Selection)从关系中找出满足给定条件的元组的操作称为选择。以逻辑表达式指定选择条件,选择运算将选取使逻辑表达式为真的所有元组。选择运算的结果构成关系的一个子集,是关系中的部分元组,其关系模式不变。选择运算是从二维表格中选取若干行的操作,在表中则是选取若干个记录的操作。48投影(Projection)从关系模式中指定若干个属性组成新的关系称为投影。投影运算从关系中选取若干属性形成一个新的关系,其关系模式中属性个数比原关系少,或者排列顺序不同,同时也可能减少某些元组。因为排除了一些属性后,特别是排除了原关系中关键字属性后,所选属性可能有相同值,出现相同的元组,而关系中必须排除相同元组,从而有可能减少某些元组。投影是从二维表格中选取若干列的操作,在表中则是选取若干个字段。49联接(Join)联接运算是将两个或多个关系通过联接条件组成一个新的关系。也可以说,联接运算是在关系R和关系S中选择属性间满足一定条件的元组。联接运算是将两个关系模式的若干属性拼接成一个新的关系模式的操作,对应的新关系中,包含满足联接条件的所有元组。联接过程是通过联接条件来控制的,联接条件中将出现两个关系中的公共属性名,或者具有相同语义、可比的属性。联接是将两个二维表格中的若干列,按同名等值的条件拼接成一个新二维表格的操作。在表中则是将两个表的若干字段,按指定条件(通常是同名等值)拼接生成一个新的表。501.3VisualFoxPro的安装中文版VisualFoxPro6.0系统可以由CD-ROM光盘直接安装。操作步骤如下:(1)启动安装程序(2)选择安装方式(3)安装系统组件(4)安装MSDN组件(VisualFoxPro6.0的帮助文档)(5)重新启动系统,完成VisualFoxPro6.0安装如在Windows95/98环境下运行

VisualFoxPro6.0系统,上述安装结束后必须重新启动系统,完成系统的配置,VisualFoxPro6.0系统的安装才告完成。51启动VisualFoxPro使用开始菜单启动:开始--〉程序--〉MicrosoftVisualFoxPro使用快捷方式,在桌面双击图标使用运行窗口:在运行窗口中输入VisualFoxPro的所在位置522.1VisualFoxPro编程基础2.1.1数据和数据类型1.数据的分类VisualFoxPro的全部数据类型可分为二大类:

一类称为VisualFoxPro(基本)数据类型:它们用于变量和数组,也可以用于表的字段中;另一类称为VisualFoxPro字段类型,它们只能用于表的字段中532.数据类型

(1)可用于变量、数组或字段的类型①字符型(C)(character)②货币型(Y)(currency)8

③日期型(D)(date)8④日期时间型(T)(datetime)8

⑤逻辑型(L)(logical)1⑥数值型(N)(numeric)其中红色数字表示该类型的固定宽度54(2)下种7种类型只能用于数据表中

⑦双精度型(B)(double)8⑧浮点型(F)(float)8

⑨通用型(G)(general)4

⑩整型(I)(Integer)4⑾备注型(M)(memo)4⑿字符型(二进制)⒀备注型(二进制)4552.1.2常量与变量运行过程中,保持不变的数据为“常量”。1.常量VisualFoxPro定义了如下类型的常量:①

数值型常量如:-20,16.68,3.14,1.6E-12表示1.6×10-12②

字符型常量用字符串定界符括起来的一串字符,字符串定界符有单引号或双引号和方括号,如:"ABCD",’字符’,[123ABC]56③

逻辑型常量逻辑值只有真和假两种,通常用小圆点括起来的.T.、.t.、.Y.、.y.表示真,.F.、.f.、.N.、.n.表示假④

日期型常量和日期时间型常量如:{^1999-04-22},{^l999-04-2410:00am}⑤

货币型常量货币型常量与数值型数据书写方法类似,但数字前面要加上$,如:$123,$321.123456小数部分保留4位,多余的位数四舍5入572.变量在程序的执行过程中可取不同数值的量称为变量。有2种形式的变量:内存变量和字段变量。每个变量都有一个名称,叫做变量名,变量名的命名规则是(1)以字母、数字及下划线组成,可以使用汉字作变量名。(2)以字母或下划线开始。(3)长度为1~128个字符,每个汉字占2个字符。(4)不能使用VISUALFOXPRO的保留字。58变量的作用域:在VisualFoxPro中,还可以使用LOCAL、PRIVATE和PUBLIC命令强制规定变量的作用范围。用LOCAL创建的变量只能在创建它们的过程中使用和修改;不能被更高层或更低层的过程访问。PRIVATE用于定义私有变量,它用于定义当前过程的变量,并将以前过程定义的同名变量隐藏起来,在当前过程中使用私有变量而不影响这些同名变量的原始值。PUBLIC用于定义全局变量。所有过程都可以使用这些全局变量。内存变量的数据类型由最近一次赋给该变量的值的类型确定593.内存变量的操作1).内存变量的赋值格式1:STORE<表达式>TO<变量名表>格式2:<内存变量名>=<表达式>2)表达式的显示格式1:?[<表达式表>]格式2:??<表达式>功能:计算表达式表中的各表达式并输出各表达式值。603)内存变量的显示格式1:LISTMEMORY[LIKE<通配符>][TOPRINTER|TOFILE<文件名>]格式2:DISPLAYMEMORY[LIKE<通配符>][TOPRINTER|TOFILE<文件名>]LISTMEMORY,如果内存变量多,一屏显示不下,则自动向上滚动。DISPLAYMEMORY分屏显示与通配符匹配的所有内存变量,如果内存变量多,显示一屏后暂停,按任意键之后再继续显示下一屏。614)内存变量的清除格式1:CLEARMEMORY格式2:RELEASE<内存变量名表>格式3:RELEASEALL[EXTENDED]格式4:RELEASEALL[LIKE<通配符>|EXCEPT<通配符>]功能:格式1清除所有内存变量。格式2清除指定的内存变量。例P24622.1.3运算符与表达式描述各种不同运算的符号称为运算符,而参与运算的数据称为操作数。表达式用来表示某个求值规则,它由运算符和配对的圆括号将常量、变量、函数、对象属性等操作数以合理的形式组合而成。在VISUALFOXPRO中有5类运算符和表达式:算术运算符和算术表达式、字符串运算符和字符串表达式、日期运算符和日期表达式、关系运算符和关系表达式、逻辑运算符和逻辑表达式。631、算术运算符与算术表达式算术表达式也称数值型表达式,其运算结果为一数值。(1)算术运算符。VisualFoxPro提供6个算术运算符,加(+)、减(-)、乘(*)、除(/)、取负(-)、乘方(^或**)运算的含义与数学中基本相同。算术运算符的优先权依次为()→^或**→*和/→%→+和-。64(2)表达式的书写规则。1)每个符号占1格,所有符号都必须一个一个并排写在同一横线上,不能在右上角或右下角写方次或下标。例如:23要写成2^3,X1+X2要写成X1+X2。2)原来在数学表达式中省略的内容必须重新写上。例如:2x要写成2*x。3)所有括号都用小括号(),括号必须配对。4)要把数学表达式中的有些符号,改成VISUALFOXPRO中可以表示的符号。例如:要把2πr改为2*pi()*r。(pi()为函数)652、字符串运算符与字符串表达式字符运算符有两个(其运算优先级别相同)+,-,表示将两个字符串连接起来。其中“-”表示将前一个字符串的尾部空格移到后面。例如:“123ABC”+”666xyz”&&连接后结果为:”123ABC666xyz”“12345”+”abcd“+”xyz“&&连接后结果为:”12345abcdxyz““ABC“-“DEFG”&&连接后结果为:”ABCDEFG”663、日期时间运算符与日期时间表达式日期型表达式由运算符“十”或“—”、整数、日期型常量、日期型变量和函数组成。(1)两个日期型数据可以相减,例如:{^1999/12/19}-{^1999/11/16}'结果为数值型数据33(2)一个数值型数据可加到日期型数据中,其结果仍然为一日期型数据(向后推算日期)。例如:{^1999/11/16}+33'结果为日期型数据:{^1999/12/19}(3)一个表示天数的数值型数据可从日期型数据中减掉它,其结果仍然为一日期型数据(向前推算日期)。例如:{^1999/12/19}-33‘结果为日期型数据:{^1999/11/16}注意:两个日期型数据不能相加!674、关系运算符与关系表达式关系表达式由关系运算符、常量、变量和函数组成。VISUALFOXPRO提供的关系运算符有>,<,>=,<=,<>(#,!=),$,==。关系表达式的运算结果只有真(.T.)和假(.F.)。685+3>=7&&结果为真(.T.)‘ab’$’asdabfh’&&结果为真(.T.){^2003/05/17}<{^1998/10/25}&&结果为假(.F.)’asdabfh’=‘as’&&结果为真(.T.)‘as’=’asdabfh’&&结果为假(.F.)’asdabfh’==‘as’&&结果为假(.F.)’asdabfh’<>‘as’&&结果为真(.T.)&&当setexacton时为假(.F.)‘ab’+’cd’==”abcd”&&结果为真(.T.)695、逻辑运算符与逻辑表达式逻辑表达式由逻辑运算符、逻辑常量、变量和函数组成。VISUALFOXPRO提供的逻辑运算符如表2.4所示。一个逻辑表达式可包含多个逻辑运算符。对于较复杂的条件判断必须采用逻辑表达式才能完成。参加逻辑运算的对象为逻辑对象其表达式的值也是一个逻辑值。70表2.5逻辑运算真值表ABNOTAAANDBAORB.T..T..F..T..T..T..F..F..F..T..F..T..T..F..T..F..F..T..F..F.712.2函数2.2函数函数是用程序来实现的一种数据运算或转换。函数可以用函数名加一对圆括号调用,如LEN(x)。722.2.1函数的分类VISUALFOXPRO的函数有两种,一种是用户自定义的函数,一种是系统函数。VISUALFOXPRO提供的系统函数大约有380多个,主要分为:数值函数、字符处理函数、表和数据库函数、日期时间函数、类型转换函数、测试函数、菜单函数、窗口函数、数组函数、SQL查询函数、位运算函数、对象特征函数、文件管理函数以及系统调用函数等14类。本节将常用函数分为数值函数、字符处理函数、日期类函数、数据类型转换函数、测试函数5类,通过举例分别介绍。732.2.2常用函数1、数值函数⑴绝对值和符号函数格式:ABS(<数值表达式>)SIGN(<数值表达式>)功能:ABS()返回指定的数值表达式的绝对值。例1STORE10T0x?ABS(5-x),ABS(x-5),SIGN(5-x),SIGN(x-10)55-1074⑵求平方根函数格式:SQRT(<数值表达式>)功能:返回指定表达式的平方根。自变量表达式的值不能为负。例2?SQRT(2*SQRT(2)),(2*6)^(1/2)1.683.46(开平方就是1/2次方,显然函数更简洁一些)例3STORE-100Tox?SIGN(x)*SQRT(ABS(x))-1075⑶圆周率函数格式:PI()功能:返回圆周率π(数值型)。该函数没有参数。76⑷取整数函数格式:INT(<数值表达式>)CEILNG(<数值表达式>)FLOOR(<数值表达式>)功能:INT()返回指定数值表达式的整数部分。CEILING()返回大于或等于指定数值表达式的最小整数。FLOOR()返回小于或等于指定数值表达式的最大整数。例4STORE5.8TOx?INT(x),INT(-x),CEILING(x),CEILING(-X),FLOOR(x),FLOOR(-x)5-56-55-677⑸四舍五入函数格式:ROUND(<数值表达式1>,<数值表达式2>)例5x=345.345?ROUND(X,2),ROUND(x,1),ROUND(X,0),ROUND(x,一1)345.35345.334535078⑹求余数函数格式:MOD(<数值表达式1>,<数值表达式2>)功能:返回两个数值相除后的余数。余数的正负号与除数相同。如果被除数与除数同号,那么函数值即为两数相除的余数;如果被除数与除数异号,则函数值为两数相除的余数再加上除数的值。例6?MOD(10,3),MOD(10,-3),MOD(-10,3),MOD(-10,-3)1-22-179⑺求最大值和最小值函数例7?MAX('2','12','05'),MIN('汽车','飞机','轮船')2飞机802、字符函数字符函数是指函数参数或函数值为字符型数据的函数。⑴求字符串长度函数格式:LEN(<字符表达式>)功能:返回指定字符表达式值的长度,即所包含的字符个数。函数值为数值型。例8x="中文VisualFoxPro6.0"?LEN(x)2081⑵大小写转换函数格式:LOWER(<字符表达式>)

UPPER(<字符表达式>)功能:LOWER()将指定表达式值中的大写字母转换成小写字母,其他字符不变。

UPPER()将指定表达式值中的小写字母转换成大写字母,其他字符不变。例9?LOWER('xly2A*'),UPPER('n=1')xly2a*N=182⑶空格字符串生成函数格式:SPACE(<数值表达式>)功能:返回由“数值表达式”指定数目的空格组成的字符串。83⑷删除前后空格函数格式:TRIM(<字符表达式>)

LTRIM(<字符表达式>)

ALLTRIM(<字符表达式>)功能:TRIM()返回指定字符表达式值去掉尾部空格后形成的字符串。

LTRIM()返回指定字符表达式值去掉前导空格后形成的字符串。

ALLTRIM()返回指定字符表达式值去掉前导和尾部空格后形成的字符串。例10ss=SPACE(1)十"TEST"十SPACE(3)?TRIM(ss)+LTRIM(ss)+ALLTRIM(ss)TESTTESTTEST84⑸取子串函数格式:LEFT(<字符表达式>,<长度>)

RIGHT(<字符表达式>,<长度>)

SUBSTR(<字符表达式>,<起始位置>[,<长度>])功能:LEFT()从指定表达式值的左端起取一个指定长度的子串作为函数值。

RIGHT()从指定表达式值的右端起取一个指定长度的子串作为函数值。

SUBSTR()从指定表达式值的指定起始位置取指定长度的子串作为函数值。在SUBSTR()函数中,若缺省第三个自变量<长度>,则函数从指定位置一直取到最后一个字符。例11STORE"GOODBYE!"TOx?LEFT(x,2),SUBSTR(x,6,2)十SUBSTR(x,6),RIGHT(x,3)GOBYBYE!YE!85⑹计算子串出现次数函数格式:OCCURS(<字符表达式1>,<字符表达式2>)功能:返回第一个字符串在第二个字符串中出现的次数,函数值为数值型。若第一个字符串不是第一个字符串的子串,函数值为0。例12STORE'abracadabra'TOs?OCCURS('a',s),OCCURS('b',s),OCCURS('c',s),OCCURS('e',s)521086⑺求子串位置函数格式:AT(<字符表达式1>,<字符表达式2>[,<数值表达式>])功能:AT()的函数值为数值型。如果<字符表达式1>是<字符表达式2)的子串,则返回<字符表达式1>值的首字符在<字符表达式2>值中的位置;若不是子串,则返回0。<数值表达式>:第几次出现该串的位置。例13STORE“ThisisVisualFoXPro”TOx?AT(“fox”,x),ATC(“fox”,x),AT(“is”,x,3),AT(“xo”,x)01610087⑻子串替换函数格式:STUFF(<字符表达式1>,<起始位置>,<长度>,<字符表达式2>)功能:用<字符表达式2)值替换<字符表达式1>中由<起始位置>和<长度>指明的一个子串。替换和被替换的字符个数不一定相等。如果<长度>值是0,<字符表达式2)则插在由<起始位置>指定的字符前面。如果<字符表达式2>值是空串,那么<字符表达式1>中由<起始位置>和<长度>指明的子串被删去。例14STORE‘GOODBYE!’TOs1STORE‘MORNING’ToS2?STUFF(s1,6,3,s2),STUFF(s1,1,4,’’)GOODMORNING!BYE!88⑼字符替换函数格式:CHRTRAN(<字符表达式1>,<字符表达式2>,<字符表达式3>)该函数的参数是三个字符表达式。当第一个字符串中的一个或多个字符与第二个字符串中的某个字符相匹配时,就用第三个字符串中的对应字符(相同位置)替换这些字符。如果第三个字符串包含的字符个数少于第二个字符串包含的字符个数,因而没有对应字符,那么第一个字符串中相匹配的各字符将被删除。如果第三个字符串包含的字符个数多于第二个字符串包含的字符个数,多余字符被忽略。例15x1=CHRTRAN(“ABACAD”,“ACD”,“x12”)y1=CHRTRAN(“计算机ABC”,“计算机”,“电脑”)z1=CHRTRAN(“大家好!”,“大家”,“您”)?x1,Y1,z1xBx1x2电脑ABC您好!89⑽字符串匹配函数。格式:LIKE(<字符表达式1>,<字符表达式2))功能:比较两个字符串对应位置上的字符,若所有对应字符都相匹配,函数返回逻辑真(.T.),否则返回逻辑假(.F.)。<字符表达式1>中可以包含通配符“*”和“?”。“*”可与任何数目的字符相匹配,?可以与任何单个字符相匹配。例16STORE“abc”TOxST0RE“abcd”TOy?LIKE(“ab*”,x),LIKE(“ab*”,y),LIKE(x,y),LIKE(“?b?”,x),LIKE("Abc",x).T..T..F..T..F.903、日期和时间函数⑴系统日期和时间函数格式:DATE()TIME()DATETIME()功能:DATE()返回当前系统日期,函数值为日期型。

TIME()以24小时制,hh:mm:ss格式返回当前系统时间,函数值为字符型。

DATETIME()返回当前系统日期时间,函数值为日期时间型。例16?DATE(),TIME(),DATETIME()07/18/0316:59:0507/18/0304:59:05PM91⑵求年份、月份和天数函数格式:YEAR(<日期表达式>|<日期时间表达式>)

MONTH(<日期表达式>|<日期时间表达式>)

DAY(<日期表达式>|<日期时间表达式>)功能:返回年份(如2001),返回月份,返回月天数,这三个函数的返回值都为数值型。例17STORE{^2001-08-18}T0d?YEAR(d),MONTH(d),DAY(d)200181892⑶时、分和秒函数格式:HOUR(<日期时间表达式>)MINUTE(<日期时间表达式>)SEC(<日期时间表达式>)功能:HOUR()从指定的日期时间表达式中返回小时部分(24小时制)。MINUTE()从指定的日期时间表达式中返回分钟部分。SEC()从指定的日期时间表达式中返回秒数部分。这三个函数的返回值都为数值型。例18STORE{^2001-03-1802:30:50PM}TOt?HOUR(t),MINUTE(t),SEC(t)143050934、数据类型转换函数数据类型转换函数的功能是将某一种类型的数据转换成另—种类型的数据。⑴数值转换成字符串格式:STR(<数值表达式>[,<长度>[,<小数位数>]])

功能:将<数值表达式>的值转换成字符串,转换时根据需要自动进行四舍五入。返回字符串的理想长度L应该是<数值表达式>值的整数部分位数加上<小数位数>,再加上1位小数点。如果<长度>值大于L,则字符串加前导空格以满足规定的<长度>要求;如果<长度>值大于等于<数值表达式>值的整数部分位数(包括负号)但又小于L,则优先满足整数部分而自动调整小数位数;如果<长度>值小于<数值表达式>值的整数部分位数,则返回一串星号(*)。<小数位数>的默认值为0,<长度>的默认值为10。94例19STORE-123.456TOn?"n="十STR(n,8,3)n=-123.456?STR(n,9,2),STR(n,6,2),STR(n,3),STR(n,6),STR(n)-123.46-123.5***-123-12395⑵字符串转换成数值格式:VAL(<字符表达式>)功能:将由数字符号(包括正负号、小数点)组成的字符型数据转换成相应的数值型数据。从第一个字符开始转换,遇到不符合数值书写规则的字符立即停止转换,若第一个字符不是数字符号,则返回数值0。例20STORE'-123.'TOxSTORE'45'TOySTORE'A45'TOz?VAL(x+y),VAL(x+z),VAL(z+y)-123.45-123.000.0096⑶字符串转换成日期或日期时间格式:CTOD(<字符表达式>)功能:CTOD()将<字符表达式>值转换成日期型数据。字符串中的日期部分格式要与SETDATETO命令设置的格式一致。其中的年份可以用四位,也可以用两位。如果用两位,则世纪由SETCENTURYTO语句指定。97例21SETDATEYMDSETCENTURYON&&显示日期或日期时间时,用4位数显示年份SETCENTURYTO19ROLLOVER51d1=CTOD('2001/03/18')t1=CTOT('2001/03/18'+''+TIME())?d1,t1,CTOD('50/01/01'),CTOD('51/01/0l')2001/03/182001/03/1810:31:54PM2050/01/011951/01/01这里,SETCENTURYTO语句指定:小于51的两位数年份属于21世纪(19+1),而大于等于51的两位数年份属于20世纪(19)。98⑷日期或日期时间转换成字符串格式:DTOC(<日期表达式>[<日期时间表达式>[,1])

TTOC(<日期时间表达式>[,1])功能:DTOC()将日期型数据或日期时间数据的日期部分转换成字符串。TTOC()将日期时间数据转换成字符串。字符串中日期部分的格式与SETDATETO语句的设置和SETCENTURYON|OFF(ON为四位数年份,OFF为两位数年份)语句的设置有关。时间部分的格式受SETHOURSTO12|24语句的设置影响。对DTOC()来说,如果使用选项1,则字符串的格式总是为YYYYMMDD,共8个字符。对TTOC()来说,如果使用选项1,则字符串的格式总是为YYYYMMDDHHMMSS,采用24小时制,共14个字符。99例22STOREDATETIME()TOt?t08/18/0311:54:39PM?DTOC(t),DTOC(t,1),TTOC(t),TTOC(t,1)08/18/032003081808/18/0311:54:39PM20030818235439100⑸宏替换函数格式:&<字符型变量>[.]功能:用字符型变量的值替换宏替换函数。如果该函数与其后的字符无明确分界,则要用“.”作函数结束标识。宏替换可以嵌套使用。例23AB=“ABC”

ABC=’宏替换函数’?&AB&&相当于?ABC宏替换函数X=10Y=20Z=”X+Y”?(&Z.)*5&&相当于?(X+Y)*51501015、测试函数在数据处理过程中,有时用户需要了解操作对象的状态。例如,要使用的文件是否存在、数据库的当前记录号、是否到达了文件尾、检索是否成功、某工作区中记录指针所指的当前记录是否有删除标记、数据类型等信息。尤其是在运行应用程序时,常常需要根据测试结果来决定下一步的处理方法或程序走向。102(1)空值(NULL值)测试函数格式:ISNULL(<表达式>)功能:判断一个表达式的运算结果是否为NULL值,若是NULL值返回逻辑真(.T.),否则返回逻辑假(.F.)。例25STORE.NULL.TOx?x,ISNULL(x).NULL..T.103(2)数据类型测试函数格式:VARTYPE(<表达式>[,<逻辑表达式>])功能:测试<表达式>的类型,返回一个大写字母,函数值为字符型。字母的含义如表2.8所示。表2.8用VARTYPE()测得的数据类型104返回的字母数据类型返回的字母数据类型C字符型或备注型G通用型N数值型、整型、浮点型或双精度型D日期型Y贷币型T日期时间型L逻辑型XNULL值O对象型U未定义105若<表达式>是一个数组,则根据第一个数组元素的类型返回字符串,若<表达式>的运算结果是NULL值,则根据<逻辑表达式>值决定是否返回<表达式>的类型:如果<逻辑表达式>值为.T.,就返回<表达式>的原数据类型。如果<逻辑表达式>值为.F.或缺省,则返回x以表明<表达式>的运算结果是NULL值。例26X="AAA"STORE10TOySTORE.NULL.TOxSTORE$100.2TOZ?VARTYPE(x),VARTYPE(x,.T.),VARTYPE(y),VARTYPE(z)XCNYEMPTY()和IIF函数1063.1面向对象的程序设计对象(Object)客观世界里的任何实体都可以被看作是对象。对象可以是具体的物,也可以指某些概念。从编程的角度来看,对象是一种将数据和操作过程结合在一起的数据结构,或者是一种具有属性(数据)和方法(过程和函数)的集合体。事实上程序中的对象就是对客观世界中对象的一种抽象描述(1)对象属性:属性用来表示对象的状态。(2)对象方法:对象方法是描述对象行为的过程。107类、基类和子类类(class)类是对一类相似对象的性质描述,这些对象具有相同种类的属性以及方法。子类与继承

在面向对象的方法里,继承是指在基于现有的类创建新类时,新类继承了现有类的方法和属性。此外,可以为新类添加新的方法和属性。我们把新类称为现有类的子类,而把现有类称为新类的父类。

一个子类的成员一般包括:(1)从其父类继承的属性和方法。(2)由子类自己定义的属性和方法。108109110容器与控件VisualFoxPro中的类一般可分为两种类型:容器类和控件类。相应地,可分别生成容器(对象)和控件(对象)。

容器可以被认为是一种特殊的控件,它能包容其他的控件或容器控件是一个可以以图形化的方式显示出来,并能与用户进行交互的对象,控件类不能包含其它对象111对象的属性属性(Property):是描述对象的一项数据,用来描述对象的一个特性。对象的属性值是由对象所基于的类决定的。对象值的设置可以在设计时通过属性窗口设置,也可以直接编进程序代码在运行的过程中设置,在程序中设置属性的一般格式是:表单名.对象名.属性名=属性值例如,一个命令按钮控件的常用属性设置如表所示。112113连续设置多个属性,可以使用WITH…ENDWITH结构一次为对象设置多个属性。With结构如下所示:

WITH对象语句块ENDWITH114对象的方法方法:封装在对象中的过程,但又不同于一般的过程。VFP的方法属于对象的内部函数,只用于完成某个特定任务的功能模块,方法的使用不像事件程序一般需要在某一事件发生时响应,而是在程序中直接调用。而不一定相应某事件。方法被封装在对象内部,不同的对象有不同的方法,根据需要用户可以根据需要自行建立新方法。方法的调用:[[变量名]=]表单名.对象名.方法名()115VFP的常用方法116对象的事件事件是一种由系统预先定义而由用户或系统发出的动作。事件作用于对象,对象识别事件并作出相应反应与方法集可以无限扩展不同,事件集是固定的,用户不能定义新的事件。程序是由事件驱动的,因而,在执行过程中,持续等待的是一个发生在对象上的事件(如用户的操作动作,如单击、双击鼠标等)117事件发生时具体完成什么任务则取决于用户在事件中编写的程序代码即事件过程。如单击某一个命令按钮将进行的操作就决定于在命令按钮中编写的事件过程(即程序代码)事件过程除了由事件的激发而调用其程序代码外,也可以在程序运行中调用其代码,在程序中调用事件代码的格式是:

表单名.对象名.事件名VFP编程的核心是为每个要处理的事件编写响应事件的程序代码,对象的事件名在代码窗口的过程列表框中。118VisualFoxPro中的常用事件Init:创建对象时发生的事件。Destroy:从内存中释放对象时发生的事件。Click:鼠标左键单击对象时发生的事件。Dblclick:

鼠标左键双击对象时发生的事件。Rightclick:鼠标右键单击对象时发生的事件。GotFocus:对象接收到焦点时发生的事件。LostFocus:对象失去焦点时发生的事件。KeyPress:当用户按下或释放键时发生的事件。InteractiveChange:以交互方式改变对象的值时发生的事件。ProgrammaticChange:以编程方式改变对象的值时发生的事件。119对象的引用对象的包容层次对象的引用120(1)绝对引用:通过提供对象的完整容器层次来引用对象,从最高容器开始逐层向下直到某个对象为止的引用称为绝对引用。

Formset.Form.OptionGroup.Option.Enabled=.F.(使选项按钮组第一个选项控件无效)

(2)相对引用:从正在为编写事件代码的对象出发,通过逐层向高一层或低一层直到另一对象的引用称为相对引用,

121【例】如果Form1中有一个命令按钮组commandgroup1,该命令按钮组有两个命令按钮:command1和command2,如果要在命令按钮command1的事件(如单击事件)代码中修改该按钮的标题可用下列命令:

this.caption=”确定”

122如果要在命令按钮command1的事件代码中修改命令按钮command2的标题可用下列命令:thisform.Cmand2.caption="取消"或者mand2.caption="取消"但不能写成下列命令:mand2.caption="取消"如果要在命令按钮command1的事件代码中修改表单的标题可用下列命令:This.Parent.parent.Caption=”测试窗口”或者thisform.caption=”测试窗口”123引用对象的属性和关键字1243.2创建表单表单(Form)是VisualFoxPro提供的用于建立应用程序界面的最主要的工具之一,在VFP中是一个容器,可以容纳VFP的绝大部分对象。表单相当于WINDOWS应用程序的窗口。表单可以属于某个项目,也可以游离于任何项目之外,它是一个特殊的磁盘文件,其扩展名为.scx。在项目管理器中创建的表单自动隶属于该项目。创建表单一般有两种途径:使用表单向导创建简易的数据表单;使用表单设计器创建或修改任何形式的表单。125使用表单向导启动表单向导有以下四种途径:(1)打开“项目管理器”,选择“文档”选项卡,从中选择“表单”。然后单击“新建”按钮。在弹出的“新建表单”对话框中单击“表单向导”按钮。(2)在系统菜单中选择【文件】|【新建】命令,或者单击工具栏上的“新建”按钮,打开“新建”对话框,在文件类型栏中选择“表单”。然后单击“向导”按钮。126(3)在系统菜单中选择【工具】|【向导】|【表单】命令。(4)直接单击常用工具栏上的“表单向导”图标按钮。

按步骤依照“表单向导”完成一对多表表单的设计127128使用表单设计器启动表单设计器有多种方法:●菜单方法:若是新建表单,在系统菜单中选择【文件】|【新建】,在文件类型对话框中选择“表单”,单击“新建文件”按钮;若是修改表单,则单击【文件】|【打开】,在打开对话框中选择要修改的表单文件名,单击“打开”按钮。

129命令方法:在COMMAND窗口输入如下命令:

CREATEFORM<文件名>&&创建新的表单MODIFYFORM<文件名>&&打开一个已有的表单在项目管理器中,先选择文档标签,然后选择表单,单击新建按钮。若是修改表单,选择要修改的表单,单击“修改”按钮。

130表单设计器环境介绍(1)设计器窗口

“表单设计器”窗口内包含正在设计的表单。用户可在表单窗口中可视化地添加和修改控件、改变控件布局,表单窗口只能在“表单设计器”窗口内移动。以新建方式启动表单设计器时,系统将默认为用户创建一个空白表单,如图左侧部分。

131(2)属性窗口设计表单的绝大多数工作都是在属性窗口中完成的,因此用户必须熟悉属性窗口的用法。如果在表单设计器中没有出现属性窗口,可在系统菜单中单击【显示】|【属性】,属性窗口如图所示。页框选项卡“对象”下拉列表框图属性设置框132(3)表单控件工具栏

设计表单的主要任务就是利用“表单控件”设计交互式用户界面。“表单控件”工具栏是表单设计的主要工具。默认包含21个控件、4个辅助按钮,如图所示

1334)表单设计器工具栏打开“表单设计器”时,主窗口中会自动出现“表单设计器”工具栏,如图所示134表单的数据环境(一个容器)1.打开数据环境设计器表单设计器环境下,单击“表单设计器”工具栏上的“数据环境”按钮,或选择【显示】|【数据环境】命令,即可打开“数据环境设计器”窗口,此时,系统菜单栏上将出现“数据环境”菜单。2.数据环境的常用属性常用的两个数据环境属性是AutoOpenTables和AutoCloseTables1353.向数据环境添加表或视图。在数据环境设计器环境下,按下列方法向数据环境添加表或视图:在系统菜单中选择【数据环境】|【添加】命令,或右键单击“数据环境设计器窗口”,然后在弹出的快捷菜单中选择【添加】命令,打开“添加表或视图”对话框,如图所示。如果数据环境原来是空的,那么在打开数据环境设计器时,该对话框就会自动出现。136选择所需表,单击“添加”1374.从数据环境中移去表或视图在“数据环境设计器”窗口中,选择要移去的表或视图,在系统菜单中选择【数据环境】|【移去】命令。也可以用鼠标右键单击要移去的表或视图,然后在弹出的快捷菜单中选择【移去】命令。5.在数据环境中设置关系设置关系的方法为:将主表的某个字段(作为关联表达式)拖曳到子表的相匹配的索引标记上即可。如果子表上没有与主表字段相匹配的索引,也可以将主表字段拖动到子表的某个字段上,这时应根据系统提示确认创建索引138常用的关系属性有:●RelationalExpr:用于指定基于主表的关联表达式。●ParentAlias:用于指明主表的别名。●ChildAlias:用于指明子表的别名。●ChildOrder:用于指定与关联表达式相匹配的索引。●OneToMany:用于指明关系是否为一对多关系,该属性默认为“.F.”,如果关系为“一对多关系”,该属性一定要设置为“.T.”。1393.3表单的属性、事件和方法3.3.1表单的属性140当前表单文件名对象选择列表框对象属性分类页对象属性设置对象属性选项列表对象属性说明框141表单文件的执行和关闭1.在设计时运行表单

在设计时可采用以下方法运行表单文件:(1)在项目管理器窗口中,选择要运行的表单,然后单击“运行”按钮。(2)在表单设计器窗口中,在系统菜单中选择【表单】|【执行表单】命令,或单击常用工具栏上的“运行”按钮。(3)在系统菜单中选择【程序】|【运行】命令,打开“运行”对话框,然后在运行对话框中选择要运行的表单文件,单击“运行”按钮。(4)在命令窗口输入命令:DOFORM<表单文件名>。(5)单击鼠标右键运行表单。1422.在程序中调用表单在程序中调用表单可用下列命令:

DOFORM表单文件名|?[NAME变量名][LINKED][WITH参数表][TO变量][NOREAD][NOSHOW]●[NAME变量名]

:如果包含NAME子句,系统将建立指定名字的变量,并使它指向表单对象。否则,系统将建立与表单文件名相同的变量,并使它指向表单对象。143●[LINKED]关键字:如果包含LINKED关键字,表单和表单对象变量将链接起来,这时,表单对象将随指向它的变量的清除而关闭(释放),否则,即使变量已经清除(如超出作用域,用RELEASE命令清除),表单对象依然存在。但不管有没有LINKED关键字,指向表单对象的变量并不会随表单的关闭而清除。●[TO变量]:用于从模式表单返回值。●[WITH参数表]:用于向表单传递参数。●[NOSHOW]

:如果包含NOSHOW关键字,表单运行时将不显示,直到将表单的Visible属性被设置为.T.,或者调用表单的Show方法。●[NOREAD]:创建并显示表单集,但在执行READ命令前没有被激活,NOREAD要求表单集对象的WindowType属性设置为2。1443.4表单集与多重表单子表单:包含在另一个窗口中,用于创建MDI应用程序的表单。子表单不可移至父表单(主表单)边界之外,当其最小化时将显示在父表单的底部。若父表单最小化,则子表单也一同最小化。

145浮动表单:属于父表单(主表单)的一部分,但并不是包含在父表单中。浮动表单可以被移至屏幕的任何位置,但不能在父窗口后台移动。若将浮动表单最小化时,它将显示在桌面的底部。若父表单最小化,则浮动表单也一同最小化。浮动表单也可用于创建MDI应用程序。

4.1基本语句4.1.1赋值语句STORE<表达式>TO<变量名列表><变量名称>=<表达式>4.1.2语句的续行4.1.3程序注释语句

作用:提高程序的可读性行首注释

NOTE[<注释内容>]*[<注释内容>]行尾注释&&[<注释内容>]4.1.4设置程序断点格式:

WAIT[<提示信息>][TO<内存变量>][WINDOW[AT<行,列>]][TIMEOUTn]]4.1.5表单的释放RELEASE<THISFORM><THISFORM|THISFORMSET>.Release4.2使用表单设计器进行程序设计VisualFoxPro编程一般步骤建立应用程序的用户界面设置各个对象的属性编写方法及事件过程代码运行表单和调试程序5.1计算机算法算法(algorithm)

就是解决某一类问题的方法。程序设计就是用计算机语言把这类问题的算法描述出来。算法的性质有穷性确定性一般性结果性有效性算法的组成要素操作控制结构顺序选择循环算法的描述程序流程图结构化盒图PAD图伪代码与逐步细化的方法5.2条件选择语句单路选择命令格式:IF<条件表达式><命令序列>ENDIF双路选择命令格式:IF<条件表达式><命令序列1>

ELSE<命令序列2>ENDIF多路选择命令格式:

DOCASECASE<条件表达式1><命令序列1>

CASE<条件表达式2><命令序列2>

……

CASE<条件表达式N><命令序列N>[OTHERWISE<命令序列N+1>]ENDCASE6.1概述例如,一个简单的运算题:求1×2×3×4×56.2循环结构语句

VisualFoxPro中只提供了“当型”、“步长型”和“表扫描型”3种循环语句:(1)

DOWHILE….ENDDO(当型循环)(2)

FOR….ENDFOR(步长型循环)(3)

SCAN….ENDSCAN(表扫描型循环)6.2.1当型循环命令DOWHILEDOWHILE条件P&&循环起始及条件语句语句序列S&&循环体ENDDO&&循环终止语句

当条件是否成立执行循环体[例6.1]编写计算S=1+2+3+…+100的程序。写出程序:s=0&&变量s为累加器,初值为0i=1&&变量i为计数器,初值为1dowhilei<=100&&当i值小于或等于100时,执行循环体

s=s+i&&累加

i=i+1&&计数器增1enddo[例6.2]计算n的阶乘。计算按钮的Click事件代码:n=Thisform.Text1.Value&&输入n的值IFn<=0&&如果n的值小于或等于0则不进行计算Messagebox(“输入数据不正确!”)ReturnENDIFn1=1&&变量n1用来保留每次乘积的结果i=1&&变量i为计数器,初值为1DOWhilei<=n&&当i的值小于或等于n的值,执行循环体

n1=n1*i&&将i每次自增后的值同前次乘积的结果相乘,并再次保存到n1中

i=i+1&&计数器i自增EnddoThisform.Text2.Value=n1&&将n的阶乘输出Thisform.Refresh6.2.2FOR循环语句格式:FOR变量=初值TO终值[STEP步长]

语句序列ENDFOR|NEXT变量执行步骤如下:(1)给变量赋初值;(2)判断变量的值是否小于等于终值;(3)若不是,则循环结束;(4)若是,则执行语句序列;(5)变量=变量+步长(若省略STEP,则步长=1);(6)转(2)。[例6.3]编写计算S=1+2+3+…+100的程序。s=0fori=1to100&&从1到100,共执行100次循环体

s=s+inext?”s=”,s[例6.4]修改[例6.2],改用FOR循环计算n的阶乘。计算按钮的click事件代码:n=Thisform.Text1.ValueIFn<=0Messagebox(“输入数据不正确!”)ReturnEndifn1=1Fori=1Tonn1=n1*iEndforThisform.Text2.Value=n1Thisform.Refresh[例6.5]判断n是否素数程序如下:输入n&&见表单设计s=0&&变量s是标志位,当程序结束时,s=0表示n为素数,s=1表示n不是素数Fori=2Ton-1&&从2~n-1寻找n的约数

Ifn%i=0&&如果n和i可以整除(即余数为0)

s=1&&s=1表示找到约数

Exit&&提前退出循环

EndifEndforIfs=0&&也可改为:ifs=1?“素数”?”不是素数”Elseelse?“不是素数”?”素数”Endifendif[例6.6]求前20个Fibonacci数列Fibonacci数列是这样的一种数列:第一个数和第二个数是1,从第三个数开始,后面一个数是其前面两个数之和。例如,1,1,2,3,5,8,13,…….程序如下:f1=1f2=1fori=1to10?f1,f2f1=f1+f2f2=f1+f2endfor6.2.3SCAN循环语句格式:SCAN[范围][FOR条件]

语句序列ENDSCAN[例6.6]试编一程序,显示学生成绩册中80分以上学生姓名

温馨提示

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

评论

0/150

提交评论