第3章 数据库和表的设计与操作练习一 数据表基本操作
【实验目的】
1.熟练掌握用“表设计器”建立数据表的方法;
2.能够正确输入表记录;
3.掌握表文件的打开、关闭操作;
4.掌握表结构的显示、修改方法。
【知识要点】
1.使用表设计器创建自由表方法一:使用菜单方式建立表结构;
(1)(在“项目管理器”中)选“数据/自由表”-“新建” -“新建表”- 输入表名并确定存放位置-“保存”按钮。
(2)“文件/新建”-(类型)选“表”-“新建文件”钮-输入表名并确定存放位置。
方法二:使用命令方式建立表结构。
格式:CREATE <表名>
功能:创建以指定表名命名的表结构。
2.表数据的输入
(1)立即输入:在建立表结构后,立即输入记录(此时是在“编辑”状态)
(2)追加输入:建立表以后,再打开此表,进行输入记录
①,项目管理器”)“数据/自由表”- 选定表-“浏览”钮-“显示/追加方式”
②(先打开表,“显示/浏览”进入浏览状态)“表/追加新记录”(追加一条记录)
③ (先打开表,“显示/浏览”进入浏览状态),显示/追加方式” (追加多条记录)
④ (先打开表) APPEND [BLANK] (有“BLANK”项,则添加一条空白记录)
注:M型字段的录入:双击M字段,录入数据;
G型字段的录入:双击字段 -“编辑/插入对象”- 选“类型”- 选择文件
(3)成批追加:将指定表中的记录追加到当前表的尾部
APPEND FROM 表名 [FOR/WHILE 条件式][FIELDS 字段名表]
注:两表要追加的字段,类型要相同
3.打开表
(1)“文件/打开”-(类型)选“表”- 选定表-“确定”
(2)USE <表名>
4.关闭表
(1)USE
(2)退出VFP
5.表结构的显示与修改
显示:LIST|DISPLAY STRUCTURE
修改:(1)菜单方式:打开要修改的数据表,进入表设计器对表结构进行修改。
(2)MODIFY STRUCTURE
【实验内容】
1.在D盘根目录下建立一个以学生自己的学号命名的文件夹。
2.建立自由表“学生表”,保存至学号文件夹中,表的结构如表3-1所示。
表3-1 学生表.DBF表文件的结构
字 段 名
字 段 类 型
字 段 宽 度
小 数 点
索 引 否
学 号
字符型
8
姓 名
字符型
8
性 别
字符型
2
出生日期
日期型
8
团 员 否
逻辑型
1
入学成绩
数值型
6
2
班 级
字符型
10
照 片
通用型
4
简 历
备注型
4
(1)创建表结构,(在“表设计器”中输入表内容:字段名、类型、宽度等)
(2)输入表记录:
用立即输入方式输入如表3-2所示的信息,只输入三条记录即可,此时是在编辑状态下输入表记录。
注意:备注型数据和通用型数据的输入方法。
表3-2 学生.DBF记录数据学号
姓名
性别
出生日期
团员否
入学成绩
班级
简历
照片
05011001
李平
女
10/21/85
.T.
502.00
计算机

05011002
章立新
男
02/14/86
.T.
489.50
计算机

05021001
林敏
女
08/01/85
.T.
498.00
金融

05021002
刘欣
男
11/05/84
.F.
500.00
金融

05031001
李国华
男
11/21/85
.T.
482.00
会计

05031002
陈炳章
男
06/01/83
.T.
466.00
会计

3.在某商场管理系统中,以下2个数据表反映一个月内有关手机销售、库存情况。建立数据表Stockll和Sell,用浏览中的“追加方式”输入表记录。
(1)商品月库存表(Stockll.dbf)
商品代码
品名
型号
单价
库存数量
库存金额
2011
诺基亚
N8250
2250.00
16
2120
诺基亚
3310
990.00
18
4025
摩托罗拉
8088
2090.00
12
3122
爱立信
T29
1380.00
14
5203
西门子
2118
1470.00
18
(2)销售明细表(Sell.dbf)
商品代码
日期
销售数量
营业员
2120
2001-11-12
5
方虹
4025
2001-11-12
6
方虹
3122
2001-11-13
4
李之和
2120
2001-11-14
10
张广河
按以上数据表内容创建Stockll.dbf和Sell.dbf数据表文件,录入数据。
4.表文件的操作:
(1).打开表:练习用菜单方式和和命令方式打开学生表.DBF。
(2).显示表结构:练习显示学生表.DBF的表结构
(3).修改表结构:
① 修改学生表.DBF的入学成绩字段为入学总分
② 给学生表.DBF增加一个年龄字段。
(4).关闭表:关闭学生表.DBF
【高手进阶】
建立如下表文件,并输入数据,
计算机小组表文件JSJ.DBF:
学号 姓名 性别 民族 政治面目 来源地区
1101 李晓芸 女 朝鲜族 团员 吉林省
1104 王景录 男 汉族 党员 四川省
1123 欧小飞 男 汉族 预备党员 重庆市
1108 唐锐 男 苗族 无 贵州省
1109 王小云 女 藏族 团员 西藏
文艺小组表文件WY.DBF:
学号 姓名 性别 民族 政治面目 来源地区
1101 李晓芸 女 朝鲜族 团员 吉林省
1114 伍小录 男 汉族 团员 四川省
1123 欧小飞 男 汉族 预备党员 重庆市
1108 唐锐 男 苗族 无 贵州省
1135 杨兵 男 藏族 党员 重庆市
[注意观察这两个表的结构是完全相同的,记录大多相同,思考一下,能否用复制或向导的方法建立第二个表。]
【自我测试】
1.用同样的方法建立如下数据表,并输入数据。可先输入两条记录,再以追加的方式输入其它的记录。
表3-4 书库.DBF
书号
书名
作者
定价
册数
总金额
JSJ6424
软件工程
刘小会
30.00
69
2070.00
SX23535
高等数学
林莉
18.80
306
5752.80
JJ63376
经济法
王继成
22.30
238
5307.40
YW43679
大学语文
张继忠
19.00
112
2128.00
2.建立如下表文件,并输入数据。
学生档案表文件:XSDA.DBF
学号 姓名 性别 民族 政治面目 入学成绩
0101  李芸 女 朝鲜族 团员 666.00
0104 王景 男 汉族 党员 550.00
0123 李明 男 汉族 预备党员 700.00
学生成绩表文件:XSCJ.DBF
学号 姓名 语文 数学 英语 总分
0101  李芸 88.5 86.8 70.0 245.30
0104 王景 90.0 79.0 78.5 247.50
0123 李明 67.0 88.0 89.0 244.00
【实验过程】
1.在D盘根目录下建立一个以学生自己的学号命名的文件夹。
[提示]:可设置自己文件夹所在位置为默认路径,方便后续作业的保存。
如在命令窗口中运行命令:SET DEFAULT TO d:\123456 完成默认路径的设置。
2.建立自由表“学生表.DBF”,保存至学号文件夹中,表的结构如表3-2所示。
表3-2 学生表.DBF文件的结构字 段 名
字 段 类 型
字 段 宽 度
小 数 点
索 引 否
学 号
字符型
8
姓 名
字符型
8
性 别
字符型
2
出生日期
日期型
8
团 员 否
逻辑型
1
入学成绩
数值型
6
2
班 级
字符型
10
照 片
通用型
4
简 历
备注型
4
[操作]
(1)创建表结构:
方法一:使用菜单方式建立表结构。
操作步骤:
① 在Visual FoxPro系统主菜单下,打开“文件”菜单,选择“新建”选项,弹出“新建”窗口,选择“表”,再单击“新建文件”按钮,进入“创建”窗口,在“创建”窗口,输入要建立的表的名字“学生表”,然后单击“保存”按钮,进入“表设计器”窗口,如图3-1所示;

图3-1,表设计器”窗口1
② 在图3-1中,可以逐一定义表中所有字段的名字、类型和宽度等。如果根据表3-2的内容定义“学生表”的结构,就要在“表设计器”窗口输入以下信息,如图3-2所示;

图3-2,表设计器”窗口2
③ 当表中所有字段的属性定义完成后,单击“确定”按钮,进入系统窗口,如图3-3所示;

图3-3 Microsoft Visual FoxPro窗口
④ 在图3-3中,根据自己的需要,如果选择“是”,可以立即向表文件中输入数据,如果选择“否”,以后再输入数据,将结束表结构的建立。
方法二:使用命令方式建立表结构。
① 当在命令窗口输入CREATE 学生表,将进入如图3-1“表设计器”窗口,其他操作与方法一相同;
② 当在命令窗口输入CREATE,将进入,表设计器”窗口,其他操作与方法一相同。
(2)输入表记录方法一:创建表结构后立即输入数据当表中的所有字段定义完成之后,单击“确定”按钮,出现如图3-3所示的对话窗口,单击“是”按钮,进入数据输入窗口,即可向表中输入数据。输入数据有两种方式,一是浏览方式,如图3-4(a)所示;二是编辑方式,如图3-4(b)所示。两种方式可以通过“显示”菜单下的“编辑”、“浏览”选项相互转换。

