排序演示vb课程设计论文.docx

上传人:b****8 文档编号:29666722 上传时间:2023-07-26 格式:DOCX 页数:47 大小:100.96KB
下载 相关 举报
排序演示vb课程设计论文.docx_第1页
第1页 / 共47页
排序演示vb课程设计论文.docx_第2页
第2页 / 共47页
排序演示vb课程设计论文.docx_第3页
第3页 / 共47页
排序演示vb课程设计论文.docx_第4页
第4页 / 共47页
排序演示vb课程设计论文.docx_第5页
第5页 / 共47页
点击查看更多>>
下载资源
资源描述

排序演示vb课程设计论文.docx

《排序演示vb课程设计论文.docx》由会员分享,可在线阅读,更多相关《排序演示vb课程设计论文.docx(47页珍藏版)》请在冰豆网上搜索。

排序演示vb课程设计论文.docx

排序演示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,然后又定义了一个PrivateDeclareSubSleepLib"kernel32"(ByValdwMillisecondsAsLong),声明sleep函数,可以使程序暂停一段时间,最后用时钟(timer)来设定所需暂停的随机时间(s)。

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

2、问题:

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

解决:

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

3、问题:

动态演示如何演变,交换次数无法得到。

解决:

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

演示代码:

Ifa(k)>a(j)AndOption1.ValueThen

Text1(k-1).BackColor=yanse1'''''''''''''''交换元素颜色

Text1(j-1).BackColor=yanse1

DoEvents

CallSleep(1000)调用了函数sleep

linshi=a(j)

a(j)=a(k)

a(k)=linshi

jiaohuan=jiaohuan+1

Text1(k-1).Text=a(k)

Text1(j-1).Text=a(j)

Text1(k-1).BackColor=yanse'''''''''''''已经排序的颜色

Text1(j-1).BackColor=yanse

EndIf

Ifa(k)

Text1(k-1).BackColor=yanse1

Text1(j-1).BackColor=yanse1

linshi=a(j)

a(j)=a(k)

a(k)=linshi

jiaohuan=jiaohuan+1

DoEvents

Sleep(1000)

Text1(k-1).Text=a(k)

Text1(j-1).Text=a(j)

Text1(k-1).BackColor=yanse

Text1(j-1).BackColor=yanse

EndIf

Ifk=9Then

j=0

k=0

Timer1.Enabled=False

MsgBoxFrame1.Caption&"排序结束"&"共用"&jiaohuan&"次",vbOKOnly+vbInformation,"系统提示"

4、问题:

快捷菜单无法弹出。

解决:

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

PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,xAsSingle,YAsSingle)

IfButton=2ThenForm1.PopupMenuyoujian'''右键弹出菜单

EndSub

五、收获体会

这是我进入大学以来第一次学习vb,第一次知道了什么是vb,第一次了解到了原来平时我们看到计算机上那些普普通通的小程序需要那么多的代码才能够运行起来,终于发现这其中的奥秘。

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

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

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

六、源代码

模块:

OptionExplicit

PublicDeclareSubSleepLib"kernel32"(ByValdwMillisecondsAsLong)

颜色设置:

PrivateSubCombo1_Click()

DimiAsInteger

SelectCaseCombo1.ListIndex

Case0

Fori=0To9

Text1(i).BackColor=vbBlue

Nexti

Case1

Fori=0To9

Text1(i).BackColor=vbGreen

Nexti

Case2

Fori=0To9

Text1(i).BackColor=vbRed

Nexti

Case3

Fori=0To9

Text1(i).BackColor=vbYellow

Nexti

EndSelect

EndSub

PrivateSubCombo2_Click()

DimiAsInteger

SelectCaseCombo2.ListIndex

Case0

Fori=0To9

Text1(i).ForeColor=vbBlue

Nexti

Case1

Fori=0To9

Text1(i).ForeColor=vbGreen

Nexti

Case2

Fori=0To9

Text1(i).ForeColor=vbRed

Nexti

Case3

Fori=0To9

Text1(i).ForeColor=vbYellow

Nexti

EndSelect

EndSub

PrivateSubCombo3_Click()

SelectCaseCombo3.ListIndex

Case0

yanse=vbBlue

