軟件課程設(shè)計(jì)基于MFC的多功能計(jì)算器樣本_第1頁
軟件課程設(shè)計(jì)基于MFC的多功能計(jì)算器樣本_第2頁
軟件課程設(shè)計(jì)基于MFC的多功能計(jì)算器樣本_第3頁
軟件課程設(shè)計(jì)基于MFC的多功能計(jì)算器樣本_第4頁
軟件課程設(shè)計(jì)基于MFC的多功能計(jì)算器樣本_第5頁
已閱讀5頁,還剩62頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

題目基于MFC多功能計(jì)算器設(shè)計(jì)一、設(shè)計(jì)目的編寫一種計(jì)算器。二、語言環(huán)境編程語言:C++開發(fā)環(huán)境:VS目的軟件運(yùn)營平臺:Windows64位機(jī)三、軟件功能:圖形化界面。實(shí)現(xiàn)計(jì)算器功能。輸入加減乘除表達(dá)式,可以計(jì)算其成果?;竟δ埽河?jì)算表達(dá)式,計(jì)算階乘,計(jì)算組合數(shù),次冪,求次冪后取余,簡樸分?jǐn)?shù)加減乘除計(jì)算。擴(kuò)展功能:在以上功能完畢基本上,可完畢更高精度計(jì)算,實(shí)現(xiàn)簡樸高精度加減乘除階乘運(yùn)算。

基于MFC多功能計(jì)算器設(shè)計(jì)摘要計(jì)算器是人們尋常生活中常用電子產(chǎn)品之一,在人們生活中有著非常廣泛應(yīng)用,隨著科學(xué)進(jìn)步,計(jì)算器種類和功能也更加豐富。本次課程設(shè)計(jì)旨在基于MFC框架設(shè)計(jì)一種多功能計(jì)算器,可以實(shí)現(xiàn)含括號表達(dá)式計(jì)算,三角函數(shù)、開方、階乘、排列組合等數(shù)學(xué)計(jì)算,進(jìn)制轉(zhuǎn)換,超過longlong范疇整數(shù)運(yùn)算以及簡樸分?jǐn)?shù)四則運(yùn)算。本次設(shè)計(jì)多功能計(jì)算器是基于MFC框架,以C++編程語言完畢,計(jì)算器使用中綴表達(dá)式求值算法計(jì)算含括號表達(dá)式,使用C++原則庫函數(shù)進(jìn)行相應(yīng)數(shù)學(xué)計(jì)算,運(yùn)用Boost庫實(shí)現(xiàn)高精度整數(shù)運(yùn)算。本計(jì)算器不但功能豐富,并且具備美觀、功能清晰且操作以便界面。經(jīng)多次測試,本計(jì)算器能即時(shí)精確地獲得所需計(jì)算成果,并且能在輸入錯誤時(shí)進(jìn)行相應(yīng)解決,充分減少了計(jì)算時(shí)難度,節(jié)約了時(shí)間。通過本次課程設(shè)計(jì),掌握了MFC基本框架,對基本算法有了更加進(jìn)一步理解。核心詞:多功能計(jì)算器;MFC;C++編程語言;表達(dá)式計(jì)算;高精度

目錄課題分析 3總體設(shè)計(jì) 3詳細(xì)設(shè)計(jì) 43.1普通計(jì)算與科學(xué)計(jì)算 43.2高精度計(jì)算 73.3其他計(jì)算 83.3.1分?jǐn)?shù)計(jì)算 83.3.2組合數(shù)計(jì)算 83.3.3進(jìn)制轉(zhuǎn)換 8程序調(diào)試與問題解決 94.1輸入表達(dá)式錯誤引發(fā)程序異常 94.2輸入表達(dá)式格式有誤 94.3計(jì)算排列組合溢出 10運(yùn)行結(jié)果 10總結(jié) 12

