计算机等级考试二级VFP机试试题21
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第⼆⼗⼀套
⼀、基本操作题(共四⼩题,第1和2题是7分、第3和4题是8分)
在考⽣⽂件夹下完成如下操作:
1. 打开"订货管理"数据库,并将表order_detail添加到该数据库中。
2. 为表order_detail的"单价"字段定义默认值为NULL。
3. 为表order_detail的"单价"字段定义约束规则:单价 > 0 ,违背规则时的提
⽰信息是:"单价必须⼤于零"。
4. 关闭"订货管理"数据库,然后建⽴⾃由表customer,表结构如下:
客户号字符型(6)
客户名字符型(16)
地址字符型(20)
电话字符型(14)
本题主要考核点:
将⼀个⾃由表添加到数据库中、为字段建⽴约束规则、设置字段的默认值、建⽴表的结构等知识点
本题解题思路:
第⼀步:打开考⽣⽂件夹下的"订货管理"数据库
第⼆步:打开数据库菜单选择"添加表(A)",在弹出的"打开"对话框中,选定考⽣⽂件夹下的order_detail表,再点击"确定"即可,这样表order_detail就添加到了"订货管理"数据库中
第三步:在数据库设计器中选中"order_detail"表,选择数据库菜单下的"修改(V)",弹出表设计器,在表设计器中点击"单价"所在的⾏,单击Null列上的按钮,确认按钮上出现对号,在字段有效性的规则字段中输⼊:单价>0,在信息框中输⼊: "单价必须⼤于0",在默认值框中输⼊:.NULL.。
确定即可
第四步:关闭数据库,在Visual FoxPro主窗⼝中按下组合键Ctrl+N。
系统弹出"新建"对话框,在"⽂件类型"中选择表,在弹出的对话框中选择"新建表",并在弹出"创建"对话框中选定考⽣⽂件夹,在输⼊表名中填⼊"customer",再点击保存。
第四步:在弹出的表设计器中按题⾯的要求依次输⼊各个字段的定义,点击"确定"按钮,保存表结构。
⼆、简单应⽤(2⼩题,每题20分,计40分)
在考⽣⽂件夹下完成如下简单应⽤:
1. 列出总⾦额⼤于所有订购单总⾦额平均值的订购单(order_list)清单(按
客户号升序排列),并将结果存储到results表中(表结构与order_list表
结构相同)。
2. 利⽤Visual Foxpro的"快速报表"功能建⽴⼀个满⾜如下要求的简单报表:
(1) 报表的内容是order_detail表的记录(全部记录,横向);
(2) 增加"标题带区",然后在该带区中放置⼀个标签控件,该标签控件显⽰报
表的标题"器件清单";
(3) 将页注脚区默认显⽰的当前⽇期改为显⽰当前的时间;
(4) 最后将建⽴的报表保存为report1.frx。
本题主要考核点:
SQL中的查询SELECT查询、联接查询、查询的排序、查询的结果的去向等;报表的建⽴⽅法等知识点.
解题思路:
第⼀⼩题:为了能得到所有总⾦额⼤于平均总⾦额的订购单信息,应该⾸先得到总⾦额的平均值,利⽤:SELECT AVG(总⾦额) FROM ORDER_LIST INTO ARRAY AFieldsValue,并将总⾦额的平均值放到⼀个数组变量之中AFieldsValue;下⼀步就可以以总⾦额>AFieldsValue为条件得到总⾦额⼤于平均总⾦额的订购单信息,将这⼀条件放在WHERE⼦句的后⾯,查询结果的排序要⽤到ORDER BY⼦句,ORDER BY 客户号;查询结果要放⼊⼀个永久表中要⽤到INTO TABLE⼦句,结果保存到RESULTS表中所以要⽤INTO TABLE RESULTS.本题由两条SQL语句组成:
SELECT AVG(总⾦额) FROM ORDER_LIST INTO ARRAY AFieldsValue
SELECT * FROM ORDER_LIST WHERE 总⾦额>AFieldsValue;
ORDER BY 客户号;
INTO TABLE RESULTS
第⼆⼩题:
第⼀步:在Visual FoxPro主窗⼝按下组合键Ctrl+N,系统弹出"新建"对话框,在"⽂件类型"中选择"报表",再点击新建⽂件按钮,系统弹出报表设计器
第⼆步:单击主窗⼝"报表"菜单下的"快速报表(O)",系统弹出"打开"对话框,选择考⽣⽂件夹下的 order_detail.dbf表,单击"确定",系统弹出"快速报表"对话框,单击"确定"按钮后便⽣成了⼀个报表,将报表⽂件以⽂件名 report1.frx保存在考⽣⽂件
夹下。
第三步:选择主菜单"报表"下的"标题/总结(T)",弹出"标题/总结"对话框,在"报表标题"类型中选择"标题带区 ",单击"确定"按钮,这样就在报表中加⼊了⼀个"标题带区",打开"报表控件⼯具栏",在打开的"报表控件"中选择"标签"控件,在标题带区点击⿏标,输⼊"器件清单"
第四步:双击"页注脚"中的显⽰当前⽇期的域控件,打开"报表表达式",在"表达式"⽂本框中将原来的DATE()⽤TIME()来代替。
点击"确定"
第五步:以⽂件名report1.frx将报表⽂件保存在考⽣⽂件夹下。
三、综合应⽤(1⼩题,计30分)
⾸先将order_detail表全部内容复制到od_bak表,然后对od_bak表编写完成如下
功能的程序:
1. 把"订单号"尾部字母相同并且订货相同 ("器件号"相同)的订单合并为⼀张订
单,新的"订单号"就取原来的尾部字母,"单价"取,"数量" 取合计;
2. 结果先按新的"订单号"升序排序,再按"器件号"升序排序;
3. 最终记录的处理结果保存在od_new表中;
4. 最后将程序保存为prog1.prg,并执⾏该程序。
本题主要考核点:
程序的建⽴⽅法、程序中循环结构的使⽤、SQL查询语句的使⽤、记录的修改⽅法;报表的建⽴⽅法等知识点
本题解题思路:
第⼀步:在VisualFoxPro主窗⼝下按组合键Ctrl+N,系统弹出"新建"对话框,在"⽂件类型"中选择"程序",再点击"新建⽂件"按钮,则系统弹出程序编辑窗⼝;
第⼆步:在弹出的窗中中输⼊以下代码:
SET TALK OFF
SET SAFETY OFF
sele * from order_detail into table od_bak
&&复制⼀个表⽤来存放结果
USE OD_BAK
COPY STRUCTURE TO OD_NEW
&&⾸先得到所有的新定单号和器件号:
SELECT RIGHT(订单号,1) AS 新订单号,器件名,器件号,;
RIGHT(订单号,1)+器件号 AS NEWNUM;
FROM OD_BAK;
GROUP BY NEWNUM;
ORDER BY 新订单号,器件号;
INTO CURSOR CurTable
DO WHILE NOT EOF()
&&得到单价和数量
SELECT MIN(单价) AS ,SUM(数量) AS 数量合计;
FROM OD_BAK;
WHERE RIGHT(订单号,1)=CurTable.新订单号 AND 器件号=CurTable.器件号;
INTO ARRAY AFieldsValue
INSERT INTO OD_NEW VALUES;
(CurTable.新订单号,CurTable.器件号,CurTable.器件名,AFieldsValue(1,1),AFieldsValue(1,2)) SKIP
ENDDO
CLOSE ALL
SET TALK ON
SET SAFETY ON
第三步:单击"保存"⼯具栏按钮,以⽂件名prog1.prg保存程序⽂件在考⽣⽂件夹下,并运⾏程序。