C++面向对象课程设计报告之二维平面设计画图.doc
《C++面向对象课程设计报告之二维平面设计画图.doc》由会员分享,可在线阅读,更多相关《C++面向对象课程设计报告之二维平面设计画图.doc(24页珍藏版)》请在沃文网上搜索。
1、C+面向对象课程设计报告院(系): 计算机工程学院 专业: 软件工程 学生姓名: 班级: 学号 题目: 二维平面画图 起迄日期: 2011.7.4至2011.7.15 设计地点: 指 导 教 师: 完成日期: 2011 年 7月 15日目录一、课程设计目的1二、课程设计内容与实现的功能2三、系统分析与设计21、系统分析22、系统设计:22.1、系统设计方案2概要设计2详细设计2基本信息的设计3点样式的设计3菜单的设计3橡皮筋功能的实现3窗口的重绘、图形的打开和保存42.2、数据结构说明:42.3、算法流程图:4四、系统测试与调试分析61、系统测试62、调试分析:7五、用户手册8六、程序清单13
2、七、体会与自我评价22八、参考文献23九、课程设计评价23一、课程设计目的进行C+面向对象程序设计课程设计主要是在学习C+这门面向对象语言的基础上,在完成C+面向对象程序设计各部分实验的基础上,通过自学MFC,掌握一种可视化编程的方法,并通过实践加深对可视化编程与C+面向对象程序设计语言特点的认识与理解。同时,可以提高运用C+编程语言解决实际问题的能力;锻炼实际的编程能力、创新能力及团队组织、协作开发软件的能力;还能提高调查研究、查阅技术文献、资料以及编写软件设计文档的能力。二、课程设计内容与实现的功能二维平面图形设计:可通过菜单或者工具栏按钮,选择绘画工具,画不同的平面图形(直线、圆弧、矩形
3、、圆角矩形、圆、椭圆等);可通过颜色对话框选择不同的颜色,使所画的图形具有不同颜色;可保存文档所画的图形,并能打开该图形。三、系统分析与设计1、系统分析二维平面图形设计主要是设计出能进行常见的图形的绘制(如直线、圆弧、矩形、圆角矩形、圆、椭圆等);通过用户的需求或者选择进行绘制用户想要的图形,绘制的图形的种类可以放置在菜单栏或工具栏,当然用户的所有图形都是在客户区内进行的,而绘制的过程一般都是通过单击,鼠标的拖曳来完成的,而每一种绘制的图形都是都要与鼠标的单击、拖曳相关联,即每一种绘制的图都是鼠标单击、拖曳的一个分支,每个菜单就是这些分支的标记。在系统分析阶段,系统的逻辑结构应从以下三方面全面
4、反映系统的功能与性能: (1)信息系统要处理的信息主要有:点、点的样式、线宽、线型、线的颜色、绘制的图形的种类。 每一种图形的绘制都是同点来完成的,一个或者是多个,比如直线两点就确定一条直线,矩形知道一个角点和长宽能确定,圆知道原点和半径即可每一种图形的绘制都有线的特征,即线的颜色、宽度、类型(是实线、点线还是虚线或是其他,因为每一次鼠标的单击或拖曳只能绘制一种图形,所有要有区别绘图种类的标记。(2)行为鼠标的单击、拖曳通过用户所选的绘制的不同图形绘、线的特性绘制不同的图形。(3)表示系统的对外接口主要有能绘制的图形的种类和对绘制图形前的对图形的基本信息的设置。图形的种类有“直线”、“圆弧”、
5、“矩形”、“圆角矩形”、“圆”、“椭圆”等,设置有点样式的设置点样式,对线的设置有“线型”、“线宽”、“颜色”2、系统设计:2.1、系统设计方案概要设计因为图形的绘制都是通过图形的基本信息,在通过调用相关的函数数所完成的,有以图形的打开和保存都与图形的基本信息有关,也就是说图形的打开就是通过获得相应的图形的基本信息,在调用图形的绘制的方法就能准确将图形重新显示出来,图形的保存就是将图形的基本信息保存到指定的文件中即可,所以,处理好图形的基本信息,就能够很好的把系统设计好。详细设计基本信息的设计正如前面所考虑的,图形的基本信息既然那么重要,说先就要设计好图形基本信息的存储,经过自己精心的设计,我
6、考虑了数据能够处理起来比较方便,所以,我考虑到了C+的继承性和多态性,就是说不通的对象调用相同的方法,产生不通的响应,这正好和我们图形的绘制过程完全一致,当然这个是在窗口重绘和打开图形对图形的绘制的时候,在图形的绘制过程,当让是有对鼠标按下,移动和鼠标弹起的消息的响应函数来响应,首先,设计一个基本信息数据的基类BaseData,其中有三个共有的数据成员color、linest、linew分别表示线条的颜色、线型、线宽,因为这是绘制每种图形的公共部分;基类还有一个Draw()方法,其类型是虚函数,用以实现多态。接下来的每种图形都是一个类且都从基类派生出来的,点类Dot,数据成员dotst,pt分
7、别表示点样式和点的位置,Dot类也有自己的Draw()方法,其作用按照点样式绘制一个点;直线类Line也有自己的数据成员stpt,endpt,分别表示直线的起点和终点,Line类也有自己的Draw(0方法,作用是绘制一条直线;矩形类Retangle1,其数据成员是确定其矩形区域的两个点,也设置成为stpt,endpt,其自己的Draw()方法是绘制一个矩形,椭圆类Ellipse1,它也有自己的数据成员,即能确定一个椭圆的两个点,也设置成为stpt,endpt,其Draw()方法是绘制一个椭圆如果我们要添加绘制其它图形的话,我们还可以添加更多的图形类。点样式的设计接下来是设计点样式,我们知道,但
8、我们画一个点的时候,我们为了突出其位置,我们需要不同样式的点,如圆点、十字点,一个小圆圈和圆心。当然,我们在话一个圆点的时候,我们一般都要画大一些,这几要求我们在画点的时候,应该画该点位置和其相邻位置的点,十字点其实实现很简单,就是在水平和竖直四个方向画四条小直线,圈点的话就是点和圆的组合。菜单的设计接下来的说就是菜单了,菜单我们可以分为绘图和设置这两个选项,绘图菜单里面有该系统能绘制的图形的选项,而设置选项里面主要有绘图的基本信息的设置,有点样式的的设置,线颜色的设置,线型,线宽的设置,后两者的设置可以用对话框实现,即CColorDialog和普通的对话框,在关联一些变量用来保存所设置的值。
9、橡皮筋功能的实现当我们在绘制图形的时候,我们移动鼠标还没放的时候,往往希望能看到绘制的图形的效果,这就橡皮筋功能,要实现橡皮筋功能,我选择的是重画三次图形的办法,就是说每个鼠标移动的点的轨迹作为终点(除终点外)都以原点作为起点绘制同样的图形,其原理是采用画笔与背景异或的模式画图(负负得正)。有人会疑惑,因为前面的的所有点都画了两次,二只有终点画一次,照此应该达到目的了。确实能够达到目的,但是在这样的模式下画的图形在线条相交得时候是不是也像是画两次的情形呢,这样交点处就变成了看不见了。为了解决这个问题,我的办法是进行第三次画图,起点和终点的画图,采用的是正常的模式画图。这样交点的地方就不会看不见
10、了。窗口的重绘、图形的打开和保存图形的打开和保存的关键是把图形的基本信息读取和保存,用MFC里面的CPtrArray数组进行保存,把包存储图形信息的个种对象的指针保存CPtrArray的对象中,然后在把CPtrArray的对象中的数据输出到指定的文件中,打开则是从保存相关数据的文件读入数据,放入CPtrArray的对象中,然后再用个for循环,调用各自的图形绘制的Draw()方法将图形一个个的绘制出来。窗口的重绘和图形打开类似,只不过图形的信息已经存储在CPtrArray的对象中,不用再从文件中读取然后再进行绘制。2.2、数据结构说明:本系统用到的数据结构有数组用来存储图形的基本信息数据字符串
11、一些控件相关的变量,用来存储用户选择的基本信息。2.3、算法流程图:因为本人的水平有限,本程序没有什么算法流程图类图(下面类图是有VS2010生成的类图,由于时间关系(还要考试),我没有按照要求画Visio图)四、系统测试与调试分析1、系统测试测试说明测试名称二维平面画图测试目的测试系统的功能测试技术单元测试、功能测试测试方法黑盒测试法测试用例测试内容绘制系统所实现的图形测试步骤选择不同的图形,设置不同的图形基本信息观察所绘制的图形看看是否达到所预期所设计的效果出现错误,查找错误,改正错误,再次测试测试数据用户的各种图形绘制预期结果实现绘图功能部分功能没有实现没有实现绘图功能测试结果与预期相符
12、与预期不相符与预期不相符2、调试分析:状态栏显示时间的调试,出现的错误,没有按照预期在状态栏的相应地方显示时间,当拖动窗口的时候,显示时间,之后有不显示。原因:没有进行状态栏的刷新,由于使用了CStatusBar 的成员函数SetPaneText的时候必须添加UI update handler,MSDN的说明:After you call SetPaneText, you must add a UI update handler to display the new text in the status bar.Example/Sets and displays text for pane i
13、ndex 3 and id ID_INDICATOR_SCRL m_wndStatusBar.SetPaneText(3, _T(My New Status Bar Text), TRUE);/UI handler in the message map updates the status bar text: ON_UPDATE_COMMAND_UI(ID_INDICATOR_SCRL, &CMainFrame:OnUpdatePane)void CMainFrame:OnUpdatePane(CCmdUI* pCmdUI) pCmdUI-Enable(); 在实现橡皮筋的功能时,开始时不知道
14、怎么弄,到后来在网上看到用求反,画两次的方法来实现,我就试试,对函数CDC:SetROP2调用,为了更加的了解这个函数,我把其中的每一中nDrawMode都试了一下,随后的图形绘制的过程中,我有发现但线条相交的地方都没有线条。解决用正常的模式把最后确定的线条再画一次,也就是前面所讲的三次画线实现橡皮筋功能。在编程过程中,常常因为某个对象是局部变量而我们所用的这个变量所保存的信息在其他地方还要用到,当函数的调用完即对象的生面周期的时候就会析构,调试的时候系统就会发出警告程序终止。所以,在MFC的编程当中,变量的生命周期很重要,充分的把握变量的生命周期,我们的程序将少出现debug五、用户手册1、
15、使用xp windows 平台2、不需要安装3、使用说明:双击应用程序出现下面的启动画面(两秒钟):之后出现画图的窗口: 单击“绘图”,选择想要绘制的图形,截图如下: 选择不同的图形绘制:设置不同的点样式进行绘图:设置不同的颜色,线型,线宽进行绘图:六、程序清单存储各种图形的类的Draw方法void Dot:Draw(CDC *dc) /绘制点的方法CPen pen(linest,linew,color);dc-SelectObject(pen);switch(dotst)case 1:/绘制点点样式的点dc-SetPixel(pt.x+1,pt.y,color);dc-SetPixel(pt
16、.x-1,pt.y,color);dc-SetPixel(pt.x-1,pt.y-1,color);dc-SetPixel(pt.x,pt.y+1,color);dc-SetPixel(pt.x-1,pt.y+1,color);dc-SetPixel(pt.x,pt.y-1,color);dc-SetPixel(pt.x+1,pt.y-1,color);dc-SetPixel(pt.x,pt.y,color);dc-SetPixel(pt.x+1,pt.y+1,color);break;case 2:/绘制十字点样式的点dc-MoveTo(pt.x-5,pt.y);dc-LineTo(pt.x
17、+5,pt.y);dc-MoveTo(pt.x,pt.y-5);dc-LineTo(pt.x,pt.y+5);break;case 3:/绘制圈点dc-SetPixel(pt,color);dc-SelectStockObject(NULL_BRUSH);dc-SelectObject(pen);dc-Ellipse(pt.x-5,pt.y-5,pt.x+5,pt.y+5);dc-SetPixel(pt,color);break;void Line:Draw(CDC *dc) /绘制直线的方法CPen pen(linest,linew,color);dc-SelectObject(pen);d
18、c-MoveTo(stpt);dc-LineTo(endpt);void Retangle1:Draw(CDC *dc)/绘矩形的方法CPen pen(linest,linew,color);dc-SelectObject(pen);dc-SelectStockObject(NULL_BRUSH);dc-Rectangle(CRect(stpt,endpt);void Ellipse1:Draw(CDC *dc)/绘制椭圆的方法CPen pen(linest,linew,color);dc-SelectObject(pen);dc-Ellipse(CRect(stpt,endpt);int C
19、MainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct)if (CFrameWnd:OnCreate(lpCreateStruct) = -1)return -1;if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) |!m_wndToolBar.LoadToolBar(IDR_MAINFRAME)TRACE0(Faile
20、d to create toolbarn);return -1; / fail to createif (!m_wndStatusBar.Create(this) |!m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)TRACE0(Failed to create status barn);return -1; / fail to create/ TODO: Delete these three lines if you dont want the toolbar to/ be dockablem_w
21、ndToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockControlBar(&m_wndToolBar);CSplashWnd:ShowSplashScreen(this);/加载自己的图标位图m_hicons0=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1);m_hicons1=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON2);m_hicons2=LoadIcon
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 面向 对象 课程设计 报告 二维 平面设计 画图
