(转)基于VC的MFC计算器案例步骤及源代码
来源:互联网 发布:小学生电脑画图软件 编辑:程序博客网 时间:2024/06/07 10:32
严重受不了那些下载需要积分豆豆什么的!!!
本人做了一个一个计算器上交报告,拿出来分享分享!!!
基于VC的MFC计算器案例步骤及源代码
基于VC的MFC计算器案例详细步骤有图有代码,图中右边的各个函数也都能实现:清除,加,减,乘,除,倒数,e的x次方,以e为底x的对数,10的x次方,以10为底x的对数,余弦,反余弦,双曲余弦值,正弦,反正弦,双曲正弦值,正切,反正切,双曲正切值,x的y次方,2的x次方,n(n为整数)的阶乘。如图:
1.创建一个基于对话框的应用程序(这一步应该都会吧!),命名为dckCalculator;
2.打开资源视图->点击“dckCalculator”左边的“+”->点击“dckCalculator.rc”左边的“+”->点击“Dialog”左边的“+”->双击“IDD_DCKCALCULATOR_DIALOG”->去除“确定”“取消”“TODO:
3.按照我们想要的效果给对话框添加组件->编辑各个组件的显示名字->改变其ID属性
4.将编辑框的属性中的Align
5.设置相关属性(每次改变ID都要保存一下):
控件
Caption(名称)
ID
控件
caption
ID
按钮
0
IDC_BUTTON0
按钮
exp
IDC_EXP
按钮
1
IDC_BUTTON1
按钮
10^x
IDC_10X
按钮
2
IDC_BUTTON2
按钮
cos
IDC_COS
按钮
3
IDC_BUTTON3
按钮
sin
IDC_SIN
按钮
4
IDC_BUTTON4
按钮
ln
IDC_LN
按钮
5
IDC_BUTTON5
按钮
log
IDC_LOG
按钮
6
IDC_BUTTON6
按钮
arccos
IDC_ARCCOS
按钮
7
IDC_BUTTON7
按钮
arcsin
IDC_ARCSIN
按钮
8
IDC_BUTTON8
按钮
tan
IDC_TAN
按钮
9
IDC_BUTTON9
按钮
arctan
IDC_ARCTAN
按钮
+/-
IDC_BUTTON_SIGN
按钮
cosh
IDC_COSH
按钮
.
IDC_BUTTON_POINT
按钮
sinh
IDC_SINH
按钮
+
IDC_BUTTON_ADD
按钮
tanh
IDC_TANH
按钮
-
IDC_BUTTON_MINUS
按钮
X^y
IDC_XDEY
按钮
*
IDC_BUTTON_MUTIPLY
按钮
2^x
IDC_2DEX
按钮
/
IDC_BUTTON_DIV
按钮
N!
IDC_NJIECHENG
按钮
C
IDC_BUTTON_CLEAR
单选
弧度
IDC_HUDU
按钮
sqrt
IDC_BUTTON_SQRT
单选
角度
IDC_JIAODU
按钮
1/x
IDC_BUTTON_RECI
编辑框
编辑框
IDC_DISPLAY(只读)
按钮
=
IDC_BUTTON_EQUAL
6.将编辑框中属性的“read
7.在类视图中给CdckCalculatorDlg类添加成员变量:
int
double
double
CString
double
8.给编辑框添加关联变量:(右击编辑框->添加变量)
CString
9.双击“弧度”给其添加事件响应(等价于右击然后添加事件处理器);
同理双击“角度”添加代码:
//弧度处理函数
void
{
m_duType=0;//系统默认m_duType为,这里为刚好可以为计算器默认为弧度计算
}
//角度处理函数
void
{
m_duType=1;//当选择角度处理函数的时候,m_duType为;这哥主要是作为以后函数算法的判断标准
}
10.在对话框类的构造函数中,初始化成员变量:
//
CdckCalculatorDlg::CdckCalculatorDlg(CWnd*
:
,
,
,
,
,
,
11.类视图里手动为对话框添加2个函数:
void
Void
代码如下(由于在代码中要用到fabs,要在CdckCalculatorDlg.cpp里添加一个库:#include
//在编辑框中显示数据
void
{
m_display.Format(_T("%f"),dck);
int
while(m_display.GetAt(i-1)=='0')
{
UpdateData(false);//更新编辑框变量m_display
}
//计算结果
void
{//将前一次数据与当前数据进行运算,作为下次的第一操作数,并在编辑框显示。
switch(m_operator.GetAt(0))
{
case
case
case
if(fabs(m_second)<=0.000001)
{m_display="除数不能为";
UpdateData(false);
return;
m_first/=m_second;break;
}
m_second=0.0;
m_coff=1.0;
m_operator=_T("+");
UpdateDisplay(m_first);//更新编辑框显示内容
}
12.如上添加函数void
//用于数字按钮调用
void
{
m_second
else
{
m_coff
UpdateDisplay(m_second);//更新编辑框的数字显示
}
13.双击各个数字按钮,添加响应,调用函数:如:
void
{
onButtonN(0);
}
void
{
onButtonN(1);
}······
14.为各个运算符号添加事件处理器:
//
void
{
m_second
UpdateDisplay(m_second);
}
//
void
{
m_coff
}
//
void
{
Calculate();
m_operator="+";
}
//
void
{
Calculate();
m_operator.Format(_T("%s"),"/");
}
//
void
{
m_first=0.0;
m_second=0.0;
m_operator
m_coff
UpdateDisplay(0.0);
}
//
void
{
if(
{
UpdateDisplay(m_first);
else
{
UpdateDisplay(m_second);
}
//
void
{
if(fabs(m_second)<0.000001
{m_display
UpdateData(false);
return;
if(
{
UpdateDisplay(m_first);
}
else
{
UpdateDisplay(m_second);
}
}
//
void
{
Calculate();
}
15.同理添加其他特殊函数按钮事件处理器,其中大部分在API里math类里都有定义好了的
但是此时我们还需要PI,但是我们不能直接得到所以在这之前我们需要添加成员变量m_PI,并赋予初值m_PI=3.14159265358979323846;代码如下:/
void
{
switch(m_duType)
{case
m_second=m_second;
break;
case
m_second=m_second*m_PI/180;
break;
}
}
16.编辑其他函数的代码:
//
void
{
m_second=exp(m_second);
UpdateDisplay(m_second);
}
//
void
{
m_second=pow(10,m_second);
UpdateDisplay(m_second);
}
//
void
{
sanjiaoHanshu();
m_second=cos(m_second);
UpdateDisplay(m_second);
}
//
void
{
sanjiaoHanshu();
m_second=sin(m_second);
UpdateDisplay(m_second);
}
//
void
{
m_second=log(m_second);
UpdateDisplay(m_second);
}
//
void
{
m_second=log10(m_second);
UpdateDisplay(m_second);
}
//
void
{
sanjiaoHanshu();
m_second=acos(m_second);
UpdateDisplay(m_second);
}
//
void
{
sanjiaoHanshu();
m_second=asin(m_second);
UpdateDisplay(m_second);
}
//
void
{
sanjiaoHanshu();
m_second=tan(m_second);
UpdateDisplay(m_second);
}
//
void
{
sanjiaoHanshu();
m_second=atan(m_second);
UpdateDisplay(m_second);
}
//
void
{
sanjiaoHanshu();
m_second=cosh(m_second);
UpdateDisplay(m_second);
}
//
void
{
UpdateDisplay(m_second);
}
//
void
{
sanjiaoHanshu();
m_second=tanh(m_second);
UpdateDisplay(m_second);
}
//
void
{
m_second=pow(2,m_second);
UpdateDisplay(m_second);
}
17.现在来看x^y
默认为false,再添加一个中间变量
//
void
{
temp=m_second;
m_second=0.0;
UpdateDisplay(0.0);
isXY=true;
}
(再输入新数据,然后再按“=”,所以在=之前我们需要对x^y做出判断
添加一个函数void
//用来判断是否点击了“x^y”按钮,点击了后又作何运算
void
{
if(isXY){
m_second=m_second;
m_second=pow(temp,m_second);
}
}
然后在每次等于之前都调用一下这个函数,如果点击了x^y按钮则执行里面的代码,所以“=”的代码需要修改一下:
//
void
{
xDEy();
Calculate();
}
18.n的阶乘:我们需要利用递归,如上添加函数int
利用递归,返回阶乘值,代码如下:
int
{
if(n==0||n==1){
return
}else
return
}
}
在n!的按钮消息处理里,如果输入的不是整数则不能进行阶乘运算:
//
void
{
if((m_second-(int)m_second)>0){
m_display
UpdateData(false);//如果是非整数,则结束运算,重新开始
return;
}
else
m_second=(double)jiecheng(m_second);
UpdateDisplay(m_second);
}
}
19.所有按钮事件处理已经完成,编译运行:
自我检测,所有功能都能正确运行!完成!!!
- (转)基于VC的MFC计算器案例步骤及源代码
- 基于VC的MFC计算器案例步骤及源代码
- VC++实现标准型计算器步骤及源码
- 基于MFC的简易计算器
- 基于MFC编程的计算器
- 基于MFC的简单计算器
- VC/MFC 使用jsoncpp步骤及注意的问题
- VC++写的计算器程序源代码
- 求助。。!!VC计算器源代码。。。。
- VC++ mfc 计算器
- 基于MFC的一个简单计算器
- 【基于VS2010的MFC编程】四则运算计算器
- 【基于VS2010的MFC编程】多功能计算器
- 简单而强大的多线程串口编程工具CserialPort类(附VC基于MFC单文档协议通讯源程序及详细编程步骤)
- 简单而强大的多线程串口编程工具CserialPort类(附VC基于MFC单文档协议通讯源程序及详细编程步骤)
- 简单而强大的多线程串口编程工具CserialPort类(附VC基于MFC单文档协议通讯源程序及详细编程步骤)
- Java编写的计算器程序及源代码
- Java编写的计算器程序及源代码
- static
- Wuawua知识管理 -- Java推荐书籍
- error at ::0 can't find referenced pointcut..可能出现错误的原因 (装载)
- 单播、多播(组播)和广播的区别
- oracle 10g、11g编译bbed
- (转)基于VC的MFC计算器案例步骤及源代码
- C++项目中的extern "C" {}
- 一位30岁程序猿的感悟
- ORM
- 关于谷歌眼镜的一些YY
- 发展中的linux4
- 插入排序 insert_sort1 与 insert_sort_while的区别 细节排查自己的习惯错在哪儿?
- MFC消息机制
- 砝码秤重量