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

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

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

 

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

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

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

1 按如下要求修改SJK中课程(XS)表的结构:

   (1 设置学号(xh)字段设置为只接受8个数字字符。

   (2 设置xm字段的有效性(验证)规则:xm的有效宽度(不含首尾空格)必须4个字节以上,且首字符必须为汉字(汉字的首字节的ASCLL码值大于127);

   (3 设置xm字段的字段注释:姓名的首字符必须为汉字;

   (4 删除zp字段。

   (5 创建一个普通索引xbrq,要求先按性别(xb)字段升序排序,性别相同再按出生日期(csrq)字段降序排序;

2  将软盘中xs.txt文件添加到项目中,并将其包含状态设置为“排除”。

3  修改软盘中jsb表的所有记录的工号(gh)字段值:用系代号(xdh)的值替换原工号中的第2与第3位。例如:工号为“E0001”,系代号为“05”,则替换后的工号就是“E0501”。

4 设置xs表的插入触发器:只有学号开头两位是“00”至“03”的记录允许插入,否则不允许插入。

5  xs表中已存在主索引xsxh,索引表达式为xh;cj表已存在普通索引cjxh,索引表达式为xh。以xs表为主表、cj表为子表,按xh 建立永久关系,并设置xs表和cj表之间的参照完整性:更新级联。

 

二、设计查询(8分)

TEST项目中已存在查询chaxun,且在SJK中学生(xs)表包含学号(xh)、姓名(xm)、性别(xb)、班级编号(bjbh)、系代号(xdh)和专业代号(zydh)字段,专业(zy)表含有专业代号(zydh)和专业名称()zymc)字段,按如下要求修改查询:

基于xs表和zy表查询“01”年级每个专业女生所占比例。要求输出字段为:zydh,zymc,年级,女生人数和女生所占比例,查询结果按女生所占比例从高到低排序(假定bjbh字段值的前二位表示年级)。

 

三、设计菜单(5分)

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

1   按图所示,在“表操作”菜单栏增加一个“显示”菜   单项,并为它设置子菜单;

2   为“表操作”菜单栏下的“删除记录”菜单项编写SQL命令:当执行该菜单项时,删除学生表(xs)中所有姓名(xm)为空(指均为空格字符)的记录;

将下列代码添加到菜单的适当位置,使菜单程序运行是首先执行它。

IF  USED(“XS”)

         SELECT  XS

     ELSE

        USE  XS  IN  0

     ENDIF

 

 

 四、设计表单(10分)

项目TEST中已经存在表单FormN。该表单的功能是根据选择的班级与课程录入学生成绩,其基本思想是:单击“录入”命令按钮,则根据所选班级编号生成一个含该班所有学生的临时工作表TEMP(作为表格控件的数据源),以录入成绩;单击“入库”命令按钮,则将TEMP表中的数据追加到cj表中;单击“作废”命令按钮,则TEMP表中的成绩总清。按下列要求修改该表单,修改完成后运行表单,其效果如图所示。

1.修改表单的有关属性,使得标题为“成绩录入”,表单的控制图标和按钮为系统默认值;

2.修改表格控件的前2列有关属性,使得其数据只读;

3.修改下列组合框combo2的有关属性,使得下拉列表中显示课程表(kc)的课程代号(kcdh)和课程名(kcm),要求不允许修改该控件的rowsourcetype属性;

4.添加一个“作废”命令按钮(其外观和大概位置如图所示),并为该命令按钮编写click事件代码,需要完成的功能是:TEMP表中的成绩均替换为0

5.为表单的destroy事件编写代码,需要完成的功能是:

1)关闭所有表;(2)如果存在表文件temp.dbf,则删除之。

  

 

五、 程序改错(5分)

下列程序的功能是:随机产生一个10100之间的整数,然后分解质因数,例如:45=3*3*5。要求:

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

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

Nint=int(rand()*100)

Do  while between(nint,10,100)

     Nint=int(rand()*100)

Enddo

Cresult=str(nint,3)+”=”

N=2

Do while nint>1

    If mod(nint,n)=1

      Cresult=cresult+ltrim(str(n))+”*” &&ltrim()函数的功能是删除字符串的前导空格

      Nint=nint/n

    Else

      N=n+1

      If nint<n

        Exit

      Endif

    Endif

Enddo

Cresult=left(cresult,len(cresult)-1)

=messagebox(cresult)