3.创新要求
在基本要求达到后,必须进行创新设计,创新点可以自己选择,方向提示如下(也可以自己拟订):
支持变个数的一批数据的输入。
如果没有找到数据,作相应的提示。
折半查找中批数据必须是有序的,要求对输入的数据进行验证,如果顺序不对,要重新输入。
折半查找中如果批数据中有重复数据,如何找到并标出重复数据及位置。如
1
2
3
4
5
5
5
6
7
8
9
三、设计方法和基本原理
1.问题描述
程序界面较简单见题图,大家都应该较容易理解,还需要说一下吗?
2.问题的解决方案
①设计程序界面
因为用的全是基本控件,界面设计没有什么难度,照样子拼就可以了。
②编写代码
代码主要包括事件处理过程。
事件处理包括下面的主要事件:
Form_Load()
作一些初始化的工作。主要是使数据指针不可见。
Command1_Click()
‘输入批数据
循环使用Inputbox函数进行数据的输入并显示到Label控件数组上。
Command2_Click()
‘根据查找方法的选择对数据及指针进行初始化,并启动Timer1控件。
主要包括将批数据的背景颜色设置为最开始的颜色。如果选择的是线性查找,则应使1个Label控件指针可见,否则应使3个Label控件指针可见,并根据查找方法指向相应的初始位置。然后启动Timer1控件。
Timer1_Timer()
根据查找算法进行数据的查找,并使用数据指针进行动态跟踪,如果找到应标识出相应的位置。两次数据的查找间隔可以用Timer控件的Interval属性自行设定,一般为1秒或2秒。
四、主要技术问题的描述
本题中的难点并不在于界面设计。核心问题在于根据选择的查找方法的算法利用Label控件模拟的数据指针进行跟踪并标识位置。下面举例说明原理。
比如。
图1中要使用线性查找算法找70这个数据。
将Label2控件可见作为数据指针,另外2个Label控件隐藏。在开始查找之前先让其指向第1个数据的中央。然后启动Timer1控件。开始查找,在Timer1_Timer()事件过程中将要找的数据70与第1个数据进行比较,如果相等,则将第1个数据的背景用一种特定的颜色标识出来,并使Label2控件指向下一个数据,否则直接使Label2控件指向下一个数据。Timer1控件的时间间隔到后,进行下一次比较,如此下去直到最后一个数据比较完,使Timer1控件无效。
图2中是要使用折半查找算法找3这个数据。
使3个Label控件均可见作为数据指针。在开始查找之前先让Label2指向第1个数据的中央。Label4指向最后1个数据的中央,Label3指向最中间1个数据的中央,然后启动Timer1控件。开始查找,在Timer1_Timer()事件过程中将要找的数据70与最中间的数据进行比较,如果相等,则将其背景用一种特定的颜色标识出来,并使Timer1控件无效。否则如果要找的数据比中央的数据小,则改变Label4的位置,并重新计算Label3指向的位置,Timer1控件的时间间隔到后,进行下一次比较,如此下去直到找到数据或不能再计算中间位置使Timer1控件无效。
另外数据指针指向某一个数据的中央如何表示,举例如下:
Label2.Left = Label1(0).Left + Label1(0).Width / 2 - Label2.Width / 2
Label2.Top = Label1(0).Top + Label1(0).Height + 10
上面代码表示将Label2数据指针指向第0个数据的中央。
关于具体的查找算法就不用说了,教材上都有,这是最基本的算法。
五、参考资料
Visual Basic 程序设计教程 及 Visual Basic 实验教程
VB6.0程序员指南
VB6.0控件参考手册
MSDN中文版,课程设计网站上提供的其它资料。
六、设计部分的评分标准(本题难度为B,综合时要乘系数0.9)
完成基本要求 (项目符号为“■”部分)
60
基本要求全部完成
80
创新要求完成任意两项
90
创新要求完成4项或以上
100
[注:最后得分是根据本部分得分(占最大比例)以及课程设计期间纪律、设计报告书、答辩情况综合得出)