Case1

yanse=vbGreen

Case2

yanse=vbRed

Case3

yanse=vbYellow

EndSelect

EndSub

 

PrivateSubCombo4_Click()

SelectCaseCombo4.ListIndex

Case0

yanse1=vbBlue

Case1

yanse1=vbGreen

Case2

yanse1=vbRed

Case3

yanse1=vbYellow

EndSelect

EndSub

退出按钮:

PrivateSubCommand1_Click()

IfMsgBox("您真的要退出吗?

",4+32,"请您确认!

")=vbNoThen

ExitSub

EndIf

UnloadForm1

UnloadForm2

EndSub

产生随机数:

PrivateSubCommand2_Click()

DimiAsInteger

RandomizeTime

Fori=1To10

a(i)=Rnd*200

Text1(i-1).Text=a(i)

Nexti

Command3.Enabled=True

Command4.Enabled=True

EndSub

开始排序直接给出排序结果:

PrivateSubCommand3_Click()

DimiAsInteger,kAsSingle

IfForm1.Optzhijie.ValueThen

IfForm2.Option1.ValueThen

Callbijiao(a)

Fori=1To10

Text1(i-1).Text=a(i)

Next

ElseIfForm2.Option2.ValueThen

Callxuanze(a)

Fori=1To10

Text1(i-1).Text=a(i)

Next

ElseIfForm2.Option3.ValueThen

Callcharu(a)

Fori=1To10

Text1(i-1).Text=a(i)

Next

ElseIfForm2.Option4.ValueThen

Callmaopao(a)

Fori=1To10

Text1(i-1).Text=a(i)

Next

EndIf

Ifa

(1)>a(10)Then

Text2(0).Text=a

(1)

Text2

(1).Text=a(10)

Else

Text2(0).Text=a(10)

Text2

(1).Text=a

(1)

EndIf

Fori=1To10

k=a(i)+k

Nexti

Text2

(2).Text=k/10

EndIf

-----------------------------------------------------------------------------------------

动态演示结果:

IfForm1.Optdongtai.ValueThen

IfForm2.Option1.ValueThen

Timer1.Enabled=True

ElseIfForm2.Option2.ValueThen

Timer1.Enabled=True

ElseIfForm2.Option3.ValueThen

Timer1.Enabled=True

ElseIfForm2.Option4.ValueThen

Timer1.Enabled=True

EndIf

EndIf

EndSub

暂停运行命令:

PrivateSubCommand4_Click()

Dimi%,n%,s%

f=False

Timer1.Enabled=False

Timer1.Interval=1000

Fori=1Ton

s=n+1

Nexti

Sleep(n)

EndSub

默认:

PrivateSubCommand5_Click()

Dimi%

Fori=0To9

Combo1.Text="蓝色"

Combo2.Text="绿色"

Combo3.Text="红色"

Combo4.Text="黄色"

Text1(i).BackColor=vbBlue

Text1(i).ForeColor=vbGreen

yanse=vbRed

yanse1=vbYellow

Next

EndSub

窗体启动的时候加载的程序:

PrivateSubForm_Load()

Command3.Enabled=False

Command4.Enabled=False

Frame4.Visible=False

Form2.Option1.Value=True

EndSub

快捷菜单:

PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)

IfButton=2ThenForm1.PopupMenuyoujian

EndSub

速度

PrivateSubHScroll1_Change()

Timer1.Interval=HScroll1.Smallchange

EndSub

菜单退出的按钮:

PrivateSubmnu_end_Click()

UnloadForm1

UnloadForm2

EndSub

显示设置按钮:

PrivateSubmnu_set_Click()

Ifmnu_set.Checked=TrueThen

Form1.Height=Form1.Height+1650

Frame4.Visible=True

mnu_set.Checked=False

ElseIfmnu_set.Checked=FalseThen

Form1.Height=Form1.Height-1650

mnu_set.Checked=True

EndIf

EndSub

写入数据:

PrivateSubshujuxie_Click()

DimiAsInteger

OpenApp.Path+"\data.txt"ForOutputAs#1

Fori=1To10

Write#1,a(i);

Nexti

Close#1

EndSub

显示窗体2:

PrivateSubsuanfa_Click()

Form2.Show

EndSub

时间控件用来动态演示:

PrivateSubTimer1_Timer()

StatickAsInteger,jAsInteger,linshiAsInteger,jiaohuanAsInteger,iAsInteger

DimXAsInteger,mAsSingle

f=True

Iff=FalseThen

ExitSub

EndIf

IfForm2.Option1.ValueThen比较法排序

Ifk=0Then

k=1

j=2

EndIf

Ifj=11Then

k=k+1

j=k+1

EndIf

Ifa(k)>a(j)AndOption1.ValueThen交换元素颜色

Text1(k-1).BackColor=yanse1

Text1(j-1).BackColor=yanse1

DoEvents

CallSleep(1000)

linshi=a(j)

a(j)=a(k)

a(k)=linshi

jiaohuan=jiaohuan+1

Text1(k-1).Text=a(k)

Text1(j-1).Text=a(j)

Text1(k-1).BackColor=yanse已经排序的元素颜色

Text1(j-1).BackColor=yanse

EndIf

Ifa(k)

Text1(k-1).BackColor=yanse1

Text1(j-1).BackColor=yanse1

linshi=a(j)

a(j)=a(k)

a(k)=linshi

jiaohuan=jiaohuan+1

DoEvents

Sleep(1000)

Text1(k-1).Text=a(k)

Text1(j-1).Text=a(j)

Text1(k-1).BackColor=yanse

Text1(j-1).BackColor=yanse

EndIf

Ifk=9Then

j=0

k=0

Timer1.Enabled=False

MsgBoxFrame1.Caption&"排序结束"&"交换次数为:

"&jiaohuan&"次",vbOKOnly+vbInformation,"系统提示"

jiaohuan=0

Ifa

(1)>a(10)Then

Text2(0).Text=a

(1)

Text2

(1).Text=a(10)

Else

Text2(0).Text=a(10)

Text2

(1).Text=a

(1)

EndIf

ForX=1To10

m=a(X)+m

NextX

Text2

(2).Text=m/10

EndIf

j=j+1选择法排序

ElseIfForm2.Option2.ValueThen

k=k+1

linshi=a(k+1)

i=k+1

IfOption1.ValueThen

Forj=k+1ToUBound(a)

Iflinshi>a(j)Then

linshi=a(j)

i=j

EndIf

Nextj

Ifa(k)>a(i)Then

Text1(k-1).BackColor=yanse1

Text1(i-1).BackColor=yanse1

DoEvents

Sleep(1000)

linshi=a(i)

a(i)=a(k)

a(k)=linshi

Text1(k-1).Text=a(k)

Text1(i-1).Text=a(i)

jiaohuan=jiaohuan+1

Text1(k-1).BackColor=yanse

Text1(i-1).BackColor=yanse

EndIf

EndIf

IfOption2.ValueThen

Forj=k+1ToUBound(a)

Iflinshi

linshi=a(j)

i=j

EndIf

Nextj

Ifa(k)

Text1(k-1).BackColor=yanse1

Text1(i-1).BackColor=yanse1

DoEvents

Sleep(1000)

linshi=a(i)

a(i)=a(k)

a(k)=linshi

Text1(k-1).Text=a(k)

Text1(i-1).Text=a(i)

jiaohuan=jiaohuan+1

Text1(k-1).BackColor=yanse

Text1(i-1).BackColor=yanse

EndIf

EndIf

Ifk=9Then

i=0

j=0

k=0

Timer1.Enabled=False

MsgBoxFrame1.Caption&"排序结束"&"交换次数为:

"&jiaohuan&"次",vbOKOnly+vbInformation,"系统提示"

jiaohuan=0

Ifa

(1)>a(10)Then

Text2(0).Text=a

(1)

Text2

(1).Text=a(10)

Else

Text2(0).Text=a(10)

Text2

(1).Text=a

(1)

EndIf

ForX=1To10

m=a(X)+m

NextX

Text2

(2).Text=m/10

EndIf

ElseIfForm2.Option3.ValueThen插入法排序

i=i+1

Forj=1Toi

Ifa(i)

Text1(i-1).BackColor=yanse1

Text1(j-1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 日语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1