简单计算器可视化程序编程.docx

上传人:b****8 文档编号:13091547 上传时间:2023-06-11 格式:DOCX 页数:27 大小:83.31KB
下载 相关 举报
简单计算器可视化程序编程.docx_第1页
第1页 / 共27页
简单计算器可视化程序编程.docx_第2页
第2页 / 共27页
简单计算器可视化程序编程.docx_第3页
第3页 / 共27页
简单计算器可视化程序编程.docx_第4页
第4页 / 共27页
简单计算器可视化程序编程.docx_第5页
第5页 / 共27页
简单计算器可视化程序编程.docx_第6页
第6页 / 共27页
简单计算器可视化程序编程.docx_第7页
第7页 / 共27页
简单计算器可视化程序编程.docx_第8页
第8页 / 共27页
简单计算器可视化程序编程.docx_第9页
第9页 / 共27页
简单计算器可视化程序编程.docx_第10页
第10页 / 共27页
简单计算器可视化程序编程.docx_第11页
第11页 / 共27页
简单计算器可视化程序编程.docx_第12页
第12页 / 共27页
简单计算器可视化程序编程.docx_第13页
第13页 / 共27页
简单计算器可视化程序编程.docx_第14页
第14页 / 共27页
简单计算器可视化程序编程.docx_第15页
第15页 / 共27页
简单计算器可视化程序编程.docx_第16页
第16页 / 共27页
简单计算器可视化程序编程.docx_第17页
第17页 / 共27页
简单计算器可视化程序编程.docx_第18页
第18页 / 共27页
简单计算器可视化程序编程.docx_第19页
第19页 / 共27页
简单计算器可视化程序编程.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

简单计算器可视化程序编程.docx

《简单计算器可视化程序编程.docx》由会员分享,可在线阅读,更多相关《简单计算器可视化程序编程.docx(27页珍藏版)》请在冰点文库上搜索。

简单计算器可视化程序编程.docx

简单计算器可视化程序编程

IMBstandardizationoffice【IMB5AB-IMBK08-IMB2C】

 

简单计算器可视化程序编程

简单计算器

一、基本功能描述二进制、八进制、十进制及十六进制数的加、减、乘、除、乘方、取模等简单计算

科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运行

以角度、弧度两种方式实现上述部分函数

具备历史计算的记忆功能

对不正确的表达式能指出其错误原因

二、流程图

图1输入数据子函数流程图

图2

三、设计步骤

打开MicrosoftVisualC++,在文件中点击新建,在弹出框内选择MFCAppWizard[exe]工程,输入工程名Calculter及其所在位置,点击确定,如图3所示。

图3新建MFCAppWizard[exe]工程

将弹出MFCAppWizard-step1对话框,选择基本对话框,点击完成,如图4所示。

图4基本对话框

这样,MFCAppWizard就建立了一个基于对话窗口的程序框架,如图5所示。

图5新建的对话框

四、界面设计

1、创建控件

在图5所示的ResoureView选项卡中打开Dialog资源组,双击IDD_CALCULATOR_DIALOG,在右边的窗口中显示出待编辑的对话框。

开始摆放控件,包括编辑框和按钮的创建。

按钮的创建以“1”为例进行介绍,其他按钮的创建可参照此进行操作。

1)在图5中Controls的“编辑框”按钮上单击鼠标左键,在对话框编辑窗口上合适的位置按下鼠标左键并拖动鼠标画出一个大小合适的编辑框。

在编辑框上单击鼠标右键,在弹出的快捷莱单中选择属性选项,此时弹出Edit属性对话框,如图6所示,在该对话框中输入ID属性。

图6Edit属性对话框

2)在图3中Controls的“Button”按钮上单击鼠标左键,在对话框上的合适的位置上按下鼠标左键并拖动鼠标画出一个大小合适的下压式按钮。

在按钮上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时也弹出PushButton属性对话框,如图7所示,在该对话框中输入控件的ID值和标题属性。

图7PushButton属性

按照上面的操作过程编辑其他按钮和编辑框等对象的属性。

表1各按钮和编辑框等对象的属性

对象

ID

标题或说明

编辑框

IDC_DC_EDIT_INPUT

结果显示

按钮

IDC_BUTTON1

1

按钮

