MFC课程设计报告—模拟计算器
《MFC编程及应用》课程设计报告

《MFC编程及应用》课程设计报告题目:计算器学号:姓名:指导老师:时间:为了完成计算器这个程序的编程,我首先创建了一个基于对话框的应用程序。
我在对话框中添加了三个编辑框,分别用来输入操作数和输出结果,添加了三个静态文本框来标记三个编辑框,添加了四个按钮来实现加减乘除的运算。
通过设置静态文本框的属性,我将它们的名字改为“数1”,“数2”和“结果”。
同样我改变了按钮的名字,我先为“加”这个按钮添加了一个BN-CLICKED的成员函数,这时候对话框的类中就出现了一个ON_BATTON1的消息响应函数要从两个编辑框中取出输入的值,我在这个消息响应函数中新增了三个char型数组的成员变量用来保存输入的字符和输出字符,由于计算机处理的是整数不是字符,所以我又增加了三个整型的成员变量num1,num2,num3作为计算机处理的变量。
在这个过程中,我碰到了四个问题,一,要怎么把输入的字符从编辑框中取出来。
为此我调用了一个函数GetDlgItem(IDC_EDIT2)->GetWindowText(ch1,10);将编辑框中的字符取出并赋值给ch1[]。
二,要怎么把一个字符型的变量转变成整形变量,我调用了函数num1=atoi(ch1);这样就实现了从字符到整数的转变。
三,怎样保证输入的是1到100的数,我用了一个if语句来判断,if(num1<1||num1>100||num2<1||num2>100)MessageBox("请输入一个1到100的整数");else{ num3=num1+num2;只有当输入的是满足要求的数时才进入下一步,如果输入数非法就弹出一个对话框提示输入非法。
四,要怎么把结果输入到第三个编辑框中,由于计算结果是一个整数所以我先调用了函数itoa(num3,ch3,10);将其变成字符,并利用函数GetDlgItem(IDC_EDIT4)->SetWindowText(ch3);将它输出到第三个编辑框中。
mfc计算器实验报告

mfc计算器实验报告MFC计算器实验报告引言:MFC(Microsoft Foundation Class)是微软公司开发的一套用于Windows应用程序开发的类库,它提供了一系列的类和函数,方便开发者进行图形界面的设计和开发。
在本次实验中,我们将使用MFC来设计一个简单的计算器应用程序,并通过实验报告来总结我们的设计过程和结果。
1. 实验目的本次实验的主要目的是熟悉MFC框架的使用,了解MFC的基本原理和设计思路,并通过实际操作来掌握MFC应用程序的开发流程。
2. 实验环境本次实验使用的开发环境是Visual Studio 2019,该版本已经集成了MFC开发环境,方便我们进行MFC应用程序的设计和开发。
3. 实验步骤3.1 创建MFC项目首先,我们打开Visual Studio 2019,并选择创建一个新的MFC应用程序项目。
在创建项目的过程中,我们需要选择MFC应用程序向导,并设置一些基本的项目属性,如应用程序名称、目标平台等。
3.2 设计计算器界面在项目创建完成后,我们将进入MFC应用程序的设计界面。
在这个界面中,我们可以通过拖拽和调整控件的方式来设计应用程序的界面。
为了实现一个简单的计算器功能,我们需要添加一些按钮、文本框和标签等控件,并设置它们的属性和事件响应函数。
3.3 实现计算器功能在设计界面完成后,我们需要在代码中实现计算器的功能。
具体来说,我们需要编写一些函数来处理按钮的点击事件,并根据用户的输入来进行相应的计算操作。
在这个过程中,我们可以使用MFC提供的一些数学函数和操作符重载来简化计算的过程。
4. 实验结果经过我们的设计和开发,一个简单的计算器应用程序已经完成了。
在实验过程中,我们测试了该应用程序的基本功能,包括加法、减法、乘法和除法等运算操作,并对一些特殊情况进行了处理,如除数为零等。
实验结果表明,该计算器应用程序在功能和稳定性方面都达到了预期的效果。
5. 实验总结通过本次实验,我们对MFC框架的使用和应用程序的开发流程有了更深入的了解。
MFC下的科学计算器

《VC++程序设计》实验报告题目科学计算器院、系(部)计算机科学与技术学院专业及班级学号姓名日期2012年11月11日1 题目要求仿照Windows系统自带计算器做的一个小型科学计算器。
2 功能需求整个系统具有的功能:响应各个数字键,实现加、减、乘、除、x^y、lnx、x!、sinx、cosx、tanx、二进制、二进制转换八进制、清空、求倒数等基本功能;3 总体设计3.1 系统模块3.2 系统业务处理流程整体流程图4 详细设计1)在对话框类的头文件“CalculatorDlg.h”头部添加:#include "math.h“2)在对话框类的定义中添加下列函数声明:afx_msg void OnNumberKey(UINT nID);//处理数字键单击事件的消息响应函数afx_msg void OnOperationKey(UINT nID);//处理操作键单击事件的消息响应函数3)在对话框的可执行文件的消息映射中添加如下代码:ON_COMMAND_RANGE(IDC_NUMBER1,IDC_NUMBER10,OnNumberKey)ON_COMMAND_RANGE(IDC_NUMBER_PlusMinus,IDC_NUMBER_Equal ,OnOperationKey)4)在对话框的可执行文件中添加OnNumberKey(UINT nID)和OnOperationKey(UINT nID)的实现代码5)在对话框类中定义如下变量:double number1,number2;//number1和number1用于存储将要进行运算的数字int NumberState,OperationState;//NumberState用于标示是将数值赋给number1或是number1//OperationState用于表示计算器所要执行的操作6)为IDC_EDIT_PUTOUT添加映射变量m_Cnumber7)在对话框的构造函数中初始化变量m_number = 0.0;NumberState=1;8)为对话框添加计算函数void cal(),用于计算void CCalculatorDlg::cal() //计算函数{m_number=atof(m_Cnumber);switch(OperationState){case 1:m_number=(double)number1/number2; NumberState=1;m_Cnumber.Format("%g",m_number); UpdateData(FALSE);break;case 2:m_number=number1*number2;NumberState=1;m_Cnumber.Format("%g",m_number); UpdateData(FALSE);break;case 3:m_number=number1+number2;NumberState=1;m_Cnumber.Format("%g",m_number); UpdateData(FALSE);break;case 4:m_number=number1-number2;NumberState=1;m_Cnumber.Format("%g",m_number); UpdateData(FALSE);break;case 5:m_number=pow(number1,number2);NumberState=1;m_Cnumber.Format("%g",m_number); UpdateData(FALSE);break;}number1=m_number;OperationState=0;}9)OnNumberKey(UINT nID)函数void CCalculatorDlg::OnNumberKey(UINT nID) {CString n;switch (nID){case IDC_BUTTON1:n="1";break;case IDC_BUTTON2:n="2";break;case IDC_BUTTON3:n="3";break;case IDC_BUTTON4:n="4";break;case IDC_BUTTON5:n="5";break;case IDC_BUTTON6:n="6";break;case IDC_BUTTON7:n="7";break;case IDC_BUTTON8:n="8";break;case IDC_BUTTON9:n="9";break;case IDC_BUTTON0:n="0";break;}if (NumberState==1){m_Cnumber=m_Cnumber+n;number1=atof(m_Cnumber);UpdateData(FALSE);}else{m_Cnumber=m_Cnumber+n;number2=atof(m_Cnumber);UpdateData(FALSE);}//处理除数为零的情况,如果显示除,则零按钮不显示,否则显示if (Zero=FALSE){Zero=TRUE;m_Zero.ShowWindow(SW_SHOW);}else{m_Zero.ShowWindow(SW_SHOW);}}10)OnOperationKey(UINT nID)函数void CCalculatorDlg::OnOperationKey(UINT nID){m_number=atof(m_Cnumber);switch(nID){case IDC_BUTTON_PlusMinus:m_number=-m_number;if (NumberState==1){number1=m_number;}else{number2=m_number;}m_Cnumber.Format("%g",m_number);UpdateData(FALSE);case IDC_BUTTON_BackSpace:int n;n=m_Cnumber.GetAllocLength();m_Cnumber=m_Cnumber.Left(n-1);UpdateData(FALSE);break;case IDC_BUTTON_Divide:cal();if (Zero=TRUE){m_Zero.ShowWindow(SW_HIDE);Zero=FALSE;}OperationState=1;m_number=0;m_Cnumber="";NumberState=2;break;case IDC_BUTTON_Multiply:cal();OperationState=2;m_number=0;m_Cnumber="";NumberState=2;break;case IDC_BUTTON_Add:cal();OperationState=3;m_number=0;m_Cnumber="";NumberState=2;case IDC_BUTTON_Subtract:cal();OperationState=4;m_number=0;m_Cnumber="";NumberState=2;break;case IDC_CIFANG:cal();OperationState=5;m_number=0;m_Cnumber="";NumberState=2;break;case IDC_BUTTON_Clear:number1=number2=m_number=0;m_Cnumber.Format("%g",m_number);UpdateData(FALSE);m_Cnumber="";NumberState=1;break;case IDC_BUTTON_Sqrt:number1=m_number=sqrt(number1);m_Cnumber.Format("%g",m_number);UpdateData(FALSE);break;case IDC_BUTTON_Derivative:number1=m_number=(double)1/number1;m_Cnumber.Format("%g",m_number);UpdateData(FALSE);break;case IDC_BUTTON_Equal:cal();break;}}11)添加剩余的操作按键,(此处只写一个,如tan(),cos(),n!,x^y等详细函数看源代码void CCalculatorDlg::OnSin(){// TODO: Add your control notification handler code herem_number=atof(m_Cnumber);m_number=sin(m_number*3.1415926/180);m_Cnumber.Format("%g",m_number);UpdateData(FALSE);}12)二进制转换核心代码void CCalculatorDlg::OnBinary(){// TODO: Add your control notification handler code hereconst int size=sizeof(int)*8; //转换成4*8=32位二进制char str[size+1]; //来存储二进制转换结果m_number=atof(m_Cnumber);bit(m_number,str,size);m_Cnumber.Format("%s",str);UpdateData(FALSE);}char *CCalculatorDlg::bit(int m_number,char*array,int size){for(int i=size-1;i>=0;i--,m_number>>=1) //m_number>>=1向右移一位array[i]='0'+(1&m_number); //判断每一位是0还是1 array[size]='\0';return array;}13)二进制转换八进制核心代码void CCalculatorDlg::OnOctal(){// TODO: Add your control notification handler code hereUpdateData(TRUE);int i,j,m;int sum;sum=0;m = m_Cnumber.GetLength();for(i=m-1; i>=0; i-- )sum+= ((m_Cnumber[i]-'0')<<(m-i-1));//<<是位操作符,表示二进制数向左移位,如001变为010,等效于sum+=((s[i]-'0')*2^(m-i-1));这样应该清楚了,如0101==0*2^3+1*2^2+0*2^1+1*2^0;即转为十进制if(sum==0){m_Cnumber = "0";}int a[10];i=0;while(sum){a[i]=sum%8;//这部分是十进制转八进制的,原理同上。
软件课程设计-基于MFC的多功能计算器

题目基于MFC的多功能计算器设计一、设计目标编写一个计算器。
二、语言环境编程语言:C++开发环境:VS2017目标软件运行平台:Windows 64位机三、软件功能:1.图形化界面。
2.实现计算器的功能。
3.输入加减乘除表达式,可以计算其结果。
4.基本功能:计算表达式,计算阶乘,计算组合数,次幂,求次幂后取余,简单的分数加减乘除计算。
5.扩展功能:在以上功能完成的基础上,可完成更高精度的计算,实现简单高精度的加减乘除阶乘运算。
基于MFC的多功能计算器设计摘要计算器是人们日常生活中常见的电子产品之一,在人们的生活中有着非常广泛的应用,随着科学的进步,计算器的种类和功能也更加丰富。
本次课程设计旨在基于MFC 框架设计一个多功能计算器,能够实现含括号的表达式计算,三角函数、开方、阶乘、排列组合等数学计算,进制转换,超过long long范围的整数运算以及简单的分数四则运算。
此次设计的多功能计算器是基于MFC的框架,以C++编程语言完成的,计算器使用中缀表达式求值的算法计算含括号的表达式,使用C++标准库函数进行相应的数学计算,利用Boost库实现高精度的整数运算。
本计算器不仅功能丰富,而且具有美观、功能清晰且操作方便的界面。
经多次测试,本计算器能即时准确地获得所需的计算结果,并且能在输入错误时进行相应处理,充分降低了计算时的难度,节约了时间。
通过本次课程设计,掌握了MFC基本框架,对基本算法有了更加深入的了解。
关键词:多功能计算器;MFC;C++编程语言;表达式计算;高精度目录课题分析 (4)总体设计 (5)详细设计 (6)3.1普通计算与科学计算 (6)3.2高精度计算 (10)3.3其他计算 (11)3.3.1分数计算 (11)3.3.2组合数计算 (11)3.3.3进制转换 (11)程序调试与问题解决 (11)4.1输入表达式错误引发程序异常 (12)4.2输入表达式格式有误 (13)4.3计算排列组合溢出 (13)运行结果 (14)总结 (16)课题分析本次设计为多功能计算器,需要实现多种功能,为了使界面更加美观,功能更加清晰明了,也为了让使用者便于操作,因此本计算器使用MFC中的Tab Control控件对计算器进行分页[1],将计算器分为了四个板块,分别为:普通计算、科学计算、高精度计算和其他计算。
MFC计算器程序报告

C++课程设计实验报告学号姓名院系专业一、课题名称简易的计算器设计。
二、问题陈述编写一个计算器程序,能够进行四则运算、取模等运算要求:1、个人完成;2、运用对话框编写,界面上只能有一个输出框,数据通过按钮输入到程序,并显示在输出框中;当按下运算符后再输入数据,输出框中应显示新数据;运算结果也显示在输出框中。
3、四则运算、取模运算是最低要求,程序能正确执行;4、界面设计美观、合理;5、独立完成;三、设计目标和设计任务编写一个计算器程序,能够进行四则运算、取模、乘方、立方,并且给计算器程序添加背景。
四、解题算法思想1.创建一个基于对话框的项目2. 给对话框加入相应的操作按钮3. 给按钮加上代码,设置属性4. 为实现四则运算、取模等操作添加必要函数五、程序算法过程①选择File→New菜单命令,选择Project选项卡,并选择MFC AppWizard(exe), name 命名为calculator;选择应用程序基于对话框,即Dialog based。
多次单击next,最后单击Finish后,系统弹出一对话框,如下图:②使用按钮控件、文本编辑框控件和组控件,将他们加入到对话框中,并通过更改按钮控件的属性中的标题部分。
选中所有按钮,在属性中的Extended Style中选中Modal frame,使其达到下图效果:(注意,在布局按钮时,为了使按钮总体整齐美观,可以先创建一行或一列按钮,使他们保持整齐后,按住Ctrl键,选中这一行或一列按钮,再移动鼠标,即可生成另一行或一列按钮;也可以通过Layout菜单中的指令对其进行布局)③鼠标右击按钮控件,选择属性,即可对其ID进行更改,各ID与标题内容对应如下:ID 标题ID 标题IDC_BUTTON0 0 IDC_BUTTONCLS 清零IDC_BUTTON1 1 IDC_ADD +IDC_BUTTON2 2 IDC_PLUS -IDC_BUTTON3 3 IDC_MULTIPL Y *IDC_BUTTON4 4 IDC_DEVIDE /IDC_BUTTON5 5 IDC_EQUALL =IDC_BUTTON6 6 IDC_QUM 取模|IDC_BUTTON7 7 IDC_SQU 平方IDC_BUTTON8 8 IDC_CUB 立方IDC_BUTTON9 9④在对话框非控件部分单击鼠标右键,打开类向导ClassWizard,将数字按钮0~9关联到函数OnEnternum(),方法为单击数字按钮ID,然后单击Message中的BN_CLICKED,最后单击右侧的Add Function,在其中输入函数名即可。
MFC计算器实验报告

实验报告一——计算器一实验名称简易计算器二实验目的在Visual C++.EXE开发环境中,通过编写计算器程序,掌握创建对话框的方法,并向其中添加控件,并设置属性,使之满足程序的要求。
三编程思路计算器要实现各种运算,在编写中主要分为两大块的编写,一是对1、2、3等数字按钮的响应函数编写,二是对加减乘除等运算符按钮的响应函数的编写。
给Dlg添加变量int m_operator; //运算符double m_result; //结果(含中间变量)另外添加编辑框的变量m_res1.对数字按钮的响应函数的编写1)由于每个按钮的响应函数相差不大,故用一个函数将其封装在每次输入时要先判断数据开头是否为0void CMy0710210202CalculateDlg::button(CString c){UpdateData(TRUE);m_res+=c;if(m_res.GetAt(0)=='0'&&m_res.Find(".")==-1){m_res.Empty();m_res+=c;}UpdateData(FALSE);}2)小数点按钮的响应函数。
首先要判断输入数据中是否已有小数点,数据是否为0,以及是否还没输入数据。
void CMy0710210202CalculateDlg::OnDian(){// TODO: Add your control notification handler code hereUpdateData(TRUE);int n=m_res.Find(".");if(n==-1&&m_res.GetLength()!=0) m_res+=".";else if(m_res.GetLength()==0)m_res+="0.";UpdateData(FALSE);}2.运算符按钮的响应函数的编写用m_operator指代要进行的运算,由于每次的运算结果m_result 都传入了编辑框的变量m_res里,故此程序可以实现连续运算。
MFC实训_计算器

面向对象程序设计实训报告——简易计算器专业:电子信息工程学生姓名:唐伯虎学号: 9527指导教师:小行星2016年1月7 日1 总体设计1.1 设计任务使用Visual C++6.0 MFC编写一个计算器。
1.2 基本要求(1)按照题目要求独立设计计算器所需的所有按钮,并完成程序源码编写、调试及关键代码注释。
(40分)(2)能够实现+、-、*、/计算。
(10分)(3)能够实现对数及幂函数计算。
(15分)(4)能够实现三角函数及反三角函数计算。
(15分)1.3 发挥部分能够实现8,16,10,2进制之间相互转换。
(20分)2 方案设计2.1 需求性分析所谓计算器,就是要进行数值运算,提供1-9数字按键,让用户按下不同的数字键,可以是组合输入,然后再按下运算符按键实现两个或者多个数值的计算,因此在计算器中除了需要定义数字按键之外运算符按键也是必不可少的,但是运算符按键类型众多,实现的功能也是五花八门,有双目运算符,比如+ - * /这些,也有单目运算符,比如x^2,ln,sqrt,所针对的数字个数也不一样,因此在设计计算器之前需要明确好该计算器大致要实现怎样的功能,需要定义多少个按键,而不是什么按键都要添加,企图复杂化,这样一来,就会造成很多麻烦。
应该先从四则运算开始,然后逐一增加功能,循序渐进的进行,根据题目的要求,划分好制作的步骤先后顺序。
我在基本的要求基础上希望添加几个功能,分别是清除按键,这是少不了的,作用是初始化数据,清屏,然后是退格按键,在输入错误的情况下能够实现退格再输入;再次是Ans按键,用以保留上一次的运算结果,以备下次运算时需要;最后是圆周率PI,在需要用到圆周运算时不用输入3.1415……这么长的一段数值……但是这都是在完成基本功能的基础上添加的功能。
2.2 可行性分析本设计是简单计算器。
日常计算机使用中,常常涉及到一些有关计算的问题,一个小型的计算器软件变得非常有用,该校型计算器需要空间资源较少,对电脑其他程序的应用影响较小。
mfc课程设计

m f c课程设计(计算器)(共12页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--MFC程序设计计算器(附带日历)一、主要目的:本设计将实现一个简单计算器并附带一个日历。
其功能参照Windows附件中自带的计算器。
这个计算器实现了简单的四则运算功能,还实现了模运算和指数运算,具有简洁的图文外观。
它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互让使用人员能快捷简单地进行操作。
即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间。
另外还附加了一个日历功能让使用者了解当前日期。
本程序对人们的生活有一定的帮助。
在课程设计中,系统开发平台为Windows XP,程序设计设计语言采用Visual C++,在程序设计中,采用了面向对象的解决问题的方法。
在程序设计中,通过设计、编制、调试一个模拟计算器的程序,加深对语法及语义分析原理的理解,并实现对命令语句的灵活应用。
在程序设计中,可以用面向对象程序设计方法解决问题。
由于多个函数均需要访问某些数据,这些数据常被设计为全局变量。
而在面向对象程序设计中关键是如何将问题域中的实体(即日常所见的概念)抽取出来,作为C++程序中的类,而属性与行为作为类的两类要素通常是必不可少的,甚至还应考虑类必须满足的约束。
二、开发工具的介绍1、关于Visual C++Visual C++ 是Microsoft公司在1998年推出的基于Windows 9X和Windows NT的优秀集成开发环境。
该环境为用户提供了良好的可视化编程环境,程序员可以里利用该开发环境轻松地访问C++源代码编辑器,资源编辑器和使用内部调试器,并且可以创建项目文件。
Visual C++不仅包括编译器,而且它还包括许多有用组件,通过这些组件的协同工作,可以在Visual C++集成环境中轻松地完成创建源文件,编辑资源,以及对程序的编译,连接和调试等各项工作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机MFC课程设计报告——模拟计算器姓名:学号:02011227联系电话:指导教师:东南大学机械工程学院2012年10月14日模拟计算器摘要摘要内容:以课本简单计算器为基础,首先实现了加、减、乘、除、求倒数和平方根的混合运算,并能进行清屏及倒退操作,然后自行完善了书中未能实现的乘、除运算的连续操作,最后自行设计并完成了lg、ln 、sin、cos、^、.、pi、e八个按钮控件的消息映射及程序代码的添加和修改。
从中学会了制作简单的基于对话框的小工具、掌握了常用控件的使用、明白了消息映射及消息处理、提高了VC++编程水平。
关键词:四则运算小数点计算器Analog calculatorAbstractContent of abstract: Simple calculator in textbooks as the foundation, first realized the addition, subtraction, multiplication, division, and reciprocal and square root of the mixed operation, and can clear screen and reverse operation, and then to improve the book failed to realize the multiplication, division operation of continuous operation, and finally to be designed and completed the eight button control news mapping and program code to add and modify. Learnt how to make simple dialog-based small tools, mastered the use of commonly used controls, see news mapping and information processing, improve the level of programming.Key word: arithmetic Decimal point Calculator本计算器是基于VC++的MFC编程,可完成大多数简单操作,其运行后界面如下图:以课本简单计算器为基础,首先实现了加、减、乘、除、求倒数和平方根的混合运算,并能进行清屏及倒退操作,然后自行完善了书中未能实现的乘、除运算的连续操作,最后自行设计并完成了lg、ln 、sin、cos、^、.、pi、e 八个按钮控件的消息映射及程序代码的添加和修改。
完整的操作步骤:1、创建MFC应用程序框架。
使用MFC AppWizard【exe】向导生成一个基于对话框的应用程序 Calculator。
2、编辑对话框。
按图添加前21个控件,其中1个为编辑框,20个为按钮,控件ID及Caption设置如下:IDC_EDIT_PUTOUTIDC_NUMBER1 1 IDC_NUMBER2 2IDC_NUMBER3 3 IDC_NUMBER4 4 IDC_NUMBER5 5 IDC_NUMBER6 6 IDC_NUMBER7 7 IDC_NUMBER8 8IDC_NUMBER9 9IDC_NUMBER0 0IDC_ADD + IDC_SUBTRACT - IDC_MULTIPLY * IDC_DIVIDE / IDC_RESULT =IDC_MINUS +/-IDC_BACK BackIDC_CLEAR ClearIDC_SQRT SqrtIDC_RECIPROCAL 1/xIDC_LG lgIDC_LN lnIDC_SIN sin IDC_COS cosIDC_CHENGFANG ^IDC_POINT .IDC_PI piIDC_CHAOYUESHU e3、添加成员变量。
为编辑框在CCalculatorDlg对话框类中添加double型成员变量m_result,再为CCalculatorDlg类添加:int m_OperationCount (存放加减乘除等运算符的顺序号)、 int m_NumberCount (存放操作数的顺序号)、double m_number[15](存放操作数)、 double m_Operation[15] (存放操作符)、 bool flag (判断整数和小数)、 double p(小数退位)。
4、添加消息映射及成员函数(1)、在CalculatorDlg.h头文件中声明消息映射函数。
afx_msg void OnNumberKey(UINT nID); //响应数字按钮的单击操作afx_msg void OnOperationKey(UINT nID); //响应操作符按钮的单击操作(2)、在CalculatorDlg.cpp实现文件消息映射表中加入ON_COMMAND_RANGE 命令消息ON_COMMAND_RANGE(IDC_NUMBER1,IDC_NUMBER0,OnNumberKey)ON_COMMAND_RANGE(IDC_ADD,IDC_CHAOYUESHU,OnOperationKey) //有新增功能时命令消息中参数记得修改(3)、在CalculatorDlg.cpp实现文件中加入消息处理函数。
void CCaculatorDlg::OnNumberKey (UINT nID){int n=0;switch(nID){case IDC_NUMBER1:n=1;break;case IDC_NUMBER2:n=2;break;case IDC_NUMBER3:n=3;break;case IDC_NUMBER4:n=4;break;case IDC_NUMBER5:n=5;break;case IDC_NUMBER6:n=6;break;case IDC_NUMBER7:n=7;break;case IDC_NUMBER8:n=8;break;case IDC_NUMBER9:n=9;break;case IDC_NUMBER0:n=0;break;}if(flag==true) //判断是否为小数{p*=0.1;m_number[m_NumberCount]=m_number[m_NumberCount]+n*p; }else{m_number[m_NumberCount]=m_number[m_NumberCount]*10+n;flag=false;}m_result=m_number[m_NumberCount];UpdateData(false); //功能加强,不仅可输入整数,还可输入小数,使运算范围大大扩增}void CCaculatorDlg::OnOperationKey (UINT nID){int i;switch(nID){case IDC_ADD:m_Operation[m_OperationCount]=1;break;case IDC_SUBTRACT:m_Operation[m_OperationCount]=2;break;case IDC_MULTIPLY:m_Operation[m_OperationCount]=3;break;case IDC_DIVIDE:m_Operation[m_OperationCount]=4;break;case IDC_RESULT:cal();break;case IDC_MINUS:m_number[m_NumberCount]=-m_number[m_NumberCount];break;case IDC_BACK:if(flag==false){m_number[m_NumberCount]=(int)m_number[m_NumberCount]/10;m_result=m_number[m_NumberCount];}else{m_number[m_NumberCount]=m_number[m_NumberCount]/p;m_number[m_NumberCount]=(int)m_number[m_NumberCount]/10;m_number[m_NumberCount]=m_number[m_NumberCount]*10*p;m_result=m_number[m_NumberCount];}//增加小数之后Back操作有所改变UpdateData(false);break;case IDC_CLEAR:for(i=1;i<11;i++){m_number[i]=0;m_Operation[i]=999;m_NumberCount=1;m_OperationCount=1;flag=false;p=1; //增加小数之后Clear操作有所改变m_result=0;UpdateData(false);}break;case IDC_SQRT:m_number[m_NumberCount]=sqrt(m_number[m_NumberCount]);break;case IDC_RECIPROCAL:m_number[m_NumberCount]=(double)1/m_number[m_NumberCount];break;case IDC_LG:m_number[m_NumberCount]=log10(m_number[m_NumberCount]);break;case IDC_LN:m_number[m_NumberCount]=log(m_number[m_NumberCount]);break;case IDC_SIN:m_number[m_NumberCount]=sin(m_number[m_NumberCount]);break;case IDC_COS:m_number[m_NumberCount]=cos(m_number[m_NumberCount]);break;case IDC_CHENGFANG:m_Operation[m_OperationCount]=5;break;case IDC_POINT:flag=true;break;case IDC_PI:m_result=m_number[m_NumberCount]=acos(-1);UpdateData(false);break;case IDC_CHAOYUESHU:m_result=m_number[m_NumberCount]=exp(1);UpdateData(false);break;}//新增功能,使运算更完善if(m_Operation[m_OperationCount]<6){m_NumberCount++;m_OperationCount++;flag=false;p=1;}//呼应小数点和乘方的功能}(4)、在CalculatorDlg对话框中添加void型成员函数cal(),并在CalculatorDlg.cpp实现文件前加上包含语句 #include <math.h>。