課題分析本次設(shè)計(jì)為多功能計(jì)算器,需要實(shí)現(xiàn)各種功能,為了使界面更加美觀,功能更加清晰明了,也為了讓使用者便于操作,因而本計(jì)算器使用MFC中TabControl控件對計(jì)算器進(jìn)行分頁[1],將計(jì)算器分為了四個板塊,分別為:普通計(jì)算、科學(xué)計(jì)算、高精度計(jì)算和其她計(jì)算。普通計(jì)算板塊不但可以實(shí)現(xiàn)普通四則運(yùn)算、次冪及取模運(yùn)算,還可以通過使用中綴表達(dá)式求值算法計(jì)算表達(dá)式值[2];科學(xué)計(jì)算板塊不但包括普通計(jì)算板塊中功能,還可以進(jìn)行三角函數(shù)、階乘、根號以及對數(shù)運(yùn)算;高精度板塊可以實(shí)現(xiàn)大整數(shù)加減乘除次冪與取模計(jì)算;其她板塊中具有分?jǐn)?shù)四則運(yùn)算、組合數(shù)計(jì)算以及進(jìn)制轉(zhuǎn)換功能。程序總體功能框圖如圖1。圖1程序功能框圖總體設(shè)計(jì)圖2所示為整體設(shè)計(jì)流程框圖。由于本次課程設(shè)計(jì)要實(shí)現(xiàn)功能較多,如果放到一種頁面上,既不美觀,功能也不清晰,于是本計(jì)算器使用了MFC中TabControl控件,將計(jì)算器分為四個某些,每個某些擁有不同功能。打開本計(jì)算器后,計(jì)算器變量自動初始化,接著顧客選取自己所需要功能模塊進(jìn)行操作。選取普通計(jì)算或者科學(xué)計(jì)算頁面后,顧客需要點(diǎn)擊計(jì)算器上按鈕來輸入所需計(jì)算表達(dá)式,顧客所輸入表達(dá)式會在編輯框中顯示出來,當(dāng)顧客按下等于后,計(jì)算器會執(zhí)行操作,計(jì)算當(dāng)前編輯框中值,并將成果返回到成果框中進(jìn)行顯示;否則,計(jì)算器會繼續(xù)等待顧客輸入。選取高精度計(jì)算頁面后,顧客可以進(jìn)行超過64位整數(shù)加減乘除、次冪以及取模持續(xù)運(yùn)算。顧客通過按鈕輸入兩個變量以及運(yùn)算符,按下等號即可得到答案,接著顧客可以選取繼續(xù)按下運(yùn)算符,使用本次得到答案作為變量繼續(xù)運(yùn)算,也可以重新輸入進(jìn)行運(yùn)算。選取其她計(jì)算頁面之后,可以看到該頁面分為三個某些,分別是分?jǐn)?shù)計(jì)算、組合數(shù)計(jì)算和進(jìn)制轉(zhuǎn)換。在分?jǐn)?shù)計(jì)算某些,顧客通過鍵盤輸入分?jǐn)?shù)分子和分母,可以進(jìn)行兩個分?jǐn)?shù)之間加減乘除運(yùn)算;在組合數(shù)計(jì)算某些,顧客輸入兩個整數(shù)n和m,點(diǎn)擊計(jì)算后可以得到A(n,m)與C(n,m)值;在進(jìn)制轉(zhuǎn)換某些,顧客輸入一種數(shù)字,選取當(dāng)前數(shù)字進(jìn)制后,再點(diǎn)擊需要轉(zhuǎn)換進(jìn)制即可得到轉(zhuǎn)換后成果。圖2整體設(shè)計(jì)流程圖詳細(xì)設(shè)計(jì)3.1普通計(jì)算與科學(xué)計(jì)算科學(xué)計(jì)算板塊與普通計(jì)算板塊相比,新增了圓周率按鈕與三角函數(shù)、階乘、根號與對數(shù)計(jì)算,其她功能與普通計(jì)算板塊一致,因而一起闡明。一方面,給編輯框添加類型為Value控件變量,變量類型為CString,變量名為result。接下來為每個按鍵添加事件解決程序,并且給清空鍵C添加bool型變量Restarted,初始化為true;給等號添加bool型變量OperatorPressed,初始化為true;給小數(shù)點(diǎn)添加bool型變量pt,初始化為false;給左括號和右括號分別添加int型變量cntleft和cntright,初始化為0。每個按鍵事件解決程序如下所述:(1)按下0到9數(shù)字按鈕。先將編輯框中內(nèi)容更新到編輯框所相應(yīng)變量result中,判斷上一次按鍵與否為等于,或者上一次操作與否將編輯框清空,或者當(dāng)前result末尾字符與否為”)”,若滿足三個中任意一種,那么result等于當(dāng)前所按下字符,否則,在result末尾追加當(dāng)前所按下字符。更新當(dāng)前編輯框關(guān)聯(lián)變量result值到編輯框內(nèi)。詳細(xì)流程如圖3a所示。圖3a按下數(shù)字按鈕圖3b按下小數(shù)點(diǎn)按鈕(2)按下小數(shù)點(diǎn)按鈕。如果當(dāng)前數(shù)字中沒有浮現(xiàn)過小數(shù)點(diǎn)(pt為false)并且最后一位為運(yùn)算符,則在result末尾追加“0.”,否則判斷上一次按鍵與否為等于或上一次操作與否將編輯框清空或者result末尾與否為右括號,如果滿足,那么也在末尾追加“0.”,否則在末尾追加“.”。更新變量到編輯框。過程如圖3b所示。圖3c按下雙目運(yùn)算符按鈕圖3d按下單目運(yùn)算符按鈕(3)按下運(yùn)算符。在本計(jì)算器中,有雙目運(yùn)算符和單目運(yùn)算符兩種。如圖3c所示,按下雙目運(yùn)算符按鈕后,一方面需要判斷當(dāng)前已輸入字符串末尾與否也是一種運(yùn)算符,如果是則將之前運(yùn)算符替代為當(dāng)前所按下運(yùn)算符,如果末尾是左括號,那么在末尾追加0和當(dāng)前運(yùn)算符;若前一位不是運(yùn)算符且當(dāng)前不是第一次按鍵,就在字符串末尾追加該運(yùn)算符,否則字符串等于該運(yùn)算符。這樣做就避免了輸入錯誤而導(dǎo)致計(jì)算錯誤甚至程序崩潰。如圖3d所示,按下單目運(yùn)算符之后,將編輯中字符轉(zhuǎn)換為數(shù)字后進(jìn)行計(jì)算,將成果轉(zhuǎn)化為字符串顯示出來即可。如果編輯框中還存在運(yùn)算符,那么會取第一種運(yùn)算符之前數(shù)字進(jìn)行運(yùn)算。圖3e按下左括號按鈕圖3f按下右括號按鈕(4)按下括號。如圖3e所示,按下左括號后,先判斷編輯框與否已經(jīng)清空,若是,則result等于左括號,否則,找到從右往左第一種運(yùn)算符,在該運(yùn)算符背面加上一種左括號,左括號個數(shù)cntleft加一,更新result值到編輯框。如圖3f所示,按下右括號后,一方面要判斷右括號個數(shù)與否少于左括號個數(shù),如果滿足才干添加右括號,否則忽視該次添加操作;左括號個數(shù)不不大于右括號個數(shù)時(shí),若result最后一位就是左括號,那么在其背面添加0和右括號,如果是其她運(yùn)算符,那么去掉該運(yùn)算符再添加右括號,如果是數(shù)字,則直接添加右括號。右括號個數(shù)cntright加一,更新result值到編輯框。(5)退格按鈕與清空按鈕。按下退格按鈕時(shí),若當(dāng)前編輯框尚未清空,就將該字符串末尾一位刪去,此時(shí)需要判斷與否刪除了左括號、右括號或者是小數(shù)點(diǎn),刪除左右括號時(shí),相應(yīng)cntleft和cntright需要減一,刪除小數(shù)點(diǎn)時(shí),小數(shù)點(diǎn)標(biāo)志pt要變?yōu)閒alse。按下清空按鈕時(shí),編輯框內(nèi)容顯示0,所有變量重新初始化。(6)按下等于按鈕。該處為本計(jì)算器核心,使用了中綴表達(dá)式求值算法,如圖3g所示。由于輸入表達(dá)式是一種字符串,因而一方面需要通過循環(huán)將其中數(shù)字與字符提取出來。使用兩個棧分別存儲數(shù)字與運(yùn)算符[3],如果當(dāng)前運(yùn)算符優(yōu)先級比棧頂元素優(yōu)先級高,則入棧,否則從數(shù)字棧中彈出兩個元素,從符號棧中彈出一種符號,計(jì)算其成果,再將成果壓入數(shù)字棧。最后表達(dá)式成果即為數(shù)字棧棧頂元素,將該數(shù)字轉(zhuǎn)化為字符串后更新到編輯框即可。圖3g按下等于按鈕3.2高精度計(jì)算高精度計(jì)算某些可以進(jìn)行持續(xù)四則運(yùn)算與取模、次冪操作,每次兩個變量參加運(yùn)算,得到成果可以繼續(xù)作為一種變量參加下一次運(yùn)算。在高精度計(jì)算當(dāng)中,按鈕事件響應(yīng)與普通計(jì)算和科學(xué)計(jì)算中按鍵事件響應(yīng)是相似,編輯框關(guān)聯(lián)CString類型變量result,給清空鍵添加bool類型變量Restarted,給等號添加bool類型變量OperatorPressed。圖4高精度計(jì)算實(shí)現(xiàn)高精度辦法有諸多,此處選用了一種較為便捷又精確操作,使用C++Boost庫中multipleprecision工具。輸入需要計(jì)算式子,按下等于即可進(jìn)行計(jì)算,如果式子中包括兩個及其以上雙目運(yùn)算符,只計(jì)算第一次浮現(xiàn)運(yùn)算符和其圖4高精度計(jì)算3.3其她計(jì)算3.3.1分?jǐn)?shù)計(jì)算分?jǐn)?shù)計(jì)算中,顧客輸入待計(jì)算兩個分?jǐn)?shù),點(diǎn)擊所需要進(jìn)行運(yùn)算類型,再按下等號即可進(jìn)行計(jì)算。計(jì)算過程模仿手動計(jì)算過程,a/b+c/d=(a*d+b*c)/(b*d),a/b-c/d=(a*d-b*c)/(b*d),a/b*c/d=ac/bd,a/b/c/d=a*d/b*c,最后再將得到成果化簡。將成果分子與分母GCD(最大公約數(shù))求出,分子與分母同步除以GCD即可得到答案。3.3.2組合數(shù)計(jì)算組合數(shù)計(jì)算中,顧客輸入整數(shù)n和m,點(diǎn)擊計(jì)算按鈕,即可求出A(n,m)與C(n,m)值。計(jì)算過程與手動計(jì)算過程一致,求得n!,(n-m)!,A(n,m)=n!/(n-m)!,求得m!,C(n,m)=A(n,m)/m!。3.3.3進(jìn)制轉(zhuǎn)換進(jìn)制轉(zhuǎn)換中,顧客在轉(zhuǎn)換數(shù)字框中輸入需要轉(zhuǎn)換數(shù)字,選取該數(shù)字當(dāng)邁進(jìn)制,點(diǎn)擊需要轉(zhuǎn)換進(jìn)制即可在下方得到轉(zhuǎn)換后成果。由于輸入N進(jìn)制數(shù)字是字符串,因而計(jì)算器會先將輸入字符串轉(zhuǎn)化為十進(jìn)制整數(shù),接著調(diào)用_itoa_s函數(shù)將該十進(jìn)制數(shù)進(jìn)行進(jìn)制轉(zhuǎn)換。程序調(diào)試與問題解決4.1輸入表達(dá)式錯誤引起程序異常圖5輸入錯誤引起異常將基本功能編寫完畢開始測試程序時(shí),發(fā)現(xiàn),如果輸入表達(dá)式不規(guī)范,程序?qū)‖F(xiàn)異常,如圖5所示。引起該異常錯誤輸入有諸多狀況,通過多次重復(fù)測試,發(fā)現(xiàn)了如下幾種會引起該異常狀況:(1)持續(xù)輸入運(yùn)算符。(2)右括號個數(shù)多于左括號個數(shù)。(3)運(yùn)算符后直接加上右括號。(4)以運(yùn)算符開頭或者左括號后直接加上運(yùn)算符。通過斷點(diǎn)調(diào)試發(fā)現(xiàn),計(jì)算器每次運(yùn)算時(shí),數(shù)字棧每次彈出兩個元素,符號棧彈出一種元素,但是進(jìn)行以上不規(guī)范操作,導(dǎo)致數(shù)字棧中元素只剩余一種時(shí),符號棧中元素個數(shù)依然不不大于等于一,因而數(shù)字??諘r(shí)仍進(jìn)行彈棧操作,浮現(xiàn)錯誤。做出如下解決:(1)在計(jì)算某些,每次判斷數(shù)字?;蛘叻枟Ec否為空,并且在輸入時(shí)判斷與否持續(xù)點(diǎn)擊了運(yùn)算符,如果是,只保存最后一次運(yùn)算符。(2)保證右括號個數(shù)恒不大于等于左括號個數(shù)。(3)如果運(yùn)算符后直接點(diǎn)擊右括號按鈕,則去掉該運(yùn)算符后加上右括號。(4)若表達(dá)式以非*/%^運(yùn)算符開頭,則在前方補(bǔ)0,若左括號為運(yùn)算符,則在左括號與運(yùn)算符之間補(bǔ)0。4.2輸入表達(dá)式格式有誤除引起異常錯誤輸入外,尚有各種錯誤輸入格式,有如下解決:(1)以小數(shù)點(diǎn)或運(yùn)算符開頭。如表達(dá)式“*3+5”“(.3+5)”,在這種狀況下,在小數(shù)點(diǎn)或者運(yùn)算符前自動補(bǔ)零,使顯示對的。(2)數(shù)字后加左括號。如輸入“3+5(”,依照Windows自帶計(jì)算器解決,該括號應(yīng)當(dāng)放在從右往左第一種運(yùn)算符之后,應(yīng)顯示為“3+(5”。(3)左括號后加右括號。錯誤顯示為“()”,同樣按照Windows自帶計(jì)算器解決,在兩個括號中間補(bǔ)零。(4)一種數(shù)字中浮現(xiàn)各種小數(shù)點(diǎn)。最初可以輸入“3.14159.2”這種不對的數(shù)字,因而添加一種叫做ptbool型變量,來判斷該數(shù)字中與否已經(jīng)浮現(xiàn)過小數(shù)點(diǎn)。4.3計(jì)算排列組合溢出計(jì)算A(100,50)時(shí),是將100階乘除以50階乘,這個數(shù)字顯然超過了longlong范疇,因而此處選用cpp_int進(jìn)行計(jì)算。運(yùn)營成果圖6普通計(jì)算板塊(1)選取普通計(jì)算板塊,輸入一種包括加減乘除、次冪和取模表達(dá)式,按下等于后,得到計(jì)算成果,與實(shí)際成果一致。圖7科學(xué)計(jì)算板塊(2)選取科學(xué)計(jì)算板塊,計(jì)算sin(98),計(jì)算成果與Windows自帶計(jì)算器成果一致。圖8高精度計(jì)算板塊(3)選取高精度計(jì)算板塊,計(jì)算100!,計(jì)算成果與Windows自帶計(jì)算器成果一致。圖9a分?jǐn)?shù)計(jì)算板塊(一)圖9b分?jǐn)?shù)計(jì)算板塊(二)(4)選取分?jǐn)?shù)計(jì)算板塊,計(jì)算2/5*4/6得到成果4/15,與實(shí)際成果一致,如圖9a所示。當(dāng)輸入分?jǐn)?shù)分母為0時(shí),分母顯示inputerror,如圖9b所示。圖10a排列組合板塊(一)圖10b排列組合板塊(二)(5)選取計(jì)算排列組合板塊,如圖10a所示,計(jì)算A(100,20)與C(100,20),成果與實(shí)際計(jì)算成果一致。如圖10b所示,當(dāng)輸入n不大于m、n不大于零、m不大于零時(shí),提示error。圖11a進(jìn)制轉(zhuǎn)換板塊(一)圖11b進(jìn)制轉(zhuǎn)換板塊(二)(6)選取進(jìn)制轉(zhuǎn)換板塊,如圖11a所示,將十進(jìn)制數(shù)45487轉(zhuǎn)化為16進(jìn)制數(shù),得到成果b1af,與實(shí)際成果一致;如圖11b所示,當(dāng)輸入待轉(zhuǎn)換數(shù)字進(jìn)制有誤時(shí),顯示inputerror??偨Y(jié)本次課程設(shè)計(jì),不但可以讓咱們學(xué)習(xí)到新知識,同步也能反映咱們對所學(xué)知識掌握限度。從最開始茫然,不懂得如何去,做到逐漸掌握MFC框架基本應(yīng)用,這段過程中,我基本知識和技能,以及自己自學(xué)能力都得到了很大提高。本次課程設(shè)計(jì)是用C++語言編寫,并且使用了MFC框架。在這個過程中,最明顯收獲就是理解和較為純熟地掌握并運(yùn)用了VS開放工具來設(shè)計(jì)界面并編寫程序。這個過程中最困難不是做完一種簡樸計(jì)算器,而是在初步完畢之后不斷地測試以及調(diào)試,發(fā)現(xiàn)程序中所存在問題,并一一解決。這個過程毫無疑問是非常漫長,但是我收獲卻是非常豐富。我懂得了在此后工作發(fā)展和學(xué)習(xí)實(shí)踐過程中,要有細(xì)心與耐心,要肯付出努力,知難而上。通過本次課程設(shè)計(jì),我專業(yè)知識以及能力都得到了很大提高,并且還讓我理解到了自己可以提高空間尚有很大。在此后學(xué)習(xí)生活和工作當(dāng)中,都要獨(dú)立思考,自己動手操作,接受挑戰(zhàn),迎難而上。

