VC++计算器.docx

上传人:b****7 文档编号:11141682 上传时间:2023-02-25 格式:DOCX 页数:37 大小:673.31KB
下载 相关 举报
VC++计算器.docx_第1页
第1页 / 共37页
VC++计算器.docx_第2页
第2页 / 共37页
VC++计算器.docx_第3页
第3页 / 共37页
VC++计算器.docx_第4页
第4页 / 共37页
VC++计算器.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

VC++计算器.docx

《VC++计算器.docx》由会员分享,可在线阅读,更多相关《VC++计算器.docx(37页珍藏版)》请在冰豆网上搜索。

VC++计算器.docx

VC++计算器

西安科技大学

《VC++程序设计》

实验报告

题目科学计算器

院、系(部)计算机科学与技术学院

专业及班级计算机科学与技术专业1203班

学号1208030303

姓名魏妍妍

日期2014.4.13

 

1题目要求

仿照windows再带计算器,基于VisualC++.NET(2008)的对话框MFC完成一个小型科学计算器。

如下图:

2功能需求

整个系统要具有的功能包括:

各个键的响应、加减乘除、余弦正弦正切等计算,等等功能。

3总体设计

3.1系统模块

3.2系统业务处理流程

操作流程图

4详细设计

第一步:

创建应用程序框架

利用VS2008创建一个基于MFC的基本对话框应用程序,并添加相应控件,修改其ID:

第二步:

添加添加控件变量

为编辑框添加“CString”型的变量“m_strResult”,其类别为“value”;为QCalculatorDlg类添加成员函数和成员变量,即在“CalculatorDlg.h”文件中添加如下声明:

第三步:

为OnPaint()函数中的else添加如下代码,改变对话框的颜色:

else

{

CPaintDCdc(this);

CRectClientRect;

GetClientRect(ClientRect);

CBrushbkBrush(RGB(253,130,228));

dc.FillRect(ClientRect,&bkBrush);

CDialog:

:

OnPaint();

}

第四步:

为各个键添加控件事件代码

即在对话框上双击各个按钮为各个按钮添加响应函数。

(并在“stdafx.h”文件中添加”include”math.h””).

第五步:

在各个响应函数中添加相应代码

第六步:

测试与实现

CalculatorDlg.cpp文件中计算的主要实现代码如下:

doubleCQCalculatorDlg:

:

GetNumStr(CStringstr)