图3-4 输入数据窗口向表中输入数据时,应注意以下几个问题。
① 在输入数据时,当输入内容填满一个字段的宽度时,光标会自动跳到下一个字段;内容不满一个字段的宽度时,可使用Tab键或单击鼠标将光标移到下一个字段。
② 对数值型数据,只需输入数字部分,不需要输入小数点。
③ 输入逻辑型字段时,只需输入“T”或“F”即可,不分大小写,不需要输入逻辑数据两边的圆点。
④ 输入日期型数据时,只需输入月、日、年格式的数字,不需输入“/”,要求输入的日期是有效日期,否则系统将提示日期无效。
⑤ 备注型字段和通用型字段的输入方法与其他类型的数据输入方法不同,不能在编辑或浏览窗口中直接输入,必须用下面方法完成,
输入备注型字段时,将光标定位到相应的备注型字段上,按Ctrl+Home键或Ctrl+PageUp键或直接双击,进入Visual FoxPro Visual FoxPro 编辑窗口,在编辑窗口进行输入等操作,输入完毕,按Ctrl+W键或单击右上角的“关闭”按钮,即可关闭“编辑”窗口。输入内容的备注型字段会显示Memo,表示该备注型字段非空。
输入通用型字段内容时,双击浏览或编辑窗口中的通用型字段,进入Visual FoxPro 编辑窗口,然后在如图3-5所示的窗口中,选择“编辑”菜单中的“插入对象”命令,系统弹出“插入对象”对话框,如图3-6所示,在该对话框窗口的“对象类型”中选择需要的对象类型。在“插入对象”窗口中,如果选择,新建”选项,则进入创建一个对象窗口,在对象创建好之后,退出此窗口;如果选择“由文件创建”选项,则进入另一个“插入对象”窗口,如图3-7所示,输入要插入的文件名,或单击“浏览”按钮,选择需要插入对象的文件,单击“确定”按钮即可。实际上,表文件的通用型字段的内容与备注型字段一样存储在与表文件同名、扩展名为.FPT的文件中。

图3-5 选择插入对象

图3-6,插入对象”窗口

图3-7,插入对象”窗口方法二:以追加的方式输入数据建立表结构时,如果用户没有选择立即方式向表输入数据,可以用追加的方式向表输入数据,操作步骤如下。
① 打开要输入数据的自由表。
② 在Visual FoxPro系统主菜单下,单击“显示”菜单,选择“编辑”选项,可进入表的“编辑”窗口,再单击“显示”菜单下的“追加方式”选项,即可向表文件中追加数据。如图3-8所示。

图3-8,编辑”窗口
③ 也可以在“显示”菜单下,选择“浏览”选项,再进行“追加”,同样可以达到向表中输入数据或修改数据的目的,如图3-9所示。

图3-9,浏览”窗口
3.在某商场管理系统中,以下2个数据表反映一个月内有关手机销售、库存情况。
 [操作]
