《C++_JAVA集中上机》实习报告――图示冒泡排序
图示冒泡排序(C++) 指导教师:
姓 名:
学 号:
班 级:
时 间: 2012-04-26
目录
一 概述....................................................................................................... 2 二 总体
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
....................................................................................... 2 三 详细设计 ............................................................................................... 3 四 程序的调试与运行结果说明 ............................................................... 4 五 课程设计总结 ....................................................................................... 6 六
心得体会
决胜全面小康心得体会学党史心得下载党史学习心得下载军训心得免费下载党史学习心得下载
............................................................................................... 6 七 附录....................................................................................................... 7 参考文献................................................................................................... 11
一 概述
1. 课程设计的目的
进一步巩固理论课上所学到的知识,深刻把握面向对象编程技术的特性,锻炼学生熟练的应用面向对象的思想和设计方法解决实际问题的能力,深化对C++语言编程和开发工具运用的认识,提高软件项目开发实践能力和软件工程管理能力。
2. 课程设计的要求
需要的基本知识与技能:C程序设计;C++面向对象程序设计;windows程序设计。
尚未掌握的
知识点
高中化学知识点免费下载体育概论知识点下载名人传知识点免费下载线性代数知识点汇总下载高中化学知识点免费下载
:windows程序设计。
需要查阅相关资料:windows程序设计的相关资料。
教师对本题目所提出的要求:从C++/JAVA中选择自己熟悉的编程语言,独立完成自己最熟悉领域的小型软件项目,按照软件工程工作过程,分析软件项目系统的需求分析,系统规划设计,包括概要设计和详细设计,并在C++/JAVA环境中实现编程实现和调试该系统。 3. 课程设计的主要设计思想
图示冒泡排序算法:从后向前依次比较相邻的两个数,如果前数大天后数则交换,交换后对屏幕的输出信息进行更新,并通过控制时间即达到动画效果。反复以上过程直至循环结束为止,数据实现从小到大依次排列。
二 总体方案设计
本次选题为图示冒泡排序。排序可采用冒泡排序算法,它是最简单(相对来说效率较低)的排序算法之一。
在本次图示冒泡排序设计中要求程序能实现:通过图示(动画)演示冒泡排序的具体过程。
要实现图示冒泡排序功能,可以用VC++的知识编写程序来解决此问题。
系统具有良好的界面;必要的提示信息;简约美观的效果。使用人员能快速明白,对人们理解冒泡排序过程有一定的帮助。
包含的功能有:
1. 要进行的排序的数字应该随机生成,并可控制数字的大小范围和个数;
2. 正在进行第几趟排序要在动画窗口有所反映;
3. 对每一趟排序的每一次前数和后数比较在动画窗口有所反映;
4. 如果前数大天后数则交换,要用动画反映出交换的过程;
5. 排序好后,要反映出总共进行了N-1趟排序,提示已排序好;
6. 关闭动画程序,结束排序。
三 详细设计
(一)类图:
NumbersNumber
-n[N] : Number-num : int = 0
-x : int = 0+InitNum() : void
-y : int = 0+BubSort() : void
+Number()
+setN() : void
+setX() : void
+setY() : void
+getN() : int
+getX() : int
+getY() : int
+print() : void(二)类数据成员说明:
Number:1、num 要比较的数,初始化时随机生成;
2、x 记录num在窗口输出的位置的x轴坐标;
3、y 记录num在窗口输出的位置的y轴坐标。
Numbers|:1、n[N] 数组n存着N个要排序的Number类型是数。
(三)图示冒泡排序算法流程图:
开始
第一趟排序
是排序是否完成,
输出提示,否排序完成
进入下一趟排序
从最后一个
数开始比较结束
未排序好的数是否是都已经比较过,
否
输出箭头,提示正
在比较第几个数
前数是否大于后数,是前数和后数交换位置
否
输出这两个换
了位置的数
下两个个数比较
四 程序的调试与运行结果说明
(一) 调试运行环境:Microsoft Visual Studio 2010;windows 7 操作系统。
(二) 运行和结果说明:
1、 动画窗口大小可适应排序数字个数的变化,每次排序是数字随机生成。
2、 窗口画面有几个箭头“—>”表示正在进行第几趟排序,移动的箭头表示该箭头所
指的数和它下方的数进行比较,若下方的数小于箭头所指的数,这下方的数浮上箭
头所指位置,上方数下沉一个位置。
3、 排序完成后在窗口下方输出“OK”表示排序完成,这是窗口画面上正好有N-1个
箭头,表示进行了N-1趟排序。
4、 排序完成后,按任意键可退出程序。
五 课程设计总结
总体情况:本程序基本达到了课题要求,通过动画形式简单明了的反映冒泡排序的具体过程。
不足之处:所要排序的数由程序随机生成,为给用户提供输入,缺乏交互性。
进一步设想:增加输入功能,美化动画界面。
困难及解决途径:在编写本程序遇到是最大困难是不会windows程序设计,我通过上网找资料,查阅相干书籍,请教同学等方式学会了编写此程序所需的windows程序设计知识。
六
心得
信息技术培训心得 下载关于七一讲话心得体会关于国企改革心得体会关于使用希沃白板的心得体会国培计划培训心得体会
体会
通过完成本课题设计,我巩固了以前学过的C和,,,编程语法规则;进一步熟悉Microsoft Visual Studio 2010开发环境,提高程序调试能力;学会一些Windows 程序设计的知识;学会了使用Visio画类图和程序流程图。
在实验过程中,养成了良好的实验习惯,培养严格的科学的作风;学会通过各种途径学习解决困难所需知识。
在此感谢任课老师,感谢好友给我的帮助。
七 附录
全部代码及注释
#include
#define N 10
#define MAX 100
class Number{
int num,
x,
y;
public:
Number():x(0),y(0){
srand(GetTickCount());
num=rand()%MAX+1;
Sleep(50);//运算速度太快,要停下
}
void setN(int n){num=n;}
void setX(int xx){x=xx;}
void setY(int yy){y=yy;}
int getN(){return num;}
int getX(){return x;}
int getY(){return y;}
void print(HDC thdc); };
class Numbers{
Number n[N];
public:
void InitNum(HDC thdc);
void BubSort(HDC thdc); };
void Number::print(HDC thdc){
char temp[10];
itoa(num,temp,10);
TextOutA (thdc, x, y, " ", 6);//抹掉
TextOutA (thdc, x, y, temp, strlen(temp));
}
//初始要排序的数组并打印
void Numbers::InitNum(HDC thdc){
int x=20,
y=20,
d=20;//距离
char temp[10];
n[0].setX(x);
n[0].setY(y);
n[0].print(thdc);
for(int i=1; ii;j--){
TextOutA (thdc, n[j].getX()-20, n[j].getY(), " ", 3);
Sleep(400);
TextOutA (thdc, n[j-1].getX()-20, n[j-1].getY(), "->", 2);
if(n[j].getN()", 2);
}
LRESULT CALLBACK WndProc(HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam);
HDC hBgDC;
Numbers nn;
//入口,定义窗口属性
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow) {
WNDCLASSEX wndcls;
wndcls.cbClsExtra = NULL;
wndcls.cbSize = sizeof(wndcls);
wndcls.cbWndExtra = NULL;
wndcls.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndcls.hCursor = LoadCursor(NULL, IDC_ARROW);
wndcls.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndcls.hIconSm = NULL;
wndcls.hInstance = hInstance;
wndcls.lpfnWndProc = WndProc;
wndcls.lpszClassName = TEXT("Application");
wndcls.lpszMenuName = NULL;
wndcls.style = CS_HREDRAW | CS_VREDRAW;
//注册窗口
if (!RegisterClassEx(&wndcls)) {
MessageBox(NULL, TEXT("Register unseccessfully!"), TEXT("Error"), MB_OKCANCEL);
return 0;
}
//创建窗口
HWND hWnd = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW,
TEXT("Application"),
TEXT("graphic"),
WS_POPUP, //WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
//定义窗口句柄
HDC hDC ;
MoveWindow(hWnd, 100, 100, 70, 50+N*20, TRUE); //窗口位置xy,大小wh
ShowWindow(hWnd, nCmdShow);//显示窗口
UpdateWindow(hWnd);
MSG msg;
GetMessage(&msg, NULL, NULL, NULL);
while (msg.message!=WM_KEYDOWN) {
if( PeekMessage( &msg, NULL, 0,0 ,PM_REMOVE) )
{
hDC = GetDC(hWnd);
TextOutA (hDC, 18, 20+N*20, "OK",2);
ReleaseDC(hWnd, hDC);
}
}
TranslateMessage( &msg );
DispatchMessage( &msg );
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam) {
HDC hDC;
//消息处理
switch (message) {
case WM_CREATE:
hDC = GetDC(hWnd);
BitBlt(hDC, 0, 0, 100, 400, hBgDC, 0, 0, SRCCOPY);
ReleaseDC(hWnd, hDC);
return 0;
case WM_KEYDOWN://按下键盘消息,退出
PostQuitMessage(0);
return 0;
case WM_PAINT://贴图消息
hDC = GetDC(hWnd);
nn.InitNum(hDC);
nn.BubSort(hDC);
ReleaseDC(hWnd, hDC);
Sleep(500);
return 0;
case WM_DESTROY://销毁消息
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
}
参考文献
[1] 甘玲,刘达明,唐雁,解析C程序设计,北京,清华大学出版社,2007年3月。 [2] 甘玲,石岩,李盘林,解析C++面向对象程序设计,北京,清华大学出版社,2008年2月。