windows編程大作業(yè)-簡單計算器_第1頁
windows編程大作業(yè)-簡單計算器_第2頁
windows編程大作業(yè)-簡單計算器_第3頁
windows編程大作業(yè)-簡單計算器_第4頁
windows編程大作業(yè)-簡單計算器_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上實 驗 報 告(2013 / 2014 學(xué)年 第 一 學(xué)期)課程名稱windows 編程實驗名稱簡單計算器實驗時間2023年12月20日指導(dǎo)單位計算機、軟件學(xué)院指導(dǎo)教師王子元學(xué)生姓名班級學(xué)號學(xué)院(系)計算機學(xué)院、軟件學(xué)院專 業(yè)計算機軟件與服務(wù)外包專心-專注-專業(yè)實 驗 報 告實驗名稱簡單計算器指導(dǎo)教師王子元實驗類型設(shè)計實驗學(xué)時實驗時間2013.2.20一、 實驗?zāi)康暮鸵笠螅簩崿F(xiàn)一個簡單計算器,其類似于Windows附件中自帶的計算器。要求界面簡潔大方,具有一個菜單欄,一個編輯框及若干按鍵。按鈕控件具有對鼠標敏感的功能,當鼠標位于不同的位置和狀態(tài)時,控件會顯示不同的

2、顏色。1.編程思路清晰,圖像美觀2.代碼書寫規(guī)范,關(guān)鍵部分有注釋 3.功能實現(xiàn)全面,計算結(jié)果正確 4.文檔書寫規(guī)范完整,有測試過程 5.實現(xiàn)按鈕控件對鼠標的敏感處理功能 小組成員背景 計算器的功能和界面我們都是十分熟悉的。雖然目前我們電腦上基本都配置得有windows附件自帶的計算器,相較于系統(tǒng)自帶的計算器,我們想要開發(fā)的計算器是要求能實現(xiàn)復(fù)雜表達式(如2*3+4-(3+2/2)之類的)運算的,并能準確快速的顯示計算結(jié)果的軟件。本軟件的應(yīng)用目標是準確快速的計算表達式運算。本軟件的作用范圍是面向中小學(xué)生的簡單的表達式計算類型。本軟件全部內(nèi)容自含。該項目開發(fā)的周期為兩周二、實驗環(huán)境(實驗設(shè)備)硬件

3、:微型計算機軟件: Microsoft Visual Studio 20103、 實驗原理及內(nèi)容實驗內(nèi)容  1. 工程的創(chuàng)建。使用MFC 創(chuàng)建一個基于對話框的工程; 2. 界面設(shè)計。使用控件工具欄為對話框添加所需控件,并設(shè)置控件屬性;使用界面布局工具欄調(diào)整控件布局,完成應(yīng)用程序界面設(shè)計。 3. 創(chuàng)建對話框成員變量和成員函數(shù)。使用ClassWizard為控件添加相關(guān)聯(lián)的對話框成員變量和消息相應(yīng)函數(shù);在Workspace窗口的ClassView頁中,根據(jù)需要為對話框添加其他成員變量和成員函數(shù)。 4編寫代碼。&

4、#160;5編譯、調(diào)試程序;運行程序,并對程序功能進行測試功能設(shè)計(1) 支持加減乘除運算(2+3=5)(2)支持輸入正確的乘方運算(如23=8)(3)支持混合四則運算(如2+3*2=8)(4)支持正確的表達式運算(如2+3*(2-4/2)=2)(5)計算器的輸入方式:支持鼠標點擊輸入和鍵盤輸入本計算器支持鼠標點擊操作和鍵盤輸入。(鼠標輸入是點擊按鈕,編輯框即顯示點擊的結(jié)果和計算結(jié)果,鍵盤輸入是點擊編輯框鎖定光標后從鍵盤輸入的)。(6)使用圖形界面中的事件委托機制來處理事件響應(yīng)計算器計算結(jié)果的輸出方式:在計算器窗口的顯示。(7) 本計算器應(yīng)該要支持退格和清零。點擊C按鈕將編輯框清零,點擊bac

5、kspace按鈕,退格,清除編輯框中最后一個輸入字符。(8)算術(shù)運算的數(shù)據(jù)類型:整數(shù)和浮點數(shù) 本計算器支持的精度是6位小數(shù),支持的運算是32位,超出即位溢出,同時顯示的結(jié)果僅保留6位小數(shù)。本計算器默認諸如“(8)=”的表達式有效,不設(shè)置錯誤提示。 出現(xiàn)運算異常的情況為:.被除數(shù)為0的情況,提示用戶被除數(shù)不能為零!.輸入的表達式不正確時,提示出錯。(9)點擊等號按鈕,或者鍵盤輸入等號時,計算器在編輯框顯示計算結(jié)果。當用戶通過計算或者輸入得到一個含有等號的表達式之后,再次點擊等號或者鍵盤輸入等號均不再經(jīng)行計算。 (10) 以上所有的運算都是在10進制下進行。(11) 用戶不輸入任何表達式,直接點擊

6、或者鍵盤輸入等號時,默認在編輯框顯示0。實驗結(jié)果:注:關(guān)于鼠標敏感的實現(xiàn)無法截圖,請看程序。進入界面 計算界面 輸入除數(shù)為0輸入:6/0= 運算結(jié)果溢出輸入:*999= 表達式有誤輸入:6*(*4= 實現(xiàn)視圖內(nèi)指定區(qū)域內(nèi)對鼠標點擊和移動的敏感處理功能 需要新加入函數(shù):BOOL CMFCDlg:OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) BOOL bRes=CDialog:OnSetCursor(pWnd, nHitTest, message);HCURSOR h;if(nHitTest=HTCLIENT&&messa

7、ge=WM_RBUTTONDOWN) h=AfxGetApp()->LoadCursor(IDC_CURSOR1); bRes=TRUE;if(message=WM_LBUTTONDOWN) h=AfxGetApp()->LoadCursor(IDC_CURSOR5);bRes=TRUE;if(nHitTest=HTCAPTION&&message!=WM_RBUTTONDOWN&&message=WM_LBUTTONDOWN) h=AfxGetApp()->LoadStandardCursor(IDC_SIZEALL); bRes=TRUE;

8、if(nHitTest=HTMENU&&message!=WM_RBUTTONDOWN) h=AfxGetApp()->LoadCursor(IDC_CURSOR4);bRes=TRUE;SetCursor(h);return bRes;關(guān)鍵代碼如下:void CMfcTESTDlg:OnBTdian() / TODO: Add your control notification handler code here/int leng;int key=0; /key來?標括?記?是?否?已?經(jīng)-存?在ú等臺?號?/leng=s.GetLength(); /判D斷?

9、是?否?存?在ú等臺?號?/for (int i=0;i<leng;i+) /if (s.GetAt(i)='=') /key=1;/if (s.Find('=')!=-1) key=1;if(key=1)s=""CString s1;char panduandian; /判D斷?是?否?能ü輸?入?小?數(shù)簓點? / 標括?示?s的?最?后ó一?位?,?并判D斷?是?否?為a數(shù)簓字?0-9,?同?時骸?滿ú足?標括?示?符?前°移?至á距à離?最?近ü的?小

10、?數(shù)簓點?中D間?有瓺操ù作痢?符?。int length=s.GetLength(); / 有瓺可é能ü出?現(xiàn)?的?情é況? 1.2.1,?opt.,if(length>0)panduandian=s.GetAt(length-1); for(;panduandian>='0'&&panduandian<='9'length=length-1) if(length<=0) /檢ì驗éGetAt參?數(shù)簓是?否?合?法?break;else panduandian=

11、s.GetAt(length-1); /長¤度è減?少?if (length<s.GetLength()&&panduandian='.') ;else if(length=s.GetLength(); else GetDlgItem(IDC_BTdian)->GetWindowText(s1); s=s+s1; GetDlgItem(IDC_EDIT1)->SetWindowText(s);else GetDlgItem(IDC_BTdian)->GetWindowText(s1); s=s+'0'+

12、s1; GetDlgItem(IDC_EDIT1)->SetWindowText(s);void CMfcTESTDlg:OnBtc() / TODO: Add your control notification handler code heres=""GetDlgItem(IDC_EDIT1)->SetWindowText("0");void CMfcTESTDlg:OnBtadd() /函數(shù)簓功|能ü:阰判D斷?是?否?輸?入?例如?:阰+,?+-,?+/之?類?的?運?算?,?并顯?示?輸?入?/ TODO: Add you

13、r control notification handler code here/int leng;int key=0; /key來?標括?記?是?否?已?經(jīng)-存?在ú等臺?號?/leng=s.GetLength(); /判D斷?是?否?存?在ú等臺?號?/for (int i=0;i<leng;i+) /if (s.GetAt(i)='=') /key=1;/if (s.Find('=')!=-1) key=1;if(key=1)s="" CString s1;char panduandian; int lengt

14、h=s.GetLength();if (length>0) panduandian=s.GetAt(length-1); if (panduandian>='0'&&panduandian<='9'|panduandian=')') GetDlgItem(IDC_BTADD)->GetWindowText(s1);s=s+s1; GetDlgItem(IDC_EDIT1)->SetWindowText(s); else/CMfcTESTDlg.OnBtback();int length=s.GetLe

15、ngth(); / onbtback功|能ü重?用?s.Delete(length-1,1);GetDlgItem(IDC_EDIT1)->SetWindowText(s); GetDlgItem(IDC_BTADD)->GetWindowText(s1);s=s+s1; GetDlgItem(IDC_EDIT1)->SetWindowText(s); elseGetDlgItem(IDC_BTADD)->GetWindowText(s1); s=s+'0'+s1; GetDlgItem(IDC_EDIT1)->SetWindowText

16、(s);void CMfcTESTDlg:OnBtsub() / TODO: Add your control notification handler code here/int leng;int key=0; /key來?標括?記?是?否?已?經(jīng)-存?在ú等臺?號?/leng=s.GetLength(); /判D斷?是?否?存?在ú等臺?號?/for (int i=0;i<leng;i+) /if (s.GetAt(i)='=') /key=1;/if (s.Find('=')!=-1) key=1;if(key=1)s="

17、;"CString s1;char panduandian; int length=s.GetLength();if (length>0) panduandian=s.GetAt(length-1); if (panduandian>='0'&&panduandian<='9'|panduandian=')') GetDlgItem(IDC_BTSUB)->GetWindowText(s1);s=s+s1; GetDlgItem(IDC_EDIT1)->SetWindowText(s); e

18、lse/CMfcTESTDlg.OnBtback();int length=s.GetLength();/ onbtback功|能ü重?用?s.Delete(length-1,1);GetDlgItem(IDC_EDIT1)->SetWindowText(s);GetDlgItem(IDC_BTSUB)->GetWindowText(s1);s=s+s1; GetDlgItem(IDC_EDIT1)->SetWindowText(s); /*else if (length=0) GetDlgItem(IDC_BTSUB)->GetWindowText(s1);

19、s=s+s1;GetDlgItem(IDC_EDIT1)->SetWindowText(s);*/elseGetDlgItem(IDC_BTSUB)->GetWindowText(s1); s=s+'0'+s1; GetDlgItem(IDC_EDIT1)->SetWindowText(s);bool flag_opt; /標括?記?是?否?有瓺除y0操ù作痢?,?默?認?為a0,?沒?有瓺bool flag_input; /標括?記?是?否?有瓺輸?入?錯洙?誤ó,?默?認?為a0,?沒?有瓺bool flag_maxout; /標括?記

20、?是?否?有瓺溢?出?,?默?認?為a0,?沒?有瓺void CMfcTESTDlg:OnBteq() / TODO: Add your control notification handler code hereint length; CString s1;char sout100;char str25;memset(str,0,sizeof(str); /申?請?空?間? flag_opt=0;flag_input=0;flag_maxout=0; int key=0; /key來?標括?記?是?否?已?經(jīng)-存?在ú等臺?號?/length=s.GetLength(); /判D斷

21、?是?否?存?在ú等臺?號?/for (int i=0;i<length;i+) /if (s.GetAt(i)='=') /key=1;/if (s.Find('=')!=-1) key=1;if (s.GetLength()=0|s='0') /什?么都?沒?輸?入?,?按恪?等臺?號?的?結(jié)á果?。s='0'GetDlgItem(IDC_EDIT1)->SetWindowText(s);s=""else if(key!=1|s.Right(1)='=') /

22、.if (s.Right(1)!='=') /表括?達?式?末?尾2沒?有瓺等臺?號?,?則ò添?加ó進?去?GetDlgItem(IDC_BTEQ)->GetWindowText(s1);s1=s1+'n's=s+s1; int numl=0; / 標括?記?左哩?右?括?號?是?否?匹¥配?/int numr=0; length=s.GetLength(); /轉(zhuǎn)羇換?成é字?符?數(shù)簓組哩?for (int i=length;i>0;i-) stri-1=s.GetAt(i-1);if (stri-1='(') /左哩?右?括?號?匹¥配?問ê題琣 numl+;if (stri-1=')') numl-;strlength='0' float score=compute(str,length); /計?算?if (flag_opt) /出?錯洙?處鋦理? MessageBox("存?在ú除y數(shù)簓為a0,?請?檢ì查é輸?入?", "

溫馨提示

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

評論

0/150

提交評論