IDC_BUTTON2

2

按钮

IDC_BUTTON3

3

按钮

IDC_BUTTON4

4

按钮

IDC_BUTTON5

5

按钮

IDC_BUTTON6

6

按钮

IDC_BUTTON7

7

按钮

IDC_BUTTON8

8

按钮

IDC_BUTTON9

9

按钮

IDC_BUTTON10

0

按钮

IDC_BUTTON11

.

按钮

IDC_BUTTON12

空格

按钮

IDC_BUTTON23

-

按钮

IDC_BUTTON26

*

按钮

IDC_BUTTON27

/

按钮

IDC_BUTTON38

sqrt

按钮

IDC_BUTTON30

%

按钮

IDC_BUTTON25

^

按钮

IDC_BUTTON31

sin

按钮

IDC_BUTTON32

cos

按钮

IDC_BUTTON33

tan

按钮

IDC_BUTTON34

cot

按钮

IDC_BUTTON40

sin~1

按钮

IDC_BUTTON41

cos~1

按钮

IDC_BUTTON35

log

按钮

IDC_BUTTON36

ln

按钮

IDC_BUTTON14

a

按钮

IDC_BUTTON15

b

按钮

IDC_BUTTON16

c

按钮

IDC_BUTTON17

d

按钮

IDC_BUTTON18

e

按钮

IDC_BUTTON19

f

按钮

IDC_BUTTON13

退格

按钮

IDC_BUTTON37

e^

按钮

IDC_BUTTON22

清空

按钮

IDOK

计算

按钮

IDC_RADIO_DEGREE

角度

按钮

IDC_RADIO_RADIAN

弧度

按钮

IDC_STATIC

计算结果

按钮

IDC_BTN_HISTREXP

历史表达式

按钮

IDCANCEL

退出

按钮

IDC_BTN_CONVERT

进制

完成后界面如图8所示。

图8计算器界面

五、计算器源程序代码

;

elseif(decimal>16)

{

for(inti=();i

str+=".0";

}

else

{

for(inti=0;i<-decimal;i++)(0,"0");

(0,".");

}

if(sign==1)(0,"-");

returnstr;

}

doubleCCalculation:

:

StoN(CStringstr)

{

char*stopstring;

doublex;

x=strtod((0),&stopstring);

m_strTmp=stopstring;

returnx;

}

CStringCCalculation:

:

TwoE(CStringstrExp)

{

doublex2,y,x1=StoN(strExp);

strExp=m_strTmp;

charop=(0);

(0);

x2=StoN(strExp);

if(m_strTmp!

="")return"ERROR_"+m_strTmp+"未知符号_";

if(op=='+'){y=x1+x2;}

elseif(op=='*'){y=x1*x2;}

elseif(op=='-'){y=x1-x2;}

elseif(op=='^'){y=pow(x1,x2);}

elseif(op=='/'){y=x1/x2;}

elseif(op=='%'){y=fmod(x1,x2);}

elsereturn"ERROR_"+m_strTmp+"未知运算符_";

returnNtoS(y);

}

CStringCCalculation:

:

SingleE(CStringop,doubledx)

{

if(op=="ln")

{

returnNtoS(log(dx));

}

elseif(op=="log")

{

returnNtoS(log10(dx));

}

elseif(op=="sqr")

{

returnNtoS(sqrt(dx));

}

elseif(op=="e^")

{

returnNtoS(exp(dx));

}

elseif(op=="abs")

{

returnNtoS(fabs(dx));

}

elseif(op=="ac")

{

returnNtoS(acos(dx));

}

elseif(op=="as")

{

returnNtoS(asin(dx));

}

elseif(op=="at")

{

returnNtoS(atan(dx));

}

if(m_bDegree)dx=dx*PI/180;

if(op=="tan")

{

returnNtoS(tan(dx));

}

elseif(op=="sin")

{

returnNtoS(sin(dx));

}

elseif(op=="cos")

{

returnNtoS(cos(dx));

}

elseif(op=="cot")

{

returnNtoS(1/tan(dx));

}

elseif(op=="sh")

{

returnNtoS(sinh(dx));

}

elseif(op=="ch")

{

returnNtoS(cosh(dx));

}

elseif(op=="th")

{

returnNtoS(sinh(dx)/cosh(dx));

}

elseif(op=="exp")

{

returnNtoS(pow(10,dx));

}

return"ERROR"+op+"_未知函数_";

}

