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