计算机二级VFP考试讲义_第1页
计算机二级VFP考试讲义_第2页
计算机二级VFP考试讲义_第3页
计算机二级VFP考试讲义_第4页
计算机二级VFP考试讲义_第5页
已阅读5页,还剩96页未读 继续免费阅读

下载本文档

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

文档简介

1、第 1 章 数据与数据运算 一、数据类型 1.数值型(n):由数字、小数点和正负号组成。 (包括整数和实数) ,占 8 字节内存,精度 16 位。例如数值型 常量:12、3.45、-6.78、5.878e12、1.6e-12 等。 2.字符型(c):每个字符占一个字节,最长 255 个字符。 3.逻辑型(l):只有真、假两个值(.t. 、.t.、y.、y 、.f.、.f.、.n.、.n.)占 1 字节。 4.日期型(d):占 8 个字节,取值范围:0001 年 1 月 1 日9999 年 12 月 31 日。日期的表示格式很多,可用 有关命令设置: a)set date to mdy/dmy/

2、ymd 该命令设置日期表示形式。 b)set century to on/off 表示日期时是否指明“世纪” 。 c)set strictdate to 0/1/2 是否采用严格日期格式对待输入日期值。此设置命令取“1/2”值时,日 期需按照严格日期表示法yyyy-mm-dd的表示格式输入,否则会弹出“出错”对话框;取“2”值时 ctod() 、ctot()函数也采用严格日期格式转换字符;若设为 0,则日期的输入可按其它形式,但可能 被系统按不同日期解释。 d)set mark to /; 该命令用于设置日期分隔符,若缺省设置值,则用默认“/”为分隔符。 5.日期时间型(t):占 8 个字节,

3、如常量2001-03-22,11:30 p。日期的表示范围同上, 时间从 00:00 :00am11:59:59pm,缺省日期为 1899 年 12 月 30 日,缺省时间为午夜零点。 6.货币型(y):占 8 个字节,货币型常量以前置符号$打头,保留小数 4 位。 7.对象型(o):windows 中的对象,如 vfp 主窗口对象为“_screen” 。 (以上 7 种数据类型可用于内存变量和数组,前 6 种还可用于字段变量,但下列数据类型只能用于字段变量) 8.双精度型(n):占 8 个字节 9.浮点型(n):占 8 个字节 10. 整数型(n):占 4 个字节 11. 通用型(g):占

4、4 个字节,专门用来存储 ole 对象,如电子表格、字处理文档或图片等由其它程序产生的 对象。 12. 备注型(m):占 4 个字节,用于存放较多的文本信息,会产生与表同名的备注文件“*fpt” 。 13. 二进制字符型(c):使用方法与字符型同,只是直接以二进制形式存储。 14. 二进制备注型(m):使用方法与备注型同,只是直接以二进制形式存储。 二、常量与变量 1.常量(部分数据类型的常量说明): a)字符型常量必须用单引号、双引号、或方括号括起来。如某种括符本身也是字符串内容,则用另一种括符 括起该字串。 b)日期型常量必须用一对花括号包括。对于空值的日期,可用、/、-表示。 c)日期时

5、间型常量的空值表示成-,:,货币常量用$开头。 d)符号常量的定义及取消:例:#define pi 3.1415926535 #undef pi 2.变量:在程序执行过程中其值可变的数据项。实际上是用标识符命名的存放数据项的计算机内存单元。变量有 变量名、变量值、变量类型、长度、变量作用域等属性。变量名可由字母、汉字、数字或下划线组成,但须以 字母或汉字开头,长度不超过 10 个字符。vfp 的变量可分为字段变量和内存变量,表中的字段名就是字段变 量。内存变量不必先声明,如与字段变量同名,由于字段变量优先级较高,需在访问时加前缀 m(或 m) , 内存变量的类型随所赋值的类型变化而变化。可作为

6、内存变量的类型包括前述 7 种基本类型。 a)简单内存变量的赋值: 3.数组:要先用 dimension 或 declare 声明,下标最小为 1,默认各元素值为。f 。 ;一个数组中各元素的 数据类型可以不同;可用一维数组方式访问二维数组;仅在赋值号左边或作为输入对象时可直接用数组名给该 数组的全部数组元素赋同一值。 例如:dimension x(5),y(2,3) 4.内存变量常用命令: a)赋值:内存变量=表达式 store 表达式 to 内存变量列表 b)显示:(包括变量名、作用域、类型、取值) list memory like noconsoleto printerprompt /

