MFC简单计算器设计.docx
《MFC简单计算器设计.docx》由会员分享,可在线阅读,更多相关《MFC简单计算器设计.docx(14页珍藏版)》请在冰豆网上搜索。
MFC简单计算器设计
MFC计算器
摘要本课程设计将实现一个简单计算器。
其类似于Windows附件中自带的计算器。
这个计算器不仅实现了简单的四则运算功能,还实现了高级的科学计算功能,而且具有简洁大方的图文外观。
它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互信息和较好的健壮性使用人员能快捷简单地进行操作。
即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。
在课程设计中,系统开发平台为Windows7,程序设计设计语言采用VisualC++。
关键词程序设计;计算器;MFC;按钮控件
1引言
本课程设计主要在运算过程中,如果通过计算器来完成,就会减少计算量,该程序即可以在简单计算器键面下进行简单运算,也可以在科学计算器键面下进行高级的科学计算。
并且可以分别计算弧度、角度的三角函数的计算等较为复杂的运算。
1.1课题背景
计算器是日常生活中十分便捷有效的工具,能实现加、减、乘、除、开方、求倒数等简单运算的工具。
要实现计算功能,可以用VC++的知识编写程序来解决此问题。
该计算器大大的降低了数字计算的难度及提高了计算的准确度和精确度。
该计算器使用非常简单和方便,对广大中小学生的学习有巨大帮助作用,也对在职人员的工作有点帮助作用。
1.2设计目的
能够熟练掌握MFC中的各个控件,消息的处理与添加,能够独立完成一些简单的算法,并且能够具体实现一些功能,真正可以利用功能比较强大的MFC编译出较好的程序代码。
本设计完成的是一个具有比较齐全运算功能的计算器。
1.3设计要求
利用MicrosoftVisualC++的MFC制作一个多功能计算器,要求:
(1)能够实现最基本的加、减、乘、除四则基本运算;
(2)添加了计算类型,分别是弧度制、度数制;
(3)界面有正负、清空、等于方便用户计算使用;
(4)重点是此计算器具有倒数、多次方、开方、三角函数、反三角函数、指数、阶乘等高级运算。
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软件、硬件环境
本程序采用MicrosoftVisualC++6.0的英文版本进行编译。
VisualC++6.0是Microsoft公司推出的基于Windows操作系统的可视化C++编程工具,尽管Microsoft公司推出了.NET平台的集成开发环境,但由于其良好的界面和可操作性,加上支持标准C/C++规范,但仍有相当多的编程人员使用VisualC++6.0进行应用系统的开发。
3课程设计步骤
3.1Windows消息处理机制的理解
首先编写程序需要对Windows程序的消息处理机制有个比较清晰的了解。
Windows的程序都是通过消息来传送数据,有不需要用户参与的系统消息,比如异常处理等。
3.2界面的设计
仿照Windows附件里面的计算器,在Dialog视图中画好界面,主要使用的菜单中的相关控件,并合理布置各个按钮的位置,使界面更加整洁。
在各个控件的属性里依次定义好名称,之后屏幕显示的就是如图一样的可视计算器界面:
四、课程设计内容
4.1概要设计
依次将各个功能按钮设置相关的ID和控件类,一下为各类按键的一个举例,以下为数字0的属性设置,及其ID和标题名称,其余数字键属性设置与其相似。
下图是清零键C的属性,及其ID和标题名称
下图为四则运算加、减、乘、除中“+”的ID和标题名称
下图是弧度按键的属性设置
下图为计算器中三角函数和反三角函数的属性设置
下图是做的一个简单的运算,结果如图中的显示
4.2程序总体框架描述
4.3程序常用类声明
按键0~9的ID设置
IDC_BUT0IDC_BUT1IDC_BUT2IDC_BUT3IDC_BUT4IDC_BUT5IDC_BUT6IDC_BUT7IDC_BUT8IDC_BUT9
计算类型的ID设置
弧度:
IDC_HUDU
角度:
IDC_JIAODU
次方的ID设置
10^x:
IDC_BUTTON_10Xx^y:
IDC_XDEY
2^x:
IDC_2DEXx^2:
IDC_BUTTON_SQRT
三角函数的ID设置
sin:
IDC_SINcos:
IDC_COStan:
IDC_TAN
tanh:
IDC_TANHarctan:
IDC_ARCTANarcos:
IDC_ARCCOS
cosh:
IDC_COSHarcsin:
IDC_ARCSINsinh:
IDC_SINH
四则运算的ID设置
+:
IDC_BUTTON_ADD-:
IDC_BUTTON_MINUS
*:
IDC_BUTTON_MUTIPLY/:
IDC_BUTTON_DIV
清空、等于、正负号、exp、ln、Log、1/x的ID设置
C:
IDC_BUTTON_CLEAR=:
IDC_BUTTON_EQUAL
+/—:
IDC_BUTTON_SIGNexp:
IDC_BUTTON_EXP
ln:
IDC_LNlog:
IDC_LOG1/x:
IDC_BUTTON_RECI
4.4下图是基于基本对话框中的所有函数
4.5主要代码
计算器主要功能的实现:
//添加各个按钮的消息响应函数
voidCCounterDlg:
:
OnBut0()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
onButtonN(0);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
voidCCounterDlg:
:
OnBut9()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
onButtonN(9);
}
//用于显示数据
voidCCounterDlg:
:
UpdateDisplay(doublen)
{
m_display.Format(_T("%f"),n);//将double型转换成字符型
inti=m_display.GetLength();
while(m_display.GetAt(i-1)=='0')//格式化输出,将输出结果后的零截去
{m_display.Delete(i-1,1);i--;}
UpdateData(false);//更新编辑框变量m_display
}
//用于数字按钮的调用
voidCCounterDlg:
:
onButtonN(intn)
{
if(m_coff==1.0)
m_second=m_second*10+n;//作为整数输入数字时
else
{
m_second=m_second+n*m_coff;//作为小数输入数字
}
UpdateDisplay(m_second);//更新编辑框的数字显示
}
//用于计算结果
voidCCounterDlg:
:
Calculate(void)
{
//将前一次数据与当前数据进行运算,作为下一次的第一操作数,并在编辑框显示
switch(m_operator.GetAt(0))
{
case'+':
m_first+=m_second;
break;
case'-':
m_first-=m_second;
break;
case'*':
m_first*=m_second;
break;
case'/':
if(fabs(m_second)<=0.000001)//求m_second的绝对值如果为零时
{
m_display="除数设置有误";
UpdateData(false);
return;
}
else
m_first/=m_second;break;
}
m_second=0.0;
m_coff=1.0;
m_operator=_T("+");
UpdateDisplay(m_first);//更新编辑框显示内容
}
voidCCounterDlg:
:
OnButtonAdd()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
Calculate();
m_operator="+";//-*与之相同
}
voidCCounterDlg:
:
OnButtonDiv()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
Calculate();
m_operator.Format(_T("%s"),"/");
}
//计算阶乘的代码
//添加函数intjiecheng(intn)利用递归返回阶乘值
intCCounterDlg:
:
jiecheng(intn)
{
if(n==0||n==1)
return1;
else
if(n>1)
returnn*jiecheng(n-1);//递归函数求阶乘f(n)=n*f(n-1)
}
//在n!
的按钮消息处理里,如果输入的不是整数则不能进行阶乘运算
voidCCounterDlg:
:
OnNjiecheng()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
if((m_second-(int)m_second)>0)
{
m_display=("你输入的不是整数,请输入整数!
");
UpdateData(false);//如果是非整数,则结束运算,重新开始
return;
}
else
{
m_second=(int)jiecheng(m_second);
UpdateDisplay(m_second);
}
}
//次方代码
voidCCounterDlg:
:
OnButton10x()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_second=pow(10,m_second);
UpdateDisplay(m_second);//刷新显示结果
}//其余的求次方与之类似
5总结