課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告2402100411孫朋朋 Microsoft Office Word 文檔_第1頁
課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告2402100411孫朋朋 Microsoft Office Word 文檔_第2頁
課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告2402100411孫朋朋 Microsoft Office Word 文檔_第3頁
課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告2402100411孫朋朋 Microsoft Office Word 文檔_第4頁
課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告2402100411孫朋朋 Microsoft Office Word 文檔_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

《面向?qū)ο蟪绦蛟O(shè)計(jì)》課程設(shè)計(jì)報(bào)告《面向?qū)ο蟪绦蛟O(shè)計(jì)》課程設(shè)計(jì)報(bào)告設(shè)計(jì)題目:MFC計(jì)算器學(xué)院:信息工程學(xué)院專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)(交通信息系)姓名: 孫朋朋學(xué)號(hào):2402100411指導(dǎo)教師:張少博2011年12月2日

目錄1基本功能描述 12設(shè)計(jì)思路 13軟件設(shè)計(jì) 43.1設(shè)計(jì)步驟 43.2界面設(shè)計(jì) 53.3關(guān)鍵功能的實(shí)現(xiàn) 114結(jié)論與心得體會(huì) 125參考文獻(xiàn) 136思考題 137附錄 147.1調(diào)試報(bào)告 147.2測(cè)試結(jié)果 157.3關(guān)鍵源代碼 161基本功能描述簡(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_result為零。按下數(shù)字按鈕后,判斷m_result的正負(fù)號(hào),對(duì)其進(jìn)行相關(guān)處理,然后在判斷是否有小數(shù)點(diǎn),處理后輸出結(jié)果。回到總流程圖中,輸完第一個(gè)操作數(shù)后,若按下雙目運(yùn)算符,則把m_num存入num1,按下輸入第二個(gè)操作數(shù)并算出結(jié)果。若按下的是單目運(yùn)算符,則直接對(duì)其處理得出結(jié)果。若按下清零,則m_result等于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é)束。NNNY鍵入一個(gè)數(shù)是否為正數(shù)?m_result=10*m_result+im_num=10*m_result-i是否為小數(shù)?用UpdateData(FALSE)刷新顯示還原m_result根據(jù)小數(shù)點(diǎn)后位數(shù)將鍵入的數(shù)除以n次10累加到m_resultYN繼續(xù)鍵入數(shù)字?Y輸入數(shù)據(jù)子函數(shù)編輯框關(guān)聯(lián)變量m_result=0圖1輸入數(shù)據(jù)子函數(shù)流程圖圖2簡(jiǎn)單計(jì)算器總流程圖YY開始輸入數(shù)據(jù)子函數(shù)編輯框關(guān)聯(lián)的變量保存至num1輸入數(shù)據(jù)子函數(shù)進(jìn)行運(yùn)算運(yùn)算是否合法把結(jié)果保存到num1m_resul清零彈出對(duì)話框顯示ERRORNY是否用保存的結(jié)果繼續(xù)進(jìn)行運(yùn)算N結(jié)束jie雙目運(yùn)算符單目運(yùn)算符是否開始新一輪的計(jì)算YN3軟件設(shè)計(jì)3.1設(shè)計(jì)步驟打開MicrosoftVisualStudio2010,在文件中點(diǎn)擊新建,在彈出框內(nèi)選擇MFCAppWizard[exe]工程,輸入工程名Calculator及其所在位置,點(diǎn)擊確定,如圖所示示。圖3新建MFCAppWizard[exe]工程將彈出MFCAppWizard-step1對(duì)話框,選擇基本對(duì)話框,點(diǎn)擊完成,如圖4所示。圖4基本對(duì)話框這樣,MFCAppWizard就建立了一個(gè)基于對(duì)話窗口的程序框架,如圖5所示。圖5新建的對(duì)話框3.2界面設(shè)計(jì)1、創(chuàng)建控件在圖5所示的ResoureView選項(xiàng)卡中打開Dialog資源組,雙擊IDD_ZHOUTONG_DIALOG,在右邊的窗口中顯示出待編輯的對(duì)話框。開始擺放控件,包括編輯框和按鈕的創(chuàng)建。按鈕的創(chuàng)建以“1”為例進(jìn)行介紹,其他按鈕的創(chuàng)建可參照此進(jìn)行操作。1)在圖5中Controls的“編輯框”按鈕上單擊鼠標(biāo)左鍵,在對(duì)話框編輯窗口上合適的位置按下鼠標(biāo)左鍵并拖動(dòng)鼠標(biāo)畫出一個(gè)大小合適的編輯框。在編輯框上單擊鼠標(biāo)右鍵,在彈出的快捷萊單中選擇屬性選項(xiàng),此時(shí)彈出Edit屬性對(duì)話框,如圖6所示,在該對(duì)話框中輸入ID屬性。圖6Edit屬性對(duì)話框2)在圖3中Controls的“Button”按鈕上單擊鼠標(biāo)左鍵,在對(duì)話框上的合適的位置上按下鼠標(biāo)左鍵并拖動(dòng)鼠標(biāo)畫出一個(gè)大小合適的下壓式按鈕。在按鈕上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇屬性選項(xiàng),此時(shí)也彈出PushButton屬性對(duì)話框,如圖7所示,在該對(duì)話框中輸入控件的ID值和標(biāo)題屬性。圖7PushButton屬性按照上面的操作過程編輯其他按鈕和編輯框等對(duì)象的屬性。表1各按鈕和編輯框等對(duì)象的屬性對(duì)象ID標(biāo)題或說明編輯框IDC_Calcculator結(jié)果顯示按鈕IDC_BUTTON0CE按鈕IDC_BUTTON11按鈕IDC_BUTTON22按鈕IDC_BUTTON33按鈕IDC_BUTTON44按鈕IDC_BUTTON55按鈕IDC_BUTTON66按鈕IDC_BUTTON77按鈕IDC_BUTTON88按鈕IDC_BUTTON99按鈕IDC_BUTTON10sqrt按鈕IDC_BUTTON11.按鈕IDC_BUTTON12sin按鈕IDC_BUTTON13ln按鈕IDC_BUTTON141/x按鈕IDC_BUTTON15(x)y//指數(shù)運(yùn)算按鈕IDC_BUTTON16+按鈕IDC_BUTTON17-按鈕IDC_BUTTON18*按鈕IDC_BUTTON19/按鈕IDC_BUTTON20-/+按鈕IDC_BUTTON21=。圖8計(jì)算器界面2、連接變量和代碼1)給編輯框連接變量。在編輯框上單擊鼠標(biāo)右鍵,在彈出菜單中選擇ClassWizard菜單項(xiàng),彈出MFCClassWizard對(duì)話框,選擇MemberVariables選項(xiàng)卡,如圖9所示。圖9MFCClassWizard對(duì)話框中的MenberVariable選項(xiàng)卡在ControlIDs列表框中選擇IDC_Calculator,單擊AddVariables按鈕,在彈出的對(duì)話框中連接變量m_result。變量類型設(shè)定為doubel型。2)給“1”按鈕連接代碼。在“1”按鈕上單擊鼠標(biāo)右鍵,選擇ClassWizard菜單項(xiàng),在彈出的對(duì)話框中選擇MessagesMaps選項(xiàng)卡,然后在ObjectIDs列表框中選擇IDC_ADD_BUTTON,在Messages列表框中選擇BN_CLICKED項(xiàng),即選擇單擊按鈕事件,如圖11所示。圖10“1”按鈕鏈接代碼對(duì)話框3.3關(guān)鍵功能的實(shí)現(xiàn)1)操作數(shù)的輸入編輯框所關(guān)聯(lián)的變量為m_result,程序開始時(shí)為零。每按下一個(gè)數(shù)字鍵按鈕,就把它累加到m_result里并刷新顯示。int型變量number來判斷是否有小數(shù)點(diǎn)和一個(gè)整型數(shù)dot來表示小數(shù)點(diǎn)后的數(shù)據(jù)的位數(shù)。當(dāng)numer=0時(shí),表示有小數(shù)點(diǎn),否則則表示無小數(shù)點(diǎn)。按下小數(shù)點(diǎn)按鈕后執(zhí)行number=0。當(dāng)按下一個(gè)數(shù)字鍵時(shí),首先根據(jù)number的值判斷是否按下小數(shù)點(diǎn),若有則把小數(shù)點(diǎn)后數(shù)的位數(shù)加1,dot則為此次鍵入的數(shù)所處的位數(shù),將鍵入的數(shù)除以dot個(gè)10然后累加到編輯框所關(guān)聯(lián)的變量m_result上,若沒有則把m_result乘以10,然后累加到編輯框所關(guān)聯(lián)的變量m_result上。2)單目運(yùn)算符功能的實(shí)現(xiàn)由于單目運(yùn)算符中必須有執(zhí)行運(yùn)算的函數(shù),因而頭文件中要加入<cmath.>如m_result=sqrt(num1).按下按鈕即可實(shí)現(xiàn)其功能。3)雙目運(yùn)算符功能的實(shí)現(xiàn)雙目運(yùn)算符需要兩個(gè)操作數(shù)才能運(yùn)算,所以在執(zhí)行雙目運(yùn)算符按鈕的函數(shù)代碼中,要把m_result中的值保存到變量num1中,然后把m_result清零。這樣即可保存第一個(gè)操作數(shù)。另外先定義了一個(gè)整形變量mark,在不同的雙目運(yùn)算符中給mark賦不同的值,然后在等號(hào)中用switch語句來匹配mark值來判斷需要執(zhí)行何種雙目運(yùn)算。4)負(fù)號(hào)功能的實(shí)現(xiàn)。鍵入操作數(shù)時(shí)。在正負(fù)號(hào)按鈕的消息響應(yīng)函數(shù)內(nèi)容為m_result=-m_result;Num1=m_result,updateDate(False);雙目運(yùn)算功能的實(shí)現(xiàn)要連續(xù)運(yùn)算必須將每次運(yùn)算的結(jié)果保存下來。對(duì)于雙目運(yùn)算符:首先在等號(hào)按鈕的消息處理函數(shù)中在m_result清零之前將m_result的值賦給num1.“.,對(duì)于單目運(yùn)算符:每次運(yùn)算完之后都會(huì)對(duì)m_result清零,因此其結(jié)果也要賦給num1下次運(yùn)算是則會(huì)用到num1,于是第一次運(yùn)算時(shí)直接將m_result的值賦給num1,對(duì)其進(jìn)行運(yùn)算。以開根號(hào)為例,在消息處理函數(shù)代碼中將“m_result=sqrt(num1);num1=m_result”。其他單目運(yùn)算符同理。4結(jié)論與心得體會(huì)經(jīng)過多番測(cè)試,得出結(jié)論為設(shè)計(jì)的計(jì)算器能夠完成功能描述內(nèi)容中的全部功能。經(jīng)過一個(gè)星期的VC++課程\o"plash笑話之霸王別雞篇@foho.cc"設(shè)計(jì),我在老師和同學(xué)的共同幫助下,順利完成該課程設(shè)計(jì),收獲很大?!痹诒緦W(xué)期課程設(shè)計(jì)是很必要的,加深我們對(duì)MFC程序設(shè)計(jì)的掌握,而且還及時(shí)、真正的做到了學(xué)以致用。主要是以下幾點(diǎn)。要善于查找資料提高自己的資料查詢能力,要善于利用網(wǎng)絡(luò)來獲得知識(shí),獲得幫助。開始著手程序設(shè)計(jì)時(shí),有些功能感覺無從下手,都不知道要干什么。這些問題只要找到相關(guān)的資料就會(huì)得到提示從而理解所要解決問題的大致方向。有了明確的目的,就可以發(fā)揮自己的頭腦來完成它了。要善于思考。程序中有些實(shí)現(xiàn)難點(diǎn)和最初完成程序時(shí)免不了的許多不足就需要自己根據(jù)代碼認(rèn)真思考來解決。只有這樣才能糾正程序的不足并使其更加人性化。這次課程設(shè)計(jì)讓我學(xué)到了很多,不僅是鞏固了學(xué)的MFC程序設(shè)計(jì)知識(shí),而且也培養(yǎng)了我的動(dòng)手能力,更令我的創(chuàng)造性思維得到拓展。希望今后類似這樣課程設(shè)計(jì)、類似這樣的鍛煉機(jī)會(huì)能更多些!本次MFC計(jì)算器的制作,學(xué)習(xí)到了MFC基本的編程方法對(duì)OOP編程的理解進(jìn)一步加深。程序仍然存在一定的問題,比如除數(shù)不能為0的Exceptionhandle,通過這次課程設(shè)計(jì),以后Windows應(yīng)用程序勢(shì)必會(huì)輕車熟路}5參考文獻(xiàn)[1]揣錦華.面向?qū)ο蟪绦蛟O(shè)計(jì)與VC++實(shí)踐.西安電子科技大學(xué)出版社,2005[2]張建宏,湯練兵,馬德駿.計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)-C語言程序設(shè)計(jì).科學(xué)出版社,2006[3]陳清華.VisualC++課程設(shè)計(jì)案例精選與編程指導(dǎo).東南大學(xué)出版社,2004[4]孫鑫c++教程[5]window運(yùn)行原理6思考題1、程序中如何實(shí)現(xiàn)小數(shù)的顯示與運(yùn)算?答:在CalculattorDlg.h頭文件中定義一個(gè)int型變number來判斷是否有小數(shù)點(diǎn)和一個(gè)整型數(shù)dot來表示小數(shù)點(diǎn)后的數(shù)據(jù)的位數(shù)。當(dāng)number=0時(shí),表示有小數(shù)點(diǎn),否則則表示無小數(shù)點(diǎn)。按下小數(shù)點(diǎn)按鈕后執(zhí)行number=0。首先根據(jù)number的值判斷是否按下小數(shù)點(diǎn),若有則把小數(shù)點(diǎn)后數(shù)的位數(shù)加1,dot則為此次鍵入的數(shù)所處的位數(shù),將鍵入的數(shù)除以dot個(gè)10然后累加到編輯框所關(guān)聯(lián)的變量m_result上。2、描述等號(hào)對(duì)應(yīng)的消息處理函數(shù)中需要處理的問題及相應(yīng)的實(shí)現(xiàn)代碼?答:在雙目運(yùn)算符按鈕函數(shù)代碼中將整形變量mark賦值,然后在等號(hào)中用switch語句來匹配mark值來判斷需要執(zhí)行何種雙目運(yùn)算。并將結(jié)果保存以進(jìn)行下次運(yùn)算時(shí)使用,玩策劃那個(gè)一些變量的清零。實(shí)現(xiàn)代碼如下: switch(mark) {case1: m_result=num1+num2; UpdateData(FALSE); num1=m_result; number=2; break; case2: m_result=num1-num2; UpdateData(FALSE); num1=m_result; number=2; break; case3: m_result=num1*num2; UpdateData(FALSE); num1=m_result; number=2; break; case4: m_result=(double)num1/num2; UpdateData(FALSE); num1=m_result; number=2; break; case0: for(inti=1;i<num2;i++) num1*=num1; m_result=num1; UpdateData(FALSE); num1=m_result; number=2; break;}}7.附錄7.1測(cè)試結(jié)果1.輸入“90.5”,“-”,“60.7”,“=”,并在菜單中同樣輸入這組操作,均得到結(jié)果如圖16。圖11結(jié)果圖1結(jié)果正確,證明可以實(shí)現(xiàn)雙目運(yùn)算符的連續(xù)運(yùn)算,菜單功能正常。2.輸入“1”,“sin”,結(jié)果如圖17.圖12結(jié)果圖2因?yàn)棣腥〉氖?.1415926,有小小偏差,認(rèn)為結(jié)果正確。證明可以實(shí)現(xiàn)單目運(yùn)算符的連續(xù)運(yùn)算。7.2關(guān)鍵源代碼1、CalculatorDlg.h里變量的定義:Intnumber;//,判斷當(dāng)前值是否是正數(shù)還是負(fù)數(shù)intdots;//表明操作數(shù)的位數(shù)inti;intdot/;/判斷小數(shù)后的位數(shù)doublenum1;doublenum2;2、程序運(yùn)行時(shí)初始化和頭文件:在CalculatorDlg.cpp的OnInitDialog()里調(diào)用cal();CalculatorDlg.cpp里加上頭文件#include<cmath>3、數(shù)字鍵0的程序:(數(shù)字鍵0到9類似)voidCCalculatorDlg::OnBnClickedButton0(){ //TODO:在¨2此??添?¨a加¨?控?件t通a?§知a處?|理¤¨a程¨?序¨°代?¨2碼? if(number==1)//num1 { dots=1; dot=0; m_result=m_result*10+0; num1=m_result; UpdateData(FALSE); } else { if(number==0) { dot++; doublea=1;/ for(inti=0;i<dot;i++) a/=10; m_result=m_result+0*a; if(1==dots) num1=m_result; else num2=m_result; UpdateData(FALSE);// } if(number==2)//num2 { dots=2; dot=0; m_result=m_result*10+0; num2=m_result; UpdateData(FALSE); } }}4,加法鍵+的程序:voidCCalculatorDlg::OnBnClickedButton14()//(“*,—,/類同){ //TODO:在¨2此??添?¨a加¨?控?件t通a?§知a處?|理¤¨a程¨?序¨°代?¨2碼? mark=1; UpdateData(FALSE); m_result=0; number=2;}5、Sqrt鍵的程序:voidCCalculatorDlg::OnBnClickedButton12(){ //TODO:在¨2此??添?¨a加¨?控?件t通a?§知a處?|理¤¨a程¨?序¨°代?¨2碼? num1=m_result=sqrt(num1); UpdateData(FALSE);}6、sin鍵的程序:voidCCalculatorDlg::OnBnClickedButton18(){//TODO:在¨2此??添?¨a加¨?控?件t通a?§知a處?|理¤¨a程¨?序¨°代?¨2碼? num1=m_result=sin(num1); UpdateData(FALSE);}7.1/x鍵的程序:voidCCalculatorDlg::OnBnClickedButton20(){ //TODO:在¨2此??添?¨a加¨?控?件t通a?§知a處?|理¤¨a程¨?序¨°代?¨2碼? num1=m_result=(double)1/num1; UpdateData(FALSE);}8、eq\o(\s\up6(x),\s\do2(y))鍵的程序:voidCCalculatorDlg::OnBnClickedButton23(){ mark=0; UpdateData(FALSE); m_result=0; number=2; //TODO:在¨2此??添?¨a加¨?控?件t通a?§知a處?|理¤¨a程¨?序¨°}9、ln鍵的程序:voidCCalculatorDlg::OnBnClickedButton19(){ //TODO:在¨2此??添?¨a加¨?控?件t通a?§知a處?|理¤¨a程¨?序¨°代?¨2碼? num1=m_result=log(num1); UpdateData(FALSE);}10、=鍵的程序:voidCCalculatorDlg::OnBnClickedButton22(){ cal(); //TODO:在¨2此??添?¨a加¨?控?件t通a?§知a處?|理¤¨a程¨?序¨°代?¨2碼?}voidCCalculatorDlg::cal(){ switch(mark) { case1: m_result=num1+num2; UpdateData(FALSE); num1=m_result; number=2; break; case2: m_result=num1-num2; UpdateData(FALSE); num1=m_result; number=2; break; case3:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論