7、to file display memory like noconsoleto printerprompt / to file 说明:like 短语表示只显示与通配符相匹配的内存变量; 子句 to printer/to file 表示将显示的内容同时送往打印机或文本文件中; list 命令连续流动显示,而 display 是分屏显示; 子句 noconsole 表示不输出到显示器; 子句 prompt 表示要求弹出打印设置框。 ? 显示输出各表达式值时自动换行 ?? 在同一行上显示各表达式值 c)清除: clear memory release release all extended lik

8、e/except 子句 extended 表示在程序中还可删除公共内存变量; 短语 except 表示删除之外的其余内存变量。 d)保存和恢复: save to all like/except restore from additive 内存变量文件的扩展名为。mem; 子句 additive 表示以追加方式添加内存变量,否则恢复前会先清空原有内存变量。 save screen to restore screen from 以上为保存和恢复当前屏幕内容的命令;无可选项屏幕内容存入缓冲区。 5.记录字段与数组元素的数据交换: 记录字段复制为数组元素: scatter fields memo to

9、 blank scatter fields like/except memo to blank 选用 memo 短语可同时复制备注型字段;blank 表示产生一空数组。 数组元素复制成记录: gather from fields memo gather form fields like/except memo 1.3 表达式 1. 数值运算符及表达式 () *或 *,/ % +, 2. 字符运算符及表达式 +、 3. 日期(或日期时间)运算符及表达式 +、 该表达式只有三种形式: 两日期(或日期时间)型数据相减,结果为相差的天数(或秒数) ; 日期(或日期时间)型数据加上一个整数,结果是一个新

10、的日期(或日期时间) ; 日期(或日期时间)型数据减去一个整数,结果是一个新的日期(或日期时间) 。 4. 关系运算符及表达式 、=、=、= =、(或# 或!=)、$ (优先级相同) 运算符两边的数据类型要相同,比较结果都为逻辑型: 数值型和货币型数据按值的大小比较; 日期和日期时间型数据比较时,越晚的越大; 逻辑型数据 tf; = = 只用于字串的精确比较; $ 包含于,也只能用于字符型数据; = 也可用于字串的非精确比较,但其结果与 set exact on/off 有关。 5. 逻辑运算符及表达式 not或!andor 作业作业: 实验内容:学习内存变量、数组变量的定义,赋值,显示,学习

11、各种表达式和运算符。复习函数的使用。 一、内存变量的赋值和使用 1、等号赋值 2、store 命令 3?和?的使用方法(显示值) 4list memo like (显示名称,类型,值) 练习:观察下列命令的作用和显示结果 x1=8*4 ?x1 x2=pqr xy=.t. xyz=1996/12/30 list memory like x* store 计算机 to xy,x3 save to f1 all like x? release x1,x2 list memory like x? restore from f1 list memory like x? 二、数组的定义和使用(参考教材)

12、练习一 dimension array1(2) display memory like array1 store a to array1(1) store 2 to array1(2) display memory like array1 array1=100 display memory like a* 练习二、 dimension mm(2,3) display memory like m* 练习三、 dimension sample(2,3) store goodbye to sample(1,2) store hello to sample(2,2) store 99 to sampl

13、e(6) store .t. to sample(1) clear display memory like sample 三.运算符: 1 数值运算符: ? (4-3) * (12/nvar2) ? 3 * 2 ? 3 2 ? 2 * 7 ? 14 / 7 ? 15 % 4 ? iif(year(date( ) % 4 = 0, summer olympics this year; , no summer olympics this year) 2、关系运算符: ? 23 54 status=“close” ? status = = “open” 注意: =表示等于.=表精确等于. 在 set

14、 exact off 状态下,用“=”比较两个字符串时,只要“=”右边的字符串与左边的字符串的左端部分相同, 即认为是相等;在 set exact on 状态下,则要完全相同才是相同。 例如:判断下列表达式的值 ab=abc ax=axax axax = ax ax=ax 你好=你好 你好=你好 3、日期运算符: ?1999-01-02+3 ? 1999-01-02-1999-01-21 ? 1999-01-21-1999-01-02 ? 1999-01-02+1999-01-02 4、字符串运算符: ? “我是”+”某某”+”!” ? “我是”-”某某”-”!” ? “我是 “+”某某 “+

15、”!” ? “我是 “-“某某 “+”!” $ :包含运算符,如果该运算符左边的字符串包含在右边的字符串里,那么表达式的值为真,否则为假. 例如: 判断下列表达式的值 李$李小强 李小强$李 五、判断下列表达式的正确与错误: 1 2002-05-25 2 2002-05-25 3 2002/05/25 4 2003-05-01 10:10:10 am-10 5 2003-05-01-date() 6 2003-05-01+date() 7 2003-05-01+1000 _ 练习题 一、选择题 1.在 visual foxpro 中,有下面几个内存变量赋值语句: x=2001-07-28 10

16、:15:20pm y=.t. m=$123.45 n=123.45 z=123.45 执行上述赋值语句之后,内存变量 x、y、m、n 和 z 的数据类型分别是( ) a)d、l、y、n、c b)d、l、n、n、c c)t、l、m、n、c d)t、l、y、n、c 2.以下日期值正确的是( ) a)2002-05-25 b)2002-05-25 c)2002-05-25 d)2002-0525 3.在下面的 visual foxpro 表达式中,不正确的是( ) a)2003-05-01 10:10:10 am-10 b)2003-05-01-date() c)2003-05-01+date()

