鉴于大家对VC与C++类别十分关注,我们编辑小组在此为大家搜集整理了“基于VC的多种排序算法动态演示软件的设计”一文,供大家参考学习!
客服咨询,网学网竭诚为您服务,本站永久域名:myeducs.cn | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1.1 动态演示冒泡算法模块设计首先,本系统是在Visual C++ 6.0中文版下MFC 环境下,设置的“MFC AppWizard(exe)”工程,工程名为:“tt”。相关的ID如表4_1,4_2所示 表4-1 为工程添加IDR_MAINFRAME的菜单选项
表4-2 打开类向导(Class Wizard)对话框向视图类添加响应函数
表4-3 通过类查看(ClassView)选项卡,向视图类添加成员变量
打开ttView.h头文件,在文件开始部分定义两个常量: #define N 70 //设定排序的记录次数 #define DELAY 3 //每次交换操作所耗 #define DELAY1 1 //每次比较操作所耗的时间 并在其下声明冒泡排序的全局函数: UINT ThreadSortBubble(LPVOID lp); 由于开启多线程时,使用的都是全局函数,想要获得当前视图类中的数据,并实时更新试图的显示,就必须获取当前试图对象。所以本系统要定义一个全局指针,打开ttView.cpp构建函数中加入语句“CTtView *pView”用来获取当前视图。 然后,系统在ttView.cpp构建文件中添加实现冒泡排序算法的函数:ThreadSortBubble,代码为: UINT ThreadSortBubble(LPVOID lp) { int * data; int i,j,key; int tag; data=pView->m_SortBubble; for(i=0;i<N;i++) { tag=0; for(j=N-1;j>i;j--) { if(data[j]>data[j-1]) { key=data[j]; data[j]=data[j-1]; data[j-1]=key; Sleep(DELAY); pView->Invalidate(TRUE); tag++; } Sleep(DELAY1); } if(tag==0) break; } pView->Invalidate(TRUE); return 0; } 在类中查看(Class View)选项,打开视图类CTtView,在其中修改构建函数,实现变量初始化: CTtView::CTtView() { int i; srand((unsigned)time(NULL)); for(i=0;i<N;i++) m_SortBubble[i] =0; pView=this; IsSortBubble=FALSE; } 为了让大家看清楚排序之间对比和交换的过程,修改响应函数“OnSortBubble”,产生0-70随即整数来进行排序: void CTtView::OnSortBubble() { for(int i=0;i<N;i++) { m_SortBubble[i]=(int)((double)rand()*70.0/(double)RAND_MAX); } IsSortBubble=TRUE; AfxBeginThread(ThreadSortBubble,GetSafeHwnd()); } 最后修改OnDraw函数,利用画刷实现动态绘制: void CTtView::OnDraw(CDC* pDC) { int i; CTtDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if(IsSortBubble) { CBrush BlueBrush(RGB(0,255,0)); pDC->TextOut(250,200,"冒泡排序演示");// for(i=0;i<N;i++) { m_SortBubbleRect.bottom=170; m_SortBubbleRect.left=250+i*2; m_SortBubbleRect.right=m_SortBubbleRect.left+1; m_SortBubbleRect.top=m_SortBubbleRect.bottom-m_SortBubble[i]; pDC->FillRect(&m_SortBubbleRect,&BlueBrush); } BlueBrush.DeleteObject(); } 1.2 动态演示选择算法模块设计表4-4 为工程添加IDR_MAINFRAME的菜单选项
表4-5 打开类向导(Class Wizard)对话框向视图类添加响应函数
表4-6 通过类查看(ClassView)选项卡,向视图类添加成员变量
在TtView.h头文件,声明选择排序的全局函数: UINT ThreadSortSelect(LPVOID lp); 然后,在TtView.cpp构建文件中添加实现选择排序算法的函数:ThreadSortSelect,代码为: UINT ThreadSortSelect(LPVOID lp) { int i,j,key,tmp; int *data; data=pView->m_SortSelect; for(i=0;i<N-1;i++) { key=i; for(j=i+1;j<N;j++) { if(data[j]>data[key]) { key=j; pView->Invalidate(TRUE); } Sleep(DELAY1); } Sleep(DELAY); tmp=data[i]; data[i]=data[key]; data[key]=tmp; } Sleep(DELAY); pView->Invalidate(TRUE); return 0; } 在类中查看(Class View)选项,打开视图类CTtView,在其中修改构建函数,实现变量初始化: CTtView::CTtView() { int i; srand((unsigned)time(NULL)); for(i=0;i<N;i++) m_SortSelect[i] =0; pView=this; IsSortSelect=FALSE; } 修改响应函数“OnSortSelect”,产生0-70随即整数来进行排序: void CTtView::OnSortSelect() { for(int i=0;i<N;i++) { m_SortSelect[i]=(int)((double)rand()*70.0/(double)RAND_MAX); } IsSortSelect=TRUE; AfxBeginThread(ThreadSortSelect,GetSafeHwnd()); } 最后修改OnDraw函数,利用画刷实现动态绘制: void CTtView::OnDraw(CDC* pDC) { int i; CTtDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if(IsSortSelect) { CBrush BlueBrush(RGB(0,255,0)); pDC->TextOut(50,200,"选择排序演示"); for(i=0;i<N;i++) { m_SortSelectRect.bottom=170; m_SortSelectRect.left=50+i*2; m_SortSelectRect.right=m_SortSelectRect.left+1; m_SortSelectRect.top=m_SortSelectRect.bottom-m_SortSelect[i]; pDC->FillRect(&m_SortSelectRect,&BlueBrush); } BlueBrush.DeleteObject(); } 1.3 动态演示快速算法模块设计表4-7 为工程添加IDR_MAINFRAME的菜单选项
表4-8 打开类向导(Class Wizard)对话框向视图类添加响应函数
表4-9 通过类查看(ClassView)选项卡,向视图类添加成员变量
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
本站发布的计算机毕业设计均是完整无错的全套作品,包含开题报告+程序+论文+源代码+翻译+答辩稿PPT | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
本文选自计算机毕业设计http://myeducs.cn |