欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    通俗易懂版基于MFC科学计算器.doc

    • 资源ID:2386186       资源大小:242KB        全文页数:38页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    通俗易懂版基于MFC科学计算器.doc

    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"#include"atlsimpstr.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 < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL)BOOL bNameValid;CString strAboutMenu;bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);ASSERT(bNameValid);if (!strAboutMenu.IsEmpty()pSysMenu->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<WPARAM>(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<HCURSOR>(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后加"0"OperatorPressed=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(;i<m_strResult.GetLength();i+)if(m_strResult.GetAt(i)='(')j=p;gj=i;p+;for(;k<p;k+)Bracket(m_strResult,&gj);/调用Bracket(m_strResult)函数,解决括号问题j-; GetStr(m_strResult); /调用函数GetStr(m_strResult),作用是把m_strResult转化成数字和加减乘除四则运算 GetResult(); /调用函数GetResult(),作用是计算出表达式的值m_Edit3.Format(_T("%1f"),a0);while(L=1)MOD(m_strResult);L=0;while(PB='E')EXP10(m_strResult);PB='#'while(PB='X')Xy(m_strResult);PB='#'while(PB='c')SqrtMul(m_strResult);ClearZero(m_Edit3); UpdateData(FALSE);OperatorPressed=true;void Ctext2Dlg:OnBnClickedBackspace()UpdateData(TRUE); /把编辑框显示的字符串传给相应的变量m_strResult if(m_strResult!="0"&&m_strResult.GetLength()>1) /判断编辑框是否只剩下“0”或者是否有字符在编辑框上m_strResult=m_strResult.Left(m_strResult.GetLength()-1); /把m_strResult左边的数(长度已经减一)重新赋给m_strResultelseRestarted=true; /把bool变量Restarted的值改为truem_strResult="0" /变量m_strResult的值为按下的按忸"0"UpdateData(FALSE);/把字符串变量m_strResult传给编辑框 void Ctext2Dlg:OnBnClickedC()Restarted=true; /把bool变量Restarted的值改为truem_strResult="0" /变量m_strResult的值为按下的按忸"0"UpdateData(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; /

    注意事项

    本文(通俗易懂版基于MFC科学计算器.doc)为本站会员(文库蛋蛋多)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开