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

下載本文檔

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

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

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

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

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

6、或者鍵盤輸入等號(hào)時(shí),默認(rèn)在編輯框顯示0。實(shí)驗(yàn)結(jié)果:注:關(guān)于鼠標(biāo)敏感的實(shí)現(xiàn)無(wú)法截圖,請(qǐng)看程序。進(jìn)入界面 計(jì)算界面 輸入除數(shù)為0輸入:6/0= 運(yùn)算結(jié)果溢出輸入:*999= 表達(dá)式有誤輸入:6*(*4= 實(shí)現(xiàn)視圖內(nèi)指定區(qū)域內(nèi)對(duì)鼠標(biāo)點(diǎn)擊和移動(dòng)的敏感處理功能 需要新加入函數(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來(lái)?標(biāo)括?記?是?否?已?經(jīng)-存?在ú等臺(tái)?號(hào)?/leng=s.GetLength(); /判D斷?

9、是?否?存?在ú等臺(tái)?號(hào)?/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ù)簓點(diǎn)? / 標(biāo)括?示?s的?最?后ó一?位?,?并判D斷?是?否?為a數(shù)簓字?0-9,?同?時(shí)骸?滿ú足?標(biāo)括?示?符?前°移?至á距à離?最?近ü的?小

10、?數(shù)簓點(diǎn)?中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) /檢ì驗(yàn)éGetAt參?數(shù)簓是?否?合?法?break;else panduandian=

11、s.GetAt(length-1); /長(zhǎng)¤度è減?少?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斷?是?否?輸?入?例如?:阰+,?+-,?+/之?類?的?運(yùn)?算?,?并顯?示?輸?入?/ TODO: Add you

13、r control notification handler code here/int leng;int key=0; /key來(lái)?標(biāo)括?記?是?否?已?經(jīng)-存?在ú等臺(tái)?號(hào)?/leng=s.GetLength(); /判D斷?是?否?存?在ú等臺(tái)?號(hào)?/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來(lái)?標(biāo)括?記?是?否?已?經(jīng)-存?在ú等臺(tái)?號(hào)?/leng=s.GetLength(); /判D斷?是?否?存?在ú等臺(tái)?號(hào)?/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; /標(biāo)括?記?是?否?有瓺除y0操ù作痢?,?默?認(rèn)?為a0,?沒(méi)?有瓺bool flag_input; /標(biāo)括?記?是?否?有瓺輸?入?錯(cuò)洙?誤ó,?默?認(rèn)?為a0,?沒(méi)?有瓺bool flag_maxout; /標(biāo)括?記

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

21、?是?否?存?在ú等臺(tái)?號(hào)?/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') /什?么都?沒(méi)?輸?入?,?按恪?等臺(tái)?號(hào)?的?結(jié)á果?。s='0'GetDlgItem(IDC_EDIT1)->SetWindowText(s);s=""else if(key!=1|s.Right(1)='=') /

22、.if (s.Right(1)!='=') /表括?達(dá)?式?末?尾2沒(méi)?有瓺等臺(tái)?號(hào)?,?則ò添?加ó進(jìn)?去?GetDlgItem(IDC_BTEQ)->GetWindowText(s1);s1=s1+'n's=s+s1; int numl=0; / 標(biāo)括?記?左哩?右?括?號(hào)?是?否?匹¥配?/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='(') /左哩?右?括?號(hào)?匹¥配?問(wèn)ê題琣 numl+;if (stri-1=')') numl-;strlength='0' float score=compute(str,length); /計(jì)?算?if (flag_opt) /出?錯(cuò)洙?處鋦理? MessageBox("存?在ú除y數(shù)簓為a0,?請(qǐng)?檢ì查é輸?入?", "

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論