计算器源代码_第1页
计算器源代码_第2页
计算器源代码_第3页
计算器源代码_第4页
计算器源代码_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

头文件class CCacl2Dlg : public CDialog/ Constructionpublic:int m_fun; /m_fun 是运算符如:+,-,*,/void AddFun(int j); /该函数的功能是输入数字void AddNum(int i); /该函数的功能是输入运算符int m_ForS; /指示此时输入的是/第一个数还是第二个数 bool m_firx,m_secx; /指示此时是否在输入小数部分/即是否按过了小数点double m_first,m_second; /第一第二个数 double m_firstz,m_secondz; /第一第二个数的整数部分double m_firstx,m_secondx; /第一第二个数的小数部分int m_firxw,m_secxw; /第一第二个数的小数部分的位数int m_firzorf,m_seczorf; /指示是否是负数/既是否按过+/-键bool m_EnterSec; /是否输入了第二个数;double m_result; /结果double m_mfir,m_msec; / 记住上次参加运算的第一二个数bool m_sfmf,m_sfms,m_sfmfun; /指示是否此时还记的上次的数和运算符int m_mfun; /记住上次的运算符CCacl2Dlg(CWnd* pParent = NULL); / standard constructor/ Dialog Data/AFX_DATA(CCacl2Dlg)enum IDD = IDD_CACL2_DIALOG ;CEdit m_xedit;double m_x;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CCacl2Dlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:HICON m_hIcon;/ Generated message map functions/AFX_MSG(CCacl2Dlg)afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg void On0();afx_msg void On1();afx_msg void On2();afx_msg void On3();afx_msg void On4();afx_msg void On5();afx_msg void On6();afx_msg void On7();afx_msg void On8();afx_msg void On9();afx_msg void OnAdd();afx_msg void OnBack();afx_msg void OnDiv();afx_msg void OnGo();afx_msg void OnOn();afx_msg void OnSub();afx_msg void OnTim();afx_msg void OnXsd();afx_msg void OnZfh();afx_msg void OnAbtath();/AFX_MSGDECLARE_MESSAGE_MAP();CPP 文件CCacl2Dlg:CCacl2Dlg(CWnd* pParent /*=NULL*/): CDialog(CCacl2Dlg:IDD, pParent)/AFX_DATA_INIT(CCacl2Dlg)m_x = 0.0;/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);m_first=0.0;m_second=0.0; /该行以下为初始化m_firstz=0;m_firstx=0.0;m_secondz=0;m_secondx=0.0;m_firx=FALSE;m_secx=FALSE;m_firxw=0;m_secxw=0;m_firzorf=1;m_seczorf=1;m_EnterSec=FALSE; m_result=0.0;m_ForS=1;m_mfir=0.0;m_msec=0.0;m_mfun=0;m_sfmf=FALSE;m_sfms=FALSE;m_sfmfun=FALSE;void CCacl2Dlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CCacl2Dlg)DDX_Control(pDX, IDC_RESULT, m_xedit);DDX_Text(pDX, IDC_RESULT, m_x);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CCacl2Dlg, CDialog)/AFX_MSG_MAP(CCacl2Dlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_0, On0)ON_BN_CLICKED(IDC_1, On1)ON_BN_CLICKED(IDC_2, On2)ON_BN_CLICKED(IDC_3, On3)ON_BN_CLICKED(IDC_4, On4)ON_BN_CLICKED(IDC_5, On5)ON_BN_CLICKED(IDC_6, On6)ON_BN_CLICKED(IDC_7, On7)ON_BN_CLICKED(IDC_8, On8)ON_BN_CLICKED(IDC_9, On9)ON_BN_CLICKED(IDC_ADD, OnAdd)ON_BN_CLICKED(IDC_BACK, OnBack)ON_BN_CLICKED(IDC_DIV, OnDiv)ON_BN_CLICKED(IDC_GO, OnGo)ON_BN_CLICKED(IDC_ON, OnOn)ON_BN_CLICKED(IDC_SUB, OnSub)ON_BN_CLICKED(IDC_TIM, OnTim)ON_BN_CLICKED(IDC_XSD, OnXsd)ON_BN_CLICKED(IDC_ZFH, OnZfh)ON_BN_CLICKED(IDC_ABTATH, OnAbtath)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CCacl2Dlg message handlersvoid CCacl2Dlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);/ If you add a minimize button to your dialog, you will need the code below/ to draw the icon. For MFC applications using the document/view model,/ this is automatically done for you by the framework.void CCacl2Dlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();/ The system calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CCacl2Dlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;void CCacl2Dlg:On0() /输入 0/ TODO: Add your control notification handler code hereAddNum(0);void CCacl2Dlg:On1() /输入 1/ TODO: Add your control notification handler code hereAddNum(1);void CCacl2Dlg:On2() /输入 2/ TODO: Add your control notification handler code hereAddNum(2);void CCacl2Dlg:On3() /输入 3/ TODO: Add your control notification handler code hereAddNum(3);void CCacl2Dlg:On4() /输入 4/ TODO: Add your control notification handler code hereAddNum(4);void CCacl2Dlg:On5() /输入 5/ TODO: Add your control notification handler code hereAddNum(5);void CCacl2Dlg:On6() /输入 6/ TODO: Add your control notification handler code hereAddNum(6);void CCacl2Dlg:On7() /输入 7/ TODO: Add your control notification handler code hereAddNum(7);void CCacl2Dlg:On8() /输入 8/ TODO: Add your control notification handler code hereAddNum(8);void CCacl2Dlg:On9() /输入 9/ TODO: Add your control notification handler code hereAddNum(9);void CCacl2Dlg:OnAdd() /输入+/ TODO: Add your control notification handler code hereAddFun(1);void CCacl2Dlg:OnBack() /按 back 键/ TODO: Add your control notification handler code hereif(m_ForS=1) /如果此时在输入第一个数if(m_firx=FALSE) /如果此时在输入整数部分 if(m_firstz10) /如果整数部分小于 10m_firstz=0; /改为 0m_firzorf=1; /置符号为正elseint y1=(int)m_firstz;/y1 为一与整数部分相等的数y1/=10; /去掉个位数 m_firstz=y1;else /如果在输入小数部分if(m_firxw=1) /此时小数部分只有一位m_firstx=0.0;m_firxw=0;m_firx=FALSE;/小数部分清为 0elseint y2=(int)(m_firstx*pow(10,m_firxw); /取一整数与小数点所有的数表示的整数相等,如 123 等于 0.123 的小数部分表示的数y2/=10;m_firxw-; /去掉最后一位m_firstx=y2*pow(10,(-1)*m_firxw);m_first=m_firzorf*(m_firstz+m_firstx); /计算出第一个数m_x=m_first;UpdateData(FALSE); /显示它else if(m_ForS=2) /如果在输入第二个数, 处理方法同第一个数if(m_secx=FALSE) if(m_secondz10)m_secondz=0;m_seczorf=1;elseint y3=(int)m_secondz;y3/=10;m_secondz=y3;elseif(m_secxw=1)m_secondx=0.0;m_secxw=0;m_secx=FALSE;elseint y4=(int)(m_secondx*pow(10,m_secxw);y4/=10;m_secxw-;m_secondx=y4*pow(10,(-1)*m_secxw);m_second=m_seczorf*(m_secondz+m_secondx);m_x=m_second;UpdateData(FALSE);void CCacl2Dlg:OnDiv() /输入/ TODO: Add your control notification handler code hereAddFun(4);void CCacl2Dlg:OnGo() /按 =号运算/ TODO: Add your control notification handler code hereif(m_sfmf=TRUE /m_fun 为 1,则用上次的数和符号加,下同else if(m_mfun=2)m_result=m_mfir-m_msec; /m_fun 为 2,则减, 下同else if(m_mfun=3)m_result=m_mfir*m_msec; /为 3,则乘,下同else if(m_mfun=4)m_result=m_mfir/m_msec; /为 4,则除,下同m_sfmf=TRUE;m_sfms=TRUE;m_sfmfun=TRUE; /记住参加运算的数和运算符m_mfir=m_result;m_msec=m_msec;m_mfun=m_mfun;else if(m_sfmf=TRUEelse if(m_fun=2)m_result=m_mfir-m_second;else if(m_fun=3)m_result=m_mfir*m_second;else if(m_fun=4)m_result=m_mfir/m_second;m_sfmf=TRUE;m_sfms=TRUE;m_sfmfun=TRUE;m_mfir=m_result;m_msec=m_second;m_mfun=m_fun;else if(m_sfmf=TRUEm_second=m_mfir;if(m_fun=1)m_result=m_mfir+m_second;else if(m_fun=2)m_result=m_mfir-m_second;else if(m_fun=3)m_result=m_mfir*m_second;else if(m_fun=4)m_result=m_mfir/m_second;m_sfmf=TRUE;m_sfms=TRUE;m_sfmfun=TRUE;m_mfir=m_result;m_msec=m_second;m_mfun=m_fun;else if(m_sfmf=FALSEif(m_fun=1)m_result=m_first+m_second;else if(m_fun=2)m_result=m_first-m_second;else if(m_fun=3)m_result=m_first*m_second;else if(m_fun=4)m_result=m_first/m_second;m_sfmf=TRUE;m_sfms=TRUE;m_sfmfun=TRUE;m_mfir=m_result;m_msec=m_second;m_mfun=m_fun;m_x=m_result;UpdateData(FALSE); /显示结果m_first=0;m_second=0.0; m_firstz=0;m_firstx=0.0;m_secondz=0;m_secondx=0.0;m_firx=FALSE;m_secx=FALSE;m_firxw=0;m_secxw=0;m_firzorf=1;m_seczorf=1;m_ForS=1;m_EnterSec=FALSE; void CCacl2Dlg:OnOn() /按 on 键/ TODO: Add your control notification handler code herem_x=0.0; /恢复默认值,下同m_first=0.0;m_second=0.0;m_firstz=0;m_firstx=0.0;m_secondz=0;m_secondx=0.0;m_firx=FALSE;m_secx=FALSE;m_firxw=0;m_secxw=0;m_firzorf=1;m_seczorf=1;m_ForS=1;m_mfir=0.0;m_msec=0.0;m_mfun=0;m_sfmf=FALSE;m_sfms=FALSE;m_sfmfun=FALSE;m_EnterSec=FALSE; UpdateData(FALSE);void CCacl2Dlg:OnSub() /输入-/ TODO: Add your control notification handler code hereAddFun(2); void CCacl2Dlg:OnTim() /输入*/ TODO: Add your control notification handler code hereAddFun(3);void CCacl2Dlg:OnXsd() /按小数点./ TODO: Add your control notification handler code hereif(m_ForS=1)m_firx=TRUE; /此时在输入第一个数,第一个数指示十是否该输入小数部分变量置为真else if(m_ForS=2)m_secx=TRUE; /在输入第二个数void CCacl2Dlg:OnZfh() /按+/- 键/ TODO: Add your control notification handler code hereif(m_ForS=1) /此时在输入第一个数m_firzorf=-1; /指示符置为-1m_first*=-1;m_x=m_first;UpdateData(FALSE);else m_seczorf=-1;m_second*=-1;m_x=m_second;UpdateData(FALSE);void CCacl2Dlg:AddNum(int i) /输入数字是时的处理函数 if(m_ForS=1)if(m_firx=FALSE) /整数数部分m_firstz*=10;m_firstz+=i; else /小数部分 m_firxw+;m_firstx+=pow(10,(-1)*m_firxw)*i;m_first=m_firzorf*(m_firstz+m_firstx);m_x=m_first; m_sfmf=FALSE;m_mfir=0;UpdateData(FALSE);else if(m_ForS=2) /第二个数, 处理同第一个数 m_EnterSec=TRUE; /将指示是否输入第二个数的变量置为真if(m_secx=FALSE)m_secondz*=10;m_secondz+=i;else m_secxw+;m_secondx+=pow(10,(-1)*m_secxw)*i;m_second=m_seczorf*(m_secondz+m_secondx);m_sfms=FALSE;m_msec=0;m_x=m_second;UpdateData(FALSE); void CCacl2Dlg:AddFun(int j) /输入运算符时

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论