版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 《C++程序設(shè)計(jì)》(MFC)</p><p><b> 課程設(shè)計(jì)報(bào)告</b></p><p> 設(shè)計(jì)題目: 簡易計(jì)算器 </p><p> 班 級(jí): </p><p> 姓 名:
2、 </p><p> 學(xué) 號(hào): </p><p> 指導(dǎo)教師: </p><p> 時(shí) 間: 2010年6月30日 </p><p> 目 錄</p>
3、<p> 1.設(shè)計(jì)目標(biāo)……………………………………………………………</p><p> 2.設(shè)計(jì)內(nèi)容……………………………………………………………</p><p> 3.設(shè)計(jì)思想…………………………………………………………… </p><p> 4.設(shè)計(jì)說明……………………………………………………………&
4、lt;/p><p> 5.設(shè)計(jì)步驟……………………………………………………………</p><p> 6.主要成員函數(shù)關(guān)系圖………………………………………………</p><p> 7.程序主要代碼………………………………………………………</p><p> 8. 難點(diǎn)分析……………………………………………………………</p>
5、<p> 9. 總結(jié)…………………………………………………………………</p><p> 簡易計(jì)算器(MFC)</p><p><b> 1.設(shè)計(jì)目標(biāo)</b></p><p> 了解Windows應(yīng)用程序的結(jié)構(gòu)與DOS程序的不同,掌握應(yīng)用MFC類庫編寫Windows應(yīng)用程序的基本模式。</p><p>
6、<b> 2.設(shè)計(jì)內(nèi)容</b></p><p> 以簡易計(jì)算器為例,通過對(duì)簡單應(yīng)用軟件計(jì)算器的設(shè)計(jì),編制、調(diào)試,實(shí)現(xiàn)簡單的加,減,乘,除等運(yùn)算,以學(xué)習(xí)應(yīng)用MFC庫類編寫對(duì)話框的原理,加深對(duì)C++類的學(xué)習(xí)及應(yīng)用。</p><p><b> 3. 設(shè)計(jì)思想</b></p><p> 基于MFC庫類對(duì)對(duì)話框界面的設(shè)計(jì),通
7、過創(chuàng)建類成員函數(shù)成員變量,編輯控件創(chuàng)建消息映射,調(diào)用消息函數(shù)完成數(shù)據(jù)的輸入輸出,實(shí)現(xiàn)計(jì)算功能。生成簡單的應(yīng)用軟件。</p><p><b> 4. 設(shè)計(jì)說明</b></p><p> (1)包含的功能有:加、減、乘、除運(yùn)算,開方、平方等功能。</p><p> (2)計(jì)算器上數(shù)字0—9為一個(gè)控件數(shù)組,加、減、乘、除為一個(gè)控件數(shù)組,其余為
8、單一的控件。</p><p> (3)輸入的原始數(shù)據(jù)、運(yùn)算中間數(shù)據(jù)和結(jié)果都顯示在窗口頂部的同一個(gè)標(biāo)簽中。</p><p> (4)計(jì)算功能基本上是用系統(tǒng)內(nèi)部函數(shù)。</p><p> (5)程序可以能自動(dòng)判斷輸入數(shù)據(jù)的正確性,保證不出現(xiàn)多于一個(gè)小數(shù)點(diǎn)、以0開頭等不正?,F(xiàn)象。</p><p> (6)“CE”按鈕可以清除所有已輸入的數(shù)據(jù)從
9、頭計(jì)算</p><p><b> 5. 設(shè)計(jì)步驟</b></p><p> (1)選擇FileNewlProject命令,選擇MFC AppWizard(exe)創(chuàng)建Project名為Caa,按確定。在彈出界面選擇創(chuàng)建對(duì)話框,單擊Finish按鈕</p><p> ?。?)在生成的設(shè)計(jì)界面中加入控件,得到計(jì)算器應(yīng)用界面。如圖:</p&
10、gt;<p> ?。?)為控件編輯框編輯ID,如圖:</p><p> ?。?)進(jìn)入ClassWizard界面選擇Message Maps為控件插入消息映射,插入消息函數(shù),實(shí)現(xiàn)控件命令功能。如圖:</p><p> (5) 進(jìn)入ClassWizard界面Message Varibles為編輯框添加成員變量m_result用以顯示結(jié)果。如圖:</p><p
11、> ?。?)在CaaDlg.h中加入在主要成員函數(shù)和成員變量的申明在CaaDlg.cpp中加入主要成員函數(shù)實(shí)現(xiàn)過程和成員變量的初始化(代碼片段將于后面介紹)。</p><p> 6. 主要成員函數(shù)關(guān)系圖</p><p><b> 程序主要代碼</b></p><p> //在頭文件中手動(dòng)添加成員函數(shù)與變量聲明</p>
12、<p> // caaDlg.h : header file</p><p> //定義兩個(gè)euum型結(jié)構(gòu)</p><p> enum Operator { OpNone, OpAdd, OpSubtract, OpMultiply, OpDivide };</p><p> enum CalcError { ErrNone, ErrDivide
13、ByZero };</p><p> float m_operand; //存儲(chǔ)當(dāng)前輸入的操作數(shù)</p><p> float m_accum; //存儲(chǔ)當(dāng)前的計(jì)算處理結(jié)束</p><p> BOOL m_bCoff;
14、 //標(biāo)識(shí)當(dāng)前輸入是否是小數(shù)</p><p> float m_coff; //小數(shù)輸入時(shí)的系數(shù)</p><p> Operator m_operator; //enum型變量用以標(biāo)識(shí)當(dāng)前運(yùn)算符</p><p> CalcError m_errorState
15、; //enum型變量用以標(biāo)識(shí)當(dāng)前運(yùn)算狀態(tài)</p><p> BOOL m_bOperandAvail; //標(biāo)識(shí)當(dāng)前輸入是否是新輸入數(shù)字</p><p> void UpdateDisplay(); //處理顯示</p><p> void Calc
16、ulate(); //處理計(jì)算</p><p> void OnOperandInput(int a); //處理數(shù)字輸入</p><p> //在執(zhí)行文件中添加成員函數(shù)實(shí)現(xiàn)部分與變量初始</p><p> // caaDlg.cpp :
17、implementation file</p><p> //以下是對(duì)聲明變量進(jìn)行初始</p><p> CCaaDlg::CCaaDlg(CWnd* pParent /*=NULL*/)</p><p> : CDialog(CCaaDlg::IDD, pParent)</p><p><b> {</b>&l
18、t;/p><p> //{{AFX_DATA_INIT(CCaaDlg)</p><p> m_result = _T(""); //默認(rèn)為m_result變量初始</p><p> //}}AFX_DATA_INIT</p><p> // Note that LoadIco
19、n does not require a subsequent DestroyIcon in Win32</p><p> m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);</p><p> m_coff=0.1; //為變量進(jìn)行初始</p>
20、<p> m_bCoff=0; //為變量進(jìn)行初始</p><p> m_errorState = ErrNone; //為變量進(jìn)行初始</p><p> m_bOperandAvail=FALSE;
21、 //為變量進(jìn)行初始</p><p> m_operator=OpNone; //為變量進(jìn)行初始</p><p><b> }</b></p><p> //以下是消息處理函數(shù),用以響應(yīng)消息映射</p><p> void CCaaDlg::On0()
22、 //處理“ 0”按鈕</p><p><b> {</b></p><p> // TODO: Add your control notification handler code here</p><p> OnOperandInput(0);</p>&l
23、t;p><b> }</b></p><p> void CCaaDlg::On1() //處理“ 1”按鈕</p><p><b> {</b></p><p> // TODO: Add your control notification h
24、andler code here</p><p> OnOperandInput(1);</p><p><b> }</b></p><p> void CCaaDlg::On2() //處理“ 2”按鈕</p><p><b> {&l
25、t;/b></p><p> // TODO: Add your control notification handler code here</p><p> OnOperandInput(2);</p><p><b> }</b></p><p> void CCaaDlg::On3()
26、 //處理“ 3”按鈕</p><p><b> {</b></p><p> // TODO: Add your control notification handler code here</p><p> OnOperandInput(3);</p><p>
27、<b> }</b></p><p> void CCaaDlg::On4() //處理“ 4”按鈕</p><p><b> {</b></p><p> // TODO: Add your control notification handler
28、code here</p><p> OnOperandInput(4);</p><p><b> }</b></p><p> void CCaaDlg::On5() //處理“ 5”按鈕</p><p><b> {</b>
29、;</p><p> // TODO: Add your control notification handler code here</p><p> OnOperandInput(5);</p><p><b> }</b></p><p> void CCaaDlg::On6()
30、 //處理“ 6”按鈕</p><p><b> {</b></p><p> // TODO: Add your control notification handler code here</p><p> OnOperandInput(6);</p><p><b&g
31、t; }</b></p><p> void CCaaDlg::On7() //處理“ 7”按鈕</p><p><b> {</b></p><p> // TODO: Add your control notification handler code he
32、re</p><p> OnOperandInput(7);</p><p><b> }</b></p><p> void CCaaDlg::On8() //處理“ 8”按鈕</p><p><b> {</b></p
33、><p> // TODO: Add your control notification handler code here</p><p> OnOperandInput(8);</p><p><b> }</b></p><p> void CCaaDlg::On9()
34、 //處理“ 9”按鈕</p><p><b> {</b></p><p> // TODO: Add your control notification handler code here</p><p> OnOperandInput(9);</p><p><b> }&l
35、t;/b></p><p> void CCaaDlg::Oncheng() //處理“ *”按鈕</p><p><b> {</b></p><p> // TODO: Add your control notification handler code here</
36、p><p> Calculate();</p><p> m_operator = OpMultiply;</p><p><b> }</b></p><p> void CCaaDlg::Onchu() //處理“ /”按鈕</p><
37、;p><b> {</b></p><p> // TODO: Add your control notification handler code here</p><p> Calculate();</p><p> m_operator = OpDivide;</p><p><b> }
38、</b></p><p> void CCaaDlg::Ondengyu() //處理“ =”按鈕</p><p><b> {</b></p><p> // TODO: Add your control notification handler code here<
39、;/p><p> Calculate();</p><p> m_operator = OpNone;</p><p><b> }</b></p><p> void CCaaDlg::Ondian() //處理“ .”按鈕</p><p
40、><b> {</b></p><p> // TODO: Add your control notification handler code here</p><p> m_bCoff=1;</p><p> UpdateDisplay();</p><p><b> }</b>
41、</p><p> void CCaaDlg::Onjia() //處理“ +”按鈕</p><p><b> {</b></p><p> // TODO: Add your control notification handler code here</p>&
42、lt;p> Calculate();</p><p> m_operator = OpAdd;</p><p><b> }</b></p><p> void CCaaDlg::Onjian() //處理“ -”按鈕</p><p><b&g
43、t; {</b></p><p> // TODO: Add your control notification handler code here</p><p> Calculate();</p><p> m_operator = OpSubtract;</p><p><b> }</b>&
44、lt;/p><p> void CCaaDlg::Onpingfang() //處理“ x*x”按鈕</p><p><b> {</b></p><p> // TODO: Add your control notification handler code here</p>&l
45、t;p> m_operand*=m_operand;</p><p> UpdateDisplay();</p><p><b> }</b></p><p> void CCaaDlg::Onqinglin() //處理“ CE”按鈕</p><p>&l
46、t;b> {</b></p><p> // TODO: Add your control notification handler code here</p><p> m_operator = OpNone;</p><p> m_operand = 0;</p><p> m_accum = 0;</p
47、><p> m_bOperandAvail = FALSE;</p><p> m_errorState = ErrNone;</p><p> m_coff=0.1;</p><p> m_bCoff=0;</p><p> UpdateDisplay();</p><p><b&
48、gt; }</b></p><p> void CCaaDlg::Onsqrt() //處理“ sqrt”按鈕</p><p><b> {</b></p><p> // TODO: Add your control notification handler code h
49、ere</p><p> m_operand=sqrt(m_operand);</p><p> UpdateDisplay();</p><p><b> }</b></p><p> void CCaaDlg::Onzhengfu() //處理“ +/-”按鈕&
50、lt;/p><p><b> {</b></p><p> // TODO: Add your control notification handler code here</p><p> m_operand*=-1;</p><p> UpdateDisplay();</p><p>&l
51、t;b> }</b></p><p> //以下是自定義函數(shù),用于實(shí)現(xiàn)計(jì)算功能</p><p> void CCaaDlg::OnOperandInput(int a) //處理0-9 數(shù)字的輸入函數(shù)</p><p> {if (m_errorState != ErrNone) //判斷當(dāng)前運(yùn)算是否有誤,若有則返回&
52、lt;/p><p><b> return;</b></p><p> if (!m_bOperandAvail) //判斷是否輸入新的數(shù)字,1-是 0-否</p><p> m_operand = 0;</p><p> if(!m_bCoff) //判斷
53、是否是小數(shù)輸入,1-是 0-否</p><p> m_operand=m_operand*10+(a); </p><p><b> else</b></p><p><b> {</b></p><p> m_operand=m_operand+(a)*m_coff;</p>
54、<p> m_coff*=0.1;</p><p><b> }</b></p><p> m_bOperandAvail=TRUE;</p><p> UpdateDisplay(); //更新顯示</p><p><
55、;b> }</b></p><p> void CCaaDlg::Calculate() //處理計(jì)算函數(shù)</p><p><b> {</b></p><p> if (m_errorState != ErrNone)</p><p>&
56、lt;b> return;</b></p><p> if (m_bOperandAvail)</p><p> { </p><p> //如果沒有計(jì)算符就將m_operand值賦予m_accum</p><p> if (m_operator == OpNone) <
57、;/p><p> m_accum = m_operand;</p><p> else if (m_operator == OpMultiply) //否則按計(jì)算符進(jìn)行計(jì)算</p><p> m_accum *= m_operand;</p><p> else if (m_operator == OpDivide)</p
58、><p><b> {</b></p><p> if (m_operand == 0)</p><p> m_errorState = ErrDivideByZero;</p><p><b> else</b></p><p> m_accum /= m_opera
59、nd;</p><p><b> }</b></p><p> else if (m_operator == OpAdd)</p><p> m_accum += m_operand;</p><p> else if (m_operator == OpSubtract)</p><p>
60、 m_accum -= m_operand;</p><p><b> }</b></p><p> m_bOperandAvail = FALSE;</p><p> m_bCoff=0;</p><p> m_coff=0.1;</p><p> UpdateDisplay();&
61、lt;/p><p><b> }</b></p><p> void CCaaDlg::UpdateDisplay() //處理顯示函數(shù)</p><p><b> {</b></p><p> if (GetSafeHwnd() == NULL)&
62、lt;/p><p><b> return;</b></p><p> if (m_errorState != ErrNone)</p><p> m_result="除數(shù)不能為零";</p><p> else //如果當(dāng)前計(jì)算無錯(cuò)誤那么進(jìn)
63、行顯示</p><p><b> {</b></p><p> //如果是輸入計(jì)算數(shù),那么顯示輸入情況,如果按下計(jì)算符,則顯示結(jié)果</p><p> float lVal = (m_bOperandAvail) ? m_operand : m_accum;</p><p> m_result.Format(_T(
64、"%f"), lVal); //將float型轉(zhuǎn)化為CString型</p><p> int i=m_result.GetLength();</p><p> while(m_result.GetAt(i-1)=='0')</p><p><b> {</b></p><p>
65、 m_result.Delete(i-1,1);</p><p><b> i-=1;</b></p><p><b> }</b></p><p><b> }</b></p><p> //用編輯控件變量m_result改變編輯控件的值,更新顯示</p>
66、;<p> UpdateData(FALSE); </p><p><b> }</b></p><p><b> 8. 難點(diǎn)分析</b></p><p> 在利用MFC編寫計(jì)算器過程中,遇到的技術(shù)上的問題,及解決方法。</p><p><b> 例如:</b
67、></p><p> ?、牛?jì)算數(shù)輸入的處理</p><p> 在程序中使用m_operand來存儲(chǔ)當(dāng)前的輸入。而程序只使用一個(gè)函數(shù)來處理所有數(shù)字輸入,也就是說每次單擊數(shù)字按鈕就會(huì)調(diào)用該函數(shù)。由于計(jì)算數(shù)不僅僅是個(gè)位數(shù),因此用戶可能需要單擊幾個(gè)數(shù)字按鈕來完成一個(gè)計(jì)算數(shù)的輸入,這樣在每次輸入時(shí)都必須將輸入的數(shù)字累加入m_operand中。而且對(duì)于小數(shù)輸入和整數(shù)輸入也必須采取不同的累加方
68、式。如對(duì)整數(shù)的輸入,累加方式為: m_operand=m_operand*10+n;其中n為輸入的數(shù)字。而對(duì)于小數(shù)輸入,累加方式為:m_operand=m_operand+n*10i ;其中n為數(shù)字,i為小數(shù)位數(shù)。因此在程序中還需設(shè)立布爾型變量m_coff 的值來標(biāo)識(shí)當(dāng)按下按鈕小數(shù)點(diǎn)的時(shí)候來確定調(diào)用哪個(gè)累加方式。</p><p> ?、疲远x消息處理函數(shù)、成員函數(shù)、變量</p><p>
69、 在添加自定義函數(shù)、變量時(shí)需注意函數(shù)及變量的聲明在頭文件中如:CaaDlg.h ;而函數(shù)的實(shí)現(xiàn)部分及變量的初始在執(zhí)行文件中如:CaaDlg.cpp 。</p><p> 值得提醒的是手動(dòng)添加消息處理函數(shù)時(shí),需聲明在頭文件//{{AFX_MSG(CCaaDlg) …//}}AFX_MSG中的部分。</p><p> 而添加消息映射在執(zhí)行文件</p><p>
70、//{{AFX_MSG_MAP(CCaaDlg) …//}}AFX_MSG_MAP中的部分。</p><p> 最后將消息處理函數(shù)添加到執(zhí)行文件末即可。</p><p><b> 9. 總結(jié)</b></p><p> 課程設(shè)計(jì)到此已告一段落,經(jīng)過團(tuán)隊(duì)的努力,在將近一個(gè)月的實(shí)踐中課程設(shè)計(jì)基本完成了。從中學(xué)到很多有用的知識(shí),也積累了不少寶貴的
71、經(jīng)驗(yàn)。從一開始對(duì)MFC這樣一個(gè)陌生的類庫名詞,在不斷的翻閱書籍學(xué)習(xí)中開始漸漸的有所了解,雖然在此次課程設(shè)計(jì)我們只是針對(duì)性的去學(xué)習(xí)對(duì)對(duì)話框應(yīng)用程序的編程模式,但也體會(huì)到了MFC這類庫的博大精深。想全部了解這樣一個(gè)類庫,今后還需多下功夫。</p><p> 本次課程設(shè)計(jì)我們完成了一個(gè)簡易計(jì)算器應(yīng)用軟件,在此期間,遇上了不少的技術(shù)難題,但是經(jīng)過努力,通過查找資料,難題還是一個(gè)個(gè)被解決了,從中學(xué)到了許多課堂上沒學(xué)到的東
72、西,這是很值得高興的。經(jīng)過設(shè)計(jì)的各個(gè)環(huán)節(jié),從中學(xué)到了很多,鍛煉了系統(tǒng)的設(shè)計(jì)的能力,培養(yǎng)了團(tuán)隊(duì)分工合作精神。這樣對(duì)我們以后在工作中或?qū)W習(xí)中得到很好的鍛煉,為用VC++編輯軟件奠定基礎(chǔ)。</p><p> 在本次實(shí)踐期間對(duì)簡易計(jì)算器的設(shè)計(jì)雖然大體實(shí)現(xiàn)各個(gè)控件的功能,但仍存在許多的不足與漏洞,還待以后的不斷學(xué)習(xí)進(jìn)一步完善。</p><p><b> 參考文獻(xiàn):</b>
73、</p><p> [1]《Visual C++ 7.0 起步進(jìn)階》,國防工業(yè)出版社 武裝 等編著</p><p> [2]《Visual C++ 基礎(chǔ)教程》,西安電子科技大學(xué)出版社,2006.6</p><p><b> 開發(fā)環(huán)境:</b></p><p> Microsoft Visual C++ 6.0
溫馨提示
- 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. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 簡易計(jì)算器vb課程設(shè)計(jì)報(bào)告
- 簡易計(jì)算器課程設(shè)計(jì)
- 簡易計(jì)算器課程設(shè)計(jì)
- 簡易計(jì)算器課程設(shè)計(jì)
- 簡易計(jì)算器vb課程設(shè)計(jì)報(bào)告報(bào)告
- 簡易計(jì)算器課程設(shè)計(jì) (3)
- 簡易計(jì)算器課程設(shè)計(jì) (2)
- java課程設(shè)計(jì)----簡易計(jì)算器
- vb課程設(shè)計(jì)簡易計(jì)算器
- 微機(jī)課程設(shè)計(jì)--簡易計(jì)算器
- 簡易計(jì)算器學(xué)生課程設(shè)計(jì)
- 簡易計(jì)算器的設(shè)計(jì)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)報(bào)告---簡易計(jì)算器
- 單片機(jī)課程設(shè)計(jì)報(bào)告-簡易計(jì)算器
- 虛擬儀器課程設(shè)計(jì)報(bào)告(簡易計(jì)算器)
- 簡易計(jì)算器單片機(jī)課程設(shè)計(jì)報(bào)告
- 高級(jí)語言課程設(shè)計(jì)--簡易計(jì)算器
- 微機(jī)原理簡易計(jì)算器課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)報(bào)告-- 簡易計(jì)算器設(shè)計(jì)
- 數(shù)電課程設(shè)計(jì)--簡易計(jì)算器
評(píng)論
0/150
提交評(píng)論