intCCalculation:

:

LocateLBra(CStringstrExp)

{

intlen=();

intpos=-1;

for(inti=0;i

{

if(pos>=0&&(i)==')')break;

if(i)=='(')

{

pos=i;

}

}

returnpos;

}

voidCCalculation:

:

DelBracket(CString*strExp)

{

intpos=LocateLBra(*strExp);

inti,len=strExp->GetLength();

if(pos==-1){*strExp="ERROR_无效表达式_";return;}

for(i=pos;iGetAt(i)==')')break;

CStringstr;

str=strExp->Mid(pos+1,i-pos-1);

MultiE(&str);

strExp->Delete(pos,i-pos+1);

strExp->Insert(pos,str);

}

voidCCalculation:

:

MultiE(CString*strExp)

{

if(strExp->IsEmpty())*strExp="ERROR_函数表达式为空_";

if(IsDigital(*strExp)){return;}

while

(1)/*处理所有的一元运算*/

{

for(inti=0;i

{

intpos=strExp->Find(opt[i]);

if(pos!

=-1)

{

CStringstr=strExp->Right(strExp->GetLength()-pos-opt[i].GetLength());

doubledx=StoN(str);

if(m_strTmp==str){*strExp="ERROR"+str+"_无法识别的函数_";return;}

strExp->Delete(pos,strExp->GetLength()-pos);

*strExp+=SingleE(opt[i],dx)+m_strTmp;

MinusMinus(strExp);

if(pos>=1)

{

charch=strExp->GetAt(pos-1);

if(ch>=48&&ch<=57)

{*strExp="ERROR_缺少二元运算符_";return;}

}

break;

}

}

if(i==FUNCNUM)break;

}

ind('-');

if(tmpos==-1)break;

elsepos+=tmpos;

if(pos==0&&strExp->GetAt(pos+1)=='-'||pos>0)

{

if(strExp->GetAt(pos+1)=='+')

{

strExp->Delete(pos+1);

pos=0;

continue;

}

/*********处理连减(如:

----1)的情况***********/

intnCount=0;

while

(1)

{

if(++pos>0)

{

if(strExp->GetAt(pos)!

='-')break;

elsenCount++;

}

elsebreak;

}

if(nCount>0)

{

strExp->Delete(pos-nCount-1,nCount+1);

if(nCount%2==0)strExp->Insert(pos-nCount-1,"-");

elseif(pos-nCount-1>0)strExp->Insert(pos-nCount-1,"+");

pos=0;

continue;

}

elsepos--;

/***********************************************/

if(pos>0&&strExp->GetAt(pos-1)=='+')

{

pos++;

continue;

}

Calcu(strExp,pos);

}

elsepos++;

}

pos=0;

while

(1)

{

pos=strExp->Find('+');

ind('+');

if(pos==-1)break;

etLength());

strExp->Insert(pos,m_strConValue[i]);

if(pos>=1)

{

charch=strExp->GetAt(pos-1);

if(ch>=48&&ch<=57||ch==41)

{*strExp="缺少二元运算符";return;}

}

pos=strExp->Find(m_strConName[i]);

}

}

}

CStringCCalculation:

:

ModiResult(CStringstrRes)

{

if("#IN")!

=-1)return"结果有溢出或值域越界";

/*****************去掉保护括号**********************/

if(0)=='(')(0);

if()-1)==')')()-1);

/***************************************************/

intpos=(".");CStringstr="";

if(pos!

=-1)

{

if(pos==0)strRes="0"+strRes;

elseif(0)=='-'&&

(1)=='.')(1,"0");

}

if(pos>16)

{

(pos);

(1,".");

("%d",pos-1);

str="E"+str;

}

pos=(".");

if(pos==0||pos==1&&(0)=='0')

{

for(inti=pos+1;i<();i++)

{

if(i)!

='0')break;

}

if(i>4)

{

("E-%d",i-2);

(pos,i-1);

(1,".");

}

}

strRes=(pos+16)+str;;

if(pos!

=-1)

{

strDF=()-pos-1);

(pos,()-pos);

}

