Visual FoxPro 程序设计案例教程上机实训指导
主 编:梁 爽 何贤芳副主编:宋 华 张俊芳
杨 菲 康立权主 审:陶桂义

前 言
为认真落实我院“737355”人才培养模式,彻底贯彻执行以综合素质为核心,以能力为本位,以高技能应用型人才培养为目标的教改思路。我“计算机基础教研室”编辑了这本《Visual FoxPro 程序设计案例教程上机实训指导》,本书共分两部分。
第一部分 Visual FoxPro 程序设计实训指导,共包括八章26个上机实训指导,每个实训中都有具体的实训目的、知识要点、实训内容及实训过程。对于学生中水平较高的一部分同学,我们专门编制了高手进阶,让他们能在实际操作中一展风采。每个实训的最后都有一个自我测试,让学生自己检查一下对该实训的掌握情况,以提高和增强对Visual FoxPro学习的积极性。
第二部分 计算机等级二级考试(数据库)复习资料,共分笔试和上机两个内容。我们根据《重庆市计算机等级考试大纲(Visual FoxPro 程序设计部分)》的要求,参考历年二级考试试题编制而成。
本书在内容的选择、结构的编排上进行了精心的组织,重点突出实用性和操作性,力求结合学生实际和工作需要。争取学生通过七个月的实训操作后能初步掌握Visual FoxPro 程序设计的基本内容,而在三个月实训和今后的工作中能独立解决实际工作中遇到的具体问题。本书的二级考试复习资料进行了精心设计,力求使我校学生二级考试的过关率有大幅度的提升。
本书实训指导部分的第二、三章由宋华和张俊芳编写;第四章由陶桂义编写;第五、六章由梁爽编写;第七章由杨菲编写;第八、九章由康立权编写;计算机二级考试复习资料由何贤芳编写。
在本书的编写过程中,自始自终得到了学院领导的精心指导,特别是谭俊、付世平、陈长亮处长仔细审阅了全部书稿,并提出了许多宝贵意见,在此表示衷心的感谢。同时还要感谢常世晓和魏军等老师的大力支持和帮助。
计算机基础教研室
2007年5月28日

目 录第一部分 Visual FoxPro程序设计上机实训第1章 数据库基础知识(无)
第2章 Visual FoxPro 6.0基础知识
练习一 VFP6基础操作 …………………………………………………………… 1
第3章 数据库和表的设计与操作
练习一 数据表基本操作 …………………………………………………………… 8
练习二 记录的显示与定位 ………………………………………………………… 17
练习三 记录的修改与删除 ……………………………………………………… 22
练习四 索引与查找 ……………………………………………………………… 29
练习五 表的统计与计算 ………………………………………………………… 35
练习六 表的关联 ………………………………………………………………… 40
练习七 数据库基本操作 ………………………………………………………… 46
第4章 视图、查询与SQL语句
练习一 视图与查询 ……………………………………………………………… 56
练习二 SQL查询功能(一)……………………………………………………… 66
练习三 SQL查询功能(二)……………………………………………………… 74
练习四 SQL定义功能 …………………………………………………………… 81
练习五 SQL操纵功能 …………………………………………………………… 87
第5章 项目管理器的使用练习一 项目管理器基本操作……………………………………………………… 97
第6章 Visual FoxPro程序设计练习一 程序文件的建立…………………………………………………………… 99
练习二 程序基本结构:分支结构(一)………………………………………… 103
练习三 程序基本结构:分支结构(二)………………………………………… 108
练习四 程序基本结构:循环结构(一)………………………………………… 112
练习五 程序基本结构:循环结构(二)………………………………………… 116
练习六 程序基本结构:循环结构(三)………………………………………… 121
练习七 程序基本结构:循环结构(四)………………………………………… 125
第7章 表单设计与应用练习一 创建和管理表单与标签控件 …………………………………………… 129
练习二 常用控件:命令按钮、命令按钮组、文本框 ………………………… 137
练习三 常用控件:编辑框、复选框、选项组、计时器、图像………………… 148
练习四 常用控件:微调、页框、列表框、组合框、表格……………………… 156
第8章 菜单设计、消息栏和工具栏练习一 菜单设计基本操作 ……………………………………………………… 165
第9章 报表与标签练习一 报表与标签基本操作 …………………………………………………… 171
第二部分 计算机VF二级考试上机复习资料
第一套上机复习题 ………………………………………………………………… 179
第二套上机复习题 ………………………………………………………………… 181
第三套上机复习题 ………………………………………………………………… 183
第四套上机复习题 ………………………………………………………………… 186
第五套上机复习题 ………………………………………………………………… 188
第六套上机复习题 ………………………………………………………………… 191
第七套上机复习题 ………………………………………………………………… 194
第八套上机复习题 ………………………………………………………………… 197
第九套上机复习题 ………………………………………………………………… 199
第十套上机复习题 ………………………………………………………………… 202
第三部分 计算机VF二级考试理论复习资料
(一)基础知识复习第一部分 基础概念和基础知识 ………………………………………………… 205
第二部分 数据表及其基本操作 ………………………………………………… 208
第三部分 函数及基本操作 ……………………………………………………… 218
第四部分 程序阅读基础知识 …………………………………………………… 220
第五部分 程序填空基础知识 ……………………………………………………… 230
第六部分 程序设计基础知识 ……………………………………………………… 237
第七部分 表单基础知识 …………………………………………………………… 246
(二)综合测试练习第一套 理论复习题 ………………………………………………………………… 257
第二套 理论复习题………………………………………………………………… 264
第三套 理论复习题………………………………………………………………… 272
第四套 理论复习题………………………………………………………………… 280
第五套 理论复习题………………………………………………………………… 285
第一部分 Visual FoxPro 程序设计上机实训部分
第2章 Visual FoxPro 6.0基础知识练习一 VFP基本操作
【实验目的】
熟练掌握VFP启动、关闭;
熟练掌握内存变量的赋值、显示;
掌握运算符和表达式的用法;
熟练掌握常用函数使用。
【知识要点】
 一、启动VFP系统用三种方法练习启动VFP系统
 二、关闭VFP系统用四种方法练习关闭VFP系统
三、变量的赋值
1.赋值格式格式1:STORE 表达式 TO内存变量名清单格式2:内存变量名=表达式
2.表达式的显示
格式1:?[表达式清单] (若无表达式清单,则会输出一个换行符,若指定表达式清单,
则在下一行起始处输出表达式值)
格式2,表达式清单 (在当前的光标所在出直接输出表达式的值)
 四、日期格式设置与操作
1.将系统日期设为“yyyy-mm-dd”格式
SET CENTURY ON && 设置年份为4位数
SET MARK TO,-” && 设置日期分隔符为:-
SET DATE TO YMD && 设置为“年/月/日”格式
2.求当前系统的年份、月份、日期、星期、时间
YEAR(DATE()) && 求当前的年份
MONTH(DATE()) && 求当前的月份
DAY(DATE()) && 求当前的日期五、运算符和表达式的操作
1.算术运算符:**或^(乘方)、%(求余)、*(乘)、/(除)、+(加)、-(减)
2,字符运算符,+ 将两个字符型数据连接起来
- 将前一字符型数据尾部空格移到后一个字符型数据后,在连接
$ 格式为:串1$串2,若串1包含于串2中,则结果为.t.,否则为.f.
3.日期型运算符,+、-
日期 + 整数:为增加整数天后的日期
日期 - 整数:为减少整数天后的日期
日期 - 日期:为两日期间的天数
4.关系运算符:>(大于)、<(小于)、>=(大于等于)、<=(小于等于)、
#或!=或<>(不等于)、=(等于)、==(全等于)
5,逻辑运算符:not(逻辑非),and(逻辑与),or(逻辑或)
运算符的优先级:
先执行算术运算、字符运算和日期运算,再执行关系运算,最后执行逻辑运算。
六、函数的应用
熟悉最常用的函数
【实验内容】
一﹑启动Visual FoxPro系统,并熟悉其环境二﹑关闭Visual FoxPro系统三﹑变量的的操作在命令窗口定义下列内存变量,并赋值,变量名和值如下表所示:
变量名
值的类型
值
A1
字符型
‘中国’
A2
货币型
$123.4500
B1
日期型
2007年3月26日
B2
数值型
123.4500
ABC
逻辑型
逻辑真
数组B(2,3)
分别为1,‘2’,.t.,$12.45,当天日期
C2
日期时间型
2004年1月23日15点30分30秒
四、运算符及表达式的操作,进行下列各种运算
1.2的3次方
2.“计算机,+“世界”;
3.“计算机,-“世界”;
4.“计算机,+,世界”;
5.“计算机,-,世界”
6.“计算机”$“计算机世界”
7.“计算机世界”$“计算机”
8.“123.45”>“21.50”
9.“Abcd”<“Abed”
10.系统日期减你的生日,计算你来到世界上有多少天?
11.系统日期加52,计算52天后是几月几日?
12.“abcd”=“Abcd” and,计算机”$“计算机世界”
五、写出下列式子在VFP中的表达式
1.A+B÷(C+D)
2.(-a)2b3+3mn
3.姓名为“张三”或“李四”
4.年龄在20至35岁的
5.年龄小于20岁和大于35岁的
6.出生日期在85年1月1日以前的
六、函数应用
  1.|-12.30|,ln5,求25的平方根,求45与62的最大值,
2,?ROUND(337.2007,3)
3,?LEN(“THIS IS MY BOOK”)
4,? Y = DATE()
5,? ABS(-3.2) > MAX(-11,23.2)
6,? MOD(22,5) < MIN(-23.2,22)
7,? STR(234.3456,6,2)+“32”
8,AA =“Visual foxpro 6.0”
BB =left(AA,4),CC=SUBSTR(AA,8,3)
BB,CC
【高手进阶】
数组的应用数组是按一定顺序排列的内存变量,数组中的各个变量成为数组元素,数组元素用数组名及该元素在数组中排列位置下标一起表示,下标的个数称为数组的维数。数组一经定义,它的每个元素就有了逻辑初值.f.,可用赋值命令给数组元素赋值。给数组名赋值就相当于给该数组的每个元素赋同一值。
例1.给定两个数组a(2)、b(2,2),分别赋值,然后显示数组变量的值。
a(1)=’abcd’ a(2)=.t.
b(1,1)=’计算机基础’ b(1,2)=‘数据库’ b(2,2)=123
2.函数的使用例2,abc=’共产主义青年团’
left(abc,2)+substr(abc,9,2)+right(abc,2)
例3.y=’hello’
’&y.world’
例4.?mod(12,5),mod(12,-5),mod(-12,5),mod(-12,-5)
例5,设有字符串“Visual foxpro 6.0”,用函数方法将foxpro改为FoxPro
【自我测试】
计算下列表达式的值。
(14%4=2) and (‘abd’>’abc’ or ‘Abc’$’AbdAchd’) or not(‘abc’=’abcd’)
【实验过程】
一、启动Visual FoxPro系统,并熟悉其环境(如右图)
1.双击桌面上的快捷方式图标(要自已建);
2.“开始/程序”中单击“Visual FoxPro 6.0”图标;
3.在“资源管理器”(或“我的电脑”)中双击“Visual FoxPro 6.0”程序图标二、关闭Visual FoxPro系统用下列五种方法中的任一种,练习关闭VFP系统
 1.单击窗口右上角的“关闭”钮;
 2.“文件/退出”;
3.单击窗口左上角的“控制菜单”图标-“关闭”钮;
 4.双击窗口左上角的“控制菜单”图标;
5.Alt+F4
三、变量的的操作
1.在命令窗口定义下列内存变量,并赋值,变量名和值如下表所示:
变量名
值的类型
值
A1
字符型
‘中国’
A2
货币型
$123.4500
B1
日期型
2007年3月26日
B2
数值型
123.4500
ABC
逻辑型
逻辑真
数组B(2,3)
分别为1,‘2’,.f.,$12.45,当天日期
C2
日期时间型
2004年1月23日15点30分30秒
[操作]启动Visual FoxPro 6.0 在命令窗口中输入命令:
A1= '中国' 或,中国” 或 [中国]
A2=$123.4500
B1={^2007/03/26}
B2=123.4500
ABC=.t.
Dimension B(2,3)
B(1,1)=1
B(1,2)=’2’
B(1,3)=.f.
B(2,1)=$12.45
B(2,2)=date()
C2={^2004/01/23 15:30:30}
四、运算符及表达式的操作,进行下列各种运算
1.2的3次方
[操作]在命令窗口输入:2^3 或2**3
2.“计算机,+“世界”
[操作]“计算机 世界”
3.“计算机,-“世界”
[操作]“计算机世界,
4.“计算机,+,世界”
[操作]“计算机 世界,
5.“计算机,-,世界”
[操作]“计算机 世界,
6.“计算机”$“计算机世界”
[操作].t.
7.“计算机世界”$“计算机”
[操作].f.
8.“123.45”>“21.50”
[操作].f.
9.“Abcd”<“Abed”
[操作].t.
10.系统日期减你的生日,计算你来到世界上有多少天?(设生于1983年5月15日)
[操作]?date()-ctod(‘05/15/83’)
11.系统日期加52,计算52天后是几月几日?
[操作]?date()+52
12.“abcd”=“Abcd” and,计算机”$“计算机世界”
[操作].f.
五、写出下列式子在VFP中的表达式
1.A+B÷(C+D)
[操作]A+B/(C+D)
2.(-a)2b3+3mn
[操作](-a)^2*b^5+3*m*n
3.姓名为“张三”或“李四”
[操作]姓名=’张三’ or 姓名=’李四’
4.年龄在20至35岁的
[操作]年龄>=20 AND 年龄<=35
5.年龄小于20岁和大于35岁的
[操作]年龄<20 OR 年龄>35
6.出生日期在85年1月1日以前的
[操作]出生日期<CTOD(“01/01/85”)
六、写出相应的函数和函数的值。
1.用函数表示下列计算式:|-12.30|,ln5,求25的平方根,求45与62的最大值
[解答]abs (-12.30),log(5),sqrt(25),max(45,62)
进行下列函数的运算
2,ROUND(337.2007,3)
[操作]? ROUND(337.2007,3) 结果显示:337.201
3,LEN(“THIS IS MY BOOK”)
[操作]? LEN(“THIS IS MY BOOK”) 结果显示:15
4,Y = DATE()
[操作]Y = DATE() →? Y 结果显示:当前系统日期
5,ABS(-3.2) > MAX(-11,23.2)
[操作]? ABS(-3.2) > MAX(-11,23.2) 结果显示:.F,
6,MOD(22,5) < MIN(-23.2,22)
[操作]? MOD(22,5) < MIN(-23.2,22) 结果显示,.F,
7,STR(234.3456,6,2)+“32”
[操作]? STR(234.3456,6,2)+“32” 结果显示:234.3532
8,AA =“Visual foxpro 6.0”
BB =left(AA,4)
CC=SUBSTR(AA,8,3)
[操作]依次输入上面三句语句后,再输入? BB,CC 结果显示:Visu fox
【高手进阶解答】
例1.定义两个数组a(2)、b(2,2),然后分别赋值,最后显示数组变量的值。
a(1)=’abcd’ a(2)=.t.
b(1,1)=’计算机基础’ b(1,2)=‘数据库’ b(2,2)=123
[解答]dimension a(2),b(2,2)
a(1)='abcd'
a(2)=.t.
b(1,1)= '计算机基础'
b(1,2)='数据库'
b(2,2)=123
a(1),a(2),b(1,1),b(1,2),b(2,1),b(2,2)
显示的结果为:’abcd’,t,’计算机基础’ ‘数据库’,f,123
2.函数的使用要先了解函数的用法。
例2,abc=’共产主义青年团’
left(abc,2)+substr(abc,9,2)+right(abc,2)
[解答]left(表达式,n)是从字符串的左边取长度为n的子串,substr(表达式,n[,m])从字符串表达式中提取从n开始的m个子串,right(表达式,n)就是从字符串右边取n个字符。
显示的结果为:‘共青团’
例3.y=’hello’
’&y.world!’
[解答]&<字符型变量>[.]是宏替换函数,就是将&<字符型变量>[.]换成字符变量的值
显示的结果为:hello world!
例4.?mod(12,5),mod(12,-5),mod(-12,5),mod(-12,-5)
[解答]mod(表达式1,表达式2)就是求表达式1对表达式2的余数。
它的规律是 mod(n,-m)=mod(n,m)-m mod(-n,m)=m-mod(n,m)
mod(-n,-m)=-mod(n,m)
显示的结果为:2 -3 3 -2
例5.设有字符串“Visual foxpro 6.0”,用函数方法将foxpro改为FoxPro
[解答]
AA =“Visual foxpro 6.0” && 赋值
BB = SUBSTR(AA,1,7)+UPPER(SUBSTR(AA,8,1))+SUBSTR(AA,9,2);
+UPPER(SUBSTR(AA,11,1))+SUBSTR(AA,12,6)
&& SUBSTR函数:截取子字符串;UPPER函数:转为大写字母
BB
或:
AA =“Visual foxpro 6.0”
BB = STUFF(AA,8,1,”F”) && STUFF函数:用字串2替换字串1中的一部分
CC = STUFF(BB,11,1,”P”)
CC
【自我测试解答】
计算下列表达式的值。
(14%4=2) and (‘abd’>’abc’ or ‘Abc’$’AbdAchd’) or not(‘abc’=’abcd’)
[解答]显示的结果:.t,(自己分析计算的顺序)
第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-1 书库.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 STRUCTURE
(3)修改表结构:
① 修改学生表的入学成绩字段为入学总分(略)
② 给学生表增加一个年龄字段。
注意:要以独占方式打开表,在“表设计器”中修改。
(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中,显示所有表记录,用函数测试当前记录号。
[操作] 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 出版社 WITH,高等教育出版社” FOR 册数>200 ALL
显示总金额小于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)和成批追加插入记录(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)在数据表学生的末尾追加一条空白记录
(3)将数据表学生中的记录追加到数据表成绩中
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 入学成绩 WITH入学成绩+10
(2)计算机班学生的入学成绩增加10%
[操作] REPLACE 入学成绩 WITH 入学成绩*1.1 FOR 班级=”计算机”
(3)金融班女生的入学成绩增加20分
[操作] REPLACE 入学成绩 WITH 入学成绩+20 FOR班级=”金融”AND 性别=”女”
(4)把会计班改为电子班
[操作] REPLACE 班级 WITH,电子” FOR 班级=”会计”
(5)增加一个字段“年龄”[N型、2],并计算学生的年龄,填入表中
修改表结构,增加字段“年龄”;再用命令:
[操作] REPLACE 年龄 WITH YEAR(DATE()— 出生日期)
(6)所有学生的年龄加10岁
[操作] REPLACE 年龄 WITH 年龄+10 ALL
(7)增加一个字段“籍贯”[N型、10],将所有女生的籍贯填为“重庆”
[操作] 修改表结构,增加字段“籍贯”;再用命令,
REPLACE 籍贯 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
(3)将数据表学生中的记录追加到数据表成绩中
[操作] USE 成绩
APPEND FROM 学生
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 总金额 WITH 单价*库存数量 ALL
3,将诺基亚品牌的手机单价提高15%
[操作] REPLACE 单价 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表示
别名表示:在某工作区打开表时指定了别名,那么就别名就可以表示该工作区了。
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

第4章 视图、查询与SQL语句练习一 视图与查询
【实验目的】
1.使用视图向导创建本地视图
2.利用视图设计器创建视图
3.利用查询向导创建查询
【知识要点】
一、视图
1.视图是观察表记录的一个窗口,使用视图可以将表中一组记录提出来组成一个虚拟表,还可改变这些记录的值,并将更新结果送回原表。
视图依赖于某数据库中的表,只有打开此数据库,才能创建和使用视图。
视图有本地视图和远程视图两类。
2.使用本地视图向导创建本地视图
(1) 执行“工具/向导/全部”命令,在“向导选取”对话框中选择“本地视图向导”。
(2) 打开数据库文件,在“数据库设计器”窗口中执行“新建/视图”命令,单击“向导”按钮,进入“本地视图向导”窗口。
(3)使用本地视图向导
① 从“字段选取”窗口中选定一个表及所需字段,将其添加到“选定字段”框中
② 从“筛选记录”窗口中指定记录输出的条件
③ 从“排序记录”窗口中确定视图中记录显示的顺序
④ 从“限制记录”窗口中选择视图中记录显示的数目
⑤ 单击“完成”钮,输入视图名
3.使用远程视图向导创建远程视图(即用当前数据库之外的数据源建立视图)
调用远程视图向导和创建远程视图的方法与创建本地视图差不多,只是在创建时要先选择有效的数据源,它可以是在机器上注册的ODBC(开放式数据库连接)数据源或用连接设计器设计定义的连接。
4.使用视图设计器创建视图(要先打开一个数据库文件)
(1) 执行“文件/新建/视图”命令,单击“新建文件”按钮,进入“视图设计器”窗口。
① 从“添加表或视图”对话框中选定表(或视图)将其添加到“视图设计器”中。可以通过“其它”钮,选择自由表。
②“联接”选项(联接两个表):
若添加了两个表,系统会自动给出两表相应字段,建立联接条件
③“字段”选项(指定输出的字段),
从“可用字段”框中选择字段-“添加”到“选定字段”框
④“筛选”选项(指定记录输出的条件),
在“字段名”栏中选择被筛选的字段(不能选通用型或备注型)
在“条件”栏中选定用于比较的类型
在“实例”栏中输入比较条件
(若查字符型数据时,要忽略大小写)选中“大小写”
(对于多个条件)在“逻辑”栏中添加AND或OR-(若用逻辑取反操作,即与条件相反的操作)选中“否”
⑤“排序依据”选项(确定记录输出时的顺序):
从“选定字段”框中选择字段-“添加”到“排序条件”框-在“排序选项”框中确定升(降)序
⑥“分组依据”选项(按某字段(即某特征)分类,然后对字段中特征相同的数据进行统计计算,如求和、平均值、个数、最大值、最小值等),
在(“字段”选项的“函数与表达式”框中)输入用于对某字段计算的函数表达式-“添加”到“选定字段”框(则多一个存放计算结果的字段);
在(“分组依据”选项)“可用字段”框中选择用于分组的字段-“添加”到“分组字段”框中;
在“分组依据”选项的“满足条件”栏中)输入对字段计算的条件(类似“筛选”设置)
⑦,更新条件”选项(决定视图中修改数据传回数据源中表的方法和要求):
在“字段名”框中选定可更新的字段(“钥匙”表示关键字段,最好不要更新;“铅笔”表示可更新的字段)
选择“发送SQL更新”项(否则修改内容不会传回数据源)
⑧“杂项”选项(对查询记录输出作限制):
选“无重复记录”,则不输出重复记录
选“查询交叉表”,则对三个字段,用列头、行头、数据顶的形式显示查询结果
选“列在前面的记录”,可确定输出记录的个数
5.运行视图(一定要先打开相关的数据库或表)
(1) USE 视图名
BROWSE
(2) 双击数据库设计器中视图的图标
(3) 单击“视图设计器”工具栏中“运行”钮
6.修改视图(修改视图要在“视图设计器”中 进行,因此要先打开相关的数据库)
(1) 右击视图图标,选“修改”
(2) MODIFY VIEW 视图名二、查询
1.查询可从指定表或视图中找出符合条件的记录。它与视图不同的地方在于查询可作为一个文件单独存在,而视图只能存在于数据库中;查询的数据只能观看不能修改,而视图中数据可以修改并传回到原数据源中。
2.启动“查询设计器”
 ,文件/新建”-(类型)选“查询”-“新建文件”-选定表或视图-“添加”到“查询设计器”
3.建立查询:(用“查询设计器”建立查询的操作与用“视图设计器”建立视图类似,它还少一个“更新条件”)
(1)“联接”选项(联接两个表):
(2)“字段”选项(指定输出的字段),
(3)“筛选”选项(指定记录输出的条件),
(4)“排序依据”选项(确定记录输出时的顺序):
(5)“分组依据”选项(按某字段(即某特征)分类,然后对字段中特征相同的数据进行统计计算,如求和、平均值、个数、最大值、最小值等),
(6)“杂项”选项(对查询记录输出作限制):
4.使用查询
 (1)(“查询设计器”)“查询/运行查询”
 (2)“程序/运行”-选定查询文件-“运行”
 (3)DO <查询文件名.QPR >
【实验内容】
1.用本地视图向导为“学生表”建立本地视图“学生表视图”,视图中包含“学号”、“班级”、“姓名”、“性别”、“入学成绩”五个字段内容,并要求只显示男生的记录
2.用视图设计器为“学生表”建立本地视图“学生视图2”,视图中包含“学号”、“班级”、“姓名”、“性别”、“入学成绩”五个字段内容,并要求只显示男生的记录
3.用查询向导建立查询“学生成绩查询”,以查询Xsda和Xscj表中数学系,且没有补考的学生的学号,姓名,系别,各科课程的考试成绩。
4.用“查询设计器”为“学生表”和“成绩表”这两个表建立查询“学生成绩查询2”,以显示计算机班男生的学号、班级、姓名、入学成绩、课程号、成绩
【高手进阶】
1.用“查询设计器”为“学生表”和“成绩表”这两个表建立查询“学生成绩查询3”,以查询各班学生考试平均成绩
2.用“查询设计器”为“学生表”建立姓名、班级和入学成绩的交叉表查询。
【综合测试】( 5分钟 )
根据“学生表”和“成绩表”,建立一个多表查询,完成查询“课程号”为1011的学生成绩信息。
【实验过程】
1.用本地视图向导为“学生表”建立本地视图“学生表视图”,视图中包含“学号”、“班级”、“姓名”、“性别”、“入学成绩”五个字段内容,并要求只显示男生的记录。
[解答]使用视图向导创建视图,要先打开一个数据库文件。
(1)启动本地视图向导执行“工具/向导/全部”命令,在“向导选取”对话框中选择“本地视图向导”。
[或:打开数据库文件,在“数据库设计器”窗口中执行“新建/视图”命令,单击“向导”按钮,进入“本地视图向导”窗口]
(2) 选定数据库“学生成绩管理”中的“学生表”,从“字段选取”窗口中选定所需字段,将其添加到“选定字段”框中
(3)从“筛选记录”窗口中指定记录输出的条件[没有就不指定。这里条件为显示男生]
(4)从“排序记录”窗口中确定视图中记录显示的顺序[没有就不指定。这里按学号升序排列]
(5) 从“限制记录”窗口中选择视图中记录显示的数目(若无特殊要求,就取默认值)
(6)单击“完成”钮,输入视图名“学生视图”,单击“确定”钮。则可将此视图保存到当前数据库中。
2.用视图设计器为“学生表”建立本地视图“学生视图2”,视图中包含“学号”、“班级”、“姓名”、“性别”、“入学成绩”五个字段内容,并要求只显示男生的记录。
[解答]使用视图设计器创建视图,要先打开一个数据库文件。
(1) 执行“文件/新建/视图”命令,单击“新建文件”按钮,进入“视图设计器”窗口。
① 从“添加表或视图”对话框中选定表(或视图)将其添加到“视图设计器”中。这时还可以通过“其它”钮,选择自由表。
②“联接”标签(联接两个表用的,这里只有一个表,因此不必管它):
③“字段”标签(指定输出的字段),
从“可用字段”框中选择“学号”、“班级”、“姓名”、“性别”、“入学成绩”五个字段 →逐一“添加”到“选定字段”框
④“筛选”标签(指定记录输出的条件:只显示男生),
在“字段名”栏中选择被筛选的字段:“性别”(不能选通用型或备注型)
在“条件”栏中选定用于比较的类型:“=”
在“实例”栏中输入比较条件:“男”
⑤“排序依据”标签(确定记录输出时的顺序):
从“选定字段”框中选择字段:如“学号”-“添加”到“排序条件”框-在“排序选项”框中确定升(降)序
⑥“分组依据”标签(按某字段(即某特征)分类,然后对字段中特征相同的数据进行统计计算,如求和、平均值、个数、最大值、最小值等。这里不用,因此不理它),
⑦“更新条件”选项(决定视图中修改数据传回数据源中表的方法和要求):
1)“表”框:指定对哪些表可以更新
2)“字段名”框,(设置关键字段)单击此框中字段旁的“关键”(钥匙)列
(指定可更新字段)单击此框中字段旁的“更新”(笔)列
3)选“发送SQL更新”:决定是否更新源表中数据,至少要设置一个关键字段
4)“使用更新”框,(确定如何进行更新)
选“SQL DELETE 然后 INSERT”:先删除原记录,再插入新记录选“SQL UPDATE”:直接修改原始记录
 5)“SQL WHERE 子句包括”框:(在多用户环境中使用。更新记录前,检测是否其他用户正在修改)
  选“关键字段”:若源表中关键字段已改,则不能更新
选“关键字段和可更新字段”:若源表中关键字段和可更新字段已改,则不能更新
选“关键字段和已修改字段”:若源表中任何字段已改,则不能更新从“钥匙”栏选定“学号”这个关键字段;在“铅笔”栏选定可更新的字段,如“姓名”、“性别”、“入学总分”等。注意还要选定“发送SQL更新”项。
⑧“杂项”标签(对查询记录输出作限制。取默认值,也是不理):
⑨ 用“文件∕保存”命令(或Ctri + W)保存视图,取名“学生视图2”
⑩ 运行视图:双击数据库设计器中视图图标、或单击“视图设计器”工具栏中“运行”钮。
3.用查询向导建立查询“学生成绩查询”,以查询Xsda和Xscj表中数学系,且没有补考的学生的学号,姓名,系别,各科课程的考试成绩
[解答]
(1)启动“查询设计器”,添加Xsda和Xscj表;
(2)从“字段选取”选项中选择学号、系别、姓名、高数、大语、邓论、英语、计算机等字段;
(3)在“为表建立关系”选项中为两表建立联接:在步骤2中按“添加”钮;
(4)选取匹配字段:因要显示两表中相应记录的值,故选取“仅包含匹配的行“项;
(5)从“筛选记录”选项中指定记录输出的条件,系别=数学系
(6)从“排序记录”选项中指定按学号升序显示
(7)在“限制记录”选项中,取默认值;
(8)按“完成”钮,保存查询文件“学生成绩查询”;
(9)运行查询,用“程序/运行”-选定查询文件“学生成绩查询”-按“运行”钮(或在命令窗口中输入:DO 学生成绩查询.QPR。一定要带扩展名.QPR)
4.用“查询设计器”为“学生表”和“成绩表”这两个表建立查询“学生成绩查询2”,以显示计算机班男生的学号、班级、姓名、入学成绩、课程号、成绩
[解答]
(1) 执行“文件/新建/查询”命令,单击“新建文件”按钮,进入“查询设计器”窗口。
① 在查询设计器中添加两个表:学生表和成绩表,并建立联接;
② 在“字段”标签,添加要显示的字段:学号、班级、姓名、入学成绩、课程号、成绩;
③ 在“筛选”标签中,确定显示条件:计算机班男生(注意:要按下“逻辑”下的“AND”项)
④ 对“排序依据”、“分组依据”和“杂项”,可以暂不理会;
⑤ 保存:用“文件∕保存”或Ctri + W,保存查询文件为“学生成绩查询2”;
⑥ 运行查询:用“程序/运行”-选定查询文件“学生成绩查询2”-按“运行”钮(或在命令窗口中输入:DO 学生成绩查询2.QPR
【高手进阶解答】
1.用“查询设计器”为“学生表”和“成绩表”这两个表建立查询“学生成绩查询3”,以查询各班学生考试平均成绩
[解答]此题目要用“分组论据”。按某字段(即某特征)分类,然后对字段中特征相同的数据进行统计计算,如求和、平均值、计数、最大值、最小值等,它分为以下三步,
①(“字段”选项的“函数与表达式”框中)输入用于对某字段计算的函数表达式-“添加”到“选定字段”框(则多一个存放计算结果的字段)
②(“分组依据”选项)在,可用字段”框中选择用于分组的字段-“添加”到“分组字段”框
③(“分组依据”选项的“满足条件”栏中)输入对字段计算的条件(类似“筛选”的设置)
建立查询时在查询设计器中添加两个表、在“字段”标签中,添加要显示的字段(只要一个字段:班级)、在“筛选”标签中,确定显示条件(这里没有条件)、“排序依据”、“分组依据”和“杂项”等与上一题的操作基本一样;
1)在“分组依据”标签中,指定按班级分组(将“班级”添加到“分组字段”框中);
2)在“字段”选项的“函数与表达式”框中,输入用于对成绩表的成绩字段计算的函数表达式“AVG(成绩)”,按“添加”钮,将其添加到“选定字段”框(则在显示时会多一个存放计算平均成绩的字段)
完成后保存运行(因没有对字段进行计算的条件,所以“分组依据”选项的“满足条件”栏中可不输入筛选条件)。
2.用“查询设计器”为“学生表”建立姓名、班级和入学成绩的交叉表查询。
(1)打开“查询设计器”,向设计器添加“学生表”。
(2)在“字段”标签中,添加要显示的字段:姓名、班级、入学成绩。
注:只能添加三个字段,第一字段为“行”数据源、第二字段为“列”数据源、第三字段为“数据”数据源。
(3)在“杂项”标签中,选择“交叉数据表”项
(4)完成后保存运行,结果如下图。
【综合测试解答】
根据“学生表”和“成绩表”,建立一个多表查询,完成查询“课程号”为1011的学生成绩信息。
[解答]
(1)打开“查询设计器”。将“学生表”、“成绩表”加入到查询设计器。并建立联接;
(2)将学生表中的学号、姓名、班级和成绩表中的课程号、成绩等字段添加到“可用字段”中;
(3)在“筛选”选项卡中设置筛选条件:成绩表的课程号=1011;
(4)在“排序依据”选项卡中,选择“成绩表,成绩”以“降序”方式添加到,排序条件”中。
(5)此题不需要“分组依据”,“杂项”取默认值;
(6)单击鼠标右键,选择“运行查询”,在“浏览”窗口中显示查询结果。
练习二 SQL查询功能(一)
【实验目的】
掌握SQL查询功能语句SELECT的操作;
熟练掌握单表查询;
熟练掌握带条件查询;
熟练掌握多表连接查询。
【知识要点】
 一、关系数据库标准语言SQL
SQL是一个一体化、非过程化、功能强大的关系型数据库应用语言。它包括查询、定义(创建、删除和修改表)、操纵(插入、更新和删除记录)和控制四个方面的功能。
SQL功能
命令动词
数据查询
SELECT
数据定义
CREATE、DROP、ALTER
数据操纵
INSERT、UPDATE、DELETE
数据控制
GRANT、REVOKE
二、SQL查询:
查询是SQL的核心,SQL查询命令称为SELECT命令
1.单表查询
(1)基本查询语句(无条件查询)
SELECT [ALL/DISTINCT] 字段名表 FROM 表名
说明:
用“字段名1,字段名2,…”来指定要显示的字段、若用“*”代替,则表示选取所有字段;
有DISTINCT,则不显示相同的记录、用ALL,则显示全体记录,包括重复记录;
用“FROM 表名”指明要从哪个(些)表中查询数据。
(2)带条件(WHERE)的查询语句
SELECT [ALL/DISTINCT] 字段名表 FROM 表名 WHERE 条件式说明:
用“条件式”选择满足条件的记录,使用条件是查询的关键。
2.多表连接查询
SELECT [ALL/DISTINCT] 字段名表 FROM 表1[,表2…] WHERE 条件式说明:在条件式中一定要输入两表联接条件:“表1.某字段=表2.某字段”
要求这几个表间至少有一个相同的字段,这个相同字段用来作连接条件
【实验内容】
一、SQL查询语句SELECT
1.单表查询
(在“成绩表”中)
(1)显示表中的所有记录;
(2)显示表中的学号、课程号、成绩三个字段;
(3)查询表中有多少个学号(即不显示相同的学号);
(4)查询表中成绩不及格的学生记录;
(在“学生表”表中)
(5)查询表中85年以后出生,且入学成绩大于560分的学生记录;
(6)查询表中85年出生的学生的学号,姓名,出生日期;
2.多表连接查询 [注意连接条件的使用]
(1)从学生表和成绩表中查询学生记录
(2)从学生表和成绩表中查询成绩不及格的学生姓名、课程号、成绩
(3)2002年计算机等级考试[二级(数据库)上机考试试卷(有修改)]
 1.在某商场管理系统中,以下2个数据表反映一个月内有关手机销售、库存情况。
 (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 张广河显示营业员方虹本月销售商品、数量(这两个表已经做好,在配套材料“表”文件夹中)。
二、SQL综合练习:
1,下列语句的作用是什么?上机操作后给出答案。
(1)SELECT * FROM 学生表
(2)SELECT 学号,姓名,出生日期 FROM 学生表 WHERE 出生日期;
BETWEEN CTOD("01/01/84") AND CTOD("12/31/84")
(3)SELECT 姓名,课程号,成绩 FROM 学生表,成绩表 ;
WHERE 学生表.学号=成绩表.学号 AND 成绩<60
(4)SELECT 学生表.学号,班级,课程号,成绩 FROM 学生表,成绩表 ;
WHERE 成绩表.学号=学生表.学号 AND 成绩>60 ;
AND ( 班级="计算机" OR 班级="金融")
2.用数据库命令做的题,现在用SQL语句来做:
(1)顺序查询,
① 在学生表中找出85年出生的学生记录
SET TALK OFF
USE 学生表
LOCATE FOR SUBSTR(DTOC(出生日期),7,2) =”85”
DO WHILE NOT EOF()
DISPLAY
CONTINUE
ENDDO
(2)建立关联,
① 将1区中的当前表“Xsda”与2区中的表“Xscj”按关键字段“学号”建立关联,并浏览学号、姓名和英语及计算机的成绩
( 注意:要先在不同的区中打开这两个表,并要对子表建立索引-对关键字“学号”)
SELECT 1 && 指定工作区1为当前工作区
USE Xsda && 在工作区1中打开Xsda表
SELECT 2 && 指定工作区2为当前工作区
USE Xscj && 在工作区2中打开Xscj表
INDEX ON 学号 TAG XH && 为成绩表(对学号)建立索引(名叫XH)
SELECT 1 && 指定工作区1为当前工作区
SET RELATION TO 学号 INTO 2
&& 按“学号”对2区(的成绩表)建立关联
BROWSE FIELDS 学号,姓名,B.英语,B.计算机
&& 子表记录前要加前缀:“别名-->”或“别名.”
【高手进阶】
嵌套查询:
将一个查询的结果,作为另一个查询的条件,这种查询中带查询,就是嵌套查询。
例1:从学生表和成绩表中查学生迪来的成绩和课程号
[解答]SELECT 课程号,成绩 FROM 成绩表 WHERE 学号= ;
(SELECT 学号 FROM 学生表 WHERE 姓名=”迪来”)
先从内层查询“SELECT 学号 FROM 学生表 WHERE 姓名="迪来"”,查出“迪来”的“学号”是05011013 ;然后从外层查询“SELECT 课程号,成绩 FROM 成绩表 WHERE 学号 = 05011013”,查学号是05011013的学生的课程号和成绩。
(1)从Xsda表中,查询所有与“汪洋”籍贯相同的学生姓名
(2)如果不用嵌套查询,可不可以?
例2:从学生表和成绩表中查询成绩不及格的学生姓名。
[解答]SELECT 姓名 FROM 学生表 WHERE 学号 IN (SELECT 学号 FROM 成绩表 WHERE 成绩<60)
内层查询“SELECT 学号 FROM 成绩表 WHERE 成绩<60”,查出成绩不及格的学生的学号,由于这些学号不只一个,所以不能用等号,而必须采用谓词IN,IN的含义是属于,即可等于这许多学号中的任一个,则外层查询就是查询这些学号的学生的姓名。
(1)从学生表和成绩表中查询计算机班的学生的各科成绩。
(2)从学生表和成绩表中查询0502系科学生的学号,课程号和成绩。
2.从键盘输入学号,在“成绩表”、“学生表”表中查询显示该学号学生的姓名及各门课程的成绩。
以前数据库命令,先建立关联,再查询(见下面程序)。现在用SQL语句,该如何写?
SET TALK OFF
SELECT 1
USE 学生表
INDEX ON 学号 TAG Xx
SELECT 2
USE 成绩表
SET RELATION TO 学号 INTO A
ACCEPT,请输入学生学号:” TO Xh
LOCATE FOR 学号 = Xh
DO WHILE NOT EOF()
DISPLAY 学号,学生表.姓名,课程号,成绩
CONTINUE
ENDDO
RETURN
【综合测试】( 5分钟 )
在学生表和成绩表中查找姓名为“王二春”的记录,若他有一科的成绩大于80分,则显示他的学号、姓名、课程号和成绩。
【实验过程】
一、SQL查询语句SELECT
1.单表查询
(在“成绩表”中)
(1)显示表中的所有记录;
[操作]SELECT * FROM 成绩表
(2)显示表中的学号、课程号、成绩三个字段;
[操作]SELECT 学号,课程号,成绩 FROM 成绩表
或:SELECT * FROM 成绩表
(3)查询表中有多少个学号(即不显示相同的学号)
[操作]SELECT DISTINCT 学号 FROM 成绩表
(4)查询表中成绩不及格的学生记录
[操作]SELECT * FROM 成绩表 WHERE 成绩<60
(在“学生表”表中)
(5)查询表中85年以后出生,且入学成绩大于560分的学生记录
[操作]SELECT * FROM 学生表 ;
WHERE 入学成绩>560 AND YEAR(出生日期)>1985
或:
SELECT * FROM 学生表 ;
WHERE 入学成绩>560 AND 出生日期>CTOD("12/31/85")
(6)查询表中85年出生的学生的学号、姓名、出生日期
[操作]SELECT 学号,姓名,出生日期 FROM 学生表 ;
WHERE 出生日期>= CTOD("01/01/85") AND 出生日期 <= CTOD("12/31/85")
或:
SELECT 学号,姓名,出生日期 FROM 学生表 WHERE YEAR(出生日期)= 1985
2.多表连接查询
(1)从学生表和成绩表中查询学生记录
[操作]SELECT * FROM 学生表,成绩表 WHERE 学生表.学号=成绩表.学号或(用数据库操作命令):
SELECT 1
USE 成绩表
INDEX ON 学号 TAG XH
SELECT 2
USE 学生表
SET RELATION TO 学号 INTO A
LIST 学号,姓名,A.课程号,A.成绩
(2)从学生表和成绩表中查询成绩不及格的学生姓名、课程号、成绩
[操作]SELECT 姓名,课程号,成绩 FROM 学生表,成绩表 ;
WHERE 学生表.学号=成绩表.学号 AND 成绩<60
或(用数据库操作命令):
SELECT 1
USE 学生表
INDEX ON 学号 TAG XH
SELECT 2
USE 成绩表
SET RELATION TO 学号 INTO A
LIST A.姓名,课程号,成绩 FOR 成绩<60
(3)2002年计算机等级考试[二级(数据库)上机考试试卷(有修改)]
 1.在某商场管理系统中,以下2个数据表反映一个月内有关手机销售、库存情况。
 (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 张广河显示营业员方虹本月销售商品、数量
[操作]SELECT 营业员,日期,品名,销售数量 FROM Stockll,Sell ;
WHERE Stockll.商品代码= Sell.商品代码 AND 营业员 =“方虹”
或(用数据库操作命令),
SET TALK OFF
SET SAFETY OFF
SET DATE YMD
CLEAR
SELECT 1
USE Stockll
INDEX ON 商品代码 TO SP
SELECT 2
USE Sell
SET RELATION TO 商品代码 INTO A
LIST 营业员,日期,A->品名,销售数量 FOR 营业员 =“方虹”
二、SQL综合练习:
1,下列语句的作用是什么?上机操作后给出答案。
(1)SELECT * FROM 学生表
[解答]显示学生表中的所有记录
(2)SELECT 学号,姓名,出生日期 FROM 学生表 WHERE 出生日期;
BETWEEN CTOD("01/01/84") AND CTOD("12/31/84")
[解答]显示学生表中出生日期在84年的学生的学号,姓名和出生日期
(3)SELECT 姓名,课程号,成绩 FROM 学生表,成绩表 ;
WHERE 学生表.学号=成绩表.学号 AND 成绩<60
[解答]从学生表和成绩表中查询成绩不及格的学生姓名、课程号、成绩
(4)SELECT 学生表.学号,班级,课程号,成绩 FROM 学生表,成绩表 ;
WHERE 成绩表.学号=学生表.学号 AND 成绩>60 ;
AND ( 班级="计算机" OR 班级="金融")
[解答]从学生表和成绩表中,查询并显示成绩在60分以上的计算机班或金融班学生的学号、班级、课程号及成绩
2,用数据库命令做的题,现在用SQL语句来做:
(1)顺序查询,
① 在学生表中找出85年出生的学生记录
SET TALK OFF
USE 学生表
LOCATE FOR YEAR(出生日期)=1985
DO WHILE NOT EOF()
DISPLAY
SKIP
ENDDO
RETURN
[操作]SELECT * FROM 学生表 WHERE YEAR(出生日期) = 1985
(2)多表联结,
① 将1区中的当前表“Xsda”与2区中的表“Xscj”按关键字段“学号”建立关联,并浏览学号、姓名和英语及计算机的成绩
( 注意:要先在不同的区中打开这两个表,并要对子表建立索引-对关键字“学号”)
SELECT 1 && 指定工作区1为当前工作区
USE Xscj && 在工作区1中打开Xscj表
INDEX ON 学号 TAG XH && 为成绩表(对学号)建立索引(名叫XH)
SELECT 2 && 指定工作区2为当前工作区
USE Xsda && 在工作区2中打开Xsdaj表
SET RELATION TO 学号 INTO A
&& 按“学号”对1区(的成绩表)建立关联
BROWSE FIELDS 学号,姓名,A.英语,A.计算机
&& 子表记录前要加前缀:“别名-->”或“别名.”
[操作]SELECT Xsda.学号,姓名,英语,计算机 FROM Xsda,Xscj ;
WHERE Xsda.学号 = Xscj.学号
【高手进阶解答】
1.嵌套查询:
将一个查询的结果,作为另一个查询的条件,这种查询中带查询,就是嵌套查询。
例1:从学生表和成绩表中查学生迪来的成绩和课程号
[解答]SELECT 课程号,成绩 FROM 成绩表 WHERE 学号 = ;
(SELECT 学号 FROM 学生表 WHERE 姓名=”迪来”)
先从内层查询“SELECT 学号 FROM 学生表 WHERE 姓名="迪来"”,查出“迪来”的“学号”是05011013 ;然后从外层查询“SELECT 课程号,成绩 FROM 成绩表 WHERE 学号 = 05011013”,查学号是05011013的学生的课程号和成绩。
(1)从Xsda表中,查询所有与“汪洋”籍贯相同的学生姓名
[解答]
SELECT 姓名 FROM Xsda ;
WHERE 籍贯 = (SELECT 籍贯 FROM Xsda WHERE 姓名="汪洋")
(2)如果不用嵌套查询,可不可以?
[解答]先查出汪洋的籍贯是“重庆”
SELECT 籍贯 FROM Xsda WHERE 姓名="汪洋"
再用一句语句查籍贯是“重庆”的学生姓名
SELECT 姓名 FROM Xsda WHERE 籍贯 = "重庆"
例2:从学生表和成绩表查询成绩不及格的学生姓名。
[解答]
SELECT姓名 FROM 学生表 WHERE 学号 IN ;
(SELECT 学号 FROM 成绩表 WHERE 成绩<60)
内层查询“SELECT 学号 FROM 成绩表 WHERE 成绩<60”,查出成绩不及格的学生的学号,由于这些学号不只一个,所以不能用等号,而必须采用谓词IN,IN的含义是属于,即可等于这许多学号中的任一个,则外层查询就是查询这些学号的学生的姓名。
(1)从学生表和成绩表中查询计算机班的学生的各科成绩。
[解答]
SELECT 学号,课程号,成绩 FROM 成绩表 WHERE 学号 IN ;
(SELECT 学号 FROM 学生表 WHERE 班级="计算机")
(2)从学生表和成绩表中查询0502系科学生的学号,课程号和成绩。
[解答]
SELECT学号,课程号,成绩 FROM 成绩表 WHERE 学号 IN ;
(SELECT 学号 FROM 学生表 WHERE SUBSTR(学号,1,4)= "0502")
2.从键盘输入学号,在“成绩表”、“课程表”表中查询显示该学号学生的各门课程的成绩。
[解答]
ACCEPT,请输入学生学号:” TO Xh
SELECT 成绩表.学号,姓名,课程号,成绩 FROM 成绩表,学生表 ;
WHERE 成绩表.学号 = 学生表.学号 AND成绩表.学号 = Xh
【综合测试解答】
在学生表和成绩表中查找姓名为“王二春”的记录,若他有一科的成绩大于80分,则显示他的学号、姓名、课程号和成绩。
[解答]
(1) SELECT 学生表.学号,姓名,课程号,成绩 FROM 学生表,成绩表 ;
WHERE 学生表.学号=成绩表.学号 AND 姓名="王二春" AND 成绩>80
[这程序只查询王二春80分以上的记录]
(2) SELECT 学生表.学号,姓名,课程号,成绩 FROM 学生表,成绩表 ;
WHERE 学生表.学号=成绩表.学号 AND 姓名="王二春" AND ;
成绩表.学号 IN(SELECT 学号 FROM 成绩表 WHERE 成绩>80)
[从内查询中查出所有成绩在80分以上的学号,在外查询中若王二春的学号在其中的话,则显示他的所有科目和成绩(含80分以下的)]
(3) ACCEPT,请输入学生姓名:” TO Xm
SELECT 学生表.学号,姓名,课程号,成绩 FROM 学生表,成绩表 ;
WHERE 学生表.学号=成绩表.学号 AND 姓名=Xm AND ;
成绩表.学号 IN(SELECT 学号 FROM 成绩表 WHERE 成绩>80)
[这程序可查任意输入姓名的满足条件(只要有一科在80分以上)的学生所有记录。王双春三科成绩均在80分以下,你看看能不能显示他的记录]
练习三 SQL查询功能(二)
【实验目的】
1.熟练掌握SQL查询功能语句SELECT的操作;
2.熟练掌握简单计算功能;
3.熟练掌握几个特殊的运算符。
【知识要点】
一、关系数据库标准语言SQL
3.简单的计算查询
SQL可以计算方式进行查询,常用的计算函数有:
① COUNT:计数
② SUM:求和
③ AVG:求平均值
④ MAX:求最大值
⑤ MIN:求最小值
4.几个特殊的运算符
① BETWEEN……AND …… 表示在“……和……之间”
② LIKE 表示与……匹配,用于“模糊”查询
它有两种匹配方式:“_”(下划线)表示一个字符;“%”表示任意多个字符
5.排序子句
 ORDER BY 字段 [ASC/DESC] 将查询结果排序输出
将记录按升序(ASC)[默认]或降序(DESC)排序
【实验内容】
一、SQL查询语句SELECT
1.简单的计算查询
(1)查询学生表中男学生的人数
(2)查询成绩表中课程号为1021的成绩总和
(3)查询Xscj表中计算机成绩在80分以上的人数、总分和平均分
(4)显示Xsda表中姓“张”学生的平均年龄
(5)从Xsda表和Xscj表查询英语系学生计算机考试的总分、平均分、最高分和参考人数
[要用Xsda表,取系别、Xscj表,取成绩]
2.几个特殊的运算符 ① BETWEEN……AND …… ;② LIKE ;③ ORDER BY
(1)查询学生表中83年出生的学生的学号,姓名,出生日期
(2)查询学生表中83到84年出生的学生的学号、姓名、出生日期
(3)查询学生表中入学成绩在500到600分的学生
(4)显示学生表中姓“王”的学生
(5)显示学生表中叫“王X”的学生
(6)显示学生表中叫“王XX”的学生
(7)显示学生表中姓名中含“王”字的学生(比较一下,这四题有何不同?理解%与_的区别)
(8)按入学成绩分数升序显示学生表的学生记录
(9)按入学成绩分数降序显示学生表中学生的学号、姓名和入学成绩记录
(10)按入学成绩分数降序显示学生表中500分以上的学生的学号、姓名和入学成绩二、SQL综合练习:
1.综合运用SELECT语句
(1)从学生表和成绩表中查询84年出生的学生的学号、姓名、出生日期、入学成绩、课程号和考试成绩
(2)从学生表和成绩表中查询姓张的学生的学号、姓名、入学成绩
(3)从学生表和成绩表中查询成绩在80到90分的学生的学号、姓名、课程号和成绩
(4)查询并显示学生表和成绩表中05级各个学生的学号、姓名、课程号及成绩
(5)查询并显示学生表和成绩表中“信息工程系”的各个学生的学号、姓名、各科课程的成绩(学号中第3到5位是011,则表示该生是“信息工程系”的)
(6)查询并显示学生表和成绩表中姓张和姓李的学生的学号、姓名、各科课程号及成绩
(7) 从学生表查询所有记录的学号、姓名、班级、入学成绩等内容,并按入学成绩降序排列
(8) 从学生表查询入学成绩在480分以上的学号、姓名、性别、团员否、入学成绩等内容,并按入学成绩升序排列
(9) 用两种方法从成绩表查询成绩在85至95分之间学号、课程号、成绩等内容,并按成绩降序排列
(10)从学生表和成绩表中查询姓王的学生的人数和考试平均成绩
2.下列语句的作用是什么?
(1)SELECT * FROM 学生表 WHERE 姓名 LIKE "李_"
(2)SELECT * FROM 学生表 ORDER BY 入学成绩 DESC
(3)SELECT 姓名,课程号,成绩 FROM 学生表,成绩表 ;
WHERE 学生表.学号= 成绩表.学号 AND 成绩<60
(4)SELECT * FROM 学生表 WHERE 姓名 LIKE "%李% "
(5)SELECT 学号,课程号,成绩 FROM 成绩表 ;
WHERE 成绩>80 ORDER BY 成绩
3.以前的题,现在用SQL语句来做:
(1)顺序查询,
在Xsda表中找出姓“张”的大于20岁的男生记录
USE Xsda
LOCATE ALL FOR SUBSTR(姓名,1,2) =”张” AND 年龄>20 AND 性别=”男”
DISPLAY
CONTINUE
DISPLAY
……
(2)数据统计:
① 统计学生表中入学成绩的最大值、最小值、总和、平均值
USE 学生表
CALCULATE MAX(入学成绩),MIN(入学成绩),SUM(入学成绩),AVG(入学成绩)
② 统计成绩表中1021课程的最大值、最小值、总和、平均值
USE 成绩表
CALCULATE MAX(成绩),MIN(成绩),SUM(成绩),AVG(成绩) ;
FOR 课程号=”1021”
【高手进阶】
1.从学生表查询所有记录的学号、姓名、班级、入学成绩等内容,并按班级入学成绩升序排列,同班同学按入学成绩降序排列
2.查询 Xscj表中计算机成绩在80分以上的人数和总分,并使用AS指定列标题
3.分组查询:GROUP BY子句将查询的结果进行分组,可进行分组汇总。
例1:从学生表中按班级统计各班学生的人数。
[解答]SELECT COUNT(*) FROM 学生表 GROUP BY 班级
(1)上题中,如果同时要显示班级名称,如何做?
(2)在成绩表中,按课程号统计各科的课程号、总分、平均分和参考人数
【自我测试】( 5分钟 )
1.在学生表中统计姓“张”学生的人数。
2.从学生表和成绩表中查询姓张的学生的人数和考试平均成绩
【实验过程】
一、SQL查询语句SELECT
1.简单的计算查询
(1)查询学生表中男学生的人数
[解答]SELECT COUNT(学号) FROM 学生表 WHERE 性别=”男”
或:
SELECT COUNT(*) FROM 学生表 WHERE 性别= "男"
注:COUNT(*)是COUNT的特殊形式,用于统计WHERE子句中逻辑表达式的记录的个数。
(2)查询成绩表中课程号为1021的成绩总和
[解答]SELECT SUM(成绩) FROM 成绩表 WHERE 课程号=”1021”
(3)查询 Xscj表中计算机成绩在80分以上的人数、总分和平均分
[解答]SELECT COUNT(*),SUM(计算机),AVG(计算机) FROM Xscj WHERE 计算机>=80
(4)显示 Xsda表中姓“张”学生的平均年龄
[解答]SELECT AVG(年龄) FROM Xsda WHERE SUBSTR(姓名,1,2)="张"
(5)从Xsda表和Xscj表查询英语系学生计算机考试的总分、平均分、最高分和参考人数
[要用Xsda表取系别、Xscj表取成绩]
[解答]SELECT COUNT(*),SUM(计算机),AVG(计算机),MAX(计算机) FROM Xsda,Xscj;
WHERE Xsda.学号= Xscj.学号 AND 系别= "英语系"
2.几个特殊的运算符 ① BETWEEN……AND …… ;② LIKE ;③ ORDER BY
(1)查询学生表中83年出生的学生的学号,姓名,出生日期
[解答]SELECT 学号,姓名,出生日期 FROM 学生表 ;
WHERE 出生日期 BETWEEN CTOD("01/01/83") AND CTOD("12/31/83")
(2)查询学生表中83到84年出生的学生的学号、姓名、出生日期
[解答]SELECT 学号,姓名,出生日期 FROM 学生表 ;
WHERE YEAR(出生日期) BETWEEN 1983 AND 1984
(3)查询学生表中入学成绩在500到600分的学生
[解答]SELECT * FROM 学生表 WHERE 入学成绩>500 AND 入学成绩<600
或:(比较一下,两者有何不同?)
SELECT * FROM 学生表 WHERE 入学成绩 BETWEEN 500 AND 600
(4)显示学生表中姓“王”的学生
[解答]SELECT * FROM 学生表 WHERE SUBSTR(姓名,1,2)="王"
或:SELECT * FROM 学生表 WHERE 姓名 LIKE "王%"
(5)显示学生表表中叫“王X”的学生
[解答]SELECT * FROM 学生表 WHERE 姓名 LIKE "王_"
(6)显示学生表表中叫,王XX”的学生
[解答]SELECT * FROM 学生表 WHERE 姓名 LIKE "王__"
(7)显示学生表表中姓名中含,王”字的学生(比较一下,这四题有何不同?理解%与_的区别)
[解答]SELECT * FROM 学生表 WHERE 姓名 LIKE "%王%"
(8)按入学成绩分数升序显示学生表的学生记录
[解答]SELECT * FROM 学生表 ORDER BY 入学成绩 ASC
(9)按入学成绩分数降序显示学生表中学生的学号、姓名和入学成绩记录
[解答]SELECT 学号,姓名,入学成绩 FROM 学生表 ORDER BY 入学成绩 DESC
(10)按入学成绩分数降序显示学生表中500分以上的学生的学号、姓名和入学成绩
[解答] SELECT 学号,姓名,入学成绩 FROM 学生表 ;
ORDER BY 入学成绩 DESC WHERE 入学成绩>500
二、SQL综合练习:
1.综合运用SELECT语句
(1)从学生表和成绩表中查询84年出生的学生的学号、姓名、出生日期、入学成绩、课程号和考试成绩
[解答]SELECT 学生表.学号,姓名,出生日期,入学成绩,课程号,成绩 ;
FROM 学生表,成绩表 ;
WHERE 学生表.学号=成绩表.学号 ;
AND 出生日期 BETWEEN CTOD("01/01/84") AND CTOD("12/31/84")
(2)从学生和成绩表中查询姓张的学生的学号、姓名、入学成绩
[解答]SELECT 学生表.学号,姓名,入学成绩 FROM 学生表,成绩表 ;
WHERE 学生表.学号=成绩表.学号 AND SUBSTR(姓名,1,2) = "张"
或:
SELECT 学生表.学号,姓名,入学成绩 FROM 学生表,成绩表 ;
WHERE 学生表.学号=成绩表.学号 AND 姓名 LIKE "张%"
(3)从学生表和成绩表中查询成绩在80到90分的学生的学号、姓名、课程号和成绩
[解答]SELECT 学生表.学号,姓名,课程号,成绩 FROM 学生表,成绩表 ;
WHERE 学生表.学号=成绩表.学号 AND 成绩 BETWEEN 80 AND 90
(4)查询并显示学生表和成绩表中05级各个学生的学号、姓名、课程号及成绩
[解答]SELECT 学生表.学号,姓名,课程号,成绩 FROM 学生表,成绩表 ;
WHERE 学生表.学号=成绩表.学号 AND 学生表.学号 LIKE "05%"
或:
SELECT 学生表.学号,姓名,课程号,成绩 FROM 学生表,成绩表 ;
WHERE 学生表.学号=成绩表.学号 AND SUBSTR(学生表.学号,1,2)= "05"
(5)查询并显示学生表和成绩表中“信息工程系”的各个学生的学号、姓名、各科课程的成绩(学号中第3到5位是011,则表示该生是“信息工程系”的)
[解答]SELECT 学生表.学号,姓名,课程号,成绩 FROM 学生表,成绩表 ;
WHERE 学生表.学号=成绩表.学号 AND 学生表.学号 LIKE "__011%"
或:
SELECT 学生表.学号,姓名,课程号,成绩 FROM 学生表,成绩表 ;
WHERE 学生表.学号=成绩表.学号 AND SUBSTR(学生表.学号,3,3)= "011"
(6)查询并显示学生表和成绩表中姓张和姓李的学生的学号、姓名、各科课程号及成绩
[解答]SELECT 学生表.学号,姓名,课程号,成绩 FROM 学生表,成绩表 ;
WHERE 学生表.学号=成绩表.学号 ;
AND ( 姓名 LIKE "张%" OR 姓名 LIKE "李%" )
(7) 从学生表查询所有记录的学号、姓名、班级、入学成绩等内容,并按入学成绩降序排列
[解答]SELECT 学号,姓名,班级,入学成绩 FROM 学生表 ORDER BY 入学成绩 DESC
(8) 从学生表查询入学成绩在480分以上的学号、姓名、性别、团员否、入学成绩等内容,并按入学成绩升序排列
[解答]SELECT 学号,姓名,性别,团员否,入学成绩 FROM 学生表 ;
WHERE 入学成绩>=480 ORDER BY 入学成绩
(9) 用两种方法从成绩表查询成绩在85至95分之间学号、课程号、成绩等内容,并按成绩降序排列
[解答]
① SELECT 学号,课程号,成绩 FROM 成绩表 ;
WHERE 成绩>=85 AND 成绩<=95 ORDER BY 成绩 DESC
② SELECT 学号,课程号,成绩 FROM 成绩表 ;
WHERE 成绩 BETWEEN 85 AND 95 ORDER BY 成绩 DESC
(10)从学生表和成绩表中查询姓王的学生的人数和考试平均成绩
[解答]SELECT COUNT(*),AVG(成绩) FROM 学生表,成绩表 ;
WHERE 学生表.学号= 成绩表.学号 AND姓名 LIKE "王%"
2.下列语句的作用是什么?
(1)SELECT * FROM 学生表 WHERE 姓名 LIKE "李_"
[解答]显示学生表中叫“李X”的学生
(2)SELECT * FROM 学生表 ORDER BY 入学成绩 DESC
[解答]显示学生表的学生记录,并按入学成绩分数降序显示
(3)SELECT 姓名,课程号,成绩 FROM 学生表,成绩表 ;
WHERE 学生表.学号= 成绩表.学号 AND 成绩<60
[解答]从学生表和成绩表中查询考试成绩不及格的学生姓名、课程号和考试成绩
(4)SELECT * FROM 学生表 WHERE 姓名 LIKE "%李% "
[解答]显示学生表表中姓名中有“李”字的学生
(5)SELECT 学号,课程号,成绩 FROM 成绩表 ;
WHERE 成绩>80 ORDER BY 成绩
[解答]按考试成绩升序显示成绩表中80分以上学生的学号、课程号和成绩
3.以前的题,现在用SQL语句来做:
(1)顺序查询,
在学生表中找出姓“张”的大于20岁的男生记录
USE Xsda
LOCATE ALL FOR SUBSTR(姓名,1,2) =”张” AND 年龄>20 AND 性别=”男”
DISPLAY
CONTINUE
DISPLAY
……
[解答]
SELECT * FROM Xsda ;
WHERE 性别 = "男" AND 年龄 > 20 AND 姓名 LIKE "张%"
(2)数据统计:
① 统计学生表中入学成绩的最大值、最小值、总和、平均值
USE 学生表
CALCULATE MAX(入学成绩),MIN(入学成绩),SUM(入学成绩),AVG(入学成绩)
[解答]
SELECT MAX(入学成绩),MIN(入学成绩),SUM(入学成绩),AVG(入学成绩) FROM 学生表
② 统计成绩表中1021课程的最大值、最小值、总和、平均值
USE 成绩表
CALCULATE MAX(成绩),MIN(成绩),SUM(成绩),AVG(成绩) ;
FOR 课程号=”1021”
[解答]
SELECT MAX(成绩),MIN(成绩),SUM(成绩),AVG(成绩) FROM 成绩表 ;
WHERE 课程号=”1021”
【高手进阶解答】
1.从学生表查询所有记录的学号、姓名、班级、入学成绩等内容,并按班级入学成绩升序排列,同班同学按入学成绩降序排列
[解答]
SELECT 学号,姓名,班级,入学成绩 FROM 学生表 ORDER BY 班级,入学成绩 DESC
2.查询 Xscj表中计算机成绩在80分以上的人数和总分,并使用AS指定列标题
[解答]短语AS,可以指定输出的列标题,使输出更容易被人理解
SELECT COUNT(*) AS 人数,SUM(计算机) AS 总分 FROM Xscj WHERE 计算机>=80
3.分组查询:GROUP BY子句将查询的结果进行分组,可进行分组汇总。
例1:从学生表中按班级统计各班学生的人数。
[解答]SELECT COUNT(*) FROM 学生表 GROUP BY 班级
(1)上题中,如果同时要显示班级名称,如何做?
[解答]
SELECT 班级,COUNT(*) FROM 学生表 GROUP BY 班级
(2) 在成绩表中,按课程号统计各科的课程号、总分、平均分和参考人数
[解答]
SELECT 课程号,SUM(成绩) AS 总分,AVG(成绩) AS 平均分,COUNT(*) AS 参考人数;
FROM 成绩表 GROUP BY 课程号
【自我测试解答】( 5分钟 )
1.在学生表中统计姓“张”学生的人数。
[解答]SELECT COUNT(*) FROM 学生表 WHERE 姓名 LIKE "张%"
2.从学生表和成绩表中查询姓张的学生的人数和考试平均成绩
[解答]SELECT COUNT(*),AVG(成绩) FROM 学生表,成绩表 ;
WHERE 学生表.学号=成绩表.学号 AND 姓名 LIKE "张%"
练习四 SQL定义功能
【实验目的】
1.掌握SQL定义功能语句的操作;
2.熟练掌握表的定义(CREATE);
3.熟练掌握表的删除(DROP);
4.熟练掌握表结构的修改、添加和修改字段(ALTER)。
【知识要点】
表的定义:创建一个新表
CREATE TABLE 表名(字段名 类型[,字段名 类型]……)
说明:
(1)常用数据类型有字符型:C(n);:数值型:N(n,d);日期型:D(默认为8位);逻辑型:L(默认为1位)等;
(2)建表前应对此表的结构、内容,做到心中有数,即清楚要有几列、取什么名字、什么类型、宽度多大;
(3)在建立表之前,应先建立一个数据库。在此库中定义表。
建立数据库:CREATE DATABASE 数据库名
(4)以前的数据库操作命令:CREATE 表名 → 进入“表设计器”
2.表的删除:删除一个表
DROP TABLE 表名说明:
(1)直接从磁盘上删除表名所对应的.dbf文件;
(2)如果表是数据库中的表,则从数据库中删除此表(对数据库中的表,应先打开数据库,再删除表,否则以后会出现错误信息)。
3.表结构的修改:类似“表设计器”的操作
(1)添加∕修改字段
ALTER TABLE 表名 ADD/ALTER 字段名 类型(宽度[,小数])
说明:
① 可添加(ADD)字段或修改字段(ALTER),字段名后应带类型和宽度;
② 不能修改字段名和删除字段。
(2)删除字段、更改字段名
ALTER TABLE 表名 DROP 字段名 RENAME 字段名1 TO 字段名2
说明:
① DROP 字段名 从指定表中删除指定字段。
② RENAME 字段名1 TO 字段名2 从指定表中将字段名1改为字段名2
③ 或,
ALTER TABLE 表名 DROP 字段名 删除字段
ALTER TABLE 表名 RENAME 字段名1 TO 字段名2  修改字段名
注:表结构修改的操作在第3章中修改表结构中是用“表设计器”和命令“MODIFY STRUCTURE”进行的
【实验内容】
二、SQL定义语句
1.表的定义(CREATE)
(1)创建“学生表A”:学号(C,8)、姓名(C,6)、、入学成绩(N,3)
(2)在D盘根目录下创建“学生表B”:学号(C,8)、姓名(C,6)、入学成绩(N,5,1)、简历(M)、相片(G)
(3)在D盘根目录下先创建一个数据库“学生管理”,在此数据库中创建“学生表C”:学号(C,8)、姓名(C,6)、出生日期(D)、入学成绩(N,5,1)
2.表的删除:(DROP)
(1)删除D 盘根目录中的“学生表A”
(2)删除D 盘根目录的数据库“学生管理”中的“学生表C”
3.表结构的修改(ALTER)
(1)添加∕修改字段
1)添加字段
① 在D盘根目录的“学生表B”中添加一个N(2)类型的字段:年龄
② 在D盘根目录的“学生表B”中添加两个字段:班级(C,8)、团员否(L)
2)修改字段
① 将D盘根目录的“学生表B”中姓名字段的宽度由原来的6改为8
② 将D盘根目录的“学生表B”中学号字段的类型改成N型、宽度改为6(1位小数)
(2)删除字段、更改字段名
1)删除字段
① 将Xscj表中的“等级”字段删除
② 将D盘根目录的“学生表B”的“年龄”字段删除
2)更改字段名
① 将Xscj表中的“平均”字段改名为“平均分”
② 将D盘根目录的“学生表B”中字段“相片”改名为“像片”
4.综合练习
(1)在D盘根目录中创建如下表的“学生表A”(见P43)
字段名
字段类型
字段宽度
小数点
学号
字符型
8
姓名
字符型
8
性别
字符型
2
出生日期
日期型
8
团员否
逻辑型
1
入学成绩
数值型
6
2
班级
字符型
10
照片
通用型
4
简历
备注型
4
(2)为“学生表A”中添加一个字符型字段“系别”(宽度:10)
(3)将“学生表A”的字段“出生日期”改成“出生年月”
(4)将“学生表A”的“入学成绩”字段的宽度改为3,小数去掉
(5)将“学生表A”的“团员否”字段改为字符型,宽度改为2
(6)将“学生表A”的“班级”字段删除
(7)删除“学生表A”
【高手进阶】
(1)在D盘根目录中创建如下表的“学生表B”
字段名
字段类型
字段宽度
学号
字符型
7
专业
字符型
4
姓名
字符型
6
性别
字符型
2
出生年月
日期型
8
团员
逻辑型
1
(2)用“INSERT”命令为“学生表B”添加如下三条记录学号
专业
年级
姓名
性别
出生年月
团员
9103001
通讯
91
张佳
女
09/23/82
.T.
9101016
软件
91
陈莉
男
11/03/83
.T.
9102015
应用
91
王磊
男
04/26/82
.F.
注:用“INSERT”命令可对当前表插入记录
INSERT INTO 表名 VALUES(对应列名1的值,...,对应列名n的值)
【自我测试】( 5分钟 )
(1)在D盘根目录中创建如下表的“学生表C”
字段名
字段类型
字段宽度
小数点
学号
字符型
6
班级
字符型
6
姓名
字符型
6
出生年月
日期型
8
入学成绩
数值型
5
2
(2)为“学生表C”中添加一个字符型字段“性别”(宽度:2)
(3)将“学生表C”的“班级”字段删除
【实验过程】
二、SQL定义语句
1.表的定义(CREATE)
(1)创建“学生表A”:学号(C,8)、姓名(C,6)、、入学成绩(N,3)
[解答]
CREATE TABLE 学生表A (学号 C(8),姓名 C(6),出生日期 D,入学成绩 N(3))
注意:
字段名后加一空格再输入数据类型后用括号输入宽度,系统默认的宽度就不输入;
所有字段内容用一括号括起紧接在表名的后面。
(2)在D盘根目录下创建“学生表B”:学号(C,8)、姓名(C,6)、入学成绩(N,5,1)、简历(M)、相片(G)
[解答]
CREATE TABLE D:\学生表B (学号 C(8),姓名 C(6),入学成绩 N(5,1),简历 M,相片 G)
(3)在D盘根目录下先创建一个数据库“学生管理”,在此数据库中创建“学生表C”:学号(C,8)、姓名(C,6)、出生日期(D)、入学成绩(N,5,1)
[解答]
CREATE DATABASE D:\学生管理 先建立数据库
CREATE TABLE 学生表C (学号 C(8),姓名 C(6),出生日期 D,入学成绩 N(5,1))
2.表的删除(DROP)
(1)删除D 盘根目录中的“学生表A”
[解答]
DROP TABLE D:\学生表A
(2)删除D 盘根目录的数据库“学生管理”中的“学生表C”
[解答]
OPEN DATABASE D:\学生管理 先打开数据库
DROP TABLE 学生表C
另类删除:可通过Windows的删除命令进行删除。但对数据库中的表最好移出去再删除。
3.表结构的修改(ALTER)
(1)添加∕修改字段
1)添加字段
① 在D盘根目录的“学生表B”中添加一个N(2)类型的字段:年龄
ALTER TABLE D:\学生表B ADD 年龄 N(2)
注:字段名后加一空格再带类型和宽度
② 在D盘根目录的“学生表B”中添加两个字段:班级(C,8)、团员否(L)
[解答]
ALTER TABLE D:\学生表B ADD 班级 C(8) ADD 团员否 L
注:添加两个字段,要用两个ADD语句
2)修改字段(类型和宽度)
① 将D盘根目录的“学生表B”中姓名字段的宽度由原来的6改为8
[解答]
ALTER TABLE D:\学生表B ALTER 姓名 C(8)
注:表名后用ADD 字段名 类型(宽度)是添加一个字段;
用ALTER字段名 类型(宽度)可修改字段的类型、宽度,但不能修改字段名。
② 将D盘根目录的“学生表B”中学号字段的类型改成N型、宽度改为6(1位小数)
[解答]
ALTER TABLE D:\学生表B ALTER 学号 N(6,1)
注:① 只要直接写入新的字段类型或宽度即可;② 不能修改字段名和删除字段。
(2)删除字段、更改字段名
1)删除字段
① 将Xscj表中的“等级”字段删除
[解答]
ALTER TABLE Xscj DROP 等级
② 将D盘根目录的“学生表B”的“年龄”字段删除
[解答]
ALTER TABLE D:\学生表B DROP 年龄
2)更改字段名
① 将Xscj表中的“平均”字段改名为“平均分”
[解答]
ALTER TABLE Xscj RENAME 平均 TO 平均分
② 将D盘根目录的“学生表B”中字段“相片”改名为“像片”
[解答]
ALTER TABLE D:\学生表B RENAME 相片 TO像片
4.综合练习
(1)在D盘根目录中创建如下表的“学生表A”(见P43)
字段名
字段类型
字段宽度
小数点
学号
字符型
8
姓名
字符型
8
性别
字符型
2
出生日期
日期型
8
团员否
逻辑型
1
入学成绩
数值型
6
2
班级
字符型
10
照片
通用型
4
简历
备注型
4
[解答]
CREATE TABLE 学生表A (学号 C(8),姓名 C(8),性别 C(2),出生日期 D,;
团员否 L,入学成绩 N(6,2),班级 C(10),照片 G,简历 M)
(2)为“学生表A”中添加一个字符型字段“系别”(宽度:10)
[解答]
ALTER TABLE 学生表A ADD 系别 C(10)
(3)将“学生表A”的字段“出生日期”改成“出生年月”
[解答]
ALTER TABLE 学生表A RENAME 出生日期 TO 出生年月
(4)将“学生表A”的“入学成绩”字段的宽度改为3,小数去掉
[解答]
ALTER TABLE 学生表A ALTER 入学成绩 N(3)
(5)将“学生表A”的“团员否”字段改为字符型,宽度改为2
[解答]
ALTER TABLE 学生表A ALTER 团员否 C(2)
(6)将“学生表A”的“班级”字段删除
[解答]
ALTER TABLE 学生表A DROP 班级
(7)删除“学生表A”
[解答]
DROP TABLE 学生表A
【高手进阶解答】
(1)在D盘根目录中创建如下表的“学生表B”
字段名
字段类型
字段宽度
学号
字符型
7
专业
字符型
4
姓名
字符型
6
性别
字符型
2
出生年月
日期型
8
团员
逻辑型
1
[解答]
CREATE TABLE 学生表B (学号 C(7),专业 C(4),姓名 C(6),性别 C(2),;
出生年月 D,团员 L
(2)用“INSERT”命令为“学生表B”添加如下三条记录学号
专业
年级
姓名
性别
出生年月
团员
9103001
通讯
91
张佳
女
09/23/82
.T.
9101016
软件
91
陈莉
男
11/03/83
.T.
9102015
应用
91
王磊
男
04/26/82
.F.
INSERT INTO 学生表B VALUES(“9103001”,”通讯”,”91”,”张佳”,”女”,{^1982-09-23},.T.)
INSERT INTO 学生表B VALUES(“9101016”,”软件”,”91”,”陈莉”,”男”,{^1983-11-03},.T.)
INSERT INTO 学生表B VALUES(“9102015”,”应用”,”91”,”王磊”,”男”,{^1982-04-26},.F.)
注:一条命令只能添加一条记录
【自我测试解答】( 5分钟 )
(1)在D盘根目录中创建如下表的“学生表C”
字段名
字段类型
字段宽度
小数点
学号
字符型
6
班级
字符型
6
姓名
字符型
6
出生年月
日期型
8
入学成绩
数值型
5
2
[解答]
CREATE TABLE 学生表C (学号 C(6),班级 C(6),姓名 C(6),;
出生年月 D,入学成绩 N(5,2)
(2)为“学生表C”中添加一个字符型字段“性别”(宽度:2)
[解答]
ALTER TABLE 学生表C ADD 性别 C(2)
(3)将“学生表C”的“班级”字段删除
[解答]
ALTER TABLE 学生表C DROP 班级
练习五 SQL操作功能
【实验目的】
1.掌握SQL操作功能语句的操作;
2.熟练掌握表记录的更新(UPDATE);
3.熟练掌握表记录的插入(INSERT);
4.熟练掌握表记录的删除(DETELE)。
【知识要点】
1.表记录的更新:更新满足条件的记录的字段值,类似替换命令REPLACE
UPDATE 表名 SET 字段名1 = 表达式1 [,字段名2 = 表达式2,… ];
WHERE 条件式说明:
(1)该语句一次可更新多个字段的值;
(2)不使用WHERE子句,则更新所有记录;
(3)此语句类似REPLACE命令。
2.表记录的插入:按指定字段名顺序在表末尾插入用表达式表示字段值的一条记录
INSERT INTO 表名 [字段名1,字段名2,……] VALUES[表达式1,表达式2,……]
说明:
(1)[字段名1,字段名2,……]是用来指定表中的(部分)字段名;[表达式1,表达式2,……]为指定字段的具体记录值,它要与前面的字段名一一对应;
(2)若无[字段名1,字段名2,……],则是对所有字段追加记录,这时的记录必须与表结构中的字段名一一对应;
(3)此命令是用以编程方式在表末尾追加一条记录。
3.表记录的删除:为表中满足条件的记录作删除标记
DELETE FORM 表名 WHERE 条件式说明:
(1)删除表中满足条件的记录。若无条件项,则删除所有记录;
(2)此语句类似DELETE命令,只对记录作删除标记;
(3)要彻底删除记录,必须使用PACK命令(也可用RECALL命令撤消标记)。
【实验内容】
三、SQL操作语句
1.表记录更新(UPDATE)
修改数据后,用“查询”语句“SELECT * FROM 表名”观看修改后的结果
(1)计算Xscj表的总分
(2)在Xscj表中将总分在330分以上(含330)的等级设置为合格,330分以下的为不合格。
(3)将Xscj表中学号为“10100116”的“计算机”成绩增加20分
(4)将Xscj表中“英语”成绩>80分的增加10%
(5)将成绩表中,学“1011”号课及学“2020”号课的,成绩增加10分
(6)将成绩表中学号为“05031003”的“3002”号课成绩增加20分
(7)将成绩表中学号3、4位是“02”的“成绩”增加20分
(8)将学生表中班级是“金融”的前面加上“经贸”二字
(9)将学生表中学生“王大发”的入学成绩增加10分,并把性别改为“女”
2.表记录的插入(INSERT)
(1)在成绩表插入下面两条记录学号
课程号
成绩
05011001
1031
91
05021012
2020
76
(2)在学生表插入下面两条记录学号
班级
姓名
性别
出生日期
团员否
05031015
会计
张三风
女
03/28/86
.T.
05021018
金融
段誉
男
04/01/85
.F.
3.表记录的删除(DELETE)此语句仅对记录作删除标记
(1)删除学生表中入学成绩低于500分的男生记录
(2)从Xsda表中删除计算机系的重庆学生的记录。
(3)将Xscj表中“计算机”成绩在60到79分之间的记录删除
(4)将学生表中姓“张”的学生记录删除
(5)将学生表中不是“团员”的学生记录删除
4.综合运用:06计算机等级考试模拟试卷[二级(数据库)上机考试]
1、建立一个图书交易管理数据库,文件名为SJY.DBC,并输入数据(30分)该数据库有两个数据表:书籍表SJ.DBF和交易表JY.DBF。其数据形式如下:
书号
书名
2030
计算机原理
4644
离散数学
6426
软件工程
3535
高等数学
3376
经济法
3679
大学语文
4636
大学英语
5675
基础会计
书籍表SJ.DBF
交易表JY.DBF
书号
已售
定价
册数
总金额
2030
.T.
21.20
134
4644
.F.
17.60
128
6426
.T.
30.00
69
3535
.F.
18.80
306
3376
.T.
22.30
238
3679
.T.
19.00
112
4636
.F.
25.40
168
5675
.F.
18.50
280
要求:将数据库(SJY.DBC)中的SJ.DBF和JY.DBF两表以”书号”建立一对多的永久关系。[注:已售为真(,T.),即此书已销售 ]
2、操作数据库表。要求将相关命令保留到程序文件CQEEC61.PRG中(40分)。
注:使用VFP数据表操作命令或者VFP-SQL命令,一个任务可由若干个命令组成,请用注释语句标注题号。
(1)根据股份和册数计算每次交易的总金额,并将计算结果写入JY.DBF表中;
(2)查询已经交易的股票信息,要求显示书名,册数,股份及交易总金额,已经交易的为.T.
(3)按已售汇总册数和交易总金额,并显示已售和汇总后的册数和交易总金额
(4)将JY.DBF中还没有交易的股票逻辑删除。
3、程序填空,要求输入并完善程序,程序文件名为PROG061.PRG(30分)
注:在程序开头,必须用注释语句输入学校名,准考证号,姓名以下程序的功能是能反复输入书号(按‘Q’键退出),并输出该书籍的销售情况,格式为:“书名,已售,销售总金额”最后输出该书籍已经销售的总数量和总金额。
程序代码:
SELECT 1
USE SJ
INDEX ON 书号 TAG SH
SELECT 2
USE JY
SET RELATION TO 书号 INTO A
X=.T.
DO WHILE X
ACCEPT "请输入书号:" TO DM
IF UPPER(ALLTRIM(DM))="Q"

LOOP
ENDIF
"书名 已售 册数 销售金额"
SCAN FOR ②
A.书名,已售,册数,总金额
ENDSCAN
CALCULATE ③ TO S1,S2 FOR NOT 已售 AND 书号=DM
"该书籍已经销售的总数量 总金额"
S1,S2
ENDDO
CLOSE ALL
SET TALK ON
RETURN
【高手进阶】
(1)将学生表中学生“章立新”的各科成绩全更新为0(要用两个表,从学生表中找章立新的学号,从成绩表中将此学号的成绩更新为0)
(2)将学生表中学生“迪来”的各科成绩从成绩表中删去
【自我测试】( 5分钟)
对Xsda表和Xscj表,使用VFP-SQL命令和VFP数据表操作命令,完成下列操作。
(1)显示学号是“101”开头的学生学号、姓名、性别和年龄;
(2)计算学生的总分和平均分,并显示结果;
(3)计算英语和计算机的总分和平均分,并显示结果;
(4)显示计算机系学生的高数、英语、计算机成绩及这三科的总分。
【实验过程】
三、SQL操作语句
1.表记录更新(UPDATE)
修改数据后,用“查询”语句“SELECT * FROM 表名”观看修改后的结果
(1)计算Xscj表的总分
[解答]
UPDATE Xscj SET 总分 = 高数+大语+邓论+英语+计算机
或:(使用VFP数据表操作命令。注意看看有什么地方不同)
USE Xscj
REPLACE 总分 WITH高数+大语+邓论+英语+计算机 ALL
(2)在Xscj表中将总分在330分以上(含330)的等级设置为合格,330分以下的为不合格。
[解答]
UPDATE Xscj SET 等级="合格" WHERE 总分 >= 330
UPDATE Xscj SET 等级="不合格" WHERE 总分 < 330
[因条件不一样,所以用两条更新语句]
(3)将Xscj表中学号为“10100116”的“计算机”成绩增加20分
[解答]
UPDATE Xscj SET 计算机=计算机+20 WHERE 学号=”10100116”
(4)将Xscj表中“英语”成绩>80分的增加10%
[解答]
UPDATE Xscj SET 英语=英语*1.1 WHERE 英语>80
(5)将成绩表中,学“1011”号课及学“2020”号课的,成绩增加10分
[解答]
UPDATE 成绩表 SET 成绩=成绩+10 WHERE 课程号=”1011” or 课程号=”2020”
(6)将成绩表中学号为“05031003”的“3002”号课成绩增加20分
[解答]
UPDATE 成绩表 SET 成绩=成绩+20 WHERE 学号=”05031003” and 课程号=”3002”
(7)将成绩表中学号3、4位是“02”的“成绩”增加20分
[解答]
UPDATE 成绩表 SET 成绩=成绩+20 WHER 学号LIKE,__02%”
或:UPDATE 成绩表 SET 成绩=成绩+20 WHERE SUBSTR(学号,1,2)=”02”
(8)将学生表中班级是“金融”的前面加上“经贸”二字
UPDATE 学生表 SET 班级=”经贸金融” WHERE 班级=”金融”
(9)将学生表中学生“王大发”的入学成绩增加10分,并把性别改为“女”
[解答]
UPDATE 学生表 SET 入学成绩=入学成绩+10,性别=”女” WHERE 姓名=”王大发”
2.表记录的插入(INSERT)
(1)在成绩表插入下面两条记录学号
课程号
成绩
05011001
1031
91
05021012
2020
76
[解答]注意:一条命令只能插入一条记录
INSERT INTO 成绩表 VALUES(“05011001”,”1031”,91)
INSERT INTO 成绩表 VALUES(“05021012”,”2020”,76)
(2)在学生表插入下面两条记录学号
班级
姓名
性别
出生日期
团员否
05031015
会计
张三风
女
03/28/86
.T.
05021018
金融
段誉
男
04/01/85
.F.
[解答]注意:不是对表中所有字段进行操作
INSERT INTO 学生表(学号,班级,姓名,性别,出生日期,团员否) ;
VALUES(“05031015”,”会计”,”张三风”,”女”,{^1986-03-28},.T.)
INSERT INTO 学生表(学号,班级,姓名,性别,出生日期,团员否) ;
VALUES(“05021018”,”金融”,”段誉”,”男”,CTOD(“04/01/85”),.F.)
注意:对字段名要用括号括起;字段内容的顺序要与字段名对齐;两种不同的日期语句
3.表记录的删除(DELETE)此语句仅对记录作删除标记
(1)删除学生表中入学成绩低于500分的男生记录
[解答]
DELETE FROM 学生表 WHERE 入学成绩<500 AND 性别="男"
或:(使用VFP数据表操作命令)
USE 学生表
DELETE FOR 入学成绩<500 AND 性别="男"
(2)从Xsda表中删除计算机系的重庆学生的记录。
[解答]
DELETE FROM 学生表 WHERE 系别 ="计算机系" AND 籍贯="重庆"
(3)将Xscj表中“计算机”成绩在60到79分之间的记录删除
[解答]
DELETE FROM Xscj WHERE 计算机 BETWEEN 60 AND 79
或:DELETE FROM Xscj WHERE 计算机>=60 and 计算机<=79
(4)将学生表中姓“张”的学生记录删除
[解答]
DELETE FROM 学生表 WHERE 姓名 LIKE,张%”
或:DELETE FROM 学生表 WHERE SUBSTR(姓名,1,2) =,张”
(5)将学生表中不是“团员”的学生记录删除
[解答]
DELETE FROM 学生表 WHERE 团员=.F.
或:DELETE FROM 学生表 WHERE NOT 团员注:“NOT 团员”表示不是团员;或用“团员=.F.”(“团员”字段为假)表示
4.综合运用,06计算机等级考试模拟试卷[二级(数据库)上机考试]
1、建立一个图书交易管理数据库,文件名为SJY.DBC,并输入数据(30分)
该数据库有两个数据表:书籍表SJ.DBF和交易表JY.DBF。其数据形式如下:
书号
书名
2030
计算机原理
4644
离散数学
6426
软件工程
3535
高等数学
3376
经济法
3679
大学语文
4636
大学英语
5675
基础会计
书籍表SJ.DBF
交易表JY.DBF
书号
已售
定价
册数
总金额
2030
.T.
21.20
134
4644
.F.
17.60
128
6426
.T.
30.00
69
3535
.F.
18.80
306
3376
.T.
22.30
238
3679
.T.
19.00
112
4636
.F.
25.40
168
5675
.F.
18.50
280
要求:将数据库(SJY.DBC)中的SJ.DBF和JY.DBF两表以”书号”建立一对多的永久关系,[注:已售为真(,T.),即此书已销售 ]
[解答]
两表已建好,自己在数据库(SJY.DBC)中建一对多的永久关系(在数据库中,先建索引,父表要设为主索引,然后用鼠标拖索引标记到子表)
2、操作数据库表。要求将相关命令保留到程序文件CQEEC61.PRG中(40分)。
注:使用VFP数据表操作命令或者VFP-SQL命令,一个任务可由若干个命令组成,请用注释语句标注题号。
(1)根据股份和册数计算每次交易的总金额,并将计算结果写入JY.DBF表中;
[解答]
SQL语句:
UPDATE JY SET 总金额 = 册数*定价
VFP数据表操作命令
USE JY
REPLACE ALL 总金额 WITH 册数*定价
(2)查询已经交易的股票信息,要求显示书名,册数,股份及交易总金额,已经交易的为.T.
[解答]
SQL语句:
SELECT 书名,册数,定价,总金额 FROM SJ,JY ;
WHERE SJ.书号=JY.书号 AND 已售
VFP数据表操作命令
SELECT 1
USE SJ
INDEX ON 书号 TAG DM
SELECT 2
USE JY
SET RELATION TO 书号 INTO SJ
LIST SJ.书名,册数,定价,总金额 FOR 已售 OFF
(3)按已售汇总册数和交易总金额,并显示已售和汇总后的册数和交易总金额
[解答]
SQL语句:
SELECT 已售,SUM(册数),SUM(总金额) ;
FROM JY GROUP BY 已售
VFP数据表操作命令
USE JY
INDEX ON 已售 TAG LX
TOTAL ON 已售 TO HZ
USE HZ
LIST 已售,册数,总金额 OFF
(4)将JY.DBF中还没有交易的股票逻辑删除。
[解答]
SQL语句:
DELETE FROM JY WHERE NOT 已售
[注:“NOT 已售”,表示已售为假(,F.),即此书没销售]
VFP数据表操作命令
USE JY
DELETE FOR NOT 已售
3、程序填空,要求输入并完善程序,程序文件名为PROG0621.PRG(30分)
注:在程序开头,必须用注释语句输入学校名,准考证号,姓名以下程序的功能是能反复输入书号(按‘Q’键退出),并输出该股票的交易情况,格式为:“书名,已售,交易总金额”最后输出该股票已经交易的总数量和总总金额。
程序代码:
[解答]
① X=.F,
② 书号=DM
③ SUM(册数),SUM(总金额)
【高手进阶解答】
(1)将学生表中学生“章立新”的各科成绩全更新为0(要用两个表,从学生表中找章立新的学号,从成绩表中将此学号的成绩更新为0)
[解答]
UPDATE 成绩表 SET 成绩= 0 WHERE 学号 = ;
(SELECT学号 FROM 学生表 WHERE 姓名= "章立新")
(2)将学生表中学生“迪来”的各科成绩从成绩表中删去
[解答]
DELETE FROM 成绩表 WHERE 学号 = ;
(SELECT 学号 FROM 学生表 WHERE 姓名="迪来")
【自我测试解答】( 5分钟 )
对Xsda表和Xscj表,使用VFP数据表操作命令和VFP-SQL命令,完成下列操作。
(1)显示学号是“101”开头的学生学号、姓名、性别和年龄;
[解答]
SQL语句:
SELECT 学号,姓名,性别,年龄 FROM Xsda WHERE 学号 LIKE "101%"
VFP数据表操作命令
USE Xsda
LIST学号,姓名,性别,年龄 FOR SUBSTR(学号,1,3) = "101"
(2)计算学生的总分和平均分,并显示结果;
[解答]
SQL语句:
UPDATE Xscj SET 总分=高数+大语+邓论+英语+计算机,平均=总分/5
注:也可写成两句,分别计算
VFP数据表操作命令
USE Xscj
REPLACE 总分 WITH 高数+大语+邓论+英语+计算机,平均 WITH 总分/5 ALL
(3)计算英语和计算机的总分和平均分,并显示结果;
[解答]
SQL语句:
SELECT SUM(英语),SUM(计算机),AVG(英语),AVG(计算机) FROM Xscj
VFP数据表操作命令
USE Xscj
SUM 英语,计算机 TO F1,F2
AVERAGE 英语,计算机TO E1,E2
或:CALCULATE SUM(英语),SUM(计算机),AVG(英语),AVG(计算机) TO F1,F2,E1,E2
" 英语总分 计算机总分 英语平均分 计算机平均分"
F1,F2,E1,E2
注意:这两个总分和平均分是不同的,(3)题是对字段计算(按列),而(2)题是对每条记录计算(按行)。它们所用的命令是完全不同的。
(4)显示计算机系学生的高数、英语、计算机成绩及这三科的总分。
[解答]
SQL语句:
SELECT 系别,姓名,高数,英语,计算机 FROM Xsda,Xscj ;
WHERE Xsda.学号 = Xscj.学号 AND 系别=,计算机系”
VFP数据表操作命令
SELECT 1
USE Xsda
INDEX ON 学号 TAG XH
SELECT 2
USE Xscj
SET RELATION TO 学号 INTO A
LIST FIELDS A.系别,A.姓名,高数,英语,计算机FOR A.系别=“计算机系”
CLOSE ALL
RETURN

第5章 项目管理器的使用练习一 项目管理器基本操作
【实验目的】
1.掌握项目管理器基本操作;
【知识要点】
一、项目管理器简介在Visual FoxPro系统中,使用项目组织、集成数据库应用系统中所有相关的文件,形成一个完整的应用系统。所谓项目是Visual FoxPro中相关数据、文档和各类文件、对象的集合,也即项目是与一个应用有关的所有文件的集合。项目管理器是Visual FoxPro系统创建、管理项目的工具,用来创建、修改、组织项目中各种文件,对项目中程序进行编译和连编,形成一个可以运行的应用程序系统。
1.创建项目创建项目就是创建一个项目文件(扩展名为.PJX)
(1)“文件/新建”-(类型)选“项目” -,新建文件”钮 - 输入项目文件名并确定存放位置。
(2)CREATE PROJECT <项目文件名>
2.打开项目打开项目就是打开项目管理器
(1)创建项目后,系统自动进入项目管理器
(2)”文件/打开” -(类型)选,项目” - 选定文件 -,确定”钮
3.项目管理器的选项卡
 
项目管理器有6个选项卡
(1)数据:数据库(视图),自由表、查询
(2)文档:表单、报表、标签
(3)类库:
(4)代码:程序、API库、应用程序
(5)其它:文本文件、菜单、其它文件
(6)全部:以上五类
4.使用项目管理器
(1)创建文件
① 选定类型-,新建”钮-进入相应的设计器
② 选定类型-,项目/新建文件” -进入相应的设计器
(2)添加文件
① 选定类型-,添加”钮-选择要添加的文件-“确定”
② 选定类型-,项目/添加文件” -选择要添加的文件-“确定”
注意:新建和添加的文件并不是成为“项目”的一部分,而是此文件与项目间建立了一种“关联”。
(3)修改文件
① 选定文件-,修改”钮-进入相应的设计器,进行修改
② 选定文件-,项目/修改文件” -进入相应的设计器
(4)移去文件
① 选定文件-,移去”钮-选择“移去”(或“删除”)
② 选定文件-,项目/移去文件” -选择“移去”(或“删除”)
移去:将文件从“项目管理器”中移出
删除:将文件从磁盘中删除,要谨慎操作
(5)其它按钮
①,浏览” 显示选定“表”的内容
②,运行” 运行选定的“程序”或“表单”
③,预览” 显示选定的“报表”或“标签”
【实验内容】
一、项目管理器基本操作
1.新建一个项目DEMO.PJX:
(1)在里面新建一个自由表DEMO.DBF(学号,C,6;姓名,C,6);
(2)新建一个数据库学生基本信息.DBC;
(3)将学生表和成绩表添加到学生基本信息.DBC里;
(4)新建一个程序文件:在屏幕上输出“你好,欢迎学习VF程序设计!”。
第6章 Visual FoxPro程序设计练习一 程序文件的建立
【实验目的】
熟练掌握程序文件的建立、修改、运行;
熟练掌握键盘输入命令;
熟练掌握顺序结构基本操作。
【知识要点】
一、程序文件的建立、修改和运行
1.建立程序:
(1)MODIFY COMMAND 程序名
(2)“文件/新建”-(类型)选“程序”-“新建文件”-输入程序内容
2.修改程序:
(1)MODIFY COMMAND 程序名
(2)“文件/打开”- (类型)选“程序”- 选定程序
3.运行程序:
(1)DO 程序名
(2)“程序/运行”- 选定程序
(3)(程序编辑状态中)单击“运行”钮二、交互式输入命令:
1.ACCEPT命令:
格式:ACCEPT[提示信息]TO 内存变量功能:先显示提示信息,然后等待键盘上录入的字符型数据并存入内存变量说明:输入的字符型数据可不用加引号。只能输入字符型数据。
2.INPUT命令:
格式:INPUT[提示信息]TO 内存变量功能:先显示提示信息,然后等待从键盘上录入的数据(C、N、L、D型)并存入指定的内存变量。常用于输入数值型数据。输入的字符型数据要加引号。
3.WAIT命令:
格式:WAIT[提示信息][TO 内存变量]
功能:暂停程序的运行,在屏幕上显示提示信息,然后等待从键盘上录入的任一字符并存入指定的内存变量。常用于暂停。
三、顺序结构
1.功能:顺次、逐条地执行程序中的命令。
2.要点:
(1)弄清要解决的问题
(2)设计出解决问题的方法、步骤
(3)针对每个步骤选择适当的命令
(4)严格按照次序把命令记录下来
3.程序中常用的开头部分:
CLEAR 清屏
SET DATE YMD 设置日期格式为年月日
SET TALK OFF 关闭人机对话
SET DEFAULT TO [盘符:\路径] 设置默认路径
SET SAFETY OFF 关闭文件或数据重写时出现的对话框
4.程序中常用的结尾部分:
SET TALK ON 打开人机对话
CANCEL 清除变量,返回到交互方式状态
RETURN 返回调用程序处
QUIT 退出VFP
USE 关闭已打开的表
【实验内容】
一、程序文件的建立、修改和运行
1.编写一个程序:从键盘输入一个正数,求以此数为半径的圆面积。
2.编一个程序:任意输入两个数,计算它们的和、差、积、商并输出到屏幕上。
3.在学生表.DBF中,输入学号,查找该学号的记录,并为该记录做上删除标记。
【高手进阶】
在“学生表”和“成绩表”中,输入学生姓名,则可查出该生的成绩。
编一个根据学生的计算机分数自动确定其等级的程序。
【自我测试】( 5分钟 )
1.为程序中每条语句加以注释,说明该语句的的作用。
SET TALK OFF
SET DEFA TO D:\VFP程序设计\表
CLEAR
SELECT 1
USE 成绩表
INDEX ON 学号 TAG XH
SELECT 2
USE 学生表
SET RELATION TO 学号 INTO 1
GO 4
DISPLAY 学号,姓名,成绩.英语,成绩.计算机
【实验过程】
一、程序文件的建立、修改和运行
1.编写一个程序:从键盘输入一个正数,求以此数为半径的圆面积。
[解答]
CLEAR
SET TALK OFF
INPUT,请输入一个正数:” TO R
S=R*R*3.14
,以”+R+”为半径的圆的面积为:”,S
SET TALK ON
RETURN
2.编一个程序:任意输入两个数,计算它们的和、差、积、商并输出到屏幕上。
[解答]
CLEAR
SET TALK OFF
INPUT,请输入第一个数:” TO A && 用户从键盘输入一个数到变量A
INPUT,请输入第二个数:” TO B && 用户从键盘输入一个数到变量B
S1=A+B
S3=A-B
S3=A*B
S4=A/B
,此两个数的和为:”+STR(S1,7,2) && 函数STR()是将数值型转为字符型
,此两个数的差为:”+STR(S2,7,2) && 限定只有4位数,及2位小数
,此两个数的积为:”+STR(S3)
,此两个数的商为:”+STR(S4,7,2)
SET TALK ON
RETURN
3.在学生表.DBF中,输入学号,查找该学号的记录,并为该记录做上删除标记。
[解答]
CLEAR
SET TALK OFF
CLOSE ALL
USE 学生
ACCEPT,请输入学生学号:” TO XH
LOCATE FOR 学号=XH
DISPLAY
DELETE
USE
SET TALK ON
RETURN
【高手进阶解答】
在“学生”和“成绩”表中,输入学生姓名,则可查出该生的成绩。
[解答] 因要用两个表,故要建关联
CLEAR
SET TALK OFF
SELECT 1
USE 成绩
INDEX ON 学号 TAG XH && 为成绩表(对学号)建立索引(名叫XH)
SELECT 2
USE 学生
*INDEX ON 学号 TAG XH && 父表可不建索引
*SET ORDER TO XH
SET RELATION TO 学号 INTO 1 && 按“学号”对1区的成绩表建立关联
ACCEPT,请输入学生的姓名:” TO AA
BROWSE FIELDS 学号,姓名,成绩.高数,成绩.大语,;
成绩.邓论,成绩.英语,成绩.计算机,成绩.总分 FOR 姓名=AA
&&子表记录前要加前缀:“别名->”或“别名.”
  RETURN
编一个根据学生的计算机分数自动确定其等级的程序。
[解答]
CLEAR
SET TALK OFF
SET DEFA TO C:\VFP程序设计\表
USE 成绩
REPLACE ALL 等级 WITH,不及格” FOR 计算机<60 && 替换操作
REPLACE ALL 等级 WITH,及格” FOR计算机>=60 AND计算机<75
REPLACE ALL 等级 WITH,良” FOR计算机>=75 AND计算机<90
REPLACE ALL 等级 WITH,优” FOR S计算机>=90 AND计算机<=100
LIST
RETURN
【自我测试解答】
1.为程序中每条语句加以注释,说明该语句的的作用。
[解答]
SET TALK OFF && 关闭人机对话
SET DEFA TO D:\VFP程序设计\表 && 设置默认路径
CLEAR && 清屏
SELECT 1 && 指定工作区1为当前工作区
USE 成绩 && 在工作区1中打开表成绩
INDEX ON 学号 TAG XH && 为表成绩(对学号)建立索引
SELECT 2 && 指定工作区2为当前工作区
USE 学生 && 打开父表“学生”
SET RELATION TO 学号 INTO A && 按“学号”对1区的表建立关联
GO 4 && 在“学生”表中移指针到第4条记录
DISP 学号,姓名,成绩.英语,成绩.计算机 && 显示当前记录(两个表中的值)
练习二 程序基本结构:分支结构(一)
【实验目的】
掌握单分支语句的使用;
重点掌握双分支语句的使用。
【知识要点】
分支结构,根据一定的条件,来判断程序的执行方向
1.单分支语句:
(1)格式:IF 条件
命令序列 &&满足条件,则执行命令序列
ENDIF &&不满足条件,则执行ENDIF后面的语句
(2)功能:满足条件,执行“命令序列”。
(3)说明:IF与ENDIF必须配对出现。
2.双分支语句
(1)格式:IF 条件
命令序列1 &&满足条件,则执行命令序列1
[ELSE
命令序列2] &&不满足条件,则执行命令序列2
ENDIF
(2)功能:满足条件,执行“命令序列1”;不满足条件,则执行“命令序列2”
(3)说明:
① 若省略ELSE项,则成为单分支(不满足条件就退出分支语句);
② IF与ENDIF必须配对出现。
3.几种常用条件
(1)FOUND():测试用LOCATE、CONTINUE、FIND、SEEK等命令查找是否成功(常用于“IF┉ENDIF”中)。
(2)NOT EOF():测试是否未到文件尾。即要对所有记录进行操作,一般应加“SKIP”以移动指针。
【实验内容】
编写程序:输入一个数,如果是正数,计算以该正数为半径的圆面积,否则退出程序。
在“学生表”里,编写一个输入姓名,就可显示该记录(若查不到,则显示“查无此人”
的程序。
3.编写一密码校验程序(假设密码为ABC)。[密码正确,显示“欢迎使用本系统!”;不正确,显示“密码错误!”,并退出]
4.编程求Z的值(X、Y的值由键盘输入)
X + Y (当 x > y 时 )
z = X * Y (当 x = y 时 )
X-Y (当 x < y 时 )
5.编写程序:从键盘输入一个数,如果能被3整除,则输出,否则输出“该数不能被3整除!”
【高手进阶】
编写程序,求ax2+bx+c=0的根。
编写程序,其功能是根据键盘输入a、b、c的值,判断它们能否构成三角形的三条边,
若能构成一个三角形,则计算三角形的面积。
【自我测试】( 5分钟 )
1,判断某年是否是闰年,如果是闰年则能被4整除但不能被100整除,或能被400整除。
【实验过程】
1.输入一个数,如果是正数,计算以该正数为半径的圆面积,否则退出程序。
[解答]
CLEAR
SET TALK OFF
INPUT,请输入一个数:” TO R
IF R>0
S=R*R*3.14
ENDIF
SET TALK ON
RETURN
2.学生表”里,编写一个输入姓名,就可显示该记录(若查不到,则显示“查无此人”)的程序。
[解答]
CLEAR
SET TALK OFF
USE 学生
ACCEPT "请输入姓名:" TO NA
LOCATE FOR 姓名=NA
IF FOUND() && 条件:找到此记录
DISPLAY
ELSE && 不满足条件,执行ELSE后面的语句
"查无此人!"
ENDIF
RETURN
编写一密码校验程序(假设密码为ABC)。[密码正确,显示“欢迎使用本系统!”;不正确,显示“密码错误!”,并退出]
[解答]
SET TALK OFF
CLEAR
ACCEPT "请输入您的密码:" TO AAA
IF AAA="ABC"
"欢迎使用本系统!"
ELSE
WAIT "密码错误!"
QUIT
ENDIF
SET TALK ON
RETURNL
编程求Z的值(X、Y的值由键盘输入)
X + Y (当 x > y 时 )
z = X * Y (当 x = y 时 )
X-Y (当 x < y 时 )
[解答]
SET TALK OFF
CLEAR
INPUT "请输入X的值:" TO X
INPUT "请输入Y的值:" TO Y
IF X>Y
Z=X+Y
ELSE
IF X<Y
Z=X*Y
ELSE
Z=X-Y
ENDIF
ENDIF
Z
RETURN
编写程序:从键盘输入一个数,如果能被3和7整除,则输出,否则输出“该数不能被3
和7整除!”
[解答]
SET TALK OFF
CLEAR
INPUT "请输入A的值:" TO A
IF MOD(A,3)=0 AND MOD(A,7)=0
&& 能被N整除的数M的表示方法一共有三种:
&&MOD(M,N)=0;INT(M/N)=M/N;M%N=0
A
ELSE
"该数不能被3和7整除!"
ENDIF
RETURN
【高手进阶解答】
编写程序,求ax2+bx+c=0的根。
[解答]
本题是求方程的根的问题。a、b、c的值是由键盘输入的,可用INPUT命令来实现;另一个问题是求方程的根的问题,涉及到算法的设计。当a=0时,方程是一次根,x=-c/b;当a<>0时,方程是二次方程,及b^2-4*a*c>=0时,方程有实根x=(-b±aqrt(b^2-4*a*c))/(2*a);当b^2-4*a*c<0时,方程有实根x=(-b±aqrt(4*a*c- b^2))/(2*a)。这些判断可用IF…ELSE…ENDIF语句来实现。
SET TALK OFF
CLEAR
INPUT "请输入方程的系数a:" TO a
INPUT "请输入方程的系数b:" TO b
INPUT "请输入方程的系数c:" TO c
IF a=0 AND b<>0
x=-c/b
ELSE
disc=b^2-4*a*c
IF disc>0
x1=(-b+sqrt(disc))/(2*a)
x2=(-b-sqrt(disc))/(2*a)
"方程的根x1、x2分别是",x1,x2
ELSE
xx=-b/(2*a)
xy=sqrt(abs(disc))/(2*a)
"方程的根x1是:",str(xx,4)+ "+i+"+str(xy,2)
"方程的根x1是:",str(xx,4)+ "-i+"+str(xy,2)
ENDIF
ENDIF
RETURN
编写程序,其功能是根据键盘输入a、b、c的值,判断它们能否构成三角形的三条边,若能构成一个三角形,则计算三角形的面积。
[解答]
题目要求三角形的面积由a、b、c的值来决定,并且a、b、c的值又是通过键盘输入的,即要用到INPUT命令;要构成三角形,必须满足两边之和大于第三边的条件,可通过IF…ELSE…ENDIF语句来实现;另一个知识点就是三角形面积的计算s=sqrt(p*(p-a)*(p-b)*(p-c)),p=(a+b+c)/2。
SET TALK OFF
CLEAR
INPUT "请输入三角形的边长a:" TO a
INPUT "请输入三角形的边长b:" TO b
INPUT "请输入三角形的边长c:" TO c
IF a+b>c AND a+c>b AND b+c>a
p=1.0/2*(a+b+c)
area=sqrt(p*(p-a)*(p-b)*(p-c))
"三角形的面积是:"+str(area)
ELSE
"不能构成三角形!"
ENDIF
RETURN
【自我测试解答】
1,判断某年是否是闰年,如果是闰年则能被4整除但不能被100整除,或能被400整除。
[解答]
SET TALK OFF
CLEAR
INPUT "请输入年份:" TO Y
IF Y/4=INT(Y/4),AND,Y/100<>INT(Y/100),OR,Y/400=INT(Y/400)
*IF Y%4=0,AND,Y%100<>0,OR,Y%400=0
*IF MOD(Y,4)=0,AND,MOD(Y,100)<>0,OR,MOD(Y,400)=0
Y,"是闰年!"
ELSE
Y,"不是闰年!"
ENDIF
SET TALK ON
RETURN
练习三 程序基本结构:分支结构(二)
【实验目的】
1.掌握多分支选择语句的使用
【知识要点】
多路分支语句:
(1)格式:DO CASE <变量>
  CASE 条件1
命令系列1 &&满足条件1时,则执行命令系列1
CASE 条件2
命令系列2 &&满足条件2时,则执行命令系列2
  ……
[OTHERWISE
命令系列N+1] &&条件都不满足时,则执行语句系列N+1;
ENDCASE &&分支结束
(2)功能:满足什么条件,就执行其后的“命令系列”;所有条件都不满足,则执行“命令系列n+1”;
(3)说明:
① 若省略OTHERWISE项,则退出分支语句;
② 使用多分支语句,比用多个IF语句更有效。
【实验内容】
1.编程求Z的值(X、Y的值由键盘输入)
X + Y (当 x>y 时 )
z = X * Y (当 x=y 时 )
X-Y (当 x<y 时 )
2.建一个多分支语句的程序,当输入一个学生成绩时,当分数在90以上,则评为“优等”;75-89为“良好”;60-74为“及格”;60分以下为“不及格”。
3.假设收入(P)与税率(R)的关系如下表,编程求税金(=P*R)。
0 P<800
R= 0.05 800 ≤ P<2000
0.08 2000≤P<5000
0.1 P≥5000
【高手进阶】
1.编程计算:
X(X+5) X≥6
(X+5)2 5≤X<6
Y = 1-X 2≤X<5
X*X 0≤X<2
2X X<0
【自我测试】( 5分钟 )
1.执行下程序后Y的值为多少。
SET TALK OFF
CLEAR
STORE 0 TO X,Y
DO WHILE,T.
X = X+1
DO CASE
CASE INT(X/2)=X/2
LOOP
CASE X>=10
EXIT
OTHERWISE
Y=Y+X
ENDCASE
ENDDO
Y
SET TALK ON
RETURN
【实验过程】
1.编程求Z的值(X、Y的值由键盘输入)
X + Y (当 x>y 时 )
z = X * Y (当 x=y 时 )
X-Y (当 x<y 时 )
[解答]
SET TALK OFF
CLEAR
INPUT,请输入X的值:” TO X
INPUT,请输入Y的值:” TO Y
DO CASE
CASE X > Y
Z = X + Y
CASE X = Y
Z = X*Y
CASE X < Y
Z = X-Y
ENDCASE
Z
RETURN
2.建一个多分支语句的程序,当输入一个学生成绩时,当分数在90以上,则评为“优等”;75-89为“良好”;60-74为“及格”;60分以下为“不及格”。
[解答]
CLEAR
SET TALK OFF
INPUT,请输入学生的成绩:” TO GR
DO CASE
CASE GR>=90
,优秀”
CASE GR>=75 AND GR<90
,良好”
CASE GR>=60 AND GR<74
,及格”
CASE GR<60
,不及格”
ENDCASE
RETURN
3.假设收入(P)与税率(R)的关系如下表,编程求税金(=P*R)。
0 P<800
R= 0.05 800 ≤ P<2000
0.08 2000≤P<5000
0.1 P≥5000
[解答]
SET TALK OFF
CLEAR
INPUT,请输入收入:” TO P
DO CASE
CASE P<800
R=0
CASE P<2000
R=0.05
CASE P<5000
R=0.08
OTHERWISE
R=0.1
ENDCASE
TAX=P*R
,税金为:”,TAX
SET TALK ON
RETURN
【高手进阶解答】
1.编程计算:
X(X+5) X≥6
(X+5)2 5≤X<6
Y = 1-X 2≤X<5
X*X 0≤X<2
2X X<0
[解答]
SET TALK OFF
INPUT,请输入自变量X的值:” TO X
DO CASE
CASE X>=6
Y = X*(X+5)
CASE X>=5 AND X<6
Y = (X+5)^2
CASE X>=2 AND X<5
Y = 1-X
CASE X>=0 AND X<2
Y = X*X
CASE X<0
Y = 2*X
ENDCASE
X,Y
SET TALK ON
【自我测试解答】
1.执行下程序后Y的值为多少。
SET TALK OFF
CLEAR
STORE 0 TO X,Y
DO WHILE,T.
X = X+1
DO CASE
CASE INT(X/2)=X/2
LOOP
CASE X>=10
EXIT
OTHERWISE
Y=Y+X
ENDCASE
ENDDO
Y
SET TALK ON
RETURN
[解答]
X = 10,Y = 1+3+5+7+9 = 25
练习四 程序基本结构:循环结构(一)
【实验目的】
1.掌握条件循环语句:DO WHILE的基本使用。
【知识要点】
DO WHILE…ENDDO循环:
(1)格式:DO WHILE 条件表达式
语句序列
[LOOP]
[EXIT]
ENDDO
LOOP语句:强行返回到循环开始语句。
EXIT语句:强行跳出循环,接着执行ENDDO后的语句
(2)功能:进入循环后,先判断<条件>是否成立,成立,则执行一遍循环体,当遇到ENDDO时回到循环头,再次判断<条件>,如仍成立,则又执行循环体,如此反复进行,直到<条件>不成立为止。
(3)说明:重复执行DO与ENDDO间的循环语句,直到不满足条件为止。知道循环条件应使用 DO WHILE 结构。
【实验内容】
1、用DO WHILE循环,求S=1+2+3…+N。
2、用DO WHILE循环,求S=1*2*3…*N。
3、用DO WHILE循环,求出1-100之间不能被3或7整除的数之和,从1开始,知道和大于678为止。
4、用DO WHILE循环,逐条显示在学生表中,性别为“男”的所有记录。
【高手进阶】
1.求任意两个数的最大公约数。
【自我测试】( 5分钟 )
1.执行下程序后Y的值为多少?
SET TALK OFF
CLEAR
STORE 0 TO X,Y
DO WHILE,T,
X = X+1
DO CASE
CASE INT(X/2)=X/2
LOOP
CASE X>=10
EXIT
OTHERWISE
Y=Y+X
ENDCASE
ENDDO
Y
SET TALK ON
RETURN
【实验过程】
1,用DO WHILE循环,求S=1+2+3…+N。
[解答]
SET TALK OFF
CLEAR
INPUT,请输入一个数:” to N
S=0
I=1
DO WHILE I<=N
S=S+I
I=I+1
ENDDO
S
RETIRN
2.用DO WHILE循环,求S=1*2*3…*N。
[解答]
SET TALK OFF
CLEAR
INPUT,请输入一个数:” to N
S=1
I=1
DO WHILE I<=N
S=S*I
I=I+1
ENDDO
S
RETIRN
用DO WHILE循环,求出1-100之间不能被3或7整除的数之和,从1开始,知道和大于678为止。
[解答]
SET TALK OFF
CLEAR
S=0
I=1
DO WHILE I<=100
IF NOD(I,3)=0 OR MOD(I,7)=0
I=I+1
LOOP
ENDIF
S=S+I
IF S>678
EXIT
ENDIF
I=I+1
ENDDO
”I=”,I,”S=”,S
RETURN
4.用DO WHILE循环,逐条显示在学生表中,性别为“男”的所有记录。
[解答]
SET TALK OFF
CLOSE ALL
CLEAR
USE 学生
DO WHILE,NOT,EOF()
IF 性别=”男”
DISPLAY
ENDIF
SKIP
ENDDO
SET TALK ON
RETURN
【高手进阶解答】
求任意两个数的最大公约数。
[解答]
SET TALK OFF
CLEAR
STORE 0 TO MAX,MIN
INPUT,请输入第一个数” TO MAX
INPUT,请输入第二个数” TO MIN
*如果MAX小于MIN,通过交换,使MAX成为两数中较大的数
IF MAX<MIN
TEMP=MIN
MIN=MAX
MAX=TEMP
ENDIF
*通过求余数运算得到最大公约数
DO WHILE MIN <>0
TEMPMIN=MIN
MIN=MAX%MIN &&用MIN存储每次求得的余数
MAX=TEMPMIN
ENDDDO
,最大公约数是:”,MAX
SET TALK ON
RETURN
【自我测试解答】
1.执行下程序后Y的值为多少?
SET TALK OFF
CLEAR
STORE 0 TO X,Y
DO WHILE,T,&& 条件是永远为真,要用“EXIT”强制退出
X = X+1
DO CASE
CASE INT(X/2)=X/2 && 或:X%2=0 或:MOD(X,2)=0 表示X是2 的倍数
LOOP
CASE X>=10
EXIT
OTHERWISE
Y=Y+X
ENDCASE
ENDDO
Y
SET TALK ON
RETURN
[解答] Y=1+3+5+7+9=25
练习五 程序基本结构:循环结构(二)
【实验目的】
1.掌握条件循环语句:DO WHILE的熟练使用
【知识要点】
(1)格式:DO WHILE 条件表达式
语句序列
[LOOP]
[EXIT]
ENDDO
LOOP语句:强行返回到循环开始语句。
EXIT语句:强行跳出循环,接着执行ENDDO后的语句
(2) 功能:进入循环后,先判断<条件>是否成立,成立,则执行一遍循环体,当遇到ENDDO时回到循环头,再次判断<条件>,如仍成立,则又执行循环体,如此反复进行,直到<条件>不成立为止。
(3)说明:重复执行DO与ENDDO间的循环语句,直到不满足条件为止。知道循环条件应使用 DO WHILE 结构。
【实验内容】
求数列“0,1,1,2,3,5,。。。。。。”的前30个数。
在学生表中,用“DO WIHLE循环语句”编写一个输入姓名,就可显示该记录,
并可继续进行查询的程序。
对成绩表,编一个可显示前十名学生的学号和总分的程序。
在成绩表中,按平均分来统计人数:统计90分(含90分)以上、80-90分(含80分)、70-80分(含70分)、60-70分(含60分)和60分以下的学生人数。
【高手进阶】
用FOR循环,输入一个数N,求1!+2!+3!+…….+N!
打印乘法九九表。
【自我测试】( 5分钟 )
1.下面程序执行的结果是什么?
SET TALK OFF
CLEAR
STORE,天长地久” TO CH
I = 1
DO WHILE I<8
SUBSTR(CH,I,2)
I = I+2
ENDDO
SUBSTR(CH,5,4)
SUBSTR(CH,1,4)
RETURN
SET TALK ON
【实验过程】
1.求数列“0,1,1,2,3,5,。。。。。。”的前30个数。
[解答]
CLEAR
SET TALK OFF
S1=0
S2=1
I=3
S1
S2
DO WHILE I <= 30
S3 = S1 + S2
S3
S1=S2
S2=S3
I=I+1
ENDDO
RETURN
在学生表中,用“DO WIHLE循环语句”编写一个输入姓名,就可显示该记录,
并可继续进行查询的程序。
[解答]
SET TALK OFF
CLEAR
USE 学生
AA="Y"
DO WHILE UPPER(AA)="Y"
ACCEPT "请输入姓名:" TO NA
LOCATE FOR 姓名=NA
IF FOUND()
DISPLAY
ELSE
"查无此人!"
ENDIF
ACCEPT "还要继续查找吗(Y/N)?" TO AA
ENDDO
SET TALK ON
USE
RETURN
3.对成绩表,编一个可显示前十名学生的学号和总分的程序。
[解答]
SET TALK OFF
CLEAR
USE 成绩
REPLACE ALL 总分 WITH 高数+大语+邓论+英语+计算机
INDEX ON 总分 TAG SC DESCENDING && 按总分降序排列
* INDEX ON -总分 TAG SC && 或这样来进行降序
N=1
DO WHILE N<=10 && 循环条件:从1到10
N = N+1
DISPLAY 姓名,总分 && 显示两个字段
SKIP && 移动指针
ENDDO
SET TALK ON
USE
RETURN
4.在成绩表中,按平均分来统计人数:统计90分(含90分)以上、80-90分(含80分)、70-80分(含70分)、60-70分(含60分)和60分以下的学生人数。
[解答]
SET TALK OFF
CLOSE ALL
CLEAR
STORE 0 TO S1,S2,S3,S4,S5
USE 成绩
DO WHILE,NOT,EOF()
DO CASE
CASE 平均>=90
S1=S1+1
CASE 平均<90 AND 平均>=80
S2=S2+1
CASE平均<80 AND平均>=70
S3=S3+1
CASE平均<70 AND平均>=60
S4=S4+1
OTHER WISE
S5=S5+1
ENDCASE
ENDDO
"90分(含90分)以上的学生人数为:",S1
"80-90分(含80分)的学生人数为:",S2
"70-80分(含70分)的学生人数为:",S3
"60-70分(含60分)的学生人数为:",S4
"60分以下的学生人数为:",S5
USE
SET TALK ON
RETURN
【高手进阶解答】
1.用DO WHILE循环,输入一个数N,求1!+2!+3!+…….+N!
[解答]
SET TALK OFF
CLEAR
INPUT,请输入一个数:” to N
I=1
DO WHILE,T.
K=1
J=1
DO WHILE J<I+ 1 && 条件是J<=N(见下IF语句)
K=K*J && 计算阶乘:每循环一次,K乘一个增大的数
J=J+1
ENDDO
k
I=I+1 && 当 循环一次,I的值增加1
IF I>N && 当 I>N 时,退出循环
EXIT
ENDIF
ENDDO
RETURN
2.打印乘法九九表。
[解答]
CLEAR
I=1
DO WHILE I<=9
J=1
DO WHILE J<=I
STR(I,1)+”*”+STR(J,1)+”=”+STR(I*J,2)+SPACE(2)
J=J+1
ENDDO
I=I+1
ENDDO
RETURN
【自我测试解答】
1.下面程序执行的结果是什么?
SET TALK OFF
CLEAR
STORE,天长地久” TO CH
I = 1
DO WHILE I<8
SUBSTR(CH,I,2) && I为1、3、5、7时,分别截取天、长、地、久
I = I+2
ENDDO
SUBSTR(CH,5,4) && 截取地久两字,并显示
SUBSTR(CH,1,4) && 截取天长两字,并显示
RETURN
SET TALK ON
[解答]
先竖向显示“天长地久”四个字,再横向显示“地久天长”这四个字。
练习六 程序基本结构:循环结构(三)
【实验目的】
1.掌握步长循环:FOR循环的使用
【知识要点】
步长循环FOR:
(1)格式:FOR 循环变量 = 初值 TO 终值 [STEP 步长]
命令语句序列
[LOOP]
[EXIT]
ENDFOR
(2)功能:重复执行FOR与ENDFOR间的循环语句,重复次数取决于内存变量的初值、终值和步长。
(3)说明:
① 若步长为1,则可省去STEP子句;
② 常用于已知循环次数的情况。
【实验内容】
1.输出-5000到5000中能被7整除的偶数。
2.用FOR循环计算1-100之间的偶数和。
3.用FOR循环计算1-100之间的奇数的累乘。
4.输入一个数,求1到此数的和,并可不断输入数,反复运算。
【高手进阶】
1.用FOR循环,输入一个数N,求1!+2!+3!+…….+N!
2.求解世界数学史上有名的“百鸡问题”:鸡公一,值钱五;鸡母一,值钱三;鸡雏三,值钱一,百钱买百鸡,问鸡公、母、雏各几何?
【自我测试】( 5分钟 )
执行下程序后I和S的值为多少。
SET TALK OFF
S=0
FOR I=1 TO 4
S=S+I*I
ENDFOR
I,S
SET TALK ON
【实验过程】
1.输出-5000到5000中能被7整除的偶数。
[解答]
CLEAR
SET TALK OFF
P = -5000
FOR Q = P TO 5000 STEP 2
IF Q%7 = 0
Q
ENDIF
ENDFOR
RETURN
2.用FOR循环计算1-100之间的偶数和。
[解答]
CLEAR
SET TALK OFF
S=0
FOR I=0 TO 100 STEP2
S=S+I
ENDFOR
S
SET TALK ON
RETURN
3.用FOR循环计算1-100之间的奇数的累乘。
[解答]
CLEAR
SET TALK OFF
S=0
FOR I=1 TO 100 STEP2
S=S*I
ENDFOR
S
SET TALK ON
RETURN
4.输入一个数,求1到此数的和,并可不断输入数,反复运算。
[解答]
SET TALK OFF
CLEAR
AA=”Y”
DO WHILE UPPER(AA)=”Y” && 条件:变量AA值为“Y”。
&& UPPER()小写转换大写
INPUT,求1到某数之和,请输入此数:” TO N
P = 0
K = 0
FOR P=0 TO N
P = P+1
K = K+P
ENDFOR
,1到”,N,”之和等于:”,K
ACCEPT "还要继续做吗(Y/N)?" TO AA && 输入的值给变量AA
ENDDO
SET TALK ON
RETURN
【高手进阶解答】
用FOR循环,输入一个数N,求1!+2!+3!+…….+N!
[解答]
SET TALK OFF
CLEAR
INPUT,请输入一个数:” to N
S=0
FOR I=1 TO N
T=1
FOR J=1 TO I
T=T*J
ENDFOR
S=S+T
ENDFOR
S
RERURN
2.求解世界数学史上有名的“百鸡问题”:鸡公一,值钱五;鸡母一,值钱三;鸡雏三,值钱一,百钱买百鸡,问鸡公、母、雏各几何?
[解答] 此题是:公鸡每只五个钱,母鸡每只三个钱,小鸡每三只一个钱,现用100个钱买100只鸡,问各买多少只?
设买公鸡x只、母鸡y只、小鸡z只
则有 x+y+z=100
5x+3y+z/3=100
解之得 5x+3y+(100-x-y)/3=100
因x、y、z只能为正整数,且x<=20、y<=33(因不能全是公鸡或母鸡),则将x从0到20及y从0到33的值代入方程中就可解出方程。
SET TALK OFF
CLEAR
FOR X=0 TO 20
FOR Y=0 TO 33
IF 5*X+3*Y+(100-X-Y)/3=100
,公鸡 母鸡 小鸡”
X,Y,100-X-Y
ENDIF
ENDFOR
ENDFOR
RETURN
【自我测试解答】
执行下程序后I和S的值为多少。
SET TALK OFF
S=0
FOR I=1 TO 4
S=S+I*I
ENDFOR
I,S
SET TALK ON
[解答]
I = 5,S = 12+22+32+42 = 30
练习七 程序基本结构:循环结构(四)
【实验目的】
掌握表扫描循环:SCAN的使用
【知识要点】
表扫描循环SCAN:
(1)格式:SCAN[范围][FOR 条件式]
命令语句序列
[LOOP]
[EXIT]
ENDSCAN
(2)功能:在指定范围内寻找满足条件的记录,并执行循环体中的语句。
(3)说明:常用于对表中全体记录作相同的操作。
【实验内容】
1.用SCAN循环,逐条显示学生表中,所有男生的记录。
2.对学生表,编一个可统计21岁以上有多少人的程序。
3.用“SCAN循环语句”和“DO CASE分支语句” 对成绩表,编“按学生平均分数确定其等级”的程序。
4.编一个统计Xscj表中,平均分的各分数段人数的程序(用SCAN循环)。
5,在成绩表中,找出指定等级的学生记录并统计该等级的学生人数。
【高手进阶】
在学生表和成绩表中查找平均分在80分以上的学生,并逐个显示学号、姓名及平均分。
【自我测试】( 5分钟 )
1.在学生表中查找所有计算机系学生的记录并统计人数。
【实验过程】
用SCAN循环,逐条显示学生表中,所有男生的记录。
[解答]
SET TALK OFF
CLEAR
USE学生
SCAN FOR 性别=”男”
DISPLAY
ENDSCAN
SET TALK ON
RETURN
对学生表,编一个可统计21岁以上有多少人的程序。
[解答]
SET TALK OFF
CLEAR
USE 学生
S=0
SCAN FOR 年龄>21
S = S+1 && 循环一次,变量S增加1
ENDSCAN
,年龄大于21岁的人有:”+STR(S)+”人”
RETURN
用“SCAN循环语句”和“DO CASE分支语句” 对成绩表,编“按学生平均分数确定其等级”
的程序。
[解答]
SET TALK OFF
CLEAR
USE 成绩
REPLACE ALL 平均 WITH (高数+大语+邓论+英语+计算机)/5
SCAN
DO CASE
CASE 平均<60
REPLACE 等级 WITH,不及格”
CASE 平均>=90
REPLACE 等级 WITH,优”
CASE 平均>=75
REPLACE 等级 WITH,良”
CASE 平均>=60
REPLACE 等级 WITH,及格”
ENDCASE
ENDSCAN
RETURN
4.编一个统计Xscj表中,平均分的各分数段人数的程序(用SCAN循环)。
[解答]
SET TALK OFF
CLEAR
USE Xscj
S=0
S60=0
S75=0
S90=0
SCAN
DO CASE
CASE 平均<60
S=S+1
CASE平均>=60 AND平均<75
S60=S60+1
CASE平均>=75 AND平均<90
S75=S75+1
CASE平均>=90 AND平均<=100
S90=S90+1
ENDCASE
ENDSCAN
,60分以下的有”+STR(S)+”人”
,60分到75分有”+STR(S60)+”人”
,75分到90分有”+STR(S75)+”人”
,90分以上的有”+STR(S90)+”人”
RETURN
在成绩表中,找出指定等级的学生记录并统计该等级的学生人数。
[解答]
SET TALK OFF
CLOSE ALL
CLEAR
USE 成绩
S=0
ACCEPT "请输入要查询的学生等级:" TO DJ
SCAN
IF 等级=DJ
DISPLAY
S=S+1
ENDIF
ENDSCAN
S
RETURN
【高手进阶解答】
1.在学生表和成绩表中查找平均分在80分以上的学生,并逐个显示学号、姓名及平均分。
[解答]
SET TALK OFF
CLEAR
SELECT 1
USE 成绩
INDEX ON 学号 TAG NO
SET ORDER TO NO
SELECT 2
USE 学生
SET RELATION TO 学号 INTO 成绩
SCAN
IF成绩.平均>=80
?”学号是”+学号+" 的"+姓名+” 同学各科平均为”+ ;
STR(成绩.平均,5,2)+”分”
ENDIF
ENDSCAN
RETURN
【自我测试解答】
在学生表中查找所有计算机系学生的记录并统计人数。
[解答]
SET TALK OFF
CLOSE ALL
CLEAR
USE 学生
S=0
SCAN FOR 系别="计算机系"
DISPLAY
S=S+1
ENDSCAN
"计算机系人数为:",S
USE
RETURN
第7章 表单设计与应用练习一 创建和管理表单和标签控件
【实验目的】
用表单向导创建表单用表单设计器创建表单利用数据环境添加数据表运行表单
【知识要点】
 一、创建表单
1、创建表单的三种方法
(1)使用表单向导创建简易的数据表单
(2)使用表单设计器创建或修改任何形式的表单
(3)使用表单生成器产生快速表单
2、调出表单设计器方法一、在项目管理器环境下调用
(1)在“项目管理器”窗口中选择“文档”选项卡,然后选择其中的“表单”图标;
(2)单击“新建”按钮,系统弹出“新建表单”对话框;
(3)单击“新建表单”图标按钮。
方法二、菜单方式调用
(1)单击“文件”菜单中的“新建”命令,打开“新建”对话框;
(2)选择“表单”文件类型,然后单击“新建文件”按钮。
方法三、令方式调用在命令窗口输入:CREATE FORM <表单文件名>。
不管采用上面哪种方法,系统都将打开“表单设计器”窗口,。在表单设计器环境下,用户可以交互式、可视化地设计完全个性化的表单二、修改表单
对于一个已创建的表单,可以使用表单设计器进行编辑修改。
1、打开表单设计器
(1)如果要修改项目中的表单,在项目编辑状态下打开要修改的表单文件,进入表单设计器环境进行修改即可。
(2)如果要修改的表单不属于某个项目,可以单击“文件”菜单中的“打开”命令,然后在“打开”对话框中选择需要修改的表单文件,进入表单设计器环境进行修改即可。
(3)在命令窗口输入命令:MODIFY FORM <表单文件名>,进入表单设计器环境进行修改即可。
2、表单生成器在表单设计器环境下,也可以调用表单生成器,以方便、快速地产生表单。调用表单生成器有3种方法:
(1)可以通过选择“表单”菜单中的“快速表单”命令;
(2)单击“表单设计器”工具栏中的“表单生成器”按钮;
(3)右击表单窗口,然后在弹出的快捷菜单中选择“生成器”命令。
3、数据环境为数据库应用系统创建的表单都拥有自己的数据环境,数据环境和表单保存在一起。将数据表添加到表单的数据环境中,再运行该表单时,Visual FoxPro将自动打开数据环境中的表或视图,并在关闭该表单时自动关闭它们。
可以利用“数据环境设计器”设置和修改表单的数据环境。打开“数据环境设计器”的方法有3种。
(1)在表单设计器环境下,单击表单设计器工具栏上的“数据环境”按钮,即可打开“数据环境设计器”窗口。
(2)选择“显示”菜单中的“数据环境”命令,也可打开“数据环境设计器”窗口。
(3)在表单中右击,从快捷菜单中选择“数据环境”命令,进入“数据环境设计器”窗口。
三、保存和运行表单
1、保存表单
(1),文件/保存”:保存当前表单
(2)Ctrl+W:保存当前表单
(3)“关闭”钮、“文件/退出”:在系统问是否保存时,选“是”
2、运行表单文件。
(1)在“项目管理器”窗口中,选择要运行的表单,然后单击,运行”按钮。
(2)在表单设计器环境下,选择“表单”菜单中的“执行表单”命令,或单击标准工具栏上的“运行”按钮。
(3)选择“程序”菜单中的“运行”命令,打开“运行”对话框,然后在对话框中指定要运行的表单文件并单击“运行”按钮。
(4)在命令窗口输入命令:
DO FORM <表单文件名>
【实验内容】
1.根据学生表,利用表向导创建一个表单(学生情况.scx)。结果可以对该学生表的内容进行显示和查找。结果如下图。
2.根据学生表和成绩表,利用表向导创建一个一对多的表单(学生情况1.scx)。结果可以同时对两个表的记录进行显示。结果如下图。
3.根据成绩表,创建一个快捷表单(学生成绩.scx)。结果如下图。
4.根据学生表,利用表设计器和数据环境设计器,创建一个新的表单(学生情况2.scx),要求在数据环境中将整个表格移入表单中,显示出学生的所有属性。结果如下图。
5.根据学生表,利用表设计器和数据环境设计器,创建一个新的表单(学生情况3.scx),要求在表单中只显示出学生表中的学号,姓名,性别,入学成绩这四个属性。
6,为表单“学生情况2.scx”添加一个标签控件“学生情况一览表”。 修改标签控件的属性(大小、字号、颜色等)。
【高手进阶】
1.新建一个表单(sj.scx),表单的Caption属性设置为“标签的应用”。再为该表单添加一个标签控件,标签控件的Caption属性为“退出”。要求运行表单时,用鼠标单击该标签,则该表单被释放。
【自我测试】( 5分钟 )
1.根据“书库.dbf”表,利用向导新建一个表单,要求可显示书库中的书号,书名和作者。并且格式为“浮雕式”和“图片按钮”,按书号降序排序,并能浏览,查找书库中的内容。如下图。
【实验过程】
1.根据学生表,利用表向导创建一个表单(学生情况.scx)。结果可以对该学生表的内容进行显示和查找。结果如下图。
解答:
(1)使用“文件”菜单的“新建”命令,打开“新建”对话框,在对话框中选择想要建立的文件类型“表单”,然后单击“向导”按钮,打开“向导选取”对话框。
(2)选择使用的向导。在“向导选取”对话框中有两种选择,其中“表单向导”用于由单个表创建表单。本题选择“表单向导”,然后单击“确定”按钮进入表单向导。
(3)字段选择。在,步骤1-字段选取”中,可以选择在表单上显示哪些字段。该题选择,学生表”的全部字段,然后单击“下一步”按钮。
(4)选择表单样式。在,步骤2-选择表单样式”中,可以选择表单样式和表单中按钮的类型。该题选择“标准式”样式和“文本按钮”按钮类型,然后单击“下一步”按钮。
(5)确定排序次序。在,步骤3-排序次序”中,用于选择在表单中是否按顺序显示记录。方法是从“可用的字段或索引标识”中选择字段——学号,单击“添加”按钮,将它添加到“选定字段框”中,然后单击“下一步”按钮。
(6)完成。在表单向导的“步骤4-完成”中,在“请输入表单标题”框中输入“输入和修改学籍记录”,然后单击“预览”按钮,预览表单的运行结果。如果对结果不满意,可以单击“上一步”按钮,退回上面的步骤进行修改。如果结果满意,就可以选择一种保存方式,该题选择“保存并运行表单”单选按钮,然后单击“完成”按钮,在随后出现的“另存为”对话框中保存该表单,命名为“学生情况.scx”,接着开始运行表单,表单运行结果上图所示。
2.根据学生表和成绩表,利用表向导创建一个一对多的表单(学生情况1.scx)。结果可以同时对两个表的记录进行显示。结果如下图。
解答:
(1)使用“文件”菜单的“新建”命令,打开“新建”对话框,在对话框中选择想要建立的文件类型“表单”,然后单击“向导”按钮,打开“向导选取”对话框。
(2)选择使用的向导。在“向导选取”对话框中有两种选择,其中“表单向导”用于由单个表创建表单。本题选择“一对多表单向导”,然后单击“确定”按钮进入表单向导。
(3)字段选择。在,步骤1-从父表中选定字段”中,可以选择在表单上显示哪些字段。该题选择,学生表”的全部字段,然后单击“下一步”按钮。
(4)字段选择。在,步骤2-从子表中选定字段”中,可以选择在表单上显示哪些字段。该题选择,成绩表”的全部字段,然后单击“下一步”按钮。
(5)在“步骤3-建立表之间的关系”中,选取“学生表”中的“学号”字段和“成绩表”中的“学号”字段建立关联。
(6)选择表单样式。在,步骤4-选择表单样式”中,可以选择表单样式和表单中按钮的类型。该题选择“标准式”样式和“文本按钮”按钮类型,然后单击“下一步”按钮。
(7)确定排序次序。在,步骤5-排序次序”中,用于选择在表单中是否按顺序显示记录。方法是从“可用的字段或索引标识”中选择字段——学号,单击“添加”按钮,将它添加到“选定字段框”中,然后单击“下一步”按钮。
(8)完成。在表单向导的“步骤6-完成”中,在“请输入表单标题”框中输入“输入和修改学籍记录”,然后单击“预览”按钮,预览表单的运行结果。如果对结果不满意,可以单击“上一步”按钮,退回上面的步骤进行修改。如果结果满意,就可以选择一种保存方式,该题选择“保存并运行表单”单选按钮,然后单击“完成”按钮,在随后出现的“另存为”对话框中保存该表单,命名为“学生情况1.scx”,接着开始运行表单,表单运行结果上图所示。
3.根据成绩表,创建一个快捷表单(学生成绩.scx)。结果如下图。
解答:
(1)使用“文件”菜单的“新建”命令,打开“新建”对话框,在对话框中选择想要建立的文件类型“表单”,然后单击“新建文件”按钮,打开表单设计器。
(2)使用“表单”菜单的“快速表单”命令,打开“表单生成器”对话框。在“字段选取”选项卡中选择“成绩表”的所有字段为选定字段。在“样式”选项卡中选择“标准式”。点击“确定”按钮。
(3)选择“表单”菜单的“执行表单”。弹出“保存”对话框。为表单命名为“学生成绩.scx”。保存并运行表单。如上图。
4.根据学生表,利用表设计器和数据环境设计器,创建一个新的表单(学生情况2.scx),要求在数据环境中将整个表格移入表单中,显示出学生的所有属性。结果如下图。
解答:
(1)使用“文件”菜单的“新建”命令,打开“新建”对话框,在对话框中选择想要建立的文件类型“表单”,然后单击“新建文件”按钮,打开表单设计器。
(2)右击表单,选择“数据环境”。弹出“数据环境设计”窗口。右击选择“添加”,将“学生表添加至数据环境中。
(3)用鼠标左键按住“学生表”蓝色的标题处,将该表整个拖入表单设计器中,则表单中添加了一个表格控件。如上图。
(4)选择“表单”菜单的“执行表单”。弹出“保存”对话框。为表单命名为“学生情况2.scx”。保存并运行表单。
5.根据学生表,利用表设计器和数据环境设计器,创建一个新的表单(学生情况3.scx),要求在表单中只显示出学生表中的学号,姓名,性别,入学成绩这四个属性。
解答:
(1)使用“文件”菜单的“新建”命令,打开“新建”对话框,在对话框中选择想要建立的文件类型“表单”,然后单击“新建文件”按钮,打开表单设计器。
(2)右击表单,选择“数据环境”。弹出“数据环境设计”窗口。右击选择“添加”,将“学生表添加至数据环境中。
(3)用鼠标左键选取学生表中的“学号”字段,拖入表单设计器中,依次将“学号”“姓名”“性别”“入学成绩”四个字段拖入表单中,如上图。
(4)选择“表单”菜单的“执行表单”。弹出“保存”对话框。为表单命名为“学生情况3.scx”。保存并运行表单。
6,为表单“学生情况2.scx”添加一个标签控件“学生情况一览表”。 修改标签控件的属性(大小、字号、颜色等)。
解答:
(1)使用“文件”菜单的“打开”命令,打开表单“学生情况2.scx”
(2)在控件工具栏中选择标签控件。按住鼠标左键在表单上拖动,就添加了一个标签件。
(3)单击“标签”控件,选定“属性”窗口的“Caption” (标题),在“属性设置栏”中输入“学生情况一览表”;设定“FontName”属性为“隶书”,设定,FontSize” 属性为26,设定“ForeColor”为红色。
(4)选择“表单”菜单的“执行表单”。弹出“保存”对话框。为表单命名为“学生情况4.scx”。保存并运行表单。
【高手进阶解答】
1.新建一个表单(sj.scx),表单的Caption属性设置为“标签的应用”。再为该表单添加一个标签控件,标签控件的Caption属性为“退出”。要求运行表单时,用鼠标单击该标签,则该表单被释放。
解答:
(1)使用“文件”菜单的“新建”命令,打开“新建”对话框,在对话框中选择想要建立的文件类型“表单”,然后单击“新建文件”按钮,打开表单设计器。
(2)在控件工具栏中,选中标签控件,在表单的合适位置绘制出一个标签控件。
(3)设置标签的Caption属性为“退出”。Fontsize属性为24。
(4)代码的编写。双击标签控件,弹出代码编写窗口。在标签控件的Click事件中编写如下代码:
Thisform.release
(5)选择“表单”菜单的“执行表单”。弹出“保存”对话框。保存并运行表单。
【自我测试解答】
1.根据“书库.dbf”表,利用向导新建一个表单,要求可显示书库中的书号,书名和作者。并且格式为“浮雕式”和“图片按钮”,按书号降序排序,并能浏览,查找书库中的内容。如下图。
解答:
(1)使用“文件”菜单的“新建”命令,打开“新建”对话框,在对话框中选择想要建立的文件类型“表单”,然后单击“向导”按钮,打开“向导选取”对话框。
(2)选择使用的向导。在“向导选取”对话框中有两种选择,其中“表单向导”用于由单个表创建表单。本题选择“表单向导”,然后单击“确定”按钮进入表单向导。
(3)字段选择。在,步骤1-字段选取”中,可以选择在表单上显示哪些字段。该题选择,书库”表的“书号”“书名”“作者”字段,然后单击“下一步”按钮。
(4)选择表单样式。在,步骤2-选择表单样式”中,可以选择表单样式和表单中按钮的类型。该题选择“浮雕式”样式和“图片按钮”按钮类型,然后单击“下一步”按钮。
(5)确定排序次序。在,步骤3-排序次序”中,用于选择在表单中是否按顺序显示记录。方法是从“可用的字段或索引标识”中选择字段——书号,单击“添加”按钮,将它添加到“选定字段框”中,再选择降序单选按钮,然后单击“下一步”按钮。
(6)完成。在表单向导的“步骤4-完成”中,在“请输入表单标题”框中输入“书库”,然后单击“预览”按钮,预览表单的运行结果。如果对结果不满意,可以单击“上一步”按钮,退回上面的步骤进行修改。如果结果满意,就可以选择一种保存方式,该题选择“保存并运行表单”单选按钮,然后单击“完成”按钮,在随后出现的“另存为”对话框中保存该表单,命名为“书库.scx”,接着开始运行表单,表单运行结果上图所示。
练习二 常用控件,命令按钮、命令按钮组、文本框
【实验目的】
1.理解面向对象程序基本概念;
2.熟练掌握表单的基本操作;
3.熟练掌握命令扫钮、命令按钮组和文本框的使用;
【知识要点】
一、表单常用控件及其常用属性
1.命令按钮:命令按钮用来启动某个事件代码,完成特定功能。如关闭表单、移动记录指针、打印报表等。
常用属性有:
(1)Caption属性:用于设置按钮的标题。在设置命令按钮对象的“Caption”属性时,输入“\<”和一个快捷键字符可指定其快捷键。在表单上同时按Alt键和快捷字符,可以完成单击此按钮的功能。
(2)Enabled属性:指定表单或控件能否响应由用户引发的事件。默认值为.T.,即对象是有效的,能被选择,能响应用户引发的事件。
(3)Visible属性:指定对象是可见还是隐藏。在表单设计器中,默认值为.T.,即对象是可见的。在程序代码中,默认值为.F.,即对象是隐藏的。但一个对象即使是隐藏的,在代码中仍可以访问它。该属性在设计和运行时可用,适用于绝大多数控件。
(4)Piction属性:定义图形化按钮的面版图型。
2.命令按钮组:命令按钮组是包含一组命令按钮的容器控件,用户可以单个或作为一组来操作其中的按钮。
常用属性有:
(1)ButtonCount属性:指定命令组中命令按钮的数目。可以通过改变ButtonCount属性的值来重新设置命令组中包含的命令按钮数目。设置命令按钮组的最简便方法是使用命令组生成器。
(2)Buttons属性:用于存取命令组中各按钮的数组。该属性数组在创建命令组时建立,用户可以利用该数组为命令组中的命令按钮设置属性或调用其方法。属性数组下标的取值范围应该在l~ButtonCount属性值之间。
(3)Value属性:指定命令组当前的状态。该属性的类型可以是数值型的(这是默认的情况),也可以是字符型的。如果命令组内的某个按钮有自己的Click事件代码,那么一旦单击该按钮,就会优先执行为它单独设置的代码,而不会执行命令组的Click事件代码。
3.文本框:文本框也是最常用的控件,使用文本框能够进行多种类型数据的输入和输出。
文本框的主要应用是对表中非备注字段中的数据进行显示和编辑。
常用属性有:
(1)ControlSource属性:利用该属性为文本框指定一个字段或内存变量。运行时,文本框首先显示该变量的内容。而用户对文本框的编辑结果,也会最终保存到该变量中。
(2)Value属性:返回文本框的当前内容。对文本框Value属性的设置决定了运行表单时,在文本框中显示的数据的值和类型。文本框中的数据可以是数值、字符、日期或逻辑型的。
(3)PasswordChar属性:利用该属性可在文本框中接收用户密码,可以把它设置为“*”或其他的一般字符。这样在运行表单时,文本框的Value和Text属性可以接收用户真正输入的信息,而在屏幕上显示的却是PasswordChar所指定的字符。这在设计登录口令框时经常用到。
(4)Readonly属性:该属性为.T.时,文本框显示为灰色,表明不可编辑其中的数据。
(5)InPutMask属性:指定在一个文本框中如何输入和显示数据。
(6)Valid事件:若要检查用户输入文本框的值,可以编写Valid事件代码,利用代码来检查数据。
二、控件常用过程(事件)
1.Init(初始化) 当对象运行时,被激活(触发事件)
2.Click(单击) 单击对象(一般是“命令钮”),被激活
3.DblClick(双击) 双击对象(一般是“命令钮”),被激活
4.Load(加载) 当运行表单时(先引发Load,再引发Init ),被激活
5.Destroy(释放) 当对象被释放时,被激活
6.UnLoad(卸载) 当退出表单时,被激活
7.Change(改变) 对象(一般是“文本框”)内容改变,被激活
8.GotFocus/LostFocus(获得/失去焦点) 光标移到/移出对象时,被激活
9.Valid(有效的) 当控件失去焦点时,可触发事件
【实验内容】
1.创建一个表示今天日期的表单: 单击“今天日期”钮,就会显示今天的年月日练习如何将程序在命令钮的“Click”中输入
2.用Xsda表创建一个表单,要求能通过输入姓名(或学号)进行查找并显示该生的情况练习使用“数据环境设计器”和命令钮输入代码。见表单“学生信息查询”
3.用“表单设计器”,为Xsda表创建一个“学生管理”表单,并加入标签和命令钮。
添加,
一个标签:学生档案管理系统(设置属性:标题、字体、字号、颜色等)
七个命令钮:第一个、上一个、下一个、最后一个、退出、添加、删除(设置标题、添加代码)
4.为Xsda表创建一个“学生档案管理”表单,并用文本框来编辑字段内容。
在表单中添加如下控件:
四个标签:学生档案管理、学号、姓名、出生年月三个文本框:对应学号、姓名、出生年月三个字段用命令按钮组添加五个命令钮:第一个、上一个、下一个、最后一个、退出
5.用“表单设计器”设计一个计算圆面积的表单;(输入半径,按“计算”钮,就算出并显示面积)
[练习如何使用“文本框”输入、输出数据]

【高手进阶】
1.做一个能进行加法运算的表单
[练习使用命令钮,及文本框输入、输出数据的操作]
2.用“表单设计器”设计一个输入口令的表单(口令“5845201314”正确,显示"欢迎光临!",否则显示“无权使用!”)
[目的:练习如何使用“文本框”输入和用“标签”输出数据及运行新表单]
【自我测试】( 5分钟 )
1.用“表单设计器”为书库表创建一个表单“书库管理”,并添加“第一个”、“上一个”、“下一个”、“最后一个”、“退出”等命令按钮组。并且能够通过书名查出该书的信息。
【实验过程】
1.创建一个表示今天日期的表单: 单击“今天日期”钮,就会显示今天的年月日解答:练习如何将程序在命令钮的“Click”中输入
(1)进入“表单设计器”,建两个命令按钮:“今天日期”和“退出”
  (2)双击“今天日期”钮,在“Click(单击)”事件中输入
YMD=DTOS(DATE()) && 函数DTOS把日期转为(YYYYMMDD)字符
YY=SUBSTR(YMD,1,4)   && 函数SUBSTR截取字符(从第1位取4个)
MM=SUBSTR(YMD,4,2)
DD=SUBSTR(YMD,6,2)
WAIT WINDOWS,今天是:” + YY +,年” + MM +,月” + DD +,日”
&& 暂停运行,(用窗口形式)显示内
ThisForm.Release && 更新表单
(3)双击“退出”钮,在“Click(单击)”事件中输入
  ThisForm.Release
2.用Xsda表创建一个表单,要求能通过输入姓名(或学号)进行查找并显示该生的情况解答:练习使用“数据环境设计器”和命令钮输入代码。见表单“学生信息查询”
(1)进入“表单设计器”:
(2)将表Xsda添加到“数据环境设计器”中,将表中字段逐个拖入到“表单设计器”中,并调整大小和位置;
(3)单击“控件工具栏”上的“标签”钮后,在表单上方拖出标签框,在“属性”框的“Caption”栏中输入“学生信息查询”(并在“FontName”、“FontSize”、“ForeColor”栏中确定字体、字号、颜色等);
(4)建两个标签和一个文本框:“请输入要查找学生的姓名”、“姓名”及准备录入姓名的文本框
(5)建两个命令按钮:“查找”和“退出”;
① 右击“查找”命令按钮,选“代码”项,在“Click(单击)”事件中输入:
LOCATE FOR 姓名=ALLTRIM(ThisForm.Text1.Value)
&& 移指针到输入的姓名的第一条记录
IF EOF()
MESSAGEBOX("查无此人!",48,"提示信息") && 出现对话框,48的含义见P188
ENDIF
ThisForm.Refresh
② 右击“退出”命令按钮,选“代码”项,在“Click(单击)”事件中输入:
ThisForm.Release
(6)保存名为“学生信息查询”。
3.用“表单设计器”,为Xsda表创建一个“学生管理”表单,并加入标签和命令钮。
添加,
一个标签:学生档案管理系统(设置属性:标题、字体、字号、颜色等)
七个命令钮:第一个、上一个、下一个、最后一个、退出、添加、删除(设置标题、添加代码)
解答:见表单“学生管理”
(1) 创建数据环境:“显示/数据环境”-在“添加表或视图“对话框中选定表Xsda,将其添加到“数据环境设计器”中
(2) 向表单中添加对象:
显示表内容:将“数据环境设计器”中表的所需字段(如学号、姓名、性别、民族、出生年月、籍贯、自费否、入学总分等)拖入表单中适当位置添加标签:单击“表单控件”工具栏的“标签”钮,在表单上方拖出标签框(Label1)
添加命令按钮:单击“表单控件”工具栏的“命令”钮,在表单中适当位置,拖出一个命令按钮;其余六个按钮,照此法添加。注意它们的位置、顺序,不要弄乱了。不然写代码时,容易弄错按钮。
(3) 为对象设置属性:通过“属性”窗口,可为对象设置属性。如:
单击“标签”框,选定“属性”窗口的“Caption(标题)”,在“属性设置栏”中输入“学生管理”;、选定“FontName(字体名)”,选择一种字体,如楷体、选定“ForeColor(字体颜色)”,选择一种颜色,如红色;
 同样,七个命令按钮,布置好后位置后,设定标题名称为“第一个”、“上一个”、“下一个”、“最后一个”、“退出”、“添加”、“删除”。同样可设定字体、字号、颜色。。。。。
(4) 编辑事件或方法代码:双击命令按钮,在“过程”栏中选择“Click(单击)”事件,并输入代码:
在(第一个)命令按钮的“Click(单击)”事件中输入
  GO TOP (移指针到第一条记录)
ThisForm.Refresh (更新表单)
在(上一个)命令按钮的“Click(单击)”事件中输入
  Skip -1 (移指针到上一条记录)
IF BOF()   (若指针已到文件头)
    GO TOP  (移指针到首记录)
ENDIF
ThisForm.Refresh  (更新表单)
在(下一个)命令按钮的“Click(单击)”事件中输入
  Skip 1 (移指针到下一条记录)
  IF EOF() (若指针已到文件尾)
   GO BOTTOM    (移指针到末记录)
ENDIF
ThisForm.Refresh (更新表单)
在(最后一个)命令按钮的“Click(单击)”事件中输入
  GO BOTTOM     (移指针到最后一条记录)
ThisForm.Refresh (更新表单)
在(退出)命令按钮的“Click(单击)”事件中输入
  ThisForm.Release (从内存中释放该表单)
在(添加)命令按钮的“Click(单击)”事件中输入
  APPEND BLANK (添加一条空白记录)  
ThisForm.Refresh (更新表单)
在(删除)命令按钮的“Click(单击)”事件中输入
DELETE
*PACK (不要急于真的删除了)
ThisForm.Refresh (更新表单)
(5) 保存退出:按“保存”钮,取名为“学生档案”后,“确定”退出。
4.为Xsda表创建一个“学生档案管理”表单,并用文本框来编辑字段内容。
在表单中添加如下控件:
四个标签:学生档案管理、学号、姓名、出生年月三个文本框:对应学号、姓名、出生年月三个字段用命令按钮组添加五个命令钮:第一个、上一个、下一个、最后一个、退出解答:见表单“学生档案管理”
(1)为四个标签设置属性:标题、字体、字号、颜色等,与上一题操作一样。
(2)为文本框设置学号、姓名、出生年月等的数据来源:
右击“文本框”-选“生成器”,在“值”标签中,从字段名列表框中选择表中字段;
或从属性窗口的“ControlSource”属性中设置数据来源(表中的字段)
注:1。文本框生成器上有三个标签:[P270]
① 格式:作用是设置当前文本框中的数据类型。只能是字符、数值、日期、逻辑型四种。
② 样式:用来设置文本框的款式。如平面或三维、边框有无线条等。
③ 值:是最重要的选项。其任务是设置数据控制源,即设置文本框的数据来源或数据的存储位置。一般是从从字段名列表框中选择表中字段,或从属性窗口的“ControlSource”属性中设置数据来源(表中的字段)。
2.一般情况下对于表中的字段,最好是使用“数据环境”来拖出
(3)用,命令按钮组”添加命令按钮:
单击“表单控件”工具栏的“命令按钮组”钮,在表单中拖出命令按钮组,右击命令按钮组框,选“生成器”,在“按钮”标签中设置按钮数目,比如为“5”;在“布局”标签中设置按钮排列方式,比如为“水平”。
设置按钮的“Caption(标题)”、“FontName(字体名)”、“ForeColor(字体颜色)”等属性。注意:要先右击按钮框,选“编辑”,然后再右击各按钮,进行设置。
为各按钮编辑事件或方法代码。方法和内容同上一练习题。
5.用“表单设计器”设计一个计算圆面积的表单;(输入半径,按“计算”钮,就算出并显示面积)
解答:见表单“圆面积”[练习如何使用“文本框”输入、输出数据]
(1)向表单中添加对象:利用“表单控件”工具栏添加三个标签(Label):单击工具栏的“标签”钮,在表单中拖出三个标签框添加二个文本框(Text):单击工具栏的“文本框”钮,在表单中拖出二个文本框添加二个命令按钮(Command):单击工具栏的“命令”钮,在表单中拖出二个命令按钮

(2)为对象设置属性:通过“属性”窗口,可为对象设置属性。如:
 分别设置“标签”框1(Label1)、2(Label2)、3(Label3)的标题为“计算圆面积”、“请输入圆的半径”和“圆的面积为”,并自行设定字体、字号、颜色;
分别设置“命令”按钮1(Command1)、按钮2(Command2)的标题为“计算”和“退出”。也可设置字体、字号、颜色。

(3)编辑事件或方法代码:
① 双击命令按钮1(Command1),在“过程”栏中选择“Click(单击)”事件,并输入代码:
R = VAL(ThisForm.Text1.Value) && 文本框1(Text1)中输入的值赋给变量R
注:1.在程序中访问Value,则可利用文本框中的值;
2.ThisForm.Text1.Value表示当前表单文本框1的值;
3.VAL是字符转变为数值的函数。若设置“InputMask”属性为数值,则可不用VAL函数。
ThisForm.Text2.Value = 3.14*R*R && 把计算结果赋给Text2
ThisForm.Text1.SetFocus
&& 将焦点移到文本框1,即计算后,光标回到文本框1,等待第二次操作。
ThisForm.Refresh && 更新表单
② 双击命令按钮2(Command2),在“过程”栏中选择“Click(单击)”事件,并输入代码:
ThisForm.Release && 释放表单
(4) 保存退出:按“保存”钮,取名为“圆面积”后,“确定”退出。
【高手进阶解答】
1.做一个能进行加法运算的表单解答:见表单“加法器计算器”[练习使用命令钮,及文本框输入、输出数据的操作]
(1)进入“表单设计器”,添加四个标签(Label)、两个文本框(Text)、两个命令按钮(Command),并设定标题、字体、字号、颜色等。
(2)对前两个文本框(Text1、Text2)的InputMask属性设为“9999999.99”。(即限定只能输入7位数字,也可不设置,则可输入任意多的数)
(3)双击命令按钮1(Command1),在“过程”栏中选择“Click(单击)”事件,并输入代码:
ThisForm.Text3.Value=VAL(ThisForm.Text1.Value)+ VAL(ThisForm.Text2.Value)
函数VAL()是将字符型转为数值型,此句表示将文本框1、2的值相加后赋给文本框3
ThisForm.Refresh
双击命令按钮2(Command2),在“过程”栏中选择“Click(单击)”事件,并输入代码:
ThisForm.Release
2.用“表单设计器”设计一个输入口令的表单(口令“1314520”正确,显示"欢迎光临!",并运行表单“学生管理”,否则显示“无权使用!”)
练习如何使用“文本框”输入和用“标签”输出数据及运行新表单
(1) 向表单中添加对象:
添加二个标签(Label):单击“表单控件”工具栏的“标签”钮,在表单中拖出二个标签框添加一个文本框(Text):单击“表单控件”工具栏的“文本框”钮,在表单中拖出一个文本框
 
(2) 为对象设置属性:通过“属性”窗口,为对象设置属性,如:设定标题、字体、字号、颜色等。
 将“标签”2(Label2)属性:“Caption(标题)”,设为“无”(使其在屏幕上不显示);
将“文本框”(Text1)属性:“PasswordChar(密码)”,设为,*”
(3) 编辑事件或方法代码:
对“文本框”(Text1)的“Valid(有效的)”事件中输入代码:
MM = ThisForm.Text1.Value    && 将文本框中输入的值给变量MM
IF MM="1314520" && 分支条件(即口令值为:1314520)
ThisForm.Label2.Caption="欢迎光临!" && 满足条件,则在标签2中显示"欢迎光临!"
DO FROM 学生管理 && 运行表单“学生管理”
ELSE
ThisForm.Label2.Caption="不欢迎你!"
ENDIF
ThisForm.Refresh
【自我测试解答】
1.用“表单设计器”为书库表创建一个表单“书库管理”,并添加“第一个”、“上一个”、“下一个”、“最后一个”、“退出”等命令按钮组。并且能够通过书名查出该书的信息。
解答:
(1)新建一个表单,打开表单设计器
(2)在表单设计器中,右键单击表单,选择“数据环境”。再右击数据环境,选“添加”,将书库表添加至数据环境中。
(3)将数据环境中表的字段拖入表单设计器中,按如图排列。
(4)添加一个按钮组控件。右击按钮组控件,选生成器。将按钮个数设为5个。设置5个按钮的Caption属性分别为“第一个”“下一个”“上一个”“最后一个”和“退出”。
(5)再添加一个标签控件,设置其Caption属性为“请输入要查找的书名”
(6)最后添加一个命令按钮,设置其Caption属性为“查找”
(7)编写代码。
在“第一个”按钮的Click事件中输入:
Go top
Thisform.refresh
在“第二个”按钮的Click事件中输入:
If not eof()
skip 1
Endif
Thisform.refresh
在“下一个”按钮的Click事件中输入:
If not bof()
skip -1
Endif
Thisform.refresh
在“最后一个”按钮的Click事件中输入:
Go bottom
Thisform.refresh
在“退出”按钮的Click事件中输入:
Thisform.release
在“查找”按钮的Click事件中输入:
Locate for 书名=alltrim(thisform.text1.value)
Thisform.refresh
(8)保存并运行表单
练习三 常用控件,编辑框、复选框、选项组、计时器、图像
【实验目的】
1.掌握几种控件的特点及其属性
2.熟练应用几种控件的事件并对能对其进行代码的编写
【知识要点】
 一、几种常用控件及其常用属性
1.编辑框:编辑框实际上是一个完整的字处理器,利用它能够选择、剪切、粘贴及复制正文;可以实现自动换行,能够有自己的垂直滚动条,可以用箭头键在正文里面移动光标。编辑框只能输入、编辑字符型数据,包括字符型内存变量、数组元素和字段里的内容。
常用属性有:
(1)ControlSource属性:用于指定编辑框的数据来源,在编辑框中的输入或修改的结果将存放在指定的数据源。
(2)Readonly属性:设置用户能否修改编辑框的文本。值为.T.时,不能编辑编辑框中的内容;值为.F.时,允许编辑编辑框的内容,系统默认值为.F,。
(3)ScrollBars属性:指定编辑框是否具有滚动条。当属性值为0时,编辑框没有滚动条;当属性值为2(默认值)时,编辑框包含垂直滚动条。
(4)Value属性:返回文本框的当前内容。对文本框Value属性的设置决定了运行表单时,在文本框中显示的数据的值和类型。文本框中的数据可以是数值、字符、日期或逻辑型的。
2.复选框:此控件用于创建一个复选框,每个复选框都有两个状态,如.T.或.F.。当处于.T.状态时,即选中此复选框,则在复选框前面的方框中显示一个“√”;否则,复选框内为空白。
常用属性有:
(1)Caption属性:用来指定显示在复选框旁边的文字。
(2)Value属性:用来指明复选框的当前状态,Value属性的设置有3种情况。
① 0或.F.,复选框呈清除(也称为未选中)状态。
② l或.T.,复选框呈选中状态。
③ 2或.Null.,复选框呈灰色状态。当复选框获得焦点时,只要用户按<Ctrl>+<0>,就在复选框中输入.NULL.,使复选框显示灰色。
(3)ControlSource属性:指明与复选框建立联系的数据源。
3.选项框:选项组又称为选项按钮组,是包含选项按钮的一种容器。一个选项组中往往包含若干个选项按钮,但用户只能从中选择一个按钮,当用户选择某个选项按钮时,该按钮即成为被选中状态,而选项组中的其他选项按钮,不管原来是什么状态,都变为未选中状态。被选中的选项按钮中会显示一个圆点。
常用属性有:
(1)ButtonCount属性:指定选项组中选项按钮的数目。在表单中创建一个选项组时,ButtonCount属性的默认值是2。可以通过改变ButtonCount属性的值来重新设置选项组中包含的选项按钮数目。
(2)Value属性:用于指定选项组中哪个选项按钮被选中。该属性值的类型可以是数值型的,也可以是字符型的。
(3)ControlSource属性:指明与选项组建立联系的数据源。作为选项组数据源的字段变量或内存变量,其类型可以是数值型或字符型。比如,变量值为数值型2,则选项组中第2个按钮被选中;若变量值为字符型“Option2”,则Caption属性值为“Option2”的按钮被选中。用户对选项组的操作结果会自动存储到数据源变量及Value属性中。
4.计时器:计时器控件可以进行计时,可以按某个时间间隔周期性地执行指定的操作。
常用属性有:
(1)Timer事件:即计时器事件,是在时间间隔到时触发的事件。应该编写该事件的代码,指定完成某个操作。
(2)Interval属性:用于指定一个时间间隔,即一个计时器事件和下一个计时器事件之间的毫秒数。如果计时器有效,将以近似相等的时间间隔触发计时器事件。
(3)Enabled属性:若将该属性设置为.T.,计时器就能在表单开始运行时启动计时工作。如果设置Enabled属性为.F.,就会挂起计时器的运行;这种情况下,可以使用表单上别的控件的某个事件(如命令按钮的Click事件)启动计时器的工作。
5.线条、形状和图像:形状和线条用于在表单上添加线条、方框、圆或椭圆形状。
常用属性有:
(1)BackColor属性:确定对象的边框颜色。
(2)BorderStyle属性:确定对象的边框样式。
(3)BorderWidth属性:确定对象的边框宽度。
(4)Fillstyle属性:确定形状对象的填充样式。
(5)FillColor属性:确定形状对象的填充颜色。
(6)Curvature:确定形状对象的4个角的变曲程度,属性值范围是0(直角)到99(圆)。
(7)LineSlant:该属性的有效值为斜杠(/)和反斜杠(\),用于决定当线条既不水平又不垂直时线条倾斜的方向。
(8)SpeciaEffect属性:确定形状是平面的还是三维的,当Curvature属性设置为0时才有效。
图像控件用于在表单上显示图像,在表单中添加该控件,作为标志或起装饰作用的图片(.bmp文件)。常用属性如下。
(1)Picture属性:提供在控件上要显示的图片(.bmp或.ico文件)。
(2)BorderStyle属性:决定图像是否具有可见的边框。
(3)Backstyle属性:决定图像的背景是否透明。
(4)Stretch属性:如果Stretch设置为0——剪裁,则超出图像控件范围的那一部分图像将不显示;如果Stretch设置为l——等比填充,图像控件将保留图片的原有比例,并在图像控件中显示最大可能显示的图片;如果Stretch设置为2——变比填充,则调整图片正好与图像控件的高度和宽度相匹配。
【实验内容】
1.创建一个表单。当选定字体、字号和颜色时,文本框中的字符就按选定设置显示。
2.创建一个表单,添加一个计时器和一个线条控件。要求每过0.1秒,线条就会逐渐加粗。
3.新建一个表单,在该表单上添加一个文本框控件,几个复选框控件和两个标签控件,如下图。要求,当你选中若干个复选框时,文本框中出现相应的数字。
4.新建一个表单,具有图像控件和命令按钮。要求当点击“填充图片”按钮时,为该图像控件填充一张图片,当点击“等比填充”和“变比填充”两个按钮时,分别以两种方式填充图片。结果如图。
【高手进阶】
1.能否为某一表单(如“学生档案表”)再加一个“欢迎进入”的画面。
【自我测试】( 5分钟 )
1.根据学生表做一个能对各门课程统计平均成绩的表单。如下图。
【实验过程】
1.创建一个表单。当选定字体、字号和颜色时,文本框中的字符就按选定设置显示。
[解答]练习使用“文本框”和“单选”钮
(1) 为单选钮组编写事俾代码:
在OptionGroup1的Click事件中输入:
DO CASE
CASE THIS.Value=1 && 表示当前单选钮组得到光标后,定位在第1项上
THISFORM.Text1.FontName="宋体"
CASE THIS.Value=2
THISFORM.Text1.FontName="隶书"
CASE THIS.Value=3
THISFORM.Text1.FontName="黑体"
CASE THIS.Value=4
THISFORM.Text1.FontName="楷体_GB2313"
ENDCASE
或:
DO CASE
CASE ThisForm.OptionGroup1.VALUE = 1 && 表示当前单选钮组第1项得到光标
ThisForm.Text1.FontName="宋体" && 设置字体为“宋体”
CASE ThisForm.OptionGroup1.VALUE = 2
ThisForm.Text1.FontName="隶书"
CASE ThisForm.OptionGroup1.VALUE = 3
ThisForm.Text1.FontName="黑体"
CASE ThisForm.OptionGroup1.VALUE = 4
ThisForm.Text1.FontName="楷体_GB2313"
ENDCASE
在OptionGroup2和OptionGroup3的Click事件中输入类似代码字号(FontSize):直接输入阿拉伯数字,如9、12、18、22
颜色(ForeColor):要在RGB()括号中输入数值。红色是255,0,0;蓝色是0,0,255;绿色是0,255,0;黑色是0,0,0
2.创建一个表单,添加一个计时器和一个线条控件。要求每过0.1秒,线条就会逐渐加粗。
[解答]
(1)新建一个表单,打开表单设计器。
(2)在表单上添加一个直线控件。该控件的Borderwidth的初值为1。
(3)在表单上添加一个计时器控件。该控件的Interval属性为100。
(4)在计时器的Timer事件中输入如下代码:
IF ThisForm.xx.Borderwidth<100
ThisForm.xx.Borderwidth=ThisForm.xx.Borderwidth+1
ENDIF
(5)保存并运行表单。
3.新建一个表单,在该表单上添加一个文本框控件,几个复选框控件和两个标签控件,如下图。要求,当你选中若干个复选框时,文本框中出现相应的数字。
[解答]
(1)新建一个表单,打开表单设计器。
(2)在该表单添加六个复选框控件。其Caption属性分别为“旅游英语”“外国文化”“外交礼仪”“计算机英语”“实用文写作”“数学模型”。
(3)再添加一个文本框控件和两个标签控件“你一共选修了”“六门课”。
(4)在每个复选框控件的Click事件中输入如下代码:
ThisForm.Text1.Value=STR(Val(ThisForm.Text1.Value)+1)
(5)保存并运行表单。
4.新建一个表单,具有图像控件和命令按钮。要求当点击“填充图片”按钮时,为该图像控件填充一张图片,当点击“等比填充”和“变比填充”两个按钮时,分别以两种方式填充图片。结果如图。
[解答]
(1)新建一个表单,打开表单设计器。
(2)选取图像控件和三个命令按钮控件,分别绘制在如上图的位置。
(3)将三个命令按钮的Caption属性分别设置为“填充图片”“等比填充”和“变比填充”。
(4)编写代码。
在“填充图片”的Click事件中输入如下代码:
Thisform.image1.picture=”d:\picture.jpg”
Thisform.refresh
在“等比填充”的Click事件中输入如下代码:
Thisform.image1.stretch=1
Thisform.refresh
在“变比填充”的Click事件中输入如下代码:
Thisform.image1.stretch=2
Thisform.refresh
(5)保存并运行表单
【高手进阶解答】
1.能否为某一表单(如“学生档案表”)再加一个“欢迎进入”的画面
[解答]
(1)新建一个表单,取名“欢迎进入”,在“属性”窗口的“picture”栏中输入图片的路径(D:\软三VFP上机实训三\VF配套材料\表单\)和名称(00A);“Stretch”栏设置图像的放置方式(应选:2-变比填充)。
(2)再建一个“进入”命令按钮,在“Click(单击)”事件中输入:
DO FORM D:\软三VFP上机实训三\VF配套材料\表单\学生管理
&& 运行表单“学生管理”
THISFORM.RELEASE
【自我测试解答】
1.根据学生表做一个能对各门课程统计平均成绩的表单。如下图。
[解答]
(1)新建一个表单,打开表单设计器。
(2)右击表单,选择“数据环境”,打开数据环境设计器。将成绩表添加至数据环境中。
(3)将学号,课程号,成绩字段拖入表单,如图排列。
(4)再添加一个标签控件,一个文本框控件,一个命令按钮控件和一个编辑框控件。如图排列。标签控件的Caption属性设为“请输入课程号”。命令按钮的Caption属性设为“统计”。
(5)为命令按钮的Click事件编写如下代码:
SET TALK OFF
AVERAGE TO X FOR 课程号=ALLTRIM(ThisForm.Text1.Value)
ThisForm.Edit1.Value=ThisForm.Text1.Value+"的平均成绩为:"+STR(X,6,2)
(6)保存并运行表单。
练习四 常用控件,微调、页框、列表框、组合框、表格
【实验目的】
1.掌握几种控件的特点及其属性
2.熟练应用几种控件的事件并对能对其进行代码的编写
【知识要点】
 一、几种常用控件及其常用属性
1.微调控件:微调控件常用在给定数值范围及数值间距的情况下,让用户从数值范围内通过上调或下调操作,选择一个值或直接在微调框中输入值。
常用属性有:
(1)KeyboardHighValue属性:指定用户能输入到微调框中的最高值。
(2)KeyboardLowValbe属性:指定用户能输入到微调框中的最低值。
(3)SpinnerHighValue属性:指定当用户单击向上按钮时微调控件显示的最高值。
(4)SpinnerLowValue属性:指定当用户单击向下按钮时微调控件显示的最低值。
(5)Increment属性:用户每次单击向上或向下按钮时增加或减少的值(数值间距)。
(6)Value属性:返回用户输入的值。
(7)UpClick事件:用户单击向上按钮时响应的事件。
(8)DownClick事件:用户单击向下按钮时响应的事件。
2.页框:页框是可以包含多个页面(Page)的容器对象。每个页面也是容器,其中又可包含多个控件。
常用属性有:
(1)Tabs属性:确定页面选项卡是否可见。
(2)TabStyle属性:确定选项卡是否是相同大小且与页框的宽度相同。
(3)TabStretch属性:决定选项卡是单行还是多行显示。
(4)PageCount属性:决定页面中包含的页面数,有效值是0~99。
(5)Caption属性:用于指定页面的标题,即在选项卡上显示的文本。
(6)FontName和FontSize属性:设定页面标题的字体和字号。
3.列表框:列表框提供一组条目(数据项),用户可以从中选择一个或多个条目。一般情况下,列表框显示其中的若干条目,用户可以通过滚动条浏览其他条目。
常用属性有:
(1)RowSource 属性:指定列表框的条目数据源。
(2)RowSourceType属性:指明列表框中条目数据源的类型。
(3)ColumnCount属性:用于确定列表框的列数。若要形成多列列表,应该设置该属性值为列表的列数。
(4)ListCount属性:指明列表框中数据条目的数目。
(5)ControlSource属性:用户可以通过该属性指定一个字段或变量,用以保存用户从列表框中选择的结果。
4.组合框:组合框兼有列表框和文本框的功能。有两种形式的组合框,即下拉组合框和下拉列表框,通过更改组合框的Style属性来选择两者形式之一。
常用属性有:
(1)ControlSource属性:指定用户保存选择或输入值的表字段或变量。
(2)Colunmlines属性:指定在下拉列表框中是否显示分隔线,默认值为.T.,在下拉列表框中显示分隔线;如果为.F.,则不显示分隔线。
(3)RowSourceType属性:指定组合框中数据源类型。
(4)RowSource 属性:指定组合框中数据源的来源。
5.表格:表格控件用在表单上添加表格对象。表格是容器对象,包含多个列,每个表格列也是容器,包含标头和控件。。
常用属性有:
(1)ColumnCount属性:设置表格的列数。如果ColumnCount属性设置为1(默认值),则在运行表单时,表格的列数与RecordSource属性所指定的表中字段数目相同。
(2)AllowAddNew属性:是否允许在RecordSource属性所指定的表中追加新记录。
如果将AllowAddNew属性设置为真,当用户选中了表中最后一条记录,并且按下“↓”键时,就向表中添加新记录。
(3)ControlSource属性:指明在列中要显示的数据,一般是表中的一个字段。
(4)Sparse属性:若将Sparse属性设置为.T.,则运行表单时,列中被选中的单元格的数据才显示为控件,列中的其他单元格的数据仍以文本形式显示。
(5)CurrentControl属性:指定列中哪一个控件是活动的,默认值为“Text1”。
常用的列标头属性如下。
(1)Caption属性:指定标头的标题文本,显示在列顶部。
(2)Alignment属性:指定标题文本在对象中显示对齐方式。
【实验内容】
1.新建一个表单,在该表单上添加几个标签控件,三个微调控件,排列成如下图所示。要求当调节三个微调按钮时,可以改变表单的背景颜色。
2.新建一个表单,在该表单上添加一个列表框控件、一个标签控件和一个文本框控件。排列如下图,要求在列表框中选中一个学生姓名时,在文本框中会出现该学生的家庭住址。
3.用Xsda表创建一个表单,要求能输入新来学生(即插入新记录)和通过输入学号(或姓名)进行查找
4.新建一个表单,在该表单上添加一个组合框控件和两个标签控件,排列如下图。要求当对组合框中的选项进行选择时,可以通过这种选择将标签控件上的字体改变。
6、依据书库表新建一个表单,具有两个选项卡,分别为“查询”和“统计”。查询要求能够通过不同的条件进行查询。如可以根据书名,书号或者是作者进行查询。统计要求能够将订购所有教材所需的金额统计出来。
【高手进阶】
1.为Xsda表和Xscj表创建一个表单,使选择姓名,可显示该生的学号、课程号、分数等情况。
【综合测试】( 5分钟 )
1.对Rsda表,建一个通过输入“编号”、“姓名”、“性别”或“职务”的查询表单
【实验过程】
1.新建一个表单,在该表单上添加几个标签控件,三个微调控件,排列成如下图所示。要求当调节三个微调按钮时,可以改变表单的背景颜色。
解答:
(1)新建一个表单,打开表单设计器。
(2)在表单上添加三个标签控件。其Caption属性分别为“R”“G”“B”。
(3)再在上面添加三个微调控件。
(4)在三个微调控件的“Downclick”和“Upclick”事件均填写如下代码:
Thisform.backcolor=rgb(thisform.spinner2.value,thisform.spinner3.value,thisform.spinner1.value)
(5)保存并运行表单。
2.新建一个表单,在该表单上添加一个列表框控件、一个标签控件和一个文本框控件。排列如下图,要求在列表框中选中一个学生姓名时,在文本框中会出现该学生的家庭住址。
解答:
(1)新建一个表单,打开表单设计器。
(2)在表单上添加一个列表框控件。右击列表框控件,选择“生成器”。在生成器中的“列表项”中选择学生表中的姓名字段作为填充列表的字段。关闭生成器。
(3)在表单上添加一个标签控件。设其Caption属性为“该生家住在:”。
(4)在表单上添加一个文本框控件。
(5)列表框控件的Click事件中填入如下代码:
ThisForm.Text1.Value=家庭住址
(6)保存并运行表单。
3.用Xsda表创建一个表单,要求能输入新来学生和通过输入学号(或姓名)进行查找练习使用命令钮输入代码
(1)进入“表单设计器”:
(2)将表Xsda添加到“数据环境设计器”中,将整个表全拖入(或逐个字段拖入)“表单设计器”中,并调整大小和位置;
(3)单击“控件工具栏”上的“标签”钮后,在表单上方拖出标签框,在“属性”框的“Caption”栏中输入“学生情况一览表”(并在“FontName”、“FontSize”、“ForeColor”栏中确定字体、字号、颜色等);
(4)建三个命令按钮:“录入”、“查找”和“退出”;
(5) 右击“录入”命令按钮,选“代码”项,在“Click(单击)”事件中输入:
 APPEND BLANK && 添加一条空白记录
 ThisForm.Refresh 
(6)右击“查找”命令按钮,选“代码”项,在“Click(单击)”事件中输入:
 LOCATE FOR 学号=ALLTRIM(THISFORM.TEXT1.VALUE)
* LOCATE FOR 姓名=ALLTRIM(THISFORM.TEXT2.VALUE)
* SET FILTER TO 学号=ALLTRIM(THISFORM.TEXT1.VALUE) ;
OR 姓名=ALLTRIM(THISFORM.TEXT2.VALUE)
IF EOF()
MESSAGEBOX("查无此人!")
ENDIF
THISFORM.REFRESH
(7) 右击“退出”命令按钮,选“代码”项,在“Click(单击)”事件中输入:
THISFORM.RELEASE
(8)保存名为“学生情况一览表”。
4.新建一个表单,在该表单上添加一个组合框控件和两个标签控件,排列如下图。要求当对组合框中的选项进行选择时,可以通过这种选择将标签控件上的字体改变。
解答:
(1)新建一个表单,打开表单设计器。
(2)在表单上添加两个标签控件。它们的Caption属性分别为“这是一个实验”和“请选择字体:”。
(3)再添加一个组合框。右击该控件,选择“生成器”。在生成器的列表项选项卡中,选择“手工输入数据”,再在列表中输入“黑体”“隶书”“宋体”“幼圆”四种字体的名称。关闭生成器。
(4)在组合框的Click事件中输入下列代码:
Thisform.label1.fontname=thisform.combo1.value
(5)保存并运行表单。
5、依据书库表新建一个表单,具有两个选项卡,分别为“查询”和“统计”。查询要求能够通过不同的条件进行查询。如可以根据书名,书号或者是作者进行查询。统计要求能够将订购所有教材所需的金额统计出来。
解答:
(1)新建一个表单,打开表单设计器。
(2)在表单上添加一个页框控件,其两个选项卡的Caption的属性分别为“查询”和“统计”。
(3)选中第一个选项卡。右击选择数据环境。添书店表添加到数据环境中,将书库表中的几个字段从数据环境中拖入选项卡中。再添加两个标签“查找条件”和“查找内容”,两个文本框和两个命令按钮“查询”和“退出”。
(4)在“查询”命令按钮的Click事件中添加如下代码:
x=alltrim(thisform.pageframe1.page1.text1.value)
locate for &x=alltrim(thisform.pageframe1.page1.text2.value)
thisform.refresh
在“退出”按钮的Click事件中添加如下代码:
Thisform.release
(5)选中第二个选项卡。在其中添加一个表格控件。右击选择生成器,选择书库表的中所有字段为输出字段。关闭生成器。再添加一个标签“订购教材总费用为:”、一个文本框和一个命令按钮“统计”
(6)在“统计”命令按钮的Click事件中输入如下代码:
sum 总金额 to x
thisform.pageframe1.page2.text1.value=str(x,10,2)
(7)保存并运行表单。
【高手进阶解答】
1.为Xsda表和Xscj表创建一个表单,使选择姓名,可显示该生的学号、课程号、分数等情况练习如何使用“组合框”和“列表框”,且对两个表的关联操作
(1) 向表单中添加对象:
添加一个标签(Label)、一个组合框(Combo)、一个表格(Grid)、一个命令按钮(Command),并设定标题、字体、字号、颜色等。
(2)对组合框:右击“组合框”,选“生成器”命令。在“列表项”选项中选Xsda表的“姓名”字段;
(3)对表格:右击“表格”,选“生成器”命令。在“表格项”选项中选Xscj表的“学号”、“课程号”和“考试成绩”三字段;在“关系” 选项中的“父表中的关键字段”中选“Xsda.学号”,在“子表中的相关索引”中选“学号”
注意:子表“Xscj”要先建索引
【自我测试解答】
1.对Rsda表,建一个通过输入“编号”、“姓名”、“性别”或“职务”的查询表单,练习如何使用“表格”、“单选”钮和“命令”钮
(1)将表Rsda添加到“数据环境设计器”中,将整个表全拖入(或逐个字段拖入)“表单设计器”中,并调整大小和位置;
(2)添加如下图所示的各控件(两个标签、一个文本框、一个单选按钮、两个命令按钮)
(3)单选按钮设置个数为“4”、各标题(Caption)分别如上图所示。
(4)在单选钮的“单击”(Click)事件中输入代码:
Do Case
Case ThisForm.OptionGroup1.VALUE = 1
ThisForm.Label2.Caption =,请输入要查询的编号:”
Case ThisForm.OptionGroup1.VALUE = 2
ThisForm.Label2.Caption =,请输入要查询的姓名:
Case ThisForm.OptionGroup1.VALUE = 3
ThisForm.Label2.Caption =,请输入要查询的性别:
Case ThisForm.OptionGroup1.VALUE = 4
ThisForm.Label2.Caption =,请输入要查询的职务:
EndCase
ThisForm.Text1.Value =,,&& 清空文本框1的值
ThisForm.Text1.SetFocus && 使文本框1获得焦点
ThisForm.Refresh
(5)在“查询”命令按钮的“单击”(Click)事件中输入代码:
Select Rsda
Do Case
Case ThisForm.OptionGroup1.VALUE = 1
Set Filter To 编号 = Alltrim(ThisForm.Text1.Value)
Case ThisForm.OptionGroup1.VALUE = 2
Set Filter To 姓名 = Alltrim(ThisForm.Text1.Value)
Case ThisForm.OptionGroup1.VALUE = 3
Set Filter To 性别 = Alltrim(ThisForm.Text1.Value)
Case ThisForm.OptionGroup1.VALUE = 4
Set Filter To 职务 = Alltrim(ThisForm.Text1.Value)
EndCase
ThisForm.Refresh
(6)在“退出”命令按钮的“单击”(Click)事件中输入代码:
ThisForm.Release
(7)保存名为“查询职工”。
第8章 菜单设计、消息栏和工具栏练习一 菜单设计基本操作
【实验目的】
了解设计菜单的步骤;
熟练掌握菜单设计器创建菜单;
掌握菜单运行方法;
【知识要点】
一、菜单的组成
菜单系统是由菜单栏、菜单项和下拉菜单组成。菜单栏位于标题下方,用于放置各个菜单项;菜单项是菜单栏中的一个菜单的名称。单击菜单项就可弹出下拉菜单。菜单是包含命令、过程和子菜单的选项列表,可分为父菜单和子菜单两类,子菜单挂在父菜单下作为父菜单的一个菜单项。
二、菜单设计的步骤菜单设计一般包含以下几个步骤:
菜单系统的规划、建立菜单与子菜单、把任务分派到菜单系统中、生成菜单程序、测试和运行菜单系统等。
三、用菜单设计器创建菜单及子菜单
1.启动菜单设计器:
,文件/新建”-(“类型”选)“菜单”-“新建文件”钮
2.创建菜单项:
在“菜单名称”列中输入要创建的菜单项[可用“(\<字母>)”,建立热键]
3.创建子菜单:
单击“菜单名称”右侧“编辑”-(为此菜单项)输入要创建的子菜单[也可建立热键]
4.为菜单或菜单项指定任务:
选定菜单项-在“结果”栏中选“命令”(或“过程”)-在编辑框中输入相应的命令或调用其它程序
5.生成菜单程序:
,菜单/生成”-(“生成菜单”的“输出文件”框)确定菜单的名称和位置-“生成”钮(菜单的扩展名为.MPR)
凡菜单有修改,都应重新“生成”一次
6.运行菜单程序:[因菜单是一个程序,因此运行菜单就是运行程序]
(1)“程序/运行”-选定菜单(程序)-“运行”
(2)DO 菜单名.MPR
【实验内容】
一、设计菜单
1.在学生表.dbf,课程表.dbf,成绩表.dbf三个表的基础上用菜单设计器设计一个用户自定义的菜单系统:如下所示:
系统维护(S)
个人资料(D)
成绩查询(C)
报表(P)
帮助(H)
口令维护(K)
个人资料查看(Q)
个人成绩查询(G)
基本情况(O)
目录与索引(V)
退出系统(X)
个人资料修改(J)
班级成绩查询(B)
学生成绩(C)
关于…… (A)
科目成绩查询(K)
【高手进阶】
进一步完成上面的菜单操作:
为菜单或菜单项指定任务(以成绩查询中个人成绩查询为例):虽然我们完成了菜单构架的设计,但是具体功能是如何实现的呢?
【自我测试】
设计一个如下的菜单系统:
系统维护
书籍查询
数据管理
口令维护
按作者查询
数据的修改
推出系统
按书名查询
数据的增加
按出版社查询
【实验过程】
一.启动菜单设计器创建一个菜单(学生管理.mnx):
1.,文件/新建”-(“类型”选)“菜单 / 新建文件”钮
2,在菜单类型选择的时候选择菜单,这里不做快捷菜单
3.进入菜单设计器窗口
二.创建菜单项:
在“菜单名称”列中输入要创建的菜单项(就是主菜单,快捷键和热键直接在菜单名称后面输入即可)如下图:
注意:在这里结果项都是子菜单,因为他们下面都有自己的子菜单三.创建子菜单:
单击结果旁边的创建按钮即可进入该菜单的子菜单创建对话框,如给成绩查询建立子菜单:单击成绩查询然后单击创建按钮注意:在子菜单的结果选项中,选择命令,当然其他选项也可以,因为所有的子菜单都是执行某一个功能,这里我们以个人成绩查询为例讲解整个过程。在选项中输入命令:DO FROM 个人成绩查询.scx (意思是当用户单击个人成绩查询时就运行表单FROM 个人成绩查询,进入个人成绩查询界面)
4.为菜单或菜单项指定任务,
选定菜单项-在“结果”栏中选“命令”(或“过程”)-在编辑框中输入相应的命令或调用其它程序(在2,3的一步已做分析)
5.生成菜单程序:
,菜单/生成”-(“生成菜单”的“输出文件”框)确定菜单的名称和位置-“生成”钮(菜单的扩展名为.MPR)
凡菜单有修改,都应重新“生成”一次
6.运行菜单程序:[因菜单是一个程序,因此运行菜单就是运行程序]
(1)“程序/运行”-选定菜单(程序)-“运行”
(2)DO 学生管理.mpr
【高手进阶解答】
进一步完成上面的菜单操作:
为菜单或菜单项指定任务(以成绩查询中个人成绩查询为例):虽然我们完成了菜单构架的设计,但是具体功能是如何实现的呢?就如,个人成绩查询模块的实现过程如下:
创建一个表单(个人成绩查询.scx)
添加控件一个标签对象(LABEL1),一个文本框对象(TEXT1),一个命令按钮对象(COMMAND1),一个表格对象(GRID1)
设置对象属性
LABEL1.CAPTION=”输入学号:”
LABEL1.FONTSIZE=16
TEXT1.FONTSIZE=16
COMMAND1.CAPTION=”确定”
COMMAND1.FONTSIZE=16
GRID1.ENABLED=.f.
GRID1.VISIBLE=.f.
4.设置数据环境
方法:①菜单操作,显示----﹥数据环境,把学生表,课程表,成绩表添加进来
②鼠标右键单击表单任意空白处弹出快捷菜单---﹥数据环境,把学生表,课程表,成绩表添加进来
5.编写事件代码双击“确定”按钮,出现COMMAND1的CLICK事件编辑框,事件代码为:
SELE 学生表
LOCATE FOR ALLT(THIDFORM.TEXT1.VALUE) =ALLT(学生表.学号)
IF FOUND()
THIDFORM.GRID1.ENABLED=.t.
THIDFORM.GRID1.VISIBLE=.t.
THIDFORM.GRID1.RECORDSOURCETYPE=4
THIDFORM.GRID1.RECORDSOURCE="SELECT 学生表.学号,姓名,课程名,成绩 FROM 学生表,课程表,成绩表 WHERE 学生表.学号=成绩表.学号 AND 课程表.课程号=成绩表.课程号 AND ALLT(学生表.学号)=ALLT(THIDFORM.TEXT1.VALUE) INTO CURS TEMP1"
ELSE
MESSAGEBOX("没有该学生!!")
ENDIF
THIDFORM.REFRESH
6.保存,运行及调试
保存:“保存”工具或“文件”菜单下“保存”命令等方法,但文件名要为“个人成绩查询.scx”
运行:DO 学生管理.mpr或点击“!”
【自我测试解答】
步骤(略)

第9章 报表与标签练习一 报表与标签基本操作
【实验目的】
掌握用报表向导创建报表;
熟练掌握使用报表设计器创建报表;
【教材内容】
一、报表
报表包括两个基本部分:数据源和布局。
数据源是报表的数据来源,它通常是数据库中的表或自由表,也可以是视图、查询或临时表。
布局定义报表的打印格式。
报表设计就是根据报表的数据源和应用需要来设计报表的布局。
二、创建报表
1.基本步骤:
(1)选定报表类型;
(2)建立报表文件;
(3)编辑报表文件;
(4)预览和打印报表;
2.创建报表:
(1)利用“报表向导”
“文件/新建”-(类型)选“报表”-“向导”钮-选择向导-按提示进行
(2)利用“报表设计器”
①“文件/新建”-(类型)选“报表”-“新建文件”钮
②CREATE REPORT 报表文件名
进入“报表设计器”
三、设计报表
1.“页标头”带区:
位于每一页的顶部并出现在每一页中,即每页的标题。常用于显示各字段名与分隔线。
2.“细节”带区:
常用于显示表中各字段记录的值。运行报表时表中记录按细节规定的格式输出。
3.“页注脚”带区:
位于每一页的底部并出现在每一页中,即每页的结尾。常用于显示报表页码、日期与时间等。
4.工具栏:
“报表设计器”、“报表控件”、“布局”等。可从“显示”菜单中调出
5.设置报表“数据源”:
(1)设置“数据环境”
①“显示/数据环境”
②右击“报表设计器” —,数据环境”
③单击“数据设计器”工具箱中“数据环境”钮
(2)向“数据环境”中添加表、视图
①“数据环境/添加”
②右击“数据环境设计器” —,添加”
③单击“报表设计器”工具箱中“数据环境”钮
6.修改报表带区:
(1)调整大小拖带区标识栏
(2)放置控件单击“报表控件”工具箱中“控件”钮 — 放置控件
如:用“标签”控件,为各字段加上字段名作为小标题
【实验内容】
1.用报表向导为学生表创建一个学生基本情况报表(学生基本情况.frx)
2.用报表设计器为书库创建一个书籍情况报表(书籍情况.frx)
【高手进阶】
1.用报表向导为学生表,成绩表创建一个“一对多报表”学生成绩报表(学生成绩.frx)
2.使用标签向导为学生表设计一个准考证的标签。如下图:
【自我测试】
用报表设计器为学生表设计一个学生情况报表(学生情况.frx)
【实验过程】
1.用报表向导为学生表创建一个学生基本情况报表(学生基本情况.frx)
① 启动报表向导
“文件/新建”-(类型)选“报表”-单击“向导”钮-选“报表向导”-(按提示进行)
② 字段选取
选择表学生表 -再选择所需字段,按“添加”钮,将其添加到“选定字段”框中
(见图2)
③ 分组记录
这里不分组
④ 选择报表样式(见图 3)

图 1 图 2
 
图 3 图 4
⑤ 定义报表布局(见图 4)
可以定义报表的方向为“横向”或“纵向”
⑥ 排序记录(见图 5)
这里我们以学号排序
⑦ 完成(见图 6)
完成以前可以先预览一下报表
图 5 图 6
2.用报表设计器为书库创建一个书籍情况报表(书籍情况.frx)
(1)启动报表设计器
“文件/新建”-(类型)选“报表”-单击“新建文件”钮 (按提示进行)
(2) 设置报表“数据源”
①,显示/数据环境”
② 右击“报表设计器” —,数据环境”
③ 单击“数据设计器”工具箱中“数据环境”钮,然后把书库表(书库.dbf)添加进来
(3) 设计报表(见图 10)
①“标题”带区首先应该把“标题”带区调出来,方法是“报表”菜单---→“标题/总结”,然后添加“标签”控件,并输入内容
②“页标头”带区:
日期部分:首先添加“域”控件,然后输入表达式date()(日期是调用的日期函数)
线条部分:直接用“线条”控件即可页标头部分:先用“线条”控件和“矩形”控件画好表格,然后用“标签”控件写上相应的页标头
③“细节”带区
直接使用“域”控件将书库表中需要的字段添加近来
④“页注脚”带区
直接使用“标签”控件将需要的信息添加即可
图 10
(4)预浏与打印(见图 11)
①文件/打印
②报表/运行报表
【高手进阶解答】
1,用报表向导为学生表,成绩表创建一个“一对多报表”学生成绩报表(学生成绩.frx)
(1) 启动报表向导
“文件/新建”-(类型)选“报表”-单击“向导”钮-选“一对多报表向导”-(按提示进行)
(2) 字段选取
① 指定父表(学生表)并选择父表所需字段,将其添加到“选定字段”框中(见图7)
② 指定子表(成绩表)并选择子表所需字段,将其添加到“选定字段”框中(见图8)
(3) 建立两表的关联(系统会自动选定相匹配的字段)(见图 9)
(4) 选择报表样式
图 7 图8
图 9
(5)定义报表布局
(6) 排序记录
(7)完成
2.使用标签向导为学生表设计一个准考证的标签。
(1)启动标签向导
(2)选择表
(3)选择标签类型
这里可以在英制和公制之间转换。
(4)定义布局在这个步骤中可以选定表中的字段和“,”,“、”,“。”等符号来设计标签。对于准考证标签的设计,这里还需要使用字符常量,比如“准考证”,“学号”,“姓名”这些提示信息,就只能在文本框中输入相关的提示信息,然后添加到选定字段中。如下图:
(5)排序记录
(6)完成
【自我测试解答】
操作和上面基本上相同

第二部分 计算机VF二级考试上机部分复习资料
第一套上机复习题
1.建立数据表文件,输入相应数据,
(1)图书档案表(Library.dbf):
书号
书名
作者
出版者
7-008959-0
VisualFoxPro程序设计
熊发涯
0012
7-002305-0
VisualBasic实例讲解
罗云
0012
7-552923-5
办公自动化教程
吴昌平
0064
7-05740-7
概念Flash5教程
谭浩强
0015
7-485003-1
新C程序设计
陈江枫
0055
(2)出版社表(Publishing.dbf)
出版者
出版社名称
地区
电话
0012
中国铁道出版社
北京
010-64046666
0064
华东大学出版社
上海
020-44562149
0015
重庆大学出版社
重庆
023-66574211
0055
清华大学出版社
北京
010-67851452
2.数据表如1题。程序设计,程序文件名为Ksll.prg(注:在程序开头处,必须用【注释】语句输入学校名、准考证号、姓名,否则该程序无效!)。
使用VFP数据表操作命令或者VFP-SQL命令,输入出版社所在地区,按下格式显示满足条件的图书目录。
XX地区的图书目录
————————————————————
书名 出版社名 作者
…… …… ……
3.表单设计。按以下要求设计程序界面,表单文件名为:FORM101.SCX
设计如图所示一个表单。包括3个标签,2个文本框,2个命令按钮(各控件的大小、颜色、字体、字号等属性由考生自定)。其中。
① 表单顶部的标签用来显示考生自己的姓名和考号;
② 文本框Text1和Text2的显示初值为空白;
③ 该表单运行后,可以在文本框Text1中输入圆半径(0~1000),左键单击“计算”命令按钮,则在文本框Text2中显示圆的面积;
④ 单击“退出”钮,结束表单程序的运行。
参考答案[此两表已建好,可到学校网站www.cqeec.com 下载练习配套材料]
[建表各10分(表名2分、字段名4分、数据类型2分、宽度2分),录入数据正确,各10分。一个记录出错,扣2分]
2.程序设计:
******************************************
* 重庆信息技术职业学院 0101001 王XX *
* KSLL.PRG *
******************************************
用VFP数据表操作命令,
SET TALK OFF
SET SAFETY OFF
CLEAR
SELECT 1
USE Library
INDEX ON 出版者 TO AA
SELECT 2
USE Publishing
SET RELATION TO 出版者 INTO A
ACCEPT "请输入地区名:" TO DQ (开库和输入地区名:10分)
LOCATE FOR 地区=DQ (查询:15分)
" "+DQ+"地区的图书目录”
"———————————————————————————"
" 书名 出版社名 作者" (标题:10分)
DO WHILE,NOT.EOF()
MN = 出版者
SELECT 1
LOCATE FOR 出版者 = MN
DO WHILE,NOT.EOF()
书名+B->出版社名称+" " +作者
CONTINUE
ENDDO
SELECT 2
CONTINUE && 找第二个同一地区的出版者
ENDDO (输出格式与内容显示正确25分)
RETURN
用SQL语句:
ACCEPT "请输入地区名:" TO DQ
SELECT 书名,出版社名称,作者 FROM Library,Publishing ;
WHERE Library.出版者=Publishing.出版者 AND地区 IN ;
(SELECT 地区 FROM Publishing WHERE 地区=DQ)
3,表单设计:
界面设计(10分)
主要属性、事件代码:
1)Text1和Text2的属性值为默认字符型(2分)
2)“计算”按钮的Click事件代码:(10分)
R = VAL(ThisForm.Text1.Value) && 文本框1(Text1)中输入的值赋给变量R
ThisForm.Text2.Value = 3.14*R*R && 把计算结果赋给Text2
,退出” 按钮的Click事件代码:(8分)
ThisForm.Release
第二套上机复习题
1.建立如下表文件,并输入数据:
数学兴趣小组表文件JSJ.DBF:
学号 姓名 性别 民族 政治面貌 籍贯 入学成绩
1104 王景录 男 回族 党员 云南省 750
1123 曾灵瑞 女 汉族 预备党员 重庆市 680
1205 赵小锐 男 苗族 无 贵州省 620
1109 王小云 女 藏族 团员 西藏 632
1101 向晓英 女 朝鲜族 团员 吉林省 589
英语兴趣小组表文件WY.DBF:
学号 姓名 性别 民族 政治面貌 籍贯 入学成绩
1101 向晓英 女 朝鲜族 团员 吉林省 589
1114 伍小录 女 汉族 团员 云南省 489
1123 曾灵瑞 女 汉族 预备党员 重庆市 680
1205 赵小锐 男 苗族 无 贵州省 620
1015 洪林 男 藏族 党员 重庆市 423
2.程序设计题:
上面的两个数据库文件的结构是完全相同的,数学兴趣小组JSJ.DBF和英语兴趣小组WY.DBF,它们的主关键字是“学号”字段。根据学校规定,一个学生同时参加两个课外活动小组时,以参加数学兴趣小组的优先。请使用VFP数据表操作命令编写程序PROG1.PRG(注:在程序开头处,必须用【注释】语句输入学校名、准考证号、姓名,否则该程序无效!),其功能是:
根据学号将同时参加两个小组的学生记录从英语兴趣小组中删除;并将删除的记录存放到结构相同的数据库CF.DBF中;并要求按学号升序排列输出CF.DBF中的所有记录。
3.请用VFP-SQL命令,编写程序,将同时参加两个小组的学生从英语兴趣小组中删除,并显示删除的记录。
4.表单设计。按以下要求设计程序界面,表单文件名为:FORM201.SCX
设计如图所示一个表单。包括4个标签,3个文本框,2个命令按钮(各控件的大小、颜色、字体、字号等属性由考生自定)。其中。
① 表单顶部的标签用来显示考生自己的姓名和考号;
② 文本框Text1、Text2和Text3的显示初值为0;
③ 该表单运行后,可以在文本框Text1、Text2中输入长方形的长和宽(0~1000),左键单击“计算”命令按钮,则在文本框Text3中显示长方形的周长;
④ 单击“退出”钮,结束表单程序的运行。
参考答案[此两表已建好,可到学校网站www.cqeec.com下载练习配套材料]
2.程序设计:
******************************************
* 重庆信息技术职业学院 0201001 王XX *
* PROG1.PRG *
******************************************
用VFP数据表操作命令:
SET TALK OFF
SET SAFETY OFF
CLEAR
SELECT 1
USE Jsj
INDEX ON 学号 TAG XH
SELECT 2
USE Wy
SET RELATION TO 学号 INTO A
DO WHILE NOT EOF()
IF 学号=A.学号
DELETE
ENDIF
SKIP
ENDDO
COPY TO Cf FOR DELETE()=.T.
PACK
USE Cf
RECALL ALL
INDEX ON 学号 TAG XH1
LIST
CLOSE ALL
RETURN
或:
SET TALK OFF
CLEAR
SELECT 1
USE Jsj
INDEX ON 学号 TAG XH
SELECT 2
USE Wy
SET RELATION TO 学号 INTO A
COPY TO Cf FOR 学号=A.学号
DELETE FOR 学号=A.学号
PACK
USE Cf
INDEX ON 学号 TAG XH1
LIST
RETURN
3.SQL语句:将同时参加两个小组的学生从英语兴趣小组中删除,并显示删除的记录
DELETE FROM Wy WHERE 学号 IN(SELECT 学号 FROM Jsj)
SELECT * FROM Wy WHERE FOR DELETE()=.T.
PACK
4.表单设计:
界面设计主要属性、事件代码:
1)Text1、Text2和Text3的Value属性值均为0
2)“计算”按钮的Click事件代码:
ThisForm.Text3.Value = ;
((ThisForm.Text1.Value) + (ThisForm.Text2.Value))*2
“退出” 按钮的Click事件代码:
ThisForm.Release
第三套上机复习题
1.某超市销售管理系统中,以下2个数据表反映一个月内手机销售、库存情况。
(1)商品月库存表(Stockll.dbf)
商品代码
品名
型号
单价
库存数量
1536
波导
N8250
2250.00
16
2603
海信
3310
990.00
18
6054
西门子
8088
2090.00
12
7850
爱立信
T29
1380.00
14
5203
首信
2118
1470.00
18
(2)销售明细表(Sell.dbf)
商品代码
日期
销售数量
营业员
2603
2001-11-12
5
刘飞
6054
2001-11-12
6
刘飞
7850
2001-11-13
4
张和均
2603
2001-11-14
10
赵亮
按以上数据表内容创建Stockll.dbf和Sell.dbf数据文件,录入数据。
2,程序设计,要求将完成下列任务的VFP数据表操作命令或VFP-SQL命令写在该程序文件中程序文件名为Prog3.prg。(注:在程序开头处,必须用【注释】语句输入学校名、准考证号、姓名,否则该程序无效!),其功能是:
输入营业员姓名,比如:刘飞。显示该营业员本月销售明细表,及商品的销售金额。
要求按商品代码排序。格式如下:
XX营业员 的销售业绩
——————————————————————————
日期 商品名称 销售量 销售金额
… … … …
… … … …
3,请用VFP-SQL命令,编写程序,显示商品的品名、型号、单价、库存数量和库存金额。
4.表单设计。按以下要求设计程序界面,表单文件名为:FORM0202.SCX
设计如图所示一个表单。包括3个标签,1个文本框(各控件的大小、颜色、字体、字号等属性由考生自定)。其中。
① 表单顶部的标签用来显示考生自己的姓名和考号;
② 文本框Text1的显示初值为0;
③ 该表单运行后,在文本框Text1中输入正确口令“CQEEC”,左键单击表单任意空白处,则在文本框Text2中显示“欢迎光临!”,否则显示“口令错误!”;
④ 双击表单任意空白处结束表单程序的运行。
参考答案[此两表已建好,可到学校网站www.cqeec.com下载练习配套材料]
2.程序设计:
******************************************
* 重庆信息技术职业学院 0202001 王又发 *
* PROG3.PRG *
******************************************
用VFP数据表操作命令:
SET TALK OFF
CLEAR
SELECT 1
USE Stockll
INDEX ON 商品代码 TO A1
SELECT 2
USE Sell
INDEX ON 商品代码 TO A2
SET RELATION TO 商品代码 INTO A
ACCEPT "请输入营业员姓名:" TO NAME
" "+NAME+"营业员的销售业绩"
" ----------------------------------------------"
" 日期 商品名称 销售量 销售金额 "
DO WHILE NOT EOF()
IF 营业员=NAME
日期,SPACE(2),A.品名,销售数量,SPACE(6),销售数量*A.单价
ENDIF
SKIP
ENDDO
CLOSE ALL
RETURN
3.SQL语句:显示商品的品名、型号、单价、库存数量和库存金额。
SELECT 品名,型号,单价,库存数量,单价*库存数量 AS 库存金额 FROM Stockll
4.表单设计。
界面设计(10分)
主要属性、事件代码:
1)设置Text1的PasswordChar属性值为“*”
Text2的Caption属性值为“无”(使其在屏幕上不显示);(5分)
2)Text1的Valid(失去焦点)事件代码:(10分)
IF ThisForm.Text1.Value="CQEEC"
ThisForm.Label2.Caption="欢迎光临!"
ELSE
ThisForm.Label2.Caption="口令错误!"
ENDIF
3)Form1的DblClick(双击)事件代码:(5分)
ThisForm.Release
第四套上机复习题
1.建立如下表文件,并输入数据:
 现有职工数据表Zg.dbf和工资数据表Gz.dbf如下,
职工数据表Zg.db
编号 姓名 职称
027 陈林  讲师
015 曾丽 教授
135 王军 讲师
687 林忠 教授
工资数据表Gz.dbf
编号 基本工资 补贴  水电
015  2590.00 565.00 85.00
135  2500.00 374.00 95.00
687  1958.00 771.00 65.00
027  1894.00 468.00 75.00
2.程序设计题:
  编程序完成以下任务(程序文件名PROG4.PRG。注:在程序开头,必须用[注释]语句输入学校名、准考证号、姓名,否则无效!)。要求:
 (1)利用上面提供的两个数据表,输入要查询的职称名称;
 (2)使用VFP数据表操作命令或者VFP-SQL命令,根据职称名称查询该职称的情况和工资情况,并按如下格式显示。
输入职称=XX(如输入“教授“职称)
[注:实发工资 = 基本工资 + 补贴 - 水电 ]
教授职称职工情况表编号 姓名 职称 基本工资  补贴  水电 实发工资
015   曾丽 教授 2950.00  565.00 85.00 3070.00
687   林忠 教授 1958.00   771.00 65.00 2664.00
。。。 。。。 。。。 。。。 。。。 。。。 。。。
3.表单设计。按以下要求设计程序界面,表单文件名为:FORM0401.SCX(30分)
设计如图所示一个表单。包括2个标签,1个文本框,2个命令按钮及工资数据表Gz.dbf中的几个字段(各控件的大小、颜色、字体、字号等属性由考生自定)。其中。
① 表单顶部的标签用来显示考生自己的姓名和考号、第2个标签中输入“请输入职工编号:”;
② 该表单运行后,可以在文本框Text1中输入职工编号,单击“查询”钮,则在表单中显示该职工的工资情况;
③ 单击“退出”钮,结束表单程序的运行。
参考答案[此两表已建好,可到学校网站www.cqeec.com下载练习配套材料]
2.程序设计:
******************************************
* 重庆教授技术职业学院 0401001 王XX *
* PROG4.PRG *
******************************************
用VFP数据表操作命令:
SET TALK OFF
SET SAFETY OFF
CLEAR
SELECT 1
USE Gz
INDEX ON 编号 TAG XH
SELECT 2
USE Zg
SET RELATION TO 编号 INTO A
ACCEPT "请输入职称名称:" TO ZY
" " + ZY+"职称职工情况表"
" 编号 姓名 职称 基本工资 补贴  水电 实发工资"
LOCATE FOR 职称=ZY
DO WHILE,NOT.EOF()
IF 职称 = ZY
T = A->基本工资+ A->补贴 - A->水电
" "+编号+" "+姓名+职称+STR(A->基本工资,8,1);
+STR(a->补贴,8,1)+STR(a->水电,8,1)+STR(T,8,1)
ENDIF
SKIP
ENDDO
用SQL语句:
ACCEPT "请输入职称名称:" TO ZY
SELECT Gz.编号,姓名,职称,基本工资,补贴,水电,基本工资+补贴-水电 as 实发工资 ; FROM Gz,Zg WHERE Gz.编号=Zg.编号 AND 职称= ZY
3.表单设计:
界面设计(10分)
主要属性、事件代码:
1)进入“表单设计器”后,将表GZ添加到“数据环境设计器”中,并将表中字段逐个拖入到“表单设计器”中,并调整大小和位置;
“查询”按钮的Click事件(单击)代码:
LOCATE FOR 姓名=ALLTRIM(ThisForm.Text1.Value)
IF EOF()
?"查无此人!",
ENDIF
ThisForm.Refresh
,退出”按钮的Click(单击)事件代码:
ThisForm.Release
第五套上机复习题
1.建立如下表文件,并输入数据:
已知商品销售业绩表(SPXS.dbf),有如下所示的数据记录:
编号
商家
冰箱
空调
洗衣机
微波炉
101
重百
75
86
85
76
102
新世纪
82
76
67
99
405
国美电器
35
73
75
84
507
苏宁电器
78
92
66
75
545
重客隆商场
74
58
65
88
414
源隆发商场
59
85
64
94
415
商贸城
88
48
70
97
2.程序设计题:
编程完成以下任务(程序文件名PROG5.PRG。注:在程序开头,必须用【注释】语句输入学校名、准考证号、姓名,否则无效!)。
要求:
(1)使用VFP数据表操作命令或者VFP-SQL命令,显示每位商家的四种商品的总销售量,公式:总销售量=冰箱+空调+洗衣机+微波炉。包括编号、商家、总销售量等栏目。
(2)查找四种商品最高销售量的商品名,以及销售最多的商家名。按如下格式显示:
商品销售业绩排行榜冰箱 最高销售量:*** 商家名:*****
空调 最高销售量:*** 商家名:*****
洗衣机 最高销售量:*** 商家名:*****
微波炉 最高销售量:*** 商家名:*****
销售冠军 *** (总销售量)商家名:******
3.按以下要求设计程序界面,表单文件名为:FORM501.SCX。
根据全国人大于05年10月通过的“中华人民共和国个人所得税法”规定:“工资、薪金所得,以每个月收入额减除费用一千六百元后的余额,为应纳税所得额”,在“个人所得税税率表”中明确规定:所得额不超过500元的税率为5%、超过500元至2000元的部分税率为10%、超过2000元至5000元的部分税率为15%、超过5000元至20000元的部分税率为20%、……。
计算公式,所得额P = 收入-1600 个人所得税Q = P * 税率-扣除数所得额
税率
扣除数
0<P≤500
5
0
500<P≤2000
10
25
2000<P≤5000
15
125
5000<P≤20000
20
375
20000<P≤40000
25
1375
40000<P≤60000
30
3375
60000<P≤80000
35
6375
80000<P≤100000
40
10375
100000<P
45
15375
若某公司职工收入均不超过21600元,请设计如图所示一个表单。包括4个标签,3个文本框,2个命令按钮(各控件的大小、颜色、字体、字号等属性由考生自定)。其中。
① 表单顶部的标签用来显示考生自己的姓名和考号;
② 文本框Text1和Text2的显示初值为0;
③ 该表单运行后,可以在文本框Text1中输入职工的收入(0~21600),左键单击“计算”命令按钮,则在文本框Text2中显示该职工的个人所得税;
④ 单击“退出”钮,结束表单程序的运行。
参考答案[此表已建好,可到学校网站www.cqeec.com下载练习配套材料]
2.程序设计题:
******************************************
* 重庆信息技术职业学院 0501001 王XX *
* PROG5.PRG *
******************************************
(1)VFP数据表操作命令:
USE SPXS
LIST 编号,商家,冰箱+空调+洗衣机+微波炉
SQL语句:
SELECT 编号,商家,冰箱+空调+洗衣机+微波炉 AS 总销售量 FROM SPXS
(2)VFP数据表操作命令:
SET TALK OFF
USE SPXS
STORE 0 TO M1,M2,M3,M4,MZ,MR1,MR2,MR3,MR4,MRZ
DO WHILE,NOT.EOF()
IF 冰箱>M1
M1=冰箱
MR1=RECNO()
ENDIF
IF 空调>M2
M2=空调
MR2=RECNO()
ENDIF
IF 洗衣机>M3
M3=洗衣机
MR3=RECNO()
ENDIF
IF 微波炉>M4
M4=微波炉
MR4=RECNO()
ENDIF
IF 冰箱+空调+洗衣机+微波炉>MZ
MZ=冰箱+空调+洗衣机+微波炉
MRZ=RECNO()
ENDIF
SKIP
ENDDO
SPACE(10)+" 商品销售业绩排行榜"
GO MR1
" 冰箱 最高销售量:",M1," 商家名:"+商家
GO MR2
" 空调 最高销售量:",M2," 商家名:"+商家
GO MR3
" 洗衣机 最高销售量:",M3," 商家名:"+商家
GO MR4
" 微波炉 最高销售量:",M4," 商家名:"+商家
GO MRZ
" 销售冠军(总销售量):",MZ," 商家名:"+商家
USE
SET TALK ON
SQL语句:
SELECT MAX(冰箱) AS 冰箱最高销售量,商家 FROM SPXS;
WHERE 冰箱= (SELECT MAX(冰箱) FROM SPXS )
SELECT MAX(空调) AS 空调最高销售量,商家 FROM SPXS ;
WHERE 空调= (SELECT MAX(空调) FROM SPXS )
SELECT MAX(洗衣机) AS 洗衣机最高销售量,商家 FROM SPXS ;
WHERE 洗衣机= (SELECT MAX(洗衣机) FROM SPXS )
SELECT MAX(微波炉) AS 微波炉最高销售量,商家 FROM SPXS;
WHERE 微波炉= (SELECT MAX(微波炉) FROM SPXS )
SELECT MAX(冰箱+空调+洗衣机+微波炉) AS 销售冠军,商家 ;
FROM SPXS WHERE 冰箱+空调+洗衣机+微波炉= ;
(SELECT MAX(冰箱+空调+洗衣机+微波炉) FROM SPXS )
3,表单设计:
界面设计(10分)
主要属性、事件代码:
1)Text1和Text2的Value属性值均为0(5分)
2)“计算”按钮的Click事件代码:(10分)
DO CASE
CASE VAL(THISFORM.TEXT1.VALUE)<=1600
THISFORM.TEXT2.VALUE = 0
CASE VAL(THISFORM.TEXT1.VALUE)<=2100
THISFORM.TEXT2.VALUE = (VAL(THISFORM.TEXT1.VALUE)-1600) * 0.05
CASE VAL(THISFORM.TEXT1.VALUE)<=3600
THISFORM.TEXT2.VALUE = (VAL(THISFORM.TEXT1.VALUE)-1600) * 0.1 - 25
CASE VAL(THISFORM.TEXT1.VALUE)<=6500
THISFORM.TEXT2.VALUE = (VAL(THISFORM.TEXT1.VALUE)-1600) * 0.15 - 125
CASE VAL(THISFORM.TEXT1.VALUE)<=21600
THISFORM.TEXT2.VALUE = (VAL(THISFORM.TEXT1.VALUE)-1600) * 0.2 - 375
ENDCASE
“退出” 按钮的Click事件代码:
ThisForm.Release
第六套上机复习题
1.建立一个计算机等级考试管理数据库,文件名为JKG.DBC,并输入数据(40分)
该数据库有两个数据表:考生数据表文件(STU.DBF)和合格考生数据表文件学(HG.DBF)。其数据形式如下:
考生数据表文件(STU.DBF)
准考证号
笔试成绩
上机成绩
总评
1102
90.00
48.00
1101
120.00
92.00
1103
69.00
72.00
1105
88.00
60.00
1104
98.00
80.00
合格考生数据表文件HG..DBF:
准考证号
姓名
性别
出生日期
合格否
1104
赵文娟
女
04/24/79
F
1102
李亚男
女
10/12/80
F
1101
张爱民
男
05/08/79
F
1103
李玉芬
女
01/21/80
F
1105
周明远
女
04/24/79
F
要求,将数据库(JKG.DBC)中的STU.DBF(父表)和HG.DBF(子表)以“准考证号”建立一对一的永久关系。
2.建立程序文件,要求将完成下列各小题任务的VFP数据表操作命令或VFP-SQL命令写在该程序文件中。在程序首行用注释语句注明考生姓名和准考证号,并用注释语句标注小题号。(30分)
1)(程序文件名为PROG61.PRG)笔试成绩在108分及其以上,并且上机成绩在90分及其以上,则“总评”字段的值为“优秀”,笔试成绩在108分以下,72分及其以上,并且上机成绩在90分以下,60分及其以上,则“总评”字段的值为“及格”,其余情况均为“不及格”;根据STU.DBF表的笔试成绩和上机成绩,将“总评”字段的值填上。
2)(程序文件名为PROG62.PRG)修改HG.DBF表中“合格否”字段的值,将那些“总评”为“优秀”或“合格”的记录的“合格否”字段改为.T.,“不合格”的记录的“合格否”字段值改为.F.
3)(程序文件名为PROG63.PRG)按如下格式显示合格者清单计算机等级考试合格考生名单准考证号 姓名 笔试成绩 上机成绩 总评
…… …… …… …… ……
…… …… …… …… ……
3.表单设计:按以下要求设计程序界面,表单文件名为:FORM0601.SCX(30分)
设计如图所示一个表单。包括3个标签,2个文本框,2个命令按钮(各控件的大小、颜色、字体、字号等属性由考生自定)。其中。
① 表单顶部的标签用来显示考生自己的姓名和考号、第2个标签中输入“请输入准考证号:”、第3个标签中输入“该生平均分为:”;
② 该表单运行后,可以在文本框Text1中输入考生准考证号,单击“统计”钮,则在表单中显示该考生的平均分情况;
③ 单击“退出”钮,结束表单程序的运行。
参考答案[此两表已建好,可到学校网站 www.cqeec.com下载练习配套材料]
程序1:
******************************************
* 重庆信息技术职业学院 123456 王XX *
* PROG5.PRG *
******************************************
VFP数据表操作命令:
SET TALK OFF
CLEAR
USE STU
SCAN
DO CASE
CASE 笔试成绩>=108 AND 上机成绩>=90
REPLACE 总评 WITH,优秀”
CASE
REPLACE 总评 WITH,及格”
OTHERWISE
REPLACE 总评 WITH,不及格”
ENDCASE
ENDSCAN
SQL语句:
UPDATE STU SET 总评=“优秀” WHERE 笔试成绩>=90 AND 上机成绩>=90
UPDATE STU SET 总评=“及格” WHERE 笔试成绩<108 ;
AND 笔试成绩>=72 AND 上机成绩<90 AND 上机成绩>=60
UPDATE STU SET 总评=“不及格” WHERE 笔试成绩<72 AND 上机成绩<60
程序2:
VFP数据表操作命令:
SET TALK OFF
CLEAR
SELECT 1
USE STU
INDEX ON 准考证号 TAG ZKZH
SELECT 2
USE HG
SET RELATION TO 准考证号 INTO A
SCAN
IF A.总评=“优秀” OR A.总评=”及格”
REPLACE 合格否 WITH,T.
ELSE
REPLACE 合格否 WITH,F.
ENDIF
ENDSCAN
SQL语句:
UPDATE HG SET 合格否=,T,WHERE STU.准考证号=HG.准考证号 ;
AND (STU.总评=“优秀” OR STU.总评=”及格”)
程序3:
VFP数据表操作命令:
SET TALK OFF
CLEAR
SELECT 1
USE STU
INDEX ON 准考证号 TAG KH
SELECT 2
USE HG
SET RELATION TO 准考证号 INTO A
,计算机等级考试合格考生名单”
"准考证号 姓名 笔试成绩 上机成绩 总评"
SCAN FOR 合格否=.T.
准考证号+" "+姓名+STR(A.笔试成绩,8,2)+STR(A.上机成绩,8,2)+" "+A.总评
ENDSCAN
SQL语句:
SELECT STU.准考证号,姓名,笔试成绩,上机成绩,总评 FORM STU,HG ;
WHERE STU.准考证号=HG.准考证号 AND合格否=.T.
3.表单设计:
界面设计主要属性、事件代码:
“统计”按钮的Click事件代码:
USE STU
LOCATE FOR 准考证号=ALLTRIM(ThisForm.Text1.Value)
X = (笔试成绩 + 上机成绩)/2
ThisForm.Text2.Value = STR(x,6,2)
“退出” 按钮的Click事件代码:
ThisForm.Release
第七套上机复习题
1.建立如下表文件,并输入数据:
 已知某学生情况表Xs.dbf,有如下记录:
学号
系别
姓名
年龄
籍贯
入学总分
10300301
计算机
张佳
22
太原
489
10100116
数学
伍洪
21
重庆
514
10200332
英语
洪伟
21
太原
467
10300441
计算机
汪洋
22
重庆
465
10100428
数学
刘柳
24
云南
428
10300313
计算机
张丽
23
浙江
519
2.程序设计题:
 编程序完成以下任务,要求用VFP数据表操作命令或VFP-SQL命令写在该程序文件中。(程序文件名PROG7.PRG。注:在程序开头,必须用[注释]语句输入学校名、准考证号、姓名,否则无效!)。要求:
 (1)利用上面提供的学生情况(Xs.dbf)表,输入相应的系别,统计该系的人数;
 (2)根据系别计算属于该系的学生的平均年龄和平均入学总分,并按如下格式显示。
输入系别=XX(如输入“数学”)
数学系 学生情况表
  学号 姓名  年龄 籍贯 入学总分
10100116 伍洪  21 重庆 514
  …… …… …… …… ……
XX 系的总人数 = X
XX 系的平均年龄 = XX.X
XX 系的平均入学总分 = XXXX
3.表单设计。按以下要求设计程序界面,表单文件名为:FORM0502.SCX
设计如图所示一个表单。包括5个标签,1 个组合框、3个文本框,2个命令按钮(各控件的大小、颜色、字体、字号等属性由考生自定)。其中。
① 表单顶部的标签用来显示考生自己的姓名和考号;
②组合框可显示学生情况表Xs.dbf中的系别;
③ 其于的标签和文本框见右图;
④ 该表单运行后,可以从组合框中选择系别,然后单击“统计”钮,则显示该系学生的总人数、平均年龄和平均入学总分;
⑤ 单击“退出”钮,结束表单程序的运行。
参考答案[此表已建好,可到学校网站www.cqeec.com下载练习配套材料]
2,程序设计题:
******************************************
* 重庆信息技术职业学院 0502001 王XX *
* PROG1.PRG *
******************************************
SET TALK OFF
SET SAFETY OFF
CLEAR
USE Xs
ACCEPT "请输入系别名:" TO ZC
SPACE(4)+ZC+"系 学生情况表"
" 学号 姓名 年龄 籍贯 入学总分"
COUNT TO A FOR 系别= ZC
AVERAGE ALL 年龄 TO A1 FOR 系别= ZC
AVERAGE ALL 入学总分 TO A2 FOR 系别= ZC
*CALCULATE CNT(年龄),AVG(年龄),AVG(入学总分) TO A,A1,A2 FOR 系别=ZC
SCAN FOR 系别 = ZC
学号,姓名,年龄,籍贯,入学总分
ENDSCAN
" "
ZC+”系的总人数=”+STR(A)
ZC+”系的平均年龄=”+STR(A1)
ZC+”系的平均入学总分=”+STR(A2)
CLOSE DATA
RETURN
用SQL语句:
ACCEPT "请输入系别名:" TO ZC
SELECT 学号,姓名,年龄,籍贯,入学总分 FROM Xs WHERE 系别= ZC
SELECT COUNT(*) AS 总人数,AVG(年龄) AS 平均年龄,;
AVG(入学总分) AS 平均入学总分 FROM Xs WHERE 系别= ZC
3.表单设计。按以下要求设计程序界面,表单文件名为:FORM511.SCX(30分)
界面设计(10分)
主要属性、事件代码:
1) 组合框Combo1的ControlSource属性值为“XS.系别”(5分)
2)“统计”按钮的Click事件代码:(10分)
COUNT FOR 系别=ThisForm.Combo1.Value TO A
ThisForm.Text1.Value=A
AVERAGE 年龄 FOR 系别=ThisForm.Combo1.Value TO B
ThisForm.Text2.Value=B
AVERAGE 入学总分 FOR 系别=ThisForm.Combo1.Value TO C
ThisForm.Text3.Value=C
或:CALCULATE COUNT(),AVG(年龄),AVG(入学总分) ;
FOR 系别=ThisForm.Combo1.Value TO A,B,C
ThisForm.Text1.Value=A
ThisForm.Text2.Value=B
ThisForm.Text3.Value=C
3)“退出”按钮的Click事件代码:(5分)
ThisForm.Release
第八套上机复习题
1、建立如下表文件,并输入数据:
已知笔记本电脑交易数据表文件Dnjy.dbf,有如下所示的数据记录:
商品代码
品名
单价
库存量
提货量
A6T4
华硕
5349
200
110
W300
神舟承运
4900
450
150
C220
索尼
9290
210
520
F205
神舟天运
5900
240
150
1501
戴尔
5299
300
210
F406
联想
7799
190
250
V3212
惠普
6700
456
328
R60
IBM
6900
136
250
2、程序设计题:
编程完成以下任务(程序文件名PROG8.PRG。注:在程序开头,必须用【注释】语句输入学校名、准考证号、姓名,否则无效!)。
要求:
(1)使用VFP数据表操作命令或者VFP-SQL命令显示库存量减去提货量大于零的所有笔记本电脑的名称、单价、库存量和提货量;
(2)编程模拟笔记本电脑进出货过程,更新Dnjy.dbf数据表内容,要求输入商品代码,如果商品代码存在,输入进货量,将此进货量累加到库存量字段,如果该电脑库存量小于提货量,显示信息“该电脑库存不够!”;如果商品代码不存在,显示显示信息“该电脑不存在!”。
(3)以上过程应能反复进行,直到输入的商品代码为空,则退出程序。
3、表单设计。按以下要求设计程序界面,表单文件名为:FORM0601.SCX
设计如图所示一个表单。包括4个标签,3个文本框,2个命令按钮(各控件的大小、颜色、字体、字号等属性由考生自定)。其中。
① 表单顶部的标签用来显示考生自己的姓名和考号;
② 文本框Text1、Text2和Text3的显示初值为0;
③ 该表单运行后,可以在文本框Text1、Text2中输入数A 和数B(0~1000),左键单击“计算”命令按钮,则在文本框Text3中显示两数的和;
④ 单击“退出”钮,结束表单程序的运行。
参考答案[此两表已建好,可到学校网站www.cqeec.com下载练习配套材料]
2,程序设计题:
*******************************************
* 重庆信息技术职业学院 0601001 王大发 *
* PROG8.PRG *
*******************************************
(1)显示库存量减去提货量大于零的所有笔记本电脑的名称、单价、库存量和提货量
SQL语句:
SELECT 品名,单价,库存量,提货量 FROM Dnjy WHERE(库存量-提货量)>0
VFP数据表操作命令:
USE Dnjy
LIST 品名,单价,库存量,提货量 FOR (库存量-提货量)>0
(2)模拟笔记本电脑进出货过程:
CLEAR
SET TALK OFF
USE Dnjy
DO WHILE,T.
ACCEPT,请输入商品代码:” TO DM
IF EMPTY(DM)
EXIT
ELSE
LOCATE FOR 商品代码=DM
IF FOUND()
INPUT,请输入库存量:” TO GWL
IF 库存量+GWL<提货量
,该电脑库存不够!”
ENDIF
REPLACE 库存量 WITH 库存量+GWL FOR 商品代码=DM
ELSE
,该电脑不存在!”
LOOP
ENDIF
ENDIF
ENDDO
RETURN
3.表单设计。按以下要求设计程序界面,表单文件名为:FORM0601.SCX(30分)
界面设计(10分)
主要属性、事件代码:
1)Text1、Text2和Text3的Value属性值均为0(5分)
2)“计算”按钮的Click事件代码:(10分)
A= VAL(ThisForm.Text1.Value)
B= VAL(ThisForm.Text2.Value)
ThisForm.Text3.Value = A + B
“退出”按钮的Click事件代码:(5分)
ThisForm.Release
第九套上机复习题建立一个图书交易管理数据库,文件名为SJY.DBC,并输入数据:
该数据库有两个数据表:书籍表SJ.DBF和交易表JY.DBF。其数据形式如下:
书号
书名
2030
计算机原理
4644
离散数学
6426
软件工程
3535
高等数学
3376
经济法
3679
大学语文
4636
大学英语
5675
基础会计
书籍表SJ.DBF 交易表JY.DBF
书号
已售
定价
册数
总金额
2030
.T.
21.20
134
4644
.F.
17.60
128
6426
.T.
30.00
69
3535
.F.
18.80
306
3376
.T.
22.30
238
3679
.T.
19.00
112
4636
.F.
25.40
168
5675
.F.
18.50
280
要求:将数据库(SJY.DBC)中的SJ.DBF和JY.DBF两表以“书号”建立一对多的永久关系。[注:已售为真(,T.),即此书已销售 ]
2、操作数据库表。要求将相关命令保留到程序文件CQEEC9.PRG中。
注:使用VFP-SQL命令和VFP数据表操作命令,一个任务可由若干个命令组成,请用注释语句标注题号。
(1)根据定价和册数计算书籍的总金额,并将计算结果写入JY.DBF表中;
(2) 查询已经销售的书籍信息,要求显示书名,册数,定份及销售总金额,已经交易的为.T.
(3)按已售书籍汇总册数和销售总金额,并显示已售和汇总后的册数和销售总金额
(4)将JY.DBF中还没有销售的书籍逻辑删除。
3、程序填空,要求输入并完善程序,程序文件名为PROG9.PRG
注:在程序开头,必须用注释语句输入学校名,准考证号,姓名以下程序的功能是能反复输入书号(按‘Q’键退出),并输出该书籍的销售情况,格式为:“书名,已售,销售总金额”最后输出该书籍已经销售的总数量和总金额。
程序代码:
SELECT 1
USE SJ
INDEX ON 书号 TAG SH
SELECT 2
USE JY
SET RELATION TO 书号 INTO A
X=.T.
DO WHILE X
ACCEPT "请输入书号:" TO DM
IF UPPER(ALLTRIM(DM))="Q"

LOOP
ENDIF
?"书名 已售 册数 销售金额"
SCAN FOR ②
A.书名,已售,册数,总金额
ENDSCAN
CALCULATE ③ TO S1,S2 FOR 已售 AND 书号=DM
"该书籍已经销售的总数量 总金额"
S1,S2
ENDDO
CLOSE ALL
SET TALK ON
RETURN
4、表单设计。按以下要求设计程序界面,表单文件名为:FORM0601.SCX
设计如图所示一个表单。包括7个标签,6个文本框,3个命令按钮(各控件的大小、颜色、字体、字号等属性由考生自定)。其中。
① 表单顶部的标签用来显示考生自己的姓名和考号;
② 其于的标签和文本框在数据环境中从学生情况(Xs.dbf)表中拖出;
③ 该表单运行后,可以单击“添加”钮或“删除”钮进行添加或删除学生记录的操作;
④ 单击“退出”钮,结束表单程序的运行。
参考答案[此两表已建好,可到学校网站www.cqeec.com下载练习配套材料]
*******************************************
* 重庆信息技术职业学院 0602001 王XX *
* PROG9.PRG *
*******************************************
1、将数据库中的SJ.DBF和JY.DBF两表以“书号”建立一对多的永久关系。
两表已建好,自己在数据库(SJY.DBC)中建一对多的永久关系(在数据库中,先建索引,父表要设为主索引,然后用鼠标拖索引标记到子表)
2、操作数据库表。要求将相关命令保留到程序文件CQEEC9.PRG中(40分)。
注:使用VFP数据表操作命令或者VFP-SQL命令,一个任务可由若干个命令组成,请用注释语句标注题号。
(1)根据股份和册数计算每次交易的总金额,并将计算结果写入JY.DBF表中;
SQL语句:
UPDATE JY SET 总金额 = 册数*定价
VFP数据表操作命令:
USE JY
REPLACE ALL 总金额 WITH 册数*定价
(2)查询已经交易的股票信息,要求显示书名,册数,股份及交易总金额,已经交易的为.T.
SQL语句:
SELECT 书名,册数,定价,总金额 FROM SJ,JY ;
WHERE SJ.书号=JY.书号 AND 已售
VFP数据表操作命令:
SELECT 1
USE SJ
INDEX ON 书号 TAG DM
SELECT 2
USE JY
SET RELATION TO 书号 INTO SJ
LIST SJ.书名,册数,定价,总金额 FOR 已售 OFF
(3)按已售汇总册数和交易总金额,并显示已售和汇总后的册数和交易总金额
SQL语句:
SELECT 已售,SUM(册数),SUM(总金额) ;
FROM JY GROUP BY 已售
VFP数据表操作命令:
USE JY
INDEX ON 已售 TAG LX
TOTAL ON 已售 TO HZ
USE HZ
LIST 已售,册数,总金额 OFF
(4)将JY.DBF中还没有交易的股票逻辑删除。
SQL语句:
DELETE FROM JY WHERE NOT 已售
[注:“NOT 已售”,表示已售为假(,F.),即此书没销售]
VFP数据表操作命令:
USE JY
DELETE FOR NOT 已售
3、程序填空,要求输入并完善程序,程序文件名为PROG9.PRG(30分)
注:在程序开头,必须用注释语句输入学校名,准考证号,姓名以下程序的功能是能反复输入书号(按‘Q’键退出),并输出该股票的交易情况,格式为:“书名,已售,交易总金额”最后输出该股票已经交易的总数量和总总金额。
程序代码:
① X=.F,
② 书号=DM
③ SUM(册数),SUM(总金额)
4、表单设计。按以下要求设计程序界面,表单文件名为:FORM0601.SCX(30分)
界面设计(5分)
主要属性、事件代码:
1) 从数据环境将数据表XS.DBF中相应字段加到表单中。(10分)
2)“添加”按钮的Click事件代码:(5分)
APPEND BLANK
ThisForm.Refresh
3)“删除”按钮的Click事件代码:(5分)
DELETE
PACK
ThisForm.Refresh
4)“退出”按钮的Click事件代码:(5分)
ThisForm.Release
第十套上机复习题
1.建立一个计算机考试成绩管理数据库,文件名为SJXG.DBC,并输入数据。
该数据库有两个数据表:商家信息表(SJ.DBF)和商家情况表(XG.DBF)。其数据形式如下:
商家信息表(SJ.DBF) 商家情况表(XG.DBF)
编号
商家
0701
力天公司
0702
宏伟公司
0703
万丰联
0704
精斌科技
0705
慧发实业
0706
益达电子
编号
等级
信誉度
合格否
0702
8
优
.F.
0704
4.5
无
.F.
0703
9
优
.F.
0701
7
良
.F.
0705
6.9
劣
.F.
0706
5.7
中
.F.
要求:将数据库(SJXG.DBC)中的SJ.DBF(父表)和XG.DBF(子表)以“编号”建立一对一的永久关系。
2、建立程序文件PROG10.PRG,要求将完成下列各小题任务的VFP数据表操作命令或VFP-SQL命令写在该程序文件中。在程序首行用注释语句注明考生姓名和准考证号,并用注释语句标注小题号。(30分)
(1)正确修改每个商家的“合格否”字段,并填入商家情况表XG.DBF中。规定等级<6或信誉度为“无”或“劣”,则该字段的值为.F.,否则为.T.;
(2)在商家情况表XG.DBF中,查询并显示合格商家的编号、商家、等级和信誉度;
(3)逻辑删除商家情况表XG.DBF中信誉度为“无”的商家记录。
3、表单设计。按以下要求设计程序界面,表单文件名为:FORM0701.SCX(30分)
设计如图所示一个表单。包括4个标签,3个文本框,1个命令按钮(各控件的大小、颜色、字体、字号等属性由考生自定)。其中。
① 表单顶部的标签用来显示考生自己的姓名和编号;
② 文本框Text1、Text2和Text3的显示初值为0;
③ 该表单运行后,可以在文本框Text1、Text2中输入成绩(0~100),左键单击“计算”命令按钮,则在文本框Text3中显示平均成绩,要求保留一位小数;
④ 双击表单任意空白处结束表单程序的运行。
参考答案[此两表已建好,可到学校网站www.cqeec.com下载练习配套材料]
*******************************************
* 重庆信息技术职业学院 0701001 张小晓 *
*******************************************
1.(共40分)数据库和表都已建好,自己建一对一的永久关系(在数据库中,先建索引,父表要设为主索引,然后用鼠标拖索引标记到子表)
评分标准如下:
正确建立2个表的数据结构(表结构设计正确)20分数据正确15分永久关联正确5分
2.(共30分)每小题10分。
(1)正确修改每个商家的“合格否”字段,并填入商家情况表XG.DBF中。规定等级<60或信誉度为“无”或“劣”,则该字段的值为.F.,否则为.T.;
VFP数据表操作命令:
USE XG
REPLACE ALL 合格否 WITH,T,FOR 等级>=6 AND (信誉度=“优” OR 信誉度=“良” OR 信誉度=“中”)
SQL语句:
UPDATE XG SET 合格否=.T,;
WHERE 等级>=6 AND (信誉度=“优” OR 信誉度=“良” OR 信誉度=“中”)
(2)在商家情况表XG.DBF中,查询并显示合格商家的编号、商家名、等级和信誉度;
VFP数据表操作命令:
SELECT 1
USE SJ
INDEX ON 编号 TAG KH
SELECT 2
USE XG
SET RELATION TO 编号 INTO A
LIST 编号,A.商家,等级,信誉度 FOR 合格否=.T.
SQL语句:
SELECT SJ.编号,商家,等级,信誉度 FROM SJ,XG ;
WHERE SJ.编号=XG.编号 AND 合格否=.T.
(3)逻辑删除商家情况表XG.DBF中信誉度为“无”的商家记录。
VFP数据表操作命令:
USE XG
DELETE FOR 信誉度=“无”
SQL语句:
DELETE FROM XG WHERE信誉度=“无”
3.表单设计。按以下要求设计程序界面,表单文件名为:FORM711.SCX(30分)
界面设计(10分)
主要属性、事件代码:
1)Text1、Text2和Text3的Value属性值均为0(5分)
2)“计算”按钮的Click事件代码:(10分)
X1=ThisForm.Text1.Value
X2=ThisForm.Text2.Value
ThisForm.Text3.Value=Round((X1+X2)/2,1)
Form1的DblClick事件代码:ThisForm.Release (5分) 第三部分 计算机VF二级考试理论部分复习资料
(一)基础知识复习第一部分 基础概念和基础知识一、单项选择题:
1、数据库系统的核心和基础是:
A.事物之间的联系 B.数据模型 C.数据类型 D.数据元素
2、下列符号中,不是变量名的是:
A.性别 B.“年龄” C,A1 D,CD
3、在FoxPro系统状态下,定义了若干个内存变量,若执行QUIT命令后,这些变量所保存的数据将:
A.随着系统的退出全部丢失 B.自动转到磁盘存储器上保留
C.存入一个自动生成的内存变量文件中 D.转为外存变量保存下来
4、关于信息和数据,下列叙述正确的是:
A.信息与数据,只有区别,没有联系 B.信息是数据的载体
C.数据就是信息 D.信息是观念性的,数据是物理性的
5、Visual?FoxPro关系数据库管理系统能够实现的三种基本关系运算是:?
A.索引、排序、查找 B.建库、录入、排序
C.选择、投影、联接 D.显示、统计、复制?
6、既可输入字符、数值,又可输入日期、逻辑值的数据输入命令是:
A.WAIT B.ACCEPT C.INPUT D.=INKEY(0)
7、有如下命令序列:
X=1
Y=2
Z=5
?Z=X+Y
执行最后一条命令后,显示的结果是:
A.X+Y B.5 C..F,D..T,
8、已知DB1.DBF中“姓名”字段的宽度为8,执行如下命令:
STORE 姓名 TO MNAME
MNAME
刘宁心
?LEN(MNAME)
最后一条命令显示的结果是:
A.MNAME B.4 C.8 D.3
9、设有部门和职员两个实体,每个职员只能属于一个部门,一个部门可以多名职员,则部门与职员之间的联系类型是:
A,m:n B,1:m C,m:k D,1:1
10、Visual FoxPro DBMS基于数据模型是:
A,层次模型 B,网状模型 C,关系模型 D,环状模型
11、关系模型的一个关系可用一张二维表来表示,它相当于VFP中的一个:
A,数据库 B,记录 C,字段 D,表文件
12、下列字符串,符合用户自定义变量名的是:
A,M.1 B,_ab C.车间_1 D,type
13、数据库管理系统是:
A.应用软件 B.辅助设计软件 C.系统软件 D.科学计算软件
14、在数据库的三级模式中,真正存储数据的是:
A.模式 B.内模式 C.外模式 D.概念模式
15、用DIMENSION命令定义数组后,各数组元素在没有赋值之前的数据类型是:
A.字符型 B.数值型 C.逻辑型 D.未知
16、表结构中的逻辑型、通用型、日期型字段的宽度由系统自动给出,它们分别为:
A.1,4,8 B.4,4,10 C.1,10,8 D.2,8,8
17、退出FoxPro系统的命令是:
A.EDIT B.CLOSE C.QUIT D.EXIT
18、关于书写和使用命令不正确的说法是:
A.命令动词可以简写为前四个字符
B.一行内允许书写多条命令
C.命令中的各子句可按任意顺序排列
D.命令中的字母不区分大小写,大小写字母可以混合使用。
19、根据数据结构不同,数据库管理系统通常采用的数据模型是:
A.层次模型、关系模型和环状模型 B.层次模型、链状模型和环状模型
C.层次模型、关系模型和网状模型 D,链状模型、关系模型和环状模型
20、数据库管理系统能实现对数据的查询、插入、修改和删除,这类功能称为:
A.数据定义功能 B.数据管理功能 C.数据操纵功能 D.数据控制功能
21.要使用数组arrl更新当前数据表的当前记录,应使用命令:
A.SCATTER TO arrl  B.DIMENSION arrl
C.APPEND FROM arrl D.GATHER FROM arrl
二、多项选择题
1、设A1=‘123’,B1=‘234’,以下表达式的结果为假(.F.)的有:
A..NOT.A1=B1.OR.B1>’ABC’ B..NOT.A1<>B1
C..NOT.A1<>’ABC’.AND.A1<>B1 D..NOT.A1>=B1
2、在VFP的命令语句中,可作为<范围>子句的选项有:
A.ALL B.NEXT N C.FOR D.REST E.RECORD N
3、涉及数组的操作命令是:
A.GATHER B.DIME C.AVER D.EDIT E.SCATTER
4、关于局部变量的叙述,正确的有:
A.凡经PUBLIC命令定义的变量都是局部变量
B.局部变量只在定义它的局部范围内有效
C.用PRIVATE命令定义的局部变量可以和全局变量同名
D.局部变量的作用范围是指在所属的应用系统之中
E.在一个程序中未被指明为全局变量的变量都是局部变量
5、内存变量的作用域有:
A.SCREEN B.COMMAND C.LOCAL D.PUBLIC E.PRIVATE
6、Visual FoxPro的数据存储形式有:
A.表达式 B.数组 C.字段变量 D.常量 E.函数
7、涉及数组的操作命令是:
A.GATHER B.DIME C.AVER D.EDIT E.SCATTER
8、在设计一个自由表时,下列可以使用的字段名有:
A.男/女 B.曾出国进修否 C.班级_1 D.XYZ E.编号-No
9、VFP的特点有:
A.友好的窗口菜单界面 B.采用RUSHMORE优化技术
C.安全机制强 D.库表文件的最大记录数为一亿条
E.支持VFP-SQL语句
10、数据库的数据模型一般分为:
A.选择 B.关系 C.连接 D.层次 E.网状
11、根据变量的作用域是:
A.公共变量 B.私有变量 C.局部变量 D.临时变量
12、对内存变量进行操作的命令是:
A.CLEAR MEMO B.SAVE TO C.CLEAR ALL
D.LIST MEMO E.SKIP
13、以下哪些是程序设计的基本结构:
A.分支 B.复制 C.选择 D.循环 E.顺序
14、按照数据模型划分,FoxPro不属于( )数据库管理系统。
A.层次型 B.网状型 C.关系型 D.混合型 E.星型
15、Visual FoxPro定义的常量类型包括:
A.数值型 B.字符型 C.逻辑型 D.通用型 E.日期型三、判断题
1、VFP工作区号的大小可以说明同时打开数据表的先后次序。
2、FoxPro的过程(Procedure)允许有参数,程序执行(DO)不能带参数。
3、投影运算就是在一个关系中选出满足指定条件的那些记录。
4、选择运算就是在一个关系中选出满足指定条件的那些记录。
5、VFP的数组元素允许赋予各自不同的数据类型。
6、关系模型的“码”指属性的取值范围。
7、accept 可以接收任意类型的VFP表达式。
8、Visual FoxPro的运行界面中的命令窗口可以显示或隐藏。
9、逻辑运算符的先后顺序是.not.(.or.(.and。
10、数据表的行、列顺序不可以改变。
11、用Public命令定义的变量是全局变量。
12、在命令行中若有FIELDS子句,则表示命令所要操作的记录范围。
13、程序文本的注释语句可以在句尾用*加注释行信息。
参考答案一、单项选择题:
1—5 BBADC 6—10 CCCBC 11—15 DCCBC 16—21 ACBCCD
二、多项选择题:
1.BC 2.ABDE 3.ABE 4.BC 5.CDE 6.BCD 7.ABE 8.BCD
9.ABCDE 10.BDE 11.ABC 12.ABD 13.ADE 14.DE 15.ABCE
三、判断题
1—5 √ⅹⅹ√√ 6—10 ⅹⅹ√ⅹⅹ 11—13 √ⅹⅹ
第二部分 数据表及其基本操作一、单项选择题:
1、数据库系统的核心是:
A.编译系统 B.数据库 C.操作系统 D.数据库管理系统
2、在关系数据库中,为了简明地表达数据间的关系,采用的形式是:
A.数组 B.层次 C.二维表格 D.矩阵
3、可以链接或嵌入OLE对象的字段类型是:
A.备注型字段 B.通用型和备注型字段
C.通用型字段 D.任何类型的字段
4、设数据表文件在当前工作区已经打开,命令COPY TO TEMP FIEL <字段名表> 完成的工作相当于关系运算:
A.连接 B.选择 C.自然连接 D.投影
5、数据表的扩展名为:
A..DBF B..CDX C..FPT D..PRG
6、VFP系统中,查询文件的扩展名为:
A..PRGB..QPRC..SCXD..TXT
7、通用字段的数据宽度为4,它存放的是:
A.多媒体数据 B.文件名称 C.FTP指针 D.CDX指针
8、当前数据表文件中的备注字段填入了3个字段值,那与它相应的备注文件有( )个
A.3 B.2 C.1 D.4
9、Visual FoxPro数据表的范围参数有四个。现在需要删除从当前记录到表尾的全部记录,其范围参数的设置为:
A.NEXT 3 B.REST C.ALL D.RECORED(EOF())
10、有一个数据表的某字段存放数值范围是-1589.788~+7890.999,最佳定义字段宽度为:
A.8,2 B.9,3 C.9,2 D.8,3
11、在数据表中存储图像的字段类型应该是:
A,备注型 B,通用型 C,字符型 D,图像型
12、在Visual FoxPro中,逻辑型、日期型和备注型数据的宽度分别是:
A.1,8,12 B.2,8,10 C.1,8,4 D.1,8,任意
13、表文件记录的总宽度比其各字段宽度的和多一个字节,这个字节是:
A.无用的 B.用来存放序号
C.用来存放记录号 D.用来存放删除标记*
14、表结构中的逻辑型、通用型、日期型字段的宽度由系统自动给出,它们分别为:
A,1,4,8 B,4,4,10 C,1,10,8 D,2,8,8
15、显示和修改表记录的菜单方式是:
A.文件/表设计器 B.显示/表设计器 C.浏览菜单 D.显示/编辑
16、建立表结构之后,没有立即输入表内容,可通过菜单( )来实现添加多条表记录。
A.显示/添加记录 B.显示/追加方式
C.编辑/追加记录 D.表/追加方式
17、命令APPE BLANK的功能是:
A.在表文件开始增加一个空记录 B.在表文件末尾增加一个空记录
C.在当前记录前增加一个空记录 D.在当前记录后增加一个空记录
18、表中有10条记录,肯定定位在第一号记录上的命令是:
A.GO 1 B.GO BOTTOM C.GO TOP D.SKIP
19、设当前记录号为15,现欲将记录指针指向11的操作是:
A.SKIP -4 B.SKIP 4 C.GO BOTTOM D.GO 15
20、下列操作中,不能用MODIFY STRUCTURE 命令实现的是:
A.为数据表增加字段 B.删除数据表中的某些字段
C.对数据表的字段名进行修改 D.对记录数据进行修改
21.连续执行以下命令之后,最后一条命令的输出结果是
SET EXACT OFF
X=“D”
?IIF(“D”=X,“ABC□□”-X,“ABC□□”+X)
A.D B.ABC C.ABCD□□ D.ABC□□D
注释:□代表空格
22、在16号记录前添加一条记录,当前指针在16号记录处,应该用的命令是:
A.APPEND B.INSERT BLANK C.INSERT D.INSERT BEFORE
23、工资大于1000且年龄少于55岁的男职工表达式为,
A.工资>1000,or,年龄<55,or,性别="男"
B.工资>1000,and,年龄<55,and,性别="男"
C.工资>1000,and,年龄<55,or,性别="男"
D.工资>1000,or,年龄<55,and,性别="男"
24、职称是工程师或高工的男性职工的逻辑表达式为:
A.性别=“男” AND (职称=“高工” AND 职称=“工程师”)
B.职称=“工程师” OR(职称=“高工” AND 性别=“男”)
C.职称=“高工” OR(职称=“工程师” OR 性别=“男”)
D.性别=“男” AND (职称=“工程师” OR 职称=“高工”)
25、精确显示名字中有个“高“字的人员信息的命令是:
A.LIST FOR 姓名=‘高' B.LIST FOR 高$‘姓名’
C.LOCATE FOR 姓名='高' D.LIST FOR '高'$姓名
26、要显示数据表中平均分数超过90分或者不及格的全部女生记录,应当使用命令:
A.LIST FOR 平均分>=90 OR (性别=‘女’ OR 平均分<=60 )
B.LIST FOR 平均分>90 AND 性别=‘女’ OR 平均分<60
C.LIST FOR 性别=‘女’ AND 平均分>90 AND 平均分<60
D.LIST FOR 性别=‘女’ AND (平均分>90 OR 平均分<60)
27、下列命令中,能显示当前数据库中所有年龄不低于30岁(含30岁)不超过50岁的人员的姓名和职称是:
A.LIST 姓名,职称 FOR年龄>=30,OR,年龄<=50
B.LIST 姓名,职称 FOR 年龄>=30,AND,年龄<=50
C.DISP 姓名,职称 FOR年龄>=30,OR,年龄<=50
D.LIST FOR 年龄>=30,AND,年龄<=50
28、显示1987年1月6日出生的学生姓名的命令是:
A.LIST FOR 出生年月= 1987年1月6日 B.LIST FOR 出生年月={1987/1/6}
C.LIST FOR 出生年月={^1987/01/06} D.LIST FOR 出生年月={^01/06/1987}
29、要对所有教授的工资增加400元,应使用命令:
A.CHANGE 工资 WITH工资+400 FOR 职称=“教授”
B.REPLACE 工资 WITH工资+400 FOR 职称=“教授”
C.CHANGE ALL工资 WITH工资+400 FOR 职称=“教授”
D.REPLACE ALL 工资 WITH工资+400 FOR 职称=“教授”
30、已知人事档案数据表有字段:“开工时间(日期型)”,“岗酬(货币型)”……。以下哪条命令完成的功能是:工龄=(系统日期-开工时间)/365,如果工龄大于20,网酬增加10%:
A.REPLACE 岗酬 WITH 岗酬*10% FOR (DATE()-开工时间)/ 365 >20
B.REPLACE 岗酬 WITH 岗酬*0.1 FOR (DATE()-开工时间)/ 365 >20
C.REPLACE 岗酬 WITH 岗酬+岗酬*0.1 WHILE(DATE()-开工时间)/ 365 >20
D.REPLACE 岗酬 WITH 岗酬+岗酬*0.1 FOR (DATE()-开工时间)/ 365 >20
31、将所有工作人员津贴上涨20%的命令是:
A.REPLACE 津贴 WITH 津贴*20%
B.REPLACE ALL 津贴 WITH 津贴*(1-20%)
C.REPLACE ALL 津贴 WITH 津贴*(1+20%)
D.REPLACE ALL 津贴WITH '津贴'*(1+20%)
32、已知总分字值求平均分字段的方法是:
A.REPLACE ALL 平均分 WITH 总分/4 B.REPLACE 平均分 WITH 总分/4
C.REPLACE 总分 WITH 平均分/4 D.REPLACE ALL 总分 WITH 平均分/4
33、逻辑删除数据表文件中的某些记录,使用的命令是:
A.DELETE B.PACK C.ZAP D.DELETE 和PACK
34、要从数据表中真正删除掉一条记录,应使用命令:
A.先用DELETE命令,再用ZAP命令 B.直接用ZAP命令
C.直接用DELETE命令 D.先用DELETE命令,再用PACK命令
35、在当前库中逻辑删除全部记录,应使用:
A.ZAP命令 B,DELETE ALL 命令
C.RECALL和 PACK 命令 D,DELE ALL 和PACK命令
36、表文件中记录序号左边有“*”号,表示:
A.分类记录号 B.物理删除标记 C.逻辑删除标记 D.索引标记
37、在Visual FoxPro中,ZAP命令可以删除当前数据表文件的:
A.结构和所有记录 B.所有记录
C.满足条件的记录 D.有删除标记的记录
38、设表TXL.DBF中有20条记录,在Visual FoxPro命令窗口中执行以下命令序列,最后显示的是:
USE TXL
SKIP 3
DELETE
SET DELETED OFF
COUNT TO N
? N
A.20 B.19 C.18 D.17
39、在当前表XSDA.DBF中添加一条记录(内容如下),正确的命令是:?
姓名入学成绩团员否简历
蒋丽560.T.
A.INSERT?INTO?XSDA?(姓名,?入学成绩,?团员否)?VALUES?(蒋丽,560,.T.)
B.INSERT?INTO?XSDAVALUES(蒋丽,560,.T.)
C.INSERT?INTO?XSDA(姓名,?入学成绩,党员否)(’?蒋丽’,560,T)
D.INSERT?INTO?XSDA?(姓名,入学成绩,团员否)?VALUES?(’蒋丽’,560,.T.)
40、执行命令LOCATE FOR <条件>已在表中检索到符合条件的第一条记录。若将指针定位到符合<条件>的第二条记录,可使用命令:
A.CONTINUE B.SKIP C.GO 2 D.NEXT 1
41.在一个数据表中,有一个或若干个字段,它们的值可以惟一的标识一条记录,这样的字段称为:
A.主题字 B.标题 C.关键字 D.记录名
42、以下有关排序和索引的描述中,不正确的是:
A.排序和索引都是对数据表中的记录按关键字重新组织
B.排序过程占用空间大、所需时间长、需重新生成新的排序文件
C.排序文件空间小、索引文件空间大
D.索引是按关键字对数据表记录的逻辑排序
43、在Visual FoxPro中利用( )保证实体的完整性。
A.候选索引 B.主索引、候选索引、普通索引
C.主索引或候选索引 D.主索引、候选索引和唯一索引
44、某个数据表未打开任何索引文件,有20条记录,当前记录号是10,执行命令:
LIST NEXT 6
后,所显示的记录号的范围是
A.11-15 B.11-16 C.10-15 D.10-14
45、FoxPro的SORT 命令和INDEX 命令的主要区别:
A.SORT 命令按指定关键字排序,INDEX 命令按指定记录排序
B.SORT命令按指定记录排序,INDEX 命令按指定关键字排序
C.SORT命令改变了记录的物理位置且生成一个新的有序文件,INDEX 命令不改变记录的物理位置只按索引关键字建立索引文件
D.INDEX 命令可以产生一个与表无关的复制品排序文件
46、已知某数据表建立了复合索引,索引标识为:性别,学号。当打开这个表以后,以下叙述正确的是:
A.可以用命令:“SET ORDER TO 学号”激活“学号”索引
B.学号索引自动激活
C.不能用命令:“DELETE TAG 性别” 删除“性别”索引
D.不能用SET ORDER TO 改变索引关键字的升/降序排列
47、有图书数据表按“书名”、“作者”复合索引,索引标识与字段名相同,执行以下命令:
SET ORDER TO TAGE 作者
SEEK ‘巴金’
现在要使指针指向作者为巴金的顺序第3部著作,应用命令是:
A.SKIP 2 B.CONTINUE C.SEEK ‘巴金3’ D.SKIP 3
48.自由表Gz.dbf有姓名/C/8、出生年月/D、基本工资/N/6/2等字段,要建立以“姓名”和“基本工资”两字段的组合索引,其索引关键字表达式是:
A.姓名+基本工资 B.“姓名”+“基本工资”
C.“姓名”+基本工资 D.姓名+STR(基本工资,6,2)
49、要将数据表TEA.DBF 中所有男助教的记录复制到一个新表JSH.DBF中,应使用命令:
A.USE TEA
COPY TO JSH FOR 性别=”男”,AND,职称=”助教”
B.USE JSH
APPEND FROM TEACHER FOR 性别=”男”,AND,职称=”助教”
C.COPY FILES TO JSH FOR 性别=”男”,AND,职称=”助教”
D.USE TEA
SAVE JSH FOR 性别=”男”,AND,职称=”助教”
50、将二班CJ2纵向连接到一班CJ1表中的命令是:
A.USE CJ1 B.USE CJ2
APPEND FROM CJ2 APPEND FROM CJ1
C.USE CJ1 D.USE CJ2
JOIN WITH CJ2 JOIN WITH CJ1
51、学生数据表中“实验成绩“是逻辑型字段,该字段的值为.T.表示实验成绩为通过,否则为没有通过.若想计算”实验成绩”没有通过的学生人数,应使用命令:
A.COUNT TO C FOR 实验成绩=F B.COUNT TO C FOR,NOT.实验成绩
C.COUNT TO C FOR 实验成绩=”F” D.COUNT TO C FOR 实验成绩=”.F.”
52、SELECT 0 的功能是:
A.选择工作区号最小的空闲工作区 B.选择工作区号最大的空闲工作区
C.选择当前工作区号+1的工作区 D.随机选择一个工作区的区号
53、下列哪一条命令可关闭所有工作区中打开的数据表文件:
A.USE B.CLOSE C.CLEAR D.CLOSE DATABASE
54、将当前已打开的表文件内容拷贝到KB01.DBF库文件中的命令是:
A.COPY STRUCTURE TO KB01 B.COPY TO KB01
C.COPY STRUCTURE EXTE TO KB01 D.COPY FILE TO KB01
55、若销售数据表(含有:商品名、库存量、总价等字段)及相应的索引文件已经打开,要求对库存量及总价字段按商品名汇兑,结果存在KC.DBF中,可使用命令:
A.TOTAL ALL ON 商品名 TO KC
B.TOTAL TO KC ON 商品名 FIELDS 库存量,总价
C.SUM TO KC ON 商品名 FIELDS 库存量,总价
D.SUM TO KC ALL ON 商品名
56、打开一个数据库的命令是:
A.USE B.OPEN DATABASE C.OPEN D.USE DATABASE
57、下列命令中,能打开数据库设计器窗口的命令是:
A.MODIFYSTRUCTUREB.MODIFY?DATABASE
C.CREATEDATABASED.MODIFY?TABLE
58、下列关于数据库的说法中,正确的是:?
A.刚建好数据库不包含任何相关表或其它对象,处于关闭状态
B.自由表可以添加到数据库中
C.数据库表建立后,不可移出成为自由表
D.用户不能同时打开多个数据库,打开新数据库则就关闭先前打开的数据库
59、只允许学号4位数字,应在“数据库表设计器”对话框的“字段”页面的什么框中设置什么内容:
A.输入掩码 9999B.标题 9999 C.输入掩码XXX D.默认值9999?
60、在数据库设计器中,建立两个表之间的一对多联系是通过以下索引实现的?。
A."一方"表的主索引或候选索引,"多方"表的普通索引?
B."一方"表的主索引,"多方"表的普通索引或候选索引?
C."一方"表的普通索引,"多方"表的主索引或候选索引?
D."一方"表的普通索引,"多方"表的候选索引或普通索引?
61、如果要在屏幕上直接看到查询结果,"查询去向"应该选择:
A.屏幕? B.浏览?C.临时表或屏幕? D.浏览或屏幕?
62、将打开的当前数据表的所有记录复制到JR.DBF中的命令是:
A.COPY TO JR B.COPY FILE TO JR
C.COPY STRUCTURE TO JR D.COPY STRUCTURE EXTE TO JR
63、查询设计器和视图设计器的主要不同表现在于:
A.查询设计器有“更新条件”选项卡,没有“查询去向”选项
B.查询设计器没有“更新条件”选项卡,有“查询去向”选项
C.视图设计器没有“更新条件”选项卡,有“查询去向”选项
D.视图设计器有“更新条件”选项卡,也有“查询去向”选项
64、查询的默认输出去向是:
A.数据表 B.浏览 C.图形 D.报表
65、Visual FoxPro中参照完整性规则不包括:
A.更新规则 B.删除规则 C.查询规则 D.插入规则
66、在SQL包含的功能中,最重要的功能是:
A.数据查询 B.数据定义 C.数据操纵 D.数据控制
67、在学生表STUD中查询所有小于20岁学生姓名及年龄,正确语句是:
A.SELECT 姓名,年龄 FROM STUD FOR SA<20
B.SELECT 姓名,年龄 FROM STUD WHERE NOT SA>=20
C.SELECT 姓名,年龄 ON STUD FOR SA<20
D.SELECT 姓名,年龄 ON STUD WHERE SA<20
68、在XSQK.DBF中,查询在银行工作的学生信息,以下语句正确的是:?
A.SELECT*FROM? XSQKWHERE工作单位=银行
B.SELECT*FROM? XSQKWHERE工作单位=”银行”
C.SELECT*FROM? XSQKWHERE工作单位LIKE“%银行%”
D.SELECT*FROM? XSQKWHERE工作单位LIKE%银行%
69、在SQL的ALTER语句中,用于删除字段的子句是:
A.ALTER B.DELETE C.DROP D.MODIFY
70、INSERT —SQL语句中所使用的数据不能来自于:
A.数组 B.变量 C.查询 D.索引
71、将XSDA.DBF中所有“操行”高于85分的“等级”评定为“优”,实现语句为
A.REPLACE等级WITH优WHERE操行>85
B.REPLACE等级WITH“优”FOR操行>85
C.UPDATEXSDA.DBFSET等级=“优”FOR操行>85
D.UPDATEXSDA.DBF等级WITH“优”WHERE操行>85
72、已知商品数据表GOODS的结构为(代码 C 10,品名 C 30,单价 N 5,供应商代码 C10)。
以下哪条VFP-SQL语句能够实现查询全部不重复的“单价”:
A.SELECT 单价 TOP FROM GOODS
B.SELECT ‘单价’TOP FROM GOODS
C.SELECT DISTINCT ‘单价’ FROM GOODS
D.SELECT DISTINCT 单价 FROM GOODS
73、用SQL语句从”STU”表中查询所有姓”王”的同学的信息,正确的命令是:
A.SELECT * FROM STU WHERE LEFT(姓名,2)=’王’
B.SELECT * FROM STU WHERE RIGHT(姓名,2)=’王’
C.SELECT * FROM STU WHERE TRIM(姓名,2)=’王’
D.SELECT * FROM STU WHERE STR(姓名,2)=’王’
74、已知商品数据表GOODS的结构为(代码 C 10,品名 C 30,单价 N 5,供应商代码 C10)。
以下哪条VFP-SQL语句能够实现功能:查询只包含“品名,单价”两个字段并且单价大于10000的全部商品:
A.SELECT * FROM GOODS WHERE 单价)10000
B.SELECT * WHILE 单价)10000
C.SELECT 品名,单价 FROM GOODS WHERE 单价>10000
D.SELECT 品名,单价 WHERE 单价>10000
75、不能出现LOOP和EXIT语句的程序结构是,
A.IF...ENDIFB.SCAN...ENDSCAN
C.DO...ENDDOD.FOR...ENDFOR
76.在下面的DO循环中,共要循环(  )次。
X=15
Y =20
DO WHILE Y>=X
Y=Y-1
ENDDO
A.20 B.15 C.6 D.5
二、多项选择题
1、以下是有关Visual FoxPro自由表的叙述,正确的是:
A.自由表和数据库表完全相同的
B.自由表不能建立字段级规则和约束
C.自由表不能建立候选索引
D.自由表不可以加入到数据库中
E.在没有数据库打开时,创建的表就是自由表
2、以下叙述正确的有:
A.使用COPY FILE TO 必须先打开文件
B.COPY TO 命令可以同时复制备注文件
C.APPEND FROM SCORE.DBF 需要事先打开SCORE.DBFO数据表
D.SCATTER命令一次可将数据表内全部记录内容传送给指定数组。
E.修改数据表结构可采用交互式命令MODIFY STRUCTURE
3、以下是有关Visual FoxPro索引知识,正确的是:
A.索引就是对记录的物理排序
B.索引文件逻辑上按照索引关键字值进行排序
C.建立索引可以加快对表的查询
D.Visual FoxPro中主索引字段(组)不允许重复值
E.Visual FoxPro中不存在多重索引。
4、使用USE<表文件名>命令打开表文件时,能同时自动打开的相关文件:
A.备注文件 B.独立复合索引文件 C.结构复合索引文件
D.内存变量文件 E.文本文件
5、在Visual FoxPro中查询(QUERY)的数据源可以来自:
A.数据库表 B.索引 C.临时表 D.视图 E.报表
6、下列命令显示年龄为10的整数倍的全部在职职工记录,正确的有:
A.BROWSE FOR MOD(年龄,10)=0
B.BROWSE FOR 年龄/10=INT(年龄/10)
C.BROWSE FOR SUBSTR(STR(年龄,2),2,1)=’0’
D.BROWSE FOR 年龄=20,OR,40 OR.50.OR.60
E.BROWSE FOR ROUND(年龄,10)=0
7、在FoxPro环境下,建立排序文件时,能作为关键字段的数据类型是:
A.C B.M C.N D.L E.G
8、使用报表向导定义报表时,定义报表布局的选项是,
A.行数 B.方向 C.字段布局 D.方向
9、欲编辑备注型字段内容,可以将光标定位在备注型字段,按:
A.CTRL+PGDN B.CTRL+PGUP C.CTRL+HOME
D.ESC E.用鼠标双击该字段
10、欲编辑备注型字段内容,可以将光标定位在备注型字段,按:
A.CTRL+PGDN B.CTRL+PGUP C.CTRL+HOME
D.ESC E.用鼠标双击该字段
11、下列操作中,不能用MODIFY STRUCTURE 命令实现的是:
A.为数据表增加字段 B.删除数据表中的某些字段
C.对数据表的字段名进行修改 D.对记录数据进行修改
E.删除几条记录数据
12、可以在同类数据之间进行“-”运算的数据类型是:
A..数值型 B..字符型 C.逻辑型 D..日期型
13、表中数据的完整性包括( )种。
A.实体完整性 B.域完整性 C.参照完整性 D.记录完整性
14、用索引命令建立的索引文件扩展名有( )种
A..IDX B..CDX C..FPT D..TAG
15、在当前盘当前目录下,删除表stock的命令有:
A.ERASE STOCK B.DELETE STOCK
C.DELETE FILE STOCK D,ERASE FILE STOCK
16、下列命令中 ( )是查询命令:
A.FIND B.INDEX C.LOCATE FOR D.SEEK
17、向数据表中添加记录的方法有( )种。
A.APPEND B.INSERT C.REPL D.INSERT INTO…
18、建立索引文件时,指定关键字段的数据类型可以是( )
A.字符型 B.日期型 C.数值型 D.逻辑型
19、在下列语句中,能接受字符型数据的输入命令是:
A.INPUT B.ACCEPT C.WAIT D.@ 2,3 SAY …GET…
20、下列关于查询设计器的说法中正触的有:
A.即可对单表查询,也可对多表查询
B.在分组依据选项卡中,可以设置查询结果按某一字段值的升序排列
C.可以将查询结果保存到扩展名为.QPR的查询文件中,并可在命令窗口中直接用DO命令执行
D.可以设定查询结果的输出形式,如临时表、图形等
21、以下可以在数据表中增加一条空白记录的命令有:
A.INSERT B.INSERT BLANK C.APPEND BLANK
D.INSERT BEFORE E.REPL BLANK
三、判断题
1、用SKIP移动记录指针,在任何情况下,都不会出现超界警告。
2、触发器是一个在插入,删除或更新数据库中的记录时被激活的表达式。
3、事件发生时,若没有与之相关联的程序(或称事件代码),则不会发生任何操作。
4、备注文件中的内容不能用LIST或DISP来显示。
5、报表最主要的组成要素有两个方面:一是数据来源,二是格式定义。
6、某数据库表的”字段有效性的规则为:性别=’男’ or性别=’女’。它不仅限制“性别”字段的值域,而且限制“姓名”字段的值域。
用SKIP移动记录指针,在任何情况下,都不会出现超界警告。
8、视图实际是从数据库表或视图中导出的“表”可以看作是一个“虚表”。
9、LIST 与DISPLAY都能显示记录内容,但DISPLAY命令只能显示当前记录,写明范围all才能显示全部记录内容。
10、两个即将关联的数据库表必须先按相同字段索引。
11、使用SQL语句进行分组检索,为了去掉不满足条件的分组应当在GROUP BY 后面使用HAVING子句。
12、更新触发器是进行记录修改有效性的检验。
13、用DELE和ZAP删除的记录永远不能恢复过来。
14、表中的首记录是指表中第一条记录,尾记录是指表中最后一条记录。
15、在VFP中建立索引的作用之一是提高查询的速度。
16、两表建立临时关联后,当父表记录指针移动时,子表记录指针按一定的规则跟随移动。
17、创建视图时,相应的数据库必须是打开状态。
18、空值(NULL)表示字段或变量还没有确定值。
19、VFP为用户提供了32767个工作区。
20、find命令可以查询字符型、数值型、日期型等多种类型的字段值。
21、建立索引后,原来的数据库表文件中记录的物理顺序将被改变。
22、可以用SET RELA TO 命令创建两表永久性关联
23、DO WHILE…ENDDO循环结构中,EXIT命令的作用是转移到DOWHILE语句行,开始下一个判断和循环。
参考答案一、单项选择题:
1—5 DCCDA 6—10 BCCBB 11—15 BCDAD 16—20 BBAAD
21—25 CDBDD 26—30 DBCDD 31—35 CAADB 36—40 CBADA
41—45 CCCCC 46—50 AADAA 51—55 BADBB 56—60 BBBAB
61—65 BADCA 66—70 ABCDD 71—75 CDACA 76 C
二、多项选择题:
1.BE 2.BDE 3.BCD 4.AC 5.ABCD 6.ABC 7.ACD 8.ABC
9.ABCE 10.ABCE 11.DE 12.ABD 13.ABC 14.AB 15.AC
16.ACD 17.ABD 18.ABC 19.BCD 20.ACD 21.BC
三、判断题:
1—5 ⅹ√√ⅹ√ 6—10 ⅹⅹ√√√ 11—15 √ⅹⅹ√√ 16—20 ⅹ√√√ⅹ
21—25 ⅹⅹⅹ
第三部分 函数及基本操作一、单项选择题
1、X=AT(’学生’,’计算机系95级学生’),变量X的值是:
A.8 B.16 C.13 D.7
2、执行A=“2.显示记录” 和B=3两条赋值命令后,能够正确求值的表达式是:
A.RIGHT(A,4)+SUBSTR(B,2) B.VAL(LEFT(A,1))+B
C.A+B D.SUBSTR(A,1,1)+B
3、TIME()函数返回值的数据类型是:
A.数值型 B.字符型 C.逻辑型 D.日期型
4、已知D=(4>6 OR 7=2),则执行命令?TYPE(‘D’)将显示:
A.D B.报错 C.L D.C
5、设X=123,Y=”X+Y”,则表达式1+&Y的值是:
A.802 B.数据类型不匹配 C.123+X+Y D.123XY
6、表达式SUBSTR(RIGHT(“ZIYUANGUANLI”,6),3,4)的结果是:
A.ANLI B.GUAN C,YUAN D.ZIYU
7、LEN(SPACE(10))的值是:
A.8 B.10 C.7 D.3
8、TYPE(‘VAL(’99.99’)’)的结果是:
A.N 型 B,D型 C.L型 D,C型
9、N=’12.27 ‘
6+&N 显示结果是:
A,612.27 B.18.27 C,61227 D.72.27
10、执行命令X=MONTH(DATE())后,X值的数据类型是:
A.日期型 B.逻辑型 C.字符型 D.数值型
11、当前表中,RECNO()的返回值为10,且EOF()的值为.T.,?RECCOUNT()的返回值为:?
A.9B.10C.11D.12
12、在下列函数运算中,函数返回值的数据类型是数值型的是:
A.EOF() B.STR(123.89) C.ASC(‘中’) D.TIME()
13、LEN( 'ABC' - ' ABC')的值是:
A.0 B.8 C.7 D.3
14、Y=’3.1415’
TYPE(‘Y’)的结果是:
A.N B.C C.D D.L
15、表达式MOD(23,-7)的结果为:
A.2 B.-2 C.-5 D.-9
16、在下列函数中,函数值为数值的是:
A.AT('人民','中华人民共和国')? B.CTOD(′01/01/96′)?
C.BOF()? D.SUBSTR(DTOC(DATE()),7)?
17、下列表达式中,运算结果为字符串的是:?
A.’ABCD’-’AB’B.’ABCD’+’XYZ’=’ABCDXYZ’
C.CTOD(’06/29/99’) D.AB-25
18、在下述表达式中,其结果肯定是逻辑值的是:
A.字符表达式 B.算术表达式 C.关系表达式 D.日期表达式
19、VAL(SUBSTR('GW468',4,1))*LEN("COMPUTER")的值是,
A,64 B,56 C,48 D,42
20、数组定义后的默认值为:
A,0 B,‘ ’ C..T,D..F.
21、表达式-2*3^2的结果为:
A,12 B,-12 C,18 D.-18
22、A=’10/11/98’,则表达式MONTH(CTOD(A)和DAY(CTOD(A))的值分别是:
A,10和97 B.11和97 C,10和11 D,11和10
23、在下面的VISUAL?FOXPRO表达式中,不正确的是,
A.{^2002-05-01?10:10:10?AM}-10? B.{^2002-05-01}-DATE()?
C.{^2002-05-01}+DATE()? D.{^2002-05-01}+[1000]?
24.下列常量不是字符常量的是:
A.“STRING” B.{STRING} C.‘STRING’ D.[STRING]
25.使用DIMENSION命令定义数组后,各数组元素在没有赋值之前的数据类型是:
A.未定义 B.数值型 C.字符型 D.逻辑型
26.执行?VAL(“-22.6+2”)命令后,结果是:
A.-22.60 B.-22.00  C.-21.00  D.-20.60
27.函数MOD(-4*4,-10)的值是:
A.-6 B.-4  C.4 D.6
28.在下列表达式中,运算结果为数值型数据的是:
A.CTOD(”12/24/2006”) - 28 B.”1234” +,5678”
C.100 + 100 = 200 D.LEN(“ABCD”) -1
29.已知D=”04/20/2007”,则表达式10+&D的计算结果是:
A.数值型  B.字符型  C.日期型  D.数据类型不匹配二、多项选择题
1、以下表达式中,A,B为数值,其中合法的表达式有:
A.8-3=5 B.{99/01/01}+15 C.[8]+[3]>10
D.AT(‘AD’,’XYADVANAD’)- LEN(‘ADADAD’)
E.NOT.(A=B),AND,A-B>0 OR B=0
2、下列函数的值为数值型的是:
A.STR B.VAL C.AT D.LEN
3、以下的四组函数中,函数值相同的:
A.LEFT("VISUAL FOXPRO",6)和SUBSTR("VISUAL FOXPRO",1,6)
B.YEAR(DATE())和VAL(DTOC(DATE(),1))
C.VARTYPE("25-3*4")和VARTYPE(25-3*4)
D.INT(-123.456)和ROUND(-123.456,0)
三、判断题
1、宏替换&之后只能用字符型内存变量。
2、“中国”-SPACE(5)+“重庆”和“中国”+SPACE(5)-“重庆”两个表达式的结果在屏幕上均显示为“中国重庆”。
表达式CHR(65)-STR(MOD(1,7),2)的结果串的长度为2。
AT(“重庆”,“中国.重庆”)的值和“重庆”$“中国.重庆”的值是相同的。
5、IIF(1+4=5,’男’,’女’)命令显示是”男” 。
6、RECOUNT()函数可以统计包括逻辑删除记录在内的所有记录个数。
7、宏替换&的操作数只能是字符型变量。
8、EMPTY(SPACE(10))的结果是.T,。
9、求一个3位十进制正整数N的第十位数,正确的是用MOD(INT(N/10),10)。
参考答案一、单项选择题:
1—5 CBBCB 6—10 ABABD 11—15 ACCBC 16—20 AACCD
21—25 DCCBD 26—29 AADA
二、多项选择题:
1.ADE 2.BCD 3.AD
三、判断题:
1—5 ⅹⅹ√√√ 6—9 ⅹⅹ√√
第四部分 程序阅读基础知识一、读程序写出运行结果:
1、已知数据表内容为:
姓名 性别 政治面貌
张鹏 女 共产党员
曾小丽 女 九三学社
王霞 女 民盟
程海 男 民盟
刘柳 女 民革数据表已打开(未索引或排序),请写出以下程序段运行的结果。
DO WHILE,NOT,EOF()
IF 性别=’男’
EXIT
ELSE
IF 政治面貌<>’共产党员’
姓名+SPACE(4)
ENDIF
ENDIF
SKIP
ENDDO
2、有一程序如下,写出运行结果:
SET TALK OFF
CLEAR
STORE 1 TO F1,F2
FOR K=1 TO 6
IF K%2=1
F1,F2
ELSE
F1,F2
ENDIF
F1=F1+F2
F2=F2+F1
ENDFOR
RETURN
3、有一程序如下,写出运行结果:
SET TALK OFF
CLEAR
STORE 1 TO F1,F2
FOR K=1 TO 4
F1,F2
F1=F1+F2
F2=F2+F1
ENDFOR
RETURN
4、以下程序运行时输入:16和12。请写出程序运行的结果。
SET TALK OFF
CLEAR
INPUT,请输入一个数:” TO X
INPUT,请输入一个数:” TO Y
IF Y>X
T=Y
Y=X
X=T
ENDIF
DO WHILE Y<>0
T=Y
Y=X%Y
X=T
ENDDO
X
5、有一程序如下,写出运行结果:
SET TALK OFF PROCEDURE SUB1 PROCEDURE SUB2
M=”第十八个教师节” PARAMETERS X PARAMETERS X,Y
N=1 PRIVATE N H=RIGHT(X,Y*2)
DO SUB1 WITH M N=3 X=H+LEFT(X,(Y-1)*4)
M,N DO SUB2 WITH X,N? H
SET TALK ON? N? X
RETURN RETURN RETURN
6、请写出以下程序运行的结果。
SET TALK OFF
CLEAR
Y=0
FOR I=1 TO 4
Y=I
DO MY3SQR WITH Y
Y
ENDFOR
PROCEDURE MY3SQR
PARAMETERS Y
Y=Y*Y*Y
RETURN
7、有如下学生成绩表SCORE.DBF,共有5条记录
记录号姓名  平均分
1?赵星 75
2 ? 钱理 88
3 ? 孙明 55
4 ? 王记 78
5 ? 周轩 90
ALTER?TABLESCOREADDCOLUMN?等级?C(2)
USESCORE
SCAN
DOCASE
CASE平均分>=90
REPLACE等级WITH“优”
CASE平均分>=80
REPLACE等级WITH“良”
CASE平均分>=60
REPLACE等级WITH“中”
CASE平均分<60
REPLACE等级WITH“差”
ENDCASE
ENDSCAN
DELETE?FOR?等级=“差”
PACK
LIST
RECCOUNT(?)
USE
SETTALKON
8、已知CTEST=‘HELLO2008,LUCK5688PIG’,写出以下程序的运行结果:
SET TALK OFF
CLEAR
CNUMONLY=,”
FOR NCNT=1 TO LEN(CTEST)
CCHARACTER=SUBSTR(CTEST,NCNT,1)
IF ISDIGIT(CCHARACTER)
CNUMONLY=CNUMONLY+CCHARACTER
ENDIF
ENDFOR
CNUMONLY
RETURN
9、请写出以下程序运行的结果。
SET TALK OFF
I=1
J=.T.
DO M1
I,CD
DO M2 WITH J
I,CD
RETURN
PROC M1
PUBLIC CD
I=I*2+1
CD='FOXPRO'
RETURN
PROC M2
PARA J
IF J
I=I*2
ENDIF
CD='V'+CD+STR(I,1)
RETURN
10、SET TALK OFF
CLEAR
R=1
C=8
DO WHILE,T.
IF R>4
EXIT
ENDIF
@R,C SAY ‘******’
R=R+1
C=C+1
ENDDO
RETURN
11、*主程序MAIN.PRG 子程序SUB.PRG
SET TALK OFF PARA X
R=3 DO WHILE X>=1
X=5 S=S*X^2
S=1 X=X-1
DO SUB WITH R ENDDO
R,X,S RETURN
RETURN
12、XSCJ.DBF中有8000条记录,其结构为:姓名(C,8),成绩(N,6,2),建立命令文件如下:
SET TALK OFF
USE XSCJ
J=0
DO WHILE,NOT.EOF()
J=J+成绩
SKIP
ENDDO
’平均分:’-STR(J/8000,6,2)
RETURN
13、SET TALK OFF
P=CTOD(‘07/01/97’)
Q=’香港’
R=’庆祝回归’
M=Q+SUBSTR(R,5,4)+’日’
DTOC(P)+’是’+M
14、SET TALK OFF
SET PROC TO PP
PUBLIC C,D
C=16
D=5
E=2
F=1
DO AA
C,D
E,F
SET TALK ON
CLOSE PROCEDURE
RETURN
*过程文件 PP.PRG
PROC AA
PRIVATE D
C=SQRT(C)
D=C+3
C,D
E=E*D
F=2*F-1
E,F
RETURN
15、请写出以下程序运行的结果。
DIMENSION S(8)
CLEA
FOR I=1 TO 8
S(I)=3*I
ENDFOR
FOR I=1 TO 8
S(I)
ENDFOR
16、有两个数据表文件,其内容如下:
学生成绩表CJ.DBF 学生学号、姓名对照表XM.DBF:
学号 科目 成绩 学号 姓名
99011 马列原理 70 99011 张三
99013 马列原理 85 99012 李四
99012 马列原理 65 99013 王五
99012 英语 70
99011 英语 85
99013 英语 70
执行以下程序段,写出运行结果。
SET TALK OFF
SELECT A
USE XM
INDEX ON 学号 TO XH
SELE B
USE CJ
SET RELATION TO 学号INTO A
LIST OFF A->姓名,科目,成绩 FOR RIGHT(学号,2)=’12’
CLOSE DATA
RETURN
17、设有一学生成绩数据表XSCJ.DBF如下,写出程序的运行结果。
学号
课程号
学期
考试成绩
补考成绩
1999013001
01601
6
86.0
2000100723
10312
4
91.0
1998205134
20734
8
70.0
1999120815
12915
6
89.0
1999013001
60623
6
55.0
78.0
1999013001
60101
8
75
2000221005
22510
4
53.0
80.0
SET TALK OFF
CLEAR
USE XSCJ
K=0
DO WHILE,NOT.EOF()
IF 学号=’1999013001’
IF K=0
学号,课程号,IIF(考试成绩<60,补考成绩,考试成绩),’--‘
K=K+1
ELSE
课程号,IIF(考试成绩<60,补考成绩,考试成绩),’--‘
ENDIF
ENDIF
SKIP
ENDDO
USE
18、写出程序运行的结果:
SET TALK OFF
CLEAR
K=1
DO WHILE K<6
C=0
DO WHILE C<2*K-1
@K,10-K+C SAY CHR(48+2*K-1)
C=C+1
ENDDO
K=K+1
ENDDO
CANCEL
19、书籍BHSL.DBF表记录如下:记录号 编号 数量
1 A1 10
2 A0 85
3 A2 67
4 A10 50
5 A12 65
其中“编号”字段为C型,“数量”字段为N型,执行下列程序,写出结果:
SET TALK OFF
CLEAR
USE BHSL
A=数量
DO WHILE,NOT.EOF()
IF A<数量
A=数量
ENDIF
SKIP
ENDDO
编号,A
RETURN
20、CLEAR
STORE?0?TO?M,N
DO?WHILE?.T.
N=N+2
DO?CASE
CASE?MOD(N,3)=0
LOOP
CASE?N>0
EXIT
OTHERWISE
M=M+N
ENDCASE
ENDDO
“M=”,STR(M,4),?“N=”,STR(N,4)
RETURN
21、以下程序段的显示效果是:
SET TALK OFF
CLEAR
C=10
R=1
DO WHILE R<=4
S=1
DO WHILE S<=2*R-1
@ R,C SAY ‘*’
C=C+1
S=S+1
ENDDO
C=10-R
R=R+1
ENDDO
RETURN
22、有程序MMM.PRG如下,请写出结果
SET TALK OFF
CLEAR
STORE 0 TO X,Y
DO WHILE,T.
X=X+1
DO CASE
CASE MOD(X,3)=0
LOOP
CASE X>=10
EXIT
OTHERWISE
Y=Y+X
ENDCASE
ENDDO
Y
23、写出程序运行的结果:
SET TALK OFF
CLEAR
S=’MNOPQRST’
K=1
DO WHILE K<9
SUBSTR(S,9-K,1)
K=K+2
ENDDO
参考答案,
1.曾小丽 王霞
2.1 1 2 3
5 8 13 21
34 55 89 144
3,1 1
2 3
5 8
13 21
4.4
5.教师节教师节第十八个
3
教师节第十八个 1
6,1
8
27
64
7.记录号姓名  平均分 等级
1?赵星 75 中
2 ? 钱理   88 良
3 ? 王记   78 中
4 ? 周轩 90 优
4
8.20085688
9.3 FOXPRO
6 VFOXPRO6
10.******
******
******
******
11.0 5 36.000000
12.显示8000条记录的成绩平均值
13.07/01/97是香港回归日
14.4.00 7.00
14.00 1
4.00 5
14.00 1
15.3 6 9 12 15 18 21 24
16.李四 马列原理 65
李四 英语 70
17.1999013001 01601 86 --60623 78.0 --30101 75.0 -
18,1
333
55555
7777777
999999999
19.A0 85
20.M=0 N=2
21,*
***
*****
*******
22.27
23.TRPN
第五部分 程序填空基础知识一、读程序,填空完成程序:
1、已知某单位人事档案表DOCU.DBF有如下记录:
RECORD # 编号 姓名 年龄 职称 工资
1 3001 张立 36 讲师 690
2 3002 王方 31 讲师 680
3 3003 李平 22 助教 820
4 3004 朱岩 46 副教授 960
5 3005 张剑 40 教授 1100
6 3006 陈国青 50 副教授 920
7 3007 赵丽 47 教授 1200
下列三条VFP-SQL语句分别完成指定的数据表操作,请填空完成。
(1)查询所有副教授、教授的姓名、工资。
SELECT FROM DECU WHERE 职称 LIKE ‘%教授’
(2)按职称分组,计算出各职称组的平均工资和最低工资。
SELECT 职称,AVG(工资) AS 平均工资,MIN(工资) AS 最低工资 ;
FROM DECU
(3)根据人事政策,对年龄低于40岁的员工工资进行更新,原工资加200元。
UPDATE DOCU SET
2、设有一学生成绩表STR.DBF,对编号已经索引。其内容如下:
记录号 编号 高数 外语 计算机
1 0401120 90 98 78
2 0401128 85 76 81
3 0402003 77 87 67
4 0402010 50 60 87
5 0410010 65 73 55
6 0413108 76 80 90
下列程序功能是汇总编号第4位不为“0”的各科成绩均及格的学生人数。请填空完成。
SET TALK OFF
USE STU
SET ORDER TO TAG 编号
S=0
DO WHILE,NOT.EOF()
IF SUBSTR(编号,4,1)<>,0” AND ①
S= ②
ENDIF
SKIP
ENDDO
?S
USE
3、请完善程序,实现在屏幕上显示如下图形:
* * * * *
* * *
*
FOR I=1 TO 4
FOR J=1 TO I

ENDFOR
FOR J=1 TO ②
,*”


ENDFOR
4、完善程序,使用运行TEST1.PRG程序后,将在屏幕上显示下面左边乘法表:
1
2 4
3 6 9
4 8 12 16
5 10 15 20 25
6 12 18 24 30 36
7 14 21 28 35 42 49
8 16 24 32 40 48 56 64
9 18 27 36 45 54 63 72 81
以下程序实现功能:
统计数据表STOCK99中字段“编号”为奇数的“库存量”之和,请填空完成。
SET TALK OFF
X=0

DO WHILE,NOT.EOF()
IF VAL(编号)/2<> ②
X=X+库存量
ENDIF

ENDDO
,编号为奇数的库存量之和为:“,X
USE
6、找出105以内所有能被5整除的正整数
SET TALK OFF
CLEAR

DO WHILE,T.
Y=Y+1
IF Y=5*INT(Y/5)
Y
ELSE

ENDIF
IF ③
EXIT
ENDIF
ENDDO
RETURN
7、下列程序的功能是通过字符串变量操作竖向显示“三峡库区”,横向显示‘库区三峡’,请填空。
SET TALK OFF
STORE ‘三峡库区’ TO XY
CLEA
N=1
DO WHILE N<8
SUBSTR( ① )
N=N+2
ENDDO

SUBSTR(XY,1,4)
RETURN
8、有12个结构完全相同的数据库WY01,WY02…,WY11,WY12,下列程序完成功能是:顺序打开每一个数据库并浏览之。
SET TALK OFF
G=1
DO WHILE G<=12
DO CASE
CASE G<10
GW=’ WY0’+STR(G,1)
CASE G>=10
GW=’WY’+ ①
ENDCASE
USE ②
BROWSE

USE
ENDDO
CLOSE DATA
RETURN
9、下面是一段查询程序,STD为表文件,含有“姓名”、“完成工时”等字段,
SET TALK OFF
ACCEPT ‘请输入待查询职工姓名:’ TO XM
DO WHILE,NOT.EOF()
IF ①
’姓名:’+姓名,’完成工时’+STR(完成工时,3,0)
ENDIF

ENDDO
USE
SET TLAK ON
CANCEL
10、填上适当的语句,使求100以内能被3整除但不能被7整除的数字之和的程序完全正确。
SET TALK OFF
CLEA
STORE 0 TO S,N
DO WHILE N<=100

S=S+N
ENDIF
LOOP
ENDDO
’S=’+STR(S)
SET TALK ON
11、在商品销售表(SPXS.DBF)中有商品名、单价、数量和销售额等字段。现需要将销售额字段修改为数值型,宽度为10,小数位数为2,并更新销售额字段值。然后显示出销售表中各种商品的平均销售单价。
ALTER TABLE SPXS ALTER ①
② SET 销售额=单价*数量
SELECT 商品名,AVG(单价) FROM ③
12、下列程序完成的功能是:在ZGDA1.DBF数据表中,找出第一个2000年以后参加工作,且基本工资低于850的同志的姓名、基本工资及工龄。(如果找不到,则显示“查无此人!”)
CLEAR
USE ZGDA1
SCAN
IF ①
D=工作时间
XM=姓名
GZ=基本工资
EXIT
ENDIF
ENDSCAN
GL= ②
IF,NOT.EOF()

ELSE
’查无此人!’
ENDIF
USE
13、对学生情况表XSQK.DBF中的“入学成绩”字段进行统计,要求输出400分以下,400-500分,500分以上的人数。(用循环SCAN...ENDSCAN实现)。?
SET?TALK?OFF
USE?XSQK
①0?TO?NUM1,NUM2,NUM3
SCAN
CASE?入学成绩<400
NUM1=NUM1+1
CASE? ②
NUM2=NUM2+1
OTHERWISE
NUM3=NUM3+1
ENDSAN
CLEAR
,400分以下人数:”,NUM1
,400-500分人数:”,NUM2
,500分以上人数:”,NUM3
USE
SET?TALK?ON
14、已知学生成绩表(CJ.DBF)的结构由(学号,C,6)、(课程代号,C,2)和(成绩,N,3)三个字段组成,下面程序段用来检查表中的成绩是否小于0,如果小于0,给出提示信息。例如:如果第3条记录的成绩小于0,则显示提示信息为“第3条记录的成绩录入不合法”。完善下列程序段,使它完成上述功能:
USE CJ
SCAN
IF ①
N=RECNO()
S=MESSAGEBOX(‘第’+ ② +’条记录的成绩录入不合法’)
ENDIF

USE
15、现有两个数据表:股票信息表GP.DBF和股票交易表JY.DBF。其数据形式如下:
股票信息表GP.DBF
股票代码
股票名称
00343
航天动力
00015
华夏银行
00004
白云机场
股票交易表JY.DBF
股票代码
交易类型
交易数量
股价
金额
00343
.T.
5600
9.86
00015
.T.
3480
4.68
00343
.F.
320
10.34
00004
.T.
800
6.82
00015
.F.
800
5.34
00015
.F.
1500
5.86
要求输入并完善程序,程序的功能是能反复输入股票代码(按‘Q’键退出),并输出该股票的交易情况,格式为:“股票名称,交易类型,交易金额”最后输出该股票已经交易的总数量和总金额。
程序代码如下:
CLEAR
SET TALK OFF
SELECT 1
USE GP
INDEX ON 股票代码TAG GPDM
SELECT 2
USE JY
SET RELATION TO 股票代码 INTO GP
X=.T.
DO WHILE X
ACCEPT,请输入股票代码:” TO DM
IF UPPER(ALLTRIM(DM))=“Q”

LOOP
ENDIF
?“股票名称 交易类型 交易数量 交易金额”
SCAN FOR ②
?GP.股票名称,交易类型,交易数量,金额
ENDSCAN
CALULATE ③ TO S1,S2 FOR NOT 交易类型 AND 股票代码=DM
?“该股票已经交易的总数量 总金额”
?S1,S2
ENDDO
CLOSE ALL
SET TALK ON
RETURN
参考答案:
1.(1)姓名,工资 (2)GROUP BY 职称 (3)工资=工资+200 WHERE 年龄<40
2.① 高数>=60 AND 外语>=60 AND 计算机>=60 ② S+1
3.① SPACE(1) ② 8-2*I-1 ③ ENDFOR
4.① J=1 TO 9 ② K=1 TO J
5,① USE STOCK99 ② 0 ③ SKIP
6.① Y=0 ② LOOP ③ Y>=105
7.① XY,N,2 ② SUBSTR(XY,5,4)
8.① STR(G,2) ② &GW ③ G=G+1
9.① 姓名=XM ② SKIP
10.① IF MOD(N,3)=0 AND MOD(N,7)<>0
11.① 销售额 N(10,1) ② UPDATE SPXS ③ SPXS GROUP BY 商品名
12.① YEAR(工作时间)>2000 AND 基本工资 < 850
② YEAR(DATE())-YEAR(D) ③ XM,GZ,GL
13.① STORE ② 入学成绩>500 AND入学成绩<=400
14.① 成绩<0 ② STR(N) ③ ENDSCAN
15.① X=.F,② 股票代码=DM ③ SUM(交易数量),SUM(金额)
第六部分 程序设计基础知识一、用SQL语句完成下列题目中的内容:
1、若要将课程表.DBF中课程名为“数据结构”的学时增加10学时,实现其功能的SQL语句是,。
若要查询教师表.DBF中全部信息,应使用SQL语句是 。
3、若要在学生表中查询所有姓名的第二字是“红”的学生记录,实现其功能的SELECT-SQL语句中的WHERE子句应为 。
4、在授课表中,查询任课在两门以上的教师的教师号及其任课的门数。请对下列的SELECT –SQL语句填空。
SELECT 教师号,COUNT(*) FROM 授课表 GROUP BY 教师号
5、用嵌套查询的方式查询比“王力”同学的入学总分高的学生姓名和入学总分,请对下列的SELECT-SQL语句填空。
SELECT 姓名,入学总分 FROM 学生表 WHERE 入学总分> ( )
6、在学生表STUD中,查询计算机系“CS”且其年龄(SA)在20岁以下的学生姓名(XM) 和所在系(SD)的SQL语句是 。
7、在课程C120、C140、C150、C160中查询学生平均成绩在80分以上课程的学生的平均分(显示课程号)。请对下列的SELECT –SQL语句填空。
SELECT 课程号,AVG(成绩) AS 平均分 FROM 选课表 ;
WHERE 课程号 __________ GROUP BY 课程号HAVING AVG(成绩)>=80
8、在其他系中查询与计算机系教师最高工资相同的教师名和工资。请对下列的SELECT –SQL语句填空。
SELECT 姓名,工资 FROM 教师表 WHERE 工资= ;
(SELECT ____ FROM 教师表 WHERE 系别=‘计算机系’) AND系别<>‘计算机系’
二、用SQL语句完成下列各题:
STOCK.DBF
股票代码
股票名称
单价
交易所
600604
二纺机
9.96
上海
600605
轻工机械
14.59
上海
000001
深发展
7.48
深圳
000002
深万科
12.50
深圳
1、执行下列程序段以后,内存变量A的内容是:
CLOSE DATABASE
A=0
USE STOCK
DO WHILE,NOT.EOF()
IF 单价>10
A=A+1
ENDIF
SKIP
ENDDO
A.1 B.2 C.3 D.4
2、有如下SQLSELECT 语句:
SELECT * FROM STOCK WHERE 单价 BETWEEN 12.76 AND 15.20
与该语句等价的是:
A.SELECT * FROM STOCK WHERE 单价<=15.20 AND 单价>=12.76
B.SELECT * FROM STOCK WHERE 单价<15.20 AND 单价>12.76
C.SELECT * FROM STOCK WHERE 单价>=15.20 AND 单价<=12.76
D.SELECT * FROM STOCK WHERE 单价>15.20 AND 单价<12.76
3、在当前盘当前目录下,删除表STOCK的命令是
A.DROP STOCK B.DELETE TABLE STOCK
C.DROP TABLE STOCK D.DELETE STOCK
4、有如下SQL语句:
SELECT 股票代码,AVG(单价) AS 均价 FROM STOCK GROUP BY 交易所
执行该语句的功能是:
A.按股票代码分类统计单价的平均值
B.按交易所分类统计单价的平均值
C.按股票代码分类统计单价的总和
D.按交易所分类统计单价的总和
5、将STOCK表的股票名称字段的宽度由8改为10,应使用SQL语句:
A.ALTER TABLE STOCK 股票名称 WITH C(10)
B.ALTER TABLE STOCK 股票名称 C(10)
C.ALTER TABLE STOCK ALTER 股票名称 C(10)
D.ALTER STOCK ALTER 股票名称 C(10)
6、有如下SQL语句:
SELECT DISTINCT 单价 FROM STOCK ;
WHERE 单价=(SELECT MIN(单价) FROM STOCK )
执行该语句后,显示的单价是:
A.7.48 B.9.96 C.12.50 D.14.59
7、求每个交易所的平均单价的SQL语句是:
A.SELECT 交易所,AVG(单价) FROM STOCK GROUP BY 单价
B.SELECT 交易所,AVG(单价) FROM STOCK ORDER BY 单价
C.SELECT 交易所,AVG(单价) FROM STOCK ORDER BY 交易所
D.SELECT 交易所,AVG(单价) FROM STOCK GROUP BY 交易所
三、完成下列各题的程序设计:
1、对第五部分的15题中的两个表,使用VFP数据表操作命令和VFP-SQL命令,完成下述任程序设计。
(1)根据股份和交易数量计算每次交易的金额,并将计算结果写入JY.DBF表中;
(2)查询已经交易的股票信息,要求显示股票名称,交易数量,股份及交易金额,已经交易的为.T.
(3)按交易类型汇总交易数量和交易金额,并显示交易类型和汇总后的交易数量和交易金额
(4)将JY.DBF中还没有交易的股票逻辑删除。
2、有两个数据表:学生信息表(XS.DBF)和学生成绩表(CJ.DBF)。其数据形式如下:
学生信息表(XS.DBF) 学生成绩表(CJ.DBF)
考 号
姓 名
07020104
李 萍
07040109
黄 程
07030106
王 军
07020132
周小丽
07050223
程 成
07010213
张 伟
考 号
笔试
上机
合格否
07020104
86
优
.F.
07040109
45
缺考
.F.
07030106
91
优
.F.
07020132
74
及格
.F.
07050223
79
不及格
.F.
07010213
57
及格
.F.
要求:建立程序文件,将完成下列各小题任务的VFP数据表操作命令或VFP-SQL命令写在该程序文件中。
(1)正确修改每个学生的“成绩合格否”字段,并填入学生成绩表CJ.DBF中。规定笔试成绩<60或上机成绩为“缺考”或“不及格”,则该字段的值为.F.,否则为.T.;
(2)在学生成绩表CJ.DBF中,查询并显示成绩合格学生的考号、姓名、笔试成绩和上机成绩;
(3)逻辑删除学生成绩表CJ.DBF中上机考试缺考的考生。
3、图书销售管理系统包括如下所示二个表文件:
图书数据表:
SJ.DBF(书号 C8,类别 C4,书名 C30,作者名 C28,出版社名称C20)
订单数据表:
DD.DBF(订单号C6,书号C4,数量N4.0,单价N7.2)
请编写程序:对“重庆大学出版社”和“高等教育出版社”的图书统一调整单价,均上涨2%,调价结果保存到订单文件中,调价前以上两出版社的订单数据存放在DDTEMP.DBF数据表中,该表结构与DD.DBF相同。
4、某生产企业的库存与销售管理涉及以下三个关联数据表:
① 库存表STOCK.DBF( 商品代码/C/6;库存量/N/10,2;警戒线/N/10)
② 当月销售明细表SALE.DBF(商品代码/C/6;销售数量/N/10,2;日期/D/8)
③ 商品表WARE.DBF(商品代码/C/6;商品名称/C/20;型号/C/20;单价/N/8,2)
以上三表遵循如下所示关联(外码为商品代码):
STOCK -> WARE
SALE ->WARE
SALE ->STOCK
请按下列要求编写相应的程序文件:
(1)利用关联命令,建立三表之间的实际关联。
(2)编写一个销售程序模块,要求输入商品代码,当查询到该代码后,显示该商品名称、型号和单价;再输入销售数量,检测该商品库存量,如果输入的销售数量大于库存量,报告溢出;如果输入的销售量导致库存低于警戒线,发出警报。
5、在计算机等级考试为数据库DJKS.DBF,包括:考号、姓名、性别、年龄和单位等字段;成绩数据库CJ.DBF,包括:考号、考场编号、笔试成绩和上机成绩等字段。
请考生编写程序PROG1.PRG,其功能是把两数据库进行物理连接,只取其考号、单位、笔试成绩和上机成绩共四个字段。然后在生成的连接数据库中按单位对笔试和上机成绩进行分类汇总,存入数据库QAZ.DBF文件中。
6、设有CLDM.DBF(材料代码)表文件,其中包含CLDM(材料代码)和CLMC(材料名称)两个字段,以及CLFP.DBF(材料发票)表文件,其中包含CLDM(材料代码)等字段。
请考生编写程序PROG1.PRG,通过CLDM.DBF文件列出CLFP.DBF文件中所有材料代码对应的材料名称,并将结果存储到MINGCH.DBF文件中,该文件只有一个字段CLMC C(12)。
要求:在结果中去掉重复记录,并按升序排序。
提示:可以建立临时表文件。
7、已有三个表:(1)借阅表:JY.DBF,包括图书编号、借书证号、借书日期和借出天数等字段(2)读者表:DZH.DBF,包括借书证号、姓名、停借否等字段 (3)停借表:TJ.DBF,包括借书证号、姓名等字段。
请考生编写程序PROG.PRG,其功能是整理图书借出情况;首先在借阅表中用当前日期减去借书日期得出借出天数,然后进行判定处理,凡借书超过60天(不含60天)者,就把读者数据库中的停借否字段置为逻辑真,并在停借表中产生一条记录。(注意:假定当前日期为2007年6月16日)
8、有营业员数据表文件夹YYY.DBF和日销售数据表文件RXS.DBF
*RXS.DBF
营业员代码 品名 数量 单价 营业额
101 电视 3 1230.40 0000.00
102 电话 4 223.00 0000.00
101 电扇 5 334.00 0000.00
103 电话 3 223.00 0000.00
102 电视 1 1230.4 0000.00
编程要求:
(1)计算RXS.DBF中的营业额字段的值,注:营业额=数量*单价
(2)根据输入的营业员代码查询某个营业员的全天营业额,按如下格式化显示:
代码:101
姓名:天涯 性别:男
品名 营业额
电视 3691.20
电扇 1670.00
营业额:5361.20
参考答案:
一、用SQL语句完成下列题目中的内容:
1、UPDATE 课程表 SET 学时=学时+10 WHERE 课程名=’数据结构’
2、SELECT * FROM 教师表
3、WHERE 姓名 LIKE,_红%”
4、HAVING COUNT(*)>2
5、SELECT 入学总分 FROM 学生表 WHERE 姓名=‘王力’
6、SELECT XM,SD FROM STUD WHERE SD=”CS” AND SA<20
7、IN(‘C120’,‘C140’,‘C150’,‘C160’)
8、MAX(工资)
二、用SQL语句完成下列综合试题:
1—5 BACAC 6—7 AD
三、完成下列各题的程序设计:
1、(1)VFP数据表操作命令
USE JY
REPLACE ALL 金额 WITH 交易数量*股价
SQL语句:
UPDATE JY SET 金额 = 交易数量*股价
(2)VFP数据表操作命令
SELECT 1
USE GP
INDEX ON 股票代码 TAG DM
SELECT 2
USE JY
SET RELATION TO 股票代码 INTO GP
LIST GP.股票名称,交易数量,股价,金额 FOR 交易类型 OFF
SQL语句:
SELECT 股票名称,交易数量,股价,金额 FROM GP,JY ;
WHERE GP.股票代码=JY.股票代码 AND 交易类型
(3)VFP数据表操作命令
USE JY
INDEX ON 交易类型 TAG LX
TOTAL ON 交易类型 TO HZ
USE HZ
LIST 交易类型,交易数量,金额 OFF
SQL语句:
SELECT 交易类型,SUM(交易数量),SUM(金额) ;
FROM JY GROUP BY 交易类型
(4)VFP数据表操作命令
USE JY
DELETE FOR NOT 交易类型
SQL语句:
DELETE FROM JY WHERE NOT 交易类型
&&,NOT 交易类型”,表示交易类型为假(,F.),即没有发生交易
2、(1)VFP数据表操作命令:
USE CJ
REPLACE ALL合格否 WITH,T,FOR 笔试>=60 AND (上机=“及格” OR上机=“优”)
SQL语句:
UPDATE CJ SET 合格否=.T,WHERE笔试>=60 AND (上机=“及格” OR上机=“优”)
(2)VFP数据表操作命令:
SELECT 1
USE XS
INDEX ON 考号 TAG KH
SELECT 2
USE CJ
SET RELATION TO 考号 INTO XS
LIST 考号,XS.姓名,笔试,上机 FOR合格否=.T.
SQL语句:
SELECT XS.考号,姓名,笔试,上机 FROM XS,CJ ;
WHERE XS.考号=CJ.考号 AND 合格否=.T.
(3)VFP数据表操作命令:
USE CJ
DELETE FOR 上机=“缺考”
SQL语句:
DELETE FROM CJ WHERE上机=“缺考”
3、VFP数据表操作命令:
SELECT 2
USE SJ
INDEX ON 书号 TAG 书号
SELECT 1
USE DD
SET RELATION TO 书号 INTO B
COPY TO DDTEMP FOR B.出版社名称=’重庆大学出版社’ OR B.出版社名称=’高等教育出版社’
REPLACE 单价 WITH 单价+单价*0.02 FOR B.出版社名称=’重庆大学出版社’ OR B.出版社名称=’高等教育出版社’
CLOSE DATA
4、(1)SET TALK OFF
SELECT 1
USE STOCK
INDEX ON 商品代码 TAG SPDM1
SELECT 2
USE WARE
INDEX ON商品代码TAG SPDM2
SELECT 3
USE SALE
INDEX ON商品代码TAG SPDM3
SET RELATION TO商品代码INTO A
SET RELATION TO商品代码TO B ADDITIVE
(2)SELECT 2
ACCEPT,请输入商品代码:,TO DM
LOCATE FOR 商品代码=DM
IF FOUND()
DISPLAY 商品名称,型号,单价
ENDIF
SELECT 1
INPUT ‘请输入销售数量,’ TO SL
LOCATE FOR 商品代码=DM
IF SL>库存量
’数据溢出’
ENDIF
SELECT 3
SUM 销售数量 FOR 商品代码=DM TO A
SELECT 1
IF 库存量-(A+SL)<警戒线
’警报,销售数量导致库存低于警戒线’
ENDIF
CLOSE ALL
5、SET TALK OFF
CLEAR
CLOSE DATABASE
SELECT 1
USE DJKS
INDEX ON 考号 TAG DJKS
SELECT 2
USE CJ
SET RELATION TO 考号 INTO A
COPY TO CJ1 FIELDS 考号,A->单价,笔试成绩,上机成绩
USE CJ1
INDEX ON 单位 TO CJ1
TOTAL ON 单位 FIELDS 笔试成绩,上机成绩 TO QAZ
USE QAZ
LIST
CLOSE DATABASE
SET TALK OFF
6,SET TALK OFF
SET ECHO OFF
SET SAFE OFF
SELECT 2
USE CLDM
COPY FIELDS CLMC TO TMP STRU
SELECT 3
USE TEMP
ZAP
SELECT 1
USE CLFP
SELECT 2
GO TOP
DO WHILE !EOF()
SELECT 1
LOCATE FOR CLDM=B->CLDM
IF FOUND()
SELECT 3
APPEND BLANK
REPLACE CLMC WITH B->CLMC
ENDIF
SELECT 2
SKIP
ENDDO
SELECT 3
SORT ON CLMC TO MINGCH
7,SET TALK OFF
SET CENTURY ON
CLEAR
CLOSE DATABASE
SELECT 3
USE TJ
ZAP
SELECT 2
USE DZH
INDEX ON 借书证号 TO DZH
SELECT 1
USE JY
DO WHILE,NOT.EOF()
IF CTOD(“06/16/2007”)-借书日期>60
SELECT 2
SEEK A->借书证号
IF,NOT.EOF()
REPLACE 停借否 WITH,T.
SELECT 3
APPEND BLANK
REPLACE 借书证号 WITH B->借书证号,姓名 WITH B->姓名
ENDIF
ENDIF
SELECT 1
SKIP
ENDDO
SELECT 3
LIST
CLEAR ALL
SET TALK ON
8、VFP数据表操作命令:
CLEAR
SELECT 1
USE RXS
REPL ALL 营业额 WITH 数量*单价
SELECT 2
USE YYY
INDEX ON 营业员代码 TAG DM
SELECT RXS
SET RELATION TO营业员代码 INTO YYY
ACCEPT ‘输入营业员代码:’ TO DM
’代码:‘+DM
LOCATE FOR营业员代码=DM
’姓名:’+YYY.姓名+,性别:”+YYY.性别
LIST 品名,营业额 FOR营业员代码=DM OFF
*SUM 营业额 TO X1 FOR营业员代码=DM
*?’ 营业额:’,X1
CLOSE ALL
RETURN
SQL语句:
ACCEPT ‘输入营业员代码:’ TO DM
UPDATE RXS SET营业额 = 数量*单价
SELECT 姓名,性别,品名,营业额 FROM RXS,YYY ;
WHERE RXS.营业员代码=YYY.营业员代码 AND YYY.营业员代码=DM
第七部分 表单基础知识一、单项选择题
1、现实世界中的每一个事物都是一个对象,任何对象都有自己的属性和方法,对属性的正确描述是:
A.属性只是对象所具有的内部特征
B.属性就是对象所具有的固有特征,一般用各种类型的数据来表示
C.属性只是对象所具有的外部特征
D.属性就是对象所具有的固有方法
2、下面关于“类”的描述,错误的是:
A.一个类包含了相似的有关对象的特征和行为方法
B.类只是实例对象的抽象
C.类并不实行任何行为操作,它仅仅表明该怎样做
D.类可以按所定义的属性,事件和方法进行实际的行为操作
3、下面关于属性、方法和事件的叙述中,错误的是:
A.属性用于描述对象的状态,方法用于表示对象的行为
B.基于同一个类产生的两个对象可以分别设置自己的属性值
C.事件代码也可以像方法一样被显示调用
D.在新建一个表单时,可以添加新的属性、方法和事件
4、对于创建新类,Visual FoxPro提供的工具有:
A.类设计器和报表设计器 B.类设计器和表单设计器
C.类设计器和查询设计器 D.类设计器
5、假定一个表单里有一个文本框Text1和一个命令按钮组CommandGroup1,命令按钮组是一个容器对象,其中包含Command1和Command2两个命令按钮,如果要在Command1命令按钮的某个方法中访问文本框的Value属性值,下面正确的是式子:
A.This.Thisform.Text1.Value B.This.Parent.Parent.Text1.Value
C.Parent.Parent.Text1.value D.This.Parent.Text1.Value
6、假定表单中包含一个按钮,那么在运行表单时,下面有关事件引发次序的陈述中,正确的是:
A.先执行命令按钮的Init事件,然后执行表单的Init事件,最后执行表单的Load事
B.先执行表单的Init事件,然后执行命令按钮的Init事件,最后执行表单的Load事件
C.先执行表单的Load事件,然后执行表单的Init事件,最后执行命令按钮的Init事件
D.先执行表单的Load事件,然后执行命令按钮Init事件,最后执行表单的Init事件
7、在表单Myform的一个控件的事件或方法代码中,改变该表单的背景色为绿色的正确命令是:
A.Myform.Backcolor=RGB(0,255,0)
B.This.Parent.Backcolor=RGB(0,255,0)
C.This.Thisform.Backcolor=RGB(0,255,0)
D.This.Backcolor=RGB(0,255,0)
8、下面对于控件类的各种描述中,错误的是:
A.控件类用于进行一种或多种相关的控制
B.可以对控件类对象中的组件单独进行修改或操作
C.控件类一般作为容器类中的控件
D.控件类的封装性比容器类更加严密
9、在Visual FoxPro系统中,用户不能自定义:
A.对象的属性 B.对象的方法
C.对象的事件 D.对象所基于的类
10、This是对( )的引用。
A.当前对象 B.当前表单 C.任意对象 D.任意表单
11、一只白色的足球被踢进球门,则白色、足球、踢、进球门分别是:
A.属性、对象、方法、事件 B.属性、对象、事件、方法
C.对象、属性、方法、事件 D.对象、属性、事件、方法
12、如果要引用一个控件所在的直接容器对象,则可以使用( )关键字。
A.THIS B.THISFORM C.PARENT D.都可以
13、每个对象都可以对一个被称为事件的动作进行识别和响应。下面对于事件的描述中,错误的是:
A.事件是一种预先定义好的特定的动作,由用户或系统激活
B.Visual FoxPro 基类的事件集合是由系统预先定义好的,是惟一的
C.Visual FoxPro 基类的事件也可以由用户创建
D.可以激活事件的用户动作有按键、单击鼠标、移动鼠标等
14、当了解了对象可能发生的各种事件以后,最重要的就是如何编写事件代码,以下编写事件代码的方法中不正确的是:
A.为对象的某个事件编写代码就是要编写一个扩展名为.PRG的程序,其中文件名就是事件名
B.为对象的某个事件编写代码就是要将代码写入该对象的该事件过程中
C.可以由定义了该事件过程的类中继承
D.在属性对话框中选择对象的事件并双击,在事件窗口中输入相应的事件代码
15、在下面关于面向对象数据库的叙述中,错误的是:
A.每个对象在系统中都有惟一的对象标识
B.事件作用于对象,对象识别事件并做出相应反映
C.一个子类能够继承所以父类的属性和方法
D.一个父类包括其所有子类的属性和方法
16、在面向对象的编程语言中,关于事件的描述不正确的是:
A.事件是有系统预先定义的
B.事件作用于对象,对象识别事件并做出相应的反映
C.事件只能由系统引发,而不能由用户引发
D.事件代码既能在事件引发时执行,也可以像方法一样被显示调用
17、对于类和对象的层次关系,叙述正确的是:
A.类的层次是指包容与被包容的关系
B.对象的层次概念与类的层次概念相同
C.类的层次指的是继承与被继承的关系
D.对象的层次指的是继承与被继承的关系
18、一个子类的成员是:
A.从其父类继承的成员,包括属性、方法
B.由子类自己定义的成员,包括属性、方法
C.从其父类继承的成员和由子类自己定义的成员,包括属性,方法
D.从其父类继承的成员、由子类自己定义的成员以及和别的子类共享的成员
19、下列关于属性设置的说法中有错误的是:
A.一般来说,要为属性设置一个字符型值,可以在设置框中直接输入,不需要加定界符
B.要通过表达式为属性赋值,可以在设置框中先输入等号在输入表达式,或者单击设置框左侧的函数按钮打开表达式生成器,用它来给属性生成一个表达式
C.对那些既可接收数值型数据又可接收字符型数据的属性来说,如果在设置框中直接输入234,系统会把它作为字符串来对待
D.在属性值中可以同时选择多个对象,这时“属性”窗口显示这些对象共有的属性,用户对属性的设置也将针对所有被选定的对象
20、下列关于类与对象的说法中错误的是:
A.对象与类是面向对象方法的两个最基本的概念
B.方法是描述对象行为的过程,是对某个对象接受了某个消息后所采取的一系列操作的描述
C.类的定义中,可以为某个属性指定一个值,这个值将会作为该类生成的每个对象在该属性的默认值
D.方法在对象中定义,但是执行方法的主体是对象
21、下面关于命令“DO FORM XX NAME YY LINKED”的陈述中,正确的是:
A.产生表单对象引用变量XX,在释放变量 XX时自动关闭表单
B.产生表单对象引用变量XX,在释放变量 XX时并不关闭表单
C.产生表单对象引用变量YY,在释放变量 YY时自动关闭表单
D.产生表单对象引用变量YY,在释放变量 YY时并不关闭表单
22、某表单FormA上有一个命令按钮组CommandGroup1,命令按钮组中有4个命令按钮:CmdTOP、CmdPrior、Cmdnext、CmdLast。若要求按下CmdLast按钮后Enable属性置为.F.,则在CmdLast按钮的Click事件中应加入( )命令。
A.This.enable=.F,B.This.Parent.CmdNext.enable=.F.
C.This.CmdNext.Enable=.F,D.Thisform.CmdNext.Enable=.F.
23、在Visual FoxPro 系统环境下,运行表单的命令为:
A.DO FORM 表单名 B.DO表单
C.REPORT FORM 表单名 D.只能在项目管理器中运行
24、关于Visual FoxPro表单的描述中正确的是:
A.操作表单可以通过属性、事件和方法来完成
B.Visual FoxPro提供了AddItem、RemoveItem和Clear等方法对列表框进行维护
C.表单属性既可以在设计时通过对话框设置,也可以在运行时通过语句来设置
D.以上描述均正确
25、设计表单时,可以利用( )想表单中添加控件。
A.表单设计器工具栏 B.布局工具栏
C.调色板工具栏 D.表单控件工具栏
26、在表单文件中,Init是指( )时触发的基本事件。
A.当创建表单 B.当从内存中释放对象
C.当表单装入内存 D.当用户双击对象
27、在表单运行中,当结果发生变化时,应刷新表单,刷新表单用( )命令。
A.RELEASE B.DELETE C.REFRESH D.PACK
28、在表单中,“Caption”对象的( )属性。
A.标题 B.名称 C.背景透明 D.字体尺寸
29、在创建表单时,下列关于选项按钮组的说法中正确的是:
A.选项按钮的个数由Value属性值决定
B.选项按钮的个数由Name属性值决定
C.选项按钮的个数由ButtonCount属性值决定
D.选项按钮的个数由Caption属性值决定
30、下面关于数据环境和数据环境中两个表之间关系的陈述中,正确的是:
A.数据环境是对象,关系不是对象
B.数据环境不是对象,关系是对象
C.数据环境是对象,关系是数据环境中的对象
D.数据环境和关系是数据环境中的对象
31、在表单设计器环境下,要选定表单中某选项组里的某个选项按钮时,可以:
A.单击选项按钮
B.双击选项按钮
C.先单击选项组,并选择“编辑”命令,然后再单击选项按钮
D.以上B和C都可以
32、表单或表单集的数据环境可以看成一种 Visual FoxPro:
A.对象 B.表 C.视图 D.设计器
33、向表单添加一个字符型字段绑定文本框时,以下操作中 不正确的是:
A.建立一个文本框,设置其Controlsource属性为该字段
B.从该表单的数据环境中将该字段拖入到表单中
C.双击表单,在表单的Init事件代码中设置文本框的Controlsource属性为该字段
D.在表单的数据环境中复制该字段,然后在该表单中粘贴
34、一个表单中的不同控件的属性必须设置为不同的是:
A.Forecolor B.Name C.Visible D.Enabled
35、表单有自己的属性、事件和:
A.方法 B.图形 C.容器 D.形状
36、控件有自己的属性、事件和:
A.图形 B.方法 C.容器 D.形状
37、以下属于容器类控件的是:
A.Text B.Form C.Lable D.CommandButton
38、计时器控件的主要特征是:
A.Enabled B.Caption C.Interval D.Value
39、决定微调控件最大值的属性是:
A.Keyboardhighvalue B.Value
C.Keyboardlowvalue D.Interval
40、不可作为文本框控件数据来源的是:
A.数值型字段 B.内存变量
C.字符型字段 D.备注型字段
41、面向对象程序设计中程序运行的最基本实体是:
A.对象 B.类 C.方法 D.函数
42、下面对于控件类的各种描述中,错误的是:
A.控件类用于进行一种或多种相关的控制
B.可以对控件类对象中的组件单独进行修改或操作
C.控件类一般作为容器类中的控件
D.控件类的封装性比容器类更加严密
43、形状控件的Curvature属性值为99时,表示它是:
A.正方形或长方形 B.直线 C.椭圆或圆 D.圆角矩形
44、以下关于列表框和组合框的叙述中,正确的是:
A.列表框和组合框都不能设置成多重选择
B.列表框和组合框都可以设置成多重选择
C.列表框可以设置成多重选择,而组合框不能设置成多重选择
D.组合框可以设置成多重选择,而列表框不能设置成多重选择
45、在表单运行中,如复选框变为不可用,则其Value值为:
A.1 B.0 C.2或NULL D.不确定
46、在表单控件中,不能作为接收输入数据用,只用于显示数据的控件为:
A.标签 B.复选框 C.列表框 D.文本框
47、标签控件的主要属性是:
A.位置 B.Caption C.大小 D.Width
48、要想定义标签控件的Caption 属性值的字体大小,就要定义标签的:
A.FontSize属性 B.Caption属性
C.Heigh属性 D.AutoSize属性
49、下面的( )控件在运行时不可见,用于后台运行。
A.表格 B.形状 C.计时器 D.列表框
50、以下几组控件中,均可直接添加到表单中的是:
A.命令按钮组、选项按钮、文本框
B.页面、页框、表格
C.命令按钮、选项按钮组、列表框
D.页面、选项按钮组、组合框
51、在表单控件中,既可作为接收输入数据用又可作为编辑现有数据用的控件为:
A.标签 B.复选框 C.列表框 D.文本框
52、( )不是表单中使用的设计工具。
A.属性窗口 B.控件工具栏 C.表单控制器 D.数据环境设计器
53、下列中的( )不是表单创建中的步骤
A.添加控件 B.创建数据表 C.设置属性 D.配制方法程序
54、下列中的( )不是表单中的窗口类控件。
A.表格 B.页框 C.文本框 D.表单集
55、要确定单选按钮的个数,应在下列( )属性中设置
A.PageCount B.Columncount C.controlCount D.ButtonCount
56、表格中的列控件默认是,
A.文本框 B,编辑框 C.复选框 D.列表框
57、下面的( )控件在运行时不可见,用于后台运行。
A.表格 B.形状 C.计时器 D.列表框
58、运行表单程序后,创建对象时会发生的事件是:
A.LostFocus B.InteractiveChange C.Init D.Click
59、在对象方法的引用中,正确的表示为:
A.Thisform.Lalel1 B.Thisform.Text1.Value
C.Thisform.Release D.Thisform.Command1.Caption=”确定”
60、在表单程序运行期间,控件对象(如:命令按钮)获得焦点时,引发的事件是:
A.gotfocus B.lostfocus C.destory D.click
61、如果要在运行期间改变表单的标题显示为:“用户登录”,需要执行事件代码( )
A.THHISFORM.NAME =“用户登录” B.THHISFORM.CAPTION =“用户登录”
C.THHISFORM.TEXT =“用户登录” D.THHISFORM.VALUE =“用户登录”
62、用当前窗体的LABEL1控件显示系统时间的语句是()
A.Thisform.Lable1.Caption=TIME()B.Thisform.Lable1.Caption=Date()
C.Thisform.Lable1.Values=TIME()D.Thisform.Lable1.Valuse=Date()
二、多项选择题
1、Visual FoxPro中有关可视化的操作界面、面向对象的程序设计方法要涉及的概念有:
A.容器控件 B.属性 C.触发器 D.非结构化 E.类库
2、在VFP的可视化程序设计中,控件Commandbutton的主要属性是:
A.Caption B.Click C.Enabled D.Move E.Picture
3、下列叙述中正确的是:
A.事件既可以由系统引发,也可以由用户激发
B.事件代码能在事件引发时执行
C.事件不能自定义,由VFP事先设定
D.在容器对象的嵌套层次里,事件的处理遵循独立性原则,即每个对象独立识别及处理属于自己的事件
E.事件代码不能由程序员修改
4、对象的引用有下面( )种方式。
A.自由引用 B.绝对引用 C.相对引用 D.对象引用
5、类是对一种对象的归纳和抽象,它具有( )特征。
A.继承性 B.抽象性 C.封闭性 D.多态性
6、以下几组控件中,均可直接添加到表单中的是:
A.命令按钮 B.页框 C.列表框 D.选项按钮组
7、Visual FoxPro中的类一般可分为两种类型:
A.容器类 B.控件类。 C.集成类 D.基础类
8、在Visual FoxPro系统中,用户能够自定义( )
A.对象的属性 B.对象的方法 C.对象的事件 D.对象所基于的类
9、类具有( )的特征,这就大大加强了代码的可用性。
A.封装 B.层次 C.继承 D.传递
10、下列关于类与对象的说法中正确的有:
A.对象与类是面向对象方法的两个最基本的概念
B.方法是描述对象行为的过程,是对某个对象接受了某个消息后所采取的一系列操作的描述
C.类的定义中,可以为某个属性指定一个值,这个值将会作为该类生成的每个对象在该属性的默认值
D.方法在对象中定义,但是执行方法的主体是对象三、判断题
1、事件发生时,若没有与之相关联的程序(或称事件代码),则不会发生任何操作。
2、控件对象CLICK事件是用鼠标单击对象时引发。
3、对象的方法就是对象可以执行的动作或它的行为
4、当表单运行时,能自动打开数据环境中的表。
5、一个子类的成员是由子类自己定义的成员,包括属性、方法四、分析题
1、有一密码验证程序,其设计界面如下图1,运行界面如下图2。基本功能是在2个文本框中输入两次密码,2个密码完全相同,验证通过(释放表单);否则,弹出警告窗口,报告“密码值有误,重新输入!”,表单不释放。以下为一些控件的属性设置和事件代码,请填空完成。

Text1.PasswordChar= ①
Command1.Click Event
IF ②
=Messagebox(“密码值有误,重新输入!“)
RETURN
ENDIF
ThisForm.Release
2、下面是在数据表中按学号查找某学生资料的程序。
①,请输入文件名:”TO SFM
USE &SFM
DO WHILE ②
ACCEPT,请输入学号:” TO XH
LOCATE FOR 学号=XH
IF FOUND()
DISP
ELSE
?,查无此人”
ENDIF
WAIT,继续查找吗?(Y/N)” TO YN
IF UPPER(YN)=“Y”
_ ③
ELSE
EXIT
ENDIF
ENDDO
USE
RETURN
设计如图学生情况界面,实现记录定位的“首记录”、“上一条”、“下一条”、“尾记录”为同一个按钮组,现要求对该按钮组编程。
DO CASE
CASE THIS.VALUE=1
GO TOP
CASE THIS.VALUE=2
SKIP -1
IF BOF()
GO TOP
ENDIF
CASE THIS.VALUE=3

IF EOF()
GO BOTTOM
ENDIF
CASE THIS.VALUE= 4

ENDCASE

4、有一个表单程序的功能是输入一个数:显示它的八折值,如图所示。
 
左边的图是输入数据的状态:右边的图是计算后的显示状态。该表单的设计思路是添加名称为Label1的标签和名称为Text1的文本框控件,Label1用于显示提示信息,Ttext1存放输入数据、计算结果信息。利用文本框的Valid事件触发,编写计算程序。因为文本框的值为字符型,用变量x存放折算数。以下是对应的Valid事件代码,请填空完成。
X= ①
ThisForm.Text1.Value=STR(x)
ThisForm,② =’这个数的八折是:’
5、学生档案管理系统,程序运行时,首先启动口令校对表单STARTUP.SCX,如图2所示。其口令输入框名为“Text1”,?“确定”和“取消”按钮名为“cmdok”和“cmdcancel”。?
(1)现对“确定”按钮编程,若输入的口令为“spring”,则启动main.scx,然后关闭startup.scx;若错误,则用消息框显示“口令错误!”,对该按钮的Click事件编写代码为:
IfThisform,①,Value?="spring"
DoFORM? startup
Release.Thisform
Else
= ② ("口令错误!",294,"口令验证")
Endif
用程序。对该按钮的Click事件编写代码为:
Thisform,③
6、编写一个动态字幕的表单,若点击开始按钮,欢迎字幕从左到右滚动显示,开始按钮变为“s 暂停’,请写出开始按钮的事件代码:
参考答案:
一、单项选择题:
1—5 BDDBB 6—10 DBBCA 11—15 BCCAD 16—20 CCBCD
21—25 CBADD 26—30 ACACC 31—35 CADBA 36—40 BDCAD
41—45 ABCCC 46—50 ABACC 51—55 DCBCD 56—61 ACCCA
61—62 BA
二、多项选择题:
1.ABE 2.ABCE 3.BC 4.BC 5.ACD 6.ACD 7.AB 8.ABC
9.ABC 10.ABC
三、判断题:
1—5 √√√√√
四、分析题:
1、① * ② ThisForm.Text1.Values=TthisForm.Text2.Values
2、① ACCEPT ②,T,③ CONTINUE
3、① SKIP ② GO BOTTOM ③ ThisForm.Refresh
4、① Val(ThisForm.Ttext1.Value)*0.8 ② Label1.Caption
5、① Text1 ② Messagebox ③ Release
6、IF This.Caption="\<暂停"
This.Caption="\<S 继续"
ThisForm.Container1.Timer1.Enabled=.F.
ELSE
This.Caption="\<暂停"
ThisForm.Container1.TImer1.Enabled=.T.
ENDIF
(二)综合测试练习第一套 理论复习题一、单项选择题:(每空1分,共计30*1=30分)
1、下列4个选项中,不属于基本关系运算的是( )
A.联接 B.投影 C.选择 D.排序
2、在Visual FoxPro中,打开数据库的命令是( )
A.PEN DATABASE <数据库名> B.<数据库名>
C.USE DATABASE <数据库名> D.OPEN <数据库名>
3、数据库系统的操作对象是( )
A.编译系统 B.数据库 C.操作系统 D.数据库管理系统
4、如果一个班只能有一位班长,而且这位班长不能同时担任其他班的班长,班级和班长两个实体之间的关系属于( ):
A.一对一联系 B.一对二联系 C.多对多联系 D.一对多联系
5、Visual Foxpro6.0是一个( )。
A.8位数据管理系统 B.16位数据管理系统
C.32位数据管理系统 D.64位数据管理系统
6、在“选项”对话框的“文件位置”选项卡中可以设置( )。
A.表单的默认大小 B.默认目录
C.日期和时间显示格式 D.程序代码的颜色
7、在关系数据库中,为了简明的表达数据间的关系,采用的形式是( )
A.数组 B.层次 C.二维表格 D.矩形
8、“项目管理器”的“数据”选项卡用于显示和管理( )。
A.数据库、自由表和查询 B.数据库、视图和查询
C.数据库、自由表、查询和视图 D.数据库、表单和查询
9、要显示数据表中平均分超过90分或者不及格的全部女生记录,应当使用命令( )
A.LIST FOR 平均分>=90 OR (性别=‘女‘OR 平均分<=60)
B.LIST FOR 平均分>=90 AND 性别=‘女‘OR 平均分<60
C.LIST FOR性别=‘女AND平均分>90 AND 平均分<60)
D.LIST FOR 性别=‘女AND (平均分>90 OR 平均分<60)
10、不是C型表达式的是( )
A.’5+5+1’ B.VAL(‘5’+”5”) C,[5]-,5” D.[5]+’5’
11、请问下列哪一组命令语句是错误的:( )
A.OPEN DATDBASE CAMPUS
USE STUDENT ORDER TAG 学生姓名
SEEK,波波”
B.OPEN DATDBASE CAMPUS
USE STUDENT
SEEK,波波”
C.OPEN DATDBASE CAMPUS
USE STUDENT
SET ORDER TO TAG 学生姓名
SEEK,波波”
D.OPEN DATDBASE CAMPUS
USE STUDENT
SEEK,波波” ORDER TAG 学生姓名
12、设C="04/20/04",命令?TYPE("&C")的输出值是( )
A.04/20/04 B,C C.N D.D
13、查询设计器和视图设计器的主要不同表现在于( )
A.查询设计器有“更新条件”选项卡,没有“查询去向”选项
B.查询设计器没有“更新条件”选项卡,有“查询去向”选项
C.视图设计器没有“更新条件”选项卡,有“查询去向”选项
D.视图设计器有“更新条件”选项卡,也有“查询去向”选项
14、VISUAL FOXPRO 6.0 中的DO CASE-ENDCADE 语句属于( )
A.循环结构 B.选择结构 C.循环结构 D.模块结构
15、在VISUAL FOXPRO6.0处于创建或编辑自由表、程序等文件时,系统处于“全屏幕编辑状态”,欲存盘退出,正确的操作是( )
A.按组合键【CTRL+W】 B.按组合键【CTRL+U】
C.按组合键【CTRL+END】 D.按回车键
16、某数值型宽度是6位,小数位数为2位,则该字段所能存放的最小数值是( )
A.0 B.-999.99 C.-99.99 D.-9999.99
17、查询的默认输出方向是( )
A.数据表 B.浏览 C.图形 D.报表
18、连续执行以下命令之后,最后一条命令的输出的结果是( )
SET EXACT OFF
X=‘D’
?IIF(‘D’=X,‘ABC□□’-X,‘ABC□□’+X)
A.D B.ABC C.ABCD□□ D.ABC□□D
19、假如已执行了命令M=[28+2],再执行命令?M,屏幕将显示( )
A.30 B.28+2 C.[28+2] D.30.00
20、在一个数据表中,有一个或若干个字段,它们的值可以惟一的标识一条记录,这样的字段称为( )
A.主题字 B.标题 C.关键字 D.记录名
21、条件函数?IIF(LEN(SPACE(3))>3,1,-1)的值为( )
A..T,B..F,C.1 D.-1
22、在下面的VISUAL FOXPRO表达式中,运算结果是逻辑真的是( )
A,EMPTY(.NULL.) B.LIKE("ABCD","AB")
C.AT("A","123ABC") D.EMPTY(SPACE(2))
23、函数MOD(-4*4,-10)的结果是( )
A.-6 B.-4 C.4 D.6
24、数据库表与自由表比较,( )不是数据库表的特点。
A.数据库表可以规定字段组规则和记录组规则,而自由表不能
B.数据库表支持主关键字、参照完整性和表之间的联系,而自由表不能
C.数据库表支持INSERT、UPDATE和DELETE文件的触发器,而自由表不能
D.数据库表可以建立表间临时联系,让表记录指针和主要记录指针移动,而自由表不能
25、在VISUAL FOXPRO中,将JS.DBF改名为JS1.DBF,应使用命令( )
A.REN JS.DBF TO JS1.DBF B.RENAME JS TO JS1
C.RENAME JS.DBF TO JS1.DBF D.USE RENAME JS.DBF TO JS1.DBF
26、在VISUAL FOXPRO中利用( )保证实体完整性。
A.候选索引 B.主索引、候选索引、普通索引
C.主索引或候选索引 D.主索引、候选索引和唯一索引
27、表文件共有8条记录,当前记录号是5,要显示最后4条记录,在下列命令中,错误命令是()
A.LIST NEXT 4 B.LIST REST
C.LIST SKIP 4 D.LIST FOR RECNO( )>4
28、在参照完整性生成器中,不能设置()
A.更新规则 B.删除规则 C.插入规则 D.查询规则
29、用“INDEX ON表达式TO索引文件名”命令建立的索引文件扩展名为( )
A..IDX B..CDX C..FPT D..TAG
30、在对象方法的引用中,正确的表示为( )
A.THISFORM.LALEL1 B.THISFORM.TEXT1.VALUE
C.THISFORM.RELEASE D.THISFORM.COMMAND1.CAPTION=’确定’
二、判断题(如正确,选择√;如错误,选择ⅹ。每小题1分,共10分)
内存变量是独立于数据库而存在的,字段变量是随数据库(表)文件的建立而建立的。
在DO CASE-ENDCASE中,多个条件同时成立时,则这些分支都要执行。
SQL命令:CREATE TABLE 学生表(姓名 C(20),性别 L,年级 C(4),专业班级 C(20))可以在当前数据库中创建一个名为“学生表“的数据表。
在创建对象时触发INIT事件.
SELECT * FROM WAGE WHERE SUBSTR(姓名,2)=”张” 查询所有姓张的人的信息字段空值(NULL)与空字符串、数值0具有不同的含义。
某数据表“性别”字段(C,2)的有效性规则可以设置为:性别=‘男’AND 性别=‘女’
自由表中不能创建的索引类型为主索引如果用共享方式打开表,修改记录不能追加新记录用ZAP命令删除的记录将无法恢复。
三、填空题(每空2分,共20分)
1、第(1)~()题使用如表1,表2所列的“教师”表和“学院”表表1“学院”表系号
系名
01
英语
02
会计
03
工商管理
表2“教师”表职工号
姓名
职称
年龄
工资
系号
2101
刘星
副教授
35
2000
01
2102
王林军
教授
40
3000
02
2103
张新明
讲师
25
1500
01
2104
钱心平
讲师
30
1500
03
2105
孙蓉
教授
34
2000
01
2106
李玉明
教授
52
2300
02
2107
刘名
教授
43
1980
03
(1)、使用SQL语句,将一条新的记录插入“学院”表。
INSERT 1 学院(系号,系名) 2 (‘04’,’计算机’)
(2)、使用SQL语句求“工商管理”系的所有职工的工资总和
SELECT 3 (工资)
FROM 教师;
WHERE 系号 IN (SELECT 系号
FROM 4 WHERE 系名=‘工商管理’
(3)、使用SQL语句完成如下操作(将所有教授的工资提高5%);
5 教师 SET 工资=工资*1.05 6 职称=‘教授’
2、成绩数据表CJ.DBF中有三个数值型字段:数学、语文、总分,所有记录的数学和语文字段值均已输入。以下程序功能是:求每条记录的总分字段值,并将结果存放在该记录的字段“总分”中,请填空完成。
*****主程序
USE CJ
ZF=0
DO WHILE,NOT.EOF()
DO SUB 7
REPL 总分 WITH ZF
8
ENDDO
USE
*****子程序
PROC SUB
PARAMETERS SX,YW,ZF
ZF=SX+YW
RETURN
3、下面的程序求1+2+3+4+……+100的和
SET TALK OFF
CLEA
S=0
I=1
DO WHILE,T.
IF I<=100
S=S+I
9
ELSE
“1+2+3+4+……+100”,S
10
ENDIF
ENDDO
四、读程序写出运行结果(每小题5分,共20分)
1、有如下学生成绩表score.dbf,共有5条记录
记录号学号 姓名 性别 班级 总分
1?1458 刘萧  女 1班 520
2 ? 1479 张琴 女 2班 495
3 ? 1480 刘军 男 3班 500
4 ? 1500 李君 女 1班  468  ?
5 ? 1503 海天 男 4班  515
写出执行以下程序结果:
USE STUDENT
DO WHILE,T.
IF 性别<>’女’
EXIT
ENDIF
IF 班级=’1班’
DISP 姓名,性别,班级,总分
ENDIF
SKIP
ENDDO
USE
程序运行结果:
2、利用文本框、标签控件和命令按钮控件设计了一表单FORM1.SCX,表单界面及COMMAND1控件的CLICK事件代码如下所示。执行该表单时,当向TEXT1,TEXT2中分别输入字符:16,24后单击COMMAND1,则LABEL2,处显示的内容是什么?
COMMAND1控件的CLICK事件代码:
MA=VAL(THISFORM.TEXT1.VALUE)
MI=VAL(THISFORM.TEXT2.VALUE)
IF MA<MI
TEMP=MI
MI=MA
MA=TEMP
ENDIF
DO WHILE MI<>0
TEMPMIN=MI
MI=MA%MI
MA=TEMPMIN
ENDDO
THISFORM.LABEL2.CAPTION=STR(MA,4)
LABEL2,处显示的内容是:
3、JS.PRG
SET TALK OFF
SET PROC TO JS123
PUBL A,B,C
STORE 1 TO A,B,C
DO JS1
A
DO JS2
B
C
CLOSE PROC
RETURN
结果:程序执行后,显示A,B,C的值分别为:
4、书籍BHSL.DBF库记录如下:
RECORD # 编号 数量
1 A1 10
2 A0 85
3 A2 67
4 A10 50
5 A12 65
其中,“编号”字段为C型,“数量”字段为N型,执行下列程序:
SET TALK OFF
CLEA
USE BHSL
A=数量
DO WHILE,NOT.EOF()
IF A>数量
A=数量
ENDIF
SKIP
ENDDO
?编号,A
五、程序设计题(20分,第1题8分,第2小题12分)
1、编写一个循环结构程序计算6阶乘:
2、某公司销售数据库系统有两个表(1)客户订货表GUEST.DBF,结构为:编号/C,客户名/C,联系电话/C(2)货品清单表WARES.DBF,结构为:编号/C,品名/C,单价/N,数量/N,已发货/L,已付款/L.
请编写一个查询客户未付款货品清单的程序。要求:当输入客户名称时,首先判断有无此客户,若有则显示该库户已发货但未付款货品清单,显示格式如下:
客户已发货未付款货品清单
客户名 货品名 单价 数量
… … … …
参考答案:
一、单项选择
1—5 DABAC 6—10 BCADB 11—15 BCBBA
16—20 CBCBC 21—25 DDADC 26—30 CCDAC
二、判断题
1 对2错3对4 对5 错6对 7错 8 对 9 错 10对。
三、填空题
1、INTO 2.VALUES 3,SUM 4.学院 5,UPDATE 6.WHERE
7,WITH 数学,语文,zf 8,skip 9.I=I+1 10.EXIT
四、读程序写出运行结果
1、姓名 性别 班级 总分
刘萧  女 1班 520?
2、8
3、3,5,1
4、A1 10
五、编写程序
1.CLEA
S=1 (赋值语句2分)
FOR N=1 TO 6
S=S*N (循环语句完整2分)
ENDFOR (阶乘运算3分)
’6阶乘是:’,S (输出结果1分)
RETURN
2、SET TALK OFF
CLEAR
SELECT 1
USE GUEST
INDEX ON 编号 TAG BH
SELECT 2
USE WARES
SET RELA TO 编号 INTO A
ACCEPT ‘请输入客户名称:’TO NAME
LOCA FOR A.客户名=NAME
IF !FOUND()
’没有此客户!’
QUIT
ENDIF
@10,30 SAY ‘客户已发货未付款货品清单’
@11,25 SAY ‘客户名 货品名 单价 数量’
S=SPACE(5)
SCAN FOR 已发货=.T,AND 已付款=.F.
@ROW()+1,25 SAY A.客户名+S+品名+S+STR(单价)+S+STR(数量)
ENDSCAN
第二套 理论复习题
一、单项选择题:(每空1分,共计30*1=30分)
1、要清除VISUAL FOXPRO6.0的交互模式,应执行命令( )。
A.CLEAR B.SET TALK OFF
C.SET ESCAPE ON D.SET SAFE OFF
2、下列各组文件扩展名中不全是VISUAL FOXPRO系统常见的扩展名的是( )。
A..DBF,.FMT,.LBT B..H,.EXE,.AVI
C.,VCT,.VCX,.WIN D..MNT,.SCX,.PFG
3、将已打开的当前数据表的所有记录拷贝(复制)到JR.DBF中的命令是( )
A.COPY TO JR B.COPY FILE TO JR
C.COPY STRU TO JR D.COPY STRU EXTE TO JR
4、下面关于属性、方法和事件的叙述中,错误的是( )
A.属性用于描述对象的状态,方法用于表示对象的行为
B.基于同一类产生的两个对象可以分别设置自己的属性值
C.事件代码也可以像方法一样被显式调用。
D.在新建一个表单时,可以添加新的属性、方法和事件。
5、执行?VAL(’-22.6+2’)命令后,结果是( )
A.-22.60 B.-22.00 C.-21.00 D.-20.60
6、在VISUAL FOXPRO中,下列字符串表示方法中正确的是( )
A.""计算机水平考试"" B.["计算机水平考试"]
C.{"计算机水平考试"} D.[[计算机水平考试]]
7、表达式VAL(SUBSTR("学习",5,1))+LEN("VISUAL FOXPRO")的结果是( )
A.13.00 B.16.00 C.18.00 D.19.00
8、控件有自己的属性、事件和( )
A,图形 B.方法 C.容器 D.形状
9、若想让某个对象暂时失去作用,可以设置( )属性值为.F.。
A.Visible B.Enabled C.Caption D.Autosize
10、如果使用TYPE(MX")函数检测出变量MX的类型是D,给变量赋值的方法可能是()
A.MX=12/05/97 B.MA="12/05/97"
C.MA=CTOD(12/05/97) D.MA=CTOD("12/05/97")
11、清除主窗口屏幕的命令是:( )
A.CLEAR WINDOWS B.CLEAR C.CLEAR SCREEN D.CLEAR ALL
12、下列哪一种索引文件会随着表的打开而自动打开,随着表的关闭而自动关闭:( )
A,结构复合索引文件 B,独立复合索引
C,以上两种均是 D,以上两种均不是
13、查询文件的扩展名为:( )
A..PJX B..DBF C.,FMT D..QPR
14、描述控件文字的粗体、斜体、下划线、删除线样式的属性分别是 ( )
A.FontBold,Fontltalic,FontUnderLine,FontStrikeThru
B.FontUnderLine,Fontltalic,FontBold,FontStrikeThru
C.Fontltalic,FontStrikeThru,FontBold,FontUnderLine
D.FontUnderLine,FontBold,Fontltalic,FontStrikeThru
15、某个数据表未打开任何索引文件,有20条记录,当前记录号是10,执行命令:
LIST NEXT 6
后,所显示的记录号的范围是( )
A.11-15 B.11-16 C.10-15 D.10-14
16、要使用数组S1更新当前数据表的当前记录,应使用的命令是( )
A.SCATTER TO S1 B.DIMENSION S1
C.APPEND FROM S1 D.GATHER FROM S1
17、使用DIMENSION命令定义数组后,各数组元素在没有赋值之前的数据类型是( )
A.未定义 B.数值型 C.字符型 D.逻辑型
18、使用报表向导定义报表时,定义报表布局的选项是( )
A.列数、方向、字段布局 B.列数、行数、字段布局
C.行数、方向、字段布局 D.列数、行数、方向
19、在创建数据表时,将年龄字段值限制在12~40岁之间的这种约束属于( )
A.实体完整性约束 B.域完整性约束
C.参照完整性 D.视图完整性约束
20、为了将表单从内存中释放(清除),可将表单中“退出”命令的CLICK事件代码设置为( )
A.THISFORM.REFRESH B.THISFORM.DELERE
C.THISFORM.RELEASE D.THISFORM.HIDE
21、下列常量不是字符常量的是( )
A.‘STRING’ B.{STRING} C.‘STRING’ D.[STRING]
22、在下面的DO循环中,共要循环( )次
X=15
Y=20
DO WHILE Y>=X
Y=Y-1
ENDDO
A.20 B.15 C.6 D.5
23、函数MOD(-4*4,-10)的结果是( )
A.-6 B.-4 C.4 D.6
24、关于过程调用叙述正确的是( )。
A.当实参的数量少于形参的数量时,多余的形参初值取逻辑“假”
B.当实参的数量多于形参的数量时,多余的实参被忽略
C.实参与形参的数量必须相等
D.A和B都正确
25、已知D=‘04/20/2007’,表达式10+&D的计算结果是( )
A.数值型 B.字符型 C.日期型 D.数据类型不匹配
26、以下关于自由表的叙述中,正确的是(C)
A.全部是用以前版本的FOXPRO建立的表
B.可以用VISUAL FOXPRO建立,但是不能把它添加到数据库中
C.自由表可以添加到数据库中,数据库表也可以从数据库移出成为自由表
D.自由表可以添加到数据库中,但数据库表不可从数据库中移出成为自由表
27、自由表GZ.DBF有姓名/C/8,出生年月/D,基本工资/N/6/2,要建立以“姓名、基本工资“两字段的组合索引,其索引关键字表达式是( )
A.姓名+基本工资 B.,姓名”+“基本工资”
C.“姓名”+基本工资 D.姓名+STR(基本工资,6,2)
28、执行下面命令都生成XSK.DBF文件,其中肯定生成空文件的是( )
A.COPY STRUCTURE TO XSK EXTENDED
B.SORT TO XSK ON 学号
C.COPY STRUCTURE TO XSK
D.COPY TO XSK
29、假设已建立了两个库文件的关联,现要与第三个库文件建立关联,为了保持原有的关联,必须在“SET RELATION”命令中使用的子句是( )
A.UNIQUE B.ADDITIVE C.FIELDS D.RANDOM
30、视图设计器中比查询设计器中多出的选项卡是()。
A.字段 B.排序依据 C.联接 D.更新条件二、判断题(如正确,选择√;如错误,选择ⅹ。每小题1分,共10分)
1、表达式:职称>=”副教授”符合职称为副教授或教授这个要求。
2、两个D型数据能够使用运算符“+”进行相加运算。
3、执行命令?STR(24.56*10,2,2)后,屏幕显示**。
4、查询设计器中“联接”选项卡对应的SQL短语是JOIN。
5、通过指定字段的数据类型和宽度来限制该字段的取值范围,这属于数据完整性中的实体完整性
6、永久关联可以能实现父表记录指针移动时,子表记录指针按一定的规则跟随移动
7、一个工作区可以同时打开多个数据表。
8、LOCATE命令既可以在已打开索引的数据表中查询,也可以在关闭索引(或无索引)的数据表中查询。
9、数组中的各数组元素的数据类型可以不同。
10、当表单运行时,与数据环境中的表处于只读状态,只能显示不能修改。
三、填空题(每空2分,共20分)
1、利用表中所列数据,完成下列空格内容。
表1:部门表部门号
部门名称
40
家用电器部
10
电视录摄像机部
20
电话手机部
30
计算机部
表2:商品表部门号
商品号
商品名称`
单价
数量
产地
40
0101
A牌电风扇
200
10
广东
40
0104
A牌微波炉
350
10
广东
40
0105
B牌微波炉
600
10
广东
20
1032
C牌传真机
1000
20
上海
40
0107
D牌微波炉
420
10
北京
20
0110
A牌电话机
200
50
广东
20
0112
B牌手机
2000
10
广东
40
0202
A牌电冰箱
3000
2
广东
30
1041
B牌计算机
6000
10
广东
30
0204
C牌计算机
10000
10
上海
(1)、有如下SQL语句:
SELECT 部门号,MAX(单价*数量)FROM 商品表 GROUP BY 部门号查询结果有 1 条记录。
(2)、有如下SQL语句:
SELECT 产地、COUNT(*) 提供的商品种类数
FROM 商品表
WHERE 单价>200;
Group by 产地 HAVING COUNT(*)>=2
ORDER BY 提供的商品种类数 DESC
查询结果的第一条记录的产地是 3 。
(3)、有如下SQL语句:
SELECT 部门表,部门号,部门名称,SUM(单价*数量);
FROM 部门表,商品表;
WHERE 部门表.部门号=商品表.部门号;
GROUP BY 部门表.部门号
查询结果是,4
(4)有如下SQL语句:
SELECT 部门表.部门号,部门名称,商品号,商品名称,单价;
FROM 部门表,商品表
WHERE部门表.部门号=商品表.部门号;
ORDER BY 部门表.部门号 DESC,单价
查询结果的第一条记录的商品号是 5
(5)有如下SQL语句:
SELECT 部门名称 FROM 部门表 WHERE 部门号 IN;
(SELECT 部门号 FROM 商品表 WHERE 单价 BETWEEN 420 AND 1000)
查询结果是 6
2、以下程序的功能是显示系统日期的中文季节,比如系统日期为{2007.04.12},显示“春季”。请填空完成。
YUE=MONTH( 7 )
DO CASE
CASE YUE=3 OR YUE=4 OR YUE=5
COTH=’春’
CASE YUE=6 OR YUE=7 OR YUE=8
COTH=’夏’
CASE YUE=9 OR YUE=10 OR YUE=11
COTH=’秋’
CASE YUE=12 OR YUE=1 OR YUE=2
COTH=’冬’
___8_
MESSAGEBOX( 9 +‘季’)
RETURN
3、下列程序是求5!,请填空:
S=1
FOR I=1 TO 5
10
ENDFOR
?S
四、读程序写出运行结果(每小题5分,共20分)
1、以下程序的运行结果是什么?
CLEA
SUM1=0
CC=’’
FOR I=1 TO 5
T=0
FOR J=1 TO I
T=T+J
CC=CC+STR(J,1)+’+’
ENDFOR
IF I=5
CC=CC+’=’
ENDIF
SUM1=SUM1+T
ENDFOR
CC,SUM1
结果:
2、SET TALK OFF
USE ABC
SKIP 8
DISPLAY
LIST
RETURN
设数据表ABC.DBF共有30条记录,顺序执行程序后,2-5句记录指针值依次为:____
3、请写出以下AAA程序运行的结果。
AAA.PRG
SET PROC TO BBB
INPUT ‘X=‘ TO X
INPUT ‘Y=‘ TO Y
DO BB WITH X,Y
CLOSE PROC
RETURNSET TALK OFF
当X=121,Y=55时程序运行结果:
4、请写出以下程序运行的结果。
CLEA
Y=0
FOR I=1 TO 4
Y=I
DO MY3SQR WITH Y
Y
ENDFOR
PROC MY3SQR
PARA Y
Y=Y*Y*Y
RETURN
程序运行结果:
五、程序设计题(20分,第1题8分,第2小题12分)
1、在项目管理器中,建立名为“学生”的数据库,在该数据库中,建立如图1-1所示的“学生表1“数据库表

根据所建的数据库表,试设计一个名为“YU“的程序,其内容为:对满足一下条件的同学的助学金加上50。
条件1:政治面貌为党员。
条件2:英语成绩不小于75。
2、现有两个数据表,
数据表WFH.DBF的结构如下:
字段名 类型 宽度 小数位数合同名 C 4
货名 C 10
型号 C 4
数量 N 4 0
交货期限 D 8
单价 N 7 2
预付金额 N 8 2
购货单位 C 12
数据表 YFH.DBF
字段名 类型 宽度 小数位数合同名 C 4
货名 C 10
型号 C 4
数量 N 4 0
交货期限 D 8
单价 N 7 2
已付金额 N 8 2
购货单位 C 12
款清 L 1
以这两个表为基础,编写”销售管理”程序使其完成以下功能:
提示”输入合同号(敲入0退出)”,用户输入合同号(记录中合同号各不相同)定位YFH.DBF相应记录,提示”输入所付金额”,将’所付金额+预付金额”替换为”已付金额”
如果(YFH.DBF的)已付金额=单价*数量,则使字段”款清”为.T.
参考答案:
一、单项选择
1—5 BCADA 6—10 BABBD 11—15 BADAC
16—20 DDABC 21—25 BCADA 26—30 CDABD
二、判断题
1错2错3对4 对5 错6错 7错 8 对 9 对 10错。
三、填空题
1.3 2.广东 3.5 4.各部门商品金额合计 5.0101 6.家用电器部、电话手机部 7.date() 8.ENDCASE 9.Coth 10.S=S*I
四、读程序写出运行结果
1.1+1+2+1+2+3+1+2+3+4+1+2+3+4+5 += 35
2.1 9 9 31
3.11
4,1
8
27
64
五、程序设计题
1、SET TALK OFF
CLEAR
OPEN DATABASE 学生
USE 学生表1 (打开表,打开库2分)
GO TOP
DO WHILE !EOF() (循环语句2分)
IF 英语成绩>=75 AND 政治面貌=’党员’ (判断条件2分)
REPLACE 助学金 WITH 助学金+50 (助学金计算2分)
ENDIF
SKIP
ENDDO
2、SET TALK OFF
CLEA
SELECT 1 (工作区选择1分)
USE WFH
INDEX ON 合同号 TAG HTM工 (索引2分)
SELECT 2
USE YFH
SET RELA TO 合同名 INTO A (关联3分)
DO WHILE,T.
ACCEPT ‘输入合同号(敲入0退出):’ TO N (输入语句1分)
IF N=’0’
EXIT
ENDIF
LOCA FOR 合同号=N (条件定位1分)
INPUT ‘输入所付金额:’ TO C
REPL 已付金额 WITH C+A.预付金额
IF 已付金额=单价*数量 (已付金额的计算2分)
REPL 款清 WITH,T.
ENDIF
ENDDO
注:题目中没有要求重复输入,所以DO WHILE语句可省
第三套 理论复习题一、单项选择题:(每空1分,共计30*1=30分)
1、.用于实现数据库各种数据操作的软件成为:
A.数据软件 B.操作系统 C.数据库管理系统 D.编译程序
2、可以链接或嵌入OLE对象的字段类型是:
A.备注字段 B.通用型和备注型字段
C.通用型字段 D.任何类型的字段
3、Visual FoxPro 6.0 数据库系统是:
A.网络 B.层次 C.关系 D.链状
4、表文件的默认文件扩展名是:
A..PRG,B.DBC C.,DBF D..DCT
5、在VISUAL FOXPRO中,ZAP命令可以删除当前数据表文件的:
A.结构和所有记录 B.所有记录 C.满足条件的记录 D.在删除标记的记录
6、命令DELETE DATABASE 学生成绩.DBC DELETE TABLE用于:
A.删除学生成绩.DBC文件及其所含的表文件
B.删除学生成绩.DBC文件,但没有删除其中所含的表文件
C.没有删除学生成绩.DBC,但删除了其中所含的表文件
D.没有删除学生成绩.DBC,也没有删除其中所含的表文件
7、在表的浏览窗口中,按[SHIFT+TAB]健可以将:
A.光标移到下一记录 B.光标移到上一记录
C.光标移到下一字段 D.光标移到上一字段
8、在下列表达式中,运算结果为数值型数据的是:
A.CTOD(‘12/24/2006’)-28 B.‘1234’+‘5678’
C.100+100=200 D.LEN(‘ABCD’)-1
9、统计表中已婚(即婚否为真)人数的正确命令是:
A.SUM FOR 婚否 B.COUNT FOR 婚否=,T.
C.SUM 婚否 D.COUNT FOR 婚否
10、在学生成绩表XSCJ.BDF中有学号、改名、课程、任课教师,成绩等字段,现统计任课教师的个数,准备对“任课教师”字段建立索引,这种索引应该是:
A.主索引 B.普通索引 C.候选索引 D.惟一索引
11、若销售数据表(含有:商品名、库存量、总价等字段)及相应的索引文件已经打开,要求对库存量及总价字段按商品名汇总,结果存在KC.DBF中,可使用命令是:
A.TOTAL ALL ON 商品名 TO KC
B.SUM TO KC ON 商品名 FIELDS 库存量,总价
C.TOTAL TO KC ON 商品名 FIELDS 库存量,总价
D.SUM TO KC ALL ON 商品名
12、表单或表单集的数据环境可以看成一种 Visual FoxPro:
A.对象 B.表 C.视图 D.设计器
13、设数据表文件在当前工作区已经打开,命令COPY TO TEMP FIEL <字段名表>完成的工作相当于关系运算:
A.连接 B.选择 C.自然连接 D.投影
14、设表TX1.DBF中有20条记录,在VISUAL FOXPRO命令窗口中执行以下的命令序列,最后显示的是:
USE TXL
SKIP 3
DELETE
SET DELETED OFF
COUNT TO N
?N
A.20 B.19 C.18 D.17
15、下面对于控件类的各种描述中,错误的是:
A.控件类用于进行一种或多种相关的控制
B.可以对控件类对象中的组件单独进行修改或操作
C.控件类一般作为容器类中的控件
D.控件类的封装性比容器类更加严密
16、对于现实世界中事物的特征,在实体-联系模型中使用:
A.属性描述 B.关键字描述
C.一维表描述 D.实体描述
17、假设已经生成了名为MYMENU的菜单文件,执行该菜单文件的命令是:
A.DO MYMENU B.DO MYMENU.MPR
C.DO MYMENU.PJX D.DO MYMENU.MNX
18、下列函数中函数值为字符型的是:
A.DATE() B.TIME() C.YEAR() D.DATETIME()
19、面向对象程序设计中程序运行的最基本实体是:
A.对象 B.类 C.方法 D.函数
20、SQL是英文单词( )的缩写。
A.STANDARD QUERYLANGUAGE B.STRUCTURED QUERY LANGUAGE
C.SELECT QUERY LANGUAGE D.以上都不是
21、形状控件的Curvature属性值为99时,表示它是:
A.正方形或长方形 B.直线 C.椭圆或圆 D.圆角矩形
22、在创建表单时,下列关于选项按钮组的说法中正确的是:
A.选项按钮的个数由Value属性值决定
B.选项按钮的个数由Name属性值决定
C.选项按钮的个数由ButtonCount属性值决定
D.选项按钮的个数由Caption属性值决定
23、This是对( )的引用。
A.当前对象 B.当前表单 C.任意对象 D.任意表单
24、假定表单中包含一个按钮,那么在运行表单时,下面有关事件引发次序的陈述中,正确的是:
A.先执行命令按钮的INIT事件,然后执行表单的INIT事件,最后执行表单的LOAD事件
B.先执行表单的INIT事件,然后执行命令按钮的INIT事件,最后执行表单的LOAD事件
C.先执行表单的LOAD事件,然后执行表单的INIT事件,最后执行命令按钮的INIT事件
D.先执行表单的LOAD事件,然后执行命令按钮INIT事件,最后执行表单的INIT事件
25、从学生表中查询学分最低的10位学生的信息,下列SQL正确的是
A.SELECT * FROM 学生
B.SELECT * TOP 10 FROM 学生 ORDER BY 学分 ASC
C.SELECT TOP 10 * FROM 学生 ORDER BY 学分 DESC
D,SELECT TOP 10 * FROM 学生 ORDER BY 学分 ASC
26、在SQL中创建和删除一个数据库对象分别使用的关键字是:
A.USE DELETE B.INSERT DROP
C.CREATE REMOVE D.CREATE DROP
27、设职工表按“工作日期”索引文件已经打开,要把记录指针定位到工作刚好满90天的职工,应当使用命令:
A.FIND DATE()- 90 B.SEEK DATE()+ 90
C.FIND DATE()+ 90 D.SEEK DATE()- 90
28、表单向导形成的表单数据源只能基于:
A.表 B.视图 C.查询 D.SQL语句
29、在建立表惟一索引,若表出现重复字段值时,索引文件只存储重复出现记录的()
A.第一个 B.最后一个 C.全部 D.几个( )
30、“PACK DATABASE”的功能是:
A.清除当前表中所有有删除标记的记录
B.彻底删除数据库中的表
C.彻底删除数据库中所有表中有删除标记的记录
D.删除文件管理器中无用的数据)。
二、判断题(如正确,选择√;如错误,选择ⅹ。每小题1分,共10分)
1、建立索引以后,原来的数据库表文件中记录的物理顺序将被改变
2、使用HAVING子句的同时可以使用WHERE子句。
3、在SQL SELECT 语句中,实现字符串匹配的运算符是‘LIKE’
4、数组元素的下标下限是0。
5、建立永久关联的两张表必须放在同一个数据库中。
6、文本框的Passwordchar属性设置为“*”时,用户键入的字符在文本框内显示为“*”,但属性VALUE中仍保存键入的字符串。
7、一般而言,学生表和课程表之间是属于一对多的关系
8、关系型数据库与层次型、网状型数据库的主要区别在于它描述数据的一致性。
9、在一个表中可以建立多个普通索引,多个惟一索引,多外候选索引,一个主索引。
10、执行命令USE XSDA后,记录指针的位置指向文件头,?BOF()结果为.T,
三、填空题(每空2分,共20分)
1、已知某单位工资表GZ有如下记录:
RECORD# 编号 姓名 年龄 职称 工资
1 3001 张立 36 讲师 690
2 3002 王方 31 讲师 680
3 3003 李平 22 助教 820
4 3004 朱岩 46 副教授 960
5 3005 陈剑 51 教授 1100
6 3006 陈国青 50 副教授 920
7 3007 赵丽 47 教授 1200
下列统计程序,计算教授及副教授的平均工资和最低工资。根据人事政策,对年满50岁(含)以上的员工工资进行更新,增加200元,请填空完成。
SET TALK OFF
USE GZ
CALCULATE AVG(工资),1 TO A,D FOR 2
REPLACE 工资 WITH 工资+200 FOR?年龄 3
2、设有学生选课表SC(学号,课程号,成绩),用SQL语言检索每门课程的课程号及平均分的语句是:
SELECT 课程号,4 FROM SC 5
3、数据库文件NAMES.DBF中每条记录包含以下字段:编号,姓名,单位,地址和电话。要求输入编号后可自动进行查找,显示姓名、单位、电话,也可重复查找,输入“#”后退出。填空并完成下列程序。
SET TALK OFF
USE NAMES
INDEX ON 编号 TO BH1
DO WHILE,T.
CLERA
NO1=SPACE(5)
@3,20 SAY,请输入编号:;(#退出)” GET NOT1 6
NOT1=TRIM(NO1)
IF 7
EXIT
ENDIF
SEEK NOT1
IF,NOT.EOF()
’姓名:’,姓名,’单位:’,单位,电话,’电话:’
ELSE
’无此编号’
8
WAIT
9
USE
查询同名同姓的情况
USE ZGDA
ACCEPT,姓名:" TO XM
LOCATE FOR 姓名=XM
DO WHILE FOUND()
DISP
10
ENDDO
四、读程序写出运行结果(每小题5分,共20分)
1、以下程序的运行结果是什么?
主程序MAIN.PRG
CLEA
A=2
B=3
C=4
DO SUB1
A,B
程序运行结果是:
2、CLEAR
FOR I=1 TO 9
FOR J=1 TO I
STR(I*J,2)+SPACE(2)
ENDFOR
EMNDFOR
程序运行结果是:
3、SET TALK OFF
STORE 1 TO P,M
X1=20
Y2=31.3
Z3=41.4
N=ASC(‘X’)
DO WHILE P<=3
STORE CHR(N+P-1)+STR(P,1) TO Q
?‘Q=’,Q
M=M*&Q
P=P+2
ENDDO
’M=’,M
SET TALK ON
RETURN
程序运行后,输出结果是:
4、DIME S(8)
FOR I=1 TO 8
S(I)=I
ENDFOR
DO REVERSE WITH S
FOR I=1 TO 8
S(I)
ENDFOR
RETURN
程序运行结果:
五、程序设计题(20分,第1题10分,第2小题10分)
1、请考生编写程序Prog1.prg,其功能是计算下列多值函数的值:
ABS(X) X<0
ex 0<=x<1
Y= X2 1<=X<3
INT(X) X>=3
计算的数据都存放在数据表shj.dbf中,该数据表只有两个字段:X(N,4,1)和Y(N,6,4)。在程序中读取字段X的数据,然后把计算结果存放在字段Y中,最后把shj.dbf所有记录复制到shj1.dbf文件中。
2、现有两个数据表文件,CLFPZTF.DBF(未结帐发票)和CLFPYJF.DBF(已结帐发票)请编写程序PROG1.PRG,其功能是检查CLFPZTF.DBF中KGY字段的值,如果该字段值不为空,则将该记录加上删除标记并复制到已结帐发票的文件CLFPYJF.DBF中,并将相应JZRQ(结帐日期)字段的值置为2004/02/16。
注意:处理前重复处理前应注意把CLFPYJF.DBF文件应清空参考答案:
一、单项选择
1—5 CCCBB 6—10 ADDBD 11—15 CADAB
16—20 ABBAB 21—25 CCADD 26—30 DDAAC
二、判断题
1 错2对3 对4 错5 对6对 7错 8 对9 对 10 错。
三、填空题
1、MIN(工资) 2、‘教授’$职称 3、>=50 4、AVG(成绩) 5、GROUP BY 课程号
6、PICTURE ‘99999’ 7、EOF() 8、ENDIF 9、ENDDO 10、COUNT
四、读程序写出运行结果
1、结果,20 30 40
100 200 40
20 3 4
2、1
2 4
3 6 9
4 8 12 16
5 10 15 20 25
6 12 18 24 30 36
7 14 21 28 35 42 49
8 16 24 32 40 48 56 64
9 18 27 36 45 54 63 72 81
3、Q=X1
Q=Z3
M= 828.0
4、8 7 6 5 4 3 2 1
五、程序设计题
1.(8分)
SET TALK OFF
USE SHJ
DO WHILE,NOT,EOF() (循环条件2分)
DO CASE
CASE X<0
REPL Y WITH ABS(X)
CASE X>=0 AND X<1
REPL Y WITH EXP(X)
CASE X>=1 AND X<3 (每个CASE 语句完整1分共4分)
REPL Y WITH X*X
CASE X>=3
REPL Y WITH INT(X)
ENDCASE
SKIP (指针移动2分)
ENDDO
COPY TO SHJ1 (表复制2分)
LIST
USE
2、SET TALK OFF
SELECT 1
USE CLFPYJF
ZAP
SELECT 3 (多工作区转换2分)
USE CLFPZTF
RECAL ALL
GO TOP
DO WHILE !EOF() (循环条件与循环语句的完整性2分)
IF KGY<>SPACE(8) (判断条件2分)
SCATT TO FF
SELECT 1
APPE BLANK
GATH FROM FF (数组与记录传递数据2分)
REPLACE JZRQ WITH CTOD(“02/16/2004”) (数据修改2分)
SELECT 3
DELETE
ENDIF
SKIP
ENDDO
CLOSE ALL
第四套 理论复习题一、单项选择题:(每空1分,共计30*1=30分)
1、Visual FoxPro DBMS是:
A.操作系统的一部分 B.操作系统支持下的系统软件
C.一种编译程序 D.一种操作系统
2、Visual FoxPro DBMS基于数据模型是:
A.层次模型 B.网状模型 C.关系模型 D.环状模型
3、数据表的扩展名为:
A..DBF B..CDX C..FPT D..PRG
4、有关自由表字段名的叙述不正确的是()
A.字段名可达128个字符 B.字段名必须以字母或汉字开头
C.字段名可以由字母、汉字和下划线组成 D.字段名不能含空格
5、关于自由表叙述正确的是:
A.自由表和数据库表是完全相同的 B.自由表不能建立字段级规则和约束
C.自由表不能建立候选索引 D.自由表不可以加入到数据库中
6、对表结构的修改是在下面哪一个对话框中完成的( )
A.表设计器 B.数据库设计器
C.表达式生成器 D.浏览窗口
7、下列选项中不是常量的是( )
A,abc B."abc" C.1.4E+12 D.{^1999/12/31}
8、用DIMENSION命令定义数组后,各数组元素在没有赋值之前的数据类型是:
A.C型 B.N型 C,L型 D,未定义
9、命令 STORE DTOC ({^1987/03/06}) TO A,执行后变量A的类型是:
A.日期型 B.字符型 C.非法常量 D.数值型
10、 VAL(SUBSTR('GW468',4,1))*LEN("COMPUTER")的值是,
A.64.00 B.56.00 C.48,00 D.42.00
11、 LEN(‘SPACE(10)’)的值是:
A.8 B.10 C.9 D.3
12、 ROUND(1837.621,-2)的值是:
A.1837.6 B.1837.62 C.18 D.1800
13、将数据库表移出数据库变成自由表的命令为( )
A.DROP TABLE 表名 B.REMOVE TABLE 表名
C.REMOVE TABLE 表名 DELETE D.DROP TABLE 表名 RECYCLE
14、工资大于1000且年龄少于55岁的男职工表达式为,
A.工资>1000,OR,年龄<55,OR.性别="男"
B.工资>1000,AND,年龄<55,AND.性别="男"
C.工资>1000,AND,年龄<55,OR.性别="男"
D.工资>1000,OR,年龄<55,AND.性别="男"
15、不具备查询功能的命令是:
A.LIST B.REPLACE C.LOCATE D.SELECT
16、表文件记录测试?recno()值为3,显示3-5号记录的正确操作是:
A.DISPLAY 3-5 B.DISPLAY NEXT 2
C.LIST 3,4,5 D.LIST NEXT 3
17、如果希望一个内存变量只限于在本过程中使用,说明这种内存变量的命令是:
A,PRIVATE B,PUBLIC
C,LOCAL D,在程序中直接使用的内存变量(不通过A,B,C说明)
18、某表文件有字符型、数值型和逻辑型3个字段,其中字符型字段宽度为5字节,数值型字段宽度为6字节,小数位为2字节,表文件中共有100条记录,则全部记录需要占用的存储字节数目是( )
A.1100 B.1200 C.1300 D.1400
19、对已打开的Dan表进行结构修改的方法是:
A.EDIT B.MODIFY COMMAND
C.MODIFY STRUCTURE D.LIST STRUCTURE
20、将数据表中的男讲师记录复制到新表DAN1文件中:
A.COPY STRU TO DAN1 FOR 性别=男 AND 职称=讲师
B.COPY TO DAN1 FOR 性别=男 AND 职称=讲师
C.COPY TO DAN1 FOR 性别='男' AND 职称='讲师'
D.COPY TO DAN1 FOR '性别'=男 AND '职称'=讲师
21、在表的2号记录后追加一条空白记录的命令是:
A.GO 2 B.2
INSERT INSERT BLANK
C.GO 2 D.2
INSERT BEFORE BLANK INSERT BEFORE
22、按性别建立索引,若有相同值按高考成绩字段升序,索外文件名为Xbcj命令是:
A.INDEX ON 性别,高考成绩 TO Xbcj
B.INDEX ON 性别+高考成绩 TO Xbcj
C.INDEX ON 性别+STR(高考成绩,5,1) TO Xbcj
D.INDEX ON 性别+DTOS(高考成绩) TO Xbcj
23、在数据表中存储声音的字段类型应该是:
A.备注型 B.通用型 C.字符型 D.图像型
24、关于视图的正确叙述是:
A.视图与数据库相同,用于存储数据
B.在视图上不能进行更新操作
C.视图不能同数据库表进行连接操作
D.视图是从一个或多个数据表中导出的虚拟表
25、打开Cj表后,将指针定位在入学成绩大于550分的第一条记录处的命令是:
A.DISPLAY FOR 入学成绩>550 B.LIST FOR 入学成绩>550
C.GO 550 D.LOCATE FOR 入学成绩>550
26、将所有工作人员津贴上涨20%的命令是:
A.REPLACE ALL津贴 WITH 津贴*20%
B.REPACEL ALL 津贴 WITH 津贴*(1-20%)
C.REPLACE ALL 津贴 WITH 津贴*(1+20%)
D.REPACEL ALL 津贴WITH '津贴'*(1+20%)
27、精确显示名字中有个“高“字的人员信息的命令是:
A.LIST FOR 姓名=‘高' B.LIST FOR 高$‘姓名’
C.LOCATE FOR 姓名='高' D.LIST FOR '高'$姓名
28、在表的浏览窗口下,按[CTRL+Y]健可以( )
A.给当前记录做删除标记 B.在当前记录后插入记录
C.在当前表中追加新记录 D.在当前记录前插入记录
29、下述命令中不能关闭表的是(D)
A.CLOSE DATABASE B.USE
C.CLEAR ALL D.CLEAR
30、显示1987年1月6日出生的学生姓名的命令是:
A.LIST FOR 出生年月= 1987年1月6日 B.LIST FOR 出生年月={1987/1/6}
C.LIST FOR 出生年月={^1987/01/06} D.LIST FOR 出生年月={^01/06/1987}
二、填空题(每空1.5分,共计1.5*8=12分)
1、关系数据库中常见的关系运算包括 ______、______和______。
2、根据数据结构不同,数据库管理系统通常采用的数据模型是_________,_________、__________。
3、字符型英文缩写____,日期型英文缩写_____,逻辑型英文缩写______,备注型英文缩写______,通用型英文缩写______,数据型英文缩写______。
4、设置逻辑删除有效的命令语句是_________________。
5、恢复政治面貌是党员的记录信息的命令语句是:______________________________。
6、索引的四种类型是:_________、__________、_________、________,一张表最多只允许有一个的是:________,若希望相同字段值只保留一个可用________,查看索引顺序的菜单方法:___________
7、修改表的结构命令和菜单方式分别为:________、________; 显示表的内容命令和菜单方式分别为:____________,___________。
8、打开自由表Dan的命令语句是:__________。
三、判断题
1、在备注字字段值处按CTRL+PAGEUP可进入备注字段编辑状态。
2、通用型数据填写的方法:显示/浏览--->编辑/插入对象。
3、Visual FoxPro的运行界面中的命令窗口可以显示或隐藏。
4、设在浏览表的状态下,如果记录前有黑色小标记,代表该记录已被物理删除。
5、修改表的数据后,所有相关索引文件中的数据会随之自动修改,即使索引文件当时没有打开,则索引顺序也会自动重新调整顺序。
6、更新触发器是进行记录修改有效性的检验。
7、数据表可以在一个窗口中,同时用编辑和浏览两种方式查看数据信息。
8、报表可以创建单表报表、分组/总计报表、一对多报表。
9、报表的常见布局有:列报表、行报表、多栏报表、一对多报表。
10、视图是数据库中特有的,它依赖于某一个数据库而存在。只有打开与视图相关的数据库才能创建和使用视图。
11、两张放在同一个数据库中的文件,可直接通过拖动相同的字段名,就可实现索引功能。
表达式运算的先后顺序是:算术表达式、字符表达式、逻辑表达式、关系表达式的顺序进行运算。
四、读程序写结果(18分)
1、STORE 0 TO N,S 2、FOR I=1 TO 9
DO WHILE,T,FOR J=1 TO I
N=N+1STR(I,1),'*',STR(J,1),'=',STR(I*J,2)+' ' S=S+N ENDFOR
IF N>=5?
EXIT ENDFOR
ENDIF
ENDDO
S
程序运行结果:________ (4分) 程序功能是:_______________ (4分)
3、R=1
C=8 4、I=1
DO WHILE,T,DO WHILE I<4
IF R>4?SPACE(10-I)+REPL('*',2*I-1)
EXIT I=I+1
ENDIF ENDDO
@R,C SAY "* * * * * "
R=R+1 程序运行结果:______________(5分)
C=C+1
ENDDO
程序运行结果:___________ (5分)
五、编写程序
1、用循环和分支语句分别统计任意表中男女人数,并输出结果。 (4分)
2、求N! (5分)
参考答案:
一、单项选择
1—5 BCAAB 6—10 AACBC 11—15 CDABB
16—20 DCCCC 21—25 BCBDD 26—30 CDADC
二、填空题
1、选择 投影 联接 2、关系 层次 网状 3、C D L M G N 4、SET DELETE ON 5、RECALL ALL FOR 政治面貌=’党员’ 6、主索引 惟一索引 候选索引 普通索引 主索引 惟一索引 表/属性/索引顺序 7、MODI STRU 显示/表设计器 LIST 显示/浏览器 8、USE DAN
三、判断题
1 对2对3 对4 错5 对6错 7对 8 对9 对 10 对11 错 12错
四、读程序写出运行结果
1、结果,55
2、直角三角形的九九乘法表
3、* * * * *
* * * * *
* * * * *
* * * * *
4,*
***
*****
五、程序设计题
1.(4分)
SET TALK OFF
ACCEPT ‘请输入表名称:’ TO BH
USE &BH (打开任意2分)
STORE 0 TO A,B
DO WHILE,NOT,EOF()
IF 性别=’男’ (统计男女人数2分)
A=A+1
ELSE
B=B+1
ENDIF
SKIP
ENDDO
’男生人数:’,A,’女生人数:’,B
2.SET TALK OFF
INPUT ‘请输入N:’ TO N
JC=1
FOR I=1 TO N
JC=JC*I
ENDFOR
’阶乘值为:’,JC
第五套 理论复习题一、单项选择题:(每空1分,共计30*1=30分)
1、数据库系统的核心和基础是:
A.数据元素 B.数据模型 C.事物之间的联系 D.数据类型
2,VISUAL FOXPRO是一种数据库管理系统,数据库管理系统的英文缩写是:
A.DB B.OS C.DBS D.DBMS
3、在数据库的三级模式中,只有( )是真正存储数据的。
A,模式 B,内模式 C.概念模式 D.外模式
4、关系模型的一个关系可用一张二维表来表示,它相当于VFP中的一个:
A.表文件 B.记录 C.数据库 D.字段
5、设有部门和职员两个实体,每个职员只能属于一个部门,一个部门可以多名职员,则部门与职员之间的联系类型是:
A.M︰N B.M︰K C.1︰M D.1︰1
6、表结构中的日期型字段、逻辑型、通用型的宽度由系统自动给出,它们分别为:
A.1,4,8 B.4,4,10 C.1,10,8 D.8,1,4
7、退出FOXPRO系统的命令是:
A.EDIT B.EXIT C.QUIT D.CLOSE
8、关于书写和使用命令不正确的说法是:
A.一行内允许书写多条命令。
B.命令中的字母不区分大小写,大小写字母可以混合使用
C.命令中的各子句可按任意顺序排列
D.命令动词可以简写为前四个字符
9、下列字段名正确的有:
A.男∕女 B.STUDENT C.年 龄 D.NAME-1
10、命令 STORE CTOD(“02/19/87”) TO A,执行后变量A的类型是:
A.字符型 B.日期型 C.非法常量 D.数值型
11、 LEN(SPACE(16))的值是:
A.8 B.10 C.16 D.3
12、ROUND(1536.05,-2)的值是:
A.1536.05 B.15 C.1540.00 D.1500
13、A=’06/11/98’,则表达式MONTH(CTOD(A)和DAY(CTOD(A))的值分别是( )
A.6和98 B.6和11 C.11和6 D.11和98
14、数组定义后的默认值为:
A.0 B.,,C.T D..F.
15、N=’20.67 ‘
2+&N
显示结果是:
A.220.67 B.22.67 C.20267 D.20.672
16、表达式-2*3^2的结果为:
A.12 B.-12 C.18 D.-18
17、表达式MOD(20,6)的结果为:
A.2 B.-2 C.4 D.-4
18、X=AT(’98’,’工商系98级学生’),变量X的值是:
A.7 B.16 C.13 D.8
19、X=23
IIF(X>12,1,-1)
A,23 B.1 C.-1 D.出错
20、在数据表中存储图像的字段类型应该是:
A.备注型 B.通用型 C.字符型 D.图像型
21、LIST命令不显示记录号时,必须在命令中使用的子句是:
A.ON B.RECORD C.OFF D.OF
22、刚打开表文件时,显示1-3号记录的正确操作是:
A.DISP B.DISP RECORD 3 C.LIST 1,2,3 D.LIST NEXT 3
23、命令APPE BLANK的功能是( )
A.在表文件开始增加一个空记录。 B.在当前记录后增加一个空记录。
C.在当前记录前增加一个空记录。 D.在表文件末尾增加一个空记录。
24、要从某数据库中物理地删除一条记录,应该:
A.先用DELETE命令,再用PACK命令 B.直接用DELETE命令
C.先用DELETE命令,再用ZAP命令 D.直接用ZAP命令
25,表文件中记录序号左边有“*”号,表示:
A.分类记录号 B.物理删除标记 C.逻辑删除标记 D.索引标记
26、表中有10条记录,肯定定位在第一号记录上的命令是:
A.SKIP 1 B.GO BOTTOM C.GO TOP D.GO 1
27、设当前记录号为10,现欲将记录指针指向8的操作是:
A.SKIP -2 B.SKIP 2 C.GO TOP D.GO 10
28、程序文件的扩展名为:
A..DBF B..CDX C..FPT D..PRG
29、将2班DAN2纵向连接到1班DAN1表中的命令是:
A.USE DAN1 B.USE DAN2
APPE FROM DAN2 APPE FROM DAN1
C.USE DAN1 D.USE DAN2
JOIN WITH DAN2 JOIN WITH DAN1
30、下列命令中,能顺序查询当前数据库中所有年龄不低于30岁(含30岁)不超过50岁的第一个人员的信息是:
A.MODI FOR年龄>=30.OR.年龄<=50
B.LOCATE FOR 年龄>=30,AND,年龄<=50
C.EDIT FOR年龄>=30.OR.年龄<=50
D.BROW FOR 年龄>=30.AND,年龄<=50
二、填空题:(每空1.5分,共计1.5*8=12分)
1、显示和修改表的结构的菜单方式是:__________________。
2、筛选自费生信息的命令语句是:_________________________。
3、如当前表文件有10条记录,其中简历备字段已填入了3个人员信息,那与它相应的备注文件有 个。
4、打开xsda表,按性别降序,学号升序建立排序文件xsda0.dbf所需要的命令语句有:__________,____________。
5、工资大于1500且年龄少于60岁的男职工表达式为,___________。
6、将数据表zgda中的女助教记录复制到新表dan1文件中的命令是:_________。
7在第12,25列显示隶书60号文字“数据库学习”的命令语句是,___________。
三、多项选择。(每空2分,共计2*5=10分)
1、关系数据库中常见的关系运算包括:
A.选择 B关联 C,投影 D,连接
2、若要修改表记录的数据,可使用的命令是:
A.EDIT B,BROW C,MODIFY D,CHANGE
3、根据数据结构不同,数据库管理系统通常采用的数据模型是:
A.层次模型 B.网状模型 C.关系模型 D,链状模型
4、建立表结构之后,可通过哪些方法( )来实现添加表记录。
A.输入表结构后确定,继续输入表记录 B.显示/追加方式
C.编辑/追加记录 D.表/追加新记录
5、按学号升序建立索引的命令:
A.INDEX ON 学号 TO A1 B.INDEX ON 学号 TAG 学号
C.显示/表设计器/索引中设置学号升序 D.INDEX ON 学号 TAG 学号 OF A1
四、判断题:(每空1分,共计8分)
1、INPUT输入语句可以接受字符型数据,但输入字符数据时必须加引号。
2、复制当前表内容到新表后,新表是处于打开状态。
3、将所有工作人员津贴上涨20%的命令是:REPL 津贴 WITH 津贴*(1+0.2)。
4、当执行FOR语句中遇到LOOP时,无条件回到FOR循环的开始位置。
5、当原表数据修改后,相关索引文件中的数据值并未自动修改。
6、DISPLAY的缺省范围是当前记录,显示后不移动记录的指针。
7、DO WHILE…ENDDO,FOR…ENDFOR,SCAN…ENDSCAN均属于分支处理命令。
8、自由表可以自由地添加到数据库中,数据库中的表可以移出成为自由表。
五、阅读程序:(共计14分)

六、编写程序:(共计26分)
1、编写一个已知三角形三边A,B,C求三角形面积(5分)
2、编写一个已知实领工资求个人所得税的程序,用DO CASE 语句完成(8分)
假如800元(包括800)以下,税额为0
800-2000元,超过800的部分缴6%
2000元以上,800-2000间的缴6%,其余部分缴纳8%。
3、编写一张九九乘法表,要求有一定的显示效果(可以是矩形,直角三角形等)。(9分)
4、编写一个求X阶乘的函数JC(X)。(4分)
附录1三角形公式:P=(A+B+C)/2 面积为P(P-A)(P-B)(P-C)的平方根附录2:ZGDA表内容为:
ZGGZ表内容为:
参考答案:
一、单项选择
1—5 BDBAC 6—10 DCABB 11—15 CDBDB
16—20 DAABB 21—25 CDDAC 26—30 DADAB
二、填空题
1显示/表设计器
2 SET FILTER TO 自费否=.T,
3、1
4、USE XSDA
SORT TO XSDA0 ON 性别/D,学号
5、工资>1500 AND 年龄<60 AND 性别=”男”
6、COPY TO DAN1 FOR 性别=“女”AND 职称=”助教”
7、@12,25 SAY,数据库学习” FONT,隶书”,60
三、多项选择题
1ACD 2ABD 3ABC 4ABD 5ABCD
四、判断题
1 对2错3 错4 对5 错6对 7错 8 对。
五、阅读程序
1.按部门分类统计实领工资总和。2 将ZGDA与ZGGZ表建立关联,并显示ZGDA表中的姓名,职称,ZGGZ表中的实领工资 3、18 4、*****
六、编写程序
1.INPUT,请输入A:,TO A
INPUT,请输入B:,TO B
INPUT,请输入C:,TO C (三句输入语句2分)
IF (A+B)>C AND (A+C)>B AND (C+B)>A AND (A-B)>C AND (A-C)>B AND (B-C)>A
P=(A+B+C)/2
S=SQRT(P*(P-A)*(P-B)*(P-C)) (求三角形的公式2分)
ENDIF
’三角形的面积为:’,S (输出语句1分)
2.(8分) SE=0
DO CASE
CASE 实领工资<=800
SE=0
CASE 实领工资>800 AND实领工资<=2000
SE=(实领工资-800*0.06 (每条CASE语句2分)
CASE 实领工资>2000
SE=1200*0.06+(实领工资-2000)*0.08
ENDCASE
,应缴税额:”,SE (SE设初值1分,输出语句1分)
3.(9分)
矩形九九乘法表:
CLEA
FOR I=1 TO 9 (2分)
FOR J=1 TO 9 (2分)
STR(I,1),'*',STR(J,1),'=',STR(I*J,2),' ' (2分)
ENDFOR
(显示效果1分) (循环体完整2分)
ENDFOR
三角形九九乘法表:
CLEAR
FOR I=1 TO 9
FOR J=I TO 9
STR(I,1),'*',STR(J,1),'=',STR(I*J,2),' '
ENDFOR
ENDFOR
4.(4分)
FUNCTION JC
PARA X
S=1 (函数定义的格式2分)
FOR I=1 TO X
S=I*S (求N!程序体2分)
ENDFOR
RETURN S