1、国家二级 VF 机试(操作题)-试卷 113 及答案解析(总分:6.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:2.00)1.(1)建立菜单 query menu。该菜单只有“查询”和“退出”两个主菜单项(条形菜单),其中单击菜单项“退出”时,返回到 VFP 系统菜单(相应命令写在命令框中,不要写在过程中)。 (2)将 COURSE 表的“开课系部”字段名改为“开课单位”,其余不变。 (3)从数据库 scoremanager 中移去表 temp2dbf(不是删除)。 (4)将 score1 表中记录按学号从低到高排序,在学号相同的情况下再按成绩从高到低排序,排序结果存入表 N
2、EW ORDER。(分数:2.00)_二、简单应用题(总题数:1,分数:2.00)2.(1)打开程序文件 cylinderprg,请按要求修改程序并运行程序。 (2)以表 employeedbf 和ordersdbf 中数据为基础,使用 SQL 命令检索订单数最多的前 3 名职工的职工号、姓名和订单数,检索结果按订单数降序排序存入表 newcoundbf,同时将所用 SQL 命令存入文件 newtxt 中。(分数:2.00)_三、综合应用题(总题数:1,分数:2.00)3.在考生文件夹下,先打开学生数据库 sdb,然后创建一个文件名为 form 的表单,完成如下综合应用: 在该表单中设计两个命
3、令按钮,各命令按钮的功能如下: “查询”按钮(Command1):在该按钮的Click 事件中使用 SQL 的 SELECT 命令查询每个学生所选的所有课程的成绩都是 60 分以上(包括 60 分)的学生的学号、姓名、平均成绩和最低分,并将查询结果按学号升序排序存储到表 four 中。表 four 的字段为学号、姓名、平均成绩、最低分。 “退出”按钮(Command2):单击“退出”按钮时,关闭表单。 表单设计完成后,运行该表单进行查询。(分数:2.00)_国家二级 VF 机试(操作题)-试卷 113 答案解析(总分:6.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:2.00)
4、1.(1)建立菜单 query menu。该菜单只有“查询”和“退出”两个主菜单项(条形菜单),其中单击菜单项“退出”时,返回到 VFP 系统菜单(相应命令写在命令框中,不要写在过程中)。 (2)将 COURSE 表的“开课系部”字段名改为“开课单位”,其余不变。 (3)从数据库 scoremanager 中移去表 temp2dbf(不是删除)。 (4)将 score1 表中记录按学号从低到高排序,在学号相同的情况下再按成绩从高到低排序,排序结果存入表 NEW ORDER。(分数:2.00)_正确答案:(正确答案:(1)命令窗口执行: CREATE MENU query_menu ,在“新建菜
5、单”对话框中单击“菜单”图标按钮,打开菜单设计器。 在“菜单名称”列的文本框中依次输入“查询”和“退出”两个主菜单名,在“退出”菜单“结果”下拉框中选择为“命令”,在后面的文本框中输入命令: SET SYSMENU TO DEFAULT 。 (2)在命令窗口执行命令: MODIFY DATABASE SCORE_MANAGER ,打开数据库设计器。 右击 course 表,选择【修改】,打开表设计器,将“字段”选项卡中的“开课系部”字段名修改为“开课单位”,单击“确定”按钮保存。 (3)右击 temp2 表,选择【删除】,弹出提示对话框中单击“移去”,接着弹出的提示对话框中单击“是”,将 te
6、mp2 表从数据库中移去。 (4)在命令窗口执行: SELECT * FROM SCORE1 ORDER BY 学号,成绩 DESC INTO TABLE NEW_ORDER 。)解析:解析:本题考查了菜单的建立、表结构的修改、数据库设计器的使用和 SQL 查询语句。 当将数据库表从数据库中移去后,就成为自由表。二、简单应用题(总题数:1,分数:2.00)2.(1)打开程序文件 cylinderprg,请按要求修改程序并运行程序。 (2)以表 employeedbf 和ordersdbf 中数据为基础,使用 SQL 命令检索订单数最多的前 3 名职工的职工号、姓名和订单数,检索结果按订单数降序
7、排序存入表 newcoundbf,同时将所用 SQL 命令存入文件 newtxt 中。(分数:2.00)_正确答案:(正确答案:(1) 步骤 1:在命令窗口执行命令: MODIFY COMMAND cylinder ,打开cylinderprg 程序,代码如下: *本程序的功能为输入圆柱体的半径和高,计算圆柱体表面积。 *请将程序修改为函数调用方式(注意不得增删语句行)。 1 SET TALK OFF 2 CLEAR 3 LOCAL carea 4 INPUT“请输入圆柱体的半径“TO r 5 INPUT“请输入圆柱体的高“TO h 6 DO cya WITH r,h,carea 7 ?“圆柱
8、体的表面积为:“,carea 8 RETURN 9 PROCEDURE cya 10 PARAMETERS a,b,c 11 LOCAL pai 12 pai=314159 13 c=2*(pai*a2)+2*pal*a*b 14 RETURN 15 ENDPROC 修改程序中的错误行,修改后的程序如下: 1 SET TALK OFF 2 CLEAR 3 LOCAL carea &定义局部变量 local 4 INPUT“输入圆柱体的半径:“TO r &从键盘输入一个半径值 5 INPUT“输入圆柱体的高:“TO h &从键盘输入一个高值 6 carea=cya(r,h) &调用模块程序,转到
9、 PROCEDURE 命令行执行程序,按值方式传递参数 7 ?”圆柱体的表面积为:“,carea 8 RETURN 9 PROCEDURE cya &过程的开始,并命名过程名为 cya 10 PARAMETERS a,b,c &声明的行参变量被看作是模块程序中的私有变量 11 LOCAL pai 12 pai=31 4 l 5 9 13 c=2*(pai*a2)+2*pai*a*b &计算圆柱体表面积的表达式 14 RETURN C &将计算的表达式值返回上级模块 15 ENDPROC 步骤 2:保存文件修改,在命令窗口执行命令: DO YZTPRG ,执行程序文件。 (2) 步骤 1:在命令
10、窗口执行命令:MODIFY FILE new ,打开文本编辑器编写 SQL 命令。 步骤 2:在编辑器中输入如下程序代码(以下程序是通过查询设计器生成): 1 SELECT TOP 3 Employee职工号, Employee姓名,COUNT(*)订单数; 2 FROM employee INNER JOIN orders ; 3 ON Employee职工号=Orders职工号; 4 GROUP BY Employee职工号; 5 ORDER BY 3 DESC ; 6 INTO TABLE newcoundbf 步骤 3:在命令窗口执行命令:DO NEWTXT,执行文件(注意:执行文件时
11、,文件后缀名txt 不能缺省)。)解析:解析:(1)本题主要考查的是模块的定义和调用。在本题中,当用函数调用方式时,要想在主程序中输出 carea 的值,应该在子程序的最后返回计算的表面积值 c。而在主程序中,应当将调用函数返回的值赋值给 carea 变量,即“carea=area(r,h)”。这时,实参就变成了两个:r、h,而子程序的形参有三个:a、b、c。这样是可以的。我们说在调用模块时,系统会自动把实参一一传递给对应的形参,形参的数目不能少于实参的数目,因为传递过来的每一个实参都要有对应的形参接收,如果形参的数目比实参少,那多出来的实参就好像找不到地址的信件一样,不知该送去哪里,这时系统
12、就会产生运行时错误。但是,形参的数目可以多于实参的数目,这时,多余的形参变量取初值逻辑假(F)。 (2)本题要求利用 SQL语句进行查询,用到了 employ 和 order 两张表,可以使用联接查询。因为要查找订单数最多的前两名职工,应该按职工号分组,并求出每一组中记录的个数,即是每个职工的订单数,要分别使用 group by 短语和 count()计数函数;另外,因为只查找最多的前两名,应该按降序排序,并使用 top 短语;将查询结果保存在永久表中,应使用 INTO TABLE 短语。三、综合应用题(总题数:1,分数:2.00)3.在考生文件夹下,先打开学生数据库 sdb,然后创建一个文件
13、名为 form 的表单,完成如下综合应用: 在该表单中设计两个命令按钮,各命令按钮的功能如下: “查询”按钮(Command1):在该按钮的Click 事件中使用 SQL 的 SELECT 命令查询每个学生所选的所有课程的成绩都是 60 分以上(包括 60 分)的学生的学号、姓名、平均成绩和最低分,并将查询结果按学号升序排序存储到表 four 中。表 four 的字段为学号、姓名、平均成绩、最低分。 “退出”按钮(Command2):单击“退出”按钮时,关闭表单。 表单设计完成后,运行该表单进行查询。(分数:2.00)_正确答案:(正确答案:步骤 1:命令窗口执行:CREATE FORM FORM,打开表单设计器新建表单。向表单添加两个命令按钮。 步骤 2:选择表单对象,修改对象属性值,见表 319。 )解析:解析:本题主要考查的是表单的建立、常用属性的设置和 SQL 分组与计算查询。 SQL 分组与计算查询是对 student 和 sc 两表进行联接查询,通过 AVG 和 MIN 函数计算,根据题意,在进行分组时,需要先将学号相同的记录分到一组,然后同 havinq 子句对每组中的成绩进行判断是否全部大于等于 60 分,这样就可以找出满足条件的记录,通过 order by 短语对查询结果排序,最后将结果保存到指定的表中。