严重受不了那些下载需要积分豆豆什么的!!!
本人做了一个一个计算器上交报告,拿出来分享分享!!!
基于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 Text设置为right,如图:
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 only”设置为ture!
7.在类视图中给CdckCalculatorDlg类添加成员变量:
int m_duType;初始值为0,用来作为判定弧度还是角度的变准;
double m_first;//存储一次运算的第一个操作数及一次运算的结果
double m_second;//存储一次运算的第二个操作数
CString m_operator;//存储运算符
double m_coff;//存储小数点的系数权值
8.给编辑框添加关联变量:(右击编辑框->添加变量)
CString m_display;//编辑框IDC_DISPLAY的关联变量,显示计算结果(注意最右边选择“value”)
9.双击“弧度”给其添加事件响应(等价于右击然后添加事件处理器);
同理双击“角度”添加代码:
//弧度处理函数
void CdckCalculatorDlg::OnBnClickedHudu()
{
m_duType=0;//系统默认m_duType为,这里为刚好可以为计算器默认为弧度计算
}
//角度处理函数
void CdckCalculatorDlg::OnBnClickedJiaodu()
{
m_duType=1;//当选择角度处理函数的时候,m_duType为;这哥主要是作为以后函数算法的判断标准
}
10.在对话框类的构造函数中,初始化成员变量:
// CdckCalculatorDlg 对话框的构造函数
CdckCalculatorDlg::CdckCalculatorDlg(CWnd* pParent /*=NULL*/)
: CDialog(CdckCalculatorDlg::IDD, pParent)
, m_duType(0)
, m_first(0.0)
, m_second(0.0)
, m_operator(_T("+"))
, m_coff(0)
, m_display(_T("0.0"))
······
11.类视图里手动为对话框添加2个函数:
void UpdateDisplay(double dck)——用于编辑框显示数据
Void Calculate(void)——用于计算结果
代码如下(由于在代码中要用到fabs,要在CdckCalculatorDlg.cpp里添加一个库:#include "math.h"):
//在编辑框中显示数据
void CdckCalculatorDlg::UpdateDisplay(double dck)
{
m_display.Format(_T("%f"),dck);
int i=m_display.GetLength();
while(m_display.GetAt(i-1)=='0') //格式化输出,将输出结果后的零截去
{ m_display.Delete(i-1,1); i--; }
UpdateData(false);//更新编辑框变量m_display
}
//计算结果
void CdckCalculatorDlg::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_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 onButtonN(int n);以便数字按钮调用响应
//用于数字按钮调用
void CdckCalculatorDlg::onButtonN(int n)
{if( m_coff == 1.0)
m_second = m_second*10 + n;//作为整数输入数字时
else
{ m_second = m_second + n*m_coff; //作为小数输入数字
m_coff *= 0.1;}
UpdateDisplay(m_second);//更新编辑框的数字显示
}
13.双击各个数字按钮,添加响应,调用函数:如:
void CdckCalculatorDlg::OnBnClickedButton0()
{
onButtonN(0);
}
void CdckCalculatorDlg::OnBnClickedButton1()
{
onButtonN(1);
}······
14.为各个运算符号添加事件处理器:
// "+/-"
void CdckCalculatorDlg::OnBnClickedButtonSign()
{
m_second = -m_second;
UpdateDisplay(m_second);
}
// "."
void CdckCalculatorDlg::OnBnClickedButtonPoint()
{
m_coff= 0.1 ;
}
// "+"
void CdckCalculatorDlg::OnBnClickedButtonAdd()
{
Calculate();
m_operator="+"; // - *方法类似
}
// "/"
void CdckCalculatorDlg::OnBnClickedButtonDiv()
{
Calculate();
m_operator.Format(_T("%s"),"/");
}
// "C"
void CdckCalculatorDlg::OnBnClickedButtonClear()
{
m_first=0.0;
m_second=0.0;
m_operator = "+";
m_coff = 1.0;
UpdateDisplay(0.0);
}
// "sqrt"
void CdckCalculatorDlg::OnBnClickedButtonSqrt()
{
if( m_second==0)
{ m_first=sqrt(m_first);
UpdateDisplay(m_first); }
else
{ m_second=sqrt(m_second);
UpdateDisplay(m_second);}
}
// "1/x"
void CdckCalculatorDlg::OnBnClickedButtonReci()
{
if(fabs(m_second)<0.000001 && fabs(m_first)<0.000001)
{m_display = "除数不能为零";
UpdateData(false);
return;}
if( fabs(m_second)<0.000001)
{ m_first=1.0/m_first;
UpdateDisplay(m_first);
}
else
{ m_second=1.0/m_second;
UpdateDisplay(m_second);
}
}
// "="
void CdckCalculatorDlg::OnBnClickedButtonEqual()
{
Calculate();
}
15.同理添加其他特殊函数按钮事件处理器,其中大部分在API里math类里都有定义好了的 可以直接用的函数,当然有几个是自己写的如(n!和x^y而且第二个比较棘手),然后还有一个问题就是,里面的函数括号里面跟的值是弧度,而不是角度,这就需要我们去判断了,也就是说m_duType终于派上用场了,只要switch,m_duType,case得到0即默认的为弧度,case1 则值为角度,然后转换值赋给我们需要的显示出来:还是如上手动添加一个函数:void sanjiaoHanshu();
但是此时我们还需要PI,但是我们不能直接得到所以在这之前我们需要添加成员变量m_PI,并赋予初值m_PI=3.14159265358979323846;代码如下:/ 用来抉择结果,是弧度还是角度
void CdckCalculatorDlg::sanjiaoHanshu(void)
{
switch(m_duType)
{case 0:
m_second=m_second;
break;
case 1:
m_second=m_second*m_PI/180;
break;
}
}
16.编辑其他函数的代码:
// "exp"
void CdckCalculatorDlg::OnBnClickedExp()
{
m_second=exp(m_second);
UpdateDisplay(m_second);
}
// "10^x"
void CdckCalculatorDlg::OnBnClicked10x()
{
m_second=pow(10,m_second);
UpdateDisplay(m_second);
}
// "cos"
void CdckCalculatorDlg::OnBnClickedCos()
{
sanjiaoHanshu();
m_second=cos(m_second);
UpdateDisplay(m_second);
}
// "sin"
void CdckCalculatorDlg::OnBnClickedSin()
{
sanjiaoHanshu();
m_second=sin(m_second);
UpdateDisplay(m_second);
}
// "ln"
void CdckCalculatorDlg::OnBnClickedLn()
{
m_second=log(m_second);
UpdateDisplay(m_second);
}
// "log"
void CdckCalculatorDlg::OnBnClickedLog()
{
m_second=log10(m_second);
UpdateDisplay(m_second);
}
// "arccos"
void CdckCalculatorDlg::OnBnClickedArccos()
{
sanjiaoHanshu();
m_second=acos(m_second);
UpdateDisplay(m_second);
}
// "arcsin"
void CdckCalculatorDlg::OnBnClickedArcsin()
{
sanjiaoHanshu();
m_second=asin(m_second);
UpdateDisplay(m_second);
}
// "tan"
void CdckCalculatorDlg::OnBnClickedTan()
{
sanjiaoHanshu();
m_second=tan(m_second);
UpdateDisplay(m_second);
}
// "arctan"
void CdckCalculatorDlg::OnBnClickedArctan()
{
sanjiaoHanshu();
m_second=atan(m_second);
UpdateDisplay(m_second);
}
// "cosh"
void CdckCalculatorDlg::OnBnClickedCosh()
{
sanjiaoHanshu();
m_second=cosh(m_second);
UpdateDisplay(m_second);
}
// "sinh"
void CdckCalculatorDlg::OnBnClickedSinh()
{m_second=sinh(m_second);
UpdateDisplay(m_second);
}
// "tanh"
void CdckCalculatorDlg::OnBnClickedTanh()
{
sanjiaoHanshu();
m_second=tanh(m_second);
UpdateDisplay(m_second);
}
// "2^x"
void CdckCalculatorDlg::OnBnClicked2dex()
{
m_second=pow(2,m_second);
UpdateDisplay(m_second);
}
17.现在来看x^y 我们需要先得到 然后点击x^y按钮后再得到y,在点击“=”按钮后得到结果:步骤:如上添加变量 bool型 isXY
默认为false,再添加一个中间变量 double temp;当点击按钮的时候我们将编辑框显示的结果赋值给temp,然后将m_second设置为0.0,编辑框显示为0.0,设置isXY为ture如下代码:
// "x^y"
void CdckCalculatorDlg::OnBnClickedXdey()
{
temp=m_second;
m_second=0.0;
UpdateDisplay(0.0);
isXY=true;
}
(再输入新数据,然后再按“=”,所以在=之前我们需要对x^y做出判断 如果按了则isXY为ture,则我们将上面的数字记下然后参与计算,如果为false就不算:)
添加一个函数void xDEy()
//用来判断是否点击了“x^y”按钮,点击了后又作何运算
void CdckCalculatorDlg::xDEy(void)
{
if(isXY){
m_second=m_second;
m_second=pow(temp,m_second);
}
}
然后在每次等于之前都调用一下这个函数,如果点击了x^y按钮则执行里面的代码,所以“=”的代码需要修改一下:
// "="
void CdckCalculatorDlg::OnBnClickedButtonEqual()
{
xDEy();
Calculate();
}
18.n的阶乘:我们需要利用递归,如上添加函数int jiecheng(int n)
利用递归,返回阶乘值,代码如下:
int CdckCalculatorDlg::jiecheng(int n)
{
if(n==0||n==1){
return 1;
}else if(n>1){
return n*fun(n-1);
}
}
在n!的按钮消息处理里,如果输入的不是整数则不能进行阶乘运算:
// "n!"
void CdckCalculatorDlg::OnBnClickedNjiecheng()
{
if((m_second-(int)m_second)>0){
m_display =_T("你输入的不是整数,请输入整数!");
UpdateData(false);//如果是非整数,则结束运算,重新开始
return;
}
else {
m_second=(double)jiecheng(m_second);
UpdateDisplay(m_second);
}
}
19.所有按钮事件处理已经完成,编译运行:
自我检测,所有功能都能正确运行!完成!!!
相关推荐
MFC / VC一个的简单(计算器)计算机程序源代码下载MFC / VC一个的简单(计算器)计算机程序源代码下载MFC / VC一个的简单(计算器)计算机程序源代码下载MFC / VC一个的简单(计算器)计算机程序源代码下载MFC / VC...
在本项目中,我们探讨的是基于VC++和VC2008开发的MFC计算器,这是一款非常适合初学者理解MFC框架和实践Windows编程的经典案例。 1. **MFC基础知识** - MFC是微软为了简化Windows API编程而设计的,它封装了Windows...
【VC++6.0 MFC计算器源代码解析】 在编程领域,Microsoft Visual C++ 6.0(简称VC++6.0)是一款经典的集成开发环境,尤其对于学习Windows应用程序开发的人来说,它是一个不可或缺的工具。MFC(Microsoft Foundation...
在实际的开发流程中,"简易计算器VCMFC"的源代码可能包含了多个文件,比如头文件(.h)定义了类和函数,源文件(.cpp)实现了函数的细节。"Calculate"可能是指主计算逻辑的实现文件,或者是一个包含了所有计算相关...
MFC 计算器 VC++ 我自己写的有缺陷.请大家包含。内包含源代码
通过深入研究这个“VC6.0计算器源代码”,我们可以了解到MFC应用程序的基本架构,以及如何处理用户输入和控制GUI元素。这不仅有助于理解Windows程序的工作原理,也为后续更复杂的项目打下坚实基础。在实践中,不断...
【VC6.0计算器源代码】是一个...总的来说,通过研究这个VC6.0计算器源代码,开发者不仅可以学习到C++编程和MFC库的使用,还能掌握Windows应用程序开发的基本流程和技巧,对于提升编程技能和理解软件工程有极大的帮助。
包里有:基于VC的MFC计算器案例步骤及源代码,从网上下载的一个支持表达式计算的计算器源码包,自己做的一个简单计算器,能实现加减乘除等基本计算,可以不清零直接进行后续计算,包括使用上次结果计算和重新开始一...
从标签"MFC计算器"我们可以推断,这个压缩包包含的是一个使用MFC构建的计算器应用源代码。学习这个项目,开发者可以了解如何利用MFC的类来创建窗口、按钮、文本框等控件,以及如何处理用户的输入事件,如点击按钮...
在本案例中,我们讨论的是一个基于MFC的简单计算器程序,它是在VC6.0环境下编译运行的。VC6.0是微软的Visual C++ 6.0集成开发环境,尽管现在已经有更新的版本,但因其稳定性和对MFC的良好支持,仍然被许多开发者用于...
本项目“mfc设计的完美计算器源代码”是一个利用MFC构建的强大且美观的计算器应用,旨在帮助开发者理解和学习如何在Visual Studio环境下,特别是VC6.0中,利用MFC进行桌面应用开发。 首先,我们来了解一下MFC的基本...
本计算器实现了的功能有: 1、二进制、八进制、十进制及十六进制数的加、减、乘、除、乘方、取模等简单计算 2、科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运行 3、以角度、弧度两...
1. 理解MFC的控件和事件处理机制:通过查看源代码,了解MFC是如何创建GUI界面,以及如何响应用户操作,例如点击按钮、输入数字等。 2. 学习MFC的文档/视图架构:这是一个常见的MFC应用程序设计模式,它将数据(文档...
总的来说,Visual C++ 6.0的MFC计算器源代码是学习MFC和Windows GUI编程的一个典型实例。通过分析和理解这段代码,可以深入掌握如何使用MFC构建窗口应用,理解控件的交互机制,以及如何组织和实现计算逻辑。同时,这...
【VC++计算器源代码】是基于Microsoft Visual C++开发的一款简单计算器程序的源代码,它展示了如何使用C++语言和Microsoft的MFC(Microsoft Foundation Classes)框架来构建一个图形用户界面(GUI)应用。MFC是C++的...
二进制、八进制、十进制及十六进制数的加、减、乘、除、乘方、取模等简单计算 科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运行 以角度、弧度两种方式实现上述部分函数 具备历史...
"VC 计算器源代码和报告" 这个标题指的是一个使用Visual C++(简称VC)开发的计算器项目,它不仅包含了实际的源代码,还附带了一份24页的设计报告。这表明这个资源是面向学习或教学目的的,可能是一个课程设计、项目...
在这个案例中,“VC简单的MFC计算器”是一个基于Visual C++ 6.0开发的计算器应用,它实现了基本的四则运算功能,包括加、减、乘、除,适用于处理小数和整数。 **MFC框架** MFC由一系列的C++类组成,这些类提供了对...
vc calcu1这个文件可能是项目的源代码或编译后的二进制文件。 总结,基于MFC的计算器项目是一个典型的Windows GUI应用程序开发案例,涵盖了MFC的基础知识、用户界面设计、事件处理、逻辑计算等多个方面。通过实践这...
总的来说,这个“用vc做的计算器程序源代码”是一个学习C++和Windows应用程序开发的良好起点。通过研究这个程序,你可以了解到如何结合MFC库创建用户界面,如何处理事件,以及如何组织和实现计算逻辑。这对于进一步...