江苏省高校计算机等级考试命题研究院 江苏省高校计算机等级考试辅导
江苏省VFP2005 年(秋)上机(1)

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

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

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

 

 

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

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

1. 按以下要求修改SJK数据库中TS表:

1) 为TS表设置长表名:图书档案表。

2) 添加一备注型字段,字段名为summary,并设置其标题为“内容概要”。

3) 设置分类号(flh)字段的有关属性,使该字段中输入的字母均为大写字母。

4) 创建一个普通索引abcd,要求以分类号(flh)为 第一索引关键字、书名(sm)为第二索引关键字排序。

5) 设置价格(jg)字段的有效性规则和有效性说明信息,要求:其值不能小于1。

6) 修改作者(zz)字段的值,要求在原作者名后加汉字“等”。例如,第一条记录的作者由“路由”改为“路由等”。

2. 在项目中,将FF表单设置为“排除”状态。

3. XS表和CJ表已存在以学号(xh)字段为索引表达式的主索引xsxh和普通索引cjxh。以XS表为主表,CJ表为子表按xh建立永久关系,并根据以下要求设置参照完整性规则:在CJ表中添加记录时,若XS表中没有相对应的记录(xh字段的值),则禁止添加记录。

二、 设计查询(8分)

    在TEST项目中已经存在查询chaxun,已知在SJK的学生(XS)表中含有系代号(xdh)、学号(xh)、姓名(xm)等字段;成绩(CJ)表中含有学号(xh)、课程代号(kcdh)、成绩(cj)等字段。按如下要求修改查询:

    基于XS表和CJ表查询“刘玉敏”同学所在系的每位同学的平均成绩,输出xdhxhxm、平均成绩,查询结果按姓名排序。(提示:筛选条件中使用SELECT xdh FROM xs WHERE xm=‘刘玉敏’;查询保存并关闭设计器,可能无法再次在设计器中打开,只能在编辑窗口中修改该查询的SELECT-SQL语句。)

三、 设计菜单(5分)

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

1、 按图1所示要求为“表操作”菜单栏下的“添加记录”菜单项增加子菜单,为“表操作”菜单栏下的各菜单项设置分组线;

2、 在“文件”菜单栏下插入VFP系统菜单项“退出”;

3、 为“数据查询”菜单栏下的“课程”菜单项编写SQL命令:

当执行该菜单时,在浏览窗口显示kcdhkcm及平均成绩(注:根据KC表及CJ表查询)。

四、 设计表单(10分)                                                  图1

    项目管理器中已经存在表单FA,该表单用来更改用户的密码。根据下列要求修改表单,设计时和运行时的效果分别如图2和图3所示。

    1、 将文本框控件txtUserName设置为禁用,并将其与全局内存变量pUserName绑定;

    2、 将“老密码”文本框控件txtOldPwd的密码占位符设置为字符“#”;

    3、 添加一个“重置”命令按钮(如图3所示),对象名为cmdReset,标题为“重置”;

    4、 为“重置”按钮设置Click事件代码,要求清除“新密码”和“新密码重复”相应文本框控件的文本值;

    5、 已知在表单的Init事件代码中已定义了全局变量pPassWord,用来存放已登录用户的密码,完善“确定”按钮的Click事

件代码(提示:在原代码中的空行处添加一条语句),要求:当老密码与全局变量pPassWord的值相等时,检查“新密码”和“新

密码重复”相应文本框控件的文本值是否相等,如果相等,则将“新密码”文本框txtNewPwd1的值赋给全局变量pPassWord

 

          图2  设计时                  图3  运行时

五、 程序改错题(5分)

   下列程序的功能是找出1000之内所有的完数,并统计它们的个数。完数是指:数的各因子之和正好等于该数本身(例如6的因子是1、2、3,而1+2+3=6,所以6是完数)。要求:

1) 项目中有一个程序文件Pcode,将下列程序输入到其中并进行修改;

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

     CLEAR

     nCount=0

     FOR n1=1 TO 1000

      m=0

      FOR n2=1 TO n1-1

         IF n1/n2=MOD(n1,n2)

             m=m+n2

         ENDIF

      ENDIF

      IF n1=m

         ?n1

         nCount=nCount+1

      ENDIF

     ENDFOR

     WAIT WINDOWS"完整的个数为"+STR(nCount