绘图程序 课程设计报告Word格式文档下载.docx
《绘图程序 课程设计报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《绘图程序 课程设计报告Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
![绘图程序 课程设计报告Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2022-11/26/03d97012-2480-4a3a-8e92-bb0e73c01c2e/03d97012-2480-4a3a-8e92-bb0e73c01c2e1.gif)
1.2工作任务分工
阶段名称
任务名称
任务描述
负责人
协助人
查找课题
通过上网,查询资料,参考课本等形式确定自己编写程序的难易程度以及可编写程度。
刘建
通过和其他同学交流,并参考可利用资料查询程序的部分功能,在自己读懂的基础上,进行改动与整合,变成自己的程序。
编写代码
通过代码编辑器编写代码,参考自己查找到的资料,并加入自己的想法,写出自己的一套程序。
程序的测试
把编写好的程序在编译器中编译并测试程序的各个功能,找出其中的BUG,并进行修改
程序的优化及程序设计报告的编写
在自己能力范围之内查看程序可优化项目,使之更加完美,并开始写课设报告
2需求分析
2.1概述
本软件主要用于计算机windows2000/XP以上版本的用户的使用,这次课程设计一般是实现绘图的功能。
程序除了能实现:
绘制直线、圆形、矩形等图形外,还能实现对圆形、矩形等图形的填充等功能;
程序还能实现清除界面所有图形、清除最近画的图等功能。
2.2用户分析
普通用户看待一个软件的好坏主要是程序的实用性,界面的简洁美观性,程序所占资源的大小,以及程序运行期间的人性化的设置,所以要想让用户满意就要做到以上几点。
其中,这几点最重要的就是程序的实用性。
绘图工具,对于生活中的普通人来说,只要能实现简单的绘图,填充功能就行了。
对于有特殊爱好的人,还要能实现自定义画笔宽度与颜色以及填充色。
本程序不是针对所有人开发的。
但能满足一般人的需求。
2.3约束条件
作为开发人员,我觉得最大的约束就是时间和能力问题。
在写程序时很可能会遇到其他事,就不得不中断,这样就要合理安排好自己的时间。
另外,在写程序时,可能有些功能依靠自己的能力不能完全实现,这样就必须自己查找问题,去解决这些问题。
关于客户对我的约束,就是他们的需求,以及他们对软件功能、界面等等的要求,这样就要求程序员去与客户交流,聆听他们的想法,去尽自己最大的努力尽可能的做出让客户满意的软件。
2.4功能需求
1、绘制直线、折线、圆形、矩形等功能。
2、绘制填充圆形、矩形等图形。
3、插入文本框。
4、自定义画笔宽度、颜色;
自定义填充色:
自定义字体大小,颜色;
自定义填充色。
5、撤销最后一步操作、撤销所有操作。
6、保存所绘制图形。
2.5用户界面需求
用户会从实用性出发,要求界面干净,简洁,使用,能一目了然。
不能太繁琐,太花哨。
用户能通过界面快速了解软件的功能。
3设计与实现
3.1概述
本课程设计将实现一个简单绘图工具。
这个绘图工具不仅实现了绘制简单图形的功能,还能实现绘制一些填充图形的功能,还实现了一些自定义的功能,如自定义画笔宽度、颜色、填充色等。
而且具有简洁大方的图文外观。
它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互信息,使用人员能快捷简单地进行操作。
对人们的生活有一定的帮助。
在课程设计中,系统开发平台为Windows2000XP,程序设计设计语言采用VisualC++,在程序设计中,采用了结构化与面向对象两种解决问题的方法。
3.2详细设计
3.1.1类的抽象及设计
1.CAboutDlg类:
派生于Cdialog的对话框类,由MFC单文档自动生成,连接菜单中的“帮助”选项,弹出简介。
2.CCircle类:
定义圆形(椭圆形)类。
定义了函数CCircle和两个虚拟函数Draw(CDC*pDC),Serialize(CArchive&
ar);
3.CCircleFill类:
定义填充圆形(椭圆形)类。
包括函数CCircleFill(intX1,intY1,intX2,intY2,COLORREFColor);
和一个虚拟函数Draw(CDC*pDC);
4.CText类:
定义文本类。
包括函数CText(intX1,intY1,intX2,intY2,COLORREFColor,LOGFONTlf,CStringstr);
和两个虚拟函数Draw(CDC*pDC);
Serialize(CArchive&
来实现。
5.CCurve类:
定义曲类.包括函数CCurve(intX1,intY1,intX2,intY2,COLORREFColor,intThickness);
和虚拟函数Draw(CDC*pDC);
6.CDrawApp类:
对画笔的实现颜色宽度样式的实现。
7.CDrawBase类:
定义图形基类。
包括两个虚拟函数Serialize(CArchive&
Draw(CDC*pDC){NULL;
}
8.CDrawDoc类:
定义CDrawDoc类
9.CDrawView类:
定义CDrawView类实现鼠标的图标及显示。
10.CIsoscelestriangle类:
定义等腰三角形类包括CIsoscelestriangle(intX1,intY1,intX2,intY2,intX3,intY3,COLORREFColor,intThickness);
11.CLine类:
定义直线类包括函数CLine(intX1,intY1,intX2,intY2,COLORREFColor,intThickness);
和两个虚拟函数Draw(CDC*pDC);
12.CMainFrame类:
实现地画框的构建。
13.CPaintToolbar类:
实现工具条的作用。
14.CPenWidth类:
实现划线的宽度。
15.CPolyline类:
定义折线类。
包括函数CPolyline(intX1,intY1,intX2,intY2,COLORREFColor,intThickness);
16.CRectangle类:
定义矩形类。
包括函数CRectangle(intX1,intY1,intX2,intY2,COLORREFColor,intThickness);
和两个虚拟函数Draw(CDC*pDC)Serialize(CArchive&
17.CRectFill类:
定义填充矩形类。
包括函数CRectFill(intX1,intY1,intX2,intY2,COLORREFColor);
和虚拟函数Draw(CDC*pDC)
18.CRectRound类:
定义圆角矩形类.包括函数CRectRound(intX1,intY1,intX2,intY2,COLORREFColor,intThickness);
19.CRectRoundFill类:
定义填充圆角矩形类包括函数CRectRoundFill(intX1,intY1,intX2,intY2,COLORREFColor);
虚拟函数Draw(CDC*pDC);
20.CSquare类:
定义正方形类。
包括函数CSquare(intX1,intY1,intX2,intY2,COLORREFColor,intThickness);
21.CText类:
22.CTriangle类:
定义三角形类。
包括CTriangle(intX1,intY1,intX2,intY2,intX3,intY3,COLORREFColor,intThickness);
虚拟函数Draw(CDC*pDC);
和Serialize(CArchive&
23.CTsFont类和CWord类自动实现。
3.1.2表结构设计(涉及到数据库的题目需要完成该部分内容)
无
3.3主要程序文件
主要类:
1.CDrawApp类:
对画笔的实现、颜色、宽度样式的实现。
2.CDrawView类:
3.CMainFrame类:
实现画框的构建。
4.CPaintToolbar类:
5.CPenWidth类:
类及其文件的对应关系
类名称基类类声明文件类实现文件
CPenWidthCDialogPenWidth.hPenWidth.cpp
CPaintToolbarCToolBarPaintToolbar.hPaintToolbar.cpp
CMainFrameCFrameWndMainFrm.hMainFrm.cpp
CDrawViewCScrollViewDrawView.hDrawView.cpp
CDrawAppCWinAppDraw.hDraw.cpp
3.4开发环境以部署环境要求
3.5主要源码
1
CTsFont:
:
CTsFont(CWnd*pParent/*=NULL*/)
:
CDialog(CTsFont:
IDD,pParent)
{
//{{AFX_DATA_INIT(CTsFont)
m_lfHeight=0;
m_lfWidth=0;
m_lfEscapement=0;
m_lfOrientation=0;
m_lfWeight=0;
m_crColor=0;
//}}AFX_DATA_INIT
voidCTsFont:
DoDataExchange(CDataExchange*pDX)
CDialog:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTsFont)
DDX_Text(pDX,IDC_EDIT1,m_lfHeight);
DDX_Text(pDX,IDC_EDIT2,m_lfWidth);
DDX_Text(pDX,IDC_EDIT3,m_lfEscapement);
DDX_Text(pDX,IDC_EDIT4,m_lfOrientation);
DDX_Text(pDX,IDC_EDIT5,m_lfWeight);
DDX_Text(pDX,IDC_EDIT6,m_crColor);
//}}AFX_DATA_MAP
BEGIN_MESSAGE_MAP(CTsFont,CDialog)
//{{AFX_MSG_MAP(CTsFont)
//NOTE:
theClassWizardwilladdmessagemapmacroshere
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CTsFontmessagehandlers
2//定义正方形类
classCSquare:
publicCDrawBase
protected:
DWORDm_Thickness;
//正方形的线宽
CSquare(){}//类的默认构造函数
DECLARE_SERIAL(CSquare)//序列化声明
public:
CSquare(intX1,intY1,intX2,intY2,COLORREFColor,intThickness);
virtualvoidDraw(CDC*pDC);
virtualvoidSerialize(CArchive&
};
2//定义填充矩形类(和矩形类的区别:
填充矩形类不具有线宽)
classCRectFill:
CRectFill(){}//类的默认构造函数
DECLARE_SERIAL(CRectFill)//序列化声明
CRectFill(intX1,intY1,intX2,intY2,COLORREFColor);
//定义圆角矩形类
classCRectRound:
publicCDracwBase
//圆角矩形的线宽
CRectRound(){}//类的默认构造函数
DECLARE_SERIAL(CRectRound)//序列化声明
CRectRound(intX1,intY1,intX2,intY2,COLORREFColor,intThickness);
//定义填充圆角矩形类
classCRectRoundFill:
CRectRoundFill(){}//类的默认构造函数
DECLARE_SERIAL(CRectRoundFill)//序列化声明
CRectRoundFill(intX1,intY1,intX2,intY2,COLORREFColor);
//定义圆形(椭圆形)类
classCCircle:
//圆的线宽
CCircle(){}//类的默认构造函数
DECLARE_SERIAL(CCircle)//序列化声明
CCircle(intX1,intY1,intX2,intY2,COLORREFColor,intThickness);
//定义填充圆形(椭圆形)类
classCCircleFill:
CCircleFill(){}//类的默认构造函数
DECLARE_SERIAL(CCircleFill)//序列化声明
CCircleFill(intX1,intY1,intX2,intY2,COLORREFColor);
//定义文本类
classCText:
LOGFONTm_Lf;
//绘制的文本的子体结构
CStringm_Str;
//存放绘制的文本
CText(){}//类的默认构造函数
DECLARE_SERIAL(CText)//序列化声明
CText(intX1,intY1,intX2,intY2,COLORREFColor,LOGFONTlf,CStringstr);
#endif//!
defined(AFX_DRAWGRAPHIC_H__A6887B21_FA3D_404C_B802_D09AB24282BB__INCLUDED_)
classCDrawApp:
publicCWinApp
COLORREFm_FillColor;
//填充色
COLORREFm_PenColor;
//画笔颜色
intm_CurrentPenThickness;
//画笔宽度
intm_CurrentLineStyle;
//画笔样式
UINTm_CurrentTool;
//当前绘图样式
CDrawApp();
4.1概述
主要测试绘制图形以及绘制填充图形。
4.2测试环境
测试环境如下:
测试系统:
WindowsXP。
测试工具:
VisualStudioC++6.0。
硬件:
普通个人PC机。
4.3测试计划
第一,在上面的测试环境下打开软件。
第二,显示主界面并逐一测试主界面上的功能。
第三,保存自己的设置和自己在测试时所绘制的图形。
第四,退出程序。
4.4测试项目及结果
1、首先运行程序,界面如下:
2、选择一个绘图功能如绘制矩形进行绘制、并插入文本:
3、重新设置画笔宽度、颜色进行绘制矩形:
(设置画笔颜色)
(设置画笔宽度)
(设置字体)
4、绘制填充图形,如矩形:
重新设置填充色绘制填充图形:
5、退出程序。
5、工作总结
5.1工作成果
在此课设中我最主要的工作是查阅资料,读懂读会别人的代码,然后再依据别人的代码,做成自己的程序,并使之完成一些基本的功能,听起来虽然简单,但做起来很难。
在这次课程设计的实习中,我感觉到有点吃力,因为平时对编程序这方面没有过多的关注,平时所学到的一点理论知识在实际应用中也很有限,实习过程中明显的准备不充分,使自己遇到了很多的难题。
一些基本功能自己还能实现,但是稍微复杂点自己就做不了,这时就要去看别人怎么做的,有时候甚至别人写好的代码都看不懂,还要去查很多相关的资料。
自己根据别人绘制矩形、填充矩形的代码写出了绘制填充圆形、绘制正方形、填充正方形等几项功能代码。
还有一些代码,实在别的程序里看到的,如撤销最后一步操作、撤销所有操作,经过修改我用到了画图程序中来。
还有字体、颜色的设置等也是参考别人自己修改写出来的。
最终写出了这个功能还算完善的程序。
5.2过程分析
通过这次课程设计实践我真的是学到了不少东西!
这次课设使我了解我编程思想和编程技巧,也认识了软件生命周期的各个环境,包括构思、设计、编写、调试、发布、文档化、维护和修订。
编程的风格也很重要。
MFC程序设计是一门重要的专业基础课程,是数据结构,操作系统,数据库原理和软件工程等后继课程的基础。
适用于大型系统软件和应用软件的开发。
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.经过这两个星期的上机实践学习,使我对MFC有了更进一步的认识和了解。
在不长的时间里我明白了,不仅仅是要重视,而且要通过不断的上机操作才能更好地学习这门语言。
在课程设计这两个星期里,我认识到我有很多不足得地方。
首先是自己在指法上还不行,经常按错字母,但通过学习和练习,已经有了很大的提高;
再有对MFC的一些标准库函数不太了解,对函数调用的正确使用不够熟悉,还有对MFC中经常出现的错误也不了解。
通过设计实践,使我在这几个方面的认识有所提高。
经过设计的各个环节,从中学到了很多,锻炼了自己系统的设计的能力,从系统的需求到系统的功能,到系统的测试,到系统的发布,可以掌握到一个完全的过程,这样对我们以后在工作中或学习中得到很好的锻炼,为用VC++编辑软件奠定基础。
当然,本报告所采取的解决问题的方法并不是非常完善的,在今后的学习、工作中,将继续研究并改进。
5.3经验教训及其分析
1、对于MFC程序模块的不熟悉是课程设计中所遇到的大的问题。
MFC中有基于基本对话框,单文档,多重文档等模块,对一些模块的偏向导致对于所有的模块都是似懂非懂,并且在编写程序的时候相互混淆导致编写错误。
2、程序基础的不扎实是课程设计不能完美,高效的完成的最大影响。
以前对程序只是看在眼里,动手的时间并不多,这次程序设计对自己的程序设计实践能力发出了巨大的挑战,通过对程序的设计发现在自己以前的基础功不扎实,程序只是看在眼里,并未真正实践,导致许多代码都打错,大小写不分。
3、自己对MFC程序中的各种函数以及各个函数之间的相互调用还不能很好的掌握。
在MFC中提供许多编程接口,而各个接口之间又是通过函数相互连接,对各个编程接口的陌生是我此次编程的第一大障碍,不知道程序接口的函数以及参数值,只能查询资料慢慢理解。