NCRE二级VFP机试逻辑陷阱分析与思考
要:本文简要介绍了当前VFP教学和NCRE考试的现状,通过具体实例详细阐述NCRE二级VFP机试中部分逻辑陷阱,探讨VFP教学的特点,并由此深入分析如何及时发现并避免犯错。
关键词:NCREVFP;逻辑陷阱;实践教学;数据校验
全国计算机等级考试(National Computer Rank Examin-
ation,简称NCRE)是由教育部考试中心主办,面向社会考查计算机应用知识与能力的全国性计算机水平考试体系。NCRE二级证书是具有基本计算机使用能力的社会通用标准,是职务晋升、职称评定、岗位竞聘的重要依据。VFPNCRE二级考试语种之一,由于部分VFP上机考题中隐藏了很深的逻辑陷阱,所以它成了阻碍获取证书的主要因素,因此认真分析考题、反复校验结果来避免落入逻辑陷阱已经成为数据处理的基本方法。
1 VFP教学和考试现状简介
1.1 VFP教学现状
数据库技术是计算机专业的基础课程之一,它所研究的问题就是如何科学地组织和存储数据,如何高效地获取和处理数据,如何更广泛、更安全地共享数据。VFP是目前最流行的数据库管理系统之一,是一种支持面向对象程序设计的可视化高级程序设计语言,是大学非工科专业学生必修的计算机课程,也是目前NCRE二级报考人数最多的语种。
1.2 VFP二级考试特点
报考VFP的绝大部分是非工科的考生,他们普遍缺乏计算机编程思维,部分考生在考试结束后自我感觉良好,最终却没有通过考试,除了粗心大意犯低级错误以外,如何及时发现并避免逻辑错误成为能否通过考试的重要因素。
VFP二级考试中,SQL语句占了很大的比例,部分考题在需要用SQL语句处理的综合大题中设置了很多逻辑陷阱。很多同学很容易落入陷阱,原因是这部分同学均用固定的思维去解题,没有深入理解知识点,再加上逻辑错误不像语法错误那样有错误提示,往往他们会认定初步得到的结果一定会是正确结果。但是在部分有逻辑陷阱的考题中,初步求出的结果并非正确的结果,这种解题思路很不科学。下面,我们用两个具体实例来加以说明。
2 实例及其逻辑陷阱分析
实例一:在选课表Sc.dbf(见图1)中查询既选修了kc0001课程,又选修了kc0002课程的学生的学号。
1 选课表Sc.dbf
从题意经过初步分析,考生会认为这是一个对课程求条件的逻辑关系,由此运用平时所学知识马上就可以得到以下代码:
select 学号 from Sc where 课程号=“kc0001” and 课程号=“kc0002”
执行这段代码的结果是一个空表,即没有一个学生同时选修了kc0001kc0002这两门课。
然而,回头再去仔细地去观察一下选课表Sc,从表的第一条和第二条记录发现学号为“010303”的学生明显同时选修了kc0001kc0002这两门课,所以这是一段有逻辑陷阱的错误的代码,如果不仔细校验分析的话,很有可能会落入一个事先设计好的逻辑陷阱中。下面再来分析一下代码的执行过程,在VFP的查询过程中记录指针是从第一条记录扫描到最后一条的,当记录指针指向第一条记录时,条件课程号=kc0001满足,但是条件课程号=kc0002并不满足,两个条件只满足一个,不符合代码中的and“条件,所以没有查询结果;同理,记录指针扫描到第二条时也只满足课程号=kc0002这一个条件,同样会没有查询结果。于是学号为“010303”的这个同学就被忽略掉,所以这种解题思路是完全错误的。正确的解题思路是分别查出选修了kc0001kc0002这两门课的学生,得到两个查询结果集合,如果有一个学号同时在两个集合中出现的话就证明这个学生一定选修了这两门课。具体可以用以下这个SQL嵌套语句来实现以上思路:
Select 学号 from sc where 课程号=“kc0001” and 学号 in (select 学号 from sc where 课程号=“kc0002”)
运行以上代码,查询得到学号为“010303”的这个同学满足考题要求。
实例二:用SQL语句查询订单表Orders.dbf(见图2)中每个职工所经手的具有最高金额的订单信息。
2 订单表Orders.dbf
对于这个考题,首先会想到将所有数据按职工号进行分组,然后在每个小组内利用最大值函数max()求出小组内最高金额的相关记录信息,经过简单的分析,写出下列代码:
select 职工号,供应商号,订购单号,订购日期,max(金额) as 金额 from orders group by 职工号
运行代码后得到图3的查询结果。现在回到图2订单表Orders中去观察一下,好像查询结果没有任何的错误,订单表中只有两种职工号,而且查询得到的结果也是每个职工的最高金额。的确,职工号为e1的职工记录没有问题,但是经过仔细对比查询结果和订单表就会发现e2的最高金额为23000,是订单表的第二条记录,这条记录所对应的元组是(e2,s1,or18,2000/07/20,23000),在查询结果中e2所对应的元组却是(e2,s2,or11,2001/02/10,23000),可以清楚地看出两个元组中供应商号、订购单号、订购日期是不匹配的,而查询结果中的这个元组记录在订单表里根本就没有出现过,所以在这个错误的查询结果中也有一个很深的逻辑陷阱。
3 查询结果
现在来分析一下,已知VFP查询时记录指针是从第一条记录扫描到最后一条的,在分组以后,每个小组内,记录指针同理也是从第一条记录扫描到最后一条,所以,最后的查询结果中显示的职工号,供应商号,订购单号,订购日期相关信息一定是小组内最后一条记录的相关信息,即是订单表Orders中第四条记录的部分信息,而max(金额)则是选出职工e3的所有记录中金额字段的最大值23000,然后与前面的查询出来的部分信息拼合成了一条元组,很明显,如果最大金额不存在于组内的最后一条记录中时,查询出来的结果一定是一个错误的拼合元组。
正确的解题思路是,首先查出每个职工的最高金额生成一个临时表temp(见图4),然后用这个临时表和原来的订单表作一个内联结查询数据可视化设计案例(见图5)。代码如下:
select 职工号,max(金额) as 最高金额 from orders group by 职工号 into table temp
4 临时表temp.dbf
select orders.* from orders inner join temp on orders.职工号= temp.职工号 where 金额=最高金额
5 查询结果
3 经验总结
从以上两个实例分析发现,在开始的错误代码中是没有语法错误的,它也会得到一个结果,
而且这个结果和正确的结果很近似,但在考试中这个错误的结果会使整个大题全部丢分,而在今后的工作生活中,错误的结果会使生产蒙受巨大损失,因此为了发现代码中的这些逻辑陷阱,避免在数据处理时犯错,应从以下几个方面进行改进。
3.1 保障学风,提高学生学习兴趣
好的开端是成功的一半!在VFP这门课开课之初老师必须告诉学生,这门课和其他课程不一样,对待它不能只是期末考试60分万岁,要正确认识这门课和NCRE之间的关系,端正学习态度,树立优良的学风,在学习这门课的伊始就抱着去参加NCRE的心态去学习基础知识。同时还要告诉学生这门课程对于绝大部分人来说起点都是一样的,很多内容大家都是从零开始学习,不存在基础好坏的因素,通过鼓励来调动学生学习的主动性和自觉性,以达到学生能真正用心、主动地自主学习。有条件的学校还可以尝试在学校利用评优、课程免修等多个方面的行政方式去进一步激励学生的学习兴趣。
3.2 加强实践练习,提高学生逻辑思维能力
这门课除了要学习课本上的基础知识点外,还必须注重上机实践能力的练习,这样才能与二
级考试的特点实践性、操作性相吻合。在NCRE中程序设计和SQL语句已是考试的难点,再用其解决实际问题更是不易,唯有通过大量的练习反复的上机实践操作才能真正地理解掌握。
在平时实践教学课中,提醒学生在每次上机实践课前必须先复习学过的知识点,预习本次上机实践的相关知识点,做到有的放矢,不浪费上机实践的每一分钟。在充分利用实践课的同时,在课外也要加强实践课程的练习,对上课时没学懂的知识加以理解深化,分析错误原因,总结编程的经验,这样就一定能够学好这门课程。除此之外,老师还应该系统地引入与本次实践课相关联的部分NCRE二级考试真题,用刚刚教学的知识去详细地加以归纳讲解,让学生在学习各个章节的内容时就有了解决具体问题的逻辑思维能力,在课程教学结束后能够综合各方面的知识,用独立的思路去尝试解决相类似的问题,提高逻辑思维能力。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。