C++課程設(shè)計(jì)--計(jì)算器設(shè)計(jì)報(bào)告_第1頁
C++課程設(shè)計(jì)--計(jì)算器設(shè)計(jì)報(bào)告_第2頁
C++課程設(shè)計(jì)--計(jì)算器設(shè)計(jì)報(bào)告_第3頁
C++課程設(shè)計(jì)--計(jì)算器設(shè)計(jì)報(bào)告_第4頁
C++課程設(shè)計(jì)--計(jì)算器設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、.一、項(xiàng)目簡介本設(shè)計(jì)將實(shí)現(xiàn)一個(gè)簡單計(jì)算器。其功能參照Windows附件中自帶的計(jì)算器。這個(gè)計(jì)算器實(shí)現(xiàn)了簡單的四則運(yùn)算功能,還實(shí)現(xiàn)了模運(yùn)算和指數(shù)運(yùn)算,具有簡潔的圖文外觀。它的設(shè)計(jì)按軟件工程的方法進(jìn)行,系統(tǒng)具有良好的界面、必要的交互讓使用人員能快捷簡單地進(jìn)行操作。即時(shí)準(zhǔn)確地獲得需要的計(jì)算的結(jié)果,充分降低了數(shù)字計(jì)算的難度和節(jié)約了時(shí)間。在課程設(shè)計(jì)中,系統(tǒng)開發(fā)平臺為Windows 7,程序設(shè)計(jì)設(shè)計(jì)語言采用Visual C+,在程序設(shè)計(jì)中,采用了面向?qū)ο蟮慕鉀Q問題的方法。在程序設(shè)計(jì)中,通過設(shè)計(jì)、編制、調(diào)試一個(gè)模擬計(jì)算器的程序,加深對語法及語義分析原理的理解,并實(shí)現(xiàn)對命令語句的靈活應(yīng)用。在程序設(shè)計(jì)中,可以用

2、面向?qū)ο蟪绦蛟O(shè)計(jì)方法解決問題。由于多個(gè)函數(shù)均需要訪問某些數(shù)據(jù),這些數(shù)據(jù)常被設(shè)計(jì)為全局變量。而在面向?qū)ο蟪绦蛟O(shè)計(jì)中關(guān)鍵是如何將問題域中的實(shí)體(即日常所見的概念)抽取出來,作為C+程序中的類,而屬性與行為作為類的兩類要素通常是必不可少的,甚至還應(yīng)考慮類必須滿足的約束。二、功能介紹它的設(shè)計(jì)按軟件工程的方法進(jìn)行,系統(tǒng)具有良好的界面;必要的交互信息;簡約美觀的效果。使用人員能快捷簡單地進(jìn)行操作。即可單擊按鈕進(jìn)行操作。即時(shí)準(zhǔn)確地獲得需要的計(jì)算的結(jié)果,充分降低了數(shù)字計(jì)算的難度和節(jié)約了時(shí)間,對人們的生活有一定的幫助。(1)包含的功能有:加、減、乘、除運(yùn)算,開方、求模等功能(2)計(jì)算器上數(shù)字09為一個(gè)控件數(shù)組,

3、加、減、乘、除為一個(gè)控件數(shù)組,其余為單一的控件。(3) 輸入的原始數(shù)據(jù)和結(jié)果都顯示在窗口頂部的同一個(gè)標(biāo)簽中。 (4) 計(jì)算功能基本上是用公式計(jì)算方法實(shí)現(xiàn)。(5) 程序可以能自動判斷輸出數(shù)據(jù)的正確性,保證不出現(xiàn)結(jié)果中以0開頭等不正常現(xiàn)象。功能模塊的實(shí)現(xiàn):基于dialog類添加Caculator類,在這個(gè)類中實(shí)現(xiàn)高級的按鈕控件。在此類中對于所有的對于按鈕的繪制工作都是在對話框資源管理中完成的,實(shí)現(xiàn)按鈕對鼠標(biāo)單擊動作執(zhí)行不同的計(jì)算,在UpdateData(false)函數(shù)后顯示文本。三、系統(tǒng)實(shí)現(xiàn)概述1、窗體設(shè)計(jì)打開Microsoft Visual C+ 6.0,在文件中點(diǎn)擊新建,在彈出框內(nèi)選擇MFC

4、 AppWizardexe工程,輸入工程名Calculator及其所在位置,點(diǎn)擊確定,如圖1所示。 圖1將彈出MFC應(yīng)用程序向?qū)?步驟1對話框,選擇基本對話框,點(diǎn)擊完成,如圖2所示。圖2這樣,MFC AppWizard就建立了一個(gè)基于對話窗口的程序框架,如圖3所示。圖3 2、編輯資源(1)編輯對話框及控件資源 在圖5所示的Resoure View選項(xiàng)卡中打開Dialog資源組,雙擊IDD_CALCULATOR_DIALOG,在右邊的窗口中顯示出待編輯的對話框。開始擺放控件,包括編輯框和按鈕的創(chuàng)建。而按鈕的創(chuàng)建則以“1”為例進(jìn)行介紹,其他按鈕的創(chuàng)建可參照以下步驟進(jìn)行操作。a)在圖5中Contro

5、ls的編輯框按鈕上單擊鼠標(biāo)左鍵,在對話框編輯窗口上合適的位置按下鼠標(biāo)左鍵并拖動鼠標(biāo)畫出一個(gè)大小合適的編輯框。在編輯框上單擊鼠標(biāo)右鍵,在彈出的快捷萊單中選擇屬性選項(xiàng),此時(shí)彈出Edit屬性對話框,如圖4所示,在該對話框中輸入ID屬性。 圖4b)在圖3中Controls的按鈕上單擊鼠標(biāo)左鍵,在對話框上的合適的位置上按下鼠標(biāo)左鍵并拖動鼠標(biāo)畫出一個(gè)大小合適的下壓式按鈕。在按鈕上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇屬性選項(xiàng),此時(shí)也彈出Push Button屬性對話框,如圖5所示,在該對話框中輸入控件的ID值和標(biāo)題。圖5 按照上面的操作過程編輯其他按鈕和編輯框等對象的屬性。利用Visual C+提供的資源編

6、輯器對對話框資源進(jìn)行編輯。刪除對話框中默認(rèn)的OK和Cancel按鈕。添加一個(gè)Edit控件,其控件ID為IDC_EDIT1。添加若干按鈕控件,其ID如表a所示。按鈕名稱按鈕ID用途0IDC_0按鍵01IDC_1按鍵12IDC_2按鍵23IDC_3按鍵34IDC_4按鍵45IDC_5按鍵56IDC_6按鍵67IDC_7按鍵78IDC_8按鍵89IDC_9按鍵9.IDC_POINT小數(shù)點(diǎn)=IDC_EQUAL等號+IDC_ADD加號-IDC_MINUS減號*IDC_MUTIPLY乘號/IDC_DIVID除號BackspaceIDC_BACKSPACE退格IDC_SQUAREROOT開方%IDC_PER

7、CENT百分號1/xIDC_RECIPROCAL倒數(shù)幫助信息IDC_HELP幫助信息+/-IDC_SIGN相反數(shù)ModIDC_MOD求余n!IDC_FACTORIALn的階乘SinIDC_SIN正弦函數(shù)CosIDC_COS余弦函數(shù)TanIDC_TAN正弦函數(shù)LogIDC_LOG常用對數(shù)函數(shù)LnIDC_LN自然對數(shù)函數(shù)xyIDC_POWER以x為底的y次冪二進(jìn)制IDC_CHANGE十進(jìn)制轉(zhuǎn)為二進(jìn)制AndIDC_AND邏輯運(yùn)算符NotIDC_NOT邏輯運(yùn)算符OrIDC_OR邏輯運(yùn)算符XorIDC_XOR邏輯運(yùn)算符IDC_PI圓周率00IDC_HUNDRED乘百表a 完成后界面如圖6所示。圖6(2)

8、連接變量和代碼a) 給編輯框連接變量。在編輯框上單擊鼠標(biāo)右鍵,在彈出菜單中選擇建立類向?qū)Р藛雾?xiàng),彈出MFC ClassWizard對話框,選擇Member Variables選項(xiàng)卡,如圖7所示。圖7在Control IDs列表框中選擇IDC_DISPLAY,單擊Add Variables按鈕,在彈出的對話框中連接變量m_edit_value。變量類型設(shè)定為CString型。如圖8所示。圖8 b) 給“1”按鈕連接代碼。在“1”按鈕上單擊鼠標(biāo)右鍵,選擇ClassWizard菜單項(xiàng),在彈出的對話框中選擇Messages Maps選項(xiàng)卡,然后在Object IDs列表框中選擇IDC_1,在Messa

9、ges列表框中選擇BN_CLICKED項(xiàng),即選擇單擊按鈕事件,如圖9所示。 圖9(3)菜單的設(shè)計(jì)選擇 插入/資源命令,將顯示插入資源對話框。如圖10所示。選擇Menu,點(diǎn)擊新建即可。圖10Resoure View選項(xiàng)卡中打開Menu資源組,雙擊IDR_MENU1, 然后給菜單添加相應(yīng)的標(biāo)題,并把每個(gè)菜單對應(yīng)的ID值與相應(yīng)的按鈕的一致。如圖11所示。 圖11在對話框的任何一個(gè)空白域單擊鼠標(biāo)右鍵,然后在彈出的快捷菜單中選擇屬性命令,彈出對話 屬性對話框,如圖12。在對話框中的菜單組合框中選擇IDR_MENU1。圖12最終的得到的界面如圖13。圖13四、關(guān)鍵技術(shù)(1)操作數(shù)的輸入編輯框所關(guān)聯(lián)的變量為

10、m_temp,程序開始時(shí)為零。每按下一個(gè)數(shù)字鍵按鈕,就把它累加到m_temp里并刷新顯示。BOOL型變量UpdateData來判斷是否有小數(shù)點(diǎn)和一個(gè)整型數(shù)dint來表示小數(shù)點(diǎn)后的數(shù)據(jù)的位數(shù)。當(dāng)UpdateData=TRUE時(shí),表示有小數(shù)點(diǎn),否則則表示無小數(shù)點(diǎn)。按下小數(shù)點(diǎn)按鈕后執(zhí)行UpdateData=TRUE。當(dāng)按下一個(gè)數(shù)字鍵時(shí),首先根據(jù)ele判斷是否按下小數(shù)點(diǎn),若有則把小數(shù)點(diǎn)后數(shù)的位數(shù)加1,dint則為此次鍵入的數(shù)所處的位數(shù),將鍵入的數(shù)除以dint個(gè)10然后累加到編輯框所關(guān)聯(lián)的變量m_temp上,若沒有則把m_temp乘以10,然后累加到編輯框所關(guān)聯(lián)的變量m_temp上。BOOL CCalc

11、ulatorDlg:OnInitDialog()CDialog:OnInitDialog();/ Add "About." menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL)CString s

12、trAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when the application's main window is not a dia

13、logSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization here OperatorPressed=FALSE; After=FALSE; m_edit_value="0" value1=0,value2=0,result=0; Restarted=TRUE;return TRUE; / return TRUE unless you set the focus to a control(2)單目運(yùn)算符功能的實(shí)

14、現(xiàn)由于單目運(yùn)算符中必須有執(zhí)行運(yùn)算的函數(shù),因而頭文件中要加入math.h,如m_temp=sqrt(m_temp).按下按鈕即可實(shí)現(xiàn)其功能。void CCalculatorDlg:OnSquareroot() / TODO: Add your control notification handler code hereUpdateData(TRUE);double m_temp=atof(m_edit_value);/將字符串類型的m_edit_value轉(zhuǎn)化為浮點(diǎn)數(shù)類型的m_tempif(m_temp>=0)m_temp=sqrt(m_temp);/求開方m_edit_value.For

15、mat("%g",m_temp);/將m_temp的值返回到m_edit_value中,默認(rèn)精度為六位UpdateData(false);elseMessageBox("負(fù)數(shù)不能開方");(3)雙目運(yùn)算符功能的實(shí)現(xiàn)雙目運(yùn)算符需要兩個(gè)操作數(shù)才能運(yùn)算,所以在執(zhí)行雙目運(yùn)算符按鈕的函數(shù)代碼中,要把m_temp中的值保存到變量temp2中,然后把m_temp清零。這樣即可保存第一個(gè)操作數(shù)。另外先定義了一個(gè)整形變量addt,在不同的雙目運(yùn)算符中給addt賦不同的值,然后在等號中用switch語句來匹配addt值來判斷需要執(zhí)行何種雙目運(yùn)算。為實(shí)現(xiàn)連續(xù)運(yùn)算,程序有所改動

16、,參見(6)。(4)退格鍵功能的實(shí)現(xiàn)當(dāng)按下一次退格按鈕時(shí),若m_temp為整數(shù),只需對其中數(shù)據(jù)除以10再取整即可,若按下一次退格按鈕為小數(shù),則根據(jù)小數(shù)點(diǎn)后數(shù)據(jù)的位數(shù)dint進(jìn)行操作,先對m_temp執(zhí)行(dint-1)次乘以10運(yùn)算,然后取整,接著執(zhí)行(dint-1)次除以10的運(yùn)算即可。完成后需要把dint將減小1。void CCalculatorDlg:OnBackspace() / TODO: Add your control notification handler code here UpdateData(true);char str256;int length;length = m

17、_edit_value.GetLength();/得到m_edit_value的長度,賦給lengthfor(int i=0;i<length-1;i+) stri=m_edit_value.GetAt(i);/將m_edit_value中(除最后一個(gè))每個(gè)位置的值賦給str m_edit_value.Format("%g",atof(str);/將字符串類型的str轉(zhuǎn)化為浮點(diǎn)數(shù)類型,并返回給m_edit_valueUpdateData(false);對于單目運(yùn)算符:每次運(yùn)算完之后都會對m_temp清零,因此其結(jié)果也要賦給temp2,下次運(yùn)算是則會用到num2,于是第

18、一次運(yùn)算時(shí)直接將m_temp 的值賦給temp2,對其進(jìn)行運(yùn)算。以開根號為例,在消息處理函數(shù)代碼中將“m_temp=sqrt(m_temp);”改為“temp2=m_temp; m_temp=sqrt(temp2); temp2=m_temp;”。但是第一次運(yùn)算執(zhí)行完成之后m_temp被清零,所以之后將m_temp的值不能賦給temp2,代碼改為 “if(m_temp>=0) m_temp=sqrt(temp2); temp2m_temp;”。其他單目運(yùn)算符同理。為實(shí)現(xiàn)連續(xù)運(yùn)算是不需要按下等號即可實(shí)現(xiàn),又在所有的運(yùn)算符按鈕的消息處理函數(shù)代碼前加上了“if(addt!=0)Onequal();”。既若之前有按下雙目運(yùn)算符和兩個(gè)操作數(shù)則連續(xù)運(yùn)算再按下任一運(yùn)

溫馨提示

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

評論

0/150

提交評論