江苏省高校计算机等级考试命题研究院 江苏省高校计算机等级考试辅导
2003年(秋)Visual FoxPro 二级考试上机试卷(VFP02)

2003年(秋)Visual FoxPro 二级考试上机试卷(VFP02)

(本试卷上机考试时间为70分钟)

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

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

    打开软盘根目录下的项目文件TEST,在该项目中已有一数据库SJK。
   1.按如下要求修改SJK中学生(XS)表的结构:
    (1) 将学号(xh)字段宽度设置为10。
    (2) 设置xh字段的有效性规则:学号的有效宽度只能是6位、8位或10位;
    (3) 设置xh字段的字段注释:字段是学生表的主关键字,不允许重复。
    (4) 创建一个唯一索引xing,要求先按姓名(xm)字段中的姓(第一个汉字)升序排序。
    (5) 设置XS表注释:学生基本信息。
   2. 把TEST项目中的图片文件015.jpg的包含状态设置为“排除”。
   3. 修改XS表中所有记录的xh字段值,用班级编号(bjbh)中的第3至4位插入到学号中的第2与第3位之间。例如:学号为“990501”,班级编号为“990404051”,则替换后的学号就是“9904051”。
   4.为xs表设置删除触发器:只有学号开头两位是“95”至“99”的记录允许删除,否则不允许删除。
   5. SJK中班级(BJ)表已存在主索引bjbh,索引表达式为bjbh,XS表已存在普通索引bjbh,索引表达式为bjbh。以BJ表为主表,CJ表为子表按xh建立永久关系,并设置BJ表和XS表之间的参照完整性:删除限制。

二、 设计查询(8分)

   已知学生(XS)表中含有字符型字段班级编号(bjbh)和日期型字段出生日期(csrq)。在TEST项目中已存在查询CHAXUN,按如下要求修改该查询:
  基于学生(XS)表统计各班上半年和下半年出生的人数,要求输出字段为:bjbh、时间、人数。如果出生月份在1至6月,则时间为“上半年”,如果出生月份在7至12月,则时间为“下半年”,查询结果首先按班级编号升序排序,同一班级中再按时间降序排序,查询结果输出到临时表xsrs。

三、 设计菜单(5分)

   项目TEST中已存在菜单MENUA,按如下要求修改菜单,完成后的运行效果如图1所示。

   1. 为“数据录入”菜单栏下的“学生信息录入”菜单项创建快捷键“ALT+L”。

   2. 在“数据录入”菜单栏下增加一个菜单项“教师信息录入”,并用分隔线隔开。
   3. 为“教师信息录入”菜单项设置过程,当执行该菜单时向(JS)表中插入一条空记录,并打开JS表的编辑窗口。
   4. 为“数据查询”菜单栏设置提示信息:“按条件查询相关表的信息”,即当菜单运行时且选择了“数据查询”菜单栏时,在状态栏中显示该提示信息。
   5. 将上述菜单追加在系统菜单“帮助”的后面。

四.设计表单(10分)

   TEST 项目中已经存在菜单FORMA,该表单可以用来查询学生成绩。选项按钮组提供了两种查询方式:按学号查该学生的各门课的成绩,或者按课程查该课程有多少学生选修及各个学生的成绩情况。根据下列要求对表单进行修改,完成以后运行菜单,效果如图2和图3所示。
  1. 将表格中的各列标头改为如图2所示的标题。
  2. 将表格的删除标志列去掉。
  3. 设置表单的有关属性,是表单运行时不可随意移动。
  4. 完善选项按钮组op1的Click事件代码,使得当选择“按学号”查时标签label1标题为“总成绩”,当选择“按课程”查时标签label1标题为“总人数”。
  5. 完善列表框的InterActiveChange时间代码:使得当“按学号”查询并在列表框中选择学号时文本框中统计学生的总成绩,当“按课程代码”查询并在列表框中选择课程代号时文本框中统计该课程的学生选修人数。


五.程序改错(5分)

   下列程序的功能是将小写金额(假设小于0万有且有1位小数)转换为中文大写形式显示。例如,213.0转换为“贰佰壹拾叁元零角”,3002.8转换为“叁仟零贰元捌角”。要求:
   1. 项目中有一个程序文件PCODE,将下列程序输入到其中并进行修改。
   2. 在修改程序时,不允许修改程序的总体框架和算法,不允许增加或减少语句数目。

    nMoney=10040.5 &&赋初值
    cMoney=ALLT(STR(nMoney,7,1))
    cs1=’零壹贰叁肆伍陆柒捌玖’
    cS1=RIGHI(‘万仟佰拾元’,(LEN(cMoney)-2)*2)
    cRt=SPACE(0)
    FOR n=1 TO LEN(cMoney)-2
      ch=SUBSTR(cMoney,n,1)
      cRt=cRt+IIF(ch=”0” AND RIGHT(cRt,2)=”零”,””,SUBS(cS1,ch*2+1,2))
      cRt=cRt+IIF(ch=”0”,””,SUBS(cS2,n*2-1,2))&&去掉重复零
    ENDFOR
      cRt=cRt+IIF(RIGHT(cRt,2)=”零”,’元’,”)
      cRt=cRt+IIF(RIGHT(cMoney,1)=’0’,’’,SUBS(cS1,VAL(RIGHT(cMoney,1))*2+1,2)+’角’&&小数部分
    WAIT WINDOWS’大写金额为:’+cRt