2003年(秋)Visual FoxPro 二级考试上机试卷(VFP04)
(本试卷上机考试时间为70分钟)
说明:1.运行考试软盘A中的“上机考试”应用程序文件以输入考生的准考证号、姓名、试卷代号。 2.启动VFP系统后,首先在命令窗口中执行命令: set default to A: 以设置默认的工作目录,然后再开始作题。 |
一、项目、数据库和表操作(12分) 打开软盘根目录下的项目文件TEST,在该项目中已有一数据库SJK。 1.按如下要求修改SJK中学生(KC)表的结构: (1) 设置必修课(bxk)字段的标题:是否必修课。 (2) 设置课程代号(kcdh)字段的输入掩码:课程代号只能是两位数字字符。 (3) 设置学分(xf)字段的显示类为微调控件。 (4) 增加一个备注型字段,字段名为“课程简介”。 (5) 为KC表创建记录级有效性规则:课时数(kss)不能少于学分(xf)。 2.已知数据库SJK的存储过程中有一自定义函数Ltoc(),功能是将逻辑型数据转换为汉字“是”与“否”,例如Ltoc(.T.)的返回值为“是”。利用该函数KC表创建一个普通索引bxkxf,要求将所有必修课记录排在前,非必修课记录排在后,同类型课程中再按学分(xf)字段排序。 3.修改KC表中记录的课时数(kss)和学分(xf)字段的值,修改方法是:所有非必修课(bxk字段的值为.F.)的课时数和学分均减1。 4.向KC表中增加一条课程代号(kcdh)为“26”的记录。。 5.已知数据库SJK的存储过程中有一自定义函数kc_del_tri(),该函数的功能是:对于打开的KC表,如果当前记录在成绩(CJ)表或任课(RK)表中有相关记录,则返回.T.,否则返回.F.。设置KC表的删除触发器,要求如果KC表的当前记录在成绩表或任课表中有相关记录,则禁止删除。 6.已知KC表已存在主索引kcdh,索引表达式为kcdh,成绩(CJ)表已存在普通索引cjkcdh,索引表达式为kcdh。以KC表为主表,CJ表为子表,按kcdh建立永久关系,并设置它们之间的参照完整性:更新级联。
二、设计查询(8分)
在TEST项目中已存在查询CHAXUN,且在SJK中的包含一个名为XSCJVIEW的视图,该视图中包含了每个学生所学课程的情况。按如下要求修改该查询: 基于XSCJVIEW视图KC表统计各学生所学必修课的门数和总学分,学生所学课程的学分必须当成绩(cj)在60分或60分以上时才能取得。要求输出字段为:xh 、xm、门数、总分数,其中“课程性质”依据KC表中的bxk字段取值为“必修”或“选修”(若bxk字段值为“.T.”,则“课程性质”取值为“必修”,否则为“选修”)。查询结果按学号和课程性质升序排序。
三、设计菜单(5分)
项目TEST中已存在菜单MENUA,按如下要求修改菜单,完成后的运行效果如图1所示。
1. 启用“数据录入”菜单栏下的“学生成绩录入”菜单项 。 2. 为“数据打印”菜单栏下的“学生档案打印”和“学生成绩打印”,并用分隔线隔开。 3. 为“学生成绩打印”菜单项设置命令,要求当执行该菜单项时调用当前目录下的报表文件BB,并将结果预览输出。 4. 为“退出”菜单栏设置访问键“ALT+X”。 5. 将 “文件”菜单栏删除。 |
|
四.设计表单(10分)
TEST 项目中已经存在菜单FORMA,该表单用来进行系统登录。已知A盘根目录下存在表文件USER,该表用来存放登录用户的工号(no)、姓名(name)、职务(title)、和口令(password)。根据下列要求对表单进行修改,完成以后运行表单,效果如图2所示。
1. 设置窗口的标题为“系统登录”。 2. 设置表单有关属性,使表单运行时不可最小化。 3. 使口令文本框中输入的字段以“*”号显示。 4. 为“确定”按钮设置有关属性,使得当表单运行过程中按ENTER键时,无论当前焦点在哪个对象上,“确定”那钮总能得到焦点并自动执行它的Click事件代码。 5. “年月“下拉列表的RowSourceType为“3-SQL语句”,设置它RowSource的属性,使得该下拉列表框中显示LOGIN表中的年月两个字段的数据,且显示格式为X X X X年X X月(如图2所示)。 6. 假如USER表中姓名(name)字段的值不重复,且已经按姓名建立了一个普通索引name。完善姓名下拉列表框的InterActiveChange事件,使得当选择不同的用户姓名时,“职务”文本框中显示其相应的职务(title)字段的值。
|
|
五.程序改错(5分)
下列程序的功能用于将十进制数转换成十六进制数表示。要求: 1. 项目中有一个程序文件PCODE,将下列程序输入到其中并进行修改。 2. 在修改程序时,不允许修改程序的总体框架和算法,不允许增加或减少语句数目。
nNumber=437 &&赋初值(十进制数) cResult=SPACE(0) IF nNumber#0 DO WHILE nNumber>0 n=MOD(nNumber,16) nNumber=INT(nNumber/16) &&余数 IF n<10 cResult=STR(n,1)+cResult ELSE cResult=CHR(ASC(‘A’)+n)+cResult ENDIF NDDO ELSE cResult=0 ENDIF WAIT WINDOWS‘十六进制数表示为’+cResult
|