(1)商品月库存表(Stockll.dbf)
商品代码
品名
型号
单价
库存数量
库存金额
2011
诺基亚
N8250
2250.00
16
2120
诺基亚
3310
990.00
18
4025
摩托罗拉
8088
2090.00
12
(2)销售明细表(Sell.dbf)
商品代码
日期
销售数量
营业员
2120
2001-11-12
5
方虹
4025
2001-11-12
6
方虹
3122
2001-11-13
4
李之和
2120
2001-11-14
10
张广河
根据表文件数据决定数据表的结构,依据上述方法建立表结构。输入表记录,建立数据表。
4.表文件的操作:
[操作]
(1)打开表:练习用菜单方式和和命令方式打开学生表(略)
注意:用命令“USE 表名”打开表的时候,表名前应含路径,为减少麻烦,可在刚打开VFP的时候,用命令指定默认路径。如:SET DEFAULT TO D:\VFP程序设计\表\
(2)显示表结构:练习显示学生表的表结构
USE 学生表
LIST/DISPLAY STRUCTURE
(3)修改表结构:(使用命令MODIFY STRUCTURE)
① 修改学生表的入学成绩字段为入学总分(略)
② 给学生表增加一个年龄字段。
注意:要以独占方式打开表,在“表设计器”中修改。
(4)关闭表:关闭学生.DBF
USE
【高手进阶解答】
建立如下表文件,并输入数据,
计算机小组表文件JSJ.DBF:
学号 姓名 性别 民族 政治面目 来源地区
1101 李晓芸 女 朝鲜族 团员 吉林省
1104 王景录 男 汉族 党员 四川省
1123 欧小飞 男 汉族 预备党员 重庆市
1108 唐锐 男 苗族 无 贵州省
1109 王小云 女 藏族 团员 西藏
文艺小组表文件WY.DBF:
学号 姓名 性别 民族 政治面目 来源地区
1101 李晓芸 女 朝鲜族 团员 吉林省
1114 伍小录 男 汉族 团员 四川省
1123 欧小飞 男 汉族 预备党员 重庆市
1108 唐锐 男 苗族 无 贵州省
1135 杨兵 男 藏族 党员 重庆市
[操作]
注意观察这两个表的结构是完全相同的,记录大多相同,思考一下,能否用复制或向导的方法建立第二个表。
根据表文件数据决定数据表的结构,依据上述方法建立表结构。输入表记录,建立数据表JSJ.DBF。观察两表结构相同,可以用向导或者后边将要讲到的复制操作建立第二个数据表。
【自我测试解答】
1,同样的方法建立如下数据表,并输入数据。
表3-4 书库.DBF
书号
书名
作者
定价
册数
总金额
JSJ6424
软件工程
刘小会
30.00
69
2070.00
SX23535
高等数学
林莉
18.80
306
5752.80
JJ63376
经济法
王继成
22.30
238
5307.40
YW43679
大学语文
张继忠
19.00
112
2128.00
[操作]
(1)根据给出数据表的记录值,确定书库表的结构为(表3-5所示),
表3-5 书库.DBF的结构字 段 名
字 段 类 型
字 段 宽 度
小 数 位
索 引 否
书号
字符型
7
书名
字符型
10
作者
字符型
6
定价
数值型
5
2
册数
数值型
3
总金额
数值型
7
2
依据上述方法建立表结构,注意字段类型和字段宽度的设置。
(2)输入表记录可以用立即输入方法输入前两条记录,再用追加方法输入后面记录。熟练掌握表记录的输入方式。
2.建立如下表文件,并输入数据。
[操作](略)
练习二 记录的显示与定位
【实验目的】
1.显示表记录(LIST与DISPLAY)
2.记录指针的定位(绝对移动GO与相对移动SKIP)
【知识要点】
1.显示表记录
LIST | DISPLAY [范围] [FOR/WHILE <条件表达式>] [FIELDS <字段名表>] [OFF] [TO PRINT/FILE <文件名>]
2.记录指针的定位方法一:在“浏览”窗口中移动指针方法二:用命令移动指针
(1)绝对移动:GO | GOTO <N>
(2)相对移动:SKIP <N>
【实验内容】 
[提示:以下题目在学生表中操作]
1.显示记录,
(1)显示前5条记录
(2)显示3-8条记录,不显示记录号
(3)显示表记录只显示姓名、学号、班级三个字段
(4)只显示当前一条记录
(5)只显示当前一条记录的学号,姓名两个字段
(6)显示是团员的学生
(7)显示是团员的女生
(8)显示入学成绩大于550分的男生
(9)显示入学成绩大于530分的女生的学号、姓名、性别和出生年月
(10)显示83年出生的学生
2.定位操作
(用菜单方式和命令方式各试一次,看哪种方式更方便?)
(1)绝对移动
① 将指针移到第三条记录,再显示其后连续四条记录
② 移指针到第七条记录,再移到第五条记录,并显示此记录
③ 显示第二条到第七条这六条记录
④ 将指针移到首记录,并显示此记录
⑤ 将指针移到尾记录,并输出函数EOF()和函数RECNO()的值
(2)相对移动
① 将指针移到第五条记录,再前进4步,又后退六步,这是第几条记录
② 回到第一条记录,移动指针到第七条记录,再移到第五条记录,并显示此记录
③ 回到第一条记录,显示第三条到第七条这五条记录
④ 回到第一条记录,显示第八条记录
⑤ 将指针移动到文件尾输出函数EOF()和函数RECNO()的值
(3)综合应用:
定位到首记录,测试文件首和当前记录函数的值;定位到文件首,测试文件首和当前记录函数的值;定位到尾记录,测试文件尾和当前记录函数的值;定位到文件尾,测试文件尾和当前记录的值。
【高手进阶】
在学生.DBF中,显示所有表记录,用函数测试当前记录号。
定位当前记录为3号记录,显示3—6号记录,并用函数测试当前记录号。
定位当前记录指针到尾记录,用函数测试当前记录号,指针下移一位,用函数测试当前记录号和是否到文件尾。
定位记录指针到3号记录,显示余下的记录,并用函数测试当前记录号和是否到文件尾。
显示83年出生的入学成绩大于500分的同学记录。
【自我测试】
以独占的方式打开数据表:书库.DBF。
给数据表书库增加一个字段(出版社,C,20)
定位记录指针到3号记录,修改定价为:32.00
定位记录指针到2号记录,显示2----6号记录,不显示记录号修改册数大于200的出版社为:高等教育出版社显示总金额小于3000的所有记录的书号、书名、总金额字段
定位记录指针到8号记录,测试函数EOF()和函数RECNO()的值定位到4号记录,显示4号至尾记录将作者为刘小会的书名改为:《软件工程概论》
将书名为“基础会计”的定价增加10%
【实验过程】
1.显示记录:[设数据表已打开]
(1)显示前5条记录
[操作] LIST NEXT 5
(2)显示3-8条记录,不显示记录号
[操作] GO 3
LIST NEXT 6
(3)显示表记录只显示姓名、学号、班级三个字段
[操作] LIST FIELDS 姓名,学号,班级
(4)只显示当前一条记录
[操作] DISPLAY
(5)只显示当前一条记录的学号,姓名两个字段
[操作] DISPLAY FIELDS 学号,姓名
(6)显示是团员的学生
[操作] LIST FOR 政治面目=”团员”
(7)显示是团员的女生
[操作] LIST FOR政治面目=”团员” AND 性别=“女”
(8)显示入学成绩大于550分的男生
[操作] LIST FOR 入学成绩>550 AND 性别=“男”
(9)显示入学成绩大于530分的女生的学号、姓名、性别和出生年月
[操作] LIST FOR 入学成绩>530 AND 性别=“女” FIELDS 学号,姓名,性别,出生年月
(10)显示83年出生的学生
[操作] LIST FOR YEAR(出生年月)=1983
2.定位操作
(1)绝对移动
① 将指针移到第三条记录,再显示其后连续四条记录
[操作] GO 3
LIST NEXT 4
② 移指针到第七条记录,再移到第五条记录,并显示此记录
[操作] GO 7
GO 5
DISPLAY
③ 删除第二条到第七条这六条记录
[操作] GO 2
DELELT NEXT 7
④ 将指针移到首记录,并显示此记录
[操作] GO TOP
DISPLAY
⑤ 将指针移到尾记录,并测试函数EOF()的值和函数RECNO()的值
[操作] GO BOTTOM
EOF(),RECNO()
(2)相对移动
① 将指针移到第五条记录,再前进4步,又后退六步,这是第几条记录
[操作] GO 5
SKIP 4
SKIP -6
RECNO()
② 回到第一条记录,移动指针到第七条记录,再移到第五条记录,并显示此记录
[操作] GO TOP
GO 7
SKIP -2
DISPLAY
③ 回到第一条记录,显示第三条到第七条这五条记录
[操作] GO TOP
SKIP 2
LIST NEXT 5
④ 回到第一条记录,删除第八条记录
[操作] GO TOP
SKIP 7
DELETE
⑤ 将指针移动到文件尾测试EOF()的值和函数RECNO()的值
[操作] GO BOTTOM
SKIP
EOF(),RECNO()
(3)综合应用:
定位到首记录,测试文件首和当前记录函数的值;定位到文件首,测试文件首和当前记录函数的值;定位到尾记录,测试文件尾和当前记录函数的值;定位到文件尾,测试文件尾和当前记录的值。
[操作]GO TOP
?BOF(),RECNO()
SKIP -1
?BOF(),RECNO()
GO BOTTOM
?EOF(),RECNO()
SKIP
?EOF(),RECNO()
【高手进阶解答】
在学生.DBF中,显示所有表记录,用函数测试当前记录号。
[操作] USE
LIST
?RECNO()
定位当前记录为3号记录,显示3—6号记录,并用函数测试当前记录号。
[操作] GO 3
LIST NEXT 4
?RECNO()
定位当前记录指针到尾记录,用函数测试当前记录号,指针下移一位,用函数测试当前记录号和是否到文件尾。
[操作] GO BOTTOM
?RECNO()
SKIP
?RECNO(),EOF()
定位记录指针到3号记录,显示余下的记录,并用函数测试当前记录号和是否到文件尾。
[操作] GO 3
LIST REST
?RECNO(),EOF()
显示83年出生的入学成绩大于500分的同学记录。
[操作] LIST FOR YEAR(出生日期)=1983 AND 入学成绩>500
【自我测试解答】
独占的方式打开数据表:书库.DBF。
[操作] USE 书库 EXCLUSIVE 或 在打开窗口选取“独占”方式
给书库表增加一个字段(出版社,C,20),在表设计器中完成。
定位记录指针到3号记录,修改定价为:32.00
[操作] GO 3
REPLACE 定价 WITH 32.00
定位记录指针到2号记录,显示2----6号记录,不显示记录号
[操作] GO 2
LIST NEXT 5 OFF
修改册数大于200的出版社的值为:高等教育出版社
[操作] REPLACE ALL 出版社 WITH,高等教育出版社” FOR 册数>200
显示总金额小于3000的记录的书号、书名、总金额
[操作] LIST FOR 总金额<3000 FIELDS 书号,书名,总金额
定位记录指针到8号记录,测试函数EOF()和函数RECNO()的值
[操作] GO 8
EOF(),RECNO()
定位到4号记录,显示4号至尾记录
[操作] GO 4
LIST REST
将作者为刘小会的记录的书名改为:《软件工程概论》
[操作] REPLACE 书名 WITH,软件工程概论” FOR 姓名=“刘小会”
将书名为“基础会计”的记录的定价增加10%
[操作] REPLACE 定价 WITH 定价*1.1 FOR 书名=“基础会计”
练习三 记录的修改与删除
【实验目的】
熟练掌握表记录的修改方法掌握成批替换命令的应用掌握追加记录命令、成批追加命令、插入记录的应用掌握表记录的删除操作
【知识要点】
表记录的修改(BROWSE、EDIT)
成批替换(REPLACE)
追加记录(APPEND)和成批追加(APPEND FROM)
插入记录(INSERT)
表记录的删除(DELETA、RECALL、PACK、ZAP)
【实验内容】 
1.修改记录:(在“学生”表中)
(1)将3号记录的学号改为“05061008”
(2)将5号记录的简历改为以下内容:
,1996年被评为“三好学生”。”
(3)将”李平”的入学成绩改为:520.00,班级改为:电子商务
(4)将,林敏”的学号改为:“050801002”
(5)将6号记录的班级改为:“电子”
2.替换记录(在“学生”表中)
(1)将所有学生的入学成绩增加10分
(2)计算机班学生的入学成绩增加10%
(3)金融班女生的入学成绩增加20分
(4)把会计班改为电子班
(5)增加一个字段“年龄”[N型、2],并计算学生的年龄,填入表中
(6)所有学生的年龄加10岁
(7)增加一个字段“籍贯”[N型、10],将所有女生的籍贯填为“重庆”
3.追加记录 (在“学生”表中)
(1)打开学生.DBF,将其出生日期设置为空,在其中追加如表3-6中的两条记录:
表 3-6 要追加的记录学号
姓名
性别
出生日期
团员否
入学成绩
班级
简历
05031004
张小红
女
07/08/85
.F.
508.00
电子
05031008
刘杨
男
11/05/86
.T.
550.00
金融
(2)在数据表学生的末尾追加一条空白记录
4.插入记录(在“学生”表中)
(1)移指针到第五条记录,在它的后面插入一条空白记录
(2)在第一条记录的前面插入一条记录(内容自定)
(3)在第六条记录的前、后各插入一条空白记录(要求用的命令语句最少)
5.删除记录(在“学生”表中)
(1)用单击小方块的方法随意为几条记录作删除标记,然后取消这些标记;
(2)用命令方式作标记:(作标记后,立即撤消标记,好做下一题)
① 删除前4条记录
② 删除当前一条记录
③ 删除第4条记录
④ 删除姓“李”的学生
⑤ 删除金融班的男生
⑥ 删除会计班的女生或计算机班的男生
  ⑦ 删除86年出生的男生 
⑧ 删除金融班的男生团员记录
⑨ 删除入学成绩在500-599分的学生记录
⑩ 删除入学成绩在450-599分的金融班学生记录
(3)恢复上述加了删除标记的记录
(4)物理删除6—8号记录
(5)物理删除所有记录,只留表结构
(6)用菜单方式,再做一次删除操作
【高手进阶】
1.修改记录(在XSDA 表中)
(1)在浏览窗口中修改6号记录的入学日期为:99年9月1日
(2)在编辑窗口中修改英语系学生的人数为60
2.替换记录(在XSCJ表中)
(1)计算表中“总分”字段的值,并填在表中
(2)计算表中“平均分”字段的值,并填在表中
(3)对于总分大于450分的学生,“级别”字段中填写“优秀”
(4)对于英语成绩不及格的学生,英语成绩加10分
(5)对于平均分小于60的学生,“级别”字段中填写“不合格”
3,追加、插入、删除记录(在XSDA 表中)
(1)给Xsda表追加一条空白记录
(2)在1号记录的前面插入一条空白记录
(3)在5号记录的后面插入如下一条记录系别
班级
学号
姓名
性别
年龄
入学日期
婚否
人数
中文系
102202
05031004
张红
女
20
07/08/98
.F.
54
(4)逻辑删除3至8号记录
(5)逻辑删除数学系的所有男同学记录
(6)逻辑删除99年以前入学的英语系的女同学记录
(7)恢复(4)题中逻辑删除的记录
(8)物理删除(5)中逻辑删除的记录
【自我测试】
说明:以下题目在Stockll表中操作。
1,修改3号记录的单价为:2050.00元
2,计算表中“总金额”字段的值,并填写在表中
3,将诺基亚品牌的手机单价提高15%
4,将非诺基亚品牌的手机的库存数量增加10部,库存金额减少50%
5,逻辑删除单价小于1000元的记录
6,逻辑删除商品代码以2开头的记录
7,恢复上述逻辑删除的记录
8,给该表追加一条空白记录
9,在3号记录的前面插入如下一条记录