17、d)2003-05-01+1000 4.在下列函数中,函数值为数值的是( ) a)bof() b)ctod(01/01/03) c)at(”人民”,”中华人民共和国”) d)substr(dtoc(date(),7) 二、填空题 1.命令 ?round(337.2007,3)的执行结果是_。 2.命令 ?len(thisismybook)的结果是_。 3.time()返回值的数据类型是_。 c 4.顺序执行下列操作后,屏幕最后显示的结果是_和_。 y=date() h=dtoc(y) ? type(y),type(h) d c 三、上机执行下述命令,熟悉函数的功能。(请同学们在运行之前先思考。

18、) 1.b=dtoc(date(),1) ?今天是:+left(b,4)+年+iif(subs(b,5,1)=0,; subs(b,6,2),subs(b,5,2)+月+right(b,2)+日 2.x=str(12.4,4,1) y=right(x,3) z= ,出生年月,性别, 入校总分 说明:(1)$符号是判断前面一个字符串是否属于后面那个字符串。 (2)在 list 后需使用字段名表时,fields 可以不写,也可以写,最好是写。 (3)使用字段名表,备注字段可以显示其内容,通用型字段无法显示内容。 2).to printer: 到打印机 5).to file : 这里的文件类型是 t

19、xt 6).off:不显示记录号 7)list 和 display 区别: a.list 默认参数是全部记录,display 默认参数是当前记录 b.list 显示时,如果有很多条记录,就会一次显示完,而 display 会分屏显示 c.list=display all(分屏显示), list next 1=display 例如:list for 性别=男 display for 性别=男 go 2 list next 3 go 2 disp next 3 结论:当 list 和 disp 不单独使用,要加范围和条件参数时,是完全一样的(除了分屏显示外) 。 单独使用时:list 显示全部,d

20、isp 显示当前记录。 3.表的浏览 菜单方式: 窗口分割器 命令方式: browse fields for rest 2.3 表的修改与编辑表的修改与编辑 2.3.1 修改表结构修改表结构 modify structure 2.3.2 表记录的修改和编辑表记录的修改和编辑 1.指针记录的定位指针记录的定位 记录指针, 当前记录, 当前记录号 记录号反映了记录存放的物理顺序 (1).命令方式:绝对移动绝对移动 : go/ goto 命令 基本使用方法:go 数字、go top(第一条记录) 、go bottom(最后一条记录) 相对移动相对移动 skip 数字 说明:skip = skip 1

21、 skip 3 skip -2 使用函数:recno()、bof()、eof() 重点掌握:重点掌握:eof()() 、bof()的含义。()的含义。 bof():begin of file:文件开始,第一条记录的前面,记录号为 1 eof():end of file:文件结束,最后一条记录的后面,记录号为最后一条记录的记录号+1 请分别描述下列值为多少: use 学生 go 1 disp ?recno(),bof() skip 1 ?recno(),bof() go bottom ?recno(),eof() skip ?recno(),eof() 思考思考: use 学生 list dis

22、p disp 将会显示什么结果将会显示什么结果,为什么为什么? 2. 修改记录修改记录 (1)browse fields for p51 (2)成批修改记录 (重点) 【格式】replace with additive , with additive . for while 【功能】用指定的值替换当前表中指定范围内满足条件的记录中指定的值. additive 用于备注 型字段,表将表达式值添加到字段原有内容后,否则取代原有内容. !若命令中和选项均缺省,则只对当前记录进行替换操作 数据库 数据库是一个数据容器,包含多个表和表之间的关系(视图,索引关系,存储过程等) 。 表(自由表):独立存在的

