江苏省高校计算机等级考试命题研究院 江苏省高校计算机等级考试辅导
2005 年(春)二级Visual FoxPro上机(03)

江苏省高等学校非计算机专业学生
2005
()计算机基础知识和应用能力等级考试上机试卷
二级Visual  FoxPro (试卷代号VFP03)

(本试卷完成时间 70分钟)

 

说明:1、首先运行考试软盘中的上机考试应用程序以输入考生的准考证号、姓名和试卷代号;
   2、启动Visual FoxPro系统后,首先在命令窗口中执行命令;
      SET DEFAULT TO A
    以设置默认的工作目录,然后再开始做题。

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

打开软盘根目录下的项目文件TEST,在该项目中已有一数据库SJK

1、按职下要求修改SJK中教师(JS)表的结构:

1)设置工作日期(gzrq)字段的有效性(验证)规则:工作日期的年份必须小于等于当前系统日期的年份,并且大于等于1960年;

2)设置(gzrq)字段的有效性(验证)信息:工作日期必须在1960年以后;

3)将简历(ji)字段标题设置为:简历;

4)为工号(gh)字段设置输入掩码:接受5个字节的字符,且第一个字符必须为大写英文字母,后4个字符只接受数字字符;

5)创建一个普通索引xdhzc,要求先按系代号(xdh)字段排序,相同时按职称代号(zcdh)字段排序。

2、将软盘中表文件GZB.DBF添加为TEST项目的自由表,并为其添加说明信息:工资信息表。

3、将GZB表中所有职称为“讲师”的其它(qt)字段值设置为150元。

4、为JS表设置更新触发器:仅允许更新1960年(含1960年)以后参加工作的教师记录。

5JS表已存在主索引jsgh,索引表达式为ghGZ表已存在普通索引gzgh,索引表达式为gh,以JS表为主表、GZ表为子表,按gh建立永久关系,并设置JS表和GZ表之间的参照完整性:删除级联。

 

二、设计查询(8分)

TEST项目中已经存在查询chaxun,且在SJK中包含一个名为JSST的视图。该视图包括教师工号(gh)姓名(xm)、出生日期(csrq)、职称(zc)和系代号(xdh)字段;在SJK的系名(XIM)表含有系代号(xdh)和系名称(ximing)字段。按如下要求修改查询:

基于JSST视图和XIM表查询每个系职称为“教授”的人数、平均年龄,要求输出字段包括:xdhximingzc、人数、平均年龄、查询结果按人数从高到低排序。

 

三、设计菜单(5分)

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

1、如图所示,在“表操作”菜单栏下增加一个“删除记录”菜单项及其子菜单;

2、为“表操作”菜单栏下的“记录定位”菜单项编写过程,其功能是:打开学生(XS)表,并将记录指针定位在最后一条记录;

3、将下列代码加到菜单的适当位置,使菜单运行时最后执行它。

CLOSE TABLES ALL

CLEAR

 

 

 

四、设计表单(10分)

软盘上TEST项目中已经存在表单FormP,该表单的功能是根据选择的系,浏览和统计教师信息。按下列要求修改该表单,修改完成后运行表单,其效果如图所示。

1、修改表单的有关属性,使得表单运行时自动居中,且位于屏幕的最前端;

2、修改表格控件的有关属性,使得第1列表头为“工号”、表格数据只读;

3、向表单上添加一个标签控件和一个文本框控件(如图2所示),用于显示“平均工龄”;

4、为表单添加一个新方法TongJi,并输入和完善如下代码:

SELECT  isview

COUNT  TO  n  &&统计人数

ThisForm.Textl.Value=n

AVERAGE  YEAR(DATE())-YEAR(csrq)  TO  gn  &&统计平均年龄

THISFORM.Text2.VaLue=gn

**在此注释语句前添加工2条语句:统计平均工龄,在添加的文本框中显示平均工龄。

5、为表单的Destroy事件编写代码,需要完成的功能是关闭所有表。

 

 

五、 程序改错(5分)

下列程序的功能是:随机出一道100以内整数加法算术题的选择题(有4个选择项,其中只有一个正确答案)。要求:

    项目中有一个程序文件Pcode,将下列程序输入到其中并进行修改(注:注释部分不输入);

       在修改程序时,不允许修改程序的总体框架和算法,不允许增加或减少语句数目。

X=int(rand()*100)

Y=int(rand()*100)

Ctext=str(x,3)+”+”+str(y,3)+”=?”+chr(13)   &&chr(13)产生一个回车符

Dimension  nans[4]                        &&存放4个选择项的数组

N=mod(int(rand()*10),4)+1                &&随机产生正确答案在数组中的序号

Nans[n]=x+y                                &&将正确答案添入该数组元素中

For I=1 to 4                                &&产生3个错误答案,填入另三个数组元素中

If I=n                                   &&避免覆盖正确答案的数组元素

  Nans[I]=int(rand()*100)

  Do while nans[I]=x+y                &&避免有两个或两个以上正确答案

      Nans[I]=int(rand()*100)

 Enddo

        Endif

        Ctext=ctext+space(2)+chr(64+I)+’’+str(nans[I],3)+chr(13)

Endnext

Ctext=ctext+”请选择正确答案的字母A-D

Wait window ctext to cchoice