計算器程序設(shè)計報告_第1頁
計算器程序設(shè)計報告_第2頁
計算器程序設(shè)計報告_第3頁
計算器程序設(shè)計報告_第4頁
計算器程序設(shè)計報告_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

./計算器程序設(shè)計報告一、設(shè)計分析編寫一個計算器程序,要求:1、界面類似于windows系統(tǒng)中提供的計算器界面;2、能實現(xiàn)加、減、乘、除、乘方、開方等功能。界面類似于windows系統(tǒng)中提供的計算器界面,則數(shù)字的輸入和功能的執(zhí)行都通過按鍵來實現(xiàn),并且能夠在顯示區(qū)域里及時的顯示出數(shù)據(jù),所用本程序使用VC++提供的高度可視化的應(yīng)用程序開發(fā)工具MFC來實現(xiàn)。要實現(xiàn)加、減、乘、除、乘方、開方等功能,則在程序中包含"math.h"庫函數(shù)文件,通過引用相應(yīng)的函數(shù)來實現(xiàn)乘方、開方等功能。在輸入第一個計算參數(shù)以后,點擊需要執(zhí)行的計算方式,然后輸入第二個計算參數(shù),點擊"="按鈕,則會在顯示區(qū)顯示出正確的結(jié)果。本程序從設(shè)計上來講,主要分為兩個重點部分,一個是數(shù)字的輸入,即逐個點擊單個數(shù)字〔包括小數(shù)點之后,這些數(shù)據(jù)能夠在顯示區(qū)正確的顯示。第二個是數(shù)據(jù)的計算,先輸入第一個計算參數(shù),然后選擇計算方式,再輸入第二個計算參數(shù),最后點擊"="按鈕,計算結(jié)果。二、程序結(jié)構(gòu)按照程序的設(shè)計,可以分為數(shù)據(jù)顯示模塊、數(shù)據(jù)輸入模塊、計算方式選擇模塊、結(jié)果計算模塊、菜單模塊等五個主要模塊,其中,數(shù)字輸入模塊和計算模塊是重點和難度,這兩個模塊的流程圖如下所示:1、數(shù)字輸入的流程圖:點擊一個數(shù)字鍵以后,流程開始:開始開始顯示框中原來的數(shù)據(jù)是否繼續(xù)使用。是否已經(jīng)輸入小數(shù)點。清除原來的數(shù)據(jù);并且將標(biāo)識符改為繼續(xù)使用。m_num=m_num*10+1;floatjishu=1;for<inti=0;i<m_dianshu;i++>jishu=jishu/10;m_num=m_num+jishu; m_dianshu=m_dianshu+1;數(shù)據(jù)更新到界面上,顯示在顯示框結(jié)束否是是否2、數(shù)據(jù)計算的流程:開始開始結(jié)束輸入第一個操作數(shù)據(jù)。輸入第二個操作數(shù)據(jù)。點擊計算方式按鈕,操作方式記入計算方式標(biāo)識變量中。數(shù)據(jù)更新到界面上,顯示在顯示框點擊"="按鈕后,根據(jù)第一個操作數(shù)據(jù)、計算方式、第二個操作數(shù)據(jù)進行相應(yīng)的計算。是否有后續(xù)的數(shù)據(jù)輸入。是否三、各模塊的功能及程序說明按照程序的設(shè)計,可以分為數(shù)據(jù)顯示模塊、數(shù)據(jù)輸入模塊、計算方式選擇模塊、結(jié)果計算模塊、菜單模塊等五個主要模塊,以下逐個說明各模塊的功能及程序說明。1、數(shù)據(jù)顯示模塊。數(shù)據(jù)顯示模塊顯示用戶輸入的數(shù)字和計算器計算的結(jié)果,主要由一個數(shù)字顯示框組成。數(shù)字顯示框是一個編輯框控件,屬性設(shè)置為只讀模式,不能由用戶編輯。在MFC的類向?qū)е?給數(shù)字顯示框添加一個變量m_num,用來記錄數(shù)字的變化,當(dāng)每次操作以后,都會把數(shù)字更新到界面上,顯示給用戶。2、數(shù)據(jù)輸入模塊。數(shù)據(jù)輸入模塊用來輸入1、2、3、4、5、6、7、8、9、0等十個數(shù)字和一個"."小數(shù)點,并且可以進行數(shù)據(jù)正負的轉(zhuǎn)換。此模塊由十個數(shù)字按鍵、一個小數(shù)點按鍵、一個正負轉(zhuǎn)換按鍵組成。有一個bool型的變量來標(biāo)識小數(shù)點是否已經(jīng)輸入,如果標(biāo)識為假,則操作的數(shù)據(jù)為整數(shù),如果標(biāo)識為真,則操作的數(shù)據(jù)為小數(shù)。在同一個數(shù)據(jù)的輸入中,小數(shù)點標(biāo)識只在第一次點擊時有效。每一個按鍵的操作都由一個函數(shù)單獨完成,避免相互影響。每一次數(shù)據(jù)輸入,都會更新數(shù)據(jù)框的顯示,達到實時性。3、計算方式選擇模塊。計算方式選擇用來選擇加、減、乘、除、乘方、開方等六個操作,每個計算方式都有一個單獨的按鈕,每個按鈕都有一個單獨的函數(shù)來執(zhí)行。用一個int類型的變量m_fuhao來標(biāo)識計算方式的選擇。執(zhí)行計算方式選擇以后,把原先數(shù)據(jù)框中顯示的數(shù)據(jù)賦值給第一個計算參數(shù)m_canshu1,并且對于系統(tǒng)標(biāo)識變量進行相應(yīng)的處理。因為對于六個函數(shù)來說,這些系統(tǒng)標(biāo)識變量的相應(yīng)處理都是相同的,所以把這些系統(tǒng)標(biāo)識變量整理為一個函數(shù)voidCJisuanqiDlg::TagFuc<>,以利于代碼的重復(fù)利用。4、結(jié)果計算模塊。結(jié)果計算模塊是點擊了"="按鍵以后,執(zhí)行相應(yīng)的計算,并且輸出結(jié)果。在其他的模塊已經(jīng)以此執(zhí)行輸入了第一個操作數(shù)據(jù)、計算方式、第二個操作數(shù)據(jù),然后在這里根據(jù)這些數(shù)據(jù)進行計算。如果前面沒有完整的執(zhí)行輸入第一個操作數(shù)據(jù)、計算方式、第二個操作數(shù)據(jù),則此模塊不做任何處理。在這個模塊中,使用switch語句,分別根據(jù)計算方式的不同執(zhí)行相應(yīng)的操作,其中乘方和開方的操作需要調(diào)用"math.h"庫函數(shù)文件中的pow<m_canshu1,m_canshu2>和sqrt<m_canshu1>函數(shù)來實現(xiàn)。執(zhí)行完計算以后,將結(jié)果顯示在顯示框中,并且對系統(tǒng)標(biāo)識變量進行一些相應(yīng)的處理。5、菜單模塊。因為數(shù)據(jù)顯示框中的數(shù)據(jù)對于用戶是只讀的,所以當(dāng)用戶在進行使用的時候,不能對數(shù)據(jù)框中的數(shù)據(jù)進行復(fù)制和粘貼等操作。這樣在一定程度上限制了程序使用的方便性。為了解決這個問題,添加了菜單操作模塊。菜單由兩部分構(gòu)成,第一個清零、關(guān)閉功能,當(dāng)用戶在輸入數(shù)據(jù)的時候,如果不小心輸入錯誤,可以執(zhí)行清零操作,重新輸入。如果用完計算器,可以執(zhí)行關(guān)閉操作,關(guān)閉程序的運行。第二部分是編輯功能,包括數(shù)據(jù)的復(fù)制和粘貼功能,這樣用戶在使用中可以對重要的數(shù)據(jù)進行復(fù)制,先保存起來,然后再需要的時候進行粘貼,方便了用戶的操作。四、源程序根據(jù)程序模塊的劃分,除顯示模塊只有變量不進行任何操作,不需要說明源程序外,下面根據(jù)模塊依次來對其他模塊的源程序進行說明。1、數(shù)據(jù)輸入模塊:voidCJisuanqiDlg::OnButton1<>//Button1是字符1的按鍵{ //TODO:Addyourcontrolnotificationhandlercodehere if<m_tag==false>//顯示框中原來的數(shù)據(jù)是否繼續(xù)使用。剛點擊過加減乘除乘方開方或者等于按鍵,則原來的數(shù)據(jù)不繼續(xù)使用 { m_num=0; m_tag=true; } if<m_dian==false>//是否已經(jīng)輸入小數(shù)點 { m_num=m_num*10+1;//整數(shù),則把新數(shù)據(jù)加在原來數(shù)據(jù)之后 } else { floatjishu=1; for<inti=0;i<m_dianshu;i++>jishu=jishu/10; m_num=m_num+jishu; m_dianshu=m_dianshu+1;//小數(shù)點后的位數(shù)再加1 } UpdateData<false>;}voidCJisuanqiDlg::OnButton12<>//Button12是小數(shù)點的按鍵{ //TODO:Addyourcontrolnotificationhandlercodehere if<m_dian==false> m_dian=true;}voidCJisuanqiDlg::OnButton19<>//Button19是清零的按鍵{ //TODO:Addyourcontrolnotificationhandlercodehere m_num=0; m_dian=false; m_dianshu=1; m_tag=true; UpdateData<false>;}voidCJisuanqiDlg::OnButton11<>//Button11是正負轉(zhuǎn)換的按鍵{ //TODO:Addyourcontrolnotificationhandlercodehere m_num=0-m_num; UpdateData<false>;}2、計算方式選擇模塊:voidCJisuanqiDlg::OnButton13<>//Button13是加法的按鍵{ //TODO:Addyourcontrolnotificationhandlercodehere m_fuhao=1; m_canshu1=m_num; TagFuc<>; m_tag=false;}voidCJisuanqiDlg::OnButton14<>//Button14是減法的按鍵{ //TODO:Addyourcontrolnotificationhandlercodehere m_fuhao=2; m_canshu1=m_num; TagFuc<>; m_tag=false;}voidCJisuanqiDlg::OnButton15<>//Button15是乘法的按鍵{ //TODO:Addyourcontrolnotificationhandlercodehere m_fuhao=3; m_canshu1=m_num; TagFuc<>; m_tag=false;}voidCJisuanqiDlg::OnButton16<>//Button16是除法的按鍵{ //TODO:Addyourcontrolnotificationhandlercodehere m_fuhao=4; m_canshu1=m_num; TagFuc<>; m_tag=false;}voidCJisuanqiDlg::OnButton17<>//Button17是乘方的按鍵{ //TODO:Addyourcontrolnotificationhandlercodehere m_fuhao=5; m_canshu1=m_num; TagFuc<>; m_tag=false;}voidCJisuanqiDlg::OnButton18<>//Button18是開方的按鍵{ //TODO:Addyourcontrolnotificationhandlercodehere m_fuhao=6; m_canshu1=m_num; TagFuc<>; m_tag=false;}voidCJisuanqiDlg::TagFuc<>{ //m_num=0; m_dian=false; m_dianshu=1; m_tag=true; UpdateData<false>;}3、結(jié)果計算模塊voidCJisuanqiDlg::OnButton20<>{ //TODO:Addyourcontrolnotificationhandlercodehere if<m_tag==true>//這個判斷是為了處理用戶點擊完"=",沒有點擊其他按鍵再點擊"=",這種情況下,不更新第二個計算參數(shù)。 { m_canshu2=m_num; } //if<m_tag==true>m_canshu1=m_num; //CStringsTemp; // sTemp.Format<"m_canshu1=%f;m_canshu2=%f\n",m_canshu1,m_canshu2>; // MessageBox<sTemp>; switch<m_fuhao> { case1: m_num=m_canshu1+m_canshu2; UpdateData<false>; break; case2: m_num=m_canshu1-m_canshu2; UpdateData<false>; break; case3: m_num=m_canshu1*m_canshu2; UpdateData<false>; break; case4: m_num=m_canshu1/m_canshu2; UpdateData<false>; break; case5: m_num=pow<m_canshu1,m_canshu2>; UpdateData<false>; break; case6: m_num=sqrt<m_canshu1>;//m_canshu1 UpdateData<false>; break; default: break; } //m_num=0; m_canshu1=m_num; m_tag=false;}4、菜單模塊:voidCJisuanqiDlg::OnMenuitem32773<>//復(fù)制{ //TODO:Addyourcommandhandlercodehere m_baocun=m_num;}voidCJisuanqiDlg::OnMenuitem32774<>//粘貼{ //TODO:Addyourcommandhandlercodehere if<m_baocun!=0>m_num=m_baocun; UpdateData<false>;}voidCJisuanqiDlg::OnMenuitem32771<>//清零{ //TODO:Addyourcommandhandlercodehere OnButton19<>;}voidCJisuanqiDlg::OnMenuitem32772<>//關(guān)閉{ //TODO:Addyourcommandhandlercodehere CDialog::OnCancel<>;}五、操作方法1,輸入第一個計算參數(shù),比如:2642、246.78、-578、-2.6;2,點擊選擇計算方式,比如:加、減、乘、除、乘方、開方;3,輸入第二個計算參數(shù)〔注:開方計算只需要一個計算參數(shù),不需要輸入第二個計算參數(shù)。;4,點擊"="按鍵,輸入計算結(jié)果;5,由于程序做過處理,可以實現(xiàn)連等操作,多次點擊"="按鍵計算;6,在操作過程中,可以對操作框進行復(fù)制、粘貼等操作。六、實驗結(jié)果1、輸入7865.78,結(jié)果如下圖顯示:2、執(zhí)行34+98,結(jié)果

溫馨提示

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

評論

0/150

提交評論