c++程序的设计实践报告简单计算器模版.docx
- 文档编号:3336614
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:33
- 大小:399.06KB
c++程序的设计实践报告简单计算器模版.docx
《c++程序的设计实践报告简单计算器模版.docx》由会员分享,可在线阅读,更多相关《c++程序的设计实践报告简单计算器模版.docx(33页珍藏版)》请在冰豆网上搜索。
c++程序的设计实践报告简单计算器模版
程序设计实践报告
题目名称:
系名称:
专业班级:
学生:
2016年10月
摘要2
1引言2
1.1课题背景2
1.2课程设计目的2
2开发工具的介绍3
2.1关于VisualC++3
2.2可行性分析4
2.3需求分析4
3功能说明4
4系统的实现5
4.1窗体设计5
4.2编辑资源6
4.3实现高级按钮控件类8
4.4实现高级编辑控件类12
4.5对话框界面设计15
4.6数值计算功能的实现20
5程序结果的演示21
5.1测试的研究与选择21
5.2测试环境21
5.3实例测试结果22
结束语23
参考文献23
用VC++制作多功能计算器
摘要本课程设计将实现一个简单计算器。
其类似于Windows附件中自带的计算器。
这个计算器不仅实现了简单的四则运算功能,还实现了高级的科学计算功能,而且具有简洁大方的图文外观。
它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互信息和较好的健壮性使用人员能快捷简单地进行操作。
即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。
在课程设计中,系统开发平台为Windows2000XP,程序设计设计语言采用VisualC++,在程序设计中,采用了结构化与面向对象两种解决问题的方法。
关键词程序设计;计算器;MFC;按钮控件
1引言
本课程设计主要在运算过程中,如果通过计算器来完成,就会减少计算量,该程序即可以在简单计算器键面下进行简单运算,也可以在科学计算器键面下进行高级的科学计算。
并且可以分别计算弧度、角度的三角函数的计算等较为复杂的运算。
1.1课题背景
计算器是日常生活中十分便捷有效的工具,能实现加、减、乘、除、开方、求倒数等简单运算的工具。
要实现计算功能,可以用VC++的知识编写程序来解决此问题。
该计算器大大的降低了数字计算的难度及提高了计算的准确度和精确度。
该计算器使用非常简单和方便,对广大中小学生的学习有巨大帮助作用,也对在职人员的工作有点帮助作用。
1.2课程设计目的
在程序设计中,通过设计、编制、调试一个模拟计算器的程序,加深对语法及语义分析原理的理解,并实现对命令语句的灵活应用。
在程序设计中,可以用两种方法解决问题:
一是传统的结构化程序设计方法,二是更先进的面向对象程序设计方法。
由于多个函数均需要访问某些数据,这些数据常被设计为全局变量。
而在面向对象程序设计中关键是如何将问题域中的实体(即日常所见的概念)抽取出来,作为C++程序中的类,而属性与行为作为类的两类要素通常是必不可少的,甚至还应考虑类必须满足的约束。
2开发工具的介绍
2.1关于VisualC++
VisualC++6.0是Microsoft公司在1998年推出的基于Windows9X和WindowsNT的优秀集成开发环境。
该环境为用户提供了良好的可视化编程环境,程序员可以里利用该开发环境轻松地访问C++源代码编辑器,资源编辑器和使用部调试器,并且可以创建项目文件。
VisualC++6.0不仅包括编译器,而且它还包括许多有用组件,通过这些组件的协同工作,可以在VisualC++6.0集成环境中轻松地完成创建源文件,编辑资源,以及对程序的编译,连接和调试等各项工作。
VC++6.0是Windows95/98、XP或WindowsNT下的一个应用程序,本身对软硬件没有特殊要求。
就是说它对环境的要求与Windows95/98、WindowsNT要一致的。
硬件要求:
一般在586以上的处理器、16MB以上存、100MB以上的硬盘。
软件要求:
Windows95/98或WindowsNT3.51以上版本。
VC++6.0系统可以在一CD盘上,也可以在“VisualStudio(VisualC++、VisualFoxpro)”等产品的第一CD盘上。
一般都有一个VC的自动安装程序,也可以执行VC6目录下的setup.exe,在安装包的提示下进行,对初学者可采用“典型安装”方式。
在安装好VC6.0系统后,有时根据需要添加或删除某些部件,可插入CD盘重新执行setup.exe安装程序,安装程序会检测当前系统安装VC6的足件,用户单击“添加/删除”按钮后,在“安装维护”对话框中选定要添加的部件或撤消选定要删除的部件。
与一般的应用软件一样,有以下两种启动方式:
(1)通过“开始”按钮,选择“程序”菜单,然后打开“MicrosoftVisualstudio6.0中文版”子菜单中的“MicrosoftVisualC++6.0中文版”程序。
(2)用户也可以使用命令行启动VC。
单击“开始”按钮后选择“运行”命令,在“运行”对话框中输入c:
\ProgramFiles\MicrosoftVisualStudio\VC98\VC6.exe(按默认盘符和路径安装)即可。
2.2可行性分析
本设计是简单计算器。
日常计算机使用中,常常涉及到一些有关计算的问题,一个小型的计算器软件变得非常有用,该校型计算器需要空间资源较少,对电脑其他程序的应用影响较小。
它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互信息和较好的健壮性;醒目美观的软件封面。
使用人员能快捷简单地进行操作。
即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。
2.3需求分析
本软件主要用于计算机windows2000/XP以上版本的用户的使用,这次课程设计一般是实现简单计算器的功能。
要程序能实现:
加,减,乘,除,开方,倒数等运算功能;还要实现数据的输入,输出,计算,显示及程序退出等功能。
另外还可以实现多种科学计算的功能,如:
三角函数的计算,弧度与角度间的转换,对数指数的计算等等。
3功能说明
它的设计按软件工程的方法进行,系统具有良好的界面;必要的交互信息;简约美观的效果。
使用人员能快捷简单地进行操作。
即可单机按钮进行操作,也可直接通过键盘直接输入。
即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。
(1)包含的功能有:
加、减、乘、除运算,开方、求倒数等功能[1].
(2)计算器上数字0—9为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件。
(3)给对话框添加菜单。
(4)制定高级按钮控件,该按钮具有不规则的形状,可以根据用户鼠标的位置和单击状态的不同,显示不同的颜色[3]。
(5)制定高级编辑控件,该编辑控件可以指定文本文字的字体和颜色。
(6)输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个标签中。
(7)实现对话框的扩展功能[2]。
(8)计算功能基本上是用系统部函数。
(9)程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以0开头等不正常现象。
(10)“CE”按钮可以清除所有已输入的数据从头计算
功能模块的实现:
(1)首先,添加高级按钮控件类,在这个类中实现高级的按钮控件。
在此类中对于所有的对于按钮的绘制工作都是在DrawItem函数中完成的,实现按钮对鼠标不同的位置和动作改变不同的颜色,并且按钮的客户区域变成一个椭圆。
(2)其次,添加一个高级编辑控件类,在此类的基础上实现高级编辑控件。
在OnDisplay函数中设置编辑框的显示文本,再调用OnDraw函数将其显示出来,并用指定的画刷填充客户区,并且用指定的颜色绘制显示文本。
(3)最后,实现主对话框界面功能,主要是加载菜单资源和对话框扩展功能的实现。
在CCalculatorDlg:
:
OnCreate函数中设定对话框的初始大小与位置,可以在这个对话框中进行窗口风格修改,位置设置等操作,然后添加菜单项ID_EXTEND的响应函数OnExtend。
4系统的实现
4.1窗体设计
利用MFCAppWinzard生成计算器应用程序框架具体步骤如下:
(1)执行VC程序,选择File|New命令,弹出New对话框.单击Projects标签,转到Projects选项卡,选择MFCAppWizard(exe)选项,然后在Projectname文本框中输入Calculator。
Lacation文本框是指项目的本地路径。
(2)单击OK按钮,弹出MFCAppWinzard_Step1对话框。
选中单选按钮,如图所示。
(3)单击Next按钮,弹出MFCAppWinzard_Step2of4对话框,如图所示。
(4)单击Next按钮,弹出MFCAppWinzard_Step3of4对话框,如图所示。
(5)单击Next按钮,弹出MFCAppWinzard_Step4of4对话框,如图所示。
单击Finish按钮,创建框架。
4.2编辑资源
(1)编辑对话框及控件资源
利用VisualC++提供的资源编辑器对对话框资源进行编辑。
删除对话框中默认的OK和Cancel按钮。
添加一个Edit控件,其控件ID为IDC_DSPEDIT。
添加若干按钮控件,其ID如表4-1所示。
表4-1按钮控件资源清单
按钮名称
按钮ID
用途
0
BTN_0
按键0
1
BTN_1
按键1
2
BTN_2
按键2
3
BTN_3
按键3
4
BTN_4
按键4
5
BTN_5
按键5
6
BTN_6
按键6
7
BTN_7
按键7
8
BTN_8
按键8
9
BTN_9
按键9
。
BTN_10
小数点
=
BTN_11
求值
+
BTN_12
加号
-
BTN_13
减号
*
BTN_14
乘号
/
BTN_15
除号
CE
BTN_16
清屏
Sqrt
BTN_17
开方
1/x
BTN_18
倒数
sin
BTN_19
正弦
cos
BTN_20
余弦
tan
BTN_21
正切
x^2
BTN_22
平方
x^3
BTN_23
立方
x^y
BTN_24
以X为底的y次幂
exp
BTN_25
以e为底的幂
ln
BTN_26
以e为底的对数
log
BTN_27
对数
-/+
BTN_29
正负号
10^x
BTN_30
10的x次方
n!
BTN_31
N的阶层
添加2个单选按钮,按钮资源清单如下
表4-2单选按钮控件资源清单
控件名
设置ID
DEGREE
BTN_DEGREE
RADIAN
BTN_RAD
添加4个静态框,将编辑控件,普通计算,高级计算分别分组。
其效果如图4-1所示。
图4-1编辑对话框资源
(2)编辑菜单资源
在VisualC++中的Workspace工具栏中,选中ResourceView选项卡。
在其中的Menu项上右击,在弹出的快捷菜单中选择Insert命令,如图4-2所示。
图4-2添加菜单资源
将添加的菜单资源的ID更改为IDR_MENU。
利用资源编辑器对菜单进行编辑,编辑后的菜单如图4-3所示。
图4-3编辑菜单资源
4.3实现高级按钮控件类
利用ClassWizard添加一个新类,如图4-5所示。
图4-5添加CAdvButton类
(1)添加成员变量和成员函数
为实现高级按钮控件对鼠标的移动和单击作出相应的颜色变化。
首先在CAdvButton的头文件中加入几种预定义颜色,其代码如下:
#defineDesiableColorRGB(192,192,192)//灰色,按钮不可用
#defineFocusColorRGB(255,0,0)//红色,按钮拥有焦点
#defineSelectColorRGB(0,255,0)//绿色,按钮被按下
#defineDefaultColorRGB(0,0,255)//蓝色,默认
#defineTextColorRGB(128,128,128)//浅灰色,文本颜色
接下来,添加成员变量:
public:
CRectm_ClientRect;//用来保存按钮的客户的矩形区域
CRgnm_ClientRgn;//用来保存按钮的客户区域,非矩形
UINTm_State;//按钮所处状态
CPointm_Point;//当前鼠标位置
BOOLm_IsTimerOn;//标识计时器是否已经打开
利用ClassWizard添加消息映射和响应函数:
图4-6添加响应函数
再利用ClassWizard覆盖父类中的两个关键的虚函数:
//{{AFX_VIRTUAL(CAdvButton)
public:
virtualvoidDrawItem(LPDRAWITEMSTRUCTlpDrawItemStruct);
protected:
virtualvoidPreSubclassWindow();
//}}AFX_VIRTUAL
其中对于所有的对于按钮的绘制工作都是在DrawItem函数中完成的。
(2)添加创建按钮控件代码
按钮的创建分两步完成。
首先,调用构造函数对按钮对象进行初始化;其次,调用Create函数创建按钮。
代码如附录1所示。
(3)设置按钮形状、外观、颜色、标题
PreSubclassWindow函数在窗口被创建之前就被调用,因此,在PreSubclassWindow函数中,将按钮的风格设为BS_OWNERDRAW。
实现代码如下:
//修改按钮控件风格
ModifyStyle(0,BS_OWNERDRAW|BS_PUSHBUTTON);
要使按钮能对鼠标的移动与单击作出不同的变化,那么按钮就需要时刻知道鼠标的位置与动作。
所以,必须在鼠标的单击、弹起及移动消息的响应函数中填加相应的代码,以获取鼠标的位置与动作。
在鼠标左键按下时,得到按钮窗口客户区域的屏幕坐标位置和鼠标的屏幕坐标位置。
当鼠标坐标位落于窗口客户区域,且当前按钮控件处于非选中状态时,将按钮状态标识设为选中状态,即将m_State设为2。
接着,调用Invalidate函数,使客户区无效,框架会自动调用DrawItem函数,重绘客户区。
实现代码如下:
//当鼠标在按钮的客户区按下时,改变按钮状态
voidCAdvButton:
:
OnLButtonDown(UINTnFlags,CPointpoint)
{
CRectrect;
GetWindowRect(&rect);//得到按钮客户区域的屏幕坐标位置
GetCursorPos(&m_Point);//得到鼠标的屏幕坐标位置
if((rect.PtInRect(m_Point))&&(m_State!
=2))
{
m_State=2;//2:
selectstate
Invalidate();//重绘客户区
}
CButton:
:
OnLButtonDown(nFlags,point);
}
在鼠标左键抬起时,得到按钮窗口客户区域的屏幕坐标位置和鼠标的屏幕坐标位置。
当鼠标坐标位置落于窗口客户区域,且当前按钮控件处于选中状态时,将按钮状态标识设为非选中状态,即将m_State设为1。
接着,调用Invalidate函数,使客区无效,框架会自动调用DrawItem函数,重绘客户区。
其代码如附录1所示。
在用户移动鼠标时,如果计时器没有启动,则启动计时器,并将计时器启动标识m_IsTimerOn设为TRUE。
其实现代码如下:
if(!
m_IsTimerOn)//如果计时器没用启动
{
SetTimer(1000,100,NULL);//启动计时器
m_IsTimerOn=TRUE;
}
如果鼠标已经移出了按钮的客户区,则消毁计时器,并将计时器的起始标识
m_IsTimerOn设为FALSE。
OnTimer函数的实现代码如附录1所示。
实现客户区的绘置函数DrawItem。
在DrawItem函数中,首先得到窗口的有效矩形区域,在此矩形区域创建椭圆。
调用SetWindowRgn函数,设置窗口的有效区域为椭圆。
从参数lpDrawItemStruct结构中得到按钮控件客户区域的设备环境变量指针。
根据按钮当前状态,创建不同的画笔。
调用设备环境类的成员函数,设置背景模式为透明,选择画笔,在按钮客户区绘制椭圆及显示文本。
其实现代码如附录1所示。
通过上面操作,按钮已经具有对鼠标不同的位置和动作改变不同的颜色。
并且,按钮的客户区域已经是一个椭圆,而不再是一个矩形。
正是下面的代码将按钮的客户区域设定为椭圆形:
GetClientRect(&m_ClientRect);//通到窗口的有效矩形区域
m_ClientRgn.DeleteObject();//删除区域对象
m_ClientRgn.CreateEllipticRgnIndirect(&m_ClientRect);//在矩形区域创建椭圆
//设置窗口的有效区域为椭圆
SetWindowRgn(m_ClientRgn,FALSE);
至此,一个完整的高级按钮类全部完成。
其效果如图4-7所示。
图4-7运行结果
4.4实现高级编辑控件类
利用ClassWizard添加一个新类,如图4-8所示.
图4-8添加CAdvEdit
(1)添加成员变量和成员函数
为CAdvEdit类添加一个字符串类型的成员变量m_Caption,用来记录编辑框中的文本容。
其实现代码如下:
//CAdvEdit头文件
public:
CStringm_Caption;//编辑框文本
利用AppWizard添加消息函数OnPaint。
如图4-9所示。
图4-9添加函数
添加两个public类型的成员函数,分别用来绘制编辑控件客户区和设置编辑控件的显示文本。
实现代码如下:
public:
voidOnDraw();//绘制编辑控件客户区
voidOnDisplay(LPCTSTRlpszStr);//设置编辑控件显示文本
protected:
//{{AFX_MSG(CAvEdit)
Afx_msgvoidOnPaint();//WM_ON_PAINT消息的响应函数
//}}AFX_MSG
图4-10添加成员变量
(2)添加编辑控件代码
在OnDisplay函数中设置编辑框的显示文本。
实现代码如下:
m_Caption=lpszStr;
OnDraw();
在OnPaint函数中调用自定义函数OnDraw。
实现代码如下:
CPaintDCdc(this);//devicecontextforpainting
OnDraw();
在OnDraw函数中,在编辑控件客户区域绘制文本。
首先,得到编辑控件客户区的矩形域;其次,得到编辑控件客户区的设备环境变量;接着,用指定的画刷填充客户区,并且用指定的颜色绘制显示文本。
效果如图4-11所示,其代码如附录2所示。
图4-11运行结果
4.5对话框界面设计
对主对话框添加成员变量和函数。
主要成员变量:
//CCalculatorDlg.h头文件
CButtonm_DspStatic;
CAdvEditm_DspEdit;//显示计算结果的编辑框
CMenu*m_Menu;//对话框菜单按钮
BOOLm_IsExtend;//标志对话框是否已扩展
主要成员函数:
//CCalculatorDlg.h头文件
//{{AFX_VIRTUAL(CCalculatorDlg)
Protected:
virtualvoidDoDataExchange(CDataExchange*pDX);//数据交换函数
//}}AFX_VIRTUAL
virtualBOOLOnInitDialog();//虚函数,可覆盖用来进行用户初始化操作
virtualvoidOnOK();//虚函数,覆盖用来屏蔽Enter操作
//{{AFX_MSG(CCalculatorDlg)
//响应消息ON_WM_CTLCOLOR,用以修改对话框及其控件颜色
afx_msgHBRUSHOnCtlColor(CDC*Pdc,CWnd*pWnd,UINTnCtlColor);
afx_msgvoidOnPaint();//响应消息WM_ON_PAINT
afx_msgintOnCreate(LPCREATESTRUCTlpCreateStruct);//响应消息WM_ON_CREATE
//}}AFX_MSG
除以上主要成员外,还要对每个按钮控件定义一个CAdvButton的对象与之相关联,并为每个按钮控件建军立一个成员函数来响应其EN_CLICKED消息。
如图4-12所示:
图4-12为按钮控件添加消息响应
(1)加载菜单资源
在3.2节中,已经为工程新建了一个菜单资源IDR_MENU,现将其添加到计算器对话框上。
利用CMenu类的LoadMenu函数,将菜单资源加载到存中。
再调用SetMenu函数,将菜单添加到对话框上,代码如附录3所示。
如图4-13所示:
图4-13运行结果
(2)关联控件与对象
在CCalculatorDlg类的声明中,已经为编辑框、静态框及每一个按钮声明了相应类型的对象与之对应。
但这些控件与对象的关联工作是在DoDataExchange函数中DDX_Control宏来完成的。
图4-14关联控件与对象
(3)实现对话框扩展功能
首先在CCalculatorDlg:
:
OnCreate函数中,设定对话框的初始大小与位置。
实现代码如下:
CRectrect;
GetWindowRect(&rect);//得到对话框的窗口区域矩形
//指定窗口大小与位置:
宽为186像素,高度为245像素
SetWindowPos(&wndTop,0,0,186,245,SWP_NOMOVE|SWP_NOZORDER);
其次,添加菜单项ID_EXTEND的响应函数OnExtend。
在OnExtend函数中,首先判断当前对话框状态,即是否已经被扩展。
如果对话框已被扩展,则收缩对话框。
首先得到对话框的当前位置,将其指定为新的宽度,但高度维持不变。
再将其中的编辑控件和编辑控件外的静态框收缩到合理位置。
最后将菜单项ID_EXTENDR的显示文本设置为“扩展”,将表示对话框是否扩展标识变量m_IsExtend设置为FALSE。
如果对话框为非扩展,则扩展对话框。
首先得到对话框的当前位置,将其指定为新的宽度,但高度不变。
再将其中的编辑控件和编辑控件外的静态框收缩到合理的位置。
最后将菜单项ID_EXTEND的显示文本设置为“收缩”,将表示对话框是否扩展的标识变量m_IsExtend设置为TURE,实现代码如附录3所示。
效果如图4-15和4-16所示:
图4-15扩展图
图4-16收缩图
(4)屏蔽Enter键
直到现在为止,虽然计算器的界面已经完成。
但是,它还有一个缺陷:
当Enter键按下时,对话框应付突然关掉。
这是因为对话框默认具有焦点的控件是OK键,当Enter键按下时,框架会自动执行当前拥有焦点的控件的响应函数,所以对话框自然就关闭了。
要屏蔽这一功能,只要执行下面的代码就可以。
vo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 程序 设计 实践 报告 简单 计算器 模版
![提示](https://static.bdocx.com/images/bang_tan.gif)