C++面向对象课程设计报告院(系):计算机工程学院专业:软件工程学生姓名:班级:学号题目:二维平面画图起迄日期:2011.7.4至2011.7.15设计地点:指导教师:完成日期:2011年7月15日目录一、课程设计目的........................................................................................................11二、课程设计内容与实现的功能................................................................................2三、系统分析与设计....................................................................................................21、系统分析...........................................................................................................22、系统设计:.......................................................................................................22.1、系统设计方案................................................................................................2概要设计.................................................................................................................2详细设计.................................................................................................................3基本信息的设计.....................................................................................................3点样式的设计.........................................................................................................3菜单的设计.............................................................................................................3橡皮筋功能的实现.................................................................................................3窗口的重绘、图形的打开和保存.........................................................................42.2、数据结构说明:............................................................................................42.3、算法流程图:................................................................................................4四、系统测试与调试分析............................................................................................61、系统测试...........................................................................................................62、调试分析:.......................................................................................................7五、用户手册................................................................................................................8六、程序清单..............................................................................................................13七、体会与自我评价..................................................................................................22八、参考文献..............................................................................................................23九、课程设计评价......................................................................................................23一、课程设计目的进行C++面向对象程序设计课程设计主要是在学习C++这门面向对象语言的基础上,在完成2C++面向对象程序设计各部分实验的基础上,通过自学MFC,掌握一种可视化编程的方法,并通过实践加深对可视化编程与C++面向对象程序设计语言特点的认识与理解。同时,可以提高运用C++编程语言解决实际问题的能力;锻炼实际的编程能力、创新能力及团队组织、协作开发软件的能力;还能提高调查研究、查阅技术文献、资料以及编写软件设计文档的能力。二、课程设计内容与实现的功能二维平面图形设计:可通过菜单或者工具栏按钮,选择绘画工具,画不同的平面图形(直线、圆弧、矩形、圆角矩形、圆、椭圆等);可通过颜色对话框选择不同的颜色,使所画的图形具有不同颜色;可保存文档所画的图形,并能打开该图形。三、系统分析与设计1、系统分析二维平面图形设计主要是设计出能进行常见的图形的绘制(如直线、圆弧、矩形、圆角矩形、圆、椭圆等);通过用户的需求或者选择进行绘制用户想要的图形,绘制的图形的种类可以放置在菜单栏或工具栏,当然用户的所有图形都是在客户区内进行的,而绘制的过程一般都是通过单击,鼠标的拖曳来完成的,而每一种绘制的图形都是都要与鼠标的单击、拖曳相关联,即每一种绘制的图都是鼠标单击、拖曳的一个分支,每个菜单就是这些分支的标记。在系统分析阶段,系统的逻辑结构应从以下三方面全面反映系统的功能与性能:(1)信息——系统要处理的信息主要有:点、点的样式、线宽、线型、线的颜色、绘制的图形的种类。每一种图形的绘制都是同点来完成的,一个或者是多个,比如直线——两点就确定一条直线,矩形——知道一个角点和长宽能确定,圆——知道原点和半径即可……每一种图形的绘制都有线的特征,即线的颜色、宽度、类型(是实线、点线还是虚线或是其他,因为每一次鼠标的单击或拖曳只能绘制一种图形,所有要有区别绘图种类的标记。(2)行为——鼠标的单击、拖曳通过用户所选的绘制的不同图形绘、线的特性绘制不同的图形。(3)表示——系统的对外接口主要有能绘制的图形的种类和对绘制图形前的对图形的基本信息的设置。图形的种类有“直线”、“圆弧”、“矩形”、“圆角矩形”、“圆”、“椭圆”等,设置有点样式的设置——点样式,对线的设置有“线型”、“线宽”、“颜色”2、系统设计:2.1、系统设计方案概要设计因为图形的绘制都是通过图形的基本信息,在通过调用相关的函数数所完成的,有以图形的打开和保存都与图形的基本信息有关,也就是说图形的打开就是通过获得相应的图形的基本3信息,在调用图形的绘制的方法就能准确将图形重新显示出来,图形的保存就是将图形的基本信息保存到指定的文件中即可,所以,处理好图形的基本信息,就能够很好的把系统设计好。详细设计基本信息的设计正如前面所考虑的,图形的基本信息既然那么重要,说先就要设计好图形基本信息的存储,经过自己精心的设计,我考虑了数据能够处理起来比较方便,所以,我考虑到了C++的继承性和多态性,就是说不通的对象调用相同的方法,产生不通的响应,这正好和我们图形的绘制过程完全一致,当然这个是在窗口重绘和打开图形对图形的绘制的时候,在图形的绘制过程,当让是有对鼠标按下,移动和鼠标弹起的消息的响应函数来响应,首先,设计一个基本信息数据的基类BaseData,其中有三个共有的数据成员color、linest、linew分别表示线条的颜色、线型、线宽,因为这是绘制每种图形的公共部分;基类还有一个Draw()方法,其类型是虚函数,用以实现多态。接下来的每种图形都是一个类且都从基类派生出来的,点类Dot,数据成员dotst,pt分别表示点样式和点的位置,Dot类也有自己的Draw()方法,其作用按照点样式绘制一个点;直线类Line也有自己的数据成员stpt,endpt,分别表示直线的起点和终点,Line类也有自己的Draw(0方法,作用是绘制一条直线;矩形类Retangle1,其数据成员是确定其矩形区域的两个点,也设置成为stpt,endpt,其自己的Draw()方法是绘制一个矩形,椭圆类Ellipse1,它也有自己的数据成员,即能确定一个椭圆的两个点,也设置成为stpt,endpt,其Draw()方法是绘制一个椭圆……如果我们要添加绘制其它图形的话,我们还可以添加更多的图形类。点样式的设计接下来是设计点样式,我们知道,但我们画一个点的时候,我们为了突出其位置,我们需要不同样式的点,如圆点、十字点,一个小圆圈和圆心。当然,我们在话一个圆点的时候,我们一般都要画大一些,这几要求我们在画点的时候,应该画该点位置和其相邻位置的点,十字点其实实现很简单,就是在水平和竖直四个方向画四条小直线,圈点的话就是点和圆的组合。菜单的设计接下来的说就是菜单了,菜单我们可以分为绘图和设置这两个选项,绘图菜单里面有该系统能绘制的图形的选项,而设置选项里面主要有绘图的基本信息的设置,有点样式的的设置,线颜色的设置,线型,线宽的设置,后两者的设置可以用对话框实现,即CColorDialog和普通的对话框,在关联一些变量用来保存所设置的值。橡皮筋功能的实现4当我们在绘制图形的时候,我们移动鼠标还没放的时候,往往希望能看到绘制的图形的效果,这就橡皮筋功能,要实现橡皮筋功能,我选择的是重画三次图形的办法,就是说每个鼠标移动的点的轨迹作为终点(除终点外)都以原点作为起点绘制同样的图形,其原理是采用画笔与背景异或的模式画图(负负得正)。有人会疑惑,因为前面的的所有点都画了两次,二只有终点画一次,照此应该达到目的了。确实能够达到目的,但是在这样的模式下画的图形在线条相交得时候是不是也像是画两次的情形呢,这样交点处就变成了看不见了。为了解决这个问题,我的办法是进行第三次画图,起点和终