1、国家二级 VF 机试(操作题)-试卷 44 及答案解析(总分:6.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:2.00)1.(1)将当前史件夹下的自由表 class(班级表)和 teacher (教师表)添加到学牛数据库 sdb 中。 (2)为班级表 class 创建一个丰索引和普通索引(升序),主索引的索引名和索引表达式均为“班级号”;普通索引的索引名和索引表达式均为“班主任号”。为教师表 teacher 创建个主索引,索引名和索引表达式均为“教师号”。 (3)通过“班级号”字段建立班级表 class 和学牛表 student 表间的永久联系。通过班级表class 的“班主
2、任号”字段与敦师表 teacher 的“教师号”字段建立班级表 class 和教师表 teacher 间的永久联系。 (4)为以上建立的两个联系设置参照完整性约束:更新规则为“级联”;删除规则为“限制”;插入规则为“限制”。(分数:2.00)_二、简单应用题(总题数:1,分数:2.00)2.(1)打开程序文件 cylinderprg,请按要求修改程序并运行程序。 (2)以表 employeedbf 和ordersdbf 中数据为基础,使用 SQL 命令检索订单数最多的前 3 名职工的职工号、姓名和订单数,检索结果按订单数降序排序存入表 ncweoundbf,同时将所用 SQL 命令存入文件 n
3、ewtxt 中。(分数:2.00)_三、综合应用题(总题数:1,分数:2.00)3.在考生文件夹下有 myform 表单文件,将该表单设置为项层表单,然后设计一个菜单,并将新建立的菜单应用于该表单(在表单的 load 事件中运行菜单程序)。 新建立的菜单文件名为 mymenu,结构如下(表单、报表和退出是菜单栏中的 3 个菜单项): 表单 浏览课程 浏览选课统计 报表 预览报表 退出 如图 3-3 所示。各菜单项的功能如下: 选择“浏览课程”时在表单的表格控件中显示“课程”表的内容(在过程中完成,直接指定表名)。 选择“浏览选课统计”时在表单的表格控件中显示简单应用题建立的视图sview 的内
4、容(在过程中完成,直接指定视图名)。 选择“预览报表”时预览简单应用题建立的报表creport(在命令中完成)。 选择“退出”时关闭和释放表单(在命令中完成)。 注意:最后要生成菜单程序,并注意该菜单将作为顶层表单的菜单。 (分数:2.00)_国家二级 VF 机试(操作题)-试卷 44 答案解析(总分:6.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:2.00)1.(1)将当前史件夹下的自由表 class(班级表)和 teacher (教师表)添加到学牛数据库 sdb 中。 (2)为班级表 class 创建一个丰索引和普通索引(升序),主索引的索引名和索引表达式均为“班级号”;
5、普通索引的索引名和索引表达式均为“班主任号”。为教师表 teacher 创建个主索引,索引名和索引表达式均为“教师号”。 (3)通过“班级号”字段建立班级表 class 和学牛表 student 表间的永久联系。通过班级表class 的“班主任号”字段与敦师表 teacher 的“教师号”字段建立班级表 class 和教师表 teacher 间的永久联系。 (4)为以上建立的两个联系设置参照完整性约束:更新规则为“级联”;删除规则为“限制”;插入规则为“限制”。(分数:2.00)_正确答案:(正确答案:【操作步骤】 (1)命令窗口执行:MODIFY DATABASE sdb,打开数据库设计器。
6、 右击数据库设计器,选择【添加表】,在“打开”对话框中双击“class”、 “teacher”表添加到数据库中。 (2)右击数据库设计器中的“class”表,选【修改】,打开“class”表设计器,“字段”选项卡中选“班级号”,“索引”列中选“升序”,同样方法为“班主任号”建立“升序”排序;在“索引”选项卡中选“班级号”,并修改其“类型”为“丰索引”,单击“确定”按钮保存表结构修改。 参照上面的操作,为“teacher”表建立“教师号”字段的主索引。 (3)在数据库设计器中拖动“class”表“索引”下方的丰索引“班级号”到“student”表中“索引”下方的普通索引“班级号”上,为两个表建立
7、联系。 以同样的方法,为“teacher”表和“class”表建立联系,这样便建立了“student”、“class”和“teacher”,3 个表之间的联系。 (4)选中“student”表和“class”表之间的关联线(被选中的连线会变粗),首先执行【数据库】【清理数据库】菜单命令,清空数据表中带有删除标记的记录,然后执行【数据库】【编辑参照完整性】菜单命令。 在打开的“参照完整性”对话框的表格中,选择“更新”列下两个单元格中的内容都为“级联”;“删除”列下两个单元格中的内容都为“限制”;“插入”列下两个单元格中的内容都为“限制”,单击“确定”按钮保存参照完整性的修改。)解析:二、简单应用
8、题(总题数:1,分数:2.00)2.(1)打开程序文件 cylinderprg,请按要求修改程序并运行程序。 (2)以表 employeedbf 和ordersdbf 中数据为基础,使用 SQL 命令检索订单数最多的前 3 名职工的职工号、姓名和订单数,检索结果按订单数降序排序存入表 ncweoundbf,同时将所用 SQL 命令存入文件 newtxt 中。(分数:2.00)_正确答案:(正确答案:(1)模块是一个相对独立的程序段,它可以被其他模块调用,也可以去调用其他的模块。通常,把被其他模块调用的模块祢为子程序,把调用其他模块而没有被其他模块调用的模块称为主程序。题中给出了两个模块,其中,
9、上面的一部分,即第一个“RETURN”前面的代码是主程序,下面的模块 cya 作为子程序被主程序调用。模块调用的格式有两种:一种是使用 DO 命令:D0WITH,本题中使用的就是这种方法:“DO cya WITH r,h,carea”,其中 cva 是调用的子程序名,r,h、carea 是传递给子程序的实参,分别代表半径、高和表面积;而在子程序 cya 中则定义了 a、b、c 三个变量作为形参对应接收主程序传递过来的实参,并计算出表面积的值 c。在这种方法调用中,当实参为变量时,将按址传递,即不是将实参的值传递给形参,而是将存放实参的内存中的存储单元的地址传递给形参,因此形参和实参具有相同的存
10、储单元地址,也就是说,形参和实参共用同一存储单元,实际上是同一个变量,这时,在调用子程序时,如果形参的值发生了改变,那么对应的买参的值也将随着改变。故在本题中,当子程序结束时,求出的 c 的值即是主程序中 carea 的值。另一种调用方法是函数调用的方法,格式为:(,)。在这种调用方式中,默认情况下都是按值传递,即系统计算出实参的值,并把它们赋值给相应的形参变量。这样,当子程序结束时,形参变量被释放,计算的结果将会随形参的消失而消失,而不能将运算后形参的值再传递给实参,实参的值并不会改变。所以,在本题中,当用函数调用方式时,要想在主程序中输出 carea 的值,应该在子程序的最后返回计算的表面
11、积值 c。而在主程序中,应当将调用函数返回的值赋值给 carea 变量,即“carea=area(r,h)”。这时,实参就变成了两个:r、h,而子程序的形参有三个:a、b、c。这样是可以的。我们说在调用模块时,系统会自动把实参一一传递给对应的形参,形参的数目不能少于实参的数目,因为传递过来的每一个实参都要有对应的形参接收,如果形参的数目比实参少,那多出来的实参就好像找不到地址的信件一样,不知该送去哪里,这时系统就会产生运行时错误。但是,形参的数目可以多于实参的数目,这时,多余的形参变量取初值逻辑假(F)。 【操作步骤】 步骤 1:在命令窗口执行命令:MODIFY COMMANDcyinder!
12、,打开 cylinderprg 程序,代码如下: *本程序的功能为输入圆柱体的半径和高,计算圆柱体表面积。 *请将程序修改为函数调用方式(注意不得增删语句行)。 SET TALK OFF CLEAR LOCAL carea INPUT”请输入圆柱体的半径“TO r INPUT”请输入圆柱体的高”TO h DO cya WITH r,h,carea ?”圆柱体的表面积为:”,carea RETURN PROCEDURE cya PARAMETERS a,b,c LOCAL Pai pai=314159 c=2*(pai*a2)+2*pal*a*b RETURN ENDPROC 修改程序中的错误行
13、,修改后的程序如下: SET TALK OFF CLEAR LOCAL carea 定义局部变量 local INPUT”输入圆柱体的半径:”TO r 从键盘输入一个半径值 INPUT”输入圆柱体的高:“TO h 从键盘输入一个高值 carea=cya(r,h) 调用模块程序,转到 PROCEDURE 命令行执行程序,按值方式传递参数?”圆柱体的表面积为:”carea RETURN PROCEDURE cya 过程的开始,并命名过程名为 cya PARAMETERS a,b,c 声明的行参变量被看作是模块程序中的私有变量 LOCAL pai pai=314159 c=2*(pai*a2)+2*
14、pai*a*b 计算圆柱体表面积的表达式 RETURN c 将计算的表达式值返回上级模块 ENDpROC 步骤 2:保存文件修改,在命令窗口执行命令:DOYZTPRG,执行程序文件。 (2)【审题分析】本题要求利用 SQL 语句进行查询,用到了 emFloy 和 order 两张表,可以使用联接查询。因为要查找订单数最多的前两名职工,应该按职工号分组,并求出每一组中记录的个数,即是每个职工的订单数,要分别使用 group by 短语和 count()计数函数;另外,因为只查找最多的前两名,应该按降序排序,并使用 top短语;将查询结果保存在永久表中,应使用 INTO TABLE 短语。 【操作
15、步骤】 步骤 1:在命令窗 r执行命令:MODIFY FILE new,打开文本编辑器编写 SQL 命令。 步骤 2:在编辑器中输入如下程序代码(以下程序是通过查询设计器生成): SELECT TOP 3 Employee职工号 Employee姓名,COUNT(*)订单数; FROM employee INNER JOIN orders; ON Employee职工号=0rders职工号; GROUP BY Employee职工号; ORDER BY 3 DESC; INTO TABLE newcoundbf 步骤 3:在命令窗口执行命令:DO NEW:TXT,执行文件(注意:执行文件时,文
16、件后缀名txt 不能缺省)。)解析:三、综合应用题(总题数:1,分数:2.00)3.在考生文件夹下有 myform 表单文件,将该表单设置为项层表单,然后设计一个菜单,并将新建立的菜单应用于该表单(在表单的 load 事件中运行菜单程序)。 新建立的菜单文件名为 mymenu,结构如下(表单、报表和退出是菜单栏中的 3 个菜单项): 表单 浏览课程 浏览选课统计 报表 预览报表 退出 如图 3-3 所示。各菜单项的功能如下: 选择“浏览课程”时在表单的表格控件中显示“课程”表的内容(在过程中完成,直接指定表名)。 选择“浏览选课统计”时在表单的表格控件中显示简单应用题建立的视图sview 的内
17、容(在过程中完成,直接指定视图名)。 选择“预览报表”时预览简单应用题建立的报表creport(在命令中完成)。 选择“退出”时关闭和释放表单(在命令中完成)。 注意:最后要生成菜单程序,并注意该菜单将作为顶层表单的菜单。 (分数:2.00)_正确答案:(正确答案:本题主要考查的是菜单在顶层表单中的应用。主要包括两大部分的操作,即菜单设计和表单设计。操作过程可按以下步骤进行: 通过菜单设计器建立菜单,注意主菜单和子菜单的建立。菜单设计有两个关键操作:一是在菜单设计器中勾选“蒂规选项”对话框中的“顶层表单”,表示此菜单存在顶层表单中;二是在释放表单时,要使用表单的文件名,即本题可以通过 MAIN
18、FORMRELEASE 命令释放 MAINFORM 表单,注意:不要使用 THIsFORIMRELEASE 命令释放表单。 在表单设计过程中,要注意将表单设置为顶层表单,通过表单的 showwindow 属性值可以进行设置,而在表单中调用菜单文件是在表单的 Load(或 INIT)事件中进行调用,还需要通过 THIS 短语指定当前表单对象的引用。其基本格式为:DoWISTH THIs,”。 【操作步骤】 步骤 1:在命令窗口执行命令:CREATEMENUmymenu,在弹出的“新建菜单”对话框中单击“菜单”图标按钮,扣开菜单设计器。在菜单设计器“菜单名称”列的文本框中依次输入“表单”、“报表”
19、和“退出”3 个主菜单名,“结果”下拉框中选择为“子菜单”,单击“表单”行的“创建”按钮进入下级菜单设计。 步骤 2:在“菜单名称”列依次输入子菜单名“浏览课程”和“浏览选课统计”,选择“结果”列都为“过程”,分别单击两个“过程”后面的“创建”按钮打开过程编辑器,编写过程代码。 “课程浏览”菜单命令的过程代码: Myform.Gridl.RecordSourceType=1 Myform.Gridl.RecordSource=“课程”: “选课统计浏览”菜单命令的过程代码: OPEN DATABASE 学生管理 Myform.Gridl.RecordSourceType=0 Myform.Gridl.RecordSource=“sview”: 步骤 3:通过“菜单级”下拉框返回主菜单项设计界面,以同样的方法,设计“报表”菜单项的下级子菜单“预览报表”,注意选择“预览报表”的“结果”项为“命令”,然后往后面的文本框中输入以下命令代码: REPORT FORM creport PREVIEW 步骤 4:再次返回土菜单项设汁界面,选择“退出”菜单命令的“结果”项为“命令”,并输入命令语句: myform.RELEASE 步骤 5:执行【显示】【常规选项】菜单命令,在弹出的“常规选项”对话框中勾选“项层表单”复选框,然后单击“确定”按钮,保存修改。如图 417 所示。)解析: