簡單計算器可視化程序編程_第1頁
簡單計算器可視化程序編程_第2頁
簡單計算器可視化程序編程_第3頁
簡單計算器可視化程序編程_第4頁
簡單計算器可視化程序編程_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、簡單計算器、根本功能描述二進制、八進制、十進制及十六進制數(shù)的加、減、乘、除、乘方、取模等簡單計算科學計算函數(shù),包括反正弦、反余弦、反正切、反余切、開方、指數(shù)等函數(shù)運行以角度、弧度兩種方式實現(xiàn)上述局部函數(shù)具備歷史計算的記憶功能對不正確的表達式能指出其錯誤原因二、流程圖三、輸入數(shù)據(jù)子函數(shù)圖1輸入數(shù)據(jù)子函數(shù)流程圖設(shè)計步驟翻開MicrosoftVisualC+,在文件中點擊新建,在彈出框內(nèi)選擇MFCAppWizardexe工程,輸入工程名Calculter及其所在位置,點擊確定,如圖3所示.圖3新建MFCAppWizardexe工程將彈出MFCAppWizard-step1對話框,選擇根本對話框,點擊

2、完成,如圖4所示.圖4根本對話框這樣,MFCAppWizard就建立了一個基于對話窗口的程序框架,如圖5所示.圖5新建的對話框四、界面設(shè)計1、創(chuàng)立控件在圖5所示的ResoureView選項卡中翻開Dialog資源組,雙擊IDD_CALCULATOR_DIALOG在右邊的窗口中顯示出待編輯的對話框.開始擺放控件,包括編輯框和按鈕的創(chuàng)立.按鈕的創(chuàng)立以“1為例進行介紹,其他按鈕的創(chuàng)立可參照此進行操作.1在圖5中Controls的編輯框按鈕上單擊鼠標左鍵,在對話框編輯窗口上適宜的位置按下鼠標左鍵并拖動鼠標畫出一個大小適宜的編輯框.在編輯框上單擊鼠標右鍵,在彈出的快捷萊單中選擇屬性選項,此時彈出Edit

3、屬性對話框,如圖6所示,在該對話框中輸入ID屬性.圖6Edit屬性對話框2在圖3中Controls的“Button按鈕上單擊鼠標左鍵,在對話框上的適宜的位置上按下鼠標左鍵并拖動鼠標畫出一個大小適宜的下壓式按鈕.在按鈕上單擊鼠標右鍵,在彈出的快捷菜單中選擇屬性選項,此時也彈出PushButton屬性對話框,如圖7所示,在該對話框中輸入控件的ID值和標題屬性.圖7PushButton屬性根據(jù)上面的操作過程編輯其他按鈕和編輯框等對象的屬性.表1各按鈕和編輯框等對象的屬性對象ID標題或說明編輯框IDC_DC_EDIT_INPUT結(jié)果顯示按鈕IDC_BUTTON11按鈕IDC_BUTTON22按鈕IDC

4、_BUTTON33按鈕IDC_BUTTON44按鈕IDC_BUTTON55按鈕IDC_BUTTON66按鈕IDC_BUTTON77按鈕IDC_BUTTON88按鈕IDC_BUTTON99按鈕IDC_BUTTON100按鈕IDC_BUTTON11.按鈕IDC_BUTTON12空格按鈕IDC_BUTTON23-按鈕IDC_BUTTON26*按鈕IDC_BUTTON27/按鈕IDC_BUTTON38sqrt按鈕IDC_BUTTON30%按鈕IDC_BUTTON25A按鈕IDC_BUTTON31sin按鈕IDC_BUTTON32cos按鈕IDCBUTTON33tan按鈕IDC_BUTTON34cot按

5、鈕IDC_BUTTON40sin-1按鈕IDCBUTTON41cos-1按鈕IDCBUTTON35log按鈕IDC_BUTTON36In按鈕IDCBUTTON14a按鈕IDCBUTTON15b按鈕IDCBUTTON16c按鈕IDCBUTTON17d按鈕IDCBUTTON18e按鈕IDCBUTTON19f按鈕IDCBUTTON13退格按鈕IDCBUTTON37eA按鈕IDC_BUTTON22清空按鈕IDOK計算按鈕IDC_RADIO_DEGREE角度按鈕IDC_RADIO_RADIAN弧度按鈕IDC_STATIC計算結(jié)果按鈕IDC_BTN_HISTREXP歷史表達式按鈕IDCANCEL退出按鈕I