();

len=();

for(i=0;i

{

ch=(i);

dx+=(ch-48)*pow(8,i);

}

len=();

for(i=0;i

{

ch=(i);

dx+=(ch-48)*pow(8,-i-1);

}

strTmp=NtoS(dx);

strExp->Insert(index+1,strTmp);

pos=strExp->Find("xo");

}

}

voidCCalculation:

:

Hex2Dec(CString*strExp)

{

intlen,i,index,pos=strExp->Find("xh");

CStringstrTmp,strDF;

charch;

doubledx;

while(pos!

=-1)

{

dx=0;strTmp="";strDF="";

strExp->Delete(pos,2);

for(i=pos-1;i>=0;i--)

{

ch=strExp->GetAt(i);

if(ch>=48&&ch<=57||ch>=97&&ch<=102||ch==46)

{

(0,strExp->Mid(i,1));

strExp->Delete(i);

}

elsebreak;

}

if(i==pos-1){*strExp="ERROR_缺少二元运算符_";return;}

index=i;

pos=0;

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

{

if(i)=='.')pos++;

if(pos>1){*strExp="ERROR_缺少二元运算符_";return;}

}

pos=(".");

if(pos!

=-1)

{

strDF=()-pos-1);

(pos,()-pos);

}

();

len=();

for(i=0;i

{

ch=(i);

if(ch>=48&&ch<=57);

if(pos!

=-1)

{

strDF=()-pos-1);

(pos,()-pos);

}

();

len=();

for(i=0;i

{

ch=(i);

dx+=(ch-48)*pow(2,i);

}

len=();

for(i=0;i

{

ch=(i);

dx+=(ch-48)*pow(2,-i-1);

}

strTmp=NtoS(dx);

strExp->Insert(index+1,strTmp);

pos=strExp->Find("xb");

}

}

voidCCalculation:

:

Dec2Hex(CString*strExp/*strExp须为数字*/)

{

boolbMinus=0;

if(strExp->GetAt(0)=='-')

{

bMinus=1;

strExp->Delete(0);

}

intpos=strExp->Find('.');

CStringstr,strDec;

intnDecInt;

doubledDec;

if(pos!

=-1)

{

strDec=strExp->Left(pos);

nDecInt=atoi(0));

strDec=strExp->Right(strExp->GetLength()-pos);

}

else

{

nDecInt=atoi(strExp->GetBuffer(0));

}

strExp->Empty();

while(nDecInt!

=0)

{

intnTmp=nDecInt%16;

if(nTmp==10)str="a";

elseif(nTmp==11)str="b";

elseif(nTmp==12)str="c";

elseif(nTmp==13)str="d";

elseif(nTmp==14)str="e";

elseif(nTmp==15)str="f";

else("%d",nTmp);

nDecInt/=16;

strExp->Insert(0,str);

}

*strExp+=".";

if(pos!

=-1)

{

dDec=StoN(strDec);

intnCount=0;

while(dDec!

=0)

{

dDec*=16;

intnTmp=dDec;

if(nTmp==10)str="a";

elseif(nTmp==11)str="b";

elseif(nTmp==12)str="c";

elseif(nTmp==13)str="d";

elseif(nTmp==14)str="e";

elseif(nTmp==15)str="f";

else("%d",nTmp);

*strExp+=(pos);

dDec-=nTmp;

if(++nCount==17)break;

}

}

if(bMinus)strExp->Insert(0,"-");

if(strExp->Find("-1")!

=-1&&bMinus!

=1)*strExp="太大无法表示";

}

voidCCalculation:

:

Dec2Oct(CString*strExp)

{

boolbMinus=0;

if(strExp->GetAt(0)=='-')

{

bMinus=1;

strExp->Delete(0);

}

intpos=strExp->Find('.');

CStringstr,strDec;

intnDecInt;

doubledDec;

if(pos!

=-1)

{

strDec=strExp->Left(pos);

nDecInt=atoi(0));

strDec=strExp->Right(strExp->GetLength()-pos);

}

else

{

nDecInt=atoi(strExp->GetBuffer(0));

}

strExp->Empty();

while(nDecInt!

=0)

{

intnTmp=nDecInt%8;

("%d",nTmp);

nDecInt

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

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

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2