10.物理删除表的最后一条记录
【实验过程】
[提示:以下操作在学生表中操作]
1.修改记录,
(1)将3号记录的学号改为“05061008”
[操作] BROWSE或 REPLACE 学号 WITH,05061008” RECORD 3
在浏览窗口修改其值
(2)将5号记录的简历改为以下内容:
,1996年被评为“三好学生”。”
[操作] 在编辑窗口或浏览窗口均可修改。
(3)修改”李平”的入学成绩为:520.00,班级为:电子商务
[操作] REPLACE 入学成绩 WITH 520.00,班级 WITH,电子商务” FOR 姓名=”李平”
(4)用浏览的形式修改数据,修改姓名为“林敏”的记录的学号为:“050801002”
[操作] BROWSE
在浏览窗口修改其值
(5)将6号记录的班级改为电子
[操作] BROWSE
在浏览窗口修改其值
或 REPLACE 班级 WITH,电子” RECORD 6
2.成批替换记录
(1)将所有学生的入学成绩增加10分
[操作] REPLACE ALL入学成绩 WITH入学成绩+10
(2)计算机班学生的入学成绩增加10%
[操作] REPLACE ALL入学成绩 WITH 入学成绩*1.1 FOR 班级=”计算机”
(3)金融班女生的入学成绩增加20分
[操作] REPLACE ALL入学成绩 WITH 入学成绩+20 FOR班级=”金融”AND 性别=”女”
(4)把会计班改为电子班
[操作] REPLACE ALL班级 WITH,电子” FOR 班级=”会计”
(5)增加一个字段“年龄”[N型、2],并计算学生的年龄,填入表中
修改表结构,增加字段“年龄”;再用命令:
[操作] REPLACE ALL年龄 WITH YEAR(DATE()— 出生日期)
(6)所有学生的年龄加10岁
[操作] REPLACE ALL年龄 WITH 年龄+10 ALL
(7)增加一个字段“籍贯”[N型、10],将所有女生的籍贯填为“重庆”
[操作] 修改表结构,增加字段“籍贯”;再用命令,
REPLACE ALL籍贯 WITH,重庆” FOR性别=”女”
3.追加记录
(1)打开学生.DBF,将其出生日期设置为空,在其中追加如表3-6中的两条记录:
表 3-6 要追加的记录学号
姓名
性别
出生日期
团员否
入学成绩
班级
简历
05031004
张小红
女
07/08/85
.F.
508.00
电子
05031008
刘杨
男
11/05/86
.T.
550.00
金融
[操作] APPEND
弹出编辑窗口,可输入要追加的记录。
(2)在数据表学生的末尾追加一条空白记录
[操作] APPEND BLANK
4.插入记录
(1)移指针到第五条记录,在它的后面插入一条空白记录
[操作] GO 5
INSERT BLANK
(2)在第一条记录的前面插入一条记录(内容自定)
[操作] GO TOP
INSERT BEFORE
(3)在第六条记录的前、后各插入一条空白记录(要求用的命令语句最少)
[操作] GO 6
INSERT BEFORE BLANK
SKIP
INSERT BLANK
5.删除记录(作标记与彻底删除有何区别,不要真的删除了,不然无法继续操作)
(1)用单击小方块的方法随意为几条记录作删除标记,然后取消这些标记;
[操作](略)
(2)用命令方式作标记:(只作标记,作标记后,立即撤消标记,好做下一题)
① 删除前4条记录
[操作] DELETE NEXT 4
② 删除当前一条记录
[操作] DELETE
③ 删除第4条记录
[操作] DELETE RECORD 4
④ 删除姓“李”的学生
[操作] DELETE FOR SUBSTR(姓名,1,2) =”李”
⑤ 删除金融班的男生
[操作] DELETE FOR班级=”金融” AND 性别=”男”
⑥ 删除会计班的女生或计算机班的男生
 [操作] DELETE FOR班级=”会计” AND 性别=”女” OR 班级=”计算机” AND 性别=”男”
⑦ 删除86年出生的男生 
[操作] DELETE FOR YEAR(出生年月)=1986 AND 性别=”男”
⑧ 删除金融班的男生团员记录
[操作] DELETE FOR班级=”金融” AND 团员否
⑨ 删除入学成绩在500-599分的学生记录
[操作] DELETE FOR 入学成绩>=500 AND入学成绩<=599
⑩ 删除入学成绩在450-599分的金融班学生记录
[操作] DELETE FOR 入学总分>=450 AND入学总分<=599 AND班级=”金融”
(3)恢复上述加了删除标记的记录
[操作] RECALL
(4)物理删除6—8号记录
[操作] GO 6
DELETE NEXT 3
PACK
(5)物理删除所有记录,只留表结构
[操作] ZAP
(6)用菜单方式,再做一次删除操作
[操作](略)
【高手进阶解答】
1,修改记录(在Xsda 表中)
(1)在浏览窗口中修改6号记录的入学日期为:99年9月1日
[操作] BROWSE
(2)在编辑窗口中修改英语系学生的人数为60
[操作] EDIT
2,替换记录(在Xscj表中)
(1)计算表中“总分”字段的值,并填在表中
[操作] REPLACE ALL总分 WITH 高数+大语+邓论+英语+计算机
(2)计算表中“平均分”字段的值,并填在表中
[操作] REPLACE ALL 平均分 WITH 总分/5
(3)对于总分大于450分的学生,“级别”字段中填写“优秀”
[操作] REPLACE ALL 级别 WITH,优秀” FOR 总分>450
(4)对于英语成绩不及格的学生,英语成绩加10分
[操作] REPLACE ALL 英语 WITH 英语+10 FOR 英语<60
(5)对于平均分小于60的学生,“级别”字段中填写“不合格”
[操作] REPLACE ALL 级别 WITH,不合格” FOR 平均分<60
3,追加、插入、删除记录(在Xsda表中)
(1)给Xsda表追加一条空白记录
[操作] APPEND BLANK
(2)在1号记录的前面插入一条空白记录
[操作] GO 1
INSERT BLANK BEFORE
(3)在5号记录的后面插入如下一条记录系别
班级
学号
姓名
性别
年龄
入学日期
婚否
人数
中文系
102202
05031004
张红
女
20
07/08/98
.F.
54
[操作] GO 5
INSERT
(4)逻辑删除3至8号记录
[操作] GO 3
DELETE NEXT 6
(5)逻辑删除数学系的所有男同学记录
[操作] DELETE ALL FOR 系别=”数学系” AND 性别=”男”
(6)逻辑删除99年以前入学的英语系的女同学记录
[操作] DELETE ALL FOR系别=”英语系” AND 性别=”女”AND YEAR(入学日期)<1999
(7)恢复(4)题中逻辑删除的记录
[操作] GO 3
RECALL NEXT 6
(8)物理删除(5)中逻辑删除的记录
[操作] DELETE ALL FOR 系别=”数学系” AND 性别=”男”
PACK
【自我测试解答】
说明:以下题目在Stockll表中操作。
1,修改3号记录的单价为:2050.00元
[操作] BROWSE 或 EDIT
2,计算表中“总金额”字段的值,并填写在表中
[操作] REPLACE ALL总金额 WITH 单价*库存数量
3,将诺基亚品牌的手机单价提高15%
[操作] REPLACE ALL 单价 WITH 单价*1.15 FOR 品名=”诺基亚”
4,将非诺基亚品牌的手机的库存数量增加10部,库存金额减少50%
[操作] REPLACE 库存数量 WITH 库存数量+10 库存金额 WITH 库存金额*0.5 FOR品名!=,诺基亚”
5,逻辑删除单价小于1000元的记录
[操作] DELETE ALL FOR 单价<1000
6,逻辑删除商品代码以2开头的记录
[操作] DELETE ALL FOR LEFT(商品代码,1)=,2”
7,恢复上述逻辑删除的记录
[操作] RECALL
8,给该表追加一条空白记录
[操作] APPEND BLANK
9,在3号记录的前面插入如下一条记录