參照文獻(xiàn):[1]侯俊杰.進(jìn)一步淺出MFC[M].湖北:華中理工大學(xué)出版社,[2]王迤冉,王華東.表達(dá)式求值一種實(shí)現(xiàn)辦法[J].周口師范學(xué)院學(xué)報(bào),,18(2):31-33[3]李橙,丁國棟.棧在表達(dá)式求值中應(yīng)用[J].電腦知識與技術(shù),(34):8156-5157

//CalculatorDlg.cpp:實(shí)現(xiàn)文獻(xiàn)//#include"stdafx.h"#include"Calculator.h"#include"CalculatorDlg.h"#include"afxdialogex.h"#include"map"#include"stack"#include"Page1.h"#include"Page2.h"usingnamespacestd;#ifdef_DEBUG#definenewDEBUG_NEW#endif//用于應(yīng)用程序“關(guān)于”菜單項(xiàng)CAboutDlg對話框classCAboutDlg:publicCDialogEx{public: CAboutDlg();//對話框數(shù)據(jù)#ifdefAFX_DESIGN_TIME enum{IDD=IDD_ABOUTBOX};#endif protected: virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDV支持//實(shí)現(xiàn)protected: DECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg():CDialogEx(IDD_ABOUTBOX){}voidCAboutDlg::DoDataExchange(CDataExchange*pDX){ CDialogEx::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(CAboutDlg,CDialogEx)END_MESSAGE_MAP()//CCalculatorDlg對話框CCalculatorDlg::CCalculatorDlg(CWnd*pParent/*=NULL*/) :CDialog(IDD_CALCULATOR_DIALOG,pParent){ m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);}voidCCalculatorDlg::DoDataExchange(CDataExchange*pDX){ CDialog::DoDataExchange(pDX); DDX_Control(pDX,IDC_TAB1,m_tab);}BEGIN_MESSAGE_MAP(CCalculatorDlg,CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_NOTIFY(TCN_SELCHANGE,IDC_TAB1,&CCalculatorDlg::OnTcnSelchangeTab1)END_MESSAGE_MAP()//CCalculatorDlg消息解決程序BOOLCCalculatorDlg::OnInitDialog(){ CDialog::OnInitDialog(); //將“關(guān)于...”菜單項(xiàng)添加到系統(tǒng)菜單中。 //IDM_ABOUTBOX必要在系統(tǒng)命令范疇內(nèi)。 ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX<0xF000); CMenu*pSysMenu=GetSystemMenu(FALSE); if(pSysMenu!=NULL) { BOOLbNameValid; CStringstrAboutMenu; bNameValid=strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if(!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu); } } //設(shè)立此對話框圖標(biāo)。當(dāng)應(yīng)用程序主窗口不是對話框時(shí),框架將自動 //執(zhí)行此操作 SetIcon(m_hIcon,TRUE); //設(shè)立大圖標(biāo) SetIcon(m_hIcon,F(xiàn)ALSE); //設(shè)立小圖標(biāo) //TODO:在此添加額外初始化代碼 //SetWindowText(_T("Calculator")); CRecttemprect(0,0,670,450); CWnd::SetWindowPos(NULL,0,0,temprect.Width(),temprect.Height(),SWP_NOZORDER|SWP_NOMOVE); //為TabControl增長兩個頁面 m_tab.InsertItem(0,_T("普通")); m_tab.InsertItem(1,_T("科學(xué)")); m_tab.InsertItem(2,_T("高精度")); m_tab.InsertItem(3,_T("其她")); m_page1.Create(IDD_DIALOG1,GetDlgItem(IDC_TAB1)); m_page2.Create(IDD_DIALOG2,GetDlgItem(IDC_TAB1)); m_page3.Create(IDD_DIALOG3,GetDlgItem(IDC_TAB1)); m_page4.Create(IDD_DIALOG4,GetDlgItem(IDC_TAB1)); //創(chuàng)立兩個對話框 //設(shè)定在Tab內(nèi)顯示范疇 CRectrc; m_tab.GetClientRect(&rc); rc.top+=20; rc.bottom-=0; rc.left+=0; rc.right-=0; m_page1.MoveWindow(&rc); m_page2.MoveWindow(&rc); m_page3.MoveWindow(&rc); m_page4.MoveWindow(&rc); //分別設(shè)立隱藏和顯示 m_page1.ShowWindow(true); m_page2.ShowWindow(false); m_page3.ShowWindow(false); m_page4.ShowWindow(false); m_tab.SetCurSel(0); //保存當(dāng)前選取 returnTRUE;//除非將焦點(diǎn)設(shè)立到控件,否則返回TRUE}voidCCalculatorDlg::OnSysCommand(UINTnID,LPARAMlParam){ if((nID&0xFFF0)==IDM_ABOUTBOX) { CAboutDlgdlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID,lParam); }}//如果向?qū)υ捒蛱砑幼钚』粹o,則需要下面代碼//來繪制該圖標(biāo)。對于使用文檔/視圖模型MFC應(yīng)用程序,//這將由框架自動完畢。voidCCalculatorDlg::OnPaint(){ if(IsIconic()) { CPaintDCdc(this);//用于繪制設(shè)備上下文 SendMessage(WM_ICONERASEBKGND,reinterpret_cast<WPARAM>(dc.GetSafeHdc()),0); //使圖標(biāo)在工作區(qū)矩形中居中 intcxIcon=GetSystemMetrics(SM_CXICON); intcyIcon=GetSystemMetrics(SM_CYICON); CRectrect; GetClientRect(&rect); intx=(rect.Width()-cxIcon+1)/2; inty=(rect.Height()-cyIcon+1)/2; //繪制圖標(biāo) dc.DrawIcon(x,y,m_hIcon); } else { CDialog::OnPaint(); }}//當(dāng)顧客拖動最小化窗口時(shí)系統(tǒng)調(diào)用此函數(shù)獲得光標(biāo)//顯示。HCURSORCCalculatorDlg::OnQueryDragIcon(){ returnstatic_cast<HCURSOR>(m_hIcon);}voidCCalculatorDlg::OnTcnSelchangeTab1(NMHDR*pNMHDR,LRESULT*pResult){ //TODO:在此添加控件告知解決程序代碼 intCurSel=m_tab.GetCurSel(); switch(CurSel) { case0: m_page1.ShowWindow(true); m_page2.ShowWindow(false); m_page3.ShowWindow(false); m_page4.ShowWindow(false); break; case1: m_page1.ShowWindow(false); m_page2.ShowWindow(true); m_page3.ShowWindow(false); m_page4.ShowWindow(false); break; case2: m_page1.ShowWindow(false); m_page2.ShowWindow(false); m_page3.ShowWindow(false); m_page4.ShowWindow(true); break; case3: m_page1.ShowWindow(false); m_page2.ShowWindow(false); m_page3.ShowWindow(true); m_page4.ShowWindow(false); break; } *pResult=0;}

