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

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

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

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

 

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

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

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

1) 为TS表设置表注释:教学用图书。

2) 添加一个字段,字段名为cover,其类型应适用于存储图书的封面图片。

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

4) 设置册数(cs)字段的有关属性,使得将该字段从表单的数据环境中拖放到表单上时,生成的相应控件为微调控件。

5) 创建一个普通索引abcd,要求以书名(sm)的长度进行排序(sm字段值的首尾空格字符不计)。

6) 设置书名(sm)字段的有效性规则:其值不能为空字符串,或仅有空格组成的字符串,相应的有效性说明为“书名不能为空”。

7) 为TS表添加一条记录,其记录内容为:

       FLH  

        SM

     ZZ

     TP31.15

   Visual FoxPro实验指导

   崔建忠等

2、 在项目中,将XIM表设置为“包含”状态。

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

二、 设计查询(8分)

   在TEST项目中已经存在查询chaxun,SJK数据库中的XSJY视图包括学生学号(xh)、借阅日期(jyrq)、还书日期(hsrq),SJK数据库中的学生(XS)表含有学号(xh)、姓名(xm)、所在班级编号(bjbh)。按如下要求修改查询:

   基于XS表和XSJY视图查询每个班每个学生借书本数、过期罚款数。要求输出字段为:Xs.bjbn,Xs.xh,Xs.xm,借书本数、罚款

数。查询结果按bjbh排序,bjbh相同的,按Xs.xh排序。

   注:每本书的借阅时限为30天,没超过一天罚款0.05元计算;同一本书借阅两次时,以两本书计;小数点保留2位。

 

三、 设计菜单(5分)

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

1、 按图1所示要求为“表操作”菜单栏下各子菜单项设置分组线;

2、 在“文件”菜单栏下插入一个“退出”菜单项,并编写命令:                   图 1

当执行该菜单时能关闭VFP系统;

3、 为“数据浏览”菜单栏下的“学生”菜单项编写过程代码:当执行该菜单项时,选择学生(XS)表为当前表(若未打开,则首先打开之),并用BROWSE命令浏览学生表。

四、 设计表单(10分)

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

    1、 设置表单为模式表单,背景为白色,并在运行是自动居中,

    2、 设置“确定”控件按钮为禁用。

    3、 添加一个图象控件,并指定显示的图象为Lock.jpg文件所存图象。

    4、 完善“重复新密码”文本框控件txtNewBInterActiveChange事件代码(提示:在原代码中的空行处添加适当的代码)

,要求:用IF结构语句判断文本框“新密码”和“重复新密码”的值是否一致,如果一致,则启用“确定”命令按钮,否则禁用

“确定”命令按钮。

5、 编写“确定”命令按钮的相关事件代码,使得单击该按钮时,将“txtNewA”文本框的值赋给给变量pPassWord

      

  图2  设计时                           图3  运行时

五、 程序改错题(5分)

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

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

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

     CLEAR

     n1=1

     nCount=0

     DO WHILE n1<=1000

      m=0

      FOR n2=INT(n1/n2)TO 1 STEP-1

         IF n1/n2=INT(n1,n2)

             m=m+n1

         ENDIF

      ENDFOR

      IF n1=m        

         nCount=nCount+1

         ?n1    

      ENDDO

      n1=n1+1

     ENDDO

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