[操作] GO 3
INSERT BEFORE
10.物理删除表的最后一条记录
[操作] GO BOTTOM
PACK
练习四 索引与查找
【实验目的】
1,掌握表文件的复制、表结构的复制操作
2,掌握建立结构复合索引的方法
3,掌握设置主控索引的命令
4,熟练掌握表的顺序查找
【知识要点】
1.表文件的复制命令格式:COPY TO <新表文件名>[范围][FIELDS <字段名表>][FOR/WHILE <条件表达式>]
2.表结构的复制命令格式:COPY STRUCTRUE TO <新表文件名>[FIELDS <字段名表>]
3,复合索引文件的建立
(1)命令方式命令格式:INDEX ON <关键字表达式> TAG<索引标识符> [OF<索引文件名>][FOR<条件>][ASCENDING/DESCENDING][UNIQUE/CANDINATE][ADDITIVE]
(2)菜单操作利用表设计器建立结构复合索引文件
4,设置主索引文件复合索引文件打开后,其中的索引不会自动设置主索引标识,必须使用命令设置。
命令格式:SET ORDER TO <TAG 索引标识>/<数值表达式>
5,数据表的顺序查找
(1)LOCATE
命令格式:LOCATE [<范围>][FOR/WHILE<条件表达式>]
命令功能:在当前表文件中,查找指定范围内满足条件的记录,并把指针定位到第一个满足条件的记录上。
(2)若要继续查找,则需使用CONTINUE命令。
命令格式:CONTINUE
命令功能:把指针定位到下一条满足条件的记录上。
【实验内容】
将原表学生表的结构和记录复制成XS.DBF,其中只含字段姓名、性别、出生日期、入学成绩字段,显示该表的所有记录。
将原表学生表中所有女同学的记录复制到新表XSCJ.DBF中,并显示该表的记录。
将原表成绩表中2—8条记录中所有课程号为1021的记录复制到新表XSCJ1.DBF中,并显示该表的记录。
打开学生表,将其表结构复制成表文件ABC1.DBF,并显示这个表结构。
在学生表中,按学号、姓名、出生日期、入学成绩建立一个复合索引,其索引标识分别为:SXH、SXM、SCSRQ、SRXCJ,除学号为唯一索引以外,其余的都为普通索引。
打开建立(5)中索引以后的学生表,分别设置其SXH、SXM、SRXCJ为主控索引,并显示表记录,观察表记录的显示情况。
[提示:以下题目是在学生表中操作,假设学生表已经打开。]
7,顺序查找姓名为“林敏”的记录,并显示。
8,查找“李”姓同学的记录,并显示。
9,查找85年出生的同学记录,并显示。
10,查找入学成绩大于480分的男生记录,并显示。
11,查找并显示第2个李姓同学的记录。
12,查找并显示第2个85年出生的同学的记录。
13,查找并显示第2个团员同学记录。
14,查找并显示会计班的男同学记录。
15,查找并显示2至8号记录中金融班的男同学记录。
【高手进阶】
[提示:以下题目是在Xsda表中操作]
1,利用“Xsda”的表结构,建立“Xsda2”的表文件,其中包括“系别”、“学号”、“姓名”和“年龄”4个字段。
2,将姓“张”同学的记录拷贝到“Xsda2”表中,并显示Xsda2 表的记录。
3,查找第一个姓“张”的学生记录,并显示记录内容。使用函数测试记录号为多少。
4,查找下一个姓“张”的学生记录,并显示记录内容。使用函数测试记录号为多少。
5,重复9题中的操作,直到所有姓“张”的学生记录都被找到并显示为止。观察这时
EOF()函数的值是什么。
【综合测试】
[提示:以下题目是在Xsda表中操作]
1,将Xsda表结构复制到表文件名为:“学生”中。
2,把数据表Xsda所有记录的学号、姓名两个字段复制到数据表Xsda1中。
3,把数据表Xsda中所有班级以“101”开头的记录复制到数据表“学生”中。
4,将3号记录以后的“计算机系”的学生记录复制到数据表“学生”中。
5,按入学日期建立复合索引,其索引标识为:SRXRQ,索引类型为侯选索引。
6,设置SRXRQ索引为主控索引,并显示表记录,观察记录号的变化。
7,查找并显示99年入学的第2个学生记录。
8,查找并显示数学系99年入学的所有学生记录。
9,查找并显示数学系99年入学的所有男生记录。
10.查找并显示班级尾数为“04”的第2个男生记录。
【实验过程】
1,将原表学生表的结构和记录复制成XS.DBF,其中只含字段姓名、性别、出生日期、入学成绩字段,显示新表的所有记录。
[操作] USE 学生表
COPY TO XS FIELDS 姓名,性别,出生日期,入学成绩
USE XS
LIST
2,将原表学生表中所有女同学的记录复制到新表XS1.DBF中,并显示新表的记录。
[操作] USE 学生表
COPY TO XS1 FOR 性别="女"
USE XS1
LIST
3,将原表成绩表中2—8条记录中所有课程号为1021的记录复制到新表XSCJ1.DBF中,并显示XSCJ1表中的记录。
[操作] USE 成绩表
GO 2
COPY TO XSCJ1 FOR ALLTRIM(课程号)= "1021” NEXT 7
USE XSCJ1
LIST
4,打开学生表,将其表结构复制成表文件ABC1.DBF,并显示这个表结构。
[操作] USE 学生表
COPY STRUCTURE TO ABC1
USE ABC1
LIST STRUCTURE
5,在学生表中,按学号、姓名、出生日期、入学成绩建立一个复合索引,其索引标识分别为:SXH、SXM、SCSRQ、SRXCJ,除学号为唯一索引以外,其余的都为普通索引。
[操作]
(1)菜单方式建立复合索引文件,步骤如下:
打开学生表,选择“显示”菜单下的“表设计器”菜单项,进入表设计器窗口。在表设计器窗口的索引选项卡下输入各个索引标识名、索引类型及表达式等。如图3-10所示:

图 3-10 建立“学生表”的索引
在表设计器中建立完所需索引后,单击“确定”按钮,弹出询问“是否永久性地更改表结构?”对话框,单击“是”按钮,系统将修改的结构存盘。
(2)命令方式建立复合索引文件
USE 学生表
INDEX ON 学号 TAG SXH UNIQUE
INDEX ON 姓名 TAG SXM
INDEX ON 出生日期 TAG SCSRQ
INDEX ON 入学成绩 TAG SRXCJ
6,打开建立(5)中索引以后的学生表,分别设置其SXH、SXM、SRXCJ为主控索引,并显示表记录,观察表记录的显示情况。
[操作] USE 学生表
LIST
SET ORDER TO SXH
LIST
SET ORDER TO SXM
LIST
SET ORDER TO SRXCJ
LIST
7,顺序查找姓名为“林敏”的记录,并显示。
[操作] LOCATE FOR 姓名="林敏"
DISPLAY
8,查找“李”姓同学的记录,并显示。
[操作] LOCATE FOR LEFT(姓名,2)= "李"
DISPLAY
CONTINUE
DISPLAY
9,查找85年出生的同学记录,并显示。
[操作] LOCATE FOR YEAR(出生日期)=1985
DISPLAY
CONTINUE
DISPLAY
10,查找入学成绩大于480分的男生记录,并显示。
[操作] LOCATE FOR 入学成绩>480 AND 性别="男"
  DISPLAY
CONTINUE
DISPLAY
11,查找并显示第2个李姓同学的记录。
[操作] LOCATE FOR LEFT(姓名,2)="李"
CONTINUE
DISPLAY
12,查找并显示第2个85年出生的同学的记录。
[操作] LOCATE FOR YEAR(出生日期)=1985
CONTINUE
DISPLAY
13,查找并显示第2个团员同学记录。
[操作] LOCATE FOR 团员否
CONTINUE
DISPLAY
14,查找并显示会计班的男同学记录。
[操作] LOCATE FOR 班级="会计"AND 性别="男"
DISPLAY
CONTINUE
DISPLAY
15,查找并显示2至8号记录中金融班的男同学记录。
[操作] GO 2
LOCATE FOR 班级="金融" AND 性别="男" NEXT 7
DISPLAY
CONTINUE
DISPLAY
【高手进阶解答】
[提示:以下题目是在Xsda表中操作]
1,利用“Xsda”的表结构,建立“Xsda2”的表文件,其中包括“系别”、“学号”、“姓名”和“年龄”4个字段。
[操作] USE Xsda
COPY STRUCTURE TO Xsda2 FIELDS 系别,学号,姓名,年龄
2,将Xsda 表中姓“张”同学的记录拷贝到“Xsda2”表中,并显示Xsda2 表的记录。
[操作] USE Xsda
COPY TO Xsda2 FOR LEFT(姓名,2)= "张"
USE Xsda2
LIST
3,查找第一个姓“张”的学生记录,并显示记录内容。使用函数测试记录号为多少。
[操作] USE Xsda
LOCATE FOR LEFT(姓名,2)=”张”
DISPLAY
RECNO()
4,查找下一个姓“张”的学生记录,并显示记录内容。使用函数测试记录号为多少。
在3题命令的基础上,继续在命令窗口中输入:
[操作] CONTINUE
DISPLAY
RECNO()
5,重复4题中的操作,直到所有姓“张”的学生记录都被找到并显示为止。观察这时
EOF()函数的值是什么。
[操作] CONTINUE
DISPLAY
EOF()
【综合测试解答】
[提示:以下题目是在Xsda表中操作,假设Xsda 表已经打开。]
1,将Xsda表结构复制到表文件名为:“学生”中。
[操作] COPY STRUCTURE TO 学生
2,把数据表Xsda所有记录的学号、姓名两个字段复制到数据表Xsda1中。
[操作] COPY TO Xsda1 FIELDS 学号,姓名
3,把数据表Xsda中所有班级以“101”开头的记录复制到数据表“学生”中。
[操作] COPY TO 学生 FOR LEFT(班级,3)="101"
4,将3号记录以后的“计算机系”的学生记录复制到数据表“学生”中。
[操作] GO 3
COPY TO 学生 FOR 性别="计算机" REST 
5,按入学日期建立复合索引,其索引标识为:SRXRQ,索引类型为侯选索引。
[操作] INDEX ON 入学日期 TAG SRXRQ CANDIDATE
6,设置SRXRQ索引为主控索引,并显示表记录,观察记录号的变化。
[操作] SET ORDER TO SRXRQ
LIST
7,查找并显示99年入学的第2个学生记录。
[操作] LOCATE FOR YEAR(入学日期)=1999
CONTINUE
DISPLAY
8,查找并显示数学系99年入学的所有学生记录。
[操作] LOCATE FOR YEAR(入学日期)=1999 AND 系别="数学系"
DISPLAY
CONTINUE
DISPLAY
9,查找并显示数学系99年入学的所有男生记录。
[操作] LOCATE FOR YEAR(入学日期)=1999 AND 系别="数学系"AND 性别="男"
DISPLAY
CONTINUE
DISPLAY
10,查找并显示班级尾数为“04”的第2个男生记录。
[操作] LOCATE FOR RIGHT(班级,2)="04"AND 性别="男"
  CONTINUE
