2011春二级Visual FoxPro上机试卷(真题)

 
2011春二级Visual FoxPro上机试卷1
    (本试卷完成时间为70分钟)
 考试说明
  1.首先登录考生信息,然后启动VFP并在命令窗口中执行下列命令,以设置默认的工作
目录:
    SET DEFA TO T:
  2.除非题目要求,否则不要对T盘上的文件进行重命名、复制和删除操作。
 一、项目、数据库和表操作(12)
 打开T盘根目录中的项目文件JXGL,在该项目中已有一数据库JXSJ
  1.JXSJ数据库中按下表所示的结构创建AB.DBF,并按表格中的要求设置相关
属性。
 

 

 字段各
    RQ
数据类型
    D
    宽度
 
    字段标题
    日期
    PM
    C
    20
    品名
    DW
    C
    10
    单位
   
 
 
 
    DJ
    N
5(小数1)
    单价
 
(1)设置表的注释:蔬菜批发价格表;
(2)设置RQ字段的默认值:当前系统日期;
(3)设置单位字段的显示类:选项按钮组;
(4)设置表的更新触发器:日期字段的值等于当前系统日期时可以更新记录;
(5)创建普通索引,索引名为abcd,要求按日期排序,日期相同时按单价排序。
2.AB表中输入如下记录:

 

l    RQ
    PM
 
    DW
 
    DJ
 
2010-515
    青菜
    公片
    2.4
 
    3.为项目设置项目信息:项目的图标为PC.ICO文件。
    4.Kc表已存在主索引KCDM,索引表达式为KCDM;CJ表已存在普通索引KCDM,索引
表达式为KCDM。以KC表为主表、CJ表为子表,根据KCDM建立永久关系,并设置两表之间
的参照完整性:删除级联、插入限制。
 二、设计查询(8)
 已知自由表图书表(TSB)含有分类号(flh,C)、册数(CS,N)、价格(jg,N)等字段。按如下要求修改JXGL项目中的查询CHAXUN:
 基于TSB表查询图书类别、藏书册数等信息。要求:查询输出字段为图书类别、藏书册书和平均单价;查询结果按藏书册数降序排序,相同时按平均单价升序排序:输出去向为文本文件TEMP
    :图书类别为flh"."前的内容(可用LEFT(..., AT(".",...))形式的表达式求得),藏书册数为同一图书类别册数之和。
  三、设计菜单(5)
  JXGL项目中已存在菜单MENU,其中已定义了"文件"菜单栏及其
中的"退出菜单,,项。按如下要求设计菜单,菜单运行后的效果如图1

 

 
所示。
    1."文件"菜单栏右侧创建"图书管理系统"菜单栏。
    2."图书管理系统"菜单栏创建子菜单"预约""借书""还书"
    3.在菜单项"预约""借书""还书"之间插入分组线。
    4."借书"菜单项设置命令代码:DO FORM js
    5."文件"菜单栏下插入系统菜单"全部关闭"
 四、设计表单(10)

 

 
表单F102F用来按小组查看世界杯球队信息。按下列要求修改表单,修改后表单运行如图2所示
 
   1.设计表格Grid1的数据只读,无滚动条,删除"组别"
   2."组别"标签下方添加一个列表框控件List1(用来选择组别),设置其数据源类型为"3-SQL语句",数据源为"SELECT DIST 组别 FROM fifa INTO CURSOR tmp"
   3.编写表单的Load事件代码,实现:定义一个全局变量sGroup,并赋初值为字符"A"
   4.世界杯球队信息存储在自由表fifa,表结构如下:
组别(C,1)、编号(C,1)、国旗(G)、国家(C,12)、简介(M),fifa表已添加在表单的数据环境中。编写List1InterActiveChange事件代码,实现:
    (1)List1中当前选定的值赋给变量sGroup,并对当前数据工作区中的fifa表设置筛选条件:sGroup变量中的值对"组别"字段进行记录筛选:
    (2)将记录指针指向首行记录,并刷新表单。
 五、程序改错题(5)
    回文数是指正读和反读都是一样的数,10011221等。下列程序的功能是:求出大于1000小于2000的所有回文数,并将它们打印出来(每行打印5个数,最后一行打印总要求:
   1.将下列程序输入到项目中的程序文件PCODE,并对其中的2条错误语句进行修改。
    2.在修改程序时,不允许修改程序的总体框架和算法,不允许增加或减少语句数目。
    STORE 0 TO n,n1,n2
    s=ALLT(STR(i))
    nl=LEN(s)   
    n2=INT(n1/2)
    s1=''
    FOR j=1 TO n2
      s1=s1+RIGHT(s,1)
      s=LEFt(s,n1-1)
    ENDFOR
    IF LEFT(s,n1)=s1
      n=n+1
      ?? i
      IF INT(n/5)=n/5
        ?
      ENDIF
      ENDFOR
    ENDFOR
    ?'小于2000的回文数共'+STR(n)+''
    参考答案
一、项目、数据库和表操作
字段默认值:DATE()
索引表达式:DTOC(rq,1)+STR(dj,5,1)
触发器:rq=DATE()
二、设计查询
    SELECT LEFT(flh,at('.',flh)-1) AS 图书类别,SUM(CS) AS 藏书册数,:
      AVG(jg) AS 平均单价;
    FROM tsb;
    GROUP BY 1;
    ORDER BY 2 DESC,3;
    TO FILE temp.txt
三、设计菜单
 命令/ 过程:DO FORM js