2003年(秋)Visual FoxPro 二级考试上机试卷(VFP01)
(本试卷上机考试时间为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) 创建一个候选索引 bhxh,要求先按班级编号(bjbh)字段升序排序,班级编号相同的再按xh字段升序排序。 (5) 为jg字段设置默认值:“江苏”。 2. 把TEST项目中的图片文件015.jpg的包含状态设置为“排除”。 3. 修改XS表中所有记录的xh字段值,用班级编号(bjbh)中的第3至4位插入到学号中的第2与第3位之间。例如:学号为“990501”,班级编号为“990404051”,则替换后的学号就是“9904051”。 4. 为xs表设置删除触发器:只有学号开头两位是“95”至“99”的记录允许删除,否则不允许删除。 5. SJK中XS表已存在主索引xsxh,索引表达式为xh,学生成绩(CJ)表已存在普通索引chxh,索引表达式为xh。以XS表为主表,CJ表为子表按xh建立永久关系,并设置XS表和CJ表之间的参照完整性:删除限制。
二、 设计查询(8分)
已知学生(XS)表中含有字符型字段班级编号(bjbh)和日期型字段出生日期(csrq)。在TEST项目中已存在查询CHAXUN,按如下要求修改该查询: 基于学生(XS)表统计各班级各年份出生的人数,要求输出字段为:bjbh、出生年份、人数,查询结果首先按班级编号升序排序,同一班级中再按人数多少降序排序,查询结果输出到临时表XSNFRS。
三、 设计菜单(5分)
项目TEST中已存在菜单MENUA,其中已定义了“文件”菜单栏及其中的“恢复系统菜单”项,按如下要求修改菜单,完成后的运行效果如图1所示。 1. 创建“学生档案管理”菜单栏,并为其设置访问键“ALT+S”。 2. 为“学生档案管理” 创建子菜单“学生档案录入”和“学生档案查询”,并用分隔线隔开。 3. 为“学生档案录入”菜单项设置命令,该命令用来运行当前目录下的表单文件FORMC。SCX。 4. 为“学生档案查询”菜单项设置过程,过程代码为:
IF ! USED(“XS”) USE XS ELSE SELECT XS ENDIF BROWSE |
|
5. 在“文件”菜单栏下插入系统菜单项“打印预览”。
四.设计表单(10分)
TEST 项目中已经存在菜单FORMA,该表单可以完成类似与Windows中的记事本功能。其实现的基本思想为:打开一个文本文件时将该文件的内容放入临时表中,保存时将临时表中的内容写入文本文件中。已知在表单的LOAD事件中已经定义了一个临时表textfile.根据下列要求对表单进行修改,完成以后运行菜单,效果如图2所示。
1. 设置表单的ControlBox属性,使表单运行时左上角的窗口菜单图标不显示。如图2所示。 2. 设置表单的有关属性,使表单运行时边框样式为“固定对话框”。 3. 为“打开”按钮设置访问键“ALT+o”. 4. 设置表单的标题为“记事本”。 5. 完善“新建”按钮的Click事件代码,当运行表单并点击该按钮时编辑框清空且得到焦点。 6. 完善“打开”按钮的Click事件代码,当运行表单击该按钮时将选定的文本文件的内容放入临时表中。 |
|
完成修改以后,运行表单,画面显示如图2所示。此时点击“打开”按钮,会弹 出“打开”对话框,选择一个已存在的文本文件(如当前目录上没有,也可以到其他目录下选择),单击“确定”按钮以后被选择的文本文件就会显示在编辑框中,此时可对该文本文件进行编辑,编辑以后可以按“保存”,也可以按“另存为”按钮。如果要新建一个文本文件,可单击“新建”按钮。
五.程序改错(5分)
下列程序的功能是:实现二进制字符窜数据压缩。压缩算法是: 字符窜首字符+该字符个数+分隔符+另一个字符个数+分隔符+…… 例如,二进制字符窜为“11110000111111111000111110000”压缩后显示为“14*5*9*3*5*4”(字符窜首字符为“1”、4个“1”、5个“0”、9个“1”……,分隔符为“*”)。要求: 1. 项目中有一个程序文件PCODE,将下列程序输入到其中并进行修改。 2. 在修改程序时,不允许修改程序的总体框架和算法,不允许增加或减少语句数目。 cString=‘111100000111111111000111110000’ cResult=LEFT(cSring,1) nCount=1 FOR n=2 TO cString IF SUBSTR(cString,n,1)=SUBSTR(cString,n-1,1) nCount=nCount+1 ELSE cResult=cResult+ALLT(STR(nCount))+’*’ nCount=nCount+1 ENDIF ENDFOR cResult=cResult+ALLT(STR(nCount)) WAIT WINDOWS’压缩后为’+cResult
|