vfp复习2008春

更新时间:2024-06-01 06:53:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

2007秋 笔试部分

一、选择题

21.在关系模型中,关系规范化的过程是通过关系中属性的分解和关系模式的分解来实现的。在实际应用中,设计关系模式时一般要求满足 (21) 。

A.1NF B.2NF C.3NF D.4NF

22.设变量x的值为\,则下列表达式中运算结果为.T.的是 (22) 。

A.AT(\

B. BETWEEN(x,\

C. SUBSTR(LOWER(x),4)$x D. ISNULL(SUBSTR(x,7))

23.设XDH为XS表中的一个字段(类型为字符型,宽度为2个字节),则下列条件表达式中,与条件表达式XDH NOT IN (\功能等价的是 (23) 。

A.Xs.xdh!=\B.! (Xs.xdh>\

C.Xs.xdh<>\D.Xs.xdh=\

24.数据库表的主索引(及候选索引)的设置可以实现 (24) 。

A.域完整性 B.实体完整性 C.参照完整性 D.用户自定义完整性 25. 函数SELECT(1)的返回值是 (25) 。 A. 当前工作区号

B. 当前工作区的下一个工作区号

A.用于分组的字段必须是已选定输出的字段 B.WHERE子句用于对查询数据源的筛选 C.HAVING子句用于对查询结果的筛选

D.查询命令中的查询去向可以为屏幕、图形或数组 27. 在下列有关控件的叙述中,错误的是 (27) 。

A.对于标签控件(Label)的Caption属性值来说,其长度(即字符个数)没有限制 B.复选框控件(CheckBox)的Value属性值可以设置为0,或1,或2 C.有些控件无Caption属性,例如文本框(TextBox)

D.有些控件可通过相应的生成器设置其部分属性,例如命令按钮组(CommandGroup) 28. 在下列几组控件中,均有SetAll()方法的是 (28) 。

A.表单(Form)、命令按钮(CommandButton)、命令按钮组(CommandGroup) B.表单集(FormSet)、列(Column)、组合框(ComboBox) C.表格(Grid)、列(Column)、文本框(TextBox)

D.表单(Form)、页框(PageFrame)、命令按钮组(CommandGroup) 29.下列几组控件中,都有ControlCount属性的是 (29) 。 A.表单(Form)、文本框(TextBox)、列表框(ListBox)

C. 当前未被使用的最小工作区号 D. 当前未被使用的最大工作区号

26. 在下列有关查询命令(SELECT-SQL)的叙述中,错误的是 (26) 。

B.表单集(FormSet)、表单(Form)、页框(PageFrame) C.表单(Form)、页面(Page)、列(Column)

D.列(Column)、选项按钮组(OptionGroup)、命令按钮组(CommandGroup) 30. 在下列有关VFP报表的叙述中,错误的是 (30) 。 A.报表文件的扩展名为.FRX,报表备注文件的扩展名为.FRT

B.列报表的布局是每个字段在报表上占一行,一条记录一般分多行打印 C.标题带区的内容仅在整个报表的开始打印一次,并不是在每页上都打印 D.报表的数据环境中可以不包含任何表和视图

二、填空题

1. 关系的基本运算有两类:一类是传统的集合运算,包括并、差、交等;另一类是专门的关系运算,主要包括 (1) 、投影和联接等。

2. 在数据库设计中广泛使用的概念模型当属“实体-联系”模型(简称E-R模型)。E-R模型中有3个基本的概念,它们分别是 (2) 、联系和属性。

3. 用户要在D盘的根目录中创建一个名为MyBack的文件夹,可用命令 (3) D:\\MyBack。 4. 设置主程序后,可以对项目进行连编。若连编时选择“连编可执行文件”,则生成的可执行文件的扩展名为 (4) 。

5.字符型常量也称为字符串,它是由字符串“定界符”括起来的一串字符。字符串定界符可以是单引号、双引号或 (5) 。

6. 函数ROUND(1234.196, -2)的返回值为 (6) ,SUBSTR(\6) 的返回值为 (7) 。 7.如果因误操作删除了某个数据库文件,由于数据库表仍然保留对该数据库引用的后链,因此这些数据库表也不能被添加到其他的数据库中。这时需要利用 (8) 命令删除存储在数据库表中的后链,使之成为自由表。

8. 用INSERT-SQL命令在XS(学生)表中添加如下表格所示的记录,可使用命令:

INSERT INTO xs(xh,jl,csrq) (9) (\获得三好学生称号\字段名与类型 值 XH(字符型) E9999 获得三好学生称号 XS.DBF 含义 学号 姓名 性别 出生日期 JL(备注型) CSRQ(日期型) 1988.07.14. 9. 某数据库SJK中包含XS(学生)表,其基本结构如下:

字段名 XH XM XB CSRQ 字段类型及宽度 C(10) C(8) C(2) D 若规定每位学生的生日补贴100元,可用下列SELECT-SQL命令查询并显示各个月份出生学生的人数和各月份的补贴总额,要求输出月份、人数、补贴总额,且结果按补贴总额降序排序。

SELECT (10) AS 月份, COUNT(*) AS 人数,; (11) AS 补贴总额 ;

FROM sjk!xs; GROUP BY 1;

ORDER BY 3 (12) XH为表达式创建了主索引):

字段名 XH XM XDH XS.DBF 含义 字段类型及宽度 学号 C(10) 姓名 C(8) 系代号 C(2)

字段名 XH CJ BZ CJ.DBF 含义 字段类型及宽度 学号 C(10) 成绩 N(3) 备注 M

10. 某数据库SJK中包含学生表(XS.DBF)和成绩表(CJ.DBF),表的结构如下(注:两个表均以

基于学生表和成绩表,可用下列SELECT-SQL命令查询各系学生考试合格的人数(注:成绩大于或等于60分为合格),要求查询系代号、系人数、系合格人数。

SELECT Xs.xdh AS 系代号, COUNT(*) AS 系人数, ; SUM( (13) ) AS 系合格人数,; FROM sjk!xs INNER JOIN sjk!cj ; ON Xs.xh = Cj.xh; GROUP BY (14)

11. 在使用SELECT-SQL命令进行查询时,若要保证在查询结果中无重复记录,可以在查询命令中使用 (15) 关键字(或称为“短语”或“子句”)。

12.形状控件(Shape)的Curvature属性用于控制其曲率,其取值范围为 (16) 。 13.对于表单的Load、Activate和Init这三个事件来说, (17) 事件的处理代码中不能引用表单中的对象, (18) 事件最后一个被触发。

14.若某表单上包含一个页框控件,页框上包含的页面数是未知的(或者说是动态变化的),则在刷新表单时为了刷新页框中的所有页面,可在页框的Refresh 方法中包含如下的代码: FOR i=1 TO THIS. (19) THIS.Pages[i].Refresh ENDFOR

15.某表单上分别有一个标签Label1、文本框Text1、命令按钮组CommandGroup1和计时器Timer1

控件(运行时如下图所示)。

在设计时,计时器的Interval属性值已设置为500、Enabled属性值已设置为.F.(即不启用),且已为计时器的Timer事件设置了事件处理代码,其功能是使文本框显示当前的系统日期与时间。命令按钮组中包含3个命令按钮,依次为“启用”、“暂停”和“退出”,其功能分别为启用计时器控件、不启用计时器控件和关闭表单,完善如下的命令按钮组的Click事件处理代码:

DO CASE

CASE THIS.Value=1

THIS. (20) .Timer1.Enabled=.T. THISFORM.Timer1.Enabled=.F. (21)

CASE THIS.Value=2 CASE THIS.Value=3 ENDCASE

16.某表单上有一个表格控件,其列数为7。若要使其第3~7列的标头(Header)的标题依次显示为:成绩1、成绩2、成绩3、成绩4、成绩5,则可在表格的Init事件处理代码中包含下列程序段。

FOR i=3 TO 7

THIS. (22) .Header1.Caption=\成绩\(23)

ENDFOR

17.设某表单上包含一个文本框控件,若要使该文本框获得焦点时能自动选中其中的所有文本,可在文本框的 GotFocus事件中包含下面几行代码:

TextBox::GotFocus

&&操作符 :: 用来从子类方法中执行父类的方法

THIS.SelStart = (24)

THIS.SelLength = LEN(ALLTRIM(THIS.Value))

注:SelStart属性指定选定文本的起始点,若没有选定文本则表示插入点(即光标)的位置(该设置的有效范围从0到控件编辑区域中字符的总数);SelLength属性指定被选择的字符数(该设置的有效范围从0到控件中字符的总数,小于 0 将导致运行错误)。

18.若已设计并生成了单文档界面(SDI)的菜单程序文件menua。现要求将该SDI菜单附加到某表单上,除了将表单设置为“作为顶层表单”外,还应该在表单的INIT事件中包含下列命令以运行菜单程序: (25) WITH THIS, .T.

19.完善下列程序,其功能是统计一个仅由数字组成的字符串中各种数字字符的个数: 【程序清单】 CLEAR

cStr=\ DO WHILE LEN(cStr)>0

c=LEFT(cStr,1) n&c.= (26) cStr= (27)

&&字符串初初值

STORE 0 TO n0, n1, n2, n3, n4, n5, n6,n7, n8, n9 &&计数变量

ENDDO

? n0, n1, n2, n3,n4, n5, n6,n7, n8, n9

20.完善下列自定义函数NoSpace(),其功能是将一个字符串中的所有空格删除。

FUNCTION NoSpace PARAMETERS cStr cResult=SPACE(0) FOR n=1 TO LEN(cStr)

IF SUBSTR(cStr,n,1)=SPACE(1)

(28) ENDIF

cResult= cResult+ SUBSTR(cStr,n,1)

ENDFOR

RETURN cResult ENDFUNC

21.下列程序运行后,X的值为 (29) ,Y的值为 (30) 。 【程序清单】

CLEAR x=26 y=0

IF INT(x/2)=x/2 y=MOD(x,3) x=x+4 ENDIF

IF INT(x/3)=x/3 y=MOD(x,-4) ENDIF ?x ?y

2007秋 笔试参考答题

一、选择题 (用答题卡答题,答案依次填在21~30答题号内)

21. 26. C A 22. 27. B A 23. 28. B D 24. 29. C C 25. 30. D B

后表单运行时如图2所示。

1. 修改表单有关属性,使表单运行时自动居中,边框样式为“固定对话框”,标题为“查询”。 2. 修改下拉列表框的RowSource属性,使其下拉列表中显示MZ视图中的两列数据。

3. 在下拉列表框控件与表格控件之间添加一个标签控件,并将其对象名改为Lmz,显示文本为“所有民族”。 4. 设置表格控件的数据源,要求RecordSourceType属性为“别名”,RecordSource属性为JS表。

5. 为下拉列表框控件的InteractiveChange事件编写事件代码,其功能是根据下拉列表框中选择的值,修改标签Lmz的标题,并使表格中显示相应民族的教师数据。要求是:首先修改表单的UserMethod方法程序(完善一条命令、在空白处添加一条命令),然后在下拉列表框控件的InteractiveChange事件中调用该UserMethod方法。

6. 为“打印”命令按钮编写Click事件代码,要实现的功能是预览报表文件RTEST。

五、程序改错(5分)

下列程序的功能是:统计一个字符串中包含的汉字、英文字母及其它字符个数。要求: ① 将下列程序输入到项目中的程序文件PCODE中,并对其中的2条错误语句进行修改; ② 在修改程序时,不允许修改程序的总体框架和算法,不允许增加或减少语句数目。

c=\数据库 \

STORE 0 TO hz, yw, qt &&变量分别用于汉字、英文字母和其它字符计数 DO WHILE c >0 x=ASC(LEFT(c,1)) IF x>127 hz=hz+1 c=SUBS(c,3) ELSE IF x>64 AND x<91 OR x>96 AND x<123 yw= yw+1 ELSE qt=qt+1 ENDIF c=SUBS(c, 3) ENDIF ENDDO

WAIT WIND \汉字:\英文字母:\其它字符:\

VFP04

一、项目、数据库和表操作(12分)

开练习盘根目录中的项目文件JXGL,在该项目中已有一数据库JXSJ。 1. 按下列要求在数据库JXSJ中新建一个表名为AB的数据库表。 (1)按下表所示创建AB表的表结构(包括字段的标题属性): 字段名 RQ BH XSSL KPSL 标题 日期 编号 销售数量 开票数量 类型 D C N N 长度 10 6 6 小数位数 0 0 (2)设置RQ字段的默认值:为系统当前日期;

(3)为表设置有效性规则:KPSL小于或等于XSSL;

(3)为表创建一个普通索引abcd,要求按RQ字段排序,相同时按BH字段排序。

2. 为教材(JC)表设置插入触发器:国际标准图书编号(ISBN字段)必须以“IS”开头,否则不允许插入。 3. 为成绩(CJ)表增加一个平时成绩字段(字段名为PSCJ),其类型和宽度与成绩(CJ)字段相同,并将所有记录的PSCJ置为85。

4. 已知教师(JS)表和课程安排(KCAP)表存在相同的工号(GH)字段,以JS表为主表,KCAP表为子表,按GH建立永久关系,并设置JS表和KCAP表之间的参照完整性:删除限制。

5

二、设计查询(8分)

已知课程安排(KCAP)表是用来存储各学期各班教学课程安排信息的表,其中含有学期编码(XQBM,C)、班级编号(BJBH,C)和课程代码(KCDM,C)等字段,课程(KC)表中含有课程代码(KCDM,C)、课程名称(KCMC,C)和课时数(KSS,N)等字段。按如下要求修改JXGL项目中的查询CHAXUN:

基于KCAP表和KC表统计班级编号为“040202”班每学期的开课门数和总课时数。要求输出字段为:学期编码、开课门数、总课时数,查询结果按学期编码排序。

三、设计菜单(5分)

JXGL项目中已存在菜单MENU,其中已定义了“文件”菜单栏及其中的“退出菜单”项。按如下要求设计菜单,完成后的运行效果如图1所示。

1. 创建“运行”菜单栏,并创建其子菜单项“PRG程序”和“表单程序…”; 2. 将菜单项“PRG程序”中的“P”字母设置为访问键“ALT + P”; 3. 在菜单项“PRG程序”和“表单程序…”之间插入分组线。 4. 指定“表单程序…”菜单执行命令:DO FORM ?。 四、设计表单(10分)

表单F072B用于根据所选择民族,显示所选民族的教师工号(gh)与姓名(xm),其数据源为数据库中的视图MZ和表JS。按下列要求修改表单,修改后表单运行时如图2所示。

1. 修改表单的有关属性,使表单运行时自动居中。

2. 修改下拉列表框的有关属性,使其下拉列表中显示MZ视图中的两列数据。

3. 设置表格控件的数据源,要求RecordSourceType属性为“SQL说明”,RecordSource属性值设置为“SELECT gh, xm FROM js INTO CURSOR temp”。

4. 在表格控件上面添加一个文本框控件,将其对象名改为Tmz,Value属性值为“所有民族”,且将该控件设置为不能响应用户引发的事件。

5. 为下拉列表框控件的InteractiveChange事件编写事件代码,其功能是根据下拉列表框中的选择(所选民族)控制文本框Tmz的Value属性值和表格中显示的数据。要求是:用两条命令分别设置文本框Tmz的Value属性值和表格的RecordSource属性值。

6. 修改表单上的命令按钮控件,将其标题改为“退出”,访问键为ALT+X。

五、程序改错(5分)

下列程序是对“.86*75*85*87*67*78.32.70*81*90.80*84*81”密码进行解码,规则是:\号后的两位数字作为ASCII码转换为字符,\号后的两位数字加30作为ASCII码转换为字符,例如,将\解码为:\。要求:

① 将下列程序输入到项目中的程序文件PCODE中,并对其中的2条错误语句进行修改; ② 在修改程序时,不允许修改程序的总体框架和算法,不允许增加或减少语句数目。

m=SPACE(0)

STORE \ TO c, cc DO WHILE LEN(c)>0

d=LEFT(c, 1) c=SUBS(c, 2) n=0 IF d=\

6

m=m+CHR(VAL(LEFT(c, 2))) m=m+CHR(VAL(LEFT(c, 2))+30)

ELSE ENDDO c=SUBS(c, 2)

ENDDO

WAIT WINDOW cc+\解密后的代码为:\

VFP05

一、项目、数据库和表操作(12分)

打开练习盘根目录中的项目文件JXGL,在该项目中已有一数据库JXSJ。 1. 按下列要求在数据库JXSJ中新建一个表名为AB的数据库表。 (1)按下表所示创建AB表的表结构(包括字段的标题属性): 字段名 XH TSBH JYRQ YQTS 标题 学号 图书编号 借阅日期 逾期天数 类型 C C D N 长度 10 20 3 小数位数 0 (2)设置TSBH字段的格式属性,使之在输入时字母均转变为大写字母; (3)为JYRQ字段设置有效性规则:借阅日期不允许在当前系统日期之后;

(4)为表创建一个普通索引abcd,要求按XH字段排序,相同时按JYRQ字段排序。 2. 为教材(JC)表设置插入触发器:单价(DJ字段)超过30元的不允许插入。

3. 针对成绩(CJ)表,根据成绩(CJ)字段的值修改备注(BZ)字段的值:CJ大于或等于85,BZ字段的值为“优”。

4. 已知院系专业信息(YXZY)表和学生(XS)表存在相同的院系专业代码(YXZYDM)字段,以YXZY表为主表、XS表为子表,按YXZYDM 建立永久关系,并设置YXZY表和XS表之间的参照完整性:插入限制。 二、设计查询(8分)

已知课程(KC)表中含有课程代码(KCDM,C)、课程名称(KCMC,C)等字段,在成绩(CJ)表中含有学生的学号(XH,C)、成绩(CJ,N)、课程代码(KCDM,C)等字段,按如下要求修改JXGL项目中的查询CHAXUN:

基于KC表和CJ表统计各门课程的学习人数、平均分。查询的输出字段为:KCDM、KCMC、学习人数、平均分,要求统计结果中仅包含平均分在75(含75)以上的那些课程,且按平均分降序排序。 三、设计菜单(5分)

JXGL项目中已存在菜单MENU,其中已定义了“文件”菜单栏及其中的“退出菜单”项。按如下要求设计菜单,完成后的运行效果如图1所示。

1. 在“文件”菜单栏下创建“新建…”子菜单项; 2. 在“文件”菜单栏下插入系统菜单“打开”;

3. 在菜单项“打开”和“退出菜单”之间插入分组线。

4. 为菜单项“退出菜单”设置快捷键“CTRL+X”和状态栏提示信息“恢复系统菜单”。

四、设计表单(10分)

表单F072C用于根据所选择课程,显示学生的考试成绩。按下列要求修改表单,修改后表单运行时如图2所示。

1. 修改表单的有关属性,使表单无最大化、最小化按钮,图标为PC.ICO文件。

7

2. 修改组合框的InteractiveChange事件代码,其功能是:根据组合框中选择的课程,表格中显示相应课程的成绩(要求:在原代码的倒数第2行增加一条SET命令来实现)。

3. 修改表格的有关属性,使其无水平滚动条,无删除标记列,且表格中的数据只读。 4. 删除表单上的复选框控件。

5. 修改表单的ForSave方法程序代码,要求在原代码之后增加一条命令,其功能是:将当前工作区中打开的表复制到一个新文件中,且新文件的文件名由cFile变量指定,新文件类型为.XLS。

6. 添加一个命令按钮,标题为“保存”、访问键为ALT+S(如图2所示),并设置其Click事件处理代码,其功能是调用表单的ForSave方法程序。

五、程序改错(5分)

下列程序的功能是:找出3000以内的亲密数对。所谓“亲密数对”是指一对正整数A和B,A的所有小于A的因子(1视为因子)之和等于B,B的所有小于B的因子(1视为因子)之和等于A。第一个循环将1~3000个数的“因子和”存放到一维数组Arr中,例如Arr(20)存放的是数20的具上述含义的所有因子之和。第二个循环是基于数组Arr找出亲密数对。要求:

① 将下列程序输入到项目中的程序文件PCODE中,并对其中的2条错误语句进行修改; ② 在修改程序时,不允许修改程序的总体框架和算法,不允许增加或减少语句数目。

DIMENSION Arr(3000) FOR i=1 TO 3000 Myzh=0

FOR j=1 TO i

Myzh=Myzh+IIF(MOD(i, j)=0, j, 0)

ENDFOR Arr(i)=Myzh ENDFOR

FOR i=1 INTO 3000 a=i b=Arr(i)

IF a

?a, b ENDIF

ENDFOR

VFP06

一、项目、数据库和表操作(12分)

打开练习盘根目录中的项目文件JXGL,在该项目中已有一数据库JXSJ。 1. 按下列要求在数据库JXSJ中新建一个表名为AB的数据库表。 (1)按下表所示创建AB表的表结构(包括字段的标题属性): 字段名 XH TSBH JYRQ HSRQ 标题 学号 图书编号 借阅日期 还书日期 类型 C C D D 长度 10 20 小数位数 (2)为表设置有效性规则:还书日期(HSRQ字段)必须在借阅日期(JYRQ字段)之后,至少在同一天; (3)为JYRQ字段设置默认值:等于当前系统日期;

(4)为表创建一个普通索引abcd,要求按XH字段排序,相同时按借阅天数排序(借阅天数为HSRQ与JYRQ之差)。

2. 为成绩(CJ)表设置更新触发器:成绩(CJ字段)必须大于或等于0,且小于或等于100。 3. 为教师(JS)表增加一个工龄字段(字段名为GL,类型为整型),并为它赋值:工龄等于当前系统日期的

8

年份减去工作日期(GZRQ字段)的年份。

4. 已知院系专业信息(YXZY)表和JS表存在相同的院系专业代码(YXZYDM)字段,以YXZY表为主表、JS表为子表,按YXZYDM 建立永久关系,并设置YXZY表和JS表之间的参照完整性:更新级联。

二、设计查询(8分)

已知课程(KC)表中含有课程代码(KCDM,C)、课程名称(KCMC,C)等字段,在成绩(CJ)表中含有学生的学号(XH,C)、成绩(CJ,N)、课程代码(KCDM,C)等字段,按如下要求修改JXGL项目中的查询CHAXUN:

基于KC表和CJ表统计所有课程的学习人数、平均分,查询的输出字段为:KCDM、KCMC、平均分。要求统计结果中包含KC表中的所有课程,若CJ表中无某课程相关学生的成绩记录,则该课程的 “平均分”显示为NULL值;统计结果按平均分降序排序,相同时按课程代码升序排序。(提示:使用左联接。) 三、设计菜单(5分)

JXGL项目中已存在菜单MENU,其中已定义了“文件”菜单栏及其中的“退出菜单”项。按如下要求设计菜单,完成后的运行效果如图1所示。

1. 创建“教学管理”菜单栏,并创建其子菜单“课程”、“教师”和“学生”; 2. 设置“课程”菜单项的热键“ALT+K”;

3. 为“课程”菜单项设置SELECT-SQL命令,以显示KC表中的所有数据; 4. 为 “学生” 菜单项设置快捷键“CTRL+T”。

四、设计表单(10分)

表单F072D用于根据所选择的数据库表,显示其结构信息(标题、字段名和数据类型)。按下列要求修改表单,修改后表单运行时如图2(a)所示,选择JS表后如图2(b)所示。

1. 将表单的标题修改为“查看表结构”,且表单运行时自动居中。 2. 如图2所示,在表单上添加一个列表框控件(ListBox),且要求其对象名为List1,高度为200,宽度为260。 3. 修改表单的DisplayTS方法程序代码,要求在原代码的“ENDFOR”前一行增加一条命令,其功能是将变量cItem的值添加到列表框中。

4. 修改表单上的命令按钮,要求其标题为“选择数据库表”,访问键为ALT+S,其大小为自动调整,并设置其Click事件处理代码,要求利用2条命令实现:先清除列表框中的内容(提示:调用列表框的Clear方法),然后调用表单的DisplayTS方法。

五、程序改错(5分)

下列程序是将\编成密码,规则是:对其中的小写字母,用该字母的ASCII码减 30代替原字母,且前面加星号(*); 大写字母或其它符号用其ASCII码代替,且前面加点号(.),例如字符串“A bc”(4个字符)的密码为“.65.32*68*69”。要求:

① 将下列程序输入到项目中的程序文件PCODE中,并对其中的2条错误语句进行修改; ② 在修改程序时,不允许修改程序的总体框架和算法,不允许增加或减少语句数目。

9

MIN(YEAR(DATE())-YEAR(CSRQ)) AS 最小年龄; FROM jxsj!js INNER JOIN jxsj!whcd ; ON Js.whcd = Whcd.dm;

GROUP BY Js.zc, Whcd.mc; 或 GROUP BY Js.zc, 2; ORDER BY Js.zc, Whcd.mc 或 ORDER BY Js.zc, 2; 三、 设计菜单 命令/过程: 四、 题号 1 设计表单 对象名 Form1 属性/事件/方法名 Caption AutoCenter Icon 2 3 4 Mzw Form1 Mzw Caption DataEnvironment Interactivechange 属性值/代码 代码表 .t. pc.ico 民族(\\

第10行改为:IF m>c(t) 第15行改为:ENDFOR

参考答案 VFP02

一、 项目、数据库和表操作 字段有效性规则:YEAR(csrq)>=1980

索引表达式 abcd STR(YEAR(DATE())-YEAR(csrq))+xb 更新触发器:删除触发器 .F.

二、 设计查询

SELECT Js.zc AS 职称, Zzmm.mc AS 政治面貌名称, COUNT(*) AS 人数,; AVG(YEAR(DATE())-YEAR(CSRQ)) AS 平均年龄; FROM jxsj!js INNER JOIN jxsj!zzmm ; ON Js.zzmm = Zzmm.dm; GROUP BY Js.zc, Js.zzmm; ORDER BY Js.zc, Zzmm.mc 三、

设计菜单

15

命令/过程:

exeFile=GETFILE(\RUN/N &exeFile 四、 题号 1 2 3 4 5 四、设计表单 对象名 Form1 grdmz Form1 Label1 Combo1 属性/事件/方法名 Caption DeleteMark ScrollBars DataEnvironment Caption Style RowSource RowSourceType InteractiveChange 属性值/代码 代码表 .f. 2 Zzmm whcd 选择类型 2 民族,政治面貌,文化程度 值 DO CASE CASE THIS.Value=\民族\ c=\ CASE THIS.Value=\政治面貌\ c=\ CASE THIS.Value=\文化程度\ c=\ENDCASE THISFORM.Grdmz.RecordSource=c 五、 程序改错 第9行改为:??

第16行改为:+STR(Mmax)

参考答案 VFP03

一、 项目、数据库和表操作 输入掩码 AXXX

字段有效性规则:LEFT(bh1,1)=LEFT(bh2,1) 索引表达式 xh desc

更新触发器:VAL(LEFT(cbnf,4))<2000 或 cbnf<’2000’ 参照完整性规则:更新级联

二、 设计查询

SELECT Kcap.bjbh AS 班级编号, COUNT(*) AS 开课门数,; SUM(KSS) AS 总课时数;

FROM jxsj!kcap INNER JOIN jxsj!kc ; ON Kcap.kcdm = Kc.kcdm;

WHERE Kcap.xqbm = \学年第1学期\ GROUP BY Kcap.bjbh; ORDER BY Kcap.bjbh

三、 设计菜单

命令/过程:_SCREEN.BackColr=RGB(255,255,255)

16

四、 题号 1 设计表单 对象名 Form1 属性/事件/方法名 Autocenter Borderstyle Caption 属性值/代码 .T. 2 查询 mz ‘Lmz’ 所有民族 js SET FILTER TO js.mzdm=x THISFORM.Lmz.CAPTION=mz.mc THISFORM.Usermethod() REPORT FORM rtest PREVIEW 2 3 3 4 5 Combo1 Label1 Grid1 Form1 Combo1 RowSource Name Caption RecordSource UserMethod InteractiveChange 6 Command1 Click 五、 程序改错

第5行改为:LEN(c)>0 第16行改为:SUBSTR(c,2)

参考答案 VFP04

一、 项目、数据库和表操作 默认值:DATE()

有效性规则:kpsl<=xssl 索引表达式:DTOC(rq,1)+BH

触发器:ISBN='IS' 或 Left(ISBN,2)=\

二、 设计查询

SELECT Kcap.xqbm AS 学期编码, COUNT(*) AS 开课门数,; SUM(KSS) AS 总课时数;

FROM jxsj!kcap INNER JOIN jxsj!kc ; ON Kcap.kcdm = Kc.kcdm; WHERE Kcap.bjbh = \ GROUP BY Kcap.xqbm; ORDER BY Kcap.xqbm 三、 设计菜单 命令/过程:do form ? 四、 题号 1 2 3 4

设计表单 对象名 Form1 Combo1 Grid1 Tmz 属性/事件/方法名 AutoCenter RowSource RecordSourceType RecordSource Name 属性值/代码 .T. mz 4 SELECT gh,xm FROM js INTO CURSOR temp Tmz 17

Value Enabled Combo1 5 InteractiveChange 所有民族 .F. THISFORM.Tmz.Value=mz.mc THISFORM.Grid1.RecordSource=\gh,xm FROM js WHERE mzdm=THIS.Value INTO CURSOR temp\退出(\\

第12行改为:c=SUBS(c,3)

参考答案 VFP05

一、 项目、数据库和表操作 字段格式:!

字段有效性规则:jyrq<=DATE() 或 DATE()-jyrq>=0 或jyrq-DATE()<=0 索引表达式:xh+DTOC(jyrq,1) 触发器:dj<=30 或 dj-30<=0

二、设计查询

SELECT Kc.kcdm, Kc.kcmc, COUNT(*) AS 学习人数, AVG(CJ.CJ) AS 平均分; FROM jxsj!kc INNER JOIN jxsj!cj ; ON Kc.kcdm = Cj.kcdm; GROUP BY Kc.kcdm; HAVING 平均分 >= 75; ORDER BY 4 DESC

三、设计菜单

命令/过程: 四、设计表单

题号 1 对象名 Form1 属性/事件/方法名 MaxButton MinButton Icon 2 3 4 5 Combo2 Grid1 Form1 命令按钮 InteractiveChange事件 DeleteMark ScrollBar ForSave Caption Click 五、程序改错

第4行改为:FOR j=1 TO i-1 第9行改为:FOR i=1 TO 3000

属性值/代码 .F. .F. .\\pc.ico SET FILTER TO kcdm=x .F. 2 COPY TO &cFile XLS 保存(\\

一、

项目、数据库和表操作

18

有效性规则:hsrq>=jyrq 或 jyrq<=hsrq 或hsrq-jyrq>=0 或jyrq-hsrq<=0 默认值:DATE()

索引表达式:xh+STR(hsrq-jyrq)

更新触发器:cj>=0 AND cj<=100 | BETWEEN(cj,0,100) 修改数据:update js set gl=year(date())-year(gzrq) 二、 设计查询

SELECT Kc.kcdm, Kc.kcmc, AVG(CJ.CJ) AS 平均分; FROM jxsj!kc LEFT OUTER JOIN jxsj!cj ; ON Kc.kcdm = Cj.kcdm; GROUP BY Kc.kcdm;

ORDER BY 3 DESC, Kc.kcdm 三、 设计菜单

命令/过程:SELECT * FROM kc 四、 题号 1 2 设计表单 对象名 Form1 List1 属性/事件/方法名 Caption AutoCenter Name Height Width 3 4 Grid1 DisplayTS方法 AutoSize Click Command1 Caption 属性值/代码 查看表结构 .T. List1 200 260 THISFORM.List1.ADDITEM(cItem) 选择数据库表(\\

第 3行改为:FOR i=1 to LEN(c)

第11行改为:WAIT WINDOW c+\密码为\

参考答案 VFP07

一、 项目、数据库和表操作

字段有效性规则:.NOT.EMPTY(zgld).AND.!ISNULL(zgld) 字段格式:!A

索引表达式: bmlb+bmbh

更新触发器:xqbm=\学年第2学期 \

二、 设计查询

SELECT Cj.xh AS 学号, SUM(IIF(Cj.cj=>60,xf,0)) AS 总学分,; COUNT(*) AS 课程门数;

FROM jxsj!kc INNER JOIN jxsj!cj ; ON Kc.kcdm = Cj.kcdm; GROUP BY Cj.xh;

ORDER BY 2 DESC, Cj.xh

19

(2) 修改罚款(fk)字段的宽度,要求该字段能存储3位整数、1位小数。 (3) 设置lx字段的标题属性,使该字段的字段名在浏览窗口中显示为“读者类型”。 (4) 设置lx字段的有关属性,使该字段中输入的字母均为大写字母。 (5) 创建一个普通索引abcd,要求以读者类型(lx)字段进行排序,相同时以读者号(dzh)字段排序。 2. 用COPY TO 命令,将JY表中dzh字段值的前二位为“01”而且hsrq字段值不为空的记录复制到JYB表中

(存储在练习盘根目录中)。(提示:条件中可使用 Empty()函数) 3. 修改项目文件TEST的项目信息:邮政编码为“210093”。

4. KC表和CJ表已分别存在以kcdh字段为索引表达式的主索引kcdh和普通索引cjkcdh。以KC表为主表、

CJ表为子表,基于kcdh字段建立永久关系,并根据以下要求设置参照完整性规则:当在KC表中删除记录时,若CJ表中有相应的记录(kcdh字段的值),则同时删除CJ表中相应记录。 练习20

打开练习盘根目录中的项目文件TEST,在该项目中已有一数据库SJK及若干表。 1. 按以下要求修改SJK数据库中JY表:

(1) 设置表的触发器:当分类号(flh)字段值为空字符串时才能删除记录。 (2) 设置hsrq字段的有效性规则和有效性说明:要求其值不超过当前系统日期。 (3) 将hsrq字段的标题设置为“还书日期”。 (4) 创建一个普通索引abcd,要求以借阅日期(jyrq)字段进行排序,相同时以分类号(flh)字段排序。

2. 计算JY表中读者类型(lx)为“J”的记录的罚款(fk)字段的值,算法是:如果还书日期(hsrq)减去借阅日

期(jyrq)大于60天,则超过60 天部分按0.10 元/天计算。 3. 修改项目TEST的项目信息:城市为“南京市”。

4. ZY表和XS表已分别存在以zydh字段为索引表达式的主索引zydh和普通索引xszydh。以ZY表为主表、

XS表为子表,基于zydh字段建立永久关系,并根据以下要求设置参照完整性规则:当在ZY表中修改和删除记录时,若xs表中有相应的记录(zydh字段的值),则同时修改和删除XS表中相应记录。 练习21

打开练习盘根目录中的项目文件TEST,在该项目中已有一数据库SJK及若干表。 1. 按以下要求修改SJK数据库中GZ表: (1) 将ylbx字段的标题设置为“医疗保险”。 (2) 设置gh字段的有关属性,使得gh字段值的首字符为大写英文字母、后四个字符只能为数字字符。 (3) 设置gh字段的有关属性,使得将该字段从表单的数据环境中拖放到表单上时,生成的相应控件为下拉组

合框控件。 (4) 设置表的记录级有效性规则,要求ylbx小于或等于jbgz的8%。 (5) 创建一个普通索引abcd,要求以gh字段进行排序,相同时以jbgz字段排序。 2. 计算gz表中ylbx字段的值:ylbx=jbgz×8%

3. 利用项目管理器操作:将数据库表ZY改为自由表,并将其添加到项目中。

4. GZ表和JS表已分别存在以gh字段为索引表达式的主索引gzgh1和主索引jsgh。以GZ表为主表、JS表为

子表,基于gh字段建立永久关系,并根据以下要求设置参照完整性规则:当在GZ表中删除记录时,若JS表中有相应的记录(gh字段的值),则禁止删除GZ表中相应记录。

练习22

打开练习盘根目录中的项目文件TEST, 在该项目中已有一数据库SJK及若干表。 1. 按以下要求修改SJK数据库中XS表: (1) 添加一个逻辑型字段,字段名为 dty,并为其设置标题属性:“党团员”。 (2) 添加一个字符型字段,字段名为rxny、宽度为6,并设置默认值:系统日期的年和月份。例如,若当前系

统日期为2006年7月27日,则rxny字段值为“200607”。 (3) 为XS表添加表注释:学生基本信息表。 (4) 创建一个普通索引abcd,要求以rxny字段进行排序,相同时以csrq字段排序。 2. 计算gz表中zfgj字段的值:zfgj= jbgz×12%

3. 利用项目管理器操作:将XIM表改名为XIMB表,并为其设置编辑说明“系名表”。

4. ZY表和XS表已分别存在以zydh字段为索引表达式的主索引zydh和普通索引xszydh。以ZY表为主表、XS表为子表,基于zydh字段建立永久关系,并根据以下要求设置参照完整性规则:当在ZY表中修改和删除记录时,若XS表中有相应的记录(zydh字段的值),则禁止对ZY表进行修改和删除。 练习23

打开练习盘根目录中的项目文件TEST,在该项目中已有一数据库SJK及若干表。

25

1. 按以下要求修改SJK数据库中工资(GZ)表:

(1) 添加一个备注型字段,字段名为 sdssm,并为其设置标题“所得税说明”。 (2) 设置表的记录级有效性规则,要求sfgz不大于yfgz(对已有数据不作验证)。 (3) 创建一个普通索引abcd,要求以grsds字段进行排序,相同时以gh字段排序。 2. 计算gz表中zfgj字段的值:jbgz小于1000时为100,否则为jbgz×10%后“园整”(四舍五入)到百位。

例如123.5园整后为100、151.2园整后为200、251.61园整后为300等等(提示:用ROUND()函数)。 3. 将自由表GZB中职称(zc)为“教授”的记录复制到练习盘根目录下的GZB1表中,然后将GZB1表添加

为项目中的自由表并设置为“包含”。

4. XS表和CJ表已分别存在以xh字段为索引表达式的主索引xsxh和普通索引cjxh。以XS表为主表、CJ表

为子表,基于xh字段建立永久关系,并根据以下要求设置参照完整性规则:在XS表中修改记录时,若CJ表中有相关的记录,则同步对CJ表进行修改;在XS表中删除记录时,若CJ表中有相关的记录,则禁止对XS表进行删除。

练习24

打开练习盘根目录中的项目文件TEST, 在该项目中已有一数据库SJK及若干表。 1.按如下要求修改SJK中课程(KC)表的结构:

(1) 将学分(xf)字段的标题设置为“学分”;

(2) 设置学分(xf)字段的有效性(验证)规则:大于或等于2,且小于或等于10; (3) 设置KC表的记录级有效性规则:kss大于或等于xf;

(4) 对课程代号(kcdh)字段设置输入掩码:只接受4个数字字符;

(5) 创建一个普通索引abcd,要求先按xf字段排序,xf相同时再按kcdh字段排序; (6) 为KC表添加编辑说明为“课程信息表”; (7) 为KC表设置删除触发器:不允许删除。 2. SJK中KC表已存在主索引kcdh(索引表达式为kcdh),CJ表已存在普通索引cjkcdh(索引表达式为kcdh)。

以KC表为主表、CJ表为子表,基于kcdh字段建立永久关系,并设置KC表和CJ表之间的参照完整性:在CJ表中输入记录时,若kcdh在KC表中不存在,则不允许输入。

二、设计查询练习

在TEST项目中已经存在查询chaxun 练习9

已知在SJK数据库的学生(XS)表中含有学号(xh)、姓名(xm)等字段,成绩(CJ)表中含有学号(xh)、成绩(cj)等字段。按如下要求修改查询CHAXUN:

基于XS表和CJ表查询两门或两门以上课程成绩不及格(即低于60)的学生,要求输出xh、xm和不及格课程门数,查询结果按不及格门数降序排序,相同时按学号排序。 练习10

已知在SJK数据库的系名(XIM)表中含有系代号(xdh)、系名(ximing)等字段,学生(XS)表中含有学号(xh)、姓名(xm)、出生日期(csrq)、系代号(xdh)等字段。按如下要求修改查询CHAXUN:

基于XIM表和XS表查询各系的学生人数及平均年龄,要求输出字段为xdh、ximing、人数和平均年龄,查询结果按人数降序排序,且查询结果输出至文本文件abc。 练习11

已知在SJK数据库的教师(JS)表中含有工号(gh)、姓名(xm)、职称代号(zcdh)等字段;工资(GZ)表中含有工号(gh)、工资(jbgz)等字段。按如下要求修改查询CHAXUN:

基于JS表和GZ表查询职称为“教授”(职称代号为“01”)和“副教授”(职称代号为“02”)的教师人数和工资情况。要求输出字段为职称(字段值显示为“教 授”和“副教授”)、人数、最高工资、最低工资和平均工资,结果按平均工资降序排序,且将结果输出至表TEMP。 练习12

已知在SJK数据库的图书(TS)表中含有图书分类号(flh)、出版社(cbs)、价格(jg)和册数(cs)等字段。按如下要求修改查询CHAXUN:

基于TS表查询来源于各出版社的图书入库情况。要求输出字段为:出版社(字段值显示时将尾部的“出版社”这几个字去掉,例如“南京大学出版社”仅显示为“南京大学”)、图书种数、总册数、总金额(注:金额等于价格乘以册数),查询结果按总金额降序排序,且查询结果直接输出至屏幕(即VFP主窗口)。

注:不同的分类号代表不同的图书种类。 练习13

已知在SJK数据库的图书(TS)表中含有图书分类号(flh)、书名(sm)等字段,借阅(JY)表中含有图书分类

26

号(flh)、借阅人员类型(lx)等字段。按如下要求修改查询CHAXUN:

基于TS表和JY表查询各类图书被教师(lx为“J”)和学生(lx为“X”)借阅的次数情况。要求输出字段为:flh、sm、教师借阅次数、学生借阅次数,教师借阅次数和学生借阅次数均为0的记录不显示,查询结果按教师借阅次数降序排序。 练习14

已知在SJK数据库的系名(XIM)表中含有系代号(xdh)、系名(ximing)等字段,教师(JS)表中含有工号(gh)、姓名(xm)、系代号(xdh)、email地址(email)等字段。按如下要求修改查询CHAXUN:

基于XIM表和JS表查询各系在yahoo网站上注册的信箱个数。要求输出字段为xdh、ximing和注册人数,查询结果按注册人数降序排序,且输出至表TEMP。

提示:yahoo网站上注册的信箱是指在email地址中含有“@yahoo.com”子字符串。 练习15

已知在SJK数据库的系名(XIM)表中含有系代号(xdh)、系名(ximing)等字段,教师(JS)表中含有工号(xh)、姓名(xm)、系代号(xdh)、出生日期(csrq)等字段。按如下要求修改查询CHAXUN:

基于XIM表和JS表查询各系青年教师的人数和平均年龄,要求输出字段包括xdh、ximing、人数、平均年龄,结果按人数降序排序,人数相同时按平均年龄排序。

注:青年教师是指年龄不满35岁的教师。 练习16

已知学生(XS)表中含学号(xh)、姓名(xm)、性别(xb)、班级编号(bjbh)等字段;成绩(CJ)表中含有学号(xh)、课程代号(kcdh)、成绩(cj) 等字段。按如下要求修改查询CHAXUN:

基于XS表和CJ表查询:从成绩上看各位学生是否为优秀生。要求输出的字段为:xh、xm、平均分、最低分、优秀生(若为优秀生,则该字段的值为“是”,否则为“否”),输出结果按是否优秀生排序(“是”排在前),相同时再按平均分降序排序。

注:优秀生的条件是各门课的平均分不低于80且每门课的成绩不低于75。 练习17

已知在SJK数据库的学生(XS)表中含有学号(xh)、姓名(xm)、性别(xb)等字段;成绩(CJ)表中含有学号(xh)、课程代号(kcdh)、成绩(cj)等字段。按如下要求修改查询CHAXUN:

基于XS表和CJ表查询课程代号为01~09的各门课程男女学生的人数、最高分和平均分,要求输出kcdh、xb、人数、最高分和平均分,且查询结果输出至屏幕(即VFP主窗口)。 练习18

已知在SJK数据库的系名(XIM)表中含有系代号(xdh)、系名(ximing)等字段,学生(XS)表中含有学号(xh)、姓名(xm)、性别(xb)等字段。按如下要求修改查询CHAXUN:

基于XIM表和XS表查询各系的男女生人数,要求输出字段为xdh、ximing、男生人数和女生人数,查询结果按女生人数降序排序,且男女生人数均为0的系也输出。 练习19

已知在SJK数据库的教师(JS)表中含有工号(gh)、姓名(xm)、系代号(xdh)等字段;工资(GZ)表中含有工号(gh)、工资(jbgz)等字段。按如下要求修改查询CHAXUN:

基于JS表和GZ表查询职称代号为‘02’的各系教师人数、最高工资和平均工资,要求输出字段包括xdh、人数、最高工资、平均工资,结果按平均工资降序排序,且结果输出至临时表TEMP。 练习20

已知在SJK数据库的图书(TS)表中含有图书分类号(flh)、入库日期(rkrq)、价格(jg)和册数(cs)等字段。按如下要求修改查询CHAXUN:

基于图书(TS)表查询2000年(含2000年)以来各年入库的图书情况。要求输出字段为:年份、图书种数、平均价格、总册数、总金额(金额为价格乘以册数),查询结果按年份降序排序,且将查询结果输出至文本文件XYZ。(注:不同的分类号代表不同的图书种类。) 练习21

已知在SJK数据库的图书(TS)表中含有图书分类号(flh)、书名(sm)等字段,借阅(JY)表中含有图书分类号(flh)、读者类型(lx)、读者(dzh)、借阅日期(jyrq)和还书日期(hsrq)等字段。按如下要求修改查询CHAXUN: 基于TS表和JY表查询教师(lx为“J”)借书超过60天、学生(lx为“X”)借书超过45天的图书情况。要求输出字段为:flh、sm、lx、dzh、借阅天数,查询结果按读者类型排序,相同时再按借阅天数降序排序。

练习22

27

已知在SJK数据库的教师(JS)表中含有工号(gh)、姓名(xm)、email地址(email)等字段。按如下要求修改查询CHAXUN:

基于JS表查询各邮件服务器上注册的信箱个数。要求输出字段为:邮件服务器(指email地址中“@”字符后面的部分)和注册人数,查询结果不含无email地址人员的统计,且将注册人数最多的前三条记录输出至临时表TEMP。

练习23

已知在SJK数据库的学生(XS)表中含有学号(xh)、姓名(xm)、性别(xb)等字段。按如下要求修改查询CHAXUN:

基于XS表查询姓名中包含的汉字字数不同的男女生的人数,要求输出字段为:姓名字数(显示为2或3或4,假设汉字均为GBK字符)、xb、人数,查询结果按字数降序排序,相同时按性别排序,且查询结果直接输出至屏幕(即VFP主窗口)。

提示:利用STRTRAN(xx,SPACE(1),SPACE(0))函数可删除字符串xx中的所有空格字符。

练习24

已知SJK数据库的学生(XS)表中包含学号(xh)、姓名(xm)、性别(xb)、班级编号(bjbh)等字段;成绩(CJ)表中包含有学号(xh)、课程代号(kcdh)、成绩(cj)等字段。按如下要求修改查询CHAXUN:

基于XS表和CJ表查询所有获奖学金的同学名单及奖学金的等级。要求输出的字段为xh、xm、选课门数、奖学金等级(字段的内容为“A”或“B”),输出的结果按奖学金等级排序,相同时再按学号升序排序。

注:奖学金等级分为A和B两个等级,A等奖学金的条件是各课程的平均分不低于85,B等奖学金是各课程的平均分不低于75,并且要求获A、B等奖学金获得者应各课程均无不及格成绩(小于60),且选课门数不少于2。

三、 设计菜单练习

练习9

项目TEST中已存在菜单MENU,利用菜单设计器按如下要求修改菜单:

1.如图所示,增加“常用工具”菜单栏及其子菜单(包含分组线、访问键和快捷键的设置);

2.为“练习盘格式化”菜单项设置说明信息:“请插入练习盘!”(即选择该菜单时,在系统的状态栏中显示该信息);

3. 为“计算器”菜单项设置命令:启动Windows中的计算器。

(注:使用命令RUN/n calc.exe)

练习10

项目TEST中已存在菜单MENU,利用菜单设计器按如下要求修改菜单:

1.如图所示,增加“教师管理”菜单栏及其子菜单(包含访问键和快捷键的设置);

2.为“系统管理”菜单中的“恢复系统菜单”菜单项设置命令,功能为:将菜单恢复为VFP系统菜单;

3.在“系统管理”菜单栏下增加VFP系统菜单项“导入”。

练习11

项目TEST中已存在菜单MENU,利用菜单设计器按如下要求修改菜单:

1.如图所示,为“系统管理”菜单栏增加菜单项,其中“退出”为VFP系统菜单项;

2.将“数据恢复”菜单项设置为不可用(即跳过);

28

3. 为“数据备份”菜单项编写过程,要求利用两条命令实现功能:将当前打开的所有表均关闭,然后将所有的表文件复制到D:盘中。(注:复制时可用命令“copy file *.dbf to d:\\”)

练习12

项目TEST中已存在菜单MENU,利用菜单设计器按如下要求修改菜单:

1.如图所示,增加“学生管理”菜单栏及其子菜单(包含分组线、访问键和快捷键的设置);

2.将“帮助”菜单栏设置为不可用(即跳过); 3.为“打印名册”菜单项设置过程,要求:先打开XS表,然后预览报表文件RCJ。 练习13

项目TEST中已存在菜单MENU,利用菜单设计器按如下要求修改菜单:

1.如图所示,增加“数据维护”和“数据查询”菜单栏,并为“数据查询”菜单栏增加子菜单(包含分组线、访问键和快捷键的设置);

2.为“帮助”菜单栏增加VFP系统菜单项“目录”和“索引”;

为新建的“成绩信息”菜单项设置命令:运行表单FormD,并将该菜单项设置为不可用(即跳过)。

练习14

项目TEST中已存在菜单MENU,利用菜单设计器按如下要求修改菜单:

1. 如图所示,为“系统管理”菜单栏增加菜单项及其子菜单(包含分组线、访问键和快捷键的设置); 2. 为“数据备份”菜单项设置说明信息:“备份盘必须有100MB以上的空间”(即选择该菜单时,在系统的状态栏中显示该信息); 3. 为“退出”菜单项设置过程代码,要求用2条命令实现:首先利用SAVE命令将当前内存变量保存到MyMem内存变量文件中,然后退出系统。

练习15

项目TEST中已存在菜单MENU,利用菜单设计器按如下要求修改菜单:

1. 如图所示,增加“图书管理”菜单栏及其子菜单(包含分组线、访问键和快捷键的设置);

2. 为“查询”菜单项设置命令,要求

用SQL命令基于TS表查询图书册数(cs)最多的5本书的分类号(flh)、书名(sm)和册数(cs)。

3.在“系统管理”菜单栏下增加一个VFP系统菜单项“退出”。

项目TEST中已存在菜单MENU,利用菜单设计器按如下要求修改菜单:

1. 如图所示,增加“教师管理”菜单栏及其子菜单“教师档案”和“任课情况”(包含访问键和快捷键的设置);

2. 为“教师管理”菜单中的“任课情况”菜单项设置SQL命令,功能为根据JS表和RK表查询任课教师名单;

(注:该SQL命令为“SELECT DISTINCT Js.* FROM ? ON ?”形式)

3. 在“系统管理”菜单栏的子菜单中增加VFP系统菜单项“退出”。

29

练习17

项目TEST中已存在菜单MENU,利用菜单设计

器按如下要求修改菜单:

4. 如图所示,增加“教师管理”菜单栏及其子菜单“教师档案”和“任课情况”(包含访问键和快捷键的设置);

5. 为“教师管理”菜单中的“任课情况”菜单项设置SQL命令,功能为根据JS表和RK表查询任课教师名单;

(注:该SQL命令为“SELECT DISTINCT Js.* FROM ? ON ?”形式)

6. 在“系统管理”菜单栏的子菜单中增加VFP系统菜单项“退出”。

练习18

项目TEST中已存在菜单MENU,利用菜单设计器按如下要求修改菜单:

1. 如图所示,增加“教师管理”菜单栏及其子菜单(包含访问键和快捷键的设置); 2. 为“导出”菜单设置过程,功能为:首先打开JS表,然后将JS表数据复制为Excel文件JS.XLS并保存在C:\\中,最后再将JS表关闭; 3. 为“导出”菜单设置说明信息:“导出为Excel文件,并保存在C:\\中。”(即选择该菜单时,在系统的状态栏中显示该信息)。

练习19

项目TEST中已存在菜单

按如下要求修改菜单:

1. 如图所示,增加“学生子菜单(包含分组线、的设置);

2. 将“帮助”菜单项设置

不存在HELP.HTM文件,则该菜单栏不可用(即跳过);(注:使用FILE()函数) 3. 为“打印”菜单项设置命令:预览报表文件RCJ。

MENU,利用菜单设计器

管理”菜单栏及其访问键和快捷键为:若当前目录中

练习20

项目TEST中已存在菜单MENU,利用菜单设计器按如下要求修改菜单:

1. 如图所示,为“帮助”菜单栏增加子菜单(包含分组线、访问键和快捷键的设置); 2. 为“版权信息”菜单项设置命令,要求利用MESSAGEBOX()函数显示信息“2006年第一版”; 3. 在“系统管理”菜单栏的子菜单中增加VFP系统菜单项“退出”。

练习21

项目TEST中已存在菜单MENU,利用菜单设计器按如下要求

修改菜单:

30

1. 如图所示,增加“数据打印”菜单栏及其子菜单(包含分组线、访问键和快捷键的设置); 2. 为“帮助”菜单栏设置命令:利用MESSAGEBOX()函数显示信息“请与XXX联系!” 3. 对菜单进行设置,使得该菜单运行时追加在VFP系统菜单之后。

练习22

项目TEST中已存在菜单MENU,利用菜单设计器按如下要求修改菜单:

1. 如图所示,增加“课程管理”菜单栏及其子菜单(包含分组线和访问键设置);

2. 为“开课课程”菜单项设置说明信息:“本学期开课的课程”(即选择该菜单时,在系统的状态栏中显示该信息);

3. 为“开课课程”菜单项设置SQL命令:根据RK表和KC表查询开课课程的课程代号(kcdh)和课程名称(kcm),并不显示重复记录。

练习23

项目TEST中已存在菜单MENU,利用菜单设计器按如

下要求修改菜单:

1. 如图所示,增加“图书管理”菜单栏及其子菜单(包含分组线、访问键和快捷键的设置);

2. 将“打印”菜单项设置为不可用(即跳过);

3. 为“根据类型”菜单项设置SQL命令:基于TS表查询计算机类图书,要求显示分类号(flh)、书名(sm)和册数(cs)。(注:计算机类图书的分类号以“TP”开头。)

练习24

项目TEST中已存在菜单MENU,利用菜单设计器按如下要求修改菜单: 1. 如图所示,为“帮助”菜单栏增加菜单项及其子菜单(包含分组线、访问键和快捷键的设置);

2. 将“系统管理”菜单设置为不可用(即跳过);

3. 为“电话联系”菜单项设置命令,利用MESSAGEBOX()函数显示信息“联系电话为:025-87654321”。

四、设计表单练习 练习9

下列表单FORMA用来设置用户的权限,根椐下列要求修改表单。 1.将表单的标题设置为“权限设置”。

2.将表格的前二列数据改成只读但能获得焦点,且将表格设置为只显示垂直滚动条。

3.已知A盘根目录下存在用户(USER)表和菜单(MENUTABLE)表,USER表含有用户名 (username) 、用户权限 (userright)等字段;MENUTABLE表含有菜单名 (menuname)、模块名 (modulename)、权限(isright)等字段。假定USER表的username字段值不重复,MENUTABLE表的modulename字段值也不重复。完善“确定”按钮的Click事件代码(提示:在原代码的末尾处添加一行语句),使得选定的模块名存入USER表的userright字段

31

中,每个模块名之间用逗号隔开。

4.添加名为cmdall、标题为“全选”的命令按钮,并为之编写Click事件代码:单击该按钮时选中所有模块的权限(即将所有的复选框选中)。

完成上述修改后,运行表单,界面如下图所示:

练习10

下列表单FORMB用来设置用户的权限,根椐下列要求修改表单。 1.设置表单运行时自动居中,表单不能最大化和最小化;

2.根据组合框的RowSoureType属性值设置组合框的RowSoure属性值,使它能显示USER表的username字段值;

3.已知A盘根目录下存在用户(USER)表和菜单(MENUTABLE)表,USER表含有用户名 (username)、用户权限 (userright)等字段;MENUTABLE表含有菜单名 (menuname)、模块名 (modulename)、权限(isright)等字段。假定USER表的username字段值不重复,MENUTABLE表的modulename字段值也不重复。USER表的userright字段中存放各用户能够使用的模块名列表,模块之间用逗号隔开。编制组合框的InterActiveChange事件代码,使得当选定一个用户时,调用组合框的Init事件代码,使得表格中显示该用户的权限; 4.添加命令按钮“重置”(如图所示),对象名为CmdReset,并为之编写Click事件代码:单击该按钮时,所有模块的权限都不选中(即所有的复选框均不选中)。

完成上述修改后,运行表单,界面如下图所示:

练习11

表单FORMC用来进行信息项的选择。在左边列表框list1中选中一项,然后单击?按钮,则选中的项移入右边的列表框list2中,反之将右边列表框中选中的项移入左边列表框中。根据下列要求修改表单: 将表单的标题设置为“项目选择”,表单为模式表单,表单不能最大化和最小化;

完善命令按钮?的Click事件代码,使得list1中选定的项加入list2的同时,该项从list1中移去(提示:在原代码的空行处添加一行语句);

为list1编写DblClick事件代码:双击列表框list1中某一项时,同样能实现将list1中该项移到list2中(且从list1中移去);

完善命令按钮??的Click事件代码:单击该按钮时,将list1中的所有项都移到list2中(提示:将原代码作为循环体,增加一个循环入口语句和循环出口语句)。 完成上述修改后运行表单,屏幕显示如图所示。 练习12

32

表单FORMD用来针对成绩(CJ)表实现用户自定义排序。已知CJ表已经存在索引名分别为cjxh、cjkcdh和cjcj的索引,索引表达式分别为xh、kcdh和cj。根据下列要求修改表单: 1.表格中的数据设置为只读,且表格中每一列都能获得焦点;

2.如图所示,设置各选项按钮的标题; 3.将表格设置为只有垂直滚动条;

4.将“确定”按钮的访问键设置为“O”;

5.在数据环境中设置CJ表默认排序方式为按学号(xh)排序;

6.完善“确定”按钮的Click事件代码:单击该按钮时,能按选定的方式排序(提示:分别在原代码的两个空行处添加一行语句); 练习13

表单FORME用来进行信息项的选择。在左边列表框list1中选中一项,然后单击?按钮,则选中的项移入右边的列表框list2中,反之将右边列表框list2中选中的项移入左边列表框list1中。根据下列要求修改表单,完成修改后运行表单,屏幕显示如右图所示。

1.根据列表框list1的RowSource属性值来设置它的RowSourceType属性值; 2.设置表单边框为固定对话框,表单不能最大/小化;

3.为列表框list1编制Init事件代码,使得表单运行时,首先选中第一项; 4.已知当双击列表框list1中的某一项时,能够将该项从list1中移入list2中。为按钮?编制Click事件代码,要求:单击该按钮时,实现同样的功能;

5.完善按钮?? 的Click事件代码,当单击该按钮时,将list2中的所有项都移到list1中(提示:在已有代码的空行处增加一行命令,使list2的第一项成为当前选定项)。 练习14

表单FORMF用来针对成绩(CJ)表内容实现用户自定义查询。根据下列要求修改表单:

1.将表格中成绩列的背景色设置为RGB(128,255,255); 2.在组合框上方添加一个标签,标题为“查询关键字”,如右图所示;

3.设置“确定”按钮的Default属性,使在表单运行时,能通过按回车键触发“确定”按钮的Click事件;

4.已知CJ表已经分别以xh、kcdh、cj字段为索引表达式建立索引,索引标识分别为cjxh、cjkcdh、cjcj。在数据环境中为CJ表设置记录的排序方式:按xh排序;

完善“确定”按钮的Click事件代码,当单击该按钮时,能按选定的查询关键字及文本框中输入的内容进行记录快速定位(提示:在已有代码的2个空行处分别增加1行命令)。 练习15

表单FORMG用来查看学生(XS)表中男、女学生比例及平均年龄。根据下列要求修改表单,修改后的表单运行时如图所示:

1.表单上的3个文本框设置为废止状态;

2.设置所有的文本框在废止状态时前景色为RGB(0,0,0); 3.表格中数据为只读,且表格能获得焦点;

4.修改组合框的RowSource属性,使得相同的班级只显示1次;

5.完善组合框的InterActiveChange事件代码,使得当选定一个班级时,表格中显示该班的学生基本情况,3个文本框分别显示该班学生的男生人数、女生人数以及学生的平均年龄(提示:在已有代码的空行处增加3行命令)。 练习16

表单FORMH用来形成一个指定的日期。根据下列要求修

改表单:

33

1.将表单设置为模式表单;

2.设置年微调框的初值为2000,设置日微调框的最大值为31;

3.将形状控件的显示效果设置成3维;

4.设置“确定”按钮的Default属性,使得在表单运行时能在任何时刻通过按回车键触发“确定”按钮的Click事件;

5.完善“确定”按钮的Click事件代码,其功能是:单击该

按钮时,根据微调框的值形成一个类似日期格式的字符串,然后将其转换为日期存入变量dRq中,并判断该日期的合法性。如果不合法,用WAIT WINDOW命令提示“日期不合法”,同时将光标定位在年份上重新输入,否则显示该日期(提示:在已有代码的空行处增加相应命令)。

练习17

表单FORMI用来显示学生(XS)表的基本信息。按下列要求修改表单:

1. 编辑框中数据为只读,但能获得焦点;

2. 设置编辑框的ControlSource属性,使它能显示学生的简历(jl)字段的内容; 3. 将组合框设置为下拉列表框;

4. 已知学生(xs)表已经按xh字段建立了主索引,索引名为xsxh,在数据环境中设置xs的默认排序方式为按xh排序;

5. 编制表格Grid1的AfterRowColChange事件代码,使编辑框能立即显示Grid1中指定行的学生的简历; 6. 在组合框的InterActiveChange事件代码中编写一条语句,使得当改变字体时表单上所有对象的字体跟着改变。

完成上述修改后,运行表单,屏幕显示如下图所示:

练习18

表单FORMJ用来形成一个指定的日期区间。根据下列要求修改表单:

1. 将第一个日期的初值设置为当前年份的1月1号; 2. 将第二个日期的初值设置为当前日期;

3. 在两个日期的中间添加一个标签,标题为“至”,如下图

所示;

4. 设置“确定”按钮的Default属性,使它在表单运行时,能在任何时刻通过按回车键触发“确定”按钮的

Click事件代码;

5. 完善“确定”按钮的Click事件代码,当单击该按钮时,形成一个合法的日期区间,即日期下限和日期上

限都是合法的日期,且日期下限小于或等于日期上限。如果日期区间非法,则在系统提示窗口给出提示“不合法”,同时将焦点定位在第一个日期的年份上重新输入,否则在系统提示窗口提示“合法的日期区间”。 完成上述修改后运行表单,屏幕显示如下:

练习19

表单FORMK用来形成一个指定的查找条件。根据下列要求修改表单,完成修改后运行表单,屏幕显示如图所示。

1. 将表单设置为运行时自动居中,且边框为固定对话框;

34

本文来源:https://www.bwwdw.com/article/u4k6.html

Top