版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上目錄專心-專注-專業(yè)1 基本功能描述簡(jiǎn)單計(jì)算器包括雙目運(yùn)算和單目運(yùn)算功能。雙目運(yùn)算符包含基本的四則運(yùn)算及乘冪功能,單目運(yùn)算符包含正余弦,階乘,對(duì)數(shù),開方,倒數(shù)等運(yùn)算??蓪?duì)輸入任意操作數(shù),包括小數(shù)和整數(shù)及正數(shù)和負(fù)數(shù)進(jìn)行以上的所有運(yùn)算并能連續(xù)運(yùn)算。出現(xiàn)錯(cuò)誤會(huì)給出相應(yīng)提示,同時(shí)包含清除,退格,退出功能以及有與所有按鈕相對(duì)應(yīng)的菜單項(xiàng)。2 設(shè)計(jì)思路如圖是整個(gè)計(jì)算器的流程圖,打開計(jì)算器程序,輸入數(shù)據(jù),調(diào)用輸入數(shù)據(jù)子程序。子程序開始時(shí)m_num為零。按下數(shù)字按鈕后,判斷m_num的正負(fù)號(hào),對(duì)其進(jìn)行相關(guān)處理,然后在判斷是否有小數(shù)點(diǎn),處理后輸出結(jié)果。回到總流程圖中,輸完第一個(gè)操作數(shù)后,
2、若按下雙目運(yùn)算符,則把m_num存入num1,按下輸入第二個(gè)操作數(shù)并算出結(jié)果。若按下的是單目運(yùn)算符,則直接對(duì)其處理得出結(jié)果。若按下清零,則m_num等于0.在運(yùn)算中還要判斷運(yùn)算是否合法,以及結(jié)果是否超出顯示范圍,以做出相關(guān)提示,按下清零。算出后把結(jié)果保存至num1。若需用算出的結(jié)果繼續(xù)運(yùn)算則回到輸入完第一個(gè)操作數(shù)后,若不需要?jiǎng)t判斷試否需要開始新一輪的運(yùn)算,不需要?jiǎng)t結(jié)束。輸入數(shù)據(jù)子函數(shù)用UpdateData(FALSE)刷新顯示NNY鍵入一個(gè)數(shù)是否為正數(shù)?m_num =10*m_num+im_num =10*m_num-i是否為小數(shù)?還原m_num根據(jù)小數(shù)點(diǎn)后位數(shù)將鍵入的數(shù)乘以xsw累加到m_n
3、umYN繼續(xù)鍵入數(shù)字?Y編輯框關(guān)聯(lián)變量m_num=0圖1 輸入數(shù)據(jù)子函數(shù)流程圖突起結(jié)束jieY開始輸入數(shù)據(jù)子函數(shù)編輯框關(guān)聯(lián)的變量保存至num1輸入數(shù)據(jù)子函數(shù)進(jìn)行運(yùn)算運(yùn)算是否合法把結(jié)果保存到num1m_num清零彈出對(duì)話框顯示ERRORNY是否用保存的結(jié)果繼續(xù)進(jìn)行運(yùn)算N雙目運(yùn)算符單目運(yùn)算符是否開始新一輪的計(jì)算YN 圖2 簡(jiǎn)單計(jì)算器總流程圖3 軟件設(shè)計(jì)3.1 設(shè)計(jì)步驟打開Microsoft Visual Studio2010,在文件中點(diǎn)擊新建,在彈出框內(nèi)選擇MFC 應(yīng)用程序工程,輸入工程名Calculate及其所在位置,點(diǎn)擊確定,如圖3所示。 圖3 新建MFC應(yīng)用程序工程這樣在MFC應(yīng)用程序下建立
4、了一個(gè)基于對(duì)話窗口的程序框架,如圖4所示。圖4 新建的對(duì)話框3.2 界面設(shè)計(jì)1、創(chuàng)建控件在圖4所示的在資源視圖選項(xiàng)卡中打開Calculate資源組,雙擊IDD_Calculate_DIALOG,在右邊的窗口中顯示出待編輯的對(duì)話框。開始擺放控件,包括編輯框和按鈕的創(chuàng)建。表1 各按鈕和編輯框等對(duì)象的屬性對(duì)象ID標(biāo)題或說(shuō)明編輯框IDC_EDIT1結(jié)果顯示按鈕IDC_BUTTON100按鈕IDC_BUTTON11按鈕IDC_BUTTON22按鈕IDC_BUTTON33按鈕IDC_BUTTON44按鈕IDC_BUTTON55按鈕IDC_BUTTON66按鈕IDC_BUTTON77按鈕IDC_BUTTON
5、88按鈕IDC_BUTTON99按鈕IDC_change+/-按鈕IDC_point.按鈕IDC_plus+按鈕IDC_divide-按鈕IDC_multiply*按鈕IDC_devide/按鈕IDC_sqrtsqrt按鈕IDC_ reciprocal1/x按鈕IDC_jiechengn!按鈕IDC_lnln按鈕IDC_sinsin按鈕IDC_coscos按鈕IDC_powxy按鈕IDC_equal=按鈕IDC_deleteDele按鈕IDC_clearClear按鈕IDC_pfx2按鈕IDC_tanTan 完成后界面如圖5所示。 圖5 計(jì)算器界面2、連接變量和代碼1) 給編輯框連接變量。在編
6、輯框上單擊鼠標(biāo)右鍵,在彈出菜單中選擇ClassWizard菜單項(xiàng),彈出MFC ClassWizard對(duì)話框,選擇成員變量選項(xiàng)卡,如圖6所示。 圖6 MFC類向?qū)?duì)話框中的成員變量選項(xiàng)卡在選擇 ID列表框中選擇IDC_EDIT1,單擊添加變量按鈕,在彈出的對(duì)話框中連接變量m_num。變量類型設(shè)定為doubel型。3.3 關(guān)鍵功能的實(shí)現(xiàn)1)操作數(shù)的輸入編輯框所關(guān)聯(lián)的變量為m_num,程序開始時(shí)為零。每按下一個(gè)數(shù)字鍵按鈕,就把它累加到m_num里并刷新顯示。整型變量xsd來(lái)判斷是否有小數(shù)點(diǎn)和一個(gè)double型xsw來(lái)表示小數(shù)點(diǎn)后的數(shù)據(jù)的位數(shù)。當(dāng)xsd=0時(shí),表示無(wú)小數(shù)點(diǎn),否則則表示有小數(shù)點(diǎn)。按下小數(shù)
7、點(diǎn)按鈕后執(zhí)行xsd=1。當(dāng)按下一個(gè)數(shù)字鍵時(shí),首先判斷m_numd的正負(fù),再根據(jù)xsd判斷是否按下小數(shù)點(diǎn),若有則把小數(shù)點(diǎn)后數(shù)的位數(shù)xsw*0.1,將鍵入的數(shù)除以xsw然后正數(shù)累加,負(fù)數(shù)累減到編輯框所關(guān)聯(lián)的變量m_num上,若沒有則把m_num乘以10,然后累加或累減到編輯框所關(guān)聯(lián)的變量m_num上。2)單目運(yùn)算符功能的實(shí)現(xiàn)由于單目運(yùn)算符中必須有執(zhí)行運(yùn)算的函數(shù),因而頭文件中要加入math.h,如m_num=sqrt(m_num).按下按鈕即可實(shí)現(xiàn)其功能。3)雙目運(yùn)算符功能的實(shí)現(xiàn)雙目運(yùn)算符需要兩個(gè)操作數(shù)才能運(yùn)算,所以在執(zhí)行雙目運(yùn)算符按鈕的函數(shù)代碼中,要把m_num中的值保存到變量num1中,然后把m
8、_num清零。這樣即可保存第一個(gè)操作數(shù)。另外先定義了一個(gè)整形變量cal,在不同的雙目運(yùn)算符中給cal賦不同的值,然后在等號(hào)中用switch語(yǔ)句來(lái)匹配cal值來(lái)判斷需要執(zhí)行何種雙目運(yùn)算。4)退格鍵功能的實(shí)現(xiàn)當(dāng)按下一次退格按鈕時(shí),若m_num為整數(shù),只需對(duì)其中數(shù)據(jù)除以10再取整(floor()和ceil()函數(shù))即可,若按下一次退格按鈕為小數(shù),則根據(jù)小數(shù)點(diǎn)后數(shù)據(jù)的位數(shù)xsw進(jìn)行操作,先對(duì)xsw乘以10,然后被m_num除取整,接著與xsw相乘即可。4 結(jié)論與心得體會(huì)經(jīng)過(guò)多番測(cè)試,得出結(jié)論為設(shè)計(jì)的計(jì)算器能夠完成功能描述內(nèi)容中的全部功能。正所謂“紙上談兵終覺淺,覺知此事要躬行。”所以在本學(xué)期課程設(shè)計(jì)是
9、很及時(shí)、很必要的。這樣不僅能加深我們對(duì)MFC程序設(shè)計(jì)的掌握,而且還及時(shí)、真正的做到了學(xué)以致用。主要是以下幾點(diǎn)。基本功要過(guò)硬。不能馬虎經(jīng)常犯犯小錯(cuò)誤。提高自己找錯(cuò)糾錯(cuò)能力,通常錯(cuò)誤總是那幾種,多練習(xí)就熟練了。要善于查找資料提高自己的資料查詢能力,要善于利用網(wǎng)絡(luò)來(lái)獲得知識(shí),獲得幫助。開始著手程序設(shè)計(jì)時(shí),有些功能感覺無(wú)從下手,都不知道要干什么。這些問(wèn)題只要找到相關(guān)的資料就會(huì)得到提示從而理解所要解決問(wèn)題的大致方向。有了明確的目的,就可以發(fā)揮自己的頭腦來(lái)完成它了。要善于思考。程序中有些實(shí)現(xiàn)難點(diǎn)和最初完成程序時(shí)免不了的許多不足就需要自己根據(jù)代碼認(rèn)真思考來(lái)解決。只有這樣才能糾正程序的不足并使其更加人性化。5
10、編程中的困難及解決方法描述等號(hào)對(duì)應(yīng)的消息處理函數(shù)中需要處理的問(wèn)題及相應(yīng)的實(shí)現(xiàn)代碼?答:在雙目運(yùn)算符按鈕函數(shù)代碼中將整形變量cal賦值,然后在等號(hào)中用switch語(yǔ)句來(lái)匹配cal值來(lái)判斷需要執(zhí)行何種雙目運(yùn)算 ,保存結(jié)果便于下次計(jì)算和一些變量的清零。實(shí)現(xiàn)代碼見6.3。怎樣在編輯框中實(shí)現(xiàn)中文字提示?經(jīng)網(wǎng)上查找,使用SetWindowText("XXXXXXX");可以實(shí)現(xiàn)該功能,但是經(jīng)過(guò)多次嘗試,卻總是出現(xiàn)如下的錯(cuò)誤:經(jīng)過(guò)多次查找資料和嘗試最終發(fā)現(xiàn)需要一個(gè)轉(zhuǎn)換的操作就是在用_T()進(jìn)行轉(zhuǎn)換。如上GetDlgItem(IDC_EDIT1)->SetWindowText(_T(
11、"結(jié)果過(guò)大,無(wú)法顯示");就可以了!6 附錄6.1 調(diào)試報(bào)告6.2 測(cè)試結(jié)果1.輸入“90.5”,“-”,“60.7”,“=”,“+”,“2.36”,“ =”,得到結(jié)果如圖7。圖7結(jié)果圖12.輸入“0”,“l(fā)n”,結(jié)果如圖2圖7結(jié)果圖2證明錯(cuò)誤提示功能實(shí)現(xiàn)正常。6.3 關(guān)鍵源代碼1、 數(shù)字鍵0的程序:void CCalculateDlg:OnClickedButton10()if (m_num>=0)if(xsd=0)m_num=m_num*10+0;elsem_num=m_num+xsw*0;xsw*=0.1;UpdateData(false); elseif(xs
12、d=0)m_num=m_num*10-0;elsem_num=m_num-xsw*0;xsw*=0.1;UpdateData(false);2、 加法鍵+的程序:(-,*,/,x,xy的代碼類似)void CCalculateDlg:OnBnClickedplus()cal=1;num1=m_num;m_num=0;xsd=0;xsw=1.0;3、 = 鍵的程序:void CCalculateDlg:OnBnClickedequal()switch (cal)case 1:m_num=m_num+num1;UpdateData(false); /數(shù)ºy據(jù)Y刷¡é新
13、?break;case 2:m_num=num1-m_num; /兩¢?數(shù)ºy相¨¤減?UpdateData(false); /數(shù)ºy據(jù)Y刷¡é新?break;case 3:m_num=num1*m_num; /兩¢?數(shù)ºy相¨¤乘?if(m_num>=1.7e308|m_num<-1.7e308)GetDlgItem(IDC_EDIT1)->SetWindowText(_T("結(jié)果太大,無(wú)法顯示!");UpdateData(false); /數(shù)&
14、#186;y據(jù)Y刷¡é新?break;case 4:if (m_num=0) /在¨²除y法¤¡§中D,ê?判D斷?除y數(shù)ºy是º?否¤?為a0GetDlgItem(IDC_EDIT1)->SetWindowText(_T("錯(cuò)誤,0不能作除數(shù)”);else m_num=num1/m_num;UpdateData(false);break;case 5:m_num=pow(num1,m_num);if(m_num>=1.7e308|m_num<-1.7e30
15、8)GetDlgItem(IDC_EDIT1)->SetWindowText(_T("結(jié)果太大,無(wú)法顯示!");UpdateData(FALSE);break;xsw=1.0;xsd=0;cal=0;4、n!鍵的程序:void CCalculateDlg:OnBnClickedfactorial()int i;if (xsd=0)for (i=m_num;i>0;i-)m_num*=i;elseGetDlgItem(IDC_EDIT1)->SetWindowText(_T("整?數(shù)ºy才?能¨¹進(jìn)?行D階¡
16、Á乘?運(yùn)?算?!ê?");if(m_num>=1.7e308|m_num<-1.7e308)GetDlgItem(IDC_EDIT1)->SetWindowText(_T("結(jié)¨¢果?太¬?大䨮,ê?無(wú)T法¤¡§顯?示º?");elseUpdateData(FALSE);xsd=0;xsw=1.0;5、Dele鍵的程序:void CCalculateDlg:OnBnClickeddelete()if (xsd=0)if (m_num<0)m_num=ceil(m_num/10);elsem_num=flo
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 泌尿外科護(hù)士總結(jié)
- 部門預(yù)算的制定與監(jiān)督計(jì)劃
- 2024年物業(yè)服務(wù)合同:高端住宅小區(qū)物業(yè)服務(wù)
- 媒體廣告行業(yè)員工培訓(xùn)總結(jié)
- 手表店前臺(tái)工作總結(jié)
- 績(jī)效激勵(lì)政策的總結(jié)與優(yōu)化計(jì)劃
- 高考新課標(biāo)語(yǔ)文模擬試卷系列之38
- 2024年度兒童劇演員演繹與推廣合同3篇
- 江蘇省興化市高考考前沖刺試卷(二)(語(yǔ)文)
- 油氣地震課課程設(shè)計(jì)
- 分層作業(yè)的教學(xué)設(shè)計(jì)
- 蕭公權(quán)-《中國(guó)政治思想史》第一編第二和第三章內(nèi)容
- 蘇教版四年級(jí)上冊(cè)科學(xué)期末試題(含答案)
- 《鑄造用增碳劑》
- 一年級(jí)上心理健康教育《我是小學(xué)生了》課件PPT
- 水庫(kù)回水計(jì)算(實(shí)用)
- 山東第一醫(yī)科大學(xué)護(hù)理倫理學(xué)期末復(fù)習(xí)題
- 清華物理習(xí)題庫(kù)試題及答案光學(xué)
- 管理供應(yīng)商 供應(yīng)商績(jī)效評(píng)估
- 1000MW機(jī)組鍋爐過(guò)渡段T23水冷壁管檢修導(dǎo)則(征求意見稿)
- 國(guó)開本科《商務(wù)英語(yǔ)4》機(jī)考題庫(kù)及答案
評(píng)論
0/150
提交評(píng)論