DISPLAY
练习五 表的统计与计算
【实验目的】
1.熟练掌握表的计算
2.熟练掌握统计汇总的命令:记录个数(COUNT),数值字段求和(SUM),数值字段
求平均(AVERAGE),分类汇总(TOTAL),多功能计算命令(CALCULATE)
【知识要点】
数据表的运算
1.统计记录个数格式:COUNT [范围][FOR 条件式][TO 内存变量]
功能:用于统计当前表中指定范围内满足条件的记录个数说明:
(1)若无<范围>和 FOR/WHILE <条件>,则默认计算所有记录的个数。
(2)TO <内存变量>,则可将统计结果保存在内存变量中,否则结果只显示在屏幕上。
2.数值字段求和格式:SUM [字段表达式表] [范围] [FOR 条件式] [TO 内存变量表]
功能:对指定范围内、满足条件的记录,对指定数值型表达式按列分别求和说明:
(1)缺省范围、条件表示对全部记录统计。
(2)缺省数值型字段表达式表,表示对表中所有数值型字段求和。
(3)数值型字段表达式表的个数应与内存变量的个数一致。
3.数值字段求平均值格式:AVERAGE [字段表达式表] [范围] [FOR 条件式] [TO 内存变量表]
功能:对指定范围内、满足条件的记录,对指定的数值型字段计算平均值说明:
(1)缺省范围、条件表示对全部记录操作。
(2)缺省数值型字段表达式表,表示对当前表中所有数值型字段求平均值。
(3)数值型字段表达式的个数应与内存变量的个数一致。
4.分类汇总格式:TOTAL ON 关键字 TO 新文件名 [范围] [FIELDS 字段名表] [FOR 条件式]
功能:按关键字段对当前表文件的数值型字段进行分类汇总,形成一个新的表文件说明:
(1)按关键字段对当前表文件分类汇总,形成一个新的数据表文件。即将与关键字相同的记录汇总成一条记录,该记录中指定的数值字段的值为各条同类记录的值之和,其余字段的值为同类记录中第一条记录的值。
(2) 当前表必须按关键字进行排序或索引。
补充:多功能计算命令格式:CALCULATE 表达式表 [范围] [FOR 条件式] [TO 内存变量表]
功能:对当前表文件中指定范围内、满足条件的记录,进行指定的计算工作说明:表达式表可以是下列函数的任意组合:
函数名
功能
说 明
AVG(expN)
计算平均值
expN为N型表达式
CNT()
统计记录个数
统计满足条件的记录个数
MAX(expr)
求最大值
expr为N、C或D型表达式
MIN(expr)
求最小值
expr为N、C或D型表达式
SUM(expN)
求和
expN为N型表达式
VAR(expN)
计算均方差
expN为N型表达式
STD(expN)
计算标准偏差
expN为N型表达式
【实验内容】
数据表的运算:
1.统计记录个数,
(1)在Xsda表中统计女生的人数
(2)统计成绩表中成绩优秀(>85分)的学生人数
(3)统计Xsda表中数学系的学生人数
(4)统计Xscj表中总分在450以上(含450分)的人数
2.数值字段求和
(1)对成绩表中的数值字段(成绩)求和
(2)对学生表中,求计算班的入学成绩之和
(3)统计成绩表中课程号为‘2011’的总分
(4)统计Xscj表中计算机的总分
3.数值字段求平均值
(1)对成绩表中的数值字段(成绩)求平均值
(2)统计学生表中团员的入学平均成绩和人数
(3)统计Xscj表中高数的平均成绩
(4)统计Xscj表中总分的平均分
4.分类汇总(要先建索引,再对索引关键字分类汇总)
(1)按班级,对学生表进行汇总统计入学成绩,把结果存入Bmgz 表
(2)统计成绩表中各课程的分数之和,存入Cj表并显示结果
(3)统计 Sell表中同一中商品的销售金额,存入Je表中并显示结果
5.综合练习:
(1)在Xscj表表中,统计英语的总分和平均分,每个人的总分(总成绩)和平均分
(2)在Xsda表中统计各系的学生人数,存入XB表并显示注:学号第5、6位数是系代码;并先在Xsda中添加一个新的数值型字段‘人数’
【高手进阶】
多功能计算
1.对学生表,计算入学成绩的最大值、最小值、平均值、总和
2.统计成绩表中学号为‘05011001’的学生平均成绩、最高分、最低分
3.统计成绩表中课程号为‘1021’的最大值、最小值、平均值、总分
【自我测试】
统计Xscj表中,各课成绩的平均分,并且统计出学生五课成绩的平均在80分以上的,并显示这些记录.
【实验过程】
数据表的运算:
1.统计记录个数,
(1)在Xsda表中统计女生的人数
[操作] USE Xsda
COUNT FOR 性别='女' TO CC
CC
(2)统计成绩表中成绩优秀(>85分)的学生人数
[操作]USE 成绩表
COUNT FOR 成绩>85 TO Cj
Cj
(3)统计Xsda表中数学系的学生人数
[操作]USE xsda
COUNT FOR 系别 = '数学系' TO Ab
Ab
(4)统计Xscj表中总分在450以上(含450分)的人数
[操作]USE Xscj
COUNT FOR 总分>=450 TO a
a
2.数值字段求和
(1)对成绩表中的数值字段(成绩)求和
[操作]USE 成绩表
SUM 成绩 TO Fs
Fs
(2)对学生表中,求计算班的入学成绩之和
[操作]USE 学生表
SUM 入学成绩 FOR 班级 = '计算机'
(3)统计成绩表中课程号为‘2011’的总分
[操作]USE 成绩表
SUM 成绩 FOR 课程号='2011'
(4)统计Xscj表中计算机的总分
[操作]USE Xscj
SUM 计算机 TO ABC
ABC
3.数值字段求平均值
(1)对成绩表中的数值字段(成绩)求平均值
[操作]USE 成绩表
AVERAGE 成绩
(2)统计学生表中团员的入学平均成绩和人数
[操作]USE 学生表
AVERAGE 入学成绩 FOR 团员否 TO A && 或:团员否=.T,
COUNT FOR 团员否 TO B && 或,团员否=.T,
A,B
(3)统计Xscj表中高数的平均成绩
[操作]USE Xscj
AVERAGE 高数 TO C
C
(4)统计Xscj表中总分的平均分
[操作]USE Xscj
AVERAGE 总分 TO A
A
4.分类汇总(要先建索引,再对索引关键字分类汇总)
(1)按班级,对学生表进行汇总统计入学成绩,把结果存入Bmgz 表
[操作]USE 学生表
INDEX ON 班级 TAG Bj
TOTAL ON 班级 TO Bmgz FIELDS 入学成绩
USE Bmgz
LIST
(2)统计成绩表中各课程的分数之和,存入Cj表并显示结果
[操作]USE 成绩表
INDEX ON 课程号 TAG Kch
TOTAL ON 课程号 TO Cj FIELDS 成绩
USE Cj
LIST
(3)统计 Sell表中同一中商品的销售金额,存入Je表中并显示结果
[操作]USE sell
INDEX ON 商品代码 TAG SPDM
TOTAL ON 商品代码 TO Je
USE Je
LIST
5.综合练习:
(1)在Xscj表表中,统计英语的总分和平均分,每个人的总分(总成绩)和平均分
[操作]USE Xscj
SUM 英语 TO F1
AVERAGE 英语 TO F2
REPLACE ALL 总分 WITH 高数+大语+邓论+英语+计算机
REPLACE ALL 平均 WITH 总分/5
F1,F2
总分,平均
注意:这两个总分和平均分是不同的,英语是对字段计算(按列),而每个人的是对每条记录计算(按行)。它们所用的命令是完全不同的。
(2)在Xsda表中统计各系的学生人数,存入XB表并显示注:学号第5、6位数是系代码;并先在Xsda中添加一个新的数值型字段‘人数’
[操作]USE Xsda
INDEX ON 学号TAG FF
TOTAL ON SUBSTR(学号,5,2) TO XB FIELDS 人数
USE XB
BROWSE FIELDS 学号,人数
【高手进阶解答】
多功能计算
1.对学生表,计算入学成绩的最大值、最小值、平均值、总和
[操作]USE 学生表
CALCULATE MAX(入学成绩),MIN(入学成绩),AVG(入学成绩),SUM(入学成绩)
2.统计成绩表中学号为‘05011001’的学生平均成绩、最高分、最低分
[操作]USE 成绩表
CALCULATE MAX(成绩),MIN(成绩),AVG(成绩) FOR 学号='05011001'
3.统计成绩表中课程号为‘1021’的最大值、最小值、平均值、总分
[操作]USE 成绩表
CALCULATE MAX(成绩),MIN(成绩),AVG(成绩),SUM(成绩)FOR 课程号='1021'
【自我测试解答】
统计Xscj表中,各课成绩的平均分,并且统计出学生五课成绩的平均在80分以上的,并显示这些记录.
[操作]USE Xscj
AVERAGE 高数,大语,邓论,英语,计算机 TO A1,A2,A3,A4,A5
A1,A2,A3,A4,A5
INDEX ON 学号 TO xh
TOTAL ON 学号 TO ZG FOR 平均>80
USE zg
BROWSE
LIST
或:
USE Xscj
CALCULATE AVG(高数),AVG(大语),AVG(邓论),AVG(英语),AVG(计算机)
INDEX ON 学号 TO XH
TOTAL ON 学号 TO ZG FOR 平均>80
USE ZG
BROWSE
LIST
练习六 表的关联
【实验目的】
1.练掌握选择工作区以及使用工作区的方法;
2.熟练掌握建立多表关联的方法。
【知识要点】
一、多表操作
1.工作区的概念
(1)计算机内存中存放数据库数据的特定区域叫工作区。VFP可打开32767个工作区;
(2)每个工作区可打开一个表。某一时刻只有一个为当前工作区,所有命令都对当前工作区有效,允许在不同的工作区最多同时打开255个表;
(3)每个工作区中打开的表,各有其自己的记录指针。在当前工作区中可访问其它区中表的记录(用“别名->字段名”或“别名.字段名”或“字母区号->字段名”或“字母区号.字段名”的格式来表示),但不能改变其数据;
(4)通常用工作区号或区中表的别名来标识工作区。
工作区的表示有3种方法:
数字表示:用数字1,2,3,……32767表示
字母表示:用字母A,B,C……J,W11,W12……W32767表示
别名表示:在某工作区打开表时指定了别名,那么该别名就可以表示该工作区了。
(5)0号工作区是尚未使用的工作区号中最小的一个
2.为表选择工作区:(在指定的工作区中打开表)
(1)(“窗口∕数据工作期”)“打开”钮-选择自由表)
(2)SELECT 工作区号
USE 表名
3.指定当前工作区:(此时可能还未打开表文件)
(1)(“窗口/数据工作期”)在“别名”框中,单击工作区别名
(2)SELECT <工作区号>∕<别名>
二、在表间创建关联
1.作用:
关联是一种链接。它允许用户不仅从当前表中访问数据,而且还可访问其它表中的相关记录的数据,而不必在其它表中进行明显地指针移动。
父表:是一对一或一对多的表关系中的主表,父表中记录指针移动将导致子表中的记录指针随之而动。
子表:是一对一或一对多表关系中的相关表或受控表,记录指针的移动,受父表的控制。
2.条件:
父表和子表通常要有相同的字段(叫“关键字段”),且对此字段建立索引。父表一般为主索引(或侯选索引),子表为主索引(或侯选索引)时,建立“一对一”关联,为普通索引时,可建立“一对多”关联
3.建立临时关联:(当关闭一个表时,关联会自动撤销)
(1),一对一”关联先认定父表和子表,并在不同工作区打开(父表为当前工作区中的表),子表要按关键字段建立索引,并设为主控索引。 建立方法有下列两种:
用“数据工作期”:
(“窗口/ 数据工作期”)“别名”框中选定父表-“关系”钮(将父表添加到“关系”框)-单击“别名”框中子表名-(进入“表达式生成器”)双击主控关键字段名-“确定”
用命令:
SET RELATION TO 关键字表达式 INTO 子工作区号∕子表别名
【实验内容】
一、在数据工作期中,为书店和书库两表的选择工作区,并建立临时关联。
二、用命令建立以下的临时关联,并完成下面的操作。
1.在不同的工作区打开成绩表和学生表,并设置学生表为当前的工作区
2.从学生表和成绩表中查询学生记录,并显示学生的学号,姓名,课程号,成绩
3.从学生表和成绩表中查询成绩不及格的学生姓名、课程号、成绩
4.从Xsda和Xscj表中,计算出每个同学的总分,并显示出计算机系的学生的学号、姓名、计算机成绩和总分。
5.在商品月库存表(Stockll.dbf)和销售明细表(Sell.dbf),计算出营业员的销售总额,并显示营业员方虹本月销售商品、姓名,日期,销售数量,销售金额
【高手进阶】
从Xsda和Xscj表中,计算出每个同学的五课平均分,若平均分在85分以上的将等级字段设置成“优秀”,并显示出他们的学号、姓名、系别、平均分、等级。
【自我测试】
从学生表和成绩表中,查找学号为“05011001”的学生,若是团员,入学成绩加5分,并显示其姓名、入学成绩、团员否、所选的课程。
【实验过程】
一、在“数据工作期”中,为书店和书库两表建立临时关联。
[操作]
1.打开“窗口”菜单,选择“数据工作期”,出现“数据工作期”窗口
 