//Page1.cpp:實(shí)現(xiàn)文獻(xiàn)//#include"stdafx.h"#include"CalculatorDlg.h"#include"Calculator.h"#include"Page1.h"#include"afxdialogex.h"#include"map"usingnamespacestd;//CPage1對話框IMPLEMENT_DYNAMIC(CPage1,CDialogEx)CPage1::CPage1(CWnd*pParent/*=NULL*/) :CDialogEx(IDD_DIALOG1,pParent) ,OperatorPressed(true) ,Restarted(true) ,result(_T("0")) ,cntleft(0) ,cntright(0) ,pt(false) ,realans(_T("")){}CPage1::~CPage1(){}voidCPage1::DoDataExchange(CDataExchange*pDX){ CDialogEx::DoDataExchange(pDX); DDX_Text(pDX,IDC_EDIT1,result); DDX_Text(pDX,IDC_ans,realans);}BEGIN_MESSAGE_MAP(CPage1,CDialogEx) ON_BN_CLICKED(IDC_BUTTON7,&CPage1::OnBnClickedButton7) ON_BN_CLICKED(IDC_BUTTON0,&CPage1::OnBnClickedButton0) ON_BN_CLICKED(IDC_BUTTON1,&CPage1::OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON2,&CPage1::OnBnClickedButton2) ON_BN_CLICKED(IDC_BUTTON3,&CPage1::OnBnClickedButton3) ON_BN_CLICKED(IDC_BUTTON4,&CPage1::OnBnClickedButton4) ON_BN_CLICKED(IDC_BUTTON5,&CPage1::OnBnClickedButton5) ON_BN_CLICKED(IDC_BUTTON6,&CPage1::OnBnClickedButton6) ON_BN_CLICKED(IDC_BUTTON8,&CPage1::OnBnClickedButton8) ON_BN_CLICKED(IDC_BUTTON9,&CPage1::OnBnClickedButton9) ON_BN_CLICKED(IDC_BUTTON_plus,&CPage1::OnBnClickedButtonplus) ON_BN_CLICKED(IDC_BUTTON_sub,&CPage1::OnBnClickedButtonsub) ON_BN_CLICKED(IDC_BUTTON_multi,&CPage1::OnBnClickedButtonmulti) ON_BN_CLICKED(IDC_BUTTON_div,&CPage1::OnBnClickedButtondiv) ON_BN_CLICKED(IDC_BUTTON_back,&CPage1::OnBnClickedButtonback) ON_BN_CLICKED(IDC_BUTTON_left,&CPage1::OnBnClickedButtonleft) ON_BN_CLICKED(IDC_BUTTON_right,&CPage1::OnBnClickedButtonright) ON_BN_CLICKED(IDC_BUTTON_mod,&CPage1::OnBnClickedButtonmod) ON_BN_CLICKED(IDC_BUTTON_clear,&CPage1::OnBnClickedButtonclear) ON_BN_CLICKED(IDC_BUTTON_power,&CPage1::OnBnClickedButtonpower) ON_BN_CLICKED(IDC_BUTTON_equal,&CPage1::OnBnClickedButtonequal) ON_BN_CLICKED(IDC_BUTTON_point,&CPage1::OnBnClickedButtonpoint)END_MESSAGE_MAP()//CPage1消息解決程序voidCPage1::OnBnClickedButton0(){ //TODO:在此添加控件告知解決程序代碼 UpdateData(TRUE); intpos=result.GetLength()-1; if(OperatorPressed==true||Restarted==true||result.GetAt(pos)==')') result="0"; elseresult+="0"; OperatorPressed=false; Restarted=false; UpdateData(FALSE);}voidCPage1::OnBnClickedButton1(){ //TODO:在此添加控件告知解決程序代碼 UpdateData(TRUE); intpos=result.GetLength()-1; if(OperatorPressed==true||Restarted==true||result.GetAt(pos)==')') result="1"; elseresult+="1"; OperatorPressed=false; Restarted=false; UpdateData(FALSE);}voidCPage1::OnBnClickedButton2(){ //TODO:在此添加控件告知解決程序代碼 UpdateData(TRUE); intpos=result.GetLength()-1; if(OperatorPressed==true||Restarted==true||result.GetAt(pos)==')') result="2"; elseresult+="2"; OperatorPressed=false; Restarted=false; UpdateData(FALSE);}voidCPage1::OnBnClickedButton3(){ //TODO:在此添加控件告知解決程序代碼 UpdateData(TRUE); intpos=result.GetLength()-1; if(OperatorPressed==true||Restarted==true||result.GetAt(pos)==')') result="3"; elseresult+="3"; OperatorPressed=false; Restarted=false; UpdateData(FALSE);}voidCPage1::OnBnClickedButton4(){ //TODO:在此添加控件告知解決程序代碼 UpdateData(TRUE); intpos=result.GetLength()-1; if(OperatorPressed==true||Restarted==true||result.GetAt(pos)==')') result="4"; elseresult+="4"; OperatorPressed=false; Restarted=false; UpdateData(FALSE);}voidCPage1::OnBnClickedButton5(){ //TODO:在此添加控件告知解決程序代碼 UpdateData(TRUE); intpos=result.GetLength()-1; if(OperatorPressed==true||Restarted==true||result.GetAt(pos)==')') result="5"; elseresult+="5"; OperatorPressed=false; Restarted=false; UpdateData(FALSE);}voidCPage1::OnBnClickedButton6(){ //TODO:在此添加控件告知解決程序代碼 UpdateData(TRUE); intpos=result.GetLength()-1; if(OperatorPressed==true||Restarted==true||result.GetAt(pos)==')') result="6"; elseresult+="6"; OperatorPressed=false; Restarted=false; UpdateData(FALSE);}voidCPage1::OnBnClickedButton7(){ //TODO:在此添加控件告知解決程序代碼 UpdateData(TRUE); intpos=result.GetLength()-1; if(OperatorPressed==true||Restarted==true||result.GetAt(pos)==')') result="7"; elseresult+="7"; OperatorPressed=false; Restarted=false; UpdateData(FALSE);}voidCPage1::OnBnClickedButton8(){ //TODO:在此添加控件告知解決程序代碼 UpdateData(TRUE); intpos=result.GetLength()-1; if(OperatorPressed==true||Restarted==true||result.GetAt(pos)==')') result="8"; elseresult+="8"; OperatorPressed=false; Restarted=false; UpdateData(FALSE);}voidCPage1::OnBnClickedButton9(){ //TODO:在此添加控件告知解決程序代碼 UpdateData(TRUE); intpos=result.GetLength()-1; if(OperatorPressed==true||Restarted==true||result.GetAt(pos)==')') result="9"; elseresult+="9"; OperatorPressed=false; Restarted=false; UpdateData(FALSE);}voidCPage1::OnBnClickedButtonpoint(){ //TODO:在此添加控件告知解決程序代碼 UpdateData(TRUE); if(pt==false) { intpos=result.GetLength()-1; if(isop()) result+="0."; elseif(OperatorPressed==true||Restarted==true||result.GetAt(pos)==')') result="0."; elseresult+="."; OperatorPressed=false; Restarted=false; } pt=true; UpdateData(FALSE);}voidCPage1::OnBnClickedButtonplus(){ //TODO:在此添加控件告知解決程序代碼 UpdateData(TRUE); if(OperatorPressed==true)result=realans; intpos=result.GetLength()-1; if(isop()) { if(result.GetAt(pos)=='(') result+="0+"; else { result=result.Left(pos); result+="+"; } } elseif(Restarted==true) result="+"; else result+="+"; OperatorPressed=false; Restarted=false; pt=false; UpdateData(FALSE);}voidCPage1::OnBnClickedButtonsub(){ //TODO:在此添加控件告知解決程序代碼 UpdateData(TRUE); if(OperatorPressed==true)result=realans; intpos=result.GetLength()-1; if(isop()) { if(result.GetAt(pos)=='(') result+="0-"; else { result=result.Left(pos); result+="-"; } } elseif(Restarted==true) result="-"; else result+="-"; OperatorPressed=false; Restarted=false; pt=false; UpdateData(FALSE);}voidCPage1::OnBnClickedButtonmulti(){ //TODO:在此添加控件告知解決程序代碼 UpdateData(TRUE); if(OperatorPressed==true)result=realans; intpos=result.GetLength()-1; if(isop()) { if(result.GetAt(pos)=='(') result+="0*"; else { result=result.Left(pos); result+="*"; } } elseif(Restarted==true) result="0*"; else result+="*"; OperatorPressed=false; Restarted=false; pt=false; UpdateData(FALSE);}voidCPage1::OnBnClickedButtondiv(){ //TODO:在此添加控件告知解決程序代碼 UpdateData(TRUE); if(OperatorPressed==true)result=realans; intpos=result.GetLength()-1; if(isop()) { if(result.GetAt(pos)=='(') result+="0/"; else { result=result.Left(pos); result+="/"; } } elseif(Restarted==true) result="0/"; else result+="/"; OperatorPressed=false; Restarted=false; pt=false; UpdateData(FALSE);}voidCPage1::OnBnClickedButtonleft(){ //TODO:在此添加控件告知解決程序代碼 UpdateData(TRUE); if(OperatorPressed==true)result=realans; if(Restarted==true) result="("; else { intpos=result.GetLength()-1; result.MakeReverse(); intp=result.FindOneOf(_T("+-*/^%(")); if(p==-1)p=pos+1; result.Insert(p,'('); result.MakeReverse(); } ++cntleft; OperatorPressed=false; Restarted=false; UpdateData(FALSE);}voidCPage1::OnBnClickedButtonright(){ //TODO:在此添加控件告知解決程序代碼 UpdateData(TRUE); if(OperatorPressed==true)result=realans; intpos=result.GetLength()-1; if(isop()&&cntleft>cntright) { if(result.GetAt(pos)=='(') result+="0)"; else { result=result.Left(pos); result+=")"; } ++cntright; } if(cntleft>cntright) result+=")",++cntright; OperatorPressed=false; Restarted=false; UpdateData(FALSE);}voidCPage1::OnBnClickedButtonmod(){ //TODO:在此添加控件告知解決程序代碼 UpdateData(TRUE); if(OperatorPressed==true)result=realans; intpos=result.GetLength()-1; if(isop()) { if(result.GetAt(pos)=='(') result+="0%"; else { result=result.Left(pos); result+="%"; } } elseif(Restarted==true) result="0%"; else result+="%"; OperatorPressed=false; Restarted=false; pt=false; UpdateData(FALSE);}voidCPage1::OnBnClickedButtonpower(){ //TODO:在此添加控件告知解決程序代碼 UpdateData(TRUE); if(OperatorPressed==true)result=realans; intpos=result.GetLength()-1; if(isop()) { if(result.GetAt(pos)=='(') result+="0^"; else { result=result.Left(pos); result+="^"; } } elseif(Restarted==true) result="0^"; else result+="^"; OperatorPressed=false; Restarted=false; pt=false; UpdateData(FALSE);}voidCPage1::OnBnClickedButtonback(){ //TODO:在此添加控件告知解決程序代碼 UpdateData(TRUE); OperatorPressed=false; intpos=result.GetLength()-1; if(result!="0"&&pos>0) { if(result.GetAt(pos)=='(') --cntleft; if(result.GetAt(pos)==')') --cntright; if(result.GetAt(pos)=='.') pt=false; result=result.Left(pos); } else { Restarted=true; pt=false; result="0"; } UpdateData(FALSE);}voidCPage1::OnBnClickedButtonclear(){ //TODO:在此添加控件告知解決程序代碼 Restarted=true; pt=false; result="0"; cntleft=cntright=0; UpdateData(FALSE);}voidCPage1::OnBnClickedButtonequal(){ //TODO:在此添加控件告知解決程序代碼 UpdateData(TRUE); cntleft=cntright=0; map<char,int>mp; while(num.size())num.pop(); while(fac.size())fac.pop(); mp.clear(); mp['+']=1,mp['-']=1,mp['*']=2,mp['/']=2,mp['%']=2,mp['^']=3,mp['(']=0; CStrings=result; CStringc=L""; intlen=s.GetLength(); if(isop()) s=s.Left(len-1); inti=0; while(i<len) { if((i==0)&&(mp[s[i]]==2||mp[s[i]]==3)) { num.push(0); fac.push(s[i]); i++; } intj=i; if(isnum(i)) { while(j<len&&isnum(j)) { if(j==0&&s[j]=='.') c+='0'; c+=s[j]; j++; } doublex=_wtof(c); num.push(x); c=""; i=j-1; } elseif(s[i]=='(') fac.push(s[i]); elseif(s[i]==')') { while(fac.size()&&fac.top()!='(') num.push(cal()); if(fac.size())fac.pop(); } else { while(fac.size()&&mp[fac.top()]>=mp[s[i]]) num.push(cal()); fac.push(s[i]); } i++; } while(fac.size()&&num.size()) num.push(cal()); if(fabs(num.top()-0)<1e-8) num.top()=0; charch[1000]; sprintf_s(ch,"%.15g",num.top()); realans=ch; UpdateData(FALSE); OperatorPressed=true; pt=false;}doubleCPage1::getans(doublea,charch,doubleb){ if(ch=='+') returna+b; if(ch=='-') returna-b; if(ch=='*') returna*b; if(ch=='/') returna/b; if(ch=='%') { inttmp=a/b; doubleret=(double)tmp*b; returna-ret; } if(ch=='^') returnpow(a,b); return0.0;}boolCPage1::isnum(inti){ if(isdigit(result[i])||result[i]=='.') returntrue; if(i==0) { if(result[i]=='+'||result[i]=='-'||isdigit(result[i])) returntrue; returnfalse; } if((result[i-1]=='(')&&(result[i]=='+'||result[i]=='-')) returntrue; returnfalse;}boolCPage1::isop(){ intpos=result.GetLength()-1; boolop=false; if(result.GetAt(pos)=='.'||result.GetAt(pos)=='+'||result.GetAt(pos)=='-'||result.GetAt(pos)=='*') op=true; elseif(result.GetAt(pos)=='/'||result.GetAt(pos)=='%'||result.GetAt(pos)=='^'||result.GetAt(pos)=='(') op=true; returnop;}doubleCPage1::cal(){ if(fac.top()=='(') { fac.pop(); doublex=num.top(); num.pop(); returnx; } if(num.empty())return0; doublen1=num.top(); num.pop(); if(fac.empty())return0; charch=fac.top(); fac.pop(); if(num.empty())returnn1; doublen2=num.top(); num.pop(); returngetans(n2,ch,n1);}

