1、实验 2-2 数据表记录的定位、删除与索引一、实验目的掌握用数据工作期和命令打开、关闭表的操作;理解记录指针的概念,掌握记录指针的绝对定位、相对定位命令;熟悉函数 EOF(),BOF(),RECNO()的使用;掌握表记录的删除操作,理解逻辑删除和物理删除的概念;掌握单项索引文件、结构复合索引文件和非结构复合索引文件的概念及索引文件的建立、打开与使用;理解表使用时的物理顺序和逻辑顺序。二、实验准备预习表记录指针的定位方法;理解表记录的各种删除概念与操作;预习排序和索引的概念及相关操作,主要包括:什么是排序;什么是单项索引文件,它是如何建立及打开的,它与表文件的关系;什么是复合索引文件(包括结构复
2、合索引文件和非结构复合索引文件),他们与单项索引文件有什么区别?是如何建立及打开的,它们与表文件的关系;确定主控索引的意义。班 级 14 国贸 1 学 号 140108100421 姓 名 张懿慧 三、实验内容1表文件的打开、关闭操作用数据工作期同时打开“职工”、“销售”和“商品”三个表文件,然后关闭其中的两个文件。用 USE 打开、关闭“职工”、“销售”和“商品”表文件,在数据工作期观察打开的情况。2移动及测试记录指针以三个数据表文件为基础,熟悉表记录指针的移动方法以及表处理的常用函数。当执行 LIST、DISPLAY、GO、SKIP 等语句后,测试 EOF()、BOF()、RECNO()等
3、函数的值,特别注意当文件指针在表文件的首记录、末记录和文件头、文件尾时,测试函数的返回值 。在命令窗口输入如下命令(注意输入一条命令要键入回车键),并在有?处记录下命令的执行结果。USE 职工GO 5?RECNO() 回答:5SKIP 3?RECNO() 回答:8GO BOTTOM?RECNO(),EOF() 回答:10;.F.SKIP?RECNO(),EOF() 回答:11;.T.GO TOP?RECNO(),BOF() 回答:1;.F.SKIP -1?RECNO(),BOF() 回答:1;.F.?FCOUNT( ) 回答:9?RECCOUNT( ) 回答:10USE 销售?FCOUNT(
4、) 回答:3?RECCOUNT( ) 回答:103对表文件的记录进行显示和简单的编辑(1)显示“职工”表的前三条记录,再显示最后三条记录。回答:(写出正确的命令,下同)USE 职工GO 1GO BOTTOMSKIP -2LIST REST(2)将“职工”表中所有基本工资大于 2000 的已婚女职工,其基本工资在原有基础上调 10%,并用 DISPLAY 命令显示修改前后的记录。回答:DISOLAY FOR 婚否=.TAND.性别=”女”.AND.基本工资2000EPLACE 基本工资 WITH 基本工资*1.1 FOR 婚否=.TAND.性别=”女”.AND.基本工资2000(3)在命令窗口设
5、置 SET DELETED ON,逻辑删除职工表中在 1978 年以后出生的女职工记录,用 LIST 命令显示结果,再将打上删除标记的记录恢复,并用 DISPLAY 命令检查恢复是否正确。回答:SET DELETED ONDELETE FOR 出生日期 (1978-01-01 .AND. 性别=女ListRECALL FOR 出生日期 (1978-01-01 .AND. 性别=女BROWSE LASTDISPLAY FOR 出生日期 (1978-01-01 .AND. 性别=女(4)在命令窗口设置 SET DELETED OFF,将第(3)题再做一遍,注意结果有什么不一样。回答:SET DEL
6、ETED OFFDELETE FOR 出生日期 (1978-01-01 .AND. 性别=女ListRECALL FOR 出生日期 (1978-01-01 .AND. 性别=女DISPLAY FOR 出生日期 (1978-01-01 .AND. 性别=女4有一个工资表文件,其表结构及记录如表 2-14 和表 2-15 所示,用REPLACE 命令计算每位职工的应发金额和实发金额。回答:USE 工资Replace ALL 应发工资 WITH 基本工资+岗位津贴+其他发款REPLACE ALL 实发工资 WITH 基本工资+岗位津贴+其他发款-其他扣款LIST表 2-14 工资.DBF 的结构表
7、2-15 工资.DBF 的数据5建立排序文件(1)单字段排序:将职工表按照出生日期的升序排列显示。回答:USE 职工LISTSORT TO 职工出生日期升序 ON 出生日期 /A USE 职工出生日期升序 LIST (2)多字段排序:将职工表按性别排序,性别相同的情况下再按基本工资的升序排列。回答:USE 职工 SORT ON 性别,基本工资 /A TO zgxbgz USE zgxbgz LIST 6建立单项及复合索引文件(1)建立单项索引文件,按职工表的基本工资字段的逻辑顺序排列。回答:USE 职工 INDEX on 基本工资 to zggz LIST (2)建立单项索引文件,按出生日期的
8、逻辑顺序排列。回答:USE 职工 INDEX on 出生日期 to zgrq LIST (3)建立结构复合索引文件的索引标识,按姓名的升序索引。回答:USE 职工 INDEX ON 姓名 TAG zgxm1 LIST(4)建立结构复合索引文件的索引标识,按出生日期的降序索引。回答:USE 职工 INDEX ON 出生日期 TAG zgrq2 DESCENDING LIST(5)建立非结构复合索引文件的索引标识,按出生日期的升序排列。回答:USE 职工 INDEX on 出生日期 Tag csrq of FJGLIST (6)建立非结构复合索引文件的索引标识,按基本工资、出生日期的升序索引。回答
9、:USE 职工 INDEX on STR(基本工资,6,2)+DTOS(出生日期) TAG zggzrq of FIG LIST (7)用一条命令打开所有的索引文件,并确定主索引文件或标识,在屏幕上显示索引结果。回答:USE 职工 SET INDEX TO zggz, zgrq, 职工, fjg SET ORDER TO zggz LIST (8)建立一个单项索引文件,使其按照基本工资降序排列。回答:USE 职工 INDEX on 3000-基本工资 to zggz2 LIST(9)利用表设计器对建立的索引标识情况进行检查。四、实验 2-2 报告 1通过上述实验,请回答下列问题(1)LIST
10、_=DISPLAY,而 DISPLAY_=LIST。回答:recno();all(2)执行了 LIST 命令后,EOF()=_。回答:.T.(3)执行了 GO TOP 命令后,BOF()=.T.,对吗?为什么?回答:不对;GO TOP 之后指针只是指到了首记录而非文件头,而 BOF()是表头测试函数,因此应该 BOF()=.F.(4)如何用 LIST/DISPLAY 命令显示备注字段内容?回答:用 LIST /DISPLAY ALL 命令显示备注型字段内容(5)你认为用 REPLACE 对表文件记录进行修改,与用 BROWSE 命令修改有什么不同?回答:BROWSE 是显示文件记录然后对文件记
11、录进行修改,REPLACE 直接对文件记录进行修改,而且 REPLACE 可以批量修改(6)SET DELETED ON/OFF 语句对被逻辑删除的记录有何影响?回答:使用 SET DELETED ON 对逻辑删除标志有效,删除标记的记录不参与处理。 使用 SET DELETED OFF 对逻辑删除标志无效,删除标记的记录参与处理。(7)通过实验,请你归纳当 EOF()为.T.时,RECNO()为多少?当 BOF()为.T.时,RECNO()为多少?回答:11 和 1(8)用 SORT 命令建立排序文件后,紧接着用 LIST 命令却看不到排序结果,为什么?回答:用 SORT 命令建立排序文件后
12、,会产生一个新表,排序内容在新建的新表里,要 USR 新表再 LIST 浏览(9)建立索引文件时,有一个可选参数UNIQUE,它有什么意义?你能举例说明吗?回答:当多个记录的值相同时,只有其中第一个记录的值记入索引文件。 例一:INDEX ON 婚否 TAG HF OF FJG UNIQUE &按婚否建唯一索引标识 HF 加到非结构复合索引文件 FJG.cdx 中(10)请总结一下表的排序与表索引有什么不同。回答:不同: 1.建索引是在系统中建立一个索引表,在查找记录的时候可以通过这个表迅速找到。 排序是将表在系统中按一个键值的进行的,改变了记录的物理顺序。 2.排序后会产生一个新表,其记录按新的顺序重新编排记录,而原文件保持不变。 索引文件是表文件的辅助文件,必须和表文件同时使用。 3.由于索引表是按关键字进行的逻辑排序,且只有两个字段,因此大大提高了排序速度,而且只占用了很小的存储空间。2实验完成情况及存在问题