2.在“打开”选项中,选择要打开书店表。

3.然后点击“属性”对话框中的修改,设置书店表的索引。

4.在“打开”选项中,选择要打开书库表。
5.单击“关系”选项框,书库表就加进关系选项框中

6.在单击书店表,出现一个表达式生成器设置关联条件。

7.关联条件“学号”设置完成,单击“确定”。

8.关联设置完成。
9.由上图可以看出当选中书店表时,工作区为1,当选中书库表时,工作区为2。
二、用命令建立以下的临时关联,并完成下面的操作。
1.不同的工作区打开成绩表和学生表,并设置学生表为当前的工作区
[操作]SELECT 1 或:SELECT 1
USE 成绩表 USE 学生表
SELECT 2 SELECT 2
USE 学生表 USE 成绩表
SELECT 1
2.从学生表和成绩表中查询学生记录,并显示学生的学号、姓名、课程号、成绩
[操作]SELECT 1
USE 成绩表
INDEX ON 学号 TAG XH
SELECT 2
USE 学生表
SET RELATION TO 学号 INTO A
LIST 学号,姓名,A.课程号,A.成绩
CLOSE ALL
RETURN
3.从学生表和成绩表中查询成绩不及格的学生姓名、课程号、成绩
[操作]SELECT 1
USE 学生表
INDEX ON 学号 TAG XH
SELECT 2
USE 成绩表
SET RELATION TO 学号 INTO A
LIST A.姓名,课程号,成绩 FOR 成绩<60
CLOSE ALL
RETURN
4.从Xsda和Xscj表中,计算出每个同学的总分,并显示出计算机系的学生的学号、姓名、计算机成绩和总分。
[操作]SELECT 1
USE Xsda
INDEX ON 学号 TAG XH
SELECT 2
USE Xscj
SET RELATION TO 学号 INTO A
REPLACE ALL 总分 WITH 高数+大语+邓论+英语+计算机
LIST FIELDS 学号,A.姓名,计算机,总分 FOR A.系别=“计算机系”
CLOSE ALL
RETURN
5.商品月库存表(Stockll.dbf)和销售明细表(Sell.dbf)计算出营业员的销售总额,并显示营业员方虹本月销售商品、姓名、日期、销售数量、销售金额
[操作]SET TALK OFF
CLEAR
SELECT 1
USE Stockll
INDEX ON 商品代码 TO SP
SELECT 2
USE Sell
SET RELATION TO 商品代码 INTO A
REPLACE 销售金额 WITH A->单价*销售数量 ALL
LIST 营业员,日期,A->品名,销售数量,销售金额 FOR 营业员 =“方虹”
RETURN
【高手进阶解答】
从Xsda和Xscj表中,计算出每个同学的五课平均分,若平均分在85分以上的将等级字段设置成“优秀”,并显示出他们的学号、姓名、系别、平均分、等级。
[操作]SET TALK OFF
SELECT 1
USE Xsda
INDEX ON 学号 TAG XH
SELECT 2
USE Xscj
SET RELATION TO 学号 INTO A
REPLACE ALL 平均 WITH 总分/5
REPLACE ALL 等级 WITH,优秀” FOR 平均>85
LIST FOR 平均>85 FIELDS 学号,A.姓名,A.系别,平均,等级
CLOSE ALL
RETURN
【自我测试解答】
从学生表和成绩表中,查找学号为“05011001”的学生,若是团员,入学成绩加5分,并显示其姓名、入学成绩、团员否、所选的课程。
[操作] SET TALK OFF
SELECT 1
USE 学生表
INDEX ON 学号 TAG XH
REPLACE 入学成绩 WITH 入学成绩+5 ;
FOR 团员否 AND 学号=“05011001”
SELECT 2
USE 成绩表
SET RELATION TO 学号 INTO A
LIST FOR 学号=“05011001” A.姓名,A.入学成绩,A.团员否,课程号
CLOSE ALL
RETURN
练习七 数据库表基本操作
【实验目的】
1.熟练掌握建立数据库和打开数据库的操作;
2.熟练掌握在数据库中添加和删除表;
3.熟练掌握建立表的一对一,一对多的永久关系。
【知识要点】
一、数据库
1.创建数据库(进入“数据库设计器”)
(1)“文件/新建”-(类型)选“数据库”-“新建文件”钮-输入库名并确定存放位置
(2)CREATE DATABASE <数据库名>
2.打开、关闭、删除数据库,
(1)打开数据库(进入“数据库设计器”)
① 刚建的数据库,一定是打开的
②“文件/打开”-(类型)选“数据库”-选定数据库 -确定“独占”方式
③ OPEN DATABASE <数据库名>
(2)关闭数据库
① 单击右上角的“关闭”钮
② CLOSE DATABASE [关闭当前打开的数据库]
(3)删除数据库
DELETE DATABASE
3.数据库基本操作(以下操作均要先打开数据库)
(1)“新建”表:(在某数据库中新建表)
①(使用“数据库设计器”的“工具箱”)“新建表”-“新建表”- 确定表名及存放位置
②(“数据库设计器”)“文件/新建”-(“类型”)选“表”-“新建文件”钮-确定表名及存放位置
③(“数据库设计器”),数据库/新建表”-“新建表”钮-确定表名及存放位置
④(“数据库设计器”)CREATE <表名>
⑤ 右击“数据库设计器”-“新建表”
(2)“添加”表:(在某数据库中添加自由表)
①(使用“数据库设计器”的“工具箱”)“添加”钮-选定表-“确定”
②(“数据库设计器”)“数据库/添加表” -选定表-“确定”
③ 命令格式:ADD TABLE [自由表名/?]
(3)“移出”表和“删除”表
移出表:将数据库表移出,变成自由表删除表:从磁盘上删除表
①(使用“数据库设计器”的“工具箱”)“移出”或“删除”钮-选定表-“确定”
②(“数据库设计器”)“数据库/移出或删除表” -选定表-“确定”
③ 命令格式:
移出:REMOVE TABLE [表名/?]
删除:DROP TABLE[表名/?]
二、建立表与表的一对一、一对多永久关系条件:对关键字段(父表和子表都有的相同字段),父表建主索引(或侯选索引),子表可为普通索引,且设为主控索引。父表和子表必须是数据库中的表。
建立方法:(“数据库设计器”中)将父表中主索引名拖到子表对应索引名上。[子表为主索引(或侯选索引)时,建立“一对一”关联,为普通索引时,可建立“一对多”关联]
临时关联
永久关联
条件:
对关键字段
父表和子表都要有一个相同的字段,叫关键字段
父表可不建索引;
子表建立索引,并设为主控索引
父表建主索引(或侯选索引);
子表可建普通索引,且设为主控索引
表来源
自由表或数据库中的表
数据库中的表
建立方法
1.用命令:SET RELATION
2.用“数据工作期”
用鼠标拖(只能在数据库中建)
不同处
可控制表中记录指针的关系
不可控制记录指针。可在查询或视图设计器中成默认连接条件
【实验内容】
一﹑数据库的操作
1.建立一个以学生档案为名的数据库,并建立名为学生成绩表和学生档案表的两个表。
2.将Xsda和Xscj两表添加到学生档案数据库中,将学生成绩表移出学生档案数据库并将学生档案表从该数据库中删除。
二﹑建立表间一对一、一对多的关系
1.建立“图书管理”数据库,将两个自由表“书库”和“书店”添加到其中,设“书库”为父表,“书店”为子表,建立一对一的关系,再用命令方式建临时关系。
2.将Xsda和Xscj表添加到学生管理数据库中,并建立一对多的关系,再用命令方式建临时关系。
【高手进阶】
对Xsda和Xscj表,编写程序PROG1.PRG。其功能是,
1.统计计算机系的高数总分、平均分、最高分和最低分;
2.并按如下格式显示:
系名 高数总分 高数平均分 高数最高分 高数最低分
…… …… …… …… ……
【自我测试】
将学生表和成绩表添加到学生数据库中,并建立永久关系,再用命令方式建临时关系。
【实验过程】
一﹑数据库的操作
1.一个以学生档案为名的数据库,并建立名为学生成绩表和学生档案表的两个表。
[操作]
(1)建立数据库的方法一:“文件”—“新建”(类型选“数据库”)—“新建文件”—保存名为“学生档案”,就会出现数据库设计器的对话框。如下图:
 
 
方法二:用命令建立数据库:
CREATE DATABASE 学生档案
(2)建表:随意建两个字段,不输入记录,几秒钟搞定建立表的方法一:用数据库设计器的新建按纽。
建立表的方法二:“数据库”—“新建表”。
建立表的方法三:用命令建立,CREATE 表名
2,将Xsda和Xscj两表添加到学生档案数据库中,将学生成绩表移出学生档案数据库并将学生档案表从该数据库中删除。
[操作]
(1)添加表方法一:用菜单操作,用单击数据库设计器中的添加按钮,然后选中要添加的表,再“确定”即可。如下图:
添加表方法二:用命令的方式,先打开该数据库然后用添加命令
OPEN DATABASE 学生档案
ADD TABLE Xsda
ADD TABLE Xscj
 