23、二维表 数据库表(数据表):数据库中的二维表,可以单独使用 6.1 数据库的创建与管理 611 创建 菜单方式 命令方式: create database 数据库名 扩展名:dbc 612 管理 项目管理器 613 数据库的打开,修改,关闭 1打开:open database 数据库名 exclusive/sharednoupdatevalidate 独占 /共享 只读 检查有效性(校验) *打开一个数据库的同时不会关闭另外一个数据库 *打开很多个以后想指定某个为当前数据库,使用 set database to 库名 2修改:modify database 数据库名 例如: close all

24、 create database abc create database abc1 close all open database abc1 open database abc modi database set database to abc1 modi database 3关闭 close database 关闭当前数据库 close database all 关闭所有已经打开的数据库 close all 关闭所有打开的数据库和表 clear all 关闭所有打开的数据库和表,清除内存变量 614 数据库对表和管理 1)库中新建表 2) 自由表添加到库中 3) 数据表从数据库中删除(移去或

25、者删除) 4) 表的操作:修改表结构,浏览表中数据 5) 连接、视图等 615 数据库文件的查看(了解) use 数据库名.dbc /*打开数据库库文件 modi stru /*修改数据库库文件的结构 browse /*浏览数据库库文件内容 由此可以看见:数据库的实质其实也是二维表(容器表) 。6.2 数据字典 62 数据字典数据字典 数据字典:数据字典:一张特殊的表,存放表中各种数据的定义或者设置信息(包括表的属性、字段属性、记录规则、表间关 系、以及参照完整性等信息) 说明:对于自由表无效,只能在数据库中使用(针对数据表) vfp 中的完整性控制: 1、 实体完整性:主关键字不为空(学号、

26、工号等主关键字段) 2、 域完整性:对于字段的类型和字段取值加以限制。 如:性别字段规定为 c 型,取值只能输入男或者女 (valid) 3、 参照完整性:控制数据的一致性,设置数据库关联记录的规则尤其是不同表之间的规则(如:更新是否一致等) 一、字段属性:数据库中对表修改属性,可以设置字段约束(域完整性) 表设计器=字段选项卡 二、记录规则:多个字段相互约束( 记录有效性:例如:学生表中,学号必须满 8 位,且性别只能是男或女两个值:len(alltrim(学号)=8 and 性别$”男女” ) 表设计器=表选项卡 触发器:对表的插入、删除、修改记录的约束 三、永久关系:表与表之间的关联 一

27、对一、一对多、多对多 建立方法:1:n 父表建主索引,子表建普通索引,再拖放 1:1 父表建主索引,子表建主索引或候选索引,再拖放 四、参照完整性:建立关联后设置的更新规则、插入规则和删除规则。 更新规则(级联/限制/忽略) 插入规则(限制/忽略) 删除规则(级联/限制/忽略) 操作步骤: 打开数据库=modi database=数据库菜单=编辑参照完整性 63 视图 视图是依赖于数据库表而导出的虚表,不以独立的文件形式存在。可通过修改视图而修改原表数据。 分类:本地视图(当前数据库) 、远程视图(当前数据库外的数据源) 631 创建本地视图 创建方法: 1、打开数据库 2、create vi

28、ew(或者选新建=视图) 3、选取筛选、排序、连接等选项 4、 modify database 查看 远程视图:当前数据库外的数据源导入到数据库中操作。 例如:excel 表、其它数据库系统数据等 使用方法: open database 数据库 use 视图名 /*类似打开一张表*/ . /*打开后的操作就和表的操作完全类似*/ 课后思考课后思考: : 有表 xx(学号 c(2),姓名 c(8),语文 n(3,0),数学 n(3,0),政治 n(3,0) 完成:1、将全班同学的数学都改为 60 分 2、全班男同学的语文都加十分,女同学的语文加 10% 3、增加一总分字段 2、计算出所有同学的总

29、分,其中语文占 30%.数学占 20%.政治占 30% 5、将第五位同学的语文加 10 分,总分改为 600 参考答案: 1、 repl all 数学 with 60 2、 repl all 语文 with 语文+10 for 性别=男 repl all 语文 with 语文*1.1 for 性别=女 3、 modi stru 增加总分字段,n(3,0) 4、 repl all 总分 with 语文*0.3+数学*0.2+政治*0.3 5、 repl reco 5 总分 with 600,语文 with 语文+10 或是: go 5 repl 总分 with 600,语文 with 语文+10

30、 3 3 插入记录插入记录 insert before blank 向已有表中增加新记录可分为:在表文件的尾部追加新记录(append)和在表文件任意记录的前后插入新记录(insert)两 种方法 补充:insert into 表名(字段列表) values(表达式列表) 向表尾追加一个新记录,并将指定的数据存入该记录中 如:insert into 学生(学号,姓名,性别) values(12325,阿贵,”男”) 2.为记录做删除标记为记录做删除标记(菜单方式,命令方式) 两步:逻辑删除逻辑删除和物理删除物理删除 (1)逻辑删除即做一个删除标记. delete for while !若命令中

31、和选项均缺省,则只对当前记录进行删除操作 逻辑删除记录的恢复 recall for while !若命令中和选项均缺省,则只对当前记录进行恢复删除操作 (2)物理删除 pack 物理删除( 真正删除)当前表中所有已打上删除标记的记录,并重新调整记录号 删除全部记录 ,并保留表结构. zap dele all pack 2.3.32.3.3 数据表与数组之间的数据交换数据表与数组之间的数据交换(重点)(重点) scatter 和 gather form (书 p55) 1、 scatter :将表中的单个记录传送到数组或内存变量中 单记录-数组(内存变量) 【格式】scatterscatter

32、fieldsfields memomemo toto blankblank | | memvarmemvar blankblank scatter 用法一:将当前记录的值赋给内存变量 格式: scatter fields 字段名表 memver 例如:use 学生 go 3 disp scatter memvar scatter fields 学号,姓名,入校总分 memvar ?m.学号,m.姓名,m. 入校总分 scatter 用法二:将当前记录的值赋给数组变量 格式:重点掌握 scatter fields 字段名表 to 数组变量名 例如:dime arr1(3) list memo l

33、ike a* use 学生 go 5 scatter to arr1 list memo like arr1 scatter to arr1 memo 掌握表的打开和关闭; 表结构的显示,表记录的显示方法. 实验内容: 一.创建自由表(采用命令法、菜单法、表向导), 建议:set default to f:lq(各人建自已的默认目录),下面的东西都放在自已的文件夹下.(注意:每打开 visual foxpro 就必须重新设置默认目录先执行 set defa to 路径); 1. 创建表结构(教材 p44 图 4.1) 菜单法: 使用 create 路径表名.dbf,进入表设计器建结构 使用 c

34、reat table 表名(字段名 类型(宽度),) (注意该有空格和不该有空格的地方) eg: create table 学生(学号 c(8),姓名 c(8),出生日期 d,入校总分 n(3,0),个人信息 m,照片 g) 2. 修改表结构命令修改表结构命令 modifymodify structurestructure 二.输入数据。输入教材 p42 表 4.1 学生.dbf,特长字段随便输入几个,照片也随便选几个人粘贴点图片就行了(图 片自选)如果数据输入不正确的话,请用 browse 命令修改,添加记录(输入数据)可以用 append 命令(只输两条即 可) 输入完:关闭就存盘(注意:

35、memo 如果输入了的话就会变成 memo, gen=gen) 4) 请观察状态栏,是否有文件被打开,它的名字是什么?路径是什么?当前记录号是什么? 共有多少条记录? 执行 use 命令,数据表被关闭了,请再看看状态栏的情况 请再打开表学生: use 学生 三、表的打开、关闭:(建议先检查一下默认目录) 打开:方法一:文件菜单-打开表或者常用工具栏-打开表 方法二:use 表名 或者是 use 盘符:路径文件名 关闭:use close table/close all/clear all 四表文件的显示 1 显示表结构:list/display stucture (以下操作用“学生.dbf”表

36、,为节省时间,表可从我的主页上下载) 2显示记录命令 disp/list 范围子句条件子句fields 子句 练习: list all list next 2 list record 5 list rest 显示所有女同学,不显示记录号 显示姓张的男同学 显示入学成绩大于 580 以上的人的姓名和成绩。 显示第 5 号记录的姓名,性别和入学成绩 显示 84 年出生的男生的入成绩学 不显示记录号 答案: 显示所有女同学 list for 性别=”女”off 显示姓张的男同学 disp for substr(姓名,1,2)=“张”and 性别=”男” list for 姓名=”张”and 性别=”