{

inti=0;

doublerate=10.0,itemp=0.0;

for(i=0;i

{

if(isdigit(str.GetAt(i)))//如果当前字符为数字字符

{

if(rate==10.0)

itemp=itemp*rate+(str.GetAt(i)-'0');//整数处理

else

{

itemp=itemp+rate*(str.GetAt(i)-'0');//小数处理

rate=rate/10;

}

}

elseif(str.GetAt(i)=='.')

rate=0.1;//遇到小数点,转换为小数处理模式

}

return(itemp);

}

voidCQCalculatorDlg:

:

GetStr(CStringstr)

{

inti=0;

intz=0;//数字和运算符的个数总和

doublerate=10.0,itemp=0.0;

//数组初始化

for(i=0;i<20;i++)

a[i]=1000000.0;

for(i=0;i<10;i++)

b[i]='';

//将数字存储到数组a中,运算符存储到数组b中

for(i=0;i

{

if(isdigit(str.GetAt(i)))

{

if(rate==10.0)

itemp=itemp*rate+(str.GetAt(i)-'0');

else

{

itemp=itemp*rate+(str.GetAt(i)-'0');

rate=rate/10;

}

}

else

if(str.GetAt(i)=='.')

rate=0.1;

elseif(str.GetAt(i)=='+')

{

a[z]=itemp;

itemp=0;

z++;

b[z]='+';

z++;

rate=10.0;

}

elseif(str.GetAt(i)=='-')

{

a[z]=itemp;

itemp=0;

z++;

b[z]='-';

z++;

rate=10.0;

}

elseif(str.GetAt(i)=='*')

{

a[z]=itemp;

itemp=0;

z++;

b[z]='*';

z++;

rate=10.0;

}

elseif(str.GetAt(i)=='/')

{

a[z]=itemp;

itemp=0;

z++;

b[z]='/';

z++;

rate=10.0;

}

}

a[z]=itemp;

s=z;//保存数字和运算符的总个数

}

voidCQCalculatorDlg:

:

Bracket(CStringstr0)

{

CStringstr1="",str2="",str3="";//括号之前的字符串保存在str1,括号中的保存在str2,括号后的保存在str3

inti=0;

for(i=0;i

{

if(str0.GetAt(i)=='(')

{

i++;

for(;i

{

if(str0.GetAt(i)==')')

break;

str2+=str0.GetAt(i);

}

i++;

for(;i

{

str3+=str0.GetAt(i);

}

}

else

str1+=str0.GetAt(i);

}

//计算括号中运算式的值

GetStr(str2);

GetResult();

for(i=0;i

if(str0.GetAt(i)=='(')

str2.Format("%lf",a[0]);//将str2替换为括号中运算结果的字符串

m_strResult=str1+str2+str3;

}

voidCQCalculatorDlg:

:

GetResult(void)//得到结果

{

inti=0,x=0,y=1,t=0,z=1;

//把乘法全部转换为除法

for(i=0;i<=s;i++)

{

if(b[i]=='/')

{

a[i+1]=1/a[i+1];

b[i]='*';

}

}

//计算乘法

for(i=0;i

{

if(b[i]=='*')

{

if(i-t==2)

{

a[t-z]=a[t-z]*a[i+1];

z+=2;

}

else

a[i-1]=a[i-1]*a[i+1];

b[i]='';

a[i+1]=1000000.0;

t=i;

}

}

//整理数组

for(i=0;i

{

if(a[i]!

=1000000.0)

{

a[x]=a[i];

x=x+2;

}

if(b[i]!

='')

{

b[y]=b[i];

y+=2;

}

}

//计算只有加减运算的表达式

for(i=0;i<=y-2;i++)

{

if(b[i]=='+')

{

a[0]=a[0]+a[i+1];

}

if(b[i]=='-')

{

a[0]=a[0]-a[i+1];

}

}

}

voidCQCalculatorDlg:

:

hex(intn)

{

CStringstr;

intx;

if(n/16!

=0)

hex(n/16);

x=n%16;

if(x>=0&&x<=9)

{

str.Format("%d",x);

str_hex+=str;

}

else

str_hex+=(char)(x+55);

}

voidCQCalculatorDlg:

:

OnBnClickedNum0()//"0"

{

//TODO:

在此添加控件通知处理程序代码

UpdateData(TRUE);//将对话框中的值传给控件变量

if(OperatorPressed==true||Restarted==true)

m_strResult="0";//如果之前是求结果或者清零操作,则直接显示输入数字

else

m_strResult+="0";//之前处于输入状态,则继续追加

OperatorPressed=false;//此时不再处于输出运算结果状态

Restarted=false;//此时不处于清零状态

UpdateData(FALSE);//将控件变量的值传给显示框

}

voidCQCalculatorDlg:

:

OnBnClickedNum1()//"1"

{

//TODO:

在此添加控件通知处理程序代码

UpdateData(TRUE);//将对话框中的值传给控件变量

if(OperatorPressed==true||Restarted==true)

m_strResult="1";//如果之前是求结果或者清零操作,则直接显示输入数字

else

m_strResult+="1";//之前处于输入状态,则继续追加

OperatorPressed=false;//此时不再处于输出运算结果状态

Restarted=false;//此时不处于清零状态

UpdateData(FALSE);//将控件变量的值传给显示框

}

voidCQCalculatorDlg:

:

OnBnClickedNum2()//"2"

{

//TODO:

在此添加控件通知处理程序代码

UpdateData(TRUE);//将对话框中的值传给控件变量

if(OperatorPressed==true||Restarted==true)

m_strResult="2";//如果之前是求结果或者清零操作,则直接显示输入数字

else

m_strResult+="2";//之前处于输入状态,则继续追加

OperatorPressed=false;//此时不再处于输出运算结果状态

Restarted=false;//此时不处于清零状态

UpdateData(FALSE);//将控件变量的值传给显示框

}

voidCQCalculatorDlg:

:

OnBnClickedNum3()//"3"

{

//TODO:

在此添加控件通知处理程序代码

UpdateData(TRUE);//将对话框中的值传给控件变量

if(OperatorPressed==true||Restarted==true)

m_strResult="3";//如果之前是求结果或者清零操作,则直接显示输入数字

else

m_strResult+="3";//之前处于输入状态,则继续追加

OperatorPressed=false;//此时不再处于输出运算结果状态

Restarted=false;//此时不处于清零状态

UpdateData(FALSE);//将控件变量的值传给显示框

}

voidCQCalculatorDlg:

:

OnBnClickedNum4()//"4"

{

//TODO:

在此添加控件通知处理程序代码

UpdateData(TRUE);//将对话框中的值传给控件变量

if(OperatorPressed==true||Restarted==true)

m_strResult="4";//如果之前是求结果或者清零操作,则直接显示输入数字

else

m_strResult+="4";//之前处于输入状态,则继续追加

OperatorPressed=false;//此时不再处于输出运算结果状态

Restarted=false;//此时不处于清零状态

UpdateData(FALSE);//将控件变量的值传给显示框

}

voidCQCalculatorDlg:

:

OnBnClickedNum5()//"5"

{

//TODO:

在此添加控件通知处理程序代码

UpdateData(TRUE);//将对话框中的值传给控件变量

if(OperatorPressed==true||Restarted==true)

m_strResult="5";//如果之前是求结果或者清零操作,则直接显示输入数字

else

m_strResult+="5";//之前处于输入状态,则继续追加

OperatorPressed=false;//此时不再处于输出运算结果状态

Restarted=false;//此时不处于清零状态

UpdateData(FALSE);//将控件变量的值传给显示框

}

voidCQCalculatorDlg:

:

OnBnClickedNum6()//"6"

{

//TODO:

在此添加控件通知处理程序代码

UpdateData(TRUE);//将对话框中的值传给控件变量

if(OperatorPressed==true||Restarted==true)

m_strResult="6";//如果之前是求结果或者清零操作,则直接显示输入数字

else

m_strResult+="6";//之前处于输入状态,则继续追加

OperatorPressed=false;//此时不再处于输出运算结果状态

Restarted=false;//此时不处于清零状态

UpdateData(FALSE);//将控件变量的值传给显示框

}

voidCQCalculatorDlg:

:

OnBnClickedNum7()//"7"

{

//TODO:

在此添加控件通知处理程序代码

UpdateData(TRUE);//将对话框中的值传给控件变量

if(OperatorPressed==true||Restarted==true)

m_strResult="7";//如果之前是求结果或者清零操作,则直接显示输入数字

else

m_strResult+="7";//之前处于输入状态,则继续追加

OperatorPressed=false;//此时不再处于输出运算结果状态

Restarted=false;//此时不处于清零状态

UpdateData(FALSE);//将控件变量的值传给显示框

}

voidCQCalculatorDlg:

:

OnBnClickedNum8()//"8"

{

//TODO:

在此添加控件通知处理程序代码

UpdateData(TRUE);//将对话框中的值传给控件变量

if(OperatorPressed==true||Restarted==true)

m_strResult="8";//如果之前是求结果或者清零操作,则直接显示输入数字

else

m_strResult+="8";//之前处于输入状态,则继续追加

OperatorPressed=false;//此时不再处于输出运算结果状态

Restarted=false;//此时不处于清零状态

UpdateData(FALSE);//将控件变量的值传给显示框

}

voidCQCalculatorDlg:

:

OnBnClickedNum9()//"9"

{

//TODO:

在此添加控件通知处理程序代码

UpdateData(TRUE);//将对话框中的值传给控件变量

if(OperatorPressed==true||Restarted==true)

m_strResult="9";//如果之前是求结果或者清零操作,则直接显示输入数字

else

m_strResult+="9";//之前处于输入状态,则继续追加

OperatorPressed=false;//此时不再处于输出运算结果状态

Restarted=false;//此时不处于清零状态

UpdateData(FALSE);//将控件变量的值传给显示框

}

voidCQCalculatorDlg:

:

OnBnClickedBackspace()//"退格"

{

//TODO:

在此添加控件通知处理程序代码

UpdateData(TRUE);

if(m_strResult!

="0"&&m_strResult.GetLength()>1)

{

m_strResult=m_strResult.Left(m_strResult.GetLength()-1);//目前显示非零并且长度大于

}

else

{

Restarted=true;

m_strResult="0";

}

UpdateData(FALSE);

}

voidCQCalculatorDlg:

:

OnBnClickedsin()//"sin"

{

//TODO:

在此添加控件通知处理程序代码

UpdateData(TRUE);

doubleresult;

result=sin(GetNumStr(m_strResult)*m_PI/180);

m_strResult.Format("%lf",result);

OperatorPressed=true;

UpdateData(FALSE);

}

voidCQCalculatorDlg:

:

OnBnClickedCos()//"cos"

{

//TODO:

在此添加控件通知处理程序代码

UpdateData(TRUE);

doubleresult;

result=cos(GetNumStr(m_strResult)*m_PI/180);

m_strResult.Format("%lf",result);

OperatorPressed=true;

UpdateData(FALSE);

}

voidCQCalculatorDlg:

:

OnBnClickedTan()//"tan"

{

//TODO:

在此添加控件通知处理程序代码

UpdateData(TRUE);

doubleresult;

result=tan(GetNumStr(m_strResult)*m_PI/180);

m_strResult.Format("%lf",result);

OperatorPressed=true;

UpdateData(FALSE);

}

voidCQCalculatorDlg:

:

OnBnClickedSqrt()//"√"

{

//TODO:

在此添加控件通知处理程序代码

UpdateData(TRUE);

doubleresult;

result=sqrt(GetNumStr(m_strResult));

m_strResult.Format("%lf",result);

OperatorPressed=true;

UpdateData(FALSE);

}

voidCQCalculatorDlg:

:

OnBnClickedIn()//"In"

{

//TODO:

在此添加控件通知处理程序代码

UpdateData(TRUE);

doubleresult;

result=log(GetNumStr(m_strResult));

m_strResult.Format("%lf",result);

OperatorPressed=true;

UpdateData(FALSE);

}

voidCQCalculatorDlg:

:

OnBnClickedEqual()//"="

{

//TODO:

在此添加控件通知处理程序代码

UpdateData(TRUE);

//计算结果

Bracket(m_strResult);

GetStr(m_strResult);

GetResult();

//显示数据

m_strResult.Format("%1f",a[0]);

UpdateData(FALSE);

OperatorPressed=true;

}

voidCQCalculatorDlg:

:

OnBnClickedDot()//"."

{

//TODO:

在此添加控件通知处理程序代码

UpdateData(TRUE);//将对话框中的值传给控件变量

if(OperatorPressed==true||Restarted==true)

m_strResult=".";//如果之前是求结果或者清零操作,则直接显示输入数字

else

m_strResult+=".";//之前处于输入状态,则继续追加

OperatorPressed=false;//此时不再处于输出运算结果状态

Restarted=false;//此时不处于清零状态

UpdateData(FALSE);//将控件变量的值传给显示框

}

voidCQCalculatorDlg:

:

OnBnClickedLbracket()//"("

{

//TODO:

在此添加控件通知处理程序代码

UpdateData(TRUE);//将对话框中的值传给控件变量

if(OperatorPressed==true||Restarted==true)

m_strResult="(";//如果之前是求结果或者清零操作,则直接显示输入数字

else

m_strResult+="(";//之前处于输入状态,则继续追加

OperatorPressed=false;//此时不再处于输出运算结果状态

Restarted=

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1