(2)移去表的方法一:选中要移出的表,然后用数据库设计器中的移出按钮,然后单击“移去”—“确定”即可。如下图:
移去表的方法二:REMOVE TABLE 学生成绩表


(3)删除表的方法一:选中要删除的表,然后用数据库设计器中的移出按钮,然后单击“删除”—“确定”即可。如下图:
删除表的方法二:DROP TABLE 学生档案表

二﹑建立表间一对一、一对多的关系
1.建立“图书管理”数据库,将两个自由表“书库”和“书店”添加到其中,设“书库”为父表,“书店”为子表,建立一对一的关系,再用命令方式建临时关系。
[操作]
(1)建立一个名为图书管理的数据库,打开数据库设计器,如下图:
(2)将书店表和书库表添加到数据库中,如图:

(3)对书库和书店两数据表,按“书号”字段建主索引。选中书库表并右击,在弹出的快捷菜单中选择“修改”选项,进入“表设计器”窗口,选择“索引”标签,设置“书号”为主索引,如图:用相同的方法为书店表按“书号”建立主索引。
(4) 两个数据表建立索引之后的“数据库设计器”窗口内容如图所示

(5)激活父表中的主索引字段,然后单击并拖至与其建立关联的子表中的对应字段处,再松开鼠标左键,数据库中的两个表之间就多了一条“连线”,其一对一关系就建成了,如图所示。

若用命令的方法建立临时关系,如下:
SELECT 1
USE 书店
INDEX ON 书号 TAG SH
SELECT 2
USE 书库
SET RELATION TO 书号 INTO A
RETURN
2.将Xsda和Xscj表添加到学生管理数据库中,并建立一对多的关系,再用命令方式建临时关系。
[操作](1)建立一个名为学生管理的数据库,打开数据库设计器,如下图:

(2)将Xsda和Xscj表添加到数据库中,如图

(3)在两个表中,确定Xsda为子表,Xscj为父表,按“学号”字段建主索引。选中Xscj表并右击,在弹出的快捷菜单中选择“修改”选项,进入“表设计器”窗口,选择“索引”标签,设置“学号”为主索引,如下图。用相同的方法为Xsda按“学号”建立普通索引。
(4) 两个数据表建立索引之后的“数据库设计器”窗口内容如图所示

(5)激活父表中的主索引字段,然后单击并拖至与其建立关联的子表中的对应字段处,再松开鼠标左键,数据库中的两个表之间就多了一条“连线”,其一对多关系就建成了,如下图。

若用命令建立两表的临时关系,命令如下:
SELECT 1
USE Xsda
INDEX ON 学号 TAG XH
SELECT 2
USE Xscj
SET RELATION TO 学号 INTO A
RETURN
【高手进阶解答】
对Xsda和Xscj表,编写程序PROG1.PRG。其功能是,
1.统计计算机系的高数总分、平均分、最高分和最低分;
2.并按如下格式显示:
系名 高数总分 高数平均分 高数最高分 高数最低分
…… …… …… …… ……
[操作]
SET TALK OFF
SET SAFETY OFF
CLEAR
SELECT 1
USE XSDA
INDEX ON 学号 TO XH
SELECT 2
USE XSCJ
SET RELATION TO 学号 INTO A
CALCULATE SUM(高数),AVG(高数),MAX(高数),MIN(高数);
FOR A.系别 = "计算机系" TO A1,A2,A3,A4
" 系名 高数总分 高数平均分 高数最高分 高数最低分"
"计算机系",A1,A2,A3,A4
SET TALK ON
RETURN
【自我测试解答】
将学生表和成绩表添加到学生数据库中,并建立永久关系,再用命令方式建临时关系。
[操作]
1.(1)建立一个名为“学生”的数据库,打开数据库设计器;
(2)将学生表和成绩表表添加到学生数据库中;
(3)在两个表中,确定学生表为父表,成绩表为子表,按“学号”字段建索引(父表为主索引,子表可为普通索引)。
(4)将父表中的主索引标记拖至子表中的对应索引处,永久关系就建成了。
2.用命令建立两表的临时关系,命令如下:
SELECT 1
USE 成绩表
INDEX ON 学号 TAG XH
SELECT 2
USE 学生表
SET RELATION TO 学号 INTO A
RETURN