//Page2.cpp:實(shí)現(xiàn)文獻(xiàn)//#include"stdafx.h"#include"Calculator.h"#include"Page2.h"#include"afxdialogex.h"#include"map"#include"stack"usingnamespacestd;//CPage2對話框IMPLEMENT_DYNAMIC(CPage2,CDialogEx)CPage2::CPage2(CWnd*pParent/*=NULL*/) :CDialogEx(IDD_DIALOG2,pParent) ,result(_T("0")) ,Restarted(true) ,OperatorPressed(true) ,cntleft(0) ,cntright(0) ,pt(0) ,realans(_T("")){}CPage2::~CPage2(){}voidCPage2::DoDataExchange(CDataExchange*pDX){ CDialogEx::DoDataExchange(pDX); DDX_Text(pDX,IDC_EDIT2,result); DDX_Text(pDX,IDC_ans,realans);}BEGIN_MESSAGE_MAP(CPage2,CDialogEx) ON_BN_CLICKED(IDC_BUTTON_pi,&CPage2::OnBnClickedButtonpi) ON_BN_CLICKED(IDC_BUTTON_clear,&CPage2::OnBnClickedButtonclear) ON_BN_CLICKED(IDC_BUTTON0,&CPage2::OnBnClickedButton0) ON_BN_CLICKED(IDC_BUTTON1,&CPage2::OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON2,&CPage2::OnBnClickedButton2) ON_BN_CLICKED(IDC_BUTTON3,&CPage2::OnBnClickedButton3) ON_BN_CLICKED(IDC_BUTTON4,&CPage2::OnBnClickedButton4) ON_BN_CLICKED(IDC_BUTTON5,&CPage2::OnBnClickedButton5) ON_BN_CLICKED(IDC_BUTTON6,&CPage2::OnBnClickedButton6) ON_BN_CLICKED(IDC_BUTTON7,&CPage2::OnBnClickedButton7) ON_BN_CLICKED(IDC_BUTTON8,&CPage2::OnBnClickedButton8) ON_BN_CLICKED(IDC_BUTTON9,&CPage2::OnBnClickedButton9) ON_BN_CLICKED(IDC_BUTTON_point,&CPage2::OnBnClickedButtonpoint) ON_BN_CLICKED(IDC_BUTTON_equal,&CPage2::OnBnClickedButtonequal) ON_BN_CLICKED(IDC_BUTTON_lg,&CPage2::OnBnClickedButtonlg) ON_BN_CLICKED(IDC_BUTTON_sin,&CPage2::OnBnClickedButtonsin) ON_BN_CLICKED(IDC_BUTTON_cos,&CPage2::OnBnClickedButtoncos) ON_BN_CLICKED(IDC_BUTTON_tan,&CPage2::OnBnClickedButtontan) ON_BN_CLICKED(IDC_BUTTON_sqrt,&CPage2::OnBnClickedButtonsqrt) ON_BN_CLICKED(IDC_BUTTON_plus,&CPage2::OnBnClickedButtonplus) ON_BN_CLICKED(IDC_BUTTON_sub,&CPage2::OnBnClickedButtonsub) ON_BN_CLICKED(IDC_BUTTON_multi,&CPage2::OnBnClickedButtonmulti) ON_BN_CLICKED(IDC_BUTTON_div,&CPage2::OnBnClickedButtondiv) ON_BN_CLICKED(IDC_BUTTON_factorail,&CPage2::OnBnClickedButtonfactorail) ON_BN_CLICKED(IDC_BUTTON_power,&CPage2::OnBnClickedButtonpower) ON_BN_CLICKED(IDC_BUTTON_left,&CPage2::OnBnClickedButtonleft) ON_BN_CLICKED(IDC_BUTTON_right,&CPage2::OnBnClickedButtonright) ON_BN_CLICKED(IDC_BUTTON_back,&CPage2::OnBnClickedButtonback) ON_BN_CLICKED(IDC_BUTTON_mod,&CPage2::OnBnClickedButtonmod)END_MESSAGE_MAP()//CPage2消息解決程序voidCPage2::OnBnClickedButtonpi(){ //TODO:在此添加控件告知解決程序代碼 /*3.09550*/ UpdateData(TRUE); intpos=result.GetLength()-1; if(isop()&&result.GetAt(pos)!='.') result+="3.062"; else result="3.062"; OperatorPressed=true; Restarted=false; UpdateData(FALSE);}voidCPage2::OnBnClickedButtonlg(){ //TODO:在此添加控件告知解決程序代碼 UpdateData(TRUE); if(OperatorPressed==true)result=realans; doubletmp=_wtof(result); if(tmp<0) result="inputerror"; else { tmp=log10(tmp); charch[1000]; sprintf_s(ch,"%.15g",tmp); realans=ch; } UpdateData(FALSE); OperatorPressed=true;}voidCPage2::OnBnClickedButtonsin(){ //TODO:在此添加控件告知解決程序代碼 UpdateData(TRUE); if(OperatorPressed==true)result=realans; doubletmp=_wtof(result); tmp=acos(-1.0)/180.0*tmp; tmp=sin(tmp); charch[1000]; sprintf_s(ch,"%.15g",tmp); realans=ch; UpdateData(FALSE); OperatorPressed=true;}voidCPage2::OnBnClickedButtoncos(){ //TODO:在此添加控件告知解決程序代碼 UpdateData(TRUE); if(OperatorPressed==true)result=realans; doubletmp=_wtof(result); tmp=acos(-1.0)/180.0*tmp; tmp=cos(tmp); charch[1000]; sprintf_s(ch,"%.15g",tmp); realans=ch; UpdateData(FALSE); OperatorPressed=true;}voidCPage2::OnBnClickedButtontan(){ //TODO:在此添加控件告知解決程序代碼 UpdateData(TRUE); if(OperatorPressed==true)result=realans; doubletmp=_wtof(result); tmp=acos(-1.0)/180.0*tmp; tmp=tan(tmp); charch[1000]; sprintf_s(ch,"%.15g",tmp); realans=ch; UpdateData(FALSE); OperatorPressed=true;}voidCPage2::OnBnClickedButtonsqrt(){ //TODO:在此添加控件告知解決程序代碼 UpdateData(TRUE); if(OperatorPressed==true)result=realans; doubletmp=_wtof(result); if(tmp<0) result="inputerror\n"; else { tmp=sqrt(tmp); charch[1000]; sprintf_s(ch,"%.15g",tmp); realans=ch; } OperatorPressed=true; UpdateData(FALSE);}voidCPage2::OnBnClickedButton0(){ //TODO:在此添加控件告知解決程序代碼 UpdateData(TRUE); intpos=result.GetLength()-1; if(OperatorPressed==true||Restarted==true||result.GetAt(pos)==')') result="0"; elseresult+="0"; OperatorPressed=false; Restarted=false; UpdateData(FALSE);}voidCPage2::OnBnClickedButton1(){ //TODO:在此添加控件告知解決程序代碼 UpdateData(TRUE); intpos=result.GetLength()-1; if(OperatorPressed==true||Restarted==true||result.GetAt(pos)==')') result="1"; elseresult+="1"; OperatorPressed=false; Restarted=false; UpdateData(FALSE);}voidCPage2::OnBnClickedButton2(){ //TODO:在此添加控件告知解決程序代碼 UpdateData(TRUE); intpos=result.GetLength()-1; if(OperatorPressed==true||Restarted==true||result.GetAt(pos)==')') result="2"; elseresult+="2"; OperatorPressed=false; Restarted=false; UpdateData(FALSE);}voidCPage2::OnBnClickedButton3(){ //TODO:在此添加控件告知解決程序代碼 UpdateData(TRUE); intpos=result.GetLength()-1; if(OperatorPressed==true||Restarted==true||result.GetAt(pos)==')') result="3"; elseresult+="3"; Operator

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論