vb课程设计论文-排序演示
- 格式:doc
- 大小:169.50 KB
- 文档页数:34
基于VB6.0的排序算法动态演示软件的设计与实现作者:高向敏来源:《中国信息技术教育》2021年第22期摘要:作者針对数据结构与算法课程理论复杂和概念抽象的特点,以Visual Basic 6.0为开发环境,设计实现了常用经典排序算法的二维动态可视化演示软件。
教学实践证明,直观生动的动态排序过程演示,有利于学生更好地理解和掌握各排序算法的基本思想,锻炼学生算法的理解、设计和实现的能力,从而有效地提高教与学效率。
关键词:数据结构;排序算法;动态演示;算法可视化中图分类号:G434 文献标识码:A 论文编号:1674-2117(2021)22-0072-04排序算法是数据结构与算法中最基本的算法之一,是信息检索和数据处理的基础。
排序算法分类繁多,过程抽象,学生理解起来较为困难。
算法可视化通过对具体算法流程进行高度抽象,将计算过程用动画的形式展现出来,使算法执行过程形象可见,从而降低算法的理解难度,对学生来说具有重要的意义。
它以算法思想、流程为主要内容,通过让学生自由控制算法动画的播放速度、流程,以及所演示算法的数据,使学生更容易掌握算法的基本思想,熟悉算法流程。
[1-2]本文借助Visual Basic 6.0开发环境设计并实现了算法演示的可视化动态演示软件,师生可自行设置数据规模及大小范围,适时调整控制排序速度,直观形象地感知各排序算法的具体执行过程,更好地理解和掌握算法的精髓,从而达到辅助教学,提高教学效率的目的。
● 排序算法排序,就是为了使一组数或一串记录,通过编辑与操作,使它从无序到有序。
一个经过优化的简捷的算法可以节省大量的时间和空间资源,即不同的算法有不同的时间复杂度和空间复杂度。
排序算法主要分为内部排序和外部排序,通常所说的排序算法指的是内部排序算法,即数据记录在内存中进行排序。
内部排序算法大体可分为两种:一种是比较排序,时间复杂度为O(nlogn)~O(n2),如冒泡排序、选择排序、插入排序、归并排序、堆排序、快速排序等;另一种是非比较排序,时间复杂度可以达到O(n),如计数排序、基数排序、桶排序等。
实验二 VB冒泡排序法一.实验目的熟悉VB集成开发环境,掌握一种排序算法,即冒泡排序法二.实验条件和环境Visual Basic6.0集成开发环境三.实验任务和要求将一组数据(12.5, 34, 45, 21, 67, 4, 12, 45, 47, 56)从小到大排序,要用冒泡排序法四.实验内容1.实验步骤(1)运行Visual Basic6.0,新建一个工程应用程序(2)参照相关资料编写程序,包括定义数组、数组赋值,排序算法。
(3) 新建工程,选择“标准EXE”(4) 设计界面,用工具箱在窗体上分别绘制二个命令按纽command1,command2, 然后调整控件大小,调整控件的位置。
(5) 设计属性(6)编写代码2.操作指导Option Base 1 ' 设数组下标从1开始Private Sub Command1_Click()Dim i, n, m, k As IntegerDim sun(), temp As Single '数组,变量定义n = 10ReDim sun(n) '重新定义数组Print "排序前"sun = Array(12.5, 34, 45, 21, 67, 4, 12, 45, 47, 56) '输入的数据For i = 1 To n'sun(n) = Val(InputBox("随机输入10个数,准备排序:第" + Str(n) + "个", "输入10个数")) Print sun(i); '打印输入的10个数Next i'下面为排序代码,n个数需要n-1次比较For m = 1 To 9 '因为只需要比较n-1次,所以1到9即可For k = 1 To 10 - m '每趟比较大数都沉底,下次只需要比较余下的数大小If (sun(k) > sun(k + 1)) Thentemp = sun(k)sun(k) = sun(k + 1)sun(k + 1) = tempEnd IfNext kNext mPrint: Print '输出空行,与前面输出分开Print "排序后"For i = 1 To 10Print sun(i);Next iEnd SubPrivate Sub Command2_Click()EndEnd Sub。
算法:举例:随机产生20个100以内的正整数,按从小到大的顺序输出在窗体上,每行5个。
Private sub form_click()Dim x(1 to 20) as integerFor i=1 to 20X(i)=int(rnd*99)+1 ‘随机产生100以内的随机数Next iRem 冒泡排序For i=1 to 19For j=1 to 20-iIf x(j)>x(j+1) then t=x(j) : x(j)=x(j+1) : x(j+1)=tNext jNext iRem 按每行5个数输出Print x(i);If i mod 5=0 then print ‘如果每行输到5个数,则换行End sub二、比较交换法算法思路:假设第一个数最小,然后第一个数依次与后面的每一个数都进行比较,若比较时发现后面的数比第一个数小,则两数位置进行交换,全部都比较完算一轮,每一轮比较完后,第一个数是最小的数,如此进行即可完成比较排序。
For i=1 to n-1 ‘i表示比较轮数For j= i+1 t0 n ‘ J表示每轮比较次数If a(i)>a(j) then t=a(i) : a(i)=a(j) : a(j)=t ‘如果发现后面的数比前面的数小,则两数位置进行交换Next jNext i举例:有如图窗体,两个文本框、两个标签和一个命令按钮,编程实现:单击命令按钮后,随机产生10个两位正整数放在text1中,每行一个,并使用选择排序算法排序后显示在text2文本框中,也是每行一个。
三、选择排序Private Sub Command1_Click()Dim a(1 To 10) As IntegerFor i = 1 To 10 '产生10个两位正整数,并放到text1文本框中a(i) = Int(Rnd * 90) + 10Text1.Text = Text1.Text & a(i) & vbCrLfNext iRem 排序For i = 1 To 9For j = i + 1 To 10If a(i) > a(j) Then t = a(i): a(i) = a(j): a(j) = tNext jNext iRem 把排序好的数组放到text2文本框中For i = 1 To 10Text2.Text = Text2.Text & a(i) & vbCrLfNext iEnd Sub算法思路:假设第一个数最小,接着记下最小数所在的位置,然后将最小数依次与后面的每一个数都进行比较,若比较时发现后面的数比最小的数还小,则修改最小数所在位置,全部都比较完算一轮,每一轮比较完后,最小数所在的位置是否跟假设的是同一个位置,若不是,则最小数与第一个数进行交换位置,如此进行即可完成选择排序。
VB程序设计中的冒泡排序教学发表时间:2015-09-08T15:54:43.200Z 来源:《读写算(新课程论坛)》2015年第5期(上)供稿作者:张远骏[导读] 浙江省浦江县第二中学自2015年高一新生开始,浙江省实行新高考改革,信息技术中的排序算法也成为必考考点之一。
张远骏(浙江省浦江县第二中学浦江 322200)【摘要】:自2015年高一新生开始,浙江省实行新高考改革,信息技术中的排序算法也成为必考考点之一。
本文通过对冒泡排序的教学,在学生理解冒泡排序设计思想的基础上,提出了两种新的冒泡排序方法。
一是根据可以同时选择出最大数和最小数的特点上提出了双向冒泡法,二是加入了标志位的新的冒泡排序法,以达到培养学生分析问题、发现规律的能力。
经过算法分析得出,改进的算法时间复杂度也比传统冒泡排序方法有所改善。
【关键字】:排序算法,冒泡排序,双向冒泡排序,标志位冒泡排序,时间复杂度浙江的新高考改革将信息技术课作为技术科目的一部分纳入了高考选考科目中,原本是选修课内容的排序算法及程序实现也成为高考的加试考点。
而冒泡排序也是计算机程序设计中的一种重要操作,特别是高效率的排序是计算机研究中的重要课题之一。
一、冒泡排序的基本思想冒泡排序是排序中一种简单的排序方法。
它的基本思想是对所有相邻记录关键字值进行比较,使较小的(大)关键字的记录值往上升,这样从上到下执行一遍后,关键字最大(小)的记录沉到最底下。
在下一遍扫描是,可以不考虑这个关键字最大(小)的记录,而减少一次比较,上述比较过程反复执行,直到所有的记录不再上升为止。
冒泡排序算法的实现需要两重循环,我在教学中使用了5张扑克牌来演示冒泡排序的逐个过程(从小到大排序),以强化学生对冒泡排序的理解。
5张扑克牌,要进行从小到大的排序。
1、第一轮冒泡排序首先比较第5个数与第4个数,将其中较小的数换到第4个数的位置,然后比较第4个数与第3个数,将其中较小的数换到第3个数的位置,重复这一过程,直到比较完第2个数与第1个数且完成交换,称为第1遍加工。
VB课程设计大学排课系统1.设计目的排课管理是高校每个学期教学教务管理工作的一个主要内容,是整个综合教学教务管理系统中必不可少的部分。
排课也是一项复杂而精细的工作,归纳起来主要有五方面相互作用、相互关联的因素,即课程、教师、时间、班级以及教室。
教务处根据教学计划的要求、实际招生人数、教师资源情况、每学期要开设的课程、开课计划,公共课程(包括公共英语、马列课、公共体育、计算机基础、高等数学等)进行分组处理,自动排课,以班为单位形成课程表,以教室为单位形成教室使用表,供教师、教学楼管理员使用。
2.设计内容本次课程设计中完成排课算法和课表查询的实现,排课包括手动排课、自动排课和手动调整,查询包括班级课表、教室课表以及教师课表的查询,手动排课是管理员可以自己选择课程名称、教师名称、班级编号、教室编号和上课时间,然后将排课信息存到数据库表中,自动排课是自动调用任课表中的课程、教师和每周节数、班级信息表中的班级编号、教室信息表中的教室编号以及时间表中的上课时间,然后根据算法自动进行排课。
查询可以根据班级编号、教室编号、教师姓名查出手动排课和自动排课后的班级课程表、教室课程表和教师课程表,自动排课后的课程表支持预览打印。
打印是通过程序调用Excel表格,显示出课程表3.需求描述图1 系统功能结构图查询老师信息修改老师信息图2 系统用例图3.1参与者学生:查询学生课表,在查询课表时首先应该登录,所以课表查询用例要包含登陆用例。
教师:查询教师课表,在查询课表时首先也应该登录。
院管理员:可以编辑信息,查询课表信息。
校管理员:可以编辑信息,查询课表信息,可以进行排课以及调整课表3.2用例描述(1)自动排课○1用例:自动排课○2简要说明:通过调用数据库表完成对课程的安排○3事件流:基本事件流○4前置条件:已成功登录系统,任课表里存在记录○5后置条件:完成对课程的安排,并形成课表○6优先级:3基本事件流:a)院管理员发出自动排课请求b)系统根据数据库存储的信息自动排课,并形成课表c)系统提示自动排课成功(2)手动排课○1用例:手动排课○2简要说明:通过手动选择相关信息完成对课程的安排○3事件流:基本事件流○4前置条件:已成功登录系统○5后置条件:完成对课程的安排,并形成课表○6优先级:3基本事件流a)院管理员选择相关信息对课程安排b)系统完成对课程安排的存档并形成课表c)系统提示手动添加成功(3)班级课表查询○1用例:班级课表查询○2简要说明:通过输入班级编号查询该班级课表○3事件流:基本事件流○4前置条件:已成功登录系统,且数据库中存在该班级课表记录○5后置条件:查询并显示出该班级课表○6优先级:3基本事件流a)学生输入班级编号请求查询该班级课程表b)系统完成对该班级课表的查询并显示出来(4)教室课表查询○1用例:教室课表查询○2简要说明:通过输入教室编号查询该教室课表○3事件流:基本事件流○4前置条件:已成功登录系统,且数据库中存在该教室课表记录○5后置条件:查询并显示出该教室课表○6优先级:3基本事件流a)管理员输入教室编号请求查询该教室课程表b)系统完成对该教室课表的查询并显示出来(5)教师课表查询○1用例:教师课表查询○2简要说明:通过输入教师姓名查询该教师课表○3事件流:基本事件流○4前置条件:已成功登录系统,且数据库中存在该教师课表记录○5后置条件:查询并显示出该教师课表○6优先级:3基本事件流c)教师输入教师请求查询该教师课程表d)系统完成对该教师课表的查询并显示出来(6)登录○1用例:登录○2简要说明:通过输入验证用户名和密码登入系统○3事件流:基本事件流和扩展事件流○4前置条件:用户启动该系统○5后置条件:通过验证并进入系统○6优先级:5基本事件流:a)系统提示用户选择用户角色,输入登录信息b)用户选择用户角色,输入用户名和密码c)用户发出登录请求d)系统验证登录信息e)验证通过A01不存在这个用户A02登录信息填写不完整f)系统跳至主界面扩展事件流:A01不存在这个用户g)系统提示不存在这个用户h)系统提示请重新选择角色、输入登录信息i)用户选择取消登录,则结束用例j)否则,系统跳至基本事件流2k)重复三次,则系统自动关闭A02 登录信息填写不完整l) 系统提示某个登录信息未输入m) 用户输入该登录信息n) 系统跳至基本事件流24.系统详细分析设计4.1顺序图(1):图3 自动排课顺序图(2):图4 手动排课顺序图(3):图5 查询课表顺序图4.2 活动图否]图6 活动图图7 类图图8 部署图4.5构件图图9 构件图4.6 数据库表表2 学院信息表表3 系信息表表4 班级信息表表7 时间表表8 课程信息表表9 任课表表10 排课表5.系统实现5.1开发工具及系统运行环境开发工具:Microsoft Visual Basic6.0、Microsoft Access2003 运行环境:Windows7、WindowsXP5.2 排课、查询子系统实现(1)手动排课图10 手动排课该界面通过下拉列表选择课程名称、任课教师、教室编号、班级编号和上课时间,点击确定即会添加至数据库表中,右面的表格也会刷新显示出最新的课程安排。
数组实验二:对于一个给定的整数数组,将数组中的元素按值的(递增)不减排序。
程序运行后的结果如下:实验二的主要步骤:1、在G盘上创建一个VBTest0731的文件夹。
2、新建一个Visual 的Windows应用程序项目Array2。
打开Visual 2005开发环境,从菜单中选择“文件”|“新建项目”,弹出“新建项目对话框”,在对话框的“项目类型”中选择“Visual Basic|Windows”,在模板中选择“Windows应用程序”。
输入项目名称为Array2,如图1,点击“确定”进入项目开发环境。
图1新建项目3、保存项目到G:\VBTest0731目录下,项目名称为Array2.在项目开发环境中,选择菜单中选择“文件”|“全部保存”,弹出“保存对话框”,点击“游览”按钮,选择G:\VBTest0731文件夹,输入名称Array2,如图2。
图2保存项目3、界面设计从工具箱中拖两个文本框TextBox控件、两个标签控件Label与一个按钮Button控件到窗体上,设计界面如图3。
图3程序界面按表1设置各控件的属性。
控件属性属性值Form Name FrmSort Text 对数组进行排序Label Text 请输入数组的元素,以逗号隔开:Label Text 排序后的结果:TextBox Name txtInput TextTextBox Name txtRes TextButtonName btnSortText 排序Click事件btnSort_Clcik打开“设计器”窗口,用鼠标在程序界面中Button“排序”上双击,产生btnSort_Clcik 事件,并自动切换到“代码”窗口。
在btnSort_Click中编写如下代码:Private Sub btnSort_Click(ByVal sender As System.Object, _ByVal e As System.EventArgs) Handles btnSort.Click'定义一个变量s用来保存从TextBox输入的字符串Dim s As String'将TextBox输入的字符串保存到变量s中s = txtInput.Text'定义一个字符串数组strs 用来存放从界面TextBox中输入的数字Dim strs() As String'将字符串s中数据按逗号分隔开,并保存到字符串数组strs中strs = s.Split(",")'定义一个整数数组ints 来存放从界面输入的经过转换后的数字Dim ints(strs.Length - 1) As Integer'定义循环计数变量iDim i, j As Integer'将字符串数组转换成整数数组,Cint是一个函数,用来将字符串转换成数字For i = 0 To strs.Length - 1ints(i) = CInt(strs(i))Next'下面的代码用来对数组ints 中元素按从小到大进行排序Dim k As Integer'k用来记录程序运行过程中的那个最大元素的下标值Dim tmp As Integer'定义一个临时变量tmp来存放元素交换时的中间结果k = 0For i = 0 To ints.Length - 1 '第一层循环,依次处理数组中的每个元素For j = i To ints.Length - 1 '第二层循环,从数组i到无级最后的元素中选择一个最小的元素,放置到下标i处If ints(i) > ints(j) Then'if语句块表示判定当ints(i)中元素值大于其他元素时时,将两个元素的位置进行交换tmp = ints(i)ints(i) = ints(j)ints(j) = tmpEnd IfNextNext'程序计算完成,数组ints中的保存的是排序后的结果,通过程序界面上的txtRes控件显示结果 txtRes.Text = ""'首先清空内容'循环,对排序后的数组ints中的元素进行显示For i = 0 To ints.Length - 1txtRes.Text = txtRes.Text & ints(i)txtRes.Text = txtRes.Text & " "'排序后的元素用空格隔开NextEnd Sub5、运行程序,测试结果按F5运行程序,随机输入一组数据,点击“排序”按钮,测试结果的正确性。
vb课程设计数据排序一、教学目标本节课的学习目标包括以下三个方面:1.知识目标:学生需要掌握VB编程中数据排序的基本概念和原理,了解常用的排序算法,并能够运用VB语言实现简单的数据排序。
2.技能目标:学生能够运用VB编程语言实现数据的排序操作,具备解决实际问题的能力。
3.情感态度价值观目标:培养学生对计算机编程的兴趣和热情,提高学生分析问题和解决问题的能力。
在制定教学目标时,充分考虑了课程性质、学生特点和教学要求。
课程目标具体、可衡量,以便学生和教师能够清晰地了解课程的预期成果。
二、教学内容本节课的教学内容主要包括以下几个部分:1.VB编程中数据排序的基本概念和原理。
2.常用的排序算法及其在VB编程中的应用。
3.VB编程语言实现数据排序的实战练习。
教学内容与课本紧密相连,符合教学实际。
通过本节课的学习,学生将能够掌握VB编程中数据排序的相关知识,并在实际编程中运用。
三、教学方法为了提高教学效果,本节课将采用多种教学方法相结合的方式进行:1.讲授法:教师讲解VB编程中数据排序的基本概念、原理和排序算法。
2.案例分析法:分析实际编程中遇到的数据排序问题,引导学生运用所学知识解决。
3.实验法:学生动手实践,运用VB编程语言实现数据排序。
通过多样化的教学方法,激发学生的学习兴趣和主动性,提高学生的编程能力。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,本节课将采用以下教学资源:1.教材:VB编程教材,用于引导学生学习基本概念和原理。
2.多媒体资料:PPT、教学视频等,用于辅助讲解和演示。
3.实验设备:计算机、网络等,用于学生实践操作。
通过合理选择和准备教学资源,确保教学活动的顺利进行,提高学生的学习效果。
五、教学评估本节课的教学评估方式包括以下几个方面:1.平时表现:评估学生在课堂上的参与程度、提问回答等情况,以了解学生的学习状态。
2.作业:布置与数据排序相关的编程作业,评估学生对知识的掌握程度和应用能力。
VB常考算法(八)排序:1、算法1)选择法排序算法说明:根据上例中求最小值的思路,我们可以使用如下方法进行从小到大排序:第一轮,以第一个元素逐个跟后面的所有元素比较,如果比后面的元素大就进行交换,经过一轮比较,第一个元素被确定为最小;同样的方法,下一轮以第二个元素跟剩下的所有元素进行比较确定下次小的元素;以此类推…下面我们以图形的形式体现对5个数进行选择排序的过程:第一轮:第二轮:第三轮:从上图可以发现对5个元素进行排序,总共经过了5-1=4轮,而每一轮中比较的次数也不相同,第一轮2、3、4、5号元素参与跟1号元素的比较,共4次,第二轮3、4、5号元素参与跟2号元素的比较,共3次,以次类推,比较次数逐步减少。
经过四轮的比较,利用逐步求最小值的方法将5个数从小到大排好序。
对于这样一个排序的过程,我们可以使用两个循环分别控制比较的轮数和每一轮的次数。
程序代码:Private Sub Command1_Click()Dim n As Integern = InputBox("请输入数组元素的个数:")Dim a() As Integer, i As Integer, j As IntegerPrint "排序前:"ReDim a(n)For i = 1 To na(i) = Int(Rnd * (99 - 10 + 1) + 10)Print a(i);最小值次小值Next iFor i = 1 To n - 1For j = i To nIf a(i) > a(j) Thentemp = a(i) '交换元素a(i) = a(j)a(j) = tempEnd IfNext jNext iPrintPrint "排序后:"For i = 1 To nPrint a(i);Next iEnd Sub2)冒泡法排序算法说明:相邻的元素进行比较,如果前面的元素比后面的元素大,则将它们进行交换,具体思路:设在数组a 中存放n 个元素,第一轮,将a(1)和a(2)进行比较,若a(1)>a(2),则交换这两个元素的值,然后继续用a(2)和a(3)比较,若a(1)>a(2),则交换这两个元素的值,以此类推,直到a(n-1)和a(n)进行比较处理后,a(n)中就存放了n 个数中最大的值;第二轮,用a(1)与a(2),a(2)与a(3),…,a(n-2)与a(n-1)进行比较,处理方法相同,这一轮下来,a(n-1)中存放n 个数中第二大的值;…;第n-1轮,a(1)与a(2)进行比较处理,确保最小值在a(1)中。
Vb课程设计题目排序演示专业自动化学生姓名学号指导教师目录一、设计任务 (3)二、总体设计思路 (4)三、画出程序总体框图 (4)四、系统的调试 (6)五、收获体会 (8)六、源代码 (9)七、主要参考资料 (23)一、设计任务(1)程序启动后,显示主界面。
首先单击“产生10个随机数”按钮来产生10个随机数,并显示在10个文本框中;然后选择一种“演示模式”和“排序方式”,其中演示模式可以直接给出排序结果,也可以通过动画动态演示整个排序过程,排序方式可以按从小到大顺序,也可以按从大到小顺序排序。
(2)在主窗口的空白区单击鼠标右键,弹出快捷菜单。
从中选择“排序算法”命令,打开对话框,从中选择一种排序方式,单击不同排序方式时,“算法描述”中简要介绍了这种算法。
单击“确定”按钮返回到主窗口,主窗口中最上方框架控件的标题文字显示当前所选的排序算法。
(3)设置完毕,单击“开始排序”按钮(此按钮在生成数据之前是不可用的),启动排序过程。
若选择了动画方式,红色背景的文本框表示当前正在比较的元素,黄色的代表已排序的元素,2个运动的文本框表示交换过程。
在排序过程中可以调节水平滚动条的位置来控制演示过程的速度。
排序结束后程序以消息框的形式报告数据交换的次数。
可以使用快捷菜单中的“将数据写入文件”命令将排序后的数据保存到“data.txt”中覆盖原有内容。
(4)选择窗口主菜单中的“颜色设置”命令,主窗口扩大,底部显示“颜色设置”框架,可以对“文本背景色”、“文本前景色”、“已排序元素色”和“交换结点色”进行设置。
再选择此命令,窗口恢复到原来的大小。
(5)选择主菜单中的“退出”命令可退出本程序,程序显示消息对话框予以确认。
二、系统总体设计方案三、画出程序整体框图1.快捷菜单排序方法多重窗体窗体编辑器设计界面排序演示模块代码信息提示框编写代码2.启动后的主界面3.确认退出对话框4.颜色设置5.显示交换次数6.“排序算法选择”对话框四、系统的调试1、问题:停止按钮不能使其在开始运行时候停止。
解决:利用了Boolean(逻辑变量)定义了一个使程序停止的变量f,然后又定义了一个Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) ,声明sleep函数,可以使程序暂停一段时间,最后用时钟(timer)来设定所需暂停的随机时间(s)。
注意timer函数设置时的interval值,以毫秒为单位,1000ms=1s。
2、问题:消息对话框(msgbox)的形式,及msgbox函数的返回值如何的选取,设置。
解决:在对“停止”按钮编码时,一开始未给msgbox赋值,导致程序不起作用,后来赋值后,采用了msgbox函数里的vbyes与vbno,采用了if...then...else...但程序无法退出,最后只对vbno做了代码编制,退出程序则采用了“unload”函数,最后程序终于调试成功。
3、问题:动态演示如何演变,交换次数无法得到。
解决:采用timer函数,以时间来对它进行控制,也可以拖得滚动条来控制它动态演示时的速度。
演示代码:If a(k) > a(j) And Option1.Value ThenText1(k - 1).BackColor = yanse1 '''''''''''''''交换元素颜色Text1(j - 1).BackColor = yanse1DoEventsCall Sleep(1000) 调用了函数sleeplinshi = a(j)a(j) = a(k)a(k) = linshijiaohuan = jiaohuan + 1Text1(k - 1).Text = a(k)Text1(j - 1).Text = a(j)Text1(k - 1).BackColor = yanse '''''''''''''已经排序的颜色Text1(j - 1).BackColor = yanseEnd IfIf a(k) < a(j) And Option2.Value ThenText1(k - 1).BackColor = yanse1Text1(j - 1).BackColor = yanse1linshi = a(j)a(j) = a(k)a(k) = linshijiaohuan = jiaohuan + 1DoEventsSleep (1000)Text1(k - 1).Text = a(k)Text1(j - 1).Text = a(j)Text1(k - 1).BackColor = yanseText1(j - 1).BackColor = yanseEnd IfIf k = 9 Thenj = 0k = 0Timer1.Enabled = FalseMsgBox Frame1.Caption & "排序结束" & "共用" & jiaohuan & "次", vbOKOnly + vbInformation, "系统提示"4、问题:快捷菜单无法弹出。
解决:设计到了窗体编辑器,及弹出菜单所使用的方法PopupMenu。
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, Y As Single)If Button = 2 Then Form1.PopupMenu youjian '''右键弹出菜单End Sub五、收获体会这是我进入大学以来第一次学习vb,第一次知道了什么是vb,第一次了解到了原来平时我们看到计算机上那些普普通通的小程序需要那么多的代码才能够运行起来,终于发现这其中的奥秘。
学习vb首先就是要对所有常用函数了如指掌,这样在编程的时候才能够很快想到并用对地方,做这个程序设计的一开始,简直是一头雾水,无从下手,后来经过翻书,查找资料,网上资料,等等...终于对所要编的程序有了一定的认识,在同学互相讨论的基础上,终于编出排序演示,但是还存在不足,在动态演示的时候,缺了正在交换文本框的动态形式,但是基本能运行起来,大致的符合了设计任务。
程序中所涉及的内容很多,有比较法排序,插入法排序,冒泡发排序,选择法排序,集合了所有的排序,以前对排序的编程就有点不理解,因为它很绕,真正理解它真的有点困难。
还有一些我们vb书上第七章的一些窗体编辑器,快捷菜单的做法,定时器的编码,这些更加巩固了我对这些知识的理解,通过这几天对vb的深入研究,发现其实慢慢的对vb产生了兴趣,从以前的没兴趣到产生兴趣,这是一种好的现象,兴趣是最好的老师,相信我会越学越好的。
六、源代码模块:Option ExplicitPublic Declare Sub Sleep Lib "kernel32" (ByV al dwMilliseconds As Long)颜色设置:Private Sub Combo1_Click()Dim i As IntegerSelect Case Combo1.ListIndexCase 0For i = 0 T o 9T ext1(i).BackColor = vbBlueNext iCase 1For i = 0 T o 9T ext1(i).BackColor = vbGreenNext iCase 2For i = 0 T o 9T ext1(i).BackColor = vbRedNext iCase 3For i = 0 T o 9T ext1(i).BackColor = vbY ellowNext iEnd SelectEnd SubPrivate Sub Combo2_Click()Dim i As IntegerSelect Case Combo2.ListIndexCase 0For i = 0 T o 9T ext1(i).ForeColor = vbBlueNext iCase 1For i = 0 T o 9T ext1(i).ForeColor = vbGreenNext iCase 2For i = 0 T o 9T ext1(i).ForeColor = vbRedNext iCase 3For i = 0 T o 9T ext1(i).ForeColor = vbY ellowNext iEnd SelectEnd SubPrivate Sub Combo3_Click()Select Case Combo3.ListIndexCase 0yanse = vbBlueCase 1yanse = vbGreenCase 2yanse = vbRedCase 3yanse = vbY ellowEnd SelectEnd SubPrivate Sub Combo4_Click()Select Case Combo4.ListIndexCase 0yanse1 = vbBlueCase 1yanse1 = vbGreenCase 2yanse1 = vbRedCase 3yanse1 = vbY ellowEnd SelectEnd Sub退出按钮:Private Sub Command1_Click()If MsgBox("您真的要退出吗?", 4 + 32, "请您确认!") = vbNo Then Exit SubEnd IfUnload Form1Unload Form2End Sub产生随机数:Private Sub Command2_Click() Dim i As IntegerRandomize TimeFor i = 1 T o 10a(i) = Rnd * 200T ext1(i - 1).T ext = a(i)Next iCommand3.Enabled = T rue Command4.Enabled = T rueEnd Sub开始排序直接给出排序结果: Private Sub Command3_Click() Dim i As Integer, k As SingleIf Form1.Optzhijie.V alue ThenIf Form2.Option1.V alue ThenCall bijiao(a)For i = 1 T o 10T ext1(i - 1).T ext = a(i)NextElseIf Form2.Option2.V alue Then Call xuanze(a)For i = 1 T o 10T ext1(i - 1).T ext = a(i)NextElseIf Form2.Option3.V alue Then Call charu(a)For i = 1 T o 10T ext1(i - 1).T ext = a(i)NextElseIf Form2.Option4.V alue Then Call maopao(a)For i = 1 T o 10T ext1(i - 1).T ext = a(i)NextEnd IfIf a(1) > a(10) ThenT ext2(0).T ext = a(1)T ext2(1).T ext = a(10)ElseT ext2(0).T ext = a(10)T ext2(1).T ext = a(1)For i = 1 T o 10k = a(i) + kNext iT ext2(2).T ext = k / 10End If----------------------------------------------------------------------------------------- 动态演示结果:If Form1.Optdongtai.V alue ThenIf Form2.Option1.V alue ThenTimer1.Enabled = T rueElseIf Form2.Option2.V alue ThenTimer1.Enabled = T rueElseIf Form2.Option3.V alue ThenTimer1.Enabled = T rueElseIf Form2.Option4.V alue ThenTimer1.Enabled = T rueEnd IfEnd IfEnd Sub暂停运行命令:Private Sub Command4_Click()Dim i%, n%, s%f = FalseTimer1.Enabled = FalseTimer1.Interval = 1000For i = 1 T o ns = n + 1Next iSleep (n)End Sub默认:Private Sub Command5_Click()Dim i%For i = 0 T o 9Combo1.T ext = "蓝色"Combo2.T ext = "绿色"Combo3.T ext = "红色"Combo4.T ext = "黄色"T ext1(i).BackColor = vbBlueT ext1(i).ForeColor = vbGreenyanse = vbRedyanse1 = vbY ellowNext窗体启动的时候加载的程序:Private Sub Form_Load()Command3.Enabled = FalseCommand4.Enabled = FalseFrame4.V isible = FalseForm2.Option1.V alue = T rueEnd Sub快捷菜单:Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 2 Then Form1.PopupMenu youjianEnd Sub速度Private Sub HScroll1_Change()Timer1.Interval = HScroll1.SmallchangeEnd Sub菜单退出的按钮:Private Sub mnu_end_Click()Unload Form1Unload Form2End Sub显示设置按钮:Private Sub mnu_set_Click()If mnu_set.Checked = T rue ThenForm1.Height = Form1.Height + 1650Frame4.V isible = T ruemnu_set.Checked = FalseElseIf mnu_set.Checked = False ThenForm1.Height = Form1.Height - 1650mnu_set.Checked = T rueEnd IfEnd Sub写入数据:Private Sub shujuxie_Click()Dim i As IntegerOpen App.Path + "\data.txt" For Output As #1For i = 1 T o 10Write #1, a(i);Next iClose #1End Sub显示窗体2:Private Sub suanfa_Click()Form2.Show时间控件用来动态演示:Private Sub Timer1_Timer()S tatic k As Integer, j As Integer, linshi As Integer, jiaohuan As Integer, i As Integer Dim X As Integer, m As Singlef = T rueIf f = False ThenExit SubEnd IfIf Form2.Option1.V alue Then 比较法排序If k = 0 Thenk = 1j = 2End IfIf j = 11 Thenk = k + 1j = k + 1End IfIf a(k) > a(j) And Option1.V alue Then 交换元素颜色T ext1(k - 1).BackColor = yanse1T ext1(j - 1).BackColor = yanse1DoEventsCall Sleep(1000)linshi = a(j)a(j) = a(k)a(k) = linshijiaohuan = jiaohuan + 1T ext1(k - 1).T ext = a(k)T ext1(j - 1).T ext = a(j)T ext1(k - 1).BackColor = yanse 已经排序的元素颜色T ext1(j - 1).BackColor = yanseEnd IfIf a(k) < a(j) And Option2.V alue ThenT ext1(k - 1).BackColor = yanse1T ext1(j - 1).BackColor = yanse1linshi = a(j)a(j) = a(k)a(k) = linshijiaohuan = jiaohuan + 1DoEventsSleep (1000)T ext1(k - 1).T ext = a(k)T ext1(j - 1).T ext = a(j)T ext1(k - 1).BackColor = yanseEnd IfIf k = 9 Thenj = 0k = 0Timer1.Enabled = FalseMsgBox Frame1.Caption & "排序结束" & "交换次数为:" & jiaohuan & "次", vbOKOnly + vbInformation, "系统提示"jiaohuan = 0If a(1) > a(10) ThenT ext2(0).T ext = a(1)T ext2(1).T ext = a(10)ElseT ext2(0).T ext = a(10)T ext2(1).T ext = a(1)End IfFor X = 1 T o 10m = a(X) + mNext XT ext2(2).T ext = m / 10End Ifj = j + 1 选择法排序ElseIf Form2.Option2.V alue Thenk = k + 1linshi = a(k + 1)i = k + 1If Option1.V alue ThenFor j = k + 1 T o UBound(a)If linshi > a(j) Thenlinshi = a(j)i = jEnd IfNext jIf a(k) > a(i) ThenT ext1(k - 1).BackColor = yanse1T ext1(i - 1).BackColor = yanse1DoEventsSleep (1000)linshi = a(i)a(i) = a(k)a(k) = linshiT ext1(k - 1).T ext = a(k)T ext1(i - 1).T ext = a(i)jiaohuan = jiaohuan + 1T ext1(i - 1).BackColor = yanseEnd IfEnd IfIf Option2.V alue ThenFor j = k + 1 T o UBound(a)If linshi < a(j) Thenlinshi = a(j)i = jEnd IfNext jIf a(k) < a(i) And Option2.V alue ThenT ext1(k - 1).BackColor = yanse1T ext1(i - 1).BackColor = yanse1DoEventsSleep (1000)linshi = a(i)a(i) = a(k)a(k) = linshiT ext1(k - 1).T ext = a(k)T ext1(i - 1).T ext = a(i)jiaohuan = jiaohuan + 1T ext1(k - 1).BackColor = yanseT ext1(i - 1).BackColor = yanseEnd IfEnd IfIf k = 9 Theni = 0j = 0k = 0Timer1.Enabled = FalseMsgBox Frame1.Caption & "排序结束" & "交换次数为:" & jiaohuan & "次", vbOKOnly + vbInformation, "系统提示"jiaohuan = 0If a(1) > a(10) ThenT ext2(0).T ext = a(1)T ext2(1).T ext = a(10)ElseT ext2(0).T ext = a(10)T ext2(1).T ext = a(1)End IfFor X = 1 T o 10m = a(X) + mNext XT ext2(2).T ext = m / 10End IfElseIf Form2.Option3.V alue Then 插入法排序 i = i + 1For j = 1 T o iIf a(i) < a(j) And Option1.V alue ThenT ext1(i - 1).BackColor = yanse1T ext1(j - 1).BackColor = yanse1DoEventsSleep (1000)linshi = a(i)For k = i T o j + 1 S tep -1a(k) = a(k - 1)Next ka(j) = linshijiaohuan = jiaohuan + 1For X = j T o iT ext1(X - 1).T ext = a(X)Next XT ext1(i - 1).BackColor = yanseT ext1(j - 1).BackColor = yanseEnd IfIf a(i) > a(j) And Option2.V alue ThenT ext1(i - 1).BackColor = yanse1T ext1(j - 1).BackColor = yanse1DoEventsSleep (1000)linshi = a(i)For k = i T o j + 1 S tep -1a(k) = a(k - 1)Next ka(j) = linshiT ext1(i - 1).BackColor = yanseT ext1(j - 1).BackColor = yansejiaohuan = jiaohuan + 1For X = j T o iT ext1(X - 1).T ext = a(X)Next XEnd IfNext jIf i = 10 Theni = 0j = 0k = 0Timer1.Enabled = FalseMsgBox Frame1.Caption & "排序结束" & "交换次数为:" & jiaohuan & "次", vbOKOnly + vbInformation, "系统提示"jiaohuan = 0If a(1) > a(10) ThenT ext2(0).T ext = a(1)T ext2(1).T ext = a(10)ElseT ext2(0).T ext = a(10)T ext2(1).T ext = a(1)End IfFor X = 1 T o 10m = a(X) + mNext XT ext2(2).T ext = m / 10End IfElseIf Form2.Option4.V alue Then 冒泡法排序j = j + 1If j = 10 - k Thenk = k + 1j = 1End IfIf a(j) > a(j + 1) And Option1.V alue ThenT ext1(j - 1).BackColor = yanse1T ext1(j).BackColor = yanse1DoEventsSleep (1000)linshi = a(j + 1)a(j + 1) = a(j)a(j) = linshijiaohuan = jiaohuan + 1T ext1(j - 1).T ext = a(j)T ext1(j).T ext = a(j + 1)T ext1(j - 1).BackColor = yanseT ext1(j).BackColor = yanseEnd IfIf a(j) < a(j + 1) And Option2.V alue ThenT ext1(j - 1).BackColor = yanse1T ext1(j).BackColor = yanse1DoEventsSleep (1000)linshi = a(j + 1)a(j + 1) = a(j)a(j) = linshijiaohuan = jiaohuan + 1T ext1(j - 1).T ext = a(j)T ext1(j).T ext = a(j + 1)T ext1(j - 1).BackColor = yanseT ext1(j).BackColor = yanseEnd IfIf k = 9 Thenk = 0j = 0Timer1.Enabled = FalseMsgBox Frame1.Caption & "排序结束" & "交换次序为:" & jiaohuan & "次", vbOKOnly + vbInformation, "系统提示"jiaohuan = 0If a(1) > a(10) ThenT ext2(0).T ext = a(1)T ext2(1).T ext = a(10)ElseT ext2(0).T ext = a(10)T ext2(1).T ext = a(1)End IfFor X = 1 T o 10m = a(X) + mNext XT ext2(2).T ext = m / 10End IfEnd IfEnd SubPrivate Sub wenjiandu_Click() 从文件中读取数据Dim i As IntegerOpen App.Path + "\data.txt" For Input As #1For i = 1 T o 10Input #1, a(i)T ext1(i - 1).T ext = a(i)Next iCommand3.Enabled = T rueCommand4.Enabled = T rueEnd Sub比较法排序Private Function bijiao(paixu() As Integer) As IntegerDim k As Integer, j As Integer, linshi As Integerjiaohuan = 0For k = 1 T o UBound(paixu) - 1If Option1.V alue ThenFor j = k T o UBound(paixu)If paixu(k) > paixu(j) Thenlinshi = paixu(j)paixu(j) = paixu(k)paixu(k) = linshiEnd IfNext jElseIf Option2.V alue ThenFor j = k T o UBound(paixu)If paixu(k) < paixu(j) Thenlinshi = paixu(j)paixu(j) = paixu(k)paixu(k) = linshiEnd IfNext jEnd IfNext kEnd Function比较法排序Private Function maopao(paixu() As Integer) As Integer Dim k As Integer, j As Integer, linshi As IntegerFor k = 1 T o UBound(paixu) - 1If Option1.V alue ThenFor j = 1 T o UBound(paixu) - kIf paixu(j) > paixu(j + 1) Thenlinshi = paixu(j + 1)paixu(j + 1) = paixu(j)paixu(j) = linshiEnd IfNext jElseIf Option2.V alue ThenFor j = 1 T o UBound(paixu) - kIf paixu(j) < paixu(j + 1) Thenlinshi = paixu(j + 1)paixu(j + 1) = paixu(j)paixu(j) = linshiEnd IfNext jEnd IfNext kEnd Function选择法排序Private Function xuanze(paixu() As Integer) As Integer Dim k As Integer, j As Integer, linshi As Integer, m As Integer For k = 1 T o UBound(paixu) - 1linshi = paixu(k + 1)m = k + 1For j = k + 1 T o UBound(paixu)If linshi > paixu(j) Thenlinshi = paixu(j)m = jEnd IfNext jIf paixu(k) > paixu(m) And Option1.V alue Thenlinshi = paixu(m)paixu(m) = paixu(k)paixu(k) = linshiEnd IfIf Option2.V alue Thenlinshi = paixu(k + 1)m = k + 1For j = k + 1 T o UBound(paixu)If linshi < paixu(j) Thenlinshi = paixu(j)m = jEnd IfNext jIf paixu(k) < paixu(m) Thenlinshi = paixu(m)paixu(m) = paixu(k)paixu(k) = linshiEnd IfEnd IfNext kEnd Function插入法排序:Private Function charu(paixu() As Integer) As Integer Dim i As Integer, j As Integer, k As Integer, linshi As Integer For i = 1 T o UBound(paixu)For j = 1 T o iIf paixu(i) < paixu(j) And Option1.V alue Thenlinshi = paixu(i)For k = i T o j + 1 S tep -1paixu(k) = paixu(k - 1)Next kpaixu(j) = linshiElseIf paixu(i) > paixu(j) A nd Option2.V alue Thenlinshi = paixu(i)For k = i T o j + 1 S tep -1paixu(k) = paixu(k - 1)Next kpaixu(j) = linshiEnd IfNext jNext iEnd Function窗体2的源代码::Option ExplicitPrivate Sub Command1_Click()Form2.V isible = FalseEnd SubPrivate Sub Option1_Click()T ext1.T ext = ""T ext1.T ext = "所谓比较法就是:第一轮从a(1)开始,一次讲A(1)与其后的所有元素逐个进行比较,如果其后的某一个元素比A(1)小,则将两者对调,这样第一轮结束后A(1)中保留的是10个元素中最小的值。