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

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論