37、男” 显示入学成绩大于 580 以上的人的姓名和成绩。 list for 入学成绩580 fields 姓名,入学成绩 显示 5 号记录的姓名,性别和入学成绩 list record 5 fields 姓名,性别,入学成绩 显示 82 年出生的男生的入成绩学 list for year(出生年月)=1982 and 性别=”男” fields 入学成绩子 off 排序查询和多表操作排序查询和多表操作 5.15.1 排序排序 基本格式: sort to on. sort to on /a/d/c,/a/d/c. ascending/descendingfields 范围for/while 条件

38、说明: 默认为/a/a 升序升序 . . /d/d 降序降序 /c 排序时不区分大小写. 排序会产生一个已经排好序的新的 dbf 文件, 而以前的表没有改变 . 如: 对学生表按入学成绩排序.( (单重排序单重排序) ) 对学生表先按性别,再按入学成绩排序. ( (多重排序多重排序) ) sort to 学生 2 on 性别,入校总分 注意:排序改变了记录号,即记录存放的物理顺序。 5.25.2 索引索引 5.2.1 概念 物理顺序物理顺序:记录在内存中存放的实际顺序(记录号反映了记录存放的先后顺序) 逻辑顺序逻辑顺序:主控索引生效时的顺序(排列顺序) 索引类型索引类型 单索引文件,扩展名 i

