通俗易懂版基于MFC科學計算器.doc_第1頁
通俗易懂版基于MFC科學計算器.doc_第2頁
通俗易懂版基于MFC科學計算器.doc_第3頁
通俗易懂版基于MFC科學計算器.doc_第4頁
通俗易懂版基于MFC科學計算器.doc_第5頁
已閱讀5頁,還剩34頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

2013/6/22作者編寫的科學強大的易懂的新手入門的科學計算器,基于MFC編寫的科學計算器指導教師對課程設計的評定意見搞 要 本課程設計是在基于對話框的應用程序中模擬一個計算器,本計算器可以進行十進制下的四則運算(加、減、乘、除)和四則混合運算,可以把十進制轉化為二進制或十六進制,可以進行一些常用的函數運算(比如sin、cos、tan、cot、sqrt、ln等),還可以支持帶“(”,“)”符號的表達式的計算。系統開發平臺為Windows XP,程序設計設計語言采用Visual C+6.0,程序運行平臺為Windows 98/2000/XP。程序通過調試運行,初步實現了設計目標。關鍵詞 程序設計;計算器;C+;1 引言 在現代社會中,計算器已經進入了每一個家庭,人們在生活和學習中經常需要使用到計算器,它的出現大大減少了人們在計算方面的工作量,可以說它在人們生活和學習中是不可缺少的。1.1 C+介紹C+語言的主要特點表現在兩個方面,一是全面兼容C語言,二是支持面向對象的程序設計方法1。(1) C+是一個更好的C,它保持了C語言的優點,大多數的C程序代碼略作修改或不作修改就可在C+的集成環境下調試和運行。這對于繼承和開發當前已在廣泛的軟件是非常重要的,可以節省大量的人力和物力。(2) C+是一種面向對象的程序設計語言它使得程序的各個模塊的獨立性更強,程序的可讀性和可移植性更強,程序代碼的結構更加合理,程序的擴充性更強。這對于設計、編制和調試一些大型的軟件尤為重要。 (3) C+集成環境不僅支持C+程序的編譯和調試,而且也支持C程序的編譯和調試。通常,C+程序環境約定:當源程序文件的擴展名為c時,則為C程序;而當源程序文件的擴展名為cpp時,則為C+程序。(4) C+語句非常簡練,對語法限制比較寬松,因此C+語法非常靈活。其優點是給用戶編程帶來書寫上的方便。其缺點是由于編譯時對語法限制比較寬松,許多邏輯上的錯誤不容易發現,給用戶編程增加了難度。3以下是詳盡的代碼在C*Dlg添加下面代碼,這個自己一定要看懂,里面是各個按鈕的響應函數,不是叫你直接復制粘貼,而是一個個雙擊按鈕添加代碼,最后成了以下的樣式。/ text2Dlg.cpp : 實現文件/#include stdafx.h#include text2.h#include text2Dlg.h#include afxdialogex.h#includeatlsimpstr.h#ifdef _DEBUG#define new DEBUG_NEW#endif/ 用于應用程序“關于”菜單項的 CAboutDlg 對話框class CAboutDlg : public CDialogExpublic:CAboutDlg();/ 對話框數據enum IDD = IDD_ABOUTBOX ;protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV 支持/ 實現protected:DECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialogEx(CAboutDlg:IDD)void CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialogEx:DoDataExchange(pDX);BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)END_MESSAGE_MAP()/ Ctext2Dlg 對話框Ctext2Dlg:Ctext2Dlg(CWnd* pParent /*=NULL*/): CDialogEx(Ctext2Dlg:IDD, pParent), m_strResult(_T(), OperatorPressed(false), Restarted(false), s(0), m_Edit3(_T(), L(0), L1(0), PB(0), radio(0), m_strout(_T(), m_MM3(_T(), m_Inv(false)m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);void Ctext2Dlg:DoDataExchange(CDataExchange* pDX)CDialogEx:DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT1, m_strResult);DDX_Text(pDX, IDC_EDIT3, m_Edit3);DDX_Text(pDX, IDC_MM3, m_MM3);BEGIN_MESSAGE_MAP(Ctext2Dlg, CDialogEx)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_0, &Ctext2Dlg:OnBnClicked0)ON_BN_CLICKED(IDC_1, &Ctext2Dlg:OnBnClicked1)ON_BN_CLICKED(IDC_2, &Ctext2Dlg:OnBnClicked2)ON_BN_CLICKED(IDC_3, &Ctext2Dlg:OnBnClicked3)ON_BN_CLICKED(IDC_4, &Ctext2Dlg:OnBnClicked4)ON_BN_CLICKED(IDC_5, &Ctext2Dlg:OnBnClicked5)ON_BN_CLICKED(IDC_6, &Ctext2Dlg:OnBnClicked6)ON_BN_CLICKED(IDC_7, &Ctext2Dlg:OnBnClicked7)ON_BN_CLICKED(IDC_8, &Ctext2Dlg:OnBnClicked8)ON_BN_CLICKED(IDC_9, &Ctext2Dlg:OnBnClicked9)ON_BN_CLICKED(IDC_POINT, &Ctext2Dlg:OnBnClickedPoint)ON_BN_CLICKED(IDC_ADD, &Ctext2Dlg:OnBnClickedAdd)ON_BN_CLICKED(IDC_SUB, &Ctext2Dlg:OnBnClickedSub)ON_BN_CLICKED(IDC_mul, &Ctext2Dlg:OnBnClickedmul)ON_BN_CLICKED(IDC_DIV, &Ctext2Dlg:OnBnClickedDiv)ON_BN_CLICKED(IDC_EQUAL, &Ctext2Dlg:OnBnClickedEqual)ON_BN_CLICKED(IDC_BACKSPACE, &Ctext2Dlg:OnBnClickedBackspace)ON_BN_CLICKED(IDC_C, &Ctext2Dlg:OnBnClickedC)ON_BN_CLICKED(IDC_SIN, &Ctext2Dlg:OnBnClickedSin)ON_BN_CLICKED(IDC_COS, &Ctext2Dlg:OnBnClickedCos)ON_BN_CLICKED(IDC_TAN, &Ctext2Dlg:OnBnClickedTan)ON_BN_CLICKED(IDC_SQRT, &Ctext2Dlg:OnBnClickedSqrt)ON_BN_CLICKED(IDC_LKOUHAO, &Ctext2Dlg:OnBnClickedLkouhao)ON_BN_CLICKED(IDC_RKOUHAO, &Ctext2Dlg:OnBnClickedRkouhao)ON_BN_CLICKED(IDC_PI, &Ctext2Dlg:OnBnClickedPi)ON_BN_CLICKED(IDC_INT, &Ctext2Dlg:OnBnClickedInt)ON_BN_CLICKED(IDC_MOD, &Ctext2Dlg:OnBnClickedMod)ON_BN_CLICKED(IDC_CE, &Ctext2Dlg:OnBnClickedCe)ON_BN_CLICKED(IDC_DAOSHU, &Ctext2Dlg:OnBnClickedDaoshu)ON_BN_CLICKED(IDC_JIAJIAN, &Ctext2Dlg:OnBnClickedJiajian)ON_BN_CLICKED(IDC_N, &Ctext2Dlg:OnBnClickedN)ON_BN_CLICKED(IDC_SQUARE, &Ctext2Dlg:OnBnClickedSquare)ON_BN_CLICKED(IDC_CUBE, &Ctext2Dlg:OnBnClickedCube)ON_BN_CLICKED(IDC_TENX, &Ctext2Dlg:OnBnClickedTenx)ON_BN_CLICKED(IDC_EXP, &Ctext2Dlg:OnBnClickedExp)ON_BN_CLICKED(IDC_LOG, &Ctext2Dlg:OnBnClickedLog)ON_BN_CLICKED(IDC_SINH, &Ctext2Dlg:OnBnClickedSinh)ON_BN_CLICKED(IDC_COSH, &Ctext2Dlg:OnBnClickedCosh)ON_BN_CLICKED(IDC_TANH, &Ctext2Dlg:OnBnClickedTanh)ON_BN_CLICKED(IDC_IN, &Ctext2Dlg:OnBnClickedIn)ON_BN_CLICKED(IDC_XY, &Ctext2Dlg:OnBnClickedXy)ON_BN_CLICKED(IDC_KAILIFANG, &Ctext2Dlg:OnBnClickedKailifang)ON_BN_CLICKED(IDC_RADIO1, &Ctext2Dlg:OnBnClickedRadio1)ON_BN_CLICKED(IDC_RADIO2, &Ctext2Dlg:OnBnClickedRadio2)ON_BN_CLICKED(IDC_FE, &Ctext2Dlg:OnBnClickedFe)ON_BN_CLICKED(IDC_YX, &Ctext2Dlg:OnBnClickedYx)ON_BN_CLICKED(IDC_INV, &Ctext2Dlg:OnBnClickedInv)ON_BN_CLICKED(IDC_MC, &Ctext2Dlg:OnBnClickedMc)ON_BN_CLICKED(IDC_MR, &Ctext2Dlg:OnBnClickedMr)ON_BN_CLICKED(IDC_MS, &Ctext2Dlg:OnBnClickedMs)ON_BN_CLICKED(IDC_MADD, &Ctext2Dlg:OnBnClickedMadd)ON_BN_CLICKED(IDC_MSUB, &Ctext2Dlg:OnBnClickedMsub)ON_BN_CLICKED(IDC_SIN2, &Ctext2Dlg:OnBnClickedSin2)ON_BN_CLICKED(IDC_COS2, &Ctext2Dlg:OnBnClickedCos2)ON_BN_CLICKED(IDC_TAN2, &Ctext2Dlg:OnBnClickedTan2)ON_BN_CLICKED(IDC_PI2, &Ctext2Dlg:OnBnClickedPi2)END_MESSAGE_MAP()/ Ctext2Dlg 消息處理程序BOOL Ctext2Dlg:OnInitDialog()CDialogEx:OnInitDialog();/ 將“關于.”菜單項添加到系統菜單中。/ IDM_ABOUTBOX 必須在系統命令范圍內。ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ 設置此對話框的圖標。當應用程序主窗口不是對話框時,框架將自動/ 執行此操作SetIcon(m_hIcon, TRUE);/ 設置大圖標SetIcon(m_hIcon, FALSE);/ 設置小圖標/ TODO: 在此添加額外的初始化代碼return TRUE; / 除非將焦點設置到控件,否則返回 TRUEvoid Ctext2Dlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialogEx:OnSysCommand(nID, lParam);/ 如果向對話框添加最小化按鈕,則需要下面的代碼/ 來繪制該圖標。對于使用文檔/視圖模型的 MFC 應用程序,/ 這將由框架自動完成。void Ctext2Dlg:OnPaint()if (IsIconic()CPaintDC dc(this); / 用于繪制的設備上下文SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc(), 0);/ 使圖標在工作區矩形中居中int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ 繪制圖標dc.DrawIcon(x, y, m_hIcon);elseCDialogEx:OnPaint();/當用戶拖動最小化窗口時系統調用此函數取得光標/顯示。HCURSOR Ctext2Dlg:OnQueryDragIcon()return static_cast(m_hIcon);void Ctext2Dlg:OnBnClicked0() /以下19和“.”都是一個道理,在此寫一個說明一下UpdateData(TRUE); /把編輯框顯示的字符串傳給相應的變量m_strResultif(OperatorPressed=true|Restarted=true) /如果按下了=,AC,sqrt,tan,sin等按忸時,m_strResult=0; /變量m_strResult的值為按下的按忸0(否則下面會出現03.的情況出現)else m_strResult+=0; /在按下數字鍵的情況下,則在m_strResult后加0OperatorPressed=false; / OperatorPressed是bool型的變量 Restarted=false; / Restarted是bool型的變量 UpdateData(FALSE); /把字符串變量m_strResult傳給編輯框void Ctext2Dlg:OnBnClicked1()UpdateData(TRUE); if(OperatorPressed=true|Restarted=true)m_strResult=1; else m_strResult+=1;OperatorPressed=false; Restarted=false;UpdateData(FALSE); void Ctext2Dlg:OnBnClicked2()UpdateData(TRUE); if(OperatorPressed=true|Restarted=true)m_strResult=2; else m_strResult+=2;OperatorPressed=false; Restarted=false;UpdateData(FALSE); void Ctext2Dlg:OnBnClicked3()UpdateData(TRUE); if(OperatorPressed=true|Restarted=true)m_strResult=3; else m_strResult+=3;OperatorPressed=false; Restarted=false;UpdateData(FALSE); void Ctext2Dlg:OnBnClicked4()UpdateData(TRUE); if(OperatorPressed=true|Restarted=true)m_strResult=4; else m_strResult+=4;OperatorPressed=false; Restarted=false;UpdateData(FALSE); void Ctext2Dlg:OnBnClicked5()UpdateData(TRUE); if(OperatorPressed=true|Restarted=true)m_strResult=5; else m_strResult+=5;OperatorPressed=false; Restarted=false;UpdateData(FALSE); void Ctext2Dlg:OnBnClicked6()UpdateData(TRUE); if(OperatorPressed=true|Restarted=true)m_strResult=6; else m_strResult+=6;OperatorPressed=false; Restarted=false;UpdateData(FALSE); void Ctext2Dlg:OnBnClicked7()UpdateData(TRUE); if(OperatorPressed=true|Restarted=true)m_strResult=7;else m_strResult+=7;OperatorPressed=false; Restarted=false;UpdateData(FALSE); void Ctext2Dlg:OnBnClicked8()UpdateData(TRUE); if(OperatorPressed=true|Restarted=true)m_strResult=8; else m_strResult+=8;OperatorPressed=false; Restarted=false;UpdateData(FALSE); void Ctext2Dlg:OnBnClicked9()UpdateData(TRUE); if(OperatorPressed=true|Restarted=true)m_strResult=9; else m_strResult+=9;OperatorPressed=false; Restarted=false;UpdateData(FALSE); void Ctext2Dlg:OnBnClickedPoint()UpdateData(TRUE); if(OperatorPressed=true|Restarted=true)m_strResult=.; else m_strResult+=.;OperatorPressed=false; Restarted=false;UpdateData(FALSE); void Ctext2Dlg:OnBnClickedAdd() /以下“- * /”都是一個道理,在此寫一個說明一下UpdateData(TRUE); /把編輯框顯示的字符串傳給相應的變量m_strResult m_strResult+=+; /在變量m_strResult后加+ OperatorPressed=false; Restarted=false; /把bool變量OperatorPressed和Restarted的值改為falseUpdateData(FALSE); /把字符串變量m_strResult傳給編輯框 void Ctext2Dlg:OnBnClickedSub()UpdateData(TRUE); m_strResult+=-; OperatorPressed=false; Restarted=false;UpdateData(FALSE); void Ctext2Dlg:OnBnClickedmul()UpdateData(TRUE); m_strResult+=*; OperatorPressed=false; Restarted=false;UpdateData(FALSE); void Ctext2Dlg:OnBnClickedDiv()UpdateData(TRUE); m_strResult+=/; OperatorPressed=false; Restarted=false;UpdateData(FALSE); void Ctext2Dlg:OnBnClickedEqual() UpdateData(TRUE);L1=true;int p=0,i=0,g10=0,k=0,j;for(;im_strResult.GetLength();i+)if(m_strResult.GetAt(i)=()j=p;gj=i;p+;for(;k1) /判斷編輯框是否只剩下“0”或者是否有字符在編輯框上m_strResult=m_strResult.Left(m_strResult.GetLength()-1); /把m_strResult左邊的數(長度已經減一)重新賦給m_strResultelseRestarted=true; /把bool變量Restarted的值改為truem_strResult=0; /變量m_strResult的值為按下的按忸0UpdateData(FALSE);/把字符串變量m_strResult傳給編輯框 void Ctext2Dlg:OnBnClickedC()Restarted=true; /把bool變量Restarted的值改為truem_strResult=0; /變量m_strResult的值為按下的按忸0UpdateData(FALSE);/把字符串變量m_strResult傳給編輯框 void Ctext2Dlg:OnBnClickedSin() /以下“cos tan sinh cosh tanh”都是一個道理,在此寫一個說明一下UpdateData(TRUE);/把編輯框顯示的字符串傳給相應的變量m_strResult double result; /定義一個局部變量double型的result if(radio=1) /判斷是否按下度(這里還沒有設置梯度的消息命令響應函數)result=sin(_wtof(m_strResult)*6.2831853071795864769/360.0); /計算sin(度)的公式else result=sin(_wtof(m_strResult);/計算sin(弧度)的公式m_Edit3.Format(_T(%1f),result);/將result的double型數據轉換成字符串,并傳遞給編輯框2的變量m_Edit3ClearZero(m_Edit3); /清零m_strResult=m_Edit3; /將編輯框2的變量m_Edit3上的字符串賦值給編輯框1的變量m_strResultOperatorPressed=true; /把bool變量OperatorPressed的值改為true UpdateData(FALSE); /把字符串變量m_strResult,m_Edit3傳給各自的編輯框 void Ctext2Dlg:OnBnClickedCos()UpdateData(TRUE);double result;if(radio=1)result=cos(_wtof(m_strResult)*6.2831853071795864769/360.0);else result=cos(_wtof(m_strResult);m_Edit3.Format(_T(%1f),result);ClearZero(m_Edit3);m_strResult=m_Edit3;OperatorPressed=true; UpdateData(FALSE);void Ctext2Dlg:OnBnClickedTan()UpdateData(TRUE);double result; if(radio=1)result=tan(_wtof(m_strResult)*6.2831853071795864769/360.0);else result=tan(_wtof(m_strResult);m_Edit3.Format(_T(%1f),result);ClearZero(m_Edit3);m_strResult=m_Edit3;OperatorPressed=true; UpdateData(FALSE);void Ctext2Dlg:OnBnClickedSqrt()UpdateData(TRUE); /把編輯框顯示的字符串傳給相應的變量m_strResult double result; /定義一個局部變量double型的result result=sqrt(_wtof(m_strResult);/計算sqrtm_Edit3.Format(_T(%1f),result);/將result的double型數據轉換成字符串,并傳遞給編輯框2的變量m_Edit3ClearZero(m_Edit3); /清零OperatorPressed=true;/把bool變量OperatorPressed的值改為true UpdateData(FALSE);/把字符串變量m_Edit3傳給編輯框double Ctext2Dlg:GetaStr(CString str) /這個函數的作用是將只有數字和.的字符串轉成double的數值,即相當于_wtof()這個函數/這個函數也是自己添加int i=0;double rate=10.0,itemp=0.0;for(;istr.GetLength();i+) if(isdigit(str.GetAt(i) /如果字符串str.GetAt(i)的內容是整數 if(rate=10.0) /整數部分itemp=itemp*rate+(str.GetAt(i)-0);/獲得整數else /小數部分itemp=itemp+rate*(str.GetAt(i)-0);/獲得小數rate=rate/10; /每次讓rate小10倍else if(str.GetAt(i)=.) /如果str.GetAt(i)是小數點rate=0.1; /讓rate=0.1,開始計算小數部分 return (itemp);void Ctext2Dlg:OnBnClickedLkouhao()UpdateData(TRUE); /把編輯框顯示的字符串傳給相應的變量m_strResult if(OperatorPressed=true|Restarted=true)m_strResult=(; /變量m_strResult的值為按下的按忸( else m_strResult+=(; /在按下數字鍵的情況下,則在m_strResult后加(OperatorPressed=false; Restarted=false; /把bool變量OperatorPressed和Restarted的值改為falseUpdateData(FALSE); /把字符串變量m_strResult傳給編輯框 void Ctext2Dlg:OnBnClickedRkouhao()UpdateData(TRUE); if(OperatorPressed=true|Restarted=true)m_strResult=); else m_strResult+=);OperatorPressed=false; Restarted=false;UpdateData(FALSE); void Ctext2Dlg:Bracket(CString str0,int *h)/這個代碼也是自己添加CString str1=_T(),str2=_T(),str3=_T();int i=0;for(;istr0.GetLength();i+) if(*h=i) /如果碰到了左括號 i+; /i自加一次,用來跳過左括號 for(;istr0.GetLength();i+)if(str0.GetAt(i)=) break; /如果碰到右括號,跳出循環 str2+=str0.GetAt(i); /把括號內的表達式賦給str2i+; /i自加一次,用

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論