(Java)科學型計算器的開發(fā)與實現(xiàn)_第1頁
(Java)科學型計算器的開發(fā)與實現(xiàn)_第2頁
(Java)科學型計算器的開發(fā)與實現(xiàn)_第3頁
(Java)科學型計算器的開發(fā)與實現(xiàn)_第4頁
(Java)科學型計算器的開發(fā)與實現(xiàn)_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 27/27(Java)科學型計算器的開發(fā)與實現(xiàn) 淮北師范大學 科學型計算器的開發(fā)與實現(xiàn) 學院計算機科學與技術(shù) 專業(yè)計算機科學與技術(shù)(師范) 學生姓名 學號 指導教師姓名 年月日 科學型計算器的開發(fā)與實現(xiàn) : 指導教師: Development and implementation of scientific calculator Candidate: Supervisor: Associate Professor Abstract:Currently, the application of scientific calculator is very extensive. It can not

2、 be get away from the service of scientific calculator in the field of research, production, national defense, culture, hygiene, even family life. By using scientific calculator, the tedious artificial operation, the larger errors and operational mistakes, which are caused by artificial operation, c

3、an be avoided. It brings much convenience to peoples operation. This article mainly introduces a scientific calculator system implementing from the perspective of software. It includes the overview and developmental principle of scientific calculator system. It also contains the primary functions, w

4、hich have been implemented, the design and implemental technology of sub-modules. Among them, it forces on introducing the usage of dialog box and controls as well as the implementation of mathematic function without using library function, but computing method. The system needs to achieve the follo

5、wing functions : adds, subtracts, multiplies, divides, the remainder operation, the countdown operation,radicand, power calculation, the log and index calculation, the operation of sine function, cosine function, tangent function, cotangent function, arc sine function, arc cosine function , arc tang

6、ent function and arc cotangent function, permutations and combinations operation, the conversion between radian and angle, the capability of inputting decimal, positive and negative numbers, the reset and backspace function, continuous operational capacity. Key words: Dialog box; Controls; Computing

7、 method 目錄 引言 1 科學型計算器系統(tǒng)概述 (1) 1.1設計科學型計算器系統(tǒng)的背景 (1) 1.2科學型計算器的發(fā)展史 (1) 2系統(tǒng)需要 (2) 2.1設計分析 (2) 2.1.1可行性分析 (2) 2.1.2需求分析 (2) 2.2開發(fā)環(huán)境 (2) 2.2.1運行環(huán)境 (2) 2.2.2開發(fā)工具 (2) 2.2.3關(guān)于visual c+ 6.0 (2) 3系統(tǒng)設計 (3) 3.1功能說明 (3) 3.1.1系統(tǒng)總體功能分析 (3) 3.1.2系統(tǒng)功能 (3) 3.2系統(tǒng)大概 (3) 3.2.1設計思路 (3) 3.2.2計算器運算流程圖 (3) 4系統(tǒng)的實現(xiàn) . (4) 4.1

8、窗口的設計 (4) 4.1.1設計步驟 (4) 4.1.2控件的意義 (4) 4.1.3部分操作截圖 (4) 4.2程序核心代碼 (4) 4.2.1數(shù)字鍵核心代碼 (4) 4.2.2計算類型函數(shù)的核心代碼 (4) 二進制轉(zhuǎn)換代碼 (4) backspace函數(shù)代碼 (4) arcsin函數(shù)代碼 (4) log10函數(shù)代碼 (4) 函數(shù)代碼 (4) 5系統(tǒng)運行與測試 (5) 5.1運行界面 (5) 5.2測試 (5) 5.2.1測試研究與選擇 (5) 5.2.2測試環(huán)境 (5) 5.3程序代碼 (5) 總結(jié) 引言 本設計設計主要在運算過程中,如果通過計算器來完成,就會減少計算量,該程序即可以在簡

9、單計算器鍵面下進行簡單運算,也可以在科學計算器鍵面下進行高級的科學計算。并且可以分別計算弧度、角度的三角函數(shù)的計算等較為復雜的運算。 1 科學型計算器系統(tǒng)概念 1.1設計科學型計算器系統(tǒng)的背景 人們在日常學習、工作和生活過程中,都少不了與“計算”打交道,從簡單的加、減、乘、除法運算,乘方、開方運算,到復雜正弦、余弦、正切、余切運算,組合運算等,總會遇到許多關(guān)于計算方面的有問題,如:人工運算的繁瑣,人工運算帶來的較大誤差以及人工運算造成的運算錯誤等。為了解決以上問題,便用軟件方法設計了科學計算器系統(tǒng)。通過使用本系統(tǒng),只需要進行簡單的輸入,即可得到相應的結(jié)果,給人們的運算帶來了極大的方便。常用的計

10、算器有簡易版和科學計算器兩種模式。簡易版的計算器不支持表達式運算,每次只能輸入一個數(shù)據(jù)或者運算符來計算,而科學計算器除了容納簡易版計算器的功能外,還支持表達式運算,用戶可以輸入一個合法的算術(shù)表達式來得到所需的結(jié)果。 1.2科學型計算器的發(fā)展史 1666年,在英國Samuel Morland發(fā)明了一部可以計算加數(shù)及減數(shù)的機械計數(shù)機。 1673年, Gottfried Leibniz制造了一部踏式(stepped)圓柱形轉(zhuǎn)輪的計數(shù)機,叫“Stepped Reckoner”,這部計算器可以把重復的數(shù)字相乘,并自動地加入加數(shù)器里。 1694年,德國數(shù)學家,Gottfried Leibniz,把巴斯卡的

11、Pascalene 改良,制造了一部可以計算乘數(shù)的機器,它仍然是用齒輪及刻度盤操作。 1775年,The third Earl of Stanhope發(fā)明了一部與Leibniz相似的乘法計算器。 1893年,第一部四功能計算器被發(fā)明。 1931年,Vannever Bush發(fā)明了一部可以解決差分程序的計數(shù)機,這機器可以解決一些令數(shù)學家,科學家頭痛的復雜差分程序。 1935年,IBM (International Business Machine Corporation)引入 IBM 601”,它是一部有算術(shù)部件及可在1秒鐘內(nèi)計算乘數(shù)的穿孔計算機器。它對科學及商業(yè)的計算起很大的作用??偣仓圃炝?

12、500 部。 1937年,Alan Turing 想出了一個“通用機器(Universal Machine)”的概念,可以執(zhí)行任何的算法,形成了一個“可計算(computability)”的基本概念。Turing 的概念比其它同類型的發(fā)明為好,因為他用了符號處理(symbol processing) 的概念。 1939年11月,John Vincent Atannsoff與John Berry制造了一部16位加數(shù)器。它是第一部用真空管計算的機器。 1939-40年,Schreyer完成了用真空管的10位加數(shù)器,以及用氖氣燈(霓虹燈)的存貯器。 1940年1月,在Bell Labs, Samue

13、l Williams 及Stibitz完成了一部可以計算復雜數(shù)字的機器,叫“復雜數(shù)字計數(shù)機(Complex Number Calculator)”,后來改稱為“斷電器計數(shù)機型號I (Model I Relay Calculator)”。它用電話開關(guān)部分做邏輯部件:145個斷電器,10個橫杠開關(guān)。數(shù)字 用“Plus 3BCD”代表。 1941年夏季,Atanasoff及Berry完成了一部專為解決聯(lián)立線性方程系統(tǒng)(system of simultaneous linear equations) 的計算器,后來叫做“ABC (Atanasoff-Berry Computer)”,它有60個50位的

14、存貯器,以電容器(capacitories)的形式安裝在2個旋轉(zhuǎn)的鼓上,時鐘速度是60Hz。 1941年2月,Zuse完成“V3”(后來叫Z3),是第一部操作中可編寫程序的計數(shù)機。它亦是用浮點操作,有7個位的指數(shù),14位的尾數(shù),以及一個正負號。存貯器可以貯存64個字,所以需要1400個斷電器。它有多于1200個的算術(shù)及控制部件,而程序編寫,輸入,輸出的與Z1相同。 1943年1月Howard H. Aiken完成“ASCC Mark I”(自動按序控制計算器Mark I,Automatic Sequence - Controlled Calculator Mark I),亦稱“Haward M

15、ark I”。這部機器有51尺長,重5頓,由 750,000部份合并而成。它有72個累加器,每一個有自己的算術(shù)部件,及23位數(shù)的寄存器。 1946年,第一臺電子數(shù)字積分計算器(ENIAC)在美國建造完成。 1949年,英國建造完成延遲存儲電子自動計算器(EDSAC) 1952年,第一臺“儲存程序計算器”誕生。 1959年,第一臺小型科學計算器IBM620研制成功。 2 系統(tǒng)需求 2.1設計分析 2.1.1可行性分析 伴隨著經(jīng)濟全球化,計算機的普及發(fā)展,軟件行業(yè)在社會占著舉足輕重的作用。我們在學校生活中常會遇到一些繁雜的數(shù)值運算,我們必須要用到科學計算器,所以便著手開發(fā)了這個計算器程序,既緊隨科

16、技發(fā)展的前沿,又方便了我們的生活,具有一定的現(xiàn)實意義。 2.1.2 需求分析 本軟件主要用于計算機Windows XP以上的用戶使用,這次課程設計一般是實現(xiàn)簡單計算器的功能。需要程序?qū)崿F(xiàn):加減乘除,開方,平方,倒數(shù)等運算功能;還要實現(xiàn)數(shù)據(jù)的輸入,輸出,計算,顯示及程序退出等功能。另外還可以實現(xiàn)多種科學計算的功能,如:三角函數(shù)的計算,對數(shù)指數(shù)的計算,二、八、十、十六進制的轉(zhuǎn)換等。 2.2 開發(fā)環(huán)境 2.2.1 運行環(huán)境 系統(tǒng)是在VC+6.0環(huán)境下開發(fā)的,在Windows98/Windows2000/Windows NT/Windows XP平臺下運行均可。 2.2.2 開發(fā)工具 C+語言 2.2

17、.3 關(guān)于Visual C+ 6.0 Visual C+ 6.0,簡稱VC或者VC6.0,是微軟推出的一款C+編譯器,將“高級語言”翻譯為“機器語言(低級語言)”的程序。Visual C+是一個功能強大的可視化軟件開發(fā)工具。自1993年Microsoft公司推出Visual C+1.0后,隨著其新版本的不斷問世,Visual C+已成為專業(yè)程序員進行軟件開發(fā)的首選工具。雖然微軟公司推出了Visual C+.NET(Visual C+7.0),但它的應用有很大的局限性,只適用于Windows 2000、Windows XP和Windows NT4.0。所以實際中,更多的是以Visual C+6.

18、0為平臺。 Visual C+6.0由Microsoft開發(fā), 它不僅是一個C+ 編譯器,而且是一個基于Windows操作系統(tǒng)的可視化集成開發(fā)環(huán)境(integrated development environment,IDE)。Visual C+6.0由許多組件組成,包括編輯器、調(diào)試器以及程序向?qū)ppWizard、類向?qū)lass Wizard等開發(fā)工具。這些組件通過一個名為Developer Studio的組件集成為和諧的開發(fā)環(huán)境。Microsoft的主力軟件產(chǎn)品。Visual C+是一個功能強大的可視化軟件開發(fā)工具。自1993年Microsoft公司推出Visual C+1.0后,隨著其

19、新版本的不斷問世,Visual C+已成為專業(yè)程序員進行軟件開發(fā)的首選工具。雖然微軟公司推出了Visual C+.NET(Visual C+7.0),但它的應用的很大的局限性,只適用于Windows 2000,Windows XP和Windows NT4.0。所以實際中,更多的是以Visual C+6.0為平臺。 Visual C+6.0以擁有“語法高亮”,自動編譯功能以及高級除錯功能而著稱。比如,它允許用戶進行遠程調(diào)試,單步執(zhí)行等。還有允許用戶在調(diào)試期間重新編譯被修改的代碼,而不必重新啟動正在調(diào)試的程序。其編譯及創(chuàng)建預編譯頭文件(stdafx.h)、最小重建功能及累加連結(jié)(link)著稱。這

20、些特征明顯縮短程序編輯、編譯及連結(jié)的時間花費,在大型軟件計劃上尤其顯著。 該環(huán)境為用戶提供了良好的可視化編程環(huán)境,程序員可以利用該開發(fā)環(huán)境輕松地訪 問C+源代碼編輯器,資源編輯器和使用內(nèi)部調(diào)試器,并且可以創(chuàng)建項目文件。Visual C+6.0不僅包括編輯器,還包括許多有用組件,通過這些組件的協(xié)同工作,可以在Visual C+6.0集成環(huán)境中輕松地完成創(chuàng)建源文件、編輯資源以及對程序的編譯、連接和調(diào)試等各項工作。VC+6.0是Windows 95/98、XP或Windows NT下的一個應用程序,本身對軟件沒有特殊要求。就是說它對環(huán)境的要求與Windows 95/98、Windows NT的要求是

21、一致的。VC+6.0系統(tǒng)可以在一張CD盤上,也可以在“Visual Studio (Visual C+、Visual Foxpro)”等產(chǎn)品的第一張CD盤上。一般都有一個VC的自動安裝程序,也可以執(zhí)行VC+6.0目錄下的Setup.exe,在安裝包的提示下進行,對初學者可采用“典型安裝”方式。 在安裝好VC6.0系統(tǒng)后,有時根據(jù)需要添加或刪除某些部件,可插入CD盤重新執(zhí)行Setup.exe安裝程序,安裝程序會檢測當前系統(tǒng)安裝VC6.0的組件,用戶單擊“添加/刪除”按鈕后,在“安裝維護”對話框中選定要與一般的應用軟件一樣,有以下兩種啟動方式: (1)通過“開始”按鈕,選擇“程序”菜單,然后打開“

22、Microsoft Visual C+6.0中文版”子菜單中的“Microsoft Visual C+6.0中文版”程序。 (2)用戶也可以使用命令行啟動VC,單擊“開始”按鈕后選擇“運行”命令,在“運行”對話框中輸入C:program FilesMicrosoft Visual StudioVC98VC6.exe(按默認盤符和路徑安裝即可)。 3 系統(tǒng)設計 3.1 功能說明 3.1.1 系統(tǒng)總體功能分析 它的設計按軟件工程的方法進行,系統(tǒng)具有良好的界面;必要的交互信息;簡約美觀的效果。使用人員能快捷簡單地進行操作。即可單機按鈕進行操作,也可直接通過鍵盤直接輸入。即時準確地獲得需要的計算的結(jié)果

23、,充分降低了數(shù)字計算的難度和節(jié)約了時間,對人們的生活有一定的幫助。 (1)包含的功能有:加、減、乘、除運算,開方、求倒數(shù)等功能。 (2)計算器上有數(shù)字09,加、減、乘、除等。 (3)制定高級按鈕控件,該按鈕具有不規(guī)則的形狀,可以根據(jù)用戶鼠標的位置和單擊狀態(tài)的不同,顯示不同的顏色。 (4)制定高級編輯控件,該編輯控件可以指定文本文字的字體和顏色。 (5)輸入的原始數(shù)據(jù)、運算中間數(shù)據(jù)和結(jié)果都顯示在窗口頂部的同一個標簽中。 (6)實現(xiàn)對話框的擴展功能。 (7)計算功能基本上是用系統(tǒng)內(nèi)部函數(shù)。 (8)程序可以能自動判斷輸入數(shù)據(jù)的正確性,保證不出現(xiàn)多于一個小數(shù)點、以0開頭等不正?,F(xiàn)象。 (9)“C E”

24、按鈕可以清除所有已輸入的數(shù)據(jù)從頭計算 3.1.2 系統(tǒng)功能 本系統(tǒng)需要實現(xiàn)以下功能:加、減、乘、除、余運算、倒數(shù)、乘方運算、開方運算、正弦函數(shù)運算、余弦函數(shù)運算、正切函數(shù)運算、余切函數(shù)運算、反正弦函數(shù)運算、反余弦函數(shù)運算、反正切函數(shù)運算、反余切函數(shù)運算,各進制之間的轉(zhuǎn)換,能輸入正負數(shù)、小數(shù),具有清零、退格功能,具有連續(xù)運算的能力。 3.2 系統(tǒng)大概 3.2. 1設計思路 利用VC+6.0中的應用程序向?qū)ВˋppWizard)工具創(chuàng)建Windows應用程序。AppWizard在創(chuàng)建新項目時提供了應用程序框架,自動生成框架程序的源文件,用戶不必從開頭開始編寫代碼就能很快地構(gòu)建出程序原型。在AppW

25、izard提供的應用程序框架的基礎(chǔ)上,進行創(chuàng)建對話框,豐富用戶界面,添加控件等操作,然后為所建好的用戶界面增加響應消息,以及完成運算所需要的代碼。 3.2.2 計算器運算流程圖 圖3-1計算器運算流程圖 4 系統(tǒng)的實現(xiàn) 4.1 窗口的設計 4.1.1 設計步驟 打開Microsoft Visual C+ 6.0,在文件中點擊新建,在彈出框內(nèi)選擇MFC AppWizardexe工程,輸入工程名TestCalculatorDemo及其所在位置,點擊確定,如圖4-1所示。 圖4-1新建MFC AppWizardexe工程 將彈出MFC AppWizard-step 1對話框,選擇基本對話框,點擊完成

26、,如圖4-2所示。 這樣,MFC AppWizard就建立了一個基于對話窗口的程序框架,如圖4-3所示。 圖4-3 新建的對話框 (1)創(chuàng)建控件 1)在圖4-4所示的Resoure View選項卡中打開Dialog資源組,雙擊IDD_ TESTCALCULATORDEMO_DIALOG,在右邊的窗口中顯示出待編輯的對話框。開始擺放控件,包括編輯框和按鈕的創(chuàng)建。按鈕的創(chuàng)建以“1”為例進行介紹,其他按鈕的創(chuàng)建可參照此進行操作。 圖4-4 TestCalculatorDemo資源組 2)在圖4-3中Controls的“編輯框”按鈕上單擊鼠標左鍵,在對話框編輯窗口上合適的位置按下鼠標左鍵并拖動鼠標畫出

27、一個大小合適的編輯框。在編輯框上單擊鼠標右鍵,在彈出的快捷萊單中選擇屬性選項,此時彈出Edit屬性對話框,如圖4-5所示,在該對話框中輸入ID屬性。 圖4-5 Edit屬性 3)在圖4-6中Controls的“Button”按鈕上單擊鼠標左鍵,在對話框上的合適的位置上按下鼠標左鍵并拖動鼠標畫出一個大小合適的下壓式按鈕。在按鈕上單擊鼠標右鍵,在彈出的快捷菜單中選擇屬性選項,此時也彈出Push Button屬性對話框,如圖4-7所示,在該對話框中輸入控件的ID值和標題屬性。 圖4-7 Push Button 按照上面的操作過程編輯其他按鈕和編輯框等對象的屬性。 (2)連接變量和代碼 1) 給編輯框

28、連接變量。在編輯框上單擊鼠標右鍵,在彈出菜單中選擇ClassWizard 菜單項,彈出MFC ClassWizard對話框,選擇Member Variables選項卡,如圖4-8所示。 圖4-8 MFC ClassWizard對話框中的Menber Variable選項卡在Control IDs列表框中選擇IDC_SHOW,單擊Add Variables按鈕,在彈出的對話框中連接變量m_num。變量類型設定為doubel型。如圖4-9所示。 圖4-9 m_num屬性設置 2) 給“1”按鈕連接代碼。在“1”按鈕上單擊鼠標右鍵,選擇ClassWizard菜單項,在彈出的對話框中選擇Message

29、s Maps選項卡,然后在Object IDs列表框中選擇IDC_ADD_BUTTON,在Messages列表框中選擇BN_CLICKED項,即選擇單擊按鈕事件,如圖4-10所示。 圖4-10“1”按鈕鏈接代碼對話框 4.1.2 部分控件的意義 如表4-11(只列舉一部分控件) 4.1.3 部分操作截圖計算器界面: 求sin30: 4.2 程序核心代碼 4.2.1 二進制轉(zhuǎn)換代碼 void CCalculatorDemoDlg:OnTo2() / TODO: Add your control notification handler code here if (!b_Start) return

30、; char temp10; GetDlgItemText(IDC_EDIT_SHOW,temp,10); int num=atoi(temp); itoa(num,temp,2); SetDlgItemText(IDC_EDIT_SHOW,temp); 4.2.2 backspack函數(shù)代碼 v oid CCalculatorDemoDlg:OnBtnSpace() / TODO: Add your control notification handler code here if (!b_Start) return; double num; CString temp; int len; C

31、HAR temp_ch32; GetDlgItemText(IDC_EDIT_SHOW,temp); /AfxMessageBox(temp); num=atof(temp); sprintf(temp_ch,%g,num); num=0; /AfxMessageBox(temp_ch); len=strlen(temp_ch); int te_i=len-1; if(temp_chte_i=.) te_i-=1,b_Hasport=FALSE; temp_chte_i=0; / /AfxMessageBox(temp_ch); if (strlen(temp_ch)=0) temp_ch0=

32、0; temp_ch1=0; / sscanf(temp_ch,%lf, temp.Format(%g,num); /AfxMessageBox(temp); SetDlgItemText(IDC_EDIT_SHOW,b_Hasport?temp:temp+.); 4.2.3 arcsin函數(shù) void CCalculatorDemoDlg:OnArcsin() / TODO: Add your control notification handler code here if (!b_Start) return; double num; double pi=3.1415926535; CSt

33、ring temp; GetDlgItemText(IDC_EDIT_SHOW,temp); num=atof(temp); num=asin(num); num=(num/pi)*180; temp.Format(%lf,num); if (temp.Find(.)=-1) SetDlgItemText(IDC_EDIT_SHOW,temp+.); else SetDlgItemText(IDC_EDIT_SHOW,temp); 4.2.4 log10函數(shù)代碼 void CCalculatorDemoDlg:OnLog10() / TODO: Add your control notific

34、ation handler code here if (!b_Start) return; double num; CString temp; GetDlgItemText(IDC_EDIT_SHOW,temp); num=atof(temp); num=log(num); temp.Format(%lf,num); if (temp.Find(.)=-1) SetDlgItemText(IDC_EDIT_SHOW,temp+.); else SetDlgItemText(IDC_EDIT_SHOW,temp); 4.2.5 函數(shù)代碼 void CCalculatorDemoDlg:OnPi(

35、) / TODO: Add your control notification handler code here CString tem_i; tem_i.Format(%f,3.1415926535); CString temp; /第一次輸入 if (!b_Start) cs_Numm_i=tem_i; b_Start=TRUE; SetDlgItemText(IDC_EDIT_SHOW,cs_Numm_i); if (!b_Hasport) GetDlgItemText(IDC_EDIT_SHOW,temp); temp+=.; SetDlgItemText(IDC_EDIT_SHOW

36、,temp); return; cs_Numm_i+=tem_i; SetDlgItemText(IDC_EDIT_SHOW,cs_Numm_i); if (!b_Hasport) GetDlgItemText(IDC_EDIT_SHOW,temp); temp+=.; SetDlgItemText(IDC_EDIT_SHOW,temp); 5 系統(tǒng)運行 5.1 運行界面 5.2 測試 5.2.1 測試研究與選擇 測試過程中要判斷是否成功,要分析程序界面的變化和計算數(shù)據(jù)的結(jié)果是否正確以及各功能鍵是否能正常實用。 5.2.2 測試環(huán)境 測試系統(tǒng):Windows98/Windows2000/Win

37、dows NT/Windows XP 測試工具:Visual Studio C+ 6.0(中文版) 5.3 程序代碼 / CalculatorDemoDlg.cpp : implementation file / Download by /doc/9f5f4ab3b9d528ea81c7794e.html #include stdafx.h #include TestCalculatorDemo.h #include CalculatorDemoDlg.h #include math.h #include string #ifdef _DEBUG #define new DEBUG_NEW #

38、undef THIS_FILE static char THIS_FILE = _FILE_; #endif / / CCalculatorDemoDlg dialog CCalculatorDemoDlg:CCalculatorDemoDlg(CWnd* pParent /*=NULL*/) : CDialog(CCalculatorDemoDlg:IDD, pParent) /AFX_DATA_INIT(CCalculatorDemoDlg) / NOTE: the ClassWizard will add member initialization here /AFX_DATA_INIT

39、 void CCalculatorDemoDlg:DoDataExchange(CDataExchange* pDX) CDialog:DoDataExchange(pDX); /AFX_DATA_MAP(CCalculatorDemoDlg) / NOTE: the ClassWizard will add DDX and DDV calls here /AFX_DATA_MAP BEGIN_MESSAGE_MAP(CCalculatorDemoDlg, CDialog) /AFX_MSG_MAP(CCalculatorDemoDlg) ON_BN_CLICKED(IDC_BTN_NO1,

40、OnBtnNo1) ON_BN_CLICKED(IDC_BTN_NO2, OnBtnNo2) ON_BN_CLICKED(IDC_BTN_NO3, OnBtnNo3) ON_BN_CLICKED(IDC_BTN_NO4, OnBtnNo4) ON_BN_CLICKED(IDC_BTN_NO5, OnBtnNo5) ON_BN_CLICKED(IDC_BTN_NO6, OnBtnNo6) ON_BN_CLICKED(IDC_BTN_NO7, OnBtnNo7) ON_BN_CLICKED(IDC_BTN_NO8, OnBtnNo8) ON_BN_CLICKED(IDC_BTN_NO9, OnBt

41、nNo9) ON_BN_CLICKED(IDC_BTN_NO0, OnBtnNo0) ON_BN_CLICKED(IDC_BTN_PORT, OnBtnPort) ON_BN_CLICKED(IDC_BTN_ADD, OnBtnAdd) ON_BN_CLICKED(IDC_BTN_SUB, OnBtnSub) ON_BN_CLICKED(IDC_BTN_MUL, OnBtnMul) ON_BN_CLICKED(IDC_BTN_DIV, OnBtnDiv) ON_BN_CLICKED(IDC_BTN_EQUEL, OnBtnEquel) ON_BN_CLICKED(IDC_BTN_PERCENT

42、, OnBtnPercent) ON_BN_CLICKED(IDC_BTN_DOWN, OnBtnDown) ON_BN_CLICKED(IDC_BTN_NEQUA, OnBtnNequa) ON_BN_CLICKED(IDC_BTN_SPACE, OnBtnSpace) ON_BN_CLICKED(IDC_BTN_C, OnBtnC) ON_BN_CLICKED(IDC_BTN_SQRT, OnBtnSqrt) ON_BN_CLICKED(IDC_SIN, OnSin) ON_BN_CLICKED(IDC_COS, OnCos) ON_BN_CLICKED(IDC_TAN, OnTan) O

43、N_BN_CLICKED(IDC_COT, OnCot) ON_BN_CLICKED(IDC_EXP, OnExp) ON_BN_CLICKED(IDC_LOG, OnLog) ON_BN_CLICKED(IDC_LOG10, OnLog10) ON_BN_CLICKED(IDC_ARCSIN, OnArcsin) ON_BN_CLICKED(IDC_ABS, OnAbs) ON_BN_CLICKED(IDC_PI, OnPi) ON_BN_CLICKED(IDC_TO16, OnTo16) ON_BN_CLICKED(IDC_TO2, OnTo2) ON_BN_CLICKED(IDC_TO8

44、, OnTo8) ON_BN_CLICKED(IDC_ACOS, OnAcos) ON_BN_CLICKED(IDC_TO4, OnTo4) ON_BN_CLICKED(IDC_ATAN, OnAtan) ON_BN_CLICKED(IDC_ACOT, OnAcot) /AFX_MSG_MAP END_MESSAGE_MAP() / / CCalculatorDemoDlg message handlers void CCalculatorDemoDlg:OnBtnNo1() / TODO: Add your control notification handler code here Put

45、IntoNum(1); void CCalculatorDemoDlg:OnBtnNo2() / TODO: Add your control notification handler code here PutIntoNum(2); void CCalculatorDemoDlg:OnBtnNo3() / TODO: Add your control notification handler code here PutIntoNum(3); void CCalculatorDemoDlg:OnBtnNo4() / TODO: Add your control notification han

46、dler code here PutIntoNum(4); void CCalculatorDemoDlg:OnBtnNo5() / TODO: Add your control notification handler code here PutIntoNum(5); void CCalculatorDemoDlg:OnBtnNo6() / TODO: Add your control notification handler code here PutIntoNum(6); void CCalculatorDemoDlg:OnBtnNo7() / TODO: Add your contro

47、l notification handler code here PutIntoNum(7); void CCalculatorDemoDlg:OnBtnNo8() / TODO: Add your control notification handler code here PutIntoNum(8); void CCalculatorDemoDlg:OnBtnNo9() / TODO: Add your control notification handler code here PutIntoNum(9); void CCalculatorDemoDlg:OnBtnNo0() / TOD

48、O: Add your control notification handler code here / TODO: Add your control notification handler code here /如果第一次輸入數(shù)字 if (cs_Numm_i=0) return ; cs_Numm_i+=0; SetDlgItemText(IDC_EDIT_SHOW,cs_Numm_i); if (!b_Hasport) CString temp; GetDlgItemText(IDC_EDIT_SHOW,temp); temp+=.; SetDlgItemText(IDC_EDIT_SH

49、OW,temp); void CCalculatorDemoDlg:OnBtnPort() /已有小數(shù)點時 if (b_Hasport) return; /無小數(shù)點 cs_Numm_i+=.; b_Hasport=TRUE; b_Start=TRUE; SetDlgItemText(IDC_EDIT_SHOW,cs_Numm_i); /四則運算符 void CCalculatorDemoDlg:OnBtnAdd() if (!b_Start) return; if (en_LastSignl=en_none) en_LastSignl=en_add; RunOperation(en_LastS

50、ignl); en_LastSignl=en_add; void CCalculatorDemoDlg:OnBtnSub() if (!b_Start) return; / TODO: Add your control notification handler code here if (en_LastSignl=en_none) en_LastSignl=en_sub; RunOperation(en_LastSignl); en_LastSignl=en_sub; void CCalculatorDemoDlg:OnBtnMul() if (!b_Start) return; if (en

51、_LastSignl=en_none) cs_Num1=1; en_LastSignl=en_mul; RunOperation(en_LastSignl); en_LastSignl=en_mul; void CCalculatorDemoDlg:OnBtnDiv() if (!b_Start) return; if (en_LastSignl=en_none) cs_Num1=1; en_LastSignl=en_div; RunOperation(en_LastSignl); en_LastSignl=en_div; void CCalculatorDemoDlg:OnBtnEquel(

52、) / TODO: Add your control notification handler code here RunOperation(en_LastSignl); /*特殊* en_LastSignl=en_none; b_Start=TRUE; BOOL CCalculatorDemoDlg:OnInitDialog() CDialog:OnInitDialog(); / TODO: Add extra initialization here InitAllDate(); return TRUE; / return TRUE unless you set the focus to a

53、 control / EXCEPTION: OCX Property Pages should return FALSE void CCalculatorDemoDlg:InitAllDate() en_LastSignl=en_none; b_Hasport=FALSE; b_Start=FALSE; b_Hasmul=FALSE; b_Hasdiv=FALSE; cs_Num0=0; cs_Num1=0; m_i=0; SetDlgItemText(IDC_EDIT_SHOW,cs_Numm_i+.); void CCalculatorDemoDlg:RunOperation(eum_si

54、gnl e_signl) / TODO: Add your control notification handler code here double sum; double nAdd1; double nAdd2; nAdd1=atof(cs_Num0); nAdd2=atof(cs_Num1); /sum=nAdd1+nAdd2; switch(e_signl) case en_add: sum=nAdd1+nAdd2; break; case en_sub: sum=nAdd1-nAdd2; break; case en_mul: sum=nAdd1*nAdd2; break; case

55、 en_div: sum=nAdd1/nAdd2; break; cs_Num0.Format(%g,sum); SetDlgItemText(IDC_EDIT_SHOW,cs_Num0); if (!b_Hasport GetDlgItemText(IDC_EDIT_SHOW,temp); temp+=.; SetDlgItemText(IDC_EDIT_SHOW,temp); m_i = 1; b_Hasport=FALSE; b_Start=FALSE; cs_Numm_i=0; /void CCalculatorDemoDlg:RunOperation(eum_signl en_sig

56、nl) / / void CCalculatorDemoDlg:OnBtnC() / TODO: Add your control notification handler code here InitAllDate(); / 根號 void CCalculatorDemoDlg:OnBtnSqrt() / TODO: Add your control notification handler code here if (!b_Start) return; double num; CString temp; GetDlgItemText(IDC_EDIT_SHOW,temp); num=ato

57、f(temp); num=sqrt(num); /其他部分功能計算只需要更改此處,更改成相應函數(shù)即可temp.Format(%lf,num); if (temp.Find(.)=-1) SetDlgItemText(IDC_EDIT_SHOW,temp+.); else SetDlgItemText(IDC_EDIT_SHOW,temp); / % void CCalculatorDemoDlg:OnBtnPercent() / TODO: Add your control notification handler code here if (!b_Start) return; double

58、num; CString temp; GetDlgItemText(IDC_EDIT_SHOW,temp); num=atof(temp); num=num/100; temp.Format(%lf,num); if (temp.Find(.)=-1) SetDlgItemText(IDC_EDIT_SHOW,temp+.); else SetDlgItemText(IDC_EDIT_SHOW,temp); / 1/x void CCalculatorDemoDlg:OnBtnDown() / TODO: Add your control notification handler code h

59、ere if (!b_Start) return; double num; CString temp; GetDlgItemText(IDC_EDIT_SHOW,temp); num=atof(temp); num=1/num; temp.Format(%lf,num); if (temp.Find(.)=-1) SetDlgItemText(IDC_EDIT_SHOW,temp+.); else SetDlgItemText(IDC_EDIT_SHOW,temp); / +- void CCalculatorDemoDlg:OnBtnNequa() / TODO: Add your cont

60、rol notification handler code here if (!b_Start) return; double num; CString temp; GetDlgItemText(IDC_EDIT_SHOW,temp); num=atof(temp); num/=abs(num); temp.Format(%lf,num); if (temp.Find(.)=-1) SetDlgItemText(IDC_EDIT_SHOW,temp+.); else SetDlgItemText(IDC_EDIT_SHOW,temp); / SetDlgItemText(IDC_EDIT_SH

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論