6、DC_BTN_CONVERT進制完成后界面如圖8所小圖8計算器界面五、計算器源程序代碼;elseif(decimal>16)(for(inti=();i<decimal;i+)str+="0"str+=".0"else(for(inti=0;i<-decimal;i+)(0,"0");(0,".");if(sign=1)(0,"-");returnstr;doubleCCalculation:StoN(CStringstr)(char*stopstring;doublex;x=

7、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

8、="-')y=x1-x2;elseif(op='A')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="lo

9、g")returnNtoS(log10(dx);elseif(op="sqr")returnNtoS(sqrt(dx);elseif(op="eA")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);

10、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

11、(dx);)elseif(op="th")(returnNtoS(sinh(dx)/cosh(dx);)elseif(op="exp")(returnNtoS(pow(10,dx);)return"ERROR"+op+"_未知函數(shù)_;)intCCalculation:LocateLBra(CStringstrExp)(intlen=();intpos=-1;for(inti=0;i<len;i+)(if(pos>=0&&(i)=')')break;if(i)='('

12、)(pos=i;returnpos;voidCCalculation:DelBracket(CString*strExp)intpos=LocateLBra(*strExp);inti,len=strExp->GetLength();if(pos=-1)*strExp="ERROR_無效表達式_"return;for(i=pos;i<len;i+)if(strExp->GetAt(i)=')')break;CStringstr;str=strExp->Mid(pos+1,i-pos-1);MultiE(&str);strExp

13、->Delete(pos,i-pos+1);strExp->Insert(pos,str);voidCCalculation:MultiE(CString*strExp)II.if(strExp->IsEmpty()*strExp="ERROR_函數(shù)表達式為空if(IsDigital(*strExp)return;while(1)/*處理所有的一元運算*/for(inti=0;i<FUNCNUM;i+)intpos=strExp->Find(opti);if(pos!=-1)CStringstr=strExp->Right(strExp->G

14、etLength()-pos-opti.GetLength();doubledx=StoN(str);if(m_strTmp=str)*strExp="ERROR"+str+"_無法識別的函數(shù)_"return;strExp->Delete(pos,strExp->GetLength()-pos);*strExp+=SingleE(opti,dx)+m_strTmp;MinusMinus(strExp);if(pos>=1)charch=strExp->GetAt(pos-1);if(ch>=48&&ch<

15、;=57)*strExp="ERROR_缺少二元運算符_"return;break;if(i=FUNCNUM)break;ind('-');if(tmpos=-1)break;elsepos+=tmpos;if(pos=0&&strExp->GetAt(pos+1)='-'11Pos>0)(if(strExp->GetAt(pos+1)="+')(strExp->Delete(pos+1);pos=0;continue;)/*處理連減(如:1)的情況*/intnCount=0;whil

16、e(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-

17、;/*/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_strConValuei);if(pos>=1)(charch=strExp->GetAt(pos-1);if(ch>=48&&am

18、p;ch<=57|ch=41)*strExp="缺少二元運算符"return;pos=strExp->Find(m_strConNamei);CStringCCalculation:ModiResult(CStringstrRes)II.if("#IN")!=-1)return"結(jié)果有溢出或值域越界/*去掉保護括號*/if(0)='(')(0);if()-1)=')')()-1);/*/intpos=(".");CStringstr=""if(pos!=-1)i

19、f(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>4)("E-%d",i-2

20、);(pos,i-1);(1,".");)strRes=(pos+16)+str;if(pos!=-1)(strDF=()-pos-1);(pos,()-pos);)();len=();for(i=0;i<len;i+)(ch=(i);dx+=(ch-48)*pow(8,i);)len=();for(i=0;i<len;i+)(ch=(i);dx+=(ch-48)*pow(8,-i-1);)strTmp=NtoS(dx);strExp->Insert(index+1,strTmp);pos=strExp->Find("xo");)

21、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&a

22、mp;&ch<=10211ch=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)

23、;();len=();for(i=0;i<len;i+)ch=(i);if(ch>=48&&ch<=57);if(pos!=-1)strDF=()-pos-1);(pos,()-pos);();len=();for(i=0;i<len;i+)ch=(i);dx+=(ch-48)*pow(2,i);len=();for(i=0;i<len;i+)(ch=(i);dx+=(ch-48)*pow(2,-i-1);)strTmp=NtoS(dx);strExp->Insert(index+1,strTmp);pos=strExp->Find(&

24、quot;xb");)voidCCalculation:Dec2Hex(CString*strExp/*strExp須為數(shù)字*/)(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->

25、;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(nT

26、mp=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=&qu

27、ot;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:Dec2Oc

28、t(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);)elsenDecInt=atoi(strExp->GetBuffer(0);)strExp->Empty();while(nDecInt!=0)intnTmp=nDecInt%8;("%d",nTmp);nDecInt/=8;strExp->Insert(0,str);)*strExp+="."if(pos!=-1)dDec=StoN(strDec);intnCount=0;while(dDec!=0)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論