网站导航网学 原创论文 网站设计 最新系统 最新研究 原创论文 获取论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 设计下载 > VC与C++类别 > 正文

基于VC的多种排序算法动态演示软件的设计

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 13/05/14

鉴于大家对VC与C++类别十分关注,我们编辑小组在此为大家搜集整理了“基于VC的多种排序算法动态演示软件的设计”一文,供大家参考学习!

QQ交谈客服咨询,网学网竭诚为您服务,本站永久域名:myeducs.cn

1.1  动态演示冒泡算法模块设计

首先,本系统是在Visual C++ 6.0中文版下MFC 环境下,设置的“MFC AppWizard(exe)”工程,工程名为:tt”。相关的ID如表4_1,4_2所示

 

4-1 为工程添加IDR_MAINFRAME的菜单选项

ID

说明文字

功能描述

IDC_SORT_BUBBLE

冒泡法排序

冒泡法排序

   

 

4-2 打开类向导(Class Wizard)对话框向视图类添加响应函数

Object ID

Messages

Messages的描述

函数名

IDC_SORT_BUBBLE

COMMAND

选择该菜单

OnSortBubble

 

4-3 通过类查看(ClassView)选项卡,向视图类添加成员变量

变量类型

变量名

功能描述

int

m_SortBubble[N]

记录关键字

CRect

m_SortBubbleRect

动态演示矩形范围

BOOL

IsSortBubble

TRUE表示进行冒泡排序

 

打开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的菜单选项

ID

说明文字

功能描述

IDC_SORT_SELECT

选择法排序

选择法排序

   

4-5 打开类向导(Class Wizard)对话框向视图类添加响应函数

Object ID

Messages

Messages的描述

函数名

IDC_SORT_SELECT

COMMAND

选择该菜单

OnSortSelect

 

4-6 通过类查看(ClassView)选项卡,向视图类添加成员变量

变量类型

变量名

功能描述

int

m_SortSelect[N]

记录关键字

CRect

m_SortSelectRect

动态演示矩形范围

BOOL

IsSortSelect

TRUE表示进行选择排序

 

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的菜单选项

ID

说明文字

功能描述

IDC_SORT_QUICK

快速法排序

快速法排序

   

4-8 打开类向导(Class Wizard)对话框向视图类添加响应函数

Object ID

Messages

Messages的描述

函数名

IDC_SORT_QUICK

COMMAND

快速该菜单

OnSortQuick

 

4-9 通过类查看(ClassView)选项卡,向视图类添加成员变量

变量类型

变量名

功能描述

int

m_SortQuick[N]

记录关键字

CRect

m_SortQuickRect

动态演示矩形范围

BOOL

IsSortQuick

TRUE表示进行选择排序

 

本站发布的计算机毕业设计均是完整无错的全套作品,包含开题报告+程序+论文+源代码+翻译+答辩稿PPT

本文选自计算机毕业设计http://myeducs.cn
论文文章部分只是部分简介,如需了解更多详情请咨询本站客服!QQ交谈QQ3710167

原创论文

设为首页 | 加入收藏 | 论文首页 |原创论文 |
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师