簡易計算器課程設(shè)計報告_第1頁
已閱讀1頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  《C++程序設(shè)計》(MFC)</p><p><b>  課程設(shè)計報告</b></p><p>  設(shè)計題目: 簡易計算器 </p><p>  班 級: </p><p>  姓 名:

2、 </p><p>  學(xué) 號: </p><p>  指導(dǎo)教師: </p><p>  時 間: 2010年6月30日 </p><p>  目 錄</p>

3、<p>  1.設(shè)計目標……………………………………………………………</p><p>  2.設(shè)計內(nèi)容……………………………………………………………</p><p>  3.設(shè)計思想…………………………………………………………… </p><p>  4.設(shè)計說明……………………………………………………………&

4、lt;/p><p>  5.設(shè)計步驟……………………………………………………………</p><p>  6.主要成員函數(shù)關(guān)系圖………………………………………………</p><p>  7.程序主要代碼………………………………………………………</p><p>  8. 難點分析……………………………………………………………</p>

5、<p>  9. 總結(jié)…………………………………………………………………</p><p>  簡易計算器(MFC)</p><p><b>  1.設(shè)計目標</b></p><p>  了解Windows應(yīng)用程序的結(jié)構(gòu)與DOS程序的不同,掌握應(yīng)用MFC類庫編寫Windows應(yīng)用程序的基本模式。</p><p>

6、<b>  2.設(shè)計內(nèi)容</b></p><p>  以簡易計算器為例,通過對簡單應(yīng)用軟件計算器的設(shè)計,編制、調(diào)試,實現(xiàn)簡單的加,減,乘,除等運算,以學(xué)習(xí)應(yīng)用MFC庫類編寫對話框的原理,加深對C++類的學(xué)習(xí)及應(yīng)用。</p><p><b>  3. 設(shè)計思想</b></p><p>  基于MFC庫類對對話框界面的設(shè)計,通

7、過創(chuàng)建類成員函數(shù)成員變量,編輯控件創(chuàng)建消息映射,調(diào)用消息函數(shù)完成數(shù)據(jù)的輸入輸出,實現(xiàn)計算功能。生成簡單的應(yīng)用軟件。</p><p><b>  4. 設(shè)計說明</b></p><p>  (1)包含的功能有:加、減、乘、除運算,開方、平方等功能。</p><p>  (2)計算器上數(shù)字0—9為一個控件數(shù)組,加、減、乘、除為一個控件數(shù)組,其余為

8、單一的控件。</p><p>  (3)輸入的原始數(shù)據(jù)、運算中間數(shù)據(jù)和結(jié)果都顯示在窗口頂部的同一個標簽中。</p><p>  (4)計算功能基本上是用系統(tǒng)內(nèi)部函數(shù)。</p><p>  (5)程序可以能自動判斷輸入數(shù)據(jù)的正確性,保證不出現(xiàn)多于一個小數(shù)點、以0開頭等不正?,F(xiàn)象。</p><p>  (6)“CE”按鈕可以清除所有已輸入的數(shù)據(jù)從

9、頭計算</p><p><b>  5. 設(shè)計步驟</b></p><p> ?。?)選擇FileNewlProject命令,選擇MFC AppWizard(exe)創(chuàng)建Project名為Caa,按確定。在彈出界面選擇創(chuàng)建對話框,單擊Finish按鈕</p><p>  (2)在生成的設(shè)計界面中加入控件,得到計算器應(yīng)用界面。如圖:</p&

10、gt;<p> ?。?)為控件編輯框編輯ID,如圖:</p><p> ?。?)進入ClassWizard界面選擇Message Maps為控件插入消息映射,插入消息函數(shù),實現(xiàn)控件命令功能。如圖:</p><p>  (5) 進入ClassWizard界面Message Varibles為編輯框添加成員變量m_result用以顯示結(jié)果。如圖:</p><p

11、> ?。?)在CaaDlg.h中加入在主要成員函數(shù)和成員變量的申明在CaaDlg.cpp中加入主要成員函數(shù)實現(xiàn)過程和成員變量的初始化(代碼片段將于后面介紹)。</p><p>  6. 主要成員函數(shù)關(guān)系圖</p><p><b>  程序主要代碼</b></p><p>  //在頭文件中手動添加成員函數(shù)與變量聲明</p>

12、<p>  // caaDlg.h : header file</p><p>  //定義兩個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; //存儲當前輸入的操作數(shù)</p><p>  float m_accum; //存儲當前的計算處理結(jié)束</p><p>  BOOL m_bCoff;

14、 //標識當前輸入是否是小數(shù)</p><p>  float m_coff; //小數(shù)輸入時的系數(shù)</p><p>  Operator m_operator; //enum型變量用以標識當前運算符</p><p>  CalcError m_errorState

15、; //enum型變量用以標識當前運算狀態(tài)</p><p>  BOOL m_bOperandAvail; //標識當前輸入是否是新輸入數(shù)字</p><p>  void UpdateDisplay(); //處理顯示</p><p>  void Calc

16、ulate(); //處理計算</p><p>  void OnOperandInput(int a); //處理數(shù)字輸入</p><p>  //在執(zhí)行文件中添加成員函數(shù)實現(xiàn)部分與變量初始</p><p>  // caaDlg.cpp :

17、implementation file</p><p>  //以下是對聲明變量進行初始</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(""); //默認為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; //為變量進行初始</p>

20、<p>  m_bCoff=0; //為變量進行初始</p><p>  m_errorState = ErrNone; //為變量進行初始</p><p>  m_bOperandAvail=FALSE;

21、 //為變量進行初始</p><p>  m_operator=OpNone; //為變量進行初始</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ù),用于實現(xiàn)計算功能</p><p>  void CCaaDlg::OnOperandInput(int a) //處理0-9 數(shù)字的輸入函數(shù)</p><p>  {if (m_errorState != ErrNone) //判斷當前運算是否有誤,若有則返回&

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() //處理計算函數(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>  //如果沒有計算符就將m_operand值賦予m_accum</p><p>  if (m_operator == OpNone) <

57、;/p><p>  m_accum = m_operand;</p><p>  else if (m_operator == OpMultiply) //否則按計算符進行計算</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 //如果當前計算無錯誤那么進

63、行顯示</p><p><b>  {</b></p><p>  //如果是輸入計算數(shù),那么顯示輸入情況,如果按下計算符,則顯示結(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. 難點分析</b></p><p>  在利用MFC編寫計算器過程中,遇到的技術(shù)上的問題,及解決方法。</p><p><b>  例如:</b

67、></p><p>  ⑴.計算數(shù)輸入的處理</p><p>  在程序中使用m_operand來存儲當前的輸入。而程序只使用一個函數(shù)來處理所有數(shù)字輸入,也就是說每次單擊數(shù)字按鈕就會調(diào)用該函數(shù)。由于計算數(shù)不僅僅是個位數(shù),因此用戶可能需要單擊幾個數(shù)字按鈕來完成一個計算數(shù)的輸入,這樣在每次輸入時都必須將輸入的數(shù)字累加入m_operand中。而且對于小數(shù)輸入和整數(shù)輸入也必須采取不同的累加方

68、式。如對整數(shù)的輸入,累加方式為: m_operand=m_operand*10+n;其中n為輸入的數(shù)字。而對于小數(shù)輸入,累加方式為:m_operand=m_operand+n*10i ;其中n為數(shù)字,i為小數(shù)位數(shù)。因此在程序中還需設(shè)立布爾型變量m_coff 的值來標識當按下按鈕小數(shù)點的時候來確定調(diào)用哪個累加方式。</p><p> ?、疲远x消息處理函數(shù)、成員函數(shù)、變量</p><p>

69、  在添加自定義函數(shù)、變量時需注意函數(shù)及變量的聲明在頭文件中如:CaaDlg.h ;而函數(shù)的實現(xiàn)部分及變量的初始在執(zhí)行文件中如:CaaDlg.cpp 。</p><p>  值得提醒的是手動添加消息處理函數(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īng)過團隊的努力,在將近一個月的實踐中課程設(shè)計基本完成了。從中學(xué)到很多有用的知識,也積累了不少寶貴的

71、經(jīng)驗。從一開始對MFC這樣一個陌生的類庫名詞,在不斷的翻閱書籍學(xué)習(xí)中開始漸漸的有所了解,雖然在此次課程設(shè)計我們只是針對性的去學(xué)習(xí)對對話框應(yīng)用程序的編程模式,但也體會到了MFC這類庫的博大精深。想全部了解這樣一個類庫,今后還需多下功夫。</p><p>  本次課程設(shè)計我們完成了一個簡易計算器應(yīng)用軟件,在此期間,遇上了不少的技術(shù)難題,但是經(jīng)過努力,通過查找資料,難題還是一個個被解決了,從中學(xué)到了許多課堂上沒學(xué)到的東

72、西,這是很值得高興的。經(jīng)過設(shè)計的各個環(huán)節(jié),從中學(xué)到了很多,鍛煉了系統(tǒng)的設(shè)計的能力,培養(yǎng)了團隊分工合作精神。這樣對我們以后在工作中或?qū)W習(xí)中得到很好的鍛煉,為用VC++編輯軟件奠定基礎(chǔ)。</p><p>  在本次實踐期間對簡易計算器的設(shè)計雖然大體實現(xiàn)各個控件的功能,但仍存在許多的不足與漏洞,還待以后的不斷學(xué)習(xí)進一步完善。</p><p><b>  參考文獻:</b>

73、</p><p>  [1]《Visual C++ 7.0 起步進階》,國防工業(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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論