1、国家二级 VF 机试(操作题)-试卷 292 及答案解析(总分:6.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:2.00)1.(1)建立一个“客户”表,表结构如下: 客户编号 C(8) 客户名称 C(8) 联系地址 C(30) 联系电话 C(11) 电子邮件 C(20) (2)建立一个“客户”数据库,并将“客户”表添加到该数据库中。 (3)将如下记录插入到“客户”表中。 (分数:2.00)_二、简单应用题(总题数:1,分数:2.00)2.(1)打开程序文件 cvlinderprg,请按要求修改程序并运行程序。 (2)以表 employeedbf 和ordersdbf 中数据为
2、基础,使用 SQL 命令检索订单数最多的前 3 名职工的职工号、姓名和订单数,检索结果按订单数降序排序存入表 newcoundbf,同时将所用 SQL 命令存入文件 newtxt 中。(分数:2.00)_三、综合应用题(总题数:1,分数:2.00)3.建立一个表单,表单文件名和表单控件名均为 myform b,表单标题为“订单管理”,表单其他功能如下: 表单中含有一个页框控件(PageFramel)和一个“退出”命令按钮(Commandl),单击“退出”命令按钮关闭并释放表单。 页框控件(PageFramel)中含有 3 个页面,每个页面都通过一个表格控件显示有关信息: 第一个页面 Pagel
3、 上的标题为“职工,其上的表格控件名为 grdEmployee,显示表 employee 中的内容。 第二个页面 Page2 上的标题为“订单”,其上的表格控件名为 grdOrders,显示表 orders 中的内容。 第三个页面 Page3 上的标题为“职工订单金额”,其上的表格控件名为 Gridl,该表格中显示每个职工的职 T 号、姓名及其所经手的订单总金额(注:表格只有 3 列,第 1 列为“职工号”,第 2 列为“姓名”,第 3 列为“总金额”)。(分数:2.00)_国家二级 VF 机试(操作题)-试卷 292 答案解析(总分:6.00,做题时间:90 分钟)一、基本操作题(总题数:1
4、,分数:2.00)1.(1)建立一个“客户”表,表结构如下: 客户编号 C(8) 客户名称 C(8) 联系地址 C(30) 联系电话 C(11) 电子邮件 C(20) (2)建立一个“客户”数据库,并将“客户”表添加到该数据库中。 (3)将如下记录插入到“客户”表中。 (分数:2.00)_正确答案:(正确答案:(1)在命令窗口执行命令: CREATE 客户 ,打开表设计器新建表(注意:当前没有打开的数据库)。 根据题意,在表设计器中逐行输入每个字段的字段名,并设置字段类型和宽度(注意:字母 C 表示为字符型数据),然后单击“确定”按钮,此时系统会弹出一个对话框询问“现在输入数据记录吗?”,单击
5、“是”按钮。 (2)接上小题操作,在弹出的输入表记录界面中输入题中所要求的记录,输入完毕后直接记录输入界面。 (3)在命令窗口执行命令: MODIFY DATABASE 客户 ,新建数据库并打开数据库设计器。 在数据库设计器中右击鼠标,选择【添加表】快捷菜单命令,在弹出的“打开”对话框中双击“客户”表,将表添加到数据库中。 (4)执行【文件】【新建】菜单命令,或单击“常用”工具栏的“新建”按钮,在弹出的“新建”对话框中选中“报表”选项,然后单击“向导”图标按钮,系统弹出“向导选取”对话框,选中“报表向导”项,单击“确定”按钮,启动报表向导。 在报表向导的“步骤 1-字段选取”界面的“数据库和
6、表”下选中“客户”表,将“可用字段”中全部字段添加到 “选定字段”中,直接单击“完成”按钮进入向导最后一个 界面。 在报表向导的“步骤 6-完成”界面的“报表标题”框 中输入“客户”,单击“完成”按钮,在“另存为”对话框 的“保存报表为:”框中输入报表文件名“客户”,单击“保存”按钮。)解析:解析:本题考查了表的基本操作;数据库的基本操作;报表向导的使用。 建立自由表可以在表设计器中进行,注意建立自由表前要先关闭所有打开的数据库,否则所建立的数据表可能是数据库表;将数据表添加到数据库中可以在数据库设计器中操作;报表向导操作比较简单,启动报表向导后,在各向导提示界面完成相应的操作即可。二、简单应
7、用题(总题数:1,分数:2.00)2.(1)打开程序文件 cvlinderprg,请按要求修改程序并运行程序。 (2)以表 employeedbf 和ordersdbf 中数据为基础,使用 SQL 命令检索订单数最多的前 3 名职工的职工号、姓名和订单数,检索结果按订单数降序排序存入表 newcoundbf,同时将所用 SQL 命令存入文件 newtxt 中。(分数:2.00)_正确答案:(正确答案:(1)步骤 1:在命令窗口执行命令: MODIFY COMMAND cylinder ,打开cylinderprg 程序,代码如下: *本程序的功能为输入圆柱体的半径和高,计算圆柱体表面积。 *请
8、将程序修改为函数调用方式(注意不得增删语句行)。 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 ?“圆柱体的表面积为:“,carea 8 RETURN 9 PROCEDURE cya 10 PARAMETERS a,b,c 11 LOCAL pai 12 pai=31 4 1 5 9 13 c=2*(pai*a2)+2*pai*a*b 14 RETURN 15 ENDPROC 修改程序中的错误行,修改后的程序如下: 1 SE
9、T TALK OFF 2 CLEAR 3 LOCAL carea &定义局部变量 local 4 INPUT“输入圆柱体的半径:“TO r &从键盘榆入一个半径值 5 INpuT”输入圆柱体的高:”TO h &从键盘输入一个高值 6 carea=cya(r,h) &调用模块程序,转到 PROCEDuRE 命令行执行程序,按值方式传递参数 7 ?“圆柱体的表面积为:“,carea 8 RETURN 9 PROCEDuRE cva &过程的开始,并命名过程名为 cya 10 PARAMETERS a,b,c &声明的行参变量被看作是模块程序中的私有变量 11 LOCAL pai 12 pai=31
10、 4 1 5 9 13 c=2*(pai*a2)+2*pai*a*b &计算圆柱体表面积的表达式 14 RETURN c &将计算的表达式值返回上级模块 15 ENDPROC 步骤 2:保存文件修改,在命令窗口执行命令: DO YZTPRG ,执行程序文件。 (2)步骤 1:在命令窗口执行命令: MODIFY FILE new ,打开文本编辑器编写 SQL 命令。 步骤 2:在编辑器中输入如下程序代码(以下程序是通过查询设计器生成): 1 SELECT TOP 3 Emplovee职工号, Employee姓名, COUNT(*) 订甲数; 2 FROM employee INNER JOIN
11、 orders ; 3 ON Employee职工号=orders职工号; 4 GROUP BY Employee职工号; 5 ORDER BY 3 DESC ; 6 INTO TABLE newcoundbf 步骤 3:在命令窗口执行命令: DO NEWTXT ,执行文件(注意:执行文件时,丈件后缀名txt 不能缺省)。)解析:解析:(1)本题主要考查的是模块的定义和调用。模块是一个相对独立的程序段,它可以被其他模块调用,也可以去调用其他的模块。通常,把被其他模块调用的模块称为子程序,把调用其他模块而没有被其他模块调用的模块称为主程序。题中给出了两个模块,其中,上面的一部分,即第一个“RET
12、URN”前面的代码是主程序,下面的模块 cva 作为子程序被主程序调用。模块调用的格式有两种:一种是使用 DO命令:DOWITH,本题中使用的就是这种方法:“DO cya WITH r,h,carea”,其中 cya 是调用的子程序名,r、h、carea 是传递给子程序的实参,分别代表半径、高和表面积;而在子程序 cva 中则定义了 a、b、c 三个变量作为形参对应接收主程序传递过来的实参,并计算出表面积的值 c。在这种方法调用中,当实参为变量时,将按址传递,即不是将实参的值传递给形参,而是将存放实参的内存中的存储单元的地址传递给形参,因此形参和实参具有相同的存储单元地址,也就是说,形参和实参
13、共用同一存储单元,实际上是同一个变量,这时,在调用子程序时,如果形参的值发生了改变,那么对应的实参的值也将随着改变。故在本题中,当子程序结束时,求出的 c 的值即是主程序中 carea 的值。另一种调用方法是函数调用的方法,格式为:(,)。在这种调用方式中,默认情况下都是按值传递,即系统计算出实参的值,并把它们赋值给相应的形参变量。这样,当子程序结束时,形参变量被释放,计算的结果将会随形参的消失而消失,而不能将运算后形参的值再传递给实参,实参的值并不会改变。所以,在本题中,当用函数调用方式时,要想在主程序中输出 carea 的值,应该在子程序的最后返回计算的表面积值 c。而在主程序中,应当将调
14、用函数返回的值赋值给 carea 变量,即“carea=area(r,h)”。这时,实参就变成了两个:r、h,而子程序的形参有三个:a、b、c。这样是可以的。我们说在调用模块时,系统会自动把实参一一传递给对应的形参,形参的数目不能少于实参的数目,因为传递过来的每一个实参都要有对应的形参接收,如果形参的数目比实参少,那多出来的实参就好像找不到地址的信件一样,不知该送去哪里,这时系统就会产生运行时错误。但是,形参的数目可以多于实参的数目,这时,多余的形参变量取初值逻辑假(F)。 (2)本题要求利用 SQL 语句进行查询,用到了 emplov 和 order 两张表,可以使用联接查询。因为要查找订单
15、数最多的前两名职工,应该按职工号分组,并求出每一组中记录的个数,即是每个职工的订单数,要分别使用 group by 短语和 count()计数函数;另外,因为只查找最多的前两名,应该按降序排序,并使用 top 短语;将查询结果保存在永久表中,应使用 INTO TABLE 短语。三、综合应用题(总题数:1,分数:2.00)3.建立一个表单,表单文件名和表单控件名均为 myform b,表单标题为“订单管理”,表单其他功能如下: 表单中含有一个页框控件(PageFramel)和一个“退出”命令按钮(Commandl),单击“退出”命令按钮关闭并释放表单。 页框控件(PageFramel)中含有 3
16、 个页面,每个页面都通过一个表格控件显示有关信息: 第一个页面 Pagel 上的标题为“职工,其上的表格控件名为 grdEmployee,显示表 employee 中的内容。 第二个页面 Page2 上的标题为“订单”,其上的表格控件名为 grdOrders,显示表 orders 中的内容。 第三个页面 Page3 上的标题为“职工订单金额”,其上的表格控件名为 Gridl,该表格中显示每个职工的职 T 号、姓名及其所经手的订单总金额(注:表格只有 3 列,第 1 列为“职工号”,第 2 列为“姓名”,第 3 列为“总金额”)。(分数:2.00)_正确答案:(正确答案:步骤 1:在命令窗口执行
17、命令: OPEN DATABASE 0rders-manaqe ,打开“orders msnaqe”数据库。 步骤 2:在命令窗口执行命令: CREATE FORM myform-b ,打开表单设计器新建表单。步骤 3:从“表单工具栏”中依次向表单添加一个命令按钮和一个页框控件。在“属性”面板的下拉框中选择表单对象,在“全部”选项卡中修改对象属性值,见表 4-10。 步骤 4:右击表单选择【数据环境】快捷菜单命令打开表单数据环境,继续在表单数据环境中单击右键选择【添加】快捷菜单命令,在“添加表或视图”对话框中依次双击 employee 表和 orders 表,将其添加到数据环境中,两者之间的关
18、联也会自动添加其中,选中两个表之间的关联线(被选中的线会变粗),然后按 Delete 键,删除该关联。 步骤 5:右击“页框”控件,选择【编辑】快捷菜单命令,让页框处于编辑状态,再将数据环境中的employee 表和 orders 表分别拖到“职工”和“订单”页面中(注意:操作过程中,当独立的页面被选中时,页框处于编辑状态,在页框四周会出现蓝色边框,如图 422 所示;另外,表单设计器窗口应为“还原”状态,而非最大化窗口,否则将遮盖表单数据环境内容,无法将表拖到页面中)。这时,在“职工”和“订单”页面中会分别自动生成表格 grdEmployee 和 grdOrders。 )解析:解析:本题主要
19、考查了表单及控件的常用属性的设置;SQL 分组计算查询;表单数据环境。 通过拖放表单数据环境中的表到表单中,可快速建立表格及表格与数据表的联系,要注意的是在向每个页面中添加表格数据对象时,一定要注意页面处于编辑状态下(每个页面都可单独选定,将表从数据环境中拖放到要求的页面中),否则添加的表格对象只是停留在页框上方,该表格实际是包含在表单中而非添加到页框的页面中。控制页框中页面数的属性为 pageCount。 本题要注意的是,由于在数据库中 employee 表和orders 表已经建立了永久联系,所以当将这两张表添加到数据环境中时,二者之间会自动产生一个相应的关联(临时联系),这样,当运行表单后,0rders 表中的记录就会随着 employee 表中当前记录的改变而改变,即 orders 表中始终显示的不是整个 orders 表的内容,而只是显示 employee 表中当前记录在orders 表中对应的记录。而题中要求在“订单”页面显示 orders 表的内容,故应该在数据环境中将两张表的关联删除。 第三个页面的表格中显示的内容需要用 SQL 查询语句完成,可以将表格 qridl 的表格数据来源属性 RecordsourceType 设置为“4-SQL”,而对应的数据来源 RecordSource 可以在表单的 Init 事件中通过 SQL 语句来指定。