39、dx(只包含一个索引项) 复合索引文件,扩展名 cdx 分: 结构复合索引 主文件名与表同名,随表的打开而打开 非结构复合索引 主文件名不与表同名 (包含多个索引项) 复合索引文件还可以分为:主索引、唯一索引(unique) 、候选索引(candidate) 、普通索引 主索引:只能在数据库表中建,索引字段无重复值,一张表只能建一个主索引 候选索引:必须是复合索引。索引字段无重复。一张表可以有多个候选索引.candidate 普通索引: 索引字段允许有重复值, 一张表可以有多个普通索引. 默认 惟一索引:索引字段允许有重复值,但相同的字段值只取第一个。unique 索引关键字: 建立索引所用的

40、字段或表达式 5.2.2 索引文件的建立 【格式】index on to | tag of for ascending | descending unique/candidate additive additive:表建立索引文件时不关闭先前的索引. 单索引的建立(.idx) index on 索引表达式索引表达式 to 单索引文件名单索引文件名 index on 姓名 to xm 说明: 建立单索引文件 xm.idx 建立时 xm.idx 就打开并生效了 默认是按照升序进行的,要降序只有 n 型字段才可以,其它类型要降序的话就只能用复合索引的方法了 例: index on 入校总分 to r

41、xzf 单索引不能使用 ascending 和 descending 参数,复合索引才能使用 ascending 和 descending 参数 复合索引(.cdx)(.cdx) 结构复合索引(与表主文件名同名,且随表自动打开) indexindex onon 索引表达式索引表达式 tagtag 索引标识索引标识 asce/descasce/desc use 学生 index on 姓名 tag xm descending 课程-选课(1:n) 一方:学生,课程 建索引 多方:选课. 建关联 sele 1 use 学生 index on 学号 tag xh sele 2 use 课程 inde

42、x on 课程号 tag kch sele 3 use 选课 set rela to 学号 into a set rela to 课程号 into b additive list 学号,a.姓名,b.课程名,成绩, 4.取消关联 在父表工作区内使用 set rela to 5.数据工作期 p73 set view on/off 在数据工作期中建关联 5.5.3表与表的连接 是一种物理连接,将两个工作区中打开的表文件连接生成一个新的表文件. 格式: join with 别名 to 新表文件 for fields 字段名表 例 5-24 用”学生”,”选课”,”课程”生成新表”学生课程”,其中包含

43、学号,姓名,性别,课程名,课时数,成绩 sele 1 use 学生 sele 2 use 选课 join with a to 学生选课 for 学号=a.学号 fields a.学号,a.姓名,课程号,成绩 use 学生选课 select 3 use 课程. join with b to 学生课程 for 课程号=b.课程号,fields b.学号,b.姓名,课程名,课时,b.成绩 use 学生课程 brow 注意:join with 命令不需要使用事先排序和索引,它会连接产生一个新的表,是一种物理的连接。如果缺少 fiel 字句,则代表全部字段。 四、表与表的更新 1、update 的作用:

44、用一个表的内容替换另一个表的内容。 格式:update on from replace with , with , random 3、功能 :利用表的表达式值来更新当前表文件中记录的字段值。 说明: *两个表都需要先对连接关键字段建立索引 *如果有 random 字段,那么只需当前表建立索引,另外一张可以不建 例:有两张表: 总分表:总分表:zf.dbf 学号 姓名 语文 数学 总分 110 张三 114 李四 119王二 成绩表:成绩表: cj.dbf 学号 语文 数学 110 67 65 114 89 67 119 78 95 按照成绩表的成绩修改总分表的成绩,并计算出总分表的总分字段 参

45、考答案: close all sele 2 use cj index on 学号 tag xhcj sele 1 use zf index on 学号 tag xhzf update on 学号 from b replace 语文 with b.语文,数学 with b.数学 replace all 总分 with 语文+数学 list (在被替换的表中用 update) 总结: join with:不需要建立索引,物理连接生成一张新表 set relation to :子表需要建索引。父表不建 update:两个表都要建立索引,并且索引关键字类型和宽度要相同。 多工作区操作 实验名称:多工作

46、区操作 实验性质:设计性实验 实验目的和要求:必修实验,掌握多工作区的基本操作,建立关联,使用连接和表的更新 实验内容: 1. 为表“学生” “选课” “课程”建立表间关系,显示学号,姓名,课程号,成绩,课程名字段。set relation to 2.将“学生” 、 “选课.dbf”及“课程.dbf”表连接生成一张新表 new1 ,其中包含学号,姓名,课程号,成绩,课程名。 join with 3. 用“update”文件夹下的 cj.dbf 中的语文和数学分数填入 zf.dbf 表,统计总分填入总分字段,其中语文占 60%,数 学占 40%. update sql 部份 1、查询教师号及其所

47、任课程的门数(授课.dbf) 2、查询选修了课程 c140 的学生学号和成绩,并按成绩降序排列(选课.dbf) 3、查询教师的编号,姓名极其所授课程的编号(教师.dbf,授课.dbf) 参考答案 1. selesele 1 1 useuse 学生学生 indexindex onon 学号学号 tagtag xhxh selesele 2 2 useuse 课程课程 indexindex onon 课程号课程号 tagtag kchkch selesele 3 3 useuse 选课选课 setset relarela toto 学号学号 intointo a a setset relarela

48、 toto 课程号课程号 intointo b b additiveadditive (以上两条命令可合为一条命令:以上两条命令可合为一条命令:setset relarela toto 学号学号 intointo a a,课程号,课程号 intointo b b addiaddi) listlist 学号,学号, a.a.姓名,课程号姓名,课程号,b.,b.课程名,成绩,课程名,成绩, 2.select 1 useuse 学生学生 selectselect 2 2 useuse 选课选课 joinjoin withwith a a toto newnew forfor 学号学号=a.=a.学号

49、学号 selesele 3 3 useuse newnew selesele 4 4 useuse 课程课程 joinjoin withwith c c toto new1new1 forfor 课程号课程号=c.=c.课程号课程号 useuse new1new1 listlist 3 3 使用使用 update:update: closeclose allall selesele 2 2 useuse cjcj indexindex onon 学号学号 tagtag xhcjxhcj selesele 1 1 useuse zfzf indexindex onon 学号学号 tagtag x

50、hzfxhzf updaupda onon 学号学号 fromfrom b b replrepl 语文语文 withwith b.b.语文语文, ,数学数学 withwith b.b.数学数学 replrepl allall 总分总分 withwith 语文语文*0.6+*0.6+数学数学*0.4*0.4 listlist 使用关联使用关联+replace+replace 完成完成: : closeclose allall clearclear selesele 1 1 useuse cjcj indexindex onon 学号学号 toto xnxn selesele 2 2 useuse

51、 zfzf setset relarela toto 学号学号 intointo a a from 授课; group by 教师号 2、select 学号,成绩; from 选课; where 课程号=c140; order by 成绩 desc 3、select 教师.教师号,姓名,课程号; from 教师,授课; where 教师.教师号=授课.教师号 作业作业: : 第一题:有表第一题:有表: : stu(stu(学号学号, ,姓名姓名, ,性别性别, ,班级班级) ) 一方一方 cj(cj(学号学号, ,课程名课程名, ,分数分数) ) 多方多方 请显示出请显示出 0303 级级 3

52、 3 班班 每位同学的姓名每位同学的姓名, ,分数分数( (请使用关联请使用关联) ) 注意:每个同学可以选多门课注意:每个同学可以选多门课 第二题:有表第二题:有表: : kc(kc(课程号课程号, ,课程名课程名) ) sk(sk(教师号教师号, ,教师姓名教师姓名, ,课程号课程号) ) 请显示出每位教师的教师姓名请显示出每位教师的教师姓名, , 课程号课程号, ,课程名课程名( (请使用连接请使用连接) ) 第三题:有表第三题:有表: : zg(zg(工号工号, ,姓名姓名, ,水电费水电费, ,煤气费煤气费, ,网费网费, ,总费总费) ) 其中只有工号和姓名有数据其中只有工号和姓名

53、有数据, ,其它数据没有填写其它数据没有填写 fei(fei(工号工号, ,水电费水电费, ,煤气费煤气费) ) 表表 feifei 中所有数据已经填写中所有数据已经填写 请编写命令完成下列功能请编写命令完成下列功能: : 利用表利用表 feifei 中的数据填写表中的数据填写表 zgzg 中的数据。中的数据。 设网费统一收取设网费统一收取 6565 元元, ,请计算出总费。请计算出总费。( (更新更新) ) 实验六 实验名称:表操作(四) 目的:1.练习排序 2.索引创建,打开,使用,更新 3.练习使用顺序查询和索引查询. 内容(以下内容对”学生”表进行操作) 1 按性别降序排列,生成排序文

54、件 xb1 2 按出生日期建立升序的单索引文件 csrq1. 3、按入校总分建立降序的单索引文件 zf1. 4 建立非结构复合索引文件 stu.cdx,要求先排女生记录再排男生记录。(选做) 5 建立一个结构复合索引要求创建一个索引标志 xm1,实现按姓名升序排列. 6.按性别和入学成绩创建一个结构复合索引,索引标识为 xbcj, 实现先按性别,再按入学成绩升序排列. 7.建结构复合索引,按”三好生”字段升序排,索引标识 shs. 8.关闭表后重新打开表.打开单索引文件 zf1 并显示记录. use use 学生 set index to zf1 list 或:use 学生 index zf1

55、 list 9 分别设置 xm1,xbcj,shs 为主控索引标识,并显示. use 学生 set order to xm1 list set order to xbcj list set order to shs list 10. 打开学生表,按入校总分升序建单索引文件。关闭表。打开学生表,将吴红梅的入校总分改为 650 分。打开单索 引文件,显示记录。观察吴红梅在表中的位置,用 reindex 更新单索引文件,并显示,观察吴红梅在表中的位置. 11.用 locate 命令使指针指向第一条入校总分小于 580 分的记录,再把指针指向第二条入校总分小于 580 分的记录 (locate-con

56、tinue) 12、用 seek 和 find 命令分别查找”江冰”.(要先对姓名字段建索引) 索引参考答案: 1.sort on 性别/d to xb1 2.index on 出生日期 to csrq1 3.index on 入学成绩 to zf1 4.index on 性别 tag xb of stu desc 5.index on 姓名 tag xm1 6.index on 性别+str(入学成绩) tag xbcj 7.index on 三好生 tag shs 10. use 学生 index on 入校总分 to cj list use use 学生 replace 入校总分 wit

57、h 650 for 姓名= 吴红梅 set index to cj list (吴红梅没有排到正确的位置) reindex list (吴红梅排到了正确的位置) 11. locate for 入校总分580 disp continue disp 12.index on 姓名 to xm find 江冰 seek “江冰” 第第 3 章章 程序设计(一)程序设计(一) 本章重点: 程序的编写,基本程序基本结构,子程序和过程 常见的程序设计方法 1、 结构化程序设计(模块化、面向过程的程序设计) 2、 面向对象的程序设计 8.1 面向过程程序设计面向过程程序设计 8.1.1 程序文件的建立和执行

58、程序的扩展名:prg 一、程序的建立: 1、 modi comm 程序名.prg (.prg 可省) 实质:文本文件(ascii 编码) ,执行时,会产生编译文件 fxp 后让计算机执行。 2、 菜单方式 二、程序的运行 do 三、vfp 中程序的分类:数学类程序、涉及到表操作的程序 如果本程序是涉及到表操作的程序,那么: 1、 使用程序之间可以先加语句 clear 和 close all 2、 程序最后可以使用命令 close all 然后使用 return 或 cancel 或 quit 最后注意书写程序的格式(缩进) 四、程序举例 例:显示出所有入校总分在 580 分及以上的同学信息 c

59、lear close all use 学生 locate for 入校总分=580 do while .not. eof() disp continu wait 按任意键继续 enddo ?结束 close all cancel 8.1.2 程序中常用的命令 1.交互式输入命令 (1) 赋值命令 = store (2) 输入数据的命令:(注意:输入数据是在程序执行的时候) accept 提示信息 to input 提示信息 to wait 提示信息 to timeout 注意:wait 输入的是一个字符(c 型) input 和 accept 的区别: input 适用于全部类型内存变量,输入

60、时需要加定界符 accept 只适用于 c 型,并且 c 型不加定界符 说明: 提示信息是提示信息是 c 型型, 它会在屏幕上原样输出它会在屏幕上原样输出 . input 和和 accept 在编写程序时语句都一样,只是执行程序(在编写程序时语句都一样,只是执行程序(do)时,输入的东西不同)时,输入的东西不同 下面请看程序实例: 例:输入 a、b、c 的值,对 2ax+b=c 求 x 的值。 clear input “现在计算 2ax+b=c,请输入 a 的值:” to a input “请输入 b 的值:” to b input “请输入 c 的值:” to c x=(c-b)/(2*a)

温馨提示

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

评论

0/150

提交评论