MFC课程设计报告模拟计算器.docx
- 文档编号:14814998
- 上传时间:2023-06-27
- 格式:DOCX
- 页数:14
- 大小:126.42KB
MFC课程设计报告模拟计算器.docx
《MFC课程设计报告模拟计算器.docx》由会员分享,可在线阅读,更多相关《MFC课程设计报告模拟计算器.docx(14页珍藏版)》请在冰点文库上搜索。
MFC课程设计报告模拟计算器
计算机MFC课程设计报告
——模拟计算器
姓名:
学号:
02011227
联系电话:
指导教师:
东南大学机械工程学院
2012年10月14日
模拟计算器
摘要
摘要内容:
以课本简单计算器为基础,首先实现了加、减、乘、除、求倒数和平方根的混合运算,并能进行清屏及倒退操作,然后自行完善了书中未能实现的乘、除运算的连续操作,最后自行设计并完成了lg、ln、sin、cos、^、.、pi、e八个按钮控件的消息映射及程序代码的添加和修改。
从中学会了制作简单的基于对话框的小工具、掌握了常用控件的使用、明白了消息映射及消息处理、提高了VC++编程水平。
关键词:
四则运算小数点计算器
Analogcalculator
Abstract
Contentofabstract:
Simplecalculatorintextbooksasthefoundation,firstrealizedtheaddition,subtraction,multiplication,division,andreciprocalandsquarerootofthemixedoperation,andcanclearscreenandreverseoperation,andthentoimprovethebookfailedtorealizethemultiplication,divisionoperationofcontinuousoperation,andfinallytobedesignedandcompletedtheeightbuttoncontrolnewsmappingandprogramcodetoaddandmodify.Learnthowtomakesimpledialog-basedsmalltools,masteredtheuseofcommonlyusedcontrols,seenewsmappingandinformationprocessing,improvethelevelofprogramming.
Keyword:
arithmeticDecimalpointCalculator
本计算器是基于VC++的MFC编程,可完成大多数简单操作,其运行后界面如下图:
以课本简单计算器为基础,首先实现了加、减、乘、除、求倒数和平方根的混合运算,并能进行清屏及倒退操作,然后自行完善了书中未能实现的乘、除运算的连续操作,最后自行设计并完成了lg、ln、sin、cos、^、.、pi、e八个按钮控件的消息映射及程序代码的添加和修改。
完整的操作步骤:
1、创建MFC应用程序框架。
使用MFCAppWizard【exe】向导生成一个基于对话框的应用程序Calculator。
2、编辑对话框。
按图添加前21个控件,其中1个为编辑框,20个为按钮,控件ID及Caption设置如下:
IDC_EDIT_PUTOUTIDC_NUMBER11
IDC_NUMBER22IDC_NUMBER33
IDC_NUMBER44
IDC_NUMBER55
IDC_NUMBER66
IDC_NUMBER77
IDC_NUMBER88
IDC_NUMBER99
IDC_NUMBER00
IDC_ADD+
IDC_SUBTRACT-
IDC_MULTIPLY*IDC_DIVIDE/IDC_RESULT=IDC_MINUS+/-
IDC_BACKBackIDC_CLEARClear
IDC_SQRTSqrt
IDC_RECIPROCAL1/x
IDC_LGlg
IDC_LNln
IDC_SINsin
IDC_COScos
IDC_CHENGFANG^
IDC_POINT.
IDC_PIpi
IDC_CHAOYUESHUe
3、添加成员变量。
为编辑框在CCalculatorDlg对话框类中添加double型成员变量m_result,再为CCalculatorDlg类添加:
intm_OperationCount(存放加减乘除等运算符的顺序号)、intm_NumberCount(存放操作数的顺序号)、doublem_number[15](存放操作数)、doublem_Operation[15](存放操作符)、boolflag(判断整数和小数)、doublep(小数退位)。
4、添加消息映射及成员函数
(1)、在CalculatorDlg.h头文件中声明消息映射函数。
afx_msgvoidOnNumberKey(UINTnID);//响应数字按钮的单击操作
afx_msgvoidOnOperationKey(UINTnID);//响应操作符按钮的单击操作
(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实现文件中加入消息处理函数。
voidCCaculatorDlg:
:
OnNumberKey(UINTnID)
{
intn=0;
switch(nID)
{
caseIDC_NUMBER1:
n=1;
break;
caseIDC_NUMBER2:
n=2;
break;
caseIDC_NUMBER3:
n=3;
break;
caseIDC_NUMBER4:
n=4;
break;
caseIDC_NUMBER5:
n=5;
break;
caseIDC_NUMBER6:
n=6;
break;
caseIDC_NUMBER7:
n=7;
break;
caseIDC_NUMBER8:
n=8;
break;
caseIDC_NUMBER9:
n=9;
break;
caseIDC_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);//功能加强,不仅可输入整数,还可输入小数,使运算范围大大扩增
}
voidCCaculatorDlg:
:
OnOperationKey(UINTnID)
{
inti;
switch(nID)
{
caseIDC_ADD:
m_Operation[m_OperationCount]=1;
break;
caseIDC_SUBTRACT:
m_Operation[m_OperationCount]=2;
break;
caseIDC_MULTIPLY:
m_Operation[m_OperationCount]=3;
break;
caseIDC_DIVIDE:
m_Operation[m_OperationCount]=4;
break;
caseIDC_RESULT:
cal();
break;
caseIDC_MINUS:
m_number[m_NumberCount]=-m_number[m_NumberCount];
break;
caseIDC_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;
caseIDC_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;
caseIDC_SQRT:
m_number[m_NumberCount]=sqrt(m_number[m_NumberCount]);
break;
caseIDC_RECIPROCAL:
m_number[m_NumberCount]=(double)1/m_number[m_NumberCount];
break;
caseIDC_LG:
m_number[m_NumberCount]=log10(m_number[m_NumberCount]);
break;
caseIDC_LN:
m_number[m_NumberCount]=log(m_number[m_NumberCount]);
break;
caseIDC_SIN:
m_number[m_NumberCount]=sin(m_number[m_NumberCount]);
break;
caseIDC_COS:
m_number[m_NumberCount]=cos(m_number[m_NumberCount]);
break;
caseIDC_CHENGFANG:
m_Operation[m_OperationCount]=5;
break;
caseIDC_POINT:
flag=true;
break;
caseIDC_PI:
m_result=m_number[m_NumberCount]=acos(-1);
UpdateData(false);
break;
caseIDC_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
voidCCaculatorDlg:
:
cal()
{
m_result=m_number[1];
for(inti=1;i<15;i++)
switch(m_Operation[i])
{
case1:
m_result=m_result+m_number[i+1];
break;
case2:
m_result=m_result-m_number[i+1];
break;
case3:
m_result=m_result*m_number[i+1];
break;
case4:
m_result=(double)m_result/m_number[i+1];
break;
case5:
m_result=pow(m_result,m_number[i+1]);
break;//新增的处理乘方运算
}
UpdateData(false);
}
5、成员变量初始化
CCaculatorDlg:
:
CCaculatorDlg(CWnd*pParent/*=NULL*/)
:
CDialog(CCaculatorDlg:
:
IDD,pParent)
{
……
m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_NumberCount=1;
m_OperationCount=1;
flag=false;
p=1;//为自己新添的成员变量初始化
for(inti=0;i<15;i++)
{
m_number[i]=0;
m_Operation[i]=999;
}
}
结论:
看起来虽然简单,不过自己做起来还是挺难的。
首先一定要细心,例如在CCalculator.cpp消息映射表中的命令消息ON_COMMAND_RANGE(IDC_ADD,IDC_CHAOYUESHU,OnOperationKey)前2个参数的ID号不可出错。
其中最难的新增功能实现是小数点,为实现小数点功能,增加了2个成员变量flag和p,然后在初始化时不要忘记新增变量的初始化,以及OnNumberKey(UINTnID)函数和Back按钮实现中有整数及小数之分等。
圆周率pi和超越数e的值,采用库存函数acos(double)和exp(double)实现而非自己定义,与三角函数和自然对数相对应,保证运算准确性。
做完此次MFC大作业,我从中学会了制作简单的基于对话框的小工具、掌握了常用控件的使用、明白了消息映射及消息处理、提高了VC++编程水平。
参考文献:
VisualC++程序设计与应用教程马石安等编
附录:
输入小数1.23显示如图所示:
计算lg5=结果显示如图:
点击圆周率pi编辑框显示如图:
点击超越数e编辑框显示如图:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MFC 课程设计 报告 模拟 计算器