




已閱讀5頁(yè),還剩31頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
武漢理工大學(xué)面向?qū)ο蟪绦蛟O(shè)計(jì)課程設(shè)計(jì)說(shuō)明書(shū)實(shí)用計(jì)算器程序1.基本功能描述計(jì)算器是人們?nèi)粘I钪蟹浅?shí)用的計(jì)算工具。預(yù)期設(shè)計(jì)目標(biāo)與實(shí)際計(jì)算器為標(biāo)準(zhǔn),Windows 10系統(tǒng)提供的計(jì)算器為范例進(jìn)行設(shè)計(jì)。實(shí)用計(jì)算器要實(shí)現(xiàn)單目運(yùn)算和雙目運(yùn)算。單目運(yùn)算主要包括階乘、正弦、余弦;雙目運(yùn)算主要包括加、減、乘、除、乘冪等。計(jì)算器要能夠?qū)斎氲母鞣N數(shù)據(jù)進(jìn)行處理,包括小數(shù)、整數(shù)、負(fù)數(shù)等數(shù)據(jù)進(jìn)行操作。實(shí)際過(guò)程中要能夠?qū)Σ煌臄?shù)據(jù)靈活判斷執(zhí)行。同時(shí)要能夠?qū)Σ粷M(mǎn)足運(yùn)算符的操作數(shù),提示出錯(cuò)信息以方便用戶(hù)進(jìn)行處理。用戶(hù)的修改包括清屏和退格。程序設(shè)計(jì)的重點(diǎn)和難點(diǎn)在于:第一,能夠?qū)τ诓煌牟僮鲾?shù)和操作符進(jìn)行連續(xù)運(yùn)算,運(yùn)算過(guò)程中要有優(yōu)先級(jí)的判斷,根據(jù)優(yōu)先級(jí)執(zhí)行不同的運(yùn)算順序;第二,能夠用一個(gè)編輯框?qū)崿F(xiàn)運(yùn)算表達(dá)式的顯示和結(jié)果的輸出。編程環(huán)境采用Visual Studio 2017提供的MFC建立對(duì)話(huà)框應(yīng)用程序,設(shè)計(jì)界面要簡(jiǎn)單大方,并提供程序所有功能的接口。2.設(shè)計(jì)思路表1 操作符優(yōu)先級(jí)設(shè)計(jì)優(yōu)先級(jí)操作符1階乘、正弦、余弦2乘冪3乘、除4加、減對(duì)對(duì)話(huà)框編輯框關(guān)聯(lián)一個(gè)變量從中讀取數(shù)據(jù),按下數(shù)字鍵時(shí)對(duì)數(shù)據(jù)數(shù)組num進(jìn)行更新,其中num0表示的是當(dāng)前已經(jīng)存儲(chǔ)變量的個(gè)數(shù)。由于算法設(shè)計(jì)為四層優(yōu)先級(jí),且單目運(yùn)算的優(yōu)先級(jí)最高。當(dāng)按下相應(yīng)單目運(yùn)算符,首先將當(dāng)前數(shù)據(jù)數(shù)組的最后一個(gè)存儲(chǔ)(防止按下Backspace退格發(fā)生錯(cuò)誤),并將此位數(shù)據(jù)執(zhí)行運(yùn)算后重新賦值。但按下雙目運(yùn)算符相應(yīng)按鍵后,將計(jì)數(shù)num0+,同時(shí)將運(yùn)算符的類(lèi)型和位置記錄。當(dāng)按下等于之前,這樣就將一個(gè)單目雙目混合的運(yùn)算表達(dá)式轉(zhuǎn)化為雙目運(yùn)算。如果沒(méi)有按下等號(hào)鍵,則繼續(xù)執(zhí)行循環(huán)。在按下等號(hào)按鈕之后,按照先乘冪、再乘除、后加減的運(yùn)算順序執(zhí)行運(yùn)算,將最后結(jié)果保存并顯示。(在實(shí)際的計(jì)算器中,執(zhí)行完運(yùn)算之后,按下運(yùn)算符的操作鍵,最終結(jié)果將按照左操作數(shù)的形式出現(xiàn),故需要保存變量。)如果用戶(hù)沒(méi)有結(jié)束程序,在運(yùn)行初始化程序,進(jìn)行下一次運(yùn)算,否則直接退出。圖1 程序流程圖3.軟件設(shè)計(jì)3.1 設(shè)計(jì)步驟 1)創(chuàng)建基于對(duì)話(huà)框的程序利用AppWizard建立應(yīng)用程序框架,創(chuàng)建一個(gè)基于對(duì)話(huà)框的MFC工程,命名為“fengwanjincalculator”,如圖2所示。在圖3顯示的應(yīng)用程序類(lèi)型中選擇基于對(duì)話(huà)框。創(chuàng)建成功后,系統(tǒng)自動(dòng)生成相應(yīng)程序文件。圖2 創(chuàng)建MFC工程圖圖3 應(yīng)用程序類(lèi)型選擇圖2)定義成員變量添加相應(yīng)變量和標(biāo)志位,以方便程序的編寫(xiě),主要變量如表2所示:表2 成員變量表變量名變量類(lèi)型變量作用mystrCString編輯框關(guān)聯(lián)變量m_editFontCFont設(shè)置編輯框字體numfloat存儲(chǔ)操作數(shù)flagdianbool點(diǎn)號(hào)標(biāo)志位flagdengyubool等號(hào)標(biāo)志位flagerrorbool錯(cuò)誤標(biāo)志位Jiajianint存儲(chǔ)加減運(yùn)算符的位置4) 添加事件處理程序MFC應(yīng)用程序是通過(guò)消息響應(yīng)來(lái)進(jìn)行各項(xiàng)操作的,必須在對(duì)話(huà)類(lèi)中加入消息處理函數(shù)來(lái)處理這些事件。當(dāng)點(diǎn)擊相應(yīng)控件,在進(jìn)入WinMain函數(shù)之前,每個(gè)可以響應(yīng)消息的MFC類(lèi)都生成了一個(gè)消息映射表,程序運(yùn)行時(shí)通過(guò)查詢(xún)?cè)摫砼袛嗍欠裥枰憫?yīng)某條消息。在相應(yīng)控件單擊右鍵,彈出圖4,選擇添加事件處理程序,在圖5的事件處理程序向?qū)е羞x擇fengwanjincalculatorDlg類(lèi),消息類(lèi)型選擇為BN_CLICKED,即左鍵單擊。圖4 添加事件處理程序圖5 選擇添加事件處理程序類(lèi)型在完成上述操作后 MFC使用ClassWizard幫助實(shí)現(xiàn)消息映射,它在源碼中添加一些消息映射的內(nèi)容,并聲明和實(shí)現(xiàn)消息處理函數(shù)。首先,在類(lèi)的定義(頭文件)里,它增加了消息處理函數(shù)聲明,并添加一行聲明消息映射的宏DECLARE_MESSAGE_MAP。在類(lèi)的實(shí)現(xiàn)(實(shí)現(xiàn)文件)里,實(shí)現(xiàn)消息處理函數(shù),并使用IMPLEMENT_MESSAGE_MAP宏實(shí)現(xiàn)消息映射。BEGIN_MESSAGE_MAP*END_MESSAGE_MAP3.2 界面設(shè)計(jì)圖5 向?qū)υ?huà)框添加控件在項(xiàng)目的資源視圖中找到位于Dialog下的對(duì)話(huà)框,如圖4所示。添加相應(yīng)控件,完成用戶(hù)界面設(shè)計(jì)。圖6 用戶(hù)界面設(shè)計(jì)其中編輯框行為下Multiline屬性設(shè)置為T(mén)rue,作為多行編輯框。第一行顯示算式,第二行結(jié)果。整體上將控件分為四組,數(shù)值控件區(qū)NUM,加減乘除一般運(yùn)算控件區(qū)NORMAL,階乘、乘冪、正余弦科學(xué)運(yùn)算控件區(qū)SCIENCE以及清零退格控件。設(shè)計(jì)完成后的界面如圖7所示。圖7 用戶(hù)界面設(shè)計(jì)的界面中只有編輯框關(guān)聯(lián)Cstring類(lèi)型變量mystr。其余控件關(guān)聯(lián)相應(yīng)的消息處理函數(shù)。3.3 關(guān)鍵功能的實(shí)現(xiàn)程序主要分為數(shù)值、單目運(yùn)算、雙目運(yùn)算、清除等。1) 數(shù)值控件消息處理函數(shù)void CfengwanjincalculatorDlg:OnBnClickedButton1()shuzihanshu(L1, 1);考慮到09數(shù)字的處理函數(shù)有很大的相似處,所以都采用調(diào)用shuzhihanshu函數(shù)的方法執(zhí)行。shuzhihanshu包含兩個(gè)參數(shù),分別是數(shù)值對(duì)應(yīng)字符和相應(yīng)數(shù)值。其具體實(shí)現(xiàn)如下:void CfengwanjincalculatorDlg:shuzihanshu(char shuzi, int shuzhi)/09對(duì)應(yīng)函數(shù)UpdateData(TRUE);if (flagdengyu)OnBnClickedButtonClear();flaglast = 0;mystr += shuzi;data = shuzhi;changevalue();UpdateData(FALSE);首先,判斷再點(diǎn)擊數(shù)值控件之前是否按下等號(hào)鍵,如果按下執(zhí)行OnBnClickedButtonClear(),即執(zhí)行清除函數(shù),然后將單擊的數(shù)值顯示在編輯框中。如果之前沒(méi)有單擊等號(hào),則直接將數(shù)值添加到顯示字符串的最后,通過(guò)UpdateData(FALSE)更新編輯框控件。同時(shí)需要將數(shù)值傳遞給data,通過(guò)changevalue()函數(shù)改變數(shù)值數(shù)組中的數(shù)值。2)雙目運(yùn)算消息處理函數(shù)void CfengwanjincalculatorDlg:OnBnClickedButtonJia()/加sincos();if (flaglast = 0)|(flaglast = jiecheng)shuangmusuanfu(L+, jia);flaglast = jia;jiajian0+;jiajianjiajian0 = 1;雙目運(yùn)算首先設(shè)置相應(yīng)標(biāo)志和參數(shù)的改變,其主要的函數(shù)體部分由shuangmusuanfu函數(shù)概括,其中jia參量為用枚舉定義的一個(gè)常量。枚舉定義如下:enum suit jia = 1 , jian , cheng , chu , jiecheng , zhishu , Sin , Cos ;shuangmusuanfu中函數(shù)實(shí)現(xiàn)部分:函數(shù)體中首先對(duì)是否按下等號(hào)是否有表達(dá)式錯(cuò)誤進(jìn)行判斷,如果相應(yīng)標(biāo)志為1,則轉(zhuǎn)到相應(yīng)處理函數(shù),否則將算符存儲(chǔ),數(shù)值計(jì)數(shù)器num0加一。3)清除函數(shù)void CfengwanjincalculatorDlg:OnBnClickedButtonClear()UpdateData(TRUE);mystr = L;flagdian = 0;beishu = 1;flagerror = 0;data = 0;flagdengyu = 0;for (int i = 0; i LoadIcon(IDR_MAINFRAME);/ 自添加flagdian = 0;beishu = 1;flagerror = 0;data = 0;flagdengyu = 0;for (int i = 0; i SetFont(&m_editFont); / 設(shè)置新字體5、清屏函數(shù)void CfengwanjincalculatorDlg:OnBnClickedButtonClear()/ TODO: 在此添加控件通知處理程序代碼UpdateData(TRUE);mystr = L;flagdian = 0;beishu = 1;flagerror = 0;data = 0;flagdengyu = 0;for (int i = 0; i = 48 & temp 0; mizhi0-)nummizhimizhi0 = pow(nummizhimizhi0, nummizhimizhi0+1);for (int i = mizhimizhi0+1; i num0; i+)numi = numi + 1;num0-;for (int i = 1; i mizhimizhi0)if (chengchui 0)chengchui -= 1;elsechengchui += 1;for (; chengchu0 0; chengchu0-)if (chengchuchengchu0 0)numchengchuchengchu0 *= numchengchuchengchu0 + 1;elseif (num-chengchuchengchu0 + 1 = 0)AfxMessageBox(_T(除數(shù)不能為0!);flagerror = 1;OnBnClickedButtonClear();break;elsenum-chengchuchengchu0 /= num-chengchuchengchu0 + 1;for (int i = abs(chengchuchengchu0) + 1; i num0; i+)numi = numi + 1;num0-;float sum = num1;for (int i = 2; i = num0; i+)sum += jiajiani-1 * numi;for (int i = 0; i 10; i+)numi = 0;num1 = sum;num0 = 1;8、雙目算符對(duì)應(yīng)函數(shù)void CfengwanjincalculatorDlg:shuangmusuanfu(char zifu,int shuzhi)/ 雙目算符對(duì)應(yīng)函數(shù)UpdateData(TRUE);if (flagdengyu = 1)mystr = L;flagdian = 0;beishu = 1;flagdengyu = 0;for (int i = 0; i 10; i+)jiajiani = 0;chengchui = 0;mizhii = 0;flaglast = 0;if (!flagerror)mystr.Format(_T(%g), num1);elsefor (int i = 0; i 10; i+)numi = 0;flagdengyu = 0;num0+;/數(shù)值個(gè)數(shù)+if (!flagerror)mystr += zifu;flagdian = 0;beishu = 1;flagerror = 0;UpdateData(FALSE);9、09對(duì)應(yīng)函數(shù)void CfengwanjincalculatorDlg:shuzihanshu(char shuzi, int shuzhi)/09對(duì)應(yīng)函數(shù)UpdateData(TRUE);if (flagdengyu)OnBnClickedButtonClear();flaglast = 0;mystr += shuzi;data = shuzhi;changevalue();UpdateData(FALSE);10、各控件消息響應(yīng)函數(shù)void CfengwanjincalculatorDlg:OnBnClickedButton1()/ TODO: 在此添加控件通知處理程序代碼shuzihanshu(L1, 1);void CfengwanjincalculatorDlg:OnBnClickedButton2()/ TODO: 在此添加控件通知處理程序代碼shuzihanshu(L2, 2);void CfengwanjincalculatorDlg:OnBnClickedButton3()/ TODO: 在此添加控件通知處理程序代碼shuzihanshu(L3, 3);void CfengwanjincalculatorDlg:OnBnClickedButton4()/ TODO: 在此添加控件通知處理程序代碼shuzihanshu(L4, 4);void CfengwanjincalculatorDlg:OnBnClickedButton5()/ TODO: 在此添加控件通知處理程序代碼shuzihanshu(L5, 5);void CfengwanjincalculatorDlg:OnBnClickedButton6()/ TODO: 在此添加控件通知處理程序代碼shuzihanshu(L6, 6);void CfengwanjincalculatorDlg:OnBnClickedButton7()/ TODO: 在此添加控件通知處理程序代碼shuzihanshu(L7, 7);void CfengwanjincalculatorDlg:OnBnClickedButton8()/ TODO: 在此添加控件通知處理程序代碼shuzihanshu(L8, 8);void CfengwanjincalculatorDlg:OnBnClickedButton9()/ TODO: 在此添加控件通知處理程序代碼shuzihanshu(L9, 9);void CfengwanjincalculatorDlg:OnBnClickedButton0()/ TODO: 在此添加控件通知處理程序代碼shuzihanshu(L0, 0);void CfengwanjincalculatorDlg:OnBnClickedButtonDian()/ TODO: 在此添加控件通知處理程序代碼UpdateData(TRUE);if (flagdengyu)OnBnClickedButtonClear();elseif(flagdian=0)mystr += L.;flagdian = 1;flaglast = 0;UpdateData(FALSE);void CfengwanjincalculatorDlg:sincos()if (nextdata2 * (int)nextdata0 - 1 = Sin)nextdata2 * (int)nextdata0 = num(int)num0;num(int)num0 = sin(num(int)num0);nextdata2 * (int)nextdata0 - 1 = -Sin;if (nextdata2 * (int)nextdata0 - 1 = Cos)nextdata2 * (int)nextdata0 = num(int)num0;num(int)num0 = cos(num(int)num0);nextdata2 * (int)nextdata0 - 1 = -Cos;void CfengwanjincalculatorDlg:OnBnClickedButtonJia()/加/ TODO: 在此添加控件通知處理程序代碼sincos();if (flaglast = 0)|(flaglast = jiecheng)shuangmusuanfu(L+, jia);flaglast = jia;jiajian0+;jiajianjiajian0 = 1;void CfengwanjincalculatorDlg:OnBnClickedButtonJian()/減/ TODO: 在此添加控件通知處理程序代碼sincos();if (flaglast = 0) | (flaglast = jiecheng)shuangmusuanfu(L-, jian);flaglast = jian;jiajian0+;jiajianjiajian0 = -1;void CfengwanjincalculatorDlg:OnBnClickedButtonCheng()/乘/ TODO: 在此添加控件通知處理程序代碼sincos();if (flaglast = 0) | (flaglast = jiecheng)shuangmusuanfu(L*, cheng);flaglast = cheng;chengchu0+;chengchuchengchu0 = (int)num0-1;void CfengwanjincalculatorDlg:OnBnClickedButtonChu()/除/ TODO: 在此添加控件通知處理程序代碼sincos();if (flaglast = 0) | (flaglast = jiecheng)shuangmusuanfu(L/, chu);flaglast = chu;chengchu0+;chengchuchengchu0 = -(int)num0-1);void CfengwanjincalculatorDlg:OnBnClickedButtonZhishu()/指數(shù)/ TODO: 在此添加控件通知處理程序代碼sincos();if (flaglast = 0) | (flaglast = jiecheng)shuangmusuanfu(L, zhishu);flaglast = zhishu;mizhi0+;mizhimizhi0 = (int)num0-1;void CfengwanjincalculatorDlg:OnBnClickedButtonJiecheng()/階乘/ TODO: 在此添加控件通知處理程序代碼if (fl
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教版小學(xué)英語(yǔ)四年級(jí)下學(xué)期末測(cè)試卷
- 互聯(lián)網(wǎng)常見(jiàn)術(shù)語(yǔ)
- 抖音新手運(yùn)營(yíng)培訓(xùn)
- 舉行無(wú)煙日宣傳活動(dòng)總結(jié)模版
- 應(yīng)聘教師考試試題及答案
- 特種工業(yè)設(shè)備融資租賃項(xiàng)目風(fēng)險(xiǎn)防控?fù)?dān)保合同
- 新疆公務(wù)員面試題及答案
- 誠(chéng)信房產(chǎn)中介二手房買(mǎi)賣(mài)代理服務(wù)合同
- 法律認(rèn)證服務(wù)補(bǔ)充協(xié)議書(shū)
- 道路清掃保潔標(biāo)書(shū)服務(wù)方案
- 重慶市林業(yè)工程師職稱(chēng)考試復(fù)習(xí)資料《專(zhuān)業(yè)知識(shí)》
- 血液學(xué)檢驗(yàn)51第九章-第6節(jié)-骨髓增生異常-骨髓增殖性腫瘤
- 廣州國(guó)際輕紡城項(xiàng)目分析ppt課件
- T∕CNTAC 23-2018 醫(yī)護(hù)職業(yè)服裝
- 芯片生產(chǎn)全過(guò)程從沙子到封裝課件
- 水泥混凝土路面翻修施工方案完整
- 怡口軟水機(jī)中央凈水機(jī)安裝調(diào)試指南.
- 暖通畢業(yè)設(shè)計(jì)外文翻譯
- 小學(xué)英語(yǔ)正在進(jìn)行時(shí)用法及習(xí)題(含答案)
- 小黃瓜種植觀察日記(課堂PPT)
- 焊縫外觀質(zhì)量檢驗(yàn)規(guī)范
評(píng)論
0/150
提交評(píng)論