当前位置:文档之家› vb课程设计论文

vb课程设计论文

Vb课程设计题目排序演示专业自动化学生姓名王亮学号2012118064指导教师王福林目录一、设计任务 (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,然后又定义了一个Pri vate Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) ,声明sleep函数,可以使程序暂停一段时间,最后用时钟(timer)来设定所需暂停的随机时间(s)。

注意ti mer函数设置时的interval值,以毫秒为单位,1000ms=1s。

2、问题:消息对话框(msgbox)的形式,及msgbox函数的返回值如何的选取,设置。

解决:在对“停止”按钮编码时,一开始未给msgbox赋值,导致程序不起作用,后来赋值后,采用了msgbox函数里的vbyes与vbno,采用了if...then...else...但程序无法退出,最后只对vbno做了代码编制,退出程序则采用了“unload”函数,最后程序终于调试成功。

3、问题:动态演示如何演变,交换次数无法得到。

解决:采用timer函数,以时间来对它进行控制,也可以拖得滚动条来控制它动态演示时的速度。

演示代码:If a(k) > a(j) An d O ptio n1.V alue Th enTex t1(k - 1).B ackC olor = y ans e1 '''''''''''''''交换元素颜色Tex t1(j - 1).B ackC olor = y ans e1DoE vent sCal l Sl eep(1000) 调用了函数sl eeplin shi = a(j)a(j) = a(k)a(k) = lins hijia ohua n = jia ohua n + 1Tex t1(k - 1).T ext = a(k)Tex t1(j - 1).T ext = a(j)Tex t1(k - 1).B ackC olor = y ans e '''''''''''''已经排序的颜色Tex t1(j - 1).B ackC olor = y ans eEnd IfIf a(k) < a(j) And Opti on2.Val ue T henTex t1(k - 1).B ackC olor = y ans e1Tex t1(j - 1).B ackC olor = y ans e1lin shi = a(j)a(j) = a(k)a(k) = lins hijia ohua n = jia ohua n + 1DoE vent sSle ep (1000)Tex t1(k - 1).T ext = a(k)Tex t1(j - 1).T ext = a(j)Tex t1(k - 1).B ackC olor = y ans eTex t1(j - 1).B ackC olor = y ans eEnd IfIf k = 9 The nj = 0k = 0Tim er1.Enab led = F alseMsgBo x F rame1.C apti on & "排序结束" & "共用" & ji aohu an & "次", vb OKOn ly + vbInf orma tion, "系统提示"4、问题:快捷菜单无法弹出。

解决:设计到了窗体编辑器,及弹出菜单所使用的方法PopupMenu。

Private Sub Form_Mous eDown(Button As Integer, Shift As Integer, x As Single, Y As Single)If Button = 2 Then Form1.PopupMenu y oujian '''右键弹出菜单End Sub五、收获体会这是我进入大学以来第一次学习vb,第一次知道了什么是vb,第一次了解到了原来平时我们看到计算机上那些普普通通的小程序需要那么多的代码才能够运行起来,终于发现这其中的奥秘。

学习vb首先就是要对所有常用函数了如指掌,这样在编程的时候才能够很快想到并用对地方,做这个程序设计的一开始,简直是一头雾水,无从下手,后来经过翻书,查找资料,网上资料,等等...终于对所要编的程序有了一定的认识,在同学互相讨论的基础上,终于编出排序演示,但是还存在不足,在动态演示的时候,缺了正在交换文本框的动态形式,但是基本能运行起来,大致的符合了设计任务。

程序中所涉及的内容很多,有比较法排序,插入法排序,冒泡发排序,选择法排序,集合了所有的排序,以前对排序的编程就有点不理解,因为它很绕,真正理解它真的有点困难。

还有一些我们vb书上第七章的一些窗体编辑器,快捷菜单的做法,定时器的编码,这些更加巩固了我对这些知识的理解,通过这几天对vb的深入研究,发现其实慢慢的对vb产生了兴趣,从以前的没兴趣到产生兴趣,这是一种好的现象,兴趣是最好的老师,相信我会越学越好的。

六、源代码模块:Option ExplicitPublic Declar e Sub Sleep Lib "ker nel32" (ByV al dw Millisec onds A s Long)颜色设置:Pr ivate Sub Com bo1_Click()Dim i As Int eg erSel ect Ca se Com bo1.ListIndexCase 0For i = 0 T o 9T ext1(i).Ba ckColor= vbBlu eNext iCase 1For i = 0 T o 9T ext1(i).BackC olor = vbGr eenNext iCase 2For i = 0 T o 9T ext1(i).BackC olor = vb RedNext iCase 3For i = 0 T o 9T ext1(i).BackC olor = vbY ellowNext iEnd Sel ectEnd SubPr ivate Sub Com bo2_Click()Dim i As Int eg erSel ect Ca se Com bo2.ListIndex Case 0For i = 0 T o 9T ext1(i).For eColor= vbBlu eNext iCase 1For i = 0 T o 9T ext1(i).For eC olor = vbGr een Next iCase 2For i = 0 T o 9T ext1(i).For eC olor = vb Red Next iCase 3For i = 0 T o 9T ext1(i).For eC olor = vbY ellow Next iEnd Sel ectEnd SubPr ivate Sub Com bo3_Click() Sel ect Ca se Com bo3.ListIndex Ca se 0yan se = vbBlu eCa se 1yan se = vbGr eenCa se 2yan se = vbRedCa se 3yan se = vbY ellowEnd Sel ectEnd SubPr ivate Sub Com bo4_Click() Sel ect Ca se Com bo4.ListIndex Ca se 0yan se1 = vb BlueCa se 1yan se1 = vbGr eenCa se 2yan se1 = vb RedCa se 3yan se1 = vbY ellowEnd Sel ectEnd Sub退出按钮:Pr ivate Sub Com m and1_Click()If Msg Box("您真的要退出吗?", 4 + 32, "请您确认!") = vb No Then Exit SubEnd IfUnload Form1Unload Form2End Sub产生随机数:Pr ivate Sub Com m and2_Click()Dim i As Int eg erRandom iz e Tim eFor i = 1 T o 10a(i) = Rnd * 200T ext1(i - 1).T ext = a(i)Next iComm and3.Enabled = T r ueComm and4.Enabled = T r ueEnd Sub开始排序直接给出排序结果:Pr ivate Sub Com m and3_Click()Dim i As Int eg er, k A s Singl eIf For m1.Optzhij ie.V alu e Th enIf For m2.Option1.V alue ThenCall bij iao(a)For i = 1 T o 10T ext1(i - 1).T ext = a(i)NextEl seIf For m2.Option2.V alue ThenCall xuanz e(a)For i = 1 T o 10T ext1(i - 1).T ext = a(i)NextEl seIf For m2.Option3.V alue ThenCall char u(a)For i = 1 T o 10T ext1(i - 1).T ext = a(i)NextEl seIf For m2.Option4.V alue ThenCall m aopao(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)El seT ext2(0).T ext = a(10)T ext2(1).T ext = a(1)End IfFor i = 1 T o 10k = a(i) + kNext iT ext2(2).T ext = k / 10End If----------------------------------------------------------------------------------------- 动态演示结果:If For m1.Optdongtai.V alue Th enIf For m2.Option1.V alue ThenTim er1.Enabled = T r ueEl seIf For m2.Option2.V alue ThenTim er1.Enabled = T r ueEl seIf For m2.Option3.V alue ThenTim er1.Enabled = T r ueEl seIf For m2.Option4.V alue ThenTim er1.Enabled = T r ueEnd IfEnd IfEnd Sub暂停运行命令:Pr ivate Sub Com m and4_Click()Dim i%, n%, s%f = Fal seTim er1.Enabled = FalseTim er1.Inter val = 1000For i = 1 T o ns = n + 1Next iSl eep (n)End Sub默认:Pr ivate Sub Com m and5_Click()Dim i%Com bo1.T ext = "蓝色"Com bo2.T ext = "绿色"Com bo3.T ext = "红色"Com bo4.T ext = "黄色"T ext1(i).Bac kColor = vbBlu eT ext1(i).For eColor = vbGr eenyanse = vbRedyanse1 = vbY ellowNextEnd Sub窗体启动的时候加载的程序:Pr ivate Sub For m_Load()Comm and3.Enabled = FalseComm and4.Enabled = FalseFr am e4.V isibl e = Fal seForm2.Option1.V alue = T r ueEnd Sub快捷菜单:Pr ivate Sub For m_MouseDow n(Button As Int eg er, Shift As Int eg er, X A s Singl e, Y As Singl e) If Button = 2 Then For m1.PopupMenu youj ianEnd Sub速度Pr ivate Sub HScr oll1_Chang e()Tim er1.Inter val = H Scr oll1.Sm allchangeEnd Sub菜单退出的按钮:Pr ivate Sub m nu_end_Click()Unload Form1Unload Form2End Sub显示设置按钮:Pr ivate Sub m nu_set_Clic k()If m nu_set.Ch ecked = T r ue ThenFor m1.Height = For m1.Height + 1650Fr am e4.V i sible = T r uem nu_set.Ch ecked = Fal seElseIf m nu_set.Ch ecked = Fal se ThenFor m1.Height = For m1.Height - 1650m nu_set.Ch ecked = T r ueEnd IfEnd Sub写入数据:Pr ivate Sub shuj uxie_Click()Open App.Path + "\data.txt" For Output As #1For i = 1 T o 10W r ite #1, a(i);Next iClose #1End Sub显示窗体2:Pr ivate Sub suanfa_Click()Form2.ShowEnd Sub时间控件用来动态演示:Pr ivate Sub Tim er1_Tim er()Static k A s Int eg er, j As Int eg er, linshi As Integ er, j iaohuan As Int eg er, i A s Int eg er Dim X As Int eg er, m As Singlef = T r ueIf f = Fal se ThenExit SubEnd IfIf For m2.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 Th en 交换元素颜色T ext1(k - 1).Ba ckColor = yan se1T ext1(j - 1).Bac kColor = yanse1DoEv entsCall Sl eep(1000)linshi = a(j)a(j) = a(k)a(k) = linshij iaohuan = jiaohuan + 1T ext1(k - 1).T ext = a(k)T ext1(j - 1).T ext = a(j)T ext1(k - 1).Ba ckColor = yan se 已经排序的元素颜色T ext1(j - 1).Bac kColor = yanseEnd IfIf a(k) < a(j) And Option2.V alue Th enT ext1(k - 1).Ba ckColor = yan se1T ext1(j - 1).Bac kColor = yanse1linshi = a(j)a(j) = a(k)a(k) = linshij iaohuan = jiaohuan + 1DoEv entsSl eep (1000)T ext1(k - 1).T ext = a(k)T ext1(j - 1).T ext = a(j)T ext1(k - 1).Ba ckColor = yan seT ext1(j - 1).Bac kColor = yanseEnd IfIf k = 9 Thenj = 0k = 0Tim er1.Enabled = Fal seMsg Bo x Fr am e1.Caption & "排序结束" & "交换次数为:" & j iaohuan & "次", vbOKOnly + vbInform ation, "系统提示"j iaohuan = 0If a(1) > a(10) ThenT ext2(0).T ext = a(1)T ext2(1).T ext = a(10)El seT 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 For m2.Option2.V alue Th enk = k + 1lin shi = a(k + 1)i = k + 1If Option1.V alue ThenFor j = k + 1 T o U Bound(a)If lin shi > a(j) Thenlinshi = a(j)i = jEnd IfNext jIf a(k) > a(i) ThenT ext1(k - 1).Bac kColor = yan se1T ext1(i - 1).BackCol or = y anse1DoEv entsSl eep (1000)lin shi = a(i)a(i) = a(k)a(k) = linshiT ext1(k - 1).T ext = a(k)T ext1(i - 1).T ext = a(i)j iaohuan = j iaohuan + 1T ext1(k - 1).Bac kColor = yan seT ext1(i - 1).BackCol or = y anseEnd IfEnd IfIf Option2.V alue ThenFor j = k + 1 T o U Bound(a)If lin shi < a(j) Thenlinshi = a(j)i = jEnd IfNext jIf a(k) < a(i) And Option2.V alue Th enT ext1(k - 1).Ba ckColor = yan se1T ext1(i - 1).BackC olor = y anse1DoEv entsSl eep (1000)linshi = a(i)a(i) = a(k)a(k) = lin shiT ext1(k - 1).T ext = a(k)T ext1(i - 1).T ext = a(i)j iaohuan = j iaohuan + 1T ext1(k - 1).BackCol or = y anseT ext1(i - 1).Bac kColor = yan seEnd IfEnd IfIf k = 9 Theni = 0j = 0k = 0Tim er1.Enabled = Fal seMsg Bo x Fr am e1.Caption & "排序结束" & "交换次数为:" & j iaohuan & "次", vbOKOnly + vbInform ation, "系统提示"j iaohuan = 0If a(1) > a(10) ThenT ext2(0).T ext = a(1)T ext2(1).T ext = a(10)El seT 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 For m2.Option3.V alue Th en 插入法排序i = i + 1For j = 1 T o iIf a(i) < a(j) And Option1.V alue Th enT ext1(i - 1).Bac kColor = yan se1T ext1(j - 1).Bac kColor = yan se1DoEv ent sSl eep (1000)linshi = a(i)For k = i T o j + 1 St ep -1a(k) = a(k - 1)Next ka(j) = lin shij iaohuan = j iaohuan + 1For X = j T o iT ext1(X - 1).T ext = a(X)Next XT ext1(i - 1).Ba ckColor = yan seT ext1(j - 1).Ba ckColor = yan seEnd IfIf a(i) > a(j) And Option2.V alue Th enT ext1(i - 1).Bac kColor = yan se1T ext1(j - 1).Bac kColor = yan se1DoEv ent sSl eep (1000)linshi = a(i)For k = i T o j + 1 St ep -1a(k) = a(k - 1)Next ka(j) = lin shiT ext1(i - 1).Ba ckColor = yan seT ext1(j - 1).Ba ckColor = yan sej iaohuan = j iaohuan + 1For X = j T o iT ext1(X - 1).T ext = a(X)Next XEnd IfNext jIf i = 10 Theni = 0j = 0k = 0Tim er1.Enabled = Fal seMsg Bo x Fr am e1.Caption & "排序结束" & "交换次数为:" & j iaohuan & "次", vbOKOnly + vbInform ation, "系统提示"j iaohuan = 0If a(1) > a(10) ThenT ext2(0).T ext = a(1)T ext2(1).T ext = a(10)El seT 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 For m2.Option4.V alue Th en 冒泡法排序j = j + 1If j = 10 - k Thenk = k + 1j = 1End IfIf a(j) > a(j + 1)And Option1.V alue ThenT ext1(j - 1).BackCol or = y anse1T ext1(j).BackCol or = y anse1DoEv ent sSl eep (1000)linshi = a(j + 1)a(j + 1) = a(j)a(j) = linshij iaohuan = jiaohuan + 1T ext1(j - 1).T ext = a(j)T ext1(j).T ext = a(j + 1)T ext1(j - 1).Bac kColor = yanseT ext1(j).Bac kColor = yanseEnd IfIf a(j) < a(j + 1)And Option2.V alue ThenT ext1(j - 1).BackCol or = y anse1T ext1(j).BackCol or = y anse1DoEv ent sSl eep (1000)linshi = a(j + 1)a(j + 1) = a(j)a(j) = linshij iaohuan = jiaohuan + 1T ext1(j - 1).T ext = a(j)T ext1(j).T ext = a(j + 1)T ext1(j - 1).Bac kColor = yanseT ext1(j).Bac kColor = yanseEnd IfIf k = 9 Thenk = 0j = 0Tim er1.Enabled = Fal seMsg Bo x Fr am e1.Caption & "排序结束" & "交换次序为:" & j iaohuan & "次", vbOKOnly + vbInform ation, "系统提示"j iaohuan = 0If a(1) > a(10) ThenT ext2(0).T ext = a(1)T ext2(1).T ext = a(10)El seT 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 SubPr ivate Sub w enj iandu_Click() 从文件中读取数据Dim i As Int eg erOpen 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 iCom m and3.Enabled = T r ueCom m and4.Enabled = T r ueEnd Sub比较法排序Pr ivate Function bij iao(paixu() As Integ er) A s Int eg er Dim k A s Int eg er, j As Int eg er, linshi As Integ erj iaohuan = 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 jEl seIf Option2.V alue ThenFor j = k T o U Bound(paixu)If paixu(k) < paixu(j) Thenlinshi = paixu(j)paixu(j) = paixu(k)paixu(k) = linshiEnd IfNext jEnd IfNext kEnd Function比较法排序Pr ivate Function m aopao(paixu() As Integ er) A s Int eg er Dim k A s Int eg er, j As Int eg er, linshi As Integ erFor 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 jEl seIf 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选择法排序Pr ivate Function xuanz e(paixu() As Int eg er) A s Int eg er Dim k A s Int eg er, j As Int eg er, linshi As Integ er, m As Int eg er For k = 1 T o UBound(paixu) - 1lin shi = paixu(k + 1)m = k + 1For j = k + 1 T o UBound(paixu)If linshi > paixu(j) Thenlin shi = paixu(j)m = jEnd IfNext jIf paixu(k) > paixu(m) And Option1.V alue Th enlin shi = paixu(m)paixu(m) = paixu(k)paixu(k) = linshiEnd IfIf Option2.V alu e Th enlinshi = paixu(k + 1)m = k + 1For j = k + 1 T o U Bound(paixu)If linshi < paixu(j) Thenlin shi = paixu(j)m = jEnd IfNext jIf paixu(k) < paixu(m) Thenlinshi = paixu(m)paixu(m) = paixu(k)paixu(k) = linshiEnd IfEnd IfNext kEnd Function插入法排序:Pr ivate Function charu(paixu() As Integ er) A s Int eg erDim i As Int eg er, j As Integ er, k A s Int eg er, linshi As Integ erFor i = 1 T o U Bound(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 St ep -1paixu(k) = paixu(k - 1)Next kpaixu(j) = linshiElseIf paixu(i) > paixu(j) And Option2.V alue Thenlinshi = paixu(i)For k = i T o j + 1 St ep -1paixu(k) = paixu(k - 1)Next kpaixu(j) = linshiEnd IfNext jNext iEnd Function窗体2的源代码::Option ExplicitPr ivate Sub Com m and1_Click()Form2.V isible = Fal seEnd SubPr ivate Sub Option1_Click()T ext1.T ext = ""T ext1.T ext = "所谓比较法就是:第一轮从a(1)开始,一次讲A(1)与其后的所有元素逐个进行比较,如果其后的某一个元素比A(1)小,则将两者对调,这样第一轮结束后A(1)中保留的是10个元素中最小的值。

相关主题