版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 一、項目簡介</b></p><p> 本設計將實現(xiàn)一個簡單計算器。其功能參照Windows附件中自帶的計算器。這個計算器實現(xiàn)了簡單的四則運算功能,還實現(xiàn)了模運算和指數(shù)運算,具有簡潔的圖文外觀。它的設計按軟件工程的方法進行,系統(tǒng)具有良好的界面、必要的交互讓使用人員能快捷簡單地進行操作。即時準確地獲得需要的計算的結果,充分降低了數(shù)字計算的難度和節(jié)約了時間。在課程
2、設計中,系統(tǒng)開發(fā)平臺為Windows 7,程序設計設計語言采用Visual C++,在程序設計中,采用了面向?qū)ο蟮慕鉀Q問題的方法。</p><p> 在程序設計中,通過設計、編制、調(diào)試一個模擬計算器的程序,加深對語法及語義分析原理的理解,并實現(xiàn)對命令語句的靈活應用。在程序設計中,可以用面向?qū)ο蟪绦蛟O計方法解決問題。</p><p> 由于多個函數(shù)均需要訪問某些數(shù)據(jù),這些數(shù)據(jù)常被設計為全
3、局變量。</p><p> 而在面向?qū)ο蟪绦蛟O計中關鍵是如何將問題域中的實體(即日常所見的概念)抽取出來,作為C++程序中的類,而屬性與行為作為類的兩類要素通常是必不可少的,甚至還應考慮類必須滿足的約束。</p><p><b> 二、功能介紹</b></p><p> 它的設計按軟件工程的方法進行,系統(tǒng)具有良好的界面;必要的交互信息;簡
4、約美觀的效果。使用人員能快捷簡單地進行操作。即可單擊按鈕進行操作。即時準確地獲得需要的計算的結果,充分降低了數(shù)字計算的難度和節(jié)約了時間,對人們的生活有一定的幫助。</p><p> (1)包含的功能有:加、減、乘、除運算,開方、求模等功能.</p><p> (2)計算器上數(shù)字0——9為一個控件數(shù)組,加、減、乘、除為一個控件數(shù)組,其余為單一的控件。</p><p&g
5、t; (3) 輸入的原始數(shù)據(jù)和結果都顯示在窗口頂部的同一個標簽中。 </p><p> (4) 計算功能基本上是用公式計算方法實現(xiàn)。</p><p> (5) 程序可以能自動判斷輸出數(shù)據(jù)的正確性,保證不出現(xiàn)結果中以0開頭等不正常現(xiàn)象。</p><p><b> 功能模塊的實現(xiàn):</b></p><p> 基于d
6、ialog類添加Caculator類,在這個類中實現(xiàn)高級的按鈕控件。在此類中對于所有的對于按鈕的繪制工作都是在對話框資源管理中完成的,實現(xiàn)按鈕對鼠標單擊動作執(zhí)行不同的計算,在UpdateData(false)函數(shù)后顯示文本。</p><p><b> 三、系統(tǒng)實現(xiàn)概述</b></p><p><b> 1、窗體設計</b></p>
7、<p> 打開Microsoft Visual C++ 6.0,在文件中點擊新建,在彈出框內(nèi)選擇MFC AppWizard[exe]工程,輸入工程名Calculator及其所在位置,點擊確定,如圖1所示。</p><p><b> 圖1</b></p><p> 將彈出MFC應用程序向?qū)?步驟1對話框,選擇基本對話框,點擊完成,如圖2所示。<
8、/p><p><b> 圖2</b></p><p> 這樣,MFC AppWizard就建立了一個基于對話窗口的程序框架,如圖3所示。</p><p><b> 圖3</b></p><p><b> 2、編輯資源</b></p><p> (1
9、)編輯對話框及控件資源 </p><p> 在圖5所示的Resoure View選項卡中打開Dialog資源組,雙擊IDD_CALCULATOR_DIALOG,在右邊的窗口中顯示出待編輯的對話框。開始擺放控件,包括編輯框和按鈕的創(chuàng)建。而按鈕的創(chuàng)建則以“1”為例進行介紹,其他按鈕的創(chuàng)建可參照以下步驟進行操作。</p><p> a)在圖5中Controls的編輯框按鈕上單擊鼠標左鍵,在對
10、話框編輯窗口上合適的位置按下鼠標左鍵并拖動鼠標畫出一個大小合適的編輯框。在編輯框上單擊鼠標右鍵,在彈出的快捷萊單中選擇屬性選項,此時彈出Edit屬性對話框,如圖4所示,在該對話框中輸入ID屬性。 </p><p><b> 圖4</b></p><p> b)在圖3中Controls的按鈕上單擊鼠標左鍵,在對話框上的合適的位置上按下鼠標左鍵并拖動鼠標畫出一個大小合
11、適的下壓式按鈕。在按鈕上單擊鼠標右鍵,在彈出的快捷菜單中選擇屬性選項,此時也彈出Push Button屬性對話框,如圖5所示,在該對話框中輸入控件的ID值和標題。</p><p><b> 圖5 </b></p><p> 按照上面的操作過程編輯其他按鈕和編輯框等對象的屬性。</p><p> 利用Visual C++提供的資源編輯器對對
12、話框資源進行編輯。刪除對話框中默認的OK和Cancel按鈕。添加一個Edit控件,其控件ID為IDC_EDIT1。添加若干按鈕控件,其ID如表a所示。</p><p><b> 表a </b></p><p> 完成后界面如圖6所示。</p><p><b> 圖6</b></p><p>
13、?。?)連接變量和代碼</p><p> a) 給編輯框連接變量。在編輯框上單擊鼠標右鍵,在彈出菜單中選擇建立類向?qū)Р藛雾棧瑥棾鯩FC ClassWizard對話框,選擇Member Variables選項卡,如圖7所示。</p><p><b> 圖7</b></p><p> 在Control IDs列表框中選擇IDC_DISPLAY
14、,單擊Add Variables按鈕,在彈出的對話框中連接變量m_edit_value。變量類型設定為CString型。如圖8所示。</p><p><b> 圖8 </b></p><p> b) 給“1”按鈕連接代碼。在“1”按鈕上單擊鼠標右鍵,選擇ClassWizard菜單項,在彈出的對話框中選擇Messages Maps選項卡,然后在Object IDs列
15、表框中選擇IDC_1,在Messages列表框中選擇BN_CLICKED項,即選擇單擊按鈕事件,如圖9所示。 </p><p><b> 圖9</b></p><p><b> (3)菜單的設計</b></p><p> 選擇 插入/資源命令,將顯示插入資源對話框。如圖10所示。選擇Menu,點擊新建即可。</
16、p><p><b> 圖10</b></p><p> Resoure View選項卡中打開Menu資源組,雙擊IDR_MENU1, 然后給菜單添加相應的標題,并把每個菜單對應的ID值與相應的按鈕的一致。如圖11所示。</p><p><b> 圖11</b></p><p> 在對話框的任何一
17、個空白域單擊鼠標右鍵,然后在彈出的快捷菜單中選擇屬性命令,彈出對話 屬性對話框,如圖12。在對話框中的菜單組合框中選擇IDR_MENU1。</p><p><b> 圖12</b></p><p> 最終的得到的界面如圖13。</p><p><b> 圖13</b></p><p><
18、b> 四、關鍵技術</b></p><p><b> (1)操作數(shù)的輸入</b></p><p> 編輯框所關聯(lián)的變量為m_temp,程序開始時為零。每按下一個數(shù)字鍵按鈕,就把它累加到m_temp里并刷新顯示。BOOL型變量UpdateData來判斷是否有小數(shù)點和一個整型數(shù)dint來表示小數(shù)點后的數(shù)據(jù)的位數(shù)。當UpdateData=TRUE時,
19、表示有小數(shù)點,否則則表示無小數(shù)點。按下小數(shù)點按鈕后執(zhí)行UpdateData=TRUE。當按下一個數(shù)字鍵時,首先根據(jù)ele判斷是否按下小數(shù)點,若有則把小數(shù)點后數(shù)的位數(shù)加1,dint則為此次鍵入的數(shù)所處的位數(shù),將鍵入的數(shù)除以dint個10然后累加到編輯框所關聯(lián)的變量m_temp上,若沒有則把m_temp乘以10,然后累加到編輯框所關聯(lián)的變量m_temp上。</p><p> BOOL CCalculatorDlg:
20、:OnInitDialog()</p><p><b> {</b></p><p> CDialog::OnInitDialog();</p><p> // Add "About..." menu item to system menu.</p><p> // IDM_ABOUTBOX
21、must be in the system command range.</p><p> ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);</p><p> ASSERT(IDM_ABOUTBOX < 0xF000);</p><p> CMenu* pSysMenu = GetSystemMen
22、u(FALSE);</p><p> if (pSysMenu != NULL)</p><p><b> {</b></p><p> CString strAboutMenu;</p><p> strAboutMenu.LoadString(IDS_ABOUTBOX);</p><p&g
23、t; if (!strAboutMenu.IsEmpty())</p><p><b> {</b></p><p> pSysMenu->AppendMenu(MF_SEPARATOR);</p><p> pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu
24、);</p><p><b> }</b></p><p><b> }</b></p><p> // Set the icon for this dialog. The framework does this automatically</p><p> // when the ap
25、plication's main window is not a dialog</p><p> SetIcon(m_hIcon, TRUE);// Set big icon</p><p> SetIcon(m_hIcon, FALSE);// Set small icon</p><p> // TODO: Add extra initi
26、alization here</p><p> OperatorPressed=FALSE;</p><p> After=FALSE;</p><p> m_edit_value="0";</p><p> value1=0,value2=0,result=0;</p><p> Res
27、tarted=TRUE;</p><p> return TRUE; // return TRUE unless you set the focus to a control</p><p><b> }</b></p><p> (2)單目運算符功能的實現(xiàn)</p><p> 由于單目運算符中必須有執(zhí)行運算的
28、函數(shù),因而頭文件中要加入math.h,如m_temp=sqrt(m_temp).按下按鈕即可實現(xiàn)其功能。</p><p> void CCalculatorDlg::OnSquareroot() </p><p><b> {</b></p><p> // TODO: Add your control notification hand
29、ler code here</p><p> UpdateData(TRUE);</p><p> double m_temp=atof(m_edit_value);//將字符串類型的m_edit_value轉化為浮點數(shù)類型的m_temp</p><p> if(m_temp>=0)</p><p><b> {<
30、;/b></p><p> m_temp=sqrt(m_temp);//求開方</p><p> m_edit_value.Format("%g",m_temp);//將m_temp的值返回到m_edit_value中,默認精度為六位</p><p> UpdateData(false);</p><p>&l
31、t;b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> MessageBox("負數(shù)不能開方");</p><p><b> }</b></p>&l
32、t;p><b> }</b></p><p> (3)雙目運算符功能的實現(xiàn)</p><p> 雙目運算符需要兩個操作數(shù)才能運算,所以在執(zhí)行雙目運算符按鈕的函數(shù)代碼中,要把m_temp中的值保存到變量temp2中,然后把m_temp清零。這樣即可保存第一個操作數(shù)。另外先定義了一個整形變量addt,在不同的雙目運算符中給addt賦不同的值,然后在等號中用swi
33、tch語句來匹配addt值來判斷需要執(zhí)行何種雙目運算。為實現(xiàn)連續(xù)運算,程序有所改動,參見(6)。</p><p> (4)退格鍵功能的實現(xiàn)</p><p> 當按下一次退格按鈕時,若m_temp為整數(shù),只需對其中數(shù)據(jù)除以10再取整即可,若按下一次退格按鈕為小數(shù),則根據(jù)小數(shù)點后數(shù)據(jù)的位數(shù)dint進行操作,先對m_temp執(zhí)行(dint-1)次乘以10運算,然后取整,接著執(zhí)行(dint-1
34、)次除以10的運算即可。完成后需要把dint將減小1。</p><p> void CCalculatorDlg::OnBackspace() </p><p><b> {</b></p><p> // TODO: Add your control notification handler code here</p>&
35、lt;p> UpdateData(true);</p><p> char str[256];</p><p> int length;</p><p> length = m_edit_value.GetLength();//得到m_edit_value的長度,賦給length</p><p> for(int i=0;i&
36、lt;length-1;i++)</p><p><b> {</b></p><p> str[i]=m_edit_value.GetAt(i);//將m_edit_value中(除最后一個)每個位置的值賦給str</p><p><b> }</b></p><p> m_edit_va
37、lue.Format("%g",atof(str));//將字符串類型的str轉化為浮點數(shù)類型,并返回給m_edit_value</p><p> UpdateData(false);</p><p><b> }</b></p><p> 對于單目運算符:每次運算完之后都會對m_temp清零,因此其結果也要賦給tem
38、p2,下次運算是則會用到num2,于是第一次運算時直接將m_temp 的值賦給temp2,對其進行運算。以開根號為例,在消息處理函數(shù)代碼中將“m_temp=sqrt(m_temp);”改為“temp2=m_temp; m_temp=sqrt(temp2); temp2=m_temp;”。但是第一次運算執(zhí)行完成之后m_temp被清零,所以之后將m_temp的值不能賦給temp2,代碼改為 “if(m_temp>=0) m_temp=
39、sqrt(temp2); temp2m_temp;”。其他單目運算符同理。</p><p> 為實現(xiàn)連續(xù)運算是不需要按下等號即可實現(xiàn),又在所有的運算符按鈕的消息處理函數(shù)代碼前加上了“if(addt!=0)Onequal();”。既若之前有按下雙目運算符和兩個操作數(shù)則連續(xù)運算再按下任一運算符時會自動調(diào)用等號的處理函數(shù)將上次的運算完成并保存結果方便下一次的運算。</p><p><b&
40、gt; 五、進一步的設想</b></p><p> 根據(jù)實驗結果,本設計基本完成了設計要求,但是由于鍵盤數(shù)目的限制,數(shù)碼數(shù)目的限制使得這個計算器不能擁有強大的計算功能。還有就是考慮到課程時間的限制和本人技術的水平,沒有更多的完善系統(tǒng)功能,而是盡量簡單的設計。如果有時間和更多的經(jīng)歷投入,相信本設計可以達到更好的功能。</p><p><b> 例如:</b&
41、gt;</p><p><b> 一鍵清空按鈕</b></p><p><b> 動態(tài)設置計算器大小</b></p><p><b> 擁有歷史數(shù)據(jù)記憶</b></p><p><b> 對弧度、梯度的運算</b></p><p
42、><b> 更多的數(shù)進制轉換</b></p><p><b> 一些統(tǒng)計函數(shù)的運算</b></p><p><b> 個人貢獻</b></p><p> 幾個星期的課程設計以后,根據(jù)老師的指導書與討論小組的共同努力,終于把這個簡易的計算器完成了。在整個工作任務中,我負責了圖形設計這個部分
43、,跟MFC打了一下交道。盡管跟windows附件里的計算器外觀差遠了,但我還是盡量把它做得“人性化”一點。</p><p> 猶記得接到課程設計任務之后,毫無經(jīng)驗,幸虧下課時與一些同學一起圍觀老師之后,得知參考叢書里面含有MFC,因此就去泡圖書館,一心想找到與自己課題有關的書籍。通過不斷的篩選,終于在我們學校的圖書館里找到了所謂的“神器”。</p><p> 一個不懂得好好使用他的工具
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 計算器c++課程設計
- c++課程設計——計算器
- c++簡單計算器課程設計報告
- c++課程設計報告--簡單計算器
- c++課程設計報告--復數(shù)計算器
- c++計算器課程設計--計算器程序設計
- c++課程設計--復數(shù)計算器
- c++課程設計--分數(shù)計算器
- c++課程設計--簡單計算器
- c++課程設計報告--小型特殊計算器
- c++課程設計報告--小型特殊計算器
- c++課程設計報告--小型特殊計算器
- c++課程設計--簡單計算器
- c++課程設計---分數(shù)計算器
- c++課程設計---分數(shù)計算器
- c++課程設計報告--小型特殊計算器 (2)
- c++課程設計報告---計算器的設計與實現(xiàn)
- c++語言畢業(yè)課程設計報告正文(計算器的實現(xiàn))
- c++設計計算器
- c課程設計報告——多功能計算器
評論
0/150
提交評論