visual c++课程设计
- 格式:docx
- 大小:549.55 KB
- 文档页数:19
Visual C++课程设计
设计题目:便捷式计算器和画图工具集成应用
专 业计算机科学与技术
班 级 1301
学 生汪志峰
学 号 2013115010140
指导教师胡多勋
湖北师范大学
2016 年二学期 一.课程设计目的
1.通过课程设计,把上课学的MFC的对话框,常用控件,菜单工具栏都用在一个项目中,以此温习一遍所学知识,加强自己对这些控件的理解和掌握。也学会该如何进行平面绘画。
2.使自己更深入的认识到MFC框架的内部原理,熟悉从知识到项目的开发的流程,更有利于自己理解C++的一些知识,为自己以后更大编程项目打下基础。
3.了解C++面向对象的设计的方法和技巧,有效地,深刻地理解课程内容,体会理论,方法和设计原则:培养自己分析实际问题和解决问题的能力。
二.课程设计内容与实现的功能
1.课程设计的内容
1.工具栏按钮,选择绘画工具,画不同的平面图形(圆弧,三角形,矩形,直线,圆,椭圆,和随意的曲线等)。
2.可通过颜色对话框选择不同的颜色,使所画的图形具有不同颜色。
3.可以保存我们画出的图形,并能打开图形
4.简单计算器进行算术运算。
2、实现的功能
①画直线、三角形,圆弧、矩形、圆角矩形、圆、椭圆等二维平面图形,并且能够实现随手画。
②所画图形具有不同颜色。
③可以选用画笔和画刷两种不同工具进行绘画。
④可以通过选用菜单进行功能选择。
⑤建立自己的工具栏,可以通过它选择不同图形进行绘画。
⑥实现所画文档的保存和打开功能。
⑦实现简单计算器进行算术运算。
三、系统分析与设计:
1.系统分析:
在整个项目完成的过程中,MFC向导起着非常重要的作用,用它能加快开发效率。每个程序的入口都是WinMain函数,而这个主函数被MFC向导分装了起来,所以在设计过程中函数的执行顺序让人很难看懂,系统的这种向导大大减少了我们的工作量,就是给我们提供一个空壳,让我们往里面添加代码。另外这种可视化的程序的消息响应机制就是事件驱动型程序,是根据用户接受的消息而做出的相应的回应。
系统的逻辑结构:在我这个绘图程序中系统要求使用不同绘画工具,绘画直线、三角形,圆弧、矩形、圆角矩形、圆、椭圆等不同二维平面图形,可以通过菜单选择颜色使所画图形具有不同颜色,并且可以实现图形的保存和打开,进行加减乘除运算。
2、系统设计:
2.1 模块设计:
本程序共有九个模块:画直线、三角形、矩形、圆角矩形、弧、圆、椭圆和随手画;九个模块是相互独立、互不影响即:它们之间的关系为并列关系,不存在相互调用的关系。
2.2 数据结构说明
在我这个绘图程序中没有用到抽象的类型,简单类型如:
UINT m_nDrawStyoe是用来选择图形类型的;
int m_nDrawStype 是用来选择线型的;
CobArray m_obArray 是用来存储对象的;
COLORREF m_nclr 用来保存颜色的。
2.3算法结构流程图:
开始
选择图形
直线 矩形 圆角矩形 弧 圆 椭圆 随手画
重绘
重绘
保存?
保存
结束 简单算术运算器
四、系统测试与调试分析:
1.系统测试:
测试方法:黑盒。
测试技术:功能测试
测试数据:选择不同的图形不同的画笔和不同的颜色进行绘画
测试报告:测试结果良好,在win7和win10系统下都能正常运行。
测试编写的拼图程序功能正常且能正确运行。
测试名称 二维平面常用图形的设计
测试目的 验证程序在系统下是否运行正常
测试技术 功能测试
测试方法 黑盒测试法
测试内容 测试绘图工具,是否能选择绘画图形,是否可以选画笔,是否能选择颜色
测试步骤 在菜单和工具栏中选择不同图形进行绘画 在选择图形后通过对话框选择是否使用画刷 在颜色菜单栏选择颜色
测试数据 选择不同的图形 选择画笔 选择颜色
预期结果 正常运行 正常运行 正常运行
测试结果 与预期相符 与预期相符 与预期相符
计算器测试数据 与预期相符 与预期相符 与预期相符
测试数据截图:
程序实现了八种基本图形的绘画,如下:
使用画刷填充图形
程序拓展功能:实现随手画
所画图形的保存
保存后的效果
程序的打开
打开后的效果,即之前做的效果。
简单计算器的使用
五、用户使用方法
1. 使用平台:VC6
2. 已安装VC6的用户,可以直接将程序的项目文件拷贝到自己电脑上,然后打开项目文件/Debug/Draw_321.exe即可使用。
3. 打开的运行界面如下图:
然后可以使用菜单或者工具栏进行选择,命令进行绘画:
选择颜色,绘制图形
画完之后保存
计算器的使用
六、程序清单
关键代码:
/*在OnLButtionUp中实现基本图形的绘画*/
void CDraw_321View::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
CPen pen(PS_SOLID,m_nLineStype,m_nclr);//创建画笔
dc.SelectObject (&pen);//选择画笔
CBrush
*pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));//透明化刷的创建
dc.SelectObject (pBrush);
switch(m_nDrawStype)
{
case1://直线
dc.MoveTo (m_nLastPoint);
dc.LineTo (point);
break;
case2://矩形
dc.Rectangle (CRect(m_nLastPoint,point));
if(m_nFillColor==1)//是否填充颜色
{
CBrush pBrush(m_nclr);//创建画刷
CRgn rgn;
dc.FillSolidRect(CRect(m_nLastPoint,point),m_nclr);
dc.FillRgn(&rgn,&pBrush);
//m_nFillColor=10;
} break;
case3://圆角矩形
dc.RoundRect(CRect(point,m_nLastPoint),CPoint(20,30));
break;
case4://弧
dc.Arc
(m_nLastPoint.x,m_nLastPoint.y,point.x ,point.y,point.x ,(m_nLastPoint.y +point.y)/2,(m_nLastPoint.x +point.x)/2,m_nLastPoint.y );
break;
case8://圆
dc.Ellipse(m_nLastPoint.x,m_nLastPoint.y,m_nLastPoint.x+point.y-m_nLastPoint.y ,point.y);
if(m_nFillColor==2)
{
CBrush pBrush(m_nclr);
CRgn rgn;
rgn.CreateEllipticRgn(m_nLastPoint.x,m_nLastPoint.y,m_nLastPoint.x+point.y-m_nLastPoint.y ,point.y );
dc.FillRgn(&rgn,&pBrush);
}
break;
case6://椭圆
dc.Ellipse (CRect(m_nLastPoint,point));
if(m_nFillColor==3)
{
CBrush pBrush(m_nclr);
CRgn rgn;
rgn.CreateEllipticRgn(m_nLastPoint.x,m_nLastPoint.y,point.x,point.y);
dc.FillRgn(&rgn,&pBrush);
}
break;
case7://随手画
dc.MoveTo(m_nLastPoint);
dc.LineTo(point);
break;
}
//创建指向Graph的指针
Graph *pDraw=new Graph( m_nLastPoint, point, m_nDrawStype,
m_nLineStype, m_nclr,m_nFillColor);
m_obArray.Add (pDraw);