实验22 数据表记录的定位删除与索引.docx
《实验22 数据表记录的定位删除与索引.docx》由会员分享,可在线阅读,更多相关《实验22 数据表记录的定位删除与索引.docx(7页珍藏版)》请在冰豆网上搜索。
实验22数据表记录的定位删除与索引
实验2-2数据表记录的定位、删除与索引
一、实验目的
掌握用数据工作期和命令打开、关闭表的操作;理解记录指针的概念,掌握记录指针的绝对定位、相对定位命令;熟悉函数EOF(),BOF(),RECNO()的使用;掌握表记录的删除操作,理解逻辑删除和物理删除的概念;掌握单项索引文件、结构复合索引文件和非结构复合索引文件的概念及索引文件的建立、打开与使用;理解表使用时的物理顺序和逻辑顺序。
二、实验准备
预习表记录指针的定位方法;理解表记录的各种删除概念与操作;预习排序和索引的概念及相关操作,主要包括:
什么是排序;什么是单项索引文件,它是如何建立及打开的,它与表文件的关系;什么是复合索引文件(包括结构复合索引文件和非结构复合索引文件),他们与单项索引文件有什么区别?
是如何建立及打开的,它们与表文件的关系;确定主控索引的意义。
班级14国贸1
学号140108100421
姓名张懿慧
三、实验内容
1.表文件的打开、关闭操作
用数据工作期同时打开“职工”、“销售”和“商品”三个表文件,然后关闭其中的两个文件。
用USE打开、关闭“职工”、“销售”和“商品”表文件,在数据工作期观察打开的情况。
2.移动及测试记录指针
以三个数据表文件为基础,熟悉表记录指针的移动方法以及表处理的常用函数。
当执行LIST、DISPLAY、GO、SKIP等语句后,测试EOF()、BOF()、RECNO()等函数的值,特别注意当文件指针在表文件的首记录、末记录和文件头、文件尾时,测试函数的返回值。
在命令窗口输入如下命令(注意输入一条命令要键入回车键),并在有?
处记录下命令的执行结果。
USE职工
GO5
?
RECNO()回答:
5
SKIP3
?
RECNO()回答:
8
GOBOTTOM
?
RECNO(),EOF()回答:
10;.F.
SKIP
?
RECNO(),EOF()回答:
11;.T.
GOTOP
?
RECNO(),BOF()回答:
1;.F.
SKIP-1
?
RECNO(),BOF()回答:
1;.F.
?
FCOUNT()回答:
9
?
RECCOUNT()回答:
10
USE销售
?
FCOUNT()回答:
3
?
RECCOUNT()回答:
10
3.对表文件的记录进行显示和简单的编辑
(1)显示“职工”表的前三条记录,再显示最后三条记录。
回答:
(写出正确的命令,下同)
USE职工
GO1
GOBOTTOM
SKIP-2
LISTREST
(2)将“职工”表中所有基本工资大于2000的已婚女职工,其基本工资在原有基础上调10%,并用DISPLAY命令显示修改前后的记录。
回答:
DISOLAYFOR婚否=.T..AND.性别=”女”.AND.基本工资>2000
EPLACE基本工资WITH基本工资*1.1FOR婚否=.T..AND.性别=”女”.AND.基本工资>2000
(3)在命令窗口设置SETDELETEDON,逻辑删除职工表中在1978年以后出生的女职工记录,用LIST命令显示结果,再将打上删除标记的记录恢复,并用DISPLAY命令检查恢复是否正确。
回答:
SETDELETEDON
DELETEFOR出生日期>({^1978-01-01}.AND.性别=’女’
List
RECALLFOR出生日期>({^1978-01-01}.AND.性别=’女’
BROWSELAST
DISPLAYFOR出生日期>({^1978-01-01}.AND.性别=’女’
(4)在命令窗口设置SETDELETEDOFF,将第(3)题再做一遍,注意结果有什么不一样。
回答:
SETDELETEDOFF
DELETEFOR出生日期>({^1978-01-01}.AND.性别=’女’
List
RECALLFOR出生日期>({^1978-01-01}.AND.性别=’女’
DISPLAYFOR出生日期>({^1978-01-01}.AND.性别=’女’
4.有一个工资表文件,其表结构及记录如表2-14和表2-15所示,用REPLACE命令计算每位职工的应发金额和实发金额。
回答:
USE工资
ReplaceALL应发工资WITH基本工资+岗位津贴+其他发款
REPLACEALL实发工资WITH基本工资+岗位津贴+其他发款-其他扣款
LIST
表2-14工资.DBF的结构
表2-15工资.DBF的数据
5.建立排序文件
(1)单字段排序:
将职工表按照出生日期的升序排列显示。
回答:
USE职工
LIST
SORTTO职工出生日期升序ON出生日期/A
USE职工出生日期升序
LIST
(2)多字段排序:
将职工表按性别排序,性别相同的情况下再按基本工资的升序排列。
回答:
USE职工
SORTON性别,基本工资/ATOzgxbgz
USEzgxbgz
LIST
6.建立单项及复合索引文件
(1)建立单项索引文件,按职工表的基本工资字段的逻辑顺序排列。
回答:
USE职工
INDEXon基本工资tozggz
LIST
(2)建立单项索引文件,按出生日期的逻辑顺序排列。
回答:
USE职工
INDEXon出生日期tozgrq
LIST
(3)建立结构复合索引文件的索引标识,按姓名的升序索引。
回答:
USE职工
INDEXON姓名TAGzgxm1
LIST
(4)建立结构复合索引文件的索引标识,按出生日期的降序索引。
回答:
USE职工
INDEXON出生日期TAGzgrq2DESCENDING
LIST
(5)建立非结构复合索引文件的索引标识,按出生日期的升序排列。
回答:
USE职工
INDEXon出生日期TagcsrqofFJG
LIST
(6)建立非结构复合索引文件的索引标识,按基本工资、出生日期的升序索引。
回答:
USE职工
INDEXonSTR(基本工资,6,2)+DTOS(出生日期)TAGzggzrqofFIG
LIST
(7)用一条命令打开所有的索引文件,并确定主索引文件或标识,在屏幕上显示索引结果。
回答:
USE职工
SETINDEXTOzggz,zgrq,职工,fjg
SETORDERTOzggz
LIST
(8)建立一个单项索引文件,使其按照基本工资降序排列。
回答:
USE职工
INDEXon3000-基本工资tozggz2
LIST
(9)利用表设计器对建立的索引标识情况进行检查。
四、实验2-2报告
1.通过上述实验,请回答下列问题
(1)LIST________=DISPLAY,而DISPLAY________=LIST。
回答:
recno();all
(2)执行了LIST命令后,EOF()=_____。
回答:
.T.
(3)执行了GOTOP命令后,BOF()=.T.,对吗?
为什么?
回答:
不对;GOTOP之后指针只是指到了首记录而非文件头,而BOF()是表头测试函数,因此应该BOF()=.F.
(4)如何用LIST/DISPLAY命令显示备注字段内容?
回答:
用LIST/DISPLAYALL命令显示备注型字段内容
(5)你认为用REPLACE对表文件记录进行修改,与用BROWSE命令修改有什么不同?
回答:
BROWSE是显示文件记录然后对文件记录进行修改,REPLACE直接对文件记录进行修改,而且REPLACE可以批量修改
(6)SETDELETEDON/OFF语句对被逻辑删除的记录有何影响?
回答:
使用SETDELETEDON对逻辑删除标志有效,删除标记的记录不参与处理。
使用SETDELETEDOFF对逻辑删除标志无效,删除标记的记录参与处理。
(7)通过实验,请你归纳当EOF()为.T.时,RECNO()为多少?
当BOF()为.T.时,RECNO()为多少?
回答:
11和1
(8)用SORT命令建立排序文件后,紧接着用LIST命令却看不到排序结果,为什么?
回答:
用SORT命令建立排序文件后,会产生一个新表,排序内容在新建的新表里,要USR新表再LIST浏览
(9)建立索引文件时,有一个可选参数[UNIQUE],它有什么意义?
你能举例说明吗?
回答:
当多个记录的<索引表达式>值相同时,只有其中第一个记录的值记入索引文件。
例一:
INDEXON婚否TAGHFOFFJGUNIQUE&&按婚否建唯一索引标识HF加到非结构复合索引文件FJG.cdx中
(10)请总结一下表的排序与表索引有什么不同。
回答:
不同:
1.建索引是在系统中建立一个索引表,在查找记录的时候可以通过这个表迅速找到。
排序是将表在系统中按一个键值的进行的,改变了记录的物理顺序。
2.排序后会产生一个新表,其记录按新的顺序重新编排记录,而原文件保持不变。
索引文件是表文件的辅助文件,必须和表文件同时使用。
3.由于索引表是按关键字进行的逻辑排序,且只有两个字段,因此大大提高了排序速度,而且只占用了很小的存储空间。
2.实验完成情况及存在问题