VC++实现标准型计算器步骤及源码
2013年06月19日 09:48:47 无敌的成长日记 阅读数:4686
最近一段时间一直在做这个东西,刚刚拿到题目的时候认为这是一个简单的程序,可是随着编写程序的深入,发现这也不是一个很简单的程序,主要是需要考虑到一些连续加减以及混合运算的情况。
首先介绍一下这个小计算器的功能。其实也没有什么新的功能啦,只是有一些简单的+、-、*、/运算,能够完成混合运算,是一个标准型的计算器。
建立文件
(1)建立应用程序外壳
创建一个新的AppWizard项目,命名为shiyan,选择Dialog based;其他都选用默认属性,单击Finish完成生成应用程序的步骤。
进入对话框界面以后,按下图所示布置显示框和功能按钮,这个小计算器一共需要10个数字键,9个功能键两个文本框。(下面的显示窗口是在测试程序时用的跟踪窗口,一般的计算器可以删去)。
(2)设置窗口属性
将上面的显示框属性设置成为CString型,下面的跟踪显示框设置成为Double型,并且绑定两个变量给他们。分别是m_text(显示框),m_show(跟踪显示框)ID改成IDC_text,IDC_show。数字键的ID号更改成为IDC_OnX,Caption改为相应的数字。
(3)设置公有变量
这个程序中我用的公共变量比较得多,主要是因为我是新手吗!!下面是所有公有变量的列表:
-
int numb;
-
int h; //.计数
-
double temp4;
-
double temp1;
-
double temp3;
-
double temp2;
-
CString ss;
-
char sign;
-
int a; //减法计数
-
int b; //乘法计数
-
int c; //除法计数
-
int d; //加法计数
要给公有变量赋值需要在 OnInitDialog()函数中赋值,而这个函数就是在运行对话框时首先要运行的初始化函数,现在给需要赋初值的公有变量赋初值。
-
sign=0;
-
CString ss="0";
-
temp4=0;
-
temp2=0;
-
a=b=c=d=0;
-
h=0;
-
numb=0;
(3)编写按钮程序
数字键
双击你所要编写的数字键进入相应的按键程序编写,例如1建,双击后编写程序:
-
void CShiyanDlg::OnOn1()
-
{
-
UpdateData(1);//上传数据开启
-
if(numb==1)//判断是否已经按下=号建
-
{
-
ss="";
-
m_text;
-
numb=0;
-
}
-
int a;
-
a=ss.GetLength();//截取当前显示框字符串长度
-
ss.Insert(a,"1");//插入字符
-
m_text=ss;
-
UpdateData(0);//上传数据关闭
-
// TODO: Add your control notification handler code here
-
}
“+”号键程序:
-
void CShiyanDlg::Onadd()
-
{
-
h=0;
-
a=b=c=0;
-
d++;
-
UpdateData(1);
-
temp1=atof(ss);
-
if((sign==‘-‘)||(sign==‘*‘)||(sign==‘/‘))
-
{
-
switch(sign)//change
-
{
-
case‘-‘:
-
{
-
temp1=atof(ss);
-
temp4=temp4-temp1;
-
break;
-
}
-
case‘*‘:
-
{
-
temp1=atof(ss);
-
temp4=temp4*temp1;
-
break;
-
}
-
case‘/‘:
-
{
-
temp1=atof(ss);
-
temp4=temp4/temp1;
-
break;
-
}
-
}
-
}
-
else
-
{
-
if (d==1)///carefull!!
-
temp4=temp1;
-
else
-
temp4=temp4+temp1;
-
}
-
ss="";
-
m_text=ss;
-
m_show=temp4;
-
sign=‘+‘;
-
//numb++;
-
UpdateData(0);
-
// TODO: Add your control notification handler code here
-
}
“-”号键程序:
-
void CShiyanDlg::Onsub()
-
{
-
h=0;
-
b=c=d=0;
-
a++;
-
UpdateData(1);
-
temp1=atof(ss);
-
if((sign==‘+‘)||(sign==‘*‘)||(sign==‘/‘))
-
{
-
switch(sign)//change
-
{
-
case‘+‘:
-
{
-
temp1=atof(ss);
-
temp4=temp4+temp1;
-
break;
-
}
-
case‘*‘:
-
{
-
temp1=atof(ss);
-
temp4=temp4*temp1;
-
break;
-
}
-
case‘/‘:
-
{
-
temp1=atof(ss);
-
temp4=temp4/temp1;
-
break;
-
}
-
}
-
}
-
else
-
{
-
if (a==1)///carefull!!
-
temp4=temp1;
-
else
-
temp4=temp4-temp1;
-
}
-
ss="";
-
m_text=ss;
-
m_show=temp4;
-
sign=‘-‘;
-
//numb++;
-
UpdateData(0);
-
// TODO: Add your control notification handler code here
-
}
“*”号键程序:
-
void CShiyanDlg::Onmul()
-
{
-
a=c=d=0;
-
h=0;
-
b++;
-
UpdateData(1);
-
temp1=atof(ss);
-
if((sign==‘+‘)||(sign==‘-‘)||(sign==‘/‘))
-
{
-
switch(sign)//change
-
{
-
case‘+‘:
-
{
-
temp1=atof(ss);
-
temp4=temp4+temp1;
-
break;
-
}
-
case‘-‘:
-
{
-
temp1=atof(ss);
-
temp4=temp4-temp1;
-
break;
-
}
-
case‘/‘:
-
{
-
temp1=atof(ss);
-
temp4=temp4/temp1;
-
break;
-
}
-
}
-
}
-
else
-
{
-
if (b==1)///carefull!!
-
temp4=temp1;
-
else
-
temp4=temp4*temp1;
-
}
-
ss="";
-
m_text=ss;
-
m_show=temp4;
-
sign=‘*‘;
-
//numb++;
-
UpdateData(0);
-
// TODO: Add your control notification handler code here
-
}
“.”键程序:
-
void CShiyanDlg::Onpoint()
-
{
-
UpdateData(1);
-
int a;
-
if(h==0)
-
{
-
a=ss.GetLength();
-
ss.Insert(a,".");
-
m_text=ss;
-
}
-
else
-
{;}
-
h=1;
-
UpdateData(0);
-
//sign=0;
-
//a=0;
-
// TODO: Add your control notification handler code here
-
}
乘方键程序:
-
void CShiyanDlg::Onsqrt() //try again
-
{
-
UpdateData(1);
-
temp4=atof(ss)*atof(ss);
-
ss.Format(_T("%f"),temp4);
-
m_text=ss;
-
m_show=temp4;
-
//sign=0;
-
UpdateData(0);
-
// TODO: Add your control notification handler code here
-
}
“+/-”键程序:
-
void CShiyanDlg::Onsign()
-
{
-
UpdateData(1);
-
numb=0;
-
temp2=-atof(ss);
-
ss.Format(_T("%f"),temp2);
-
m_text=ss;
-
m_show=temp2;
-
temp2=0;
-
UpdateData(0);
-
// TODO: Add your control notification handler code here
-
}
“C”键程序:
-
void CShiyanDlg::OnCE() //C
-
{
-
numb=0;
-
h=0;
-
UpdateData(1);
-
ss="";
-
m_text=ss;
-
m_show=atof(ss);
-
temp1=0;
-
temp2=0;
-
temp3=0;
-
temp4=0;
-
sign=‘o‘;
-
UpdateData(0);
-
a=b=c=d=0;
-
// TODO: Add your control notification handler code here
-
}
“DEL”键程序:
-
void CShiyanDlg::Ondel()
-
{
-
UpdateData(1);
-
int u,v;
-
ss=m_text;
-
v=ss.GetLength();
-
u=v-1;
-
ss.Format("%s",ss.Left(u));
-
m_text=ss;
-
UpdateData(0);
-
// TODO: Add your control notification handler code here
-
}
“=”号建:
-
void CShiyanDlg::Onequ()
-
{
-
numb=1;
-
h=0;
-
UpdateData(1);
-
switch(sign)
-
{
-
case ‘+‘:
-
{
-
a=b=c=0;
-
temp1=atof(ss);
-
d++;
-
if (d==1)
-
temp4=temp1;
-
else
-
temp4=temp4+temp1;
-
ss.Format(_T("%f"),temp4);
-
m_text=ss;
-
m_show=temp4;
-
temp1=0;
-
temp4=0;
-
d=0;
-
break;
-
}
-
case ‘-‘:
-
{
-
b=c=d=0;
-
temp1=atof(ss);
-
a++;
-
if (a==1)
-
temp4=temp1;
-
else
-
temp4=temp4-temp1;
-
ss.Format(_T("%f"),temp4);
-
m_text=ss;
-
m_show=temp4;
-
temp1=0;
-
temp4=0;
-
a=0;
-
break;
-
}
-
case ‘*‘:
-
{
-
a=c=d=0;
-
temp1=atof(ss);
-
b++;
-
if (b==1)
-
temp4=temp1;
-
else
-
temp4=temp4*temp1;
-
ss.Format(_T("%f"),temp4);
-
m_text=ss;
-
m_show=temp4;
-
temp1=0;
-
temp4=0;
-
b=0;
-
break;
-
}
-
case ‘/‘:
-
{
-
a=b=d=0;
-
temp1=atof(ss);
-
c++;
-
if (c==1)
-
temp4=temp1;
-
else
-
temp4=temp4/temp1;
-
ss.Format(_T("%f"),temp4);
-
m_text=ss;
-
m_show=temp4;
-
temp1=0;
-
temp4=0;
-
c=0;
-
break;
-
}
-
//a=b=c=d=0;
-
}
-
sign=0;
-
UpdateData(0);
-
// TODO: Add your control notification handler code here
-
}
原文地址:https://www.cnblogs.com/Firesun/p/11005399.html