calculatorDlg.cpp
上传用户:luojiayill
上传日期:2022-08-09
资源大小:18342k
文件大小:20k
- // calculatorDlg.cpp : 实现文件
- #include "stdafx.h"
- #include "calculator.h"
- #include "calculatorDlg.h"
- #include <cmath>
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #endif
- static Stack<double> save;
- static Stack<CString> m_jisuanshi2;//用来存储计算式的临时值
- // 用于应用程序“关于”菜单项的 CAboutDlg 对话框
- class CAboutDlg : public CDialog
- {
- public:
- CAboutDlg();
- // 对话框数据
- enum { IDD = IDD_ABOUTBOX };
- protected:
- virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
- // 实现
- protected:
- DECLARE_MESSAGE_MAP()
- };
- CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
- {
- }
- void CAboutDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- }
- BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
- END_MESSAGE_MAP()
- // CcalculatorDlg 对话框
- CcalculatorDlg::CcalculatorDlg(CWnd* pParent /*=NULL*/)
- : CDialog(CcalculatorDlg::IDD, pParent)
- , m_show(_T("")),m_jisuanshi(_T(""))
- {
- m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON1); //左上角图标
- }
- void CcalculatorDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- DDX_Text(pDX, IDC_show, m_show);
- DDX_Text(pDX,IDC_jisuanshi,m_jisuanshi);
- }
- BEGIN_MESSAGE_MAP(CcalculatorDlg, CDialog)
- ON_WM_SYSCOMMAND()
- ON_WM_PAINT()
- ON_WM_QUERYDRAGICON()
- //}}AFX_MSG_MAP
- ON_BN_CLICKED(IDC_num9, &CcalculatorDlg::OnBnClickednum9)
- ON_BN_CLICKED(IDC_num8, &CcalculatorDlg::OnBnClickednum8)
- ON_BN_CLICKED(IDC_num7, &CcalculatorDlg::OnBnClickednum7)
- ON_BN_CLICKED(IDC_num6, &CcalculatorDlg::OnBnClickednum6)
- ON_BN_CLICKED(IDC_num5, &CcalculatorDlg::OnBnClickednum5)
- ON_BN_CLICKED(IDC_num4, &CcalculatorDlg::OnBnClickednum4)
- ON_BN_CLICKED(IDC_num3, &CcalculatorDlg::OnBnClickednum3)
- ON_BN_CLICKED(IDC_num2, &CcalculatorDlg::OnBnClickednum2)
- ON_BN_CLICKED(IDC_num1, &CcalculatorDlg::OnBnClickednum1)
- ON_BN_CLICKED(IDC_num0, &CcalculatorDlg::OnBnClickednum0)
- ON_BN_CLICKED(IDC_begin2, &CcalculatorDlg::OnBnClickedbegin2)
- ON_BN_CLICKED(IDC_add, &CcalculatorDlg::OnBnClickedadd)
- ON_BN_CLICKED(IDC_result, &CcalculatorDlg::OnBnClickedresult)
- ON_BN_CLICKED(IDC_backspace, &CcalculatorDlg::OnBnClickedbackspace)
- ON_BN_CLICKED(IDC_sub, &CcalculatorDlg::OnBnClickedsub)
- ON_BN_CLICKED(IDC_mul, &CcalculatorDlg::OnBnClickedmul)
- ON_BN_CLICKED(IDC_div, &CcalculatorDlg::OnBnClickeddiv)
- ON_BN_CLICKED(IDC_point, &CcalculatorDlg::OnBnClickedpoint)
- ON_BN_CLICKED(IDC_pi, &CcalculatorDlg::OnBnClickedpi)
- ON_BN_CLICKED(IDC_mode, &CcalculatorDlg::OnBnClickedmode)
- ON_BN_CLICKED(IDC_daoshu, &CcalculatorDlg::OnBnClickeddaoshu)
- ON_BN_CLICKED(IDC_sqrt, &CcalculatorDlg::OnBnClickedsqrt)
- ON_BN_CLICKED(IDC_jieceng, &CcalculatorDlg::OnBnClickedjieceng)
- ON_BN_CLICKED(IDC_sin, &CcalculatorDlg::OnBnClickedsin)
- ON_BN_CLICKED(IDC_cos, &CcalculatorDlg::OnBnClickedcos)
- ON_BN_CLICKED(IDC_tan, &CcalculatorDlg::OnBnClickedtan)
- ON_BN_CLICKED(IDC_ln, &CcalculatorDlg::OnBnClickedln)
- ON_BN_CLICKED(IDC_log, &CcalculatorDlg::OnBnClickedlog)
- ON_BN_CLICKED(IDC_mr, &CcalculatorDlg::OnBnClickedmr)
- ON_BN_CLICKED(IDC_ms, &CcalculatorDlg::OnBnClickedms)
- ON_BN_CLICKED(IDC_opposite, &CcalculatorDlg::OnBnClickedopposite)
- ON_BN_CLICKED(IDC_x2, &CcalculatorDlg::OnBnClickedx2)
- ON_BN_CLICKED(IDC_x3, &CcalculatorDlg::OnBnClickedx3)
- ON_BN_CLICKED(IDC_xy, &CcalculatorDlg::OnBnClickedxy)
- ON_BN_CLICKED(IDC_ce, &CcalculatorDlg::OnBnClickedce)
- ON_BN_CLICKED(IDC_madd, &CcalculatorDlg::OnBnClickedmadd)
- END_MESSAGE_MAP()
- // CcalculatorDlg 消息处理程序
- bool CcalculatorDlg::hasEqual = false;
- BOOL CcalculatorDlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
- // 将“关于...”菜单项添加到系统菜单中。
- // IDM_ABOUTBOX 必须在系统命令范围内。
- ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
- ASSERT(IDM_ABOUTBOX < 0xF000);
- CMenu* pSysMenu = GetSystemMenu(FALSE);
- if (pSysMenu != NULL)
- {
- CString strAboutMenu;
- strAboutMenu.LoadString(IDS_ABOUTBOX);
- if (!strAboutMenu.IsEmpty())
- {
- pSysMenu->AppendMenu(MF_SEPARATOR);
- pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
- }
- }
- // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
- // 执行此操作
- SetIcon(m_hIcon, TRUE); // 设置大图标
- SetIcon(m_hIcon, FALSE); // 设置小图标
- // TODO: 在此添加额外的初始化代码
- m_show='0';
- m_jisuanshi="";
- UpdateData(false);
- return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
- }
- void CcalculatorDlg::OnSysCommand(UINT nID, LPARAM lParam)
- {
- if ((nID & 0xFFF0) == IDM_ABOUTBOX)
- {
- CAboutDlg dlgAbout;
- dlgAbout.DoModal();
- }
- else
- {
- CDialog::OnSysCommand(nID, lParam);
- }
- }
- // 如果向对话框添加最小化按钮,则需要下面的代码
- // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
- // 这将由框架自动完成。
- void CcalculatorDlg::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);
- }
- else
- {
- CDialog::OnPaint();
- }
- }
- //当用户拖动最小化窗口时系统调用此函数取得光标
- //显示。
- HCURSOR CcalculatorDlg::OnQueryDragIcon()
- {
- return static_cast<HCURSOR>(m_hIcon);
- }
- void CcalculatorDlg::OnBnClickednum9()
- {
- // TODO: 在此添加控件通知处理程序代码
- if(hasEqual)
- {
- m_show = '0';
- m_jisuanshi="";
- hasEqual = false;
- }
- if(m_show!='0')
- {
- m_show+='9';
- if(!m_jisuanshi2.IsEmpty())
- m_jisuanshi= m_jisuanshi2.Pop()+'9';
- else
- m_jisuanshi +='9';
- }
- else
- {
- m_show='9';
- if(!m_jisuanshi2.IsEmpty())
- m_jisuanshi= m_jisuanshi2.Pop()+'9';
- else
- m_jisuanshi +='9';
- }
- //使控件能够接受到用户输入的值
- UpdateData(false);
- }
- void CcalculatorDlg::OnBnClickednum8()
- {
- // TODO: 在此添加控件通知处理程序代码
- if(hasEqual)
- {
- m_show = '0';
- m_jisuanshi="";
- hasEqual = false;
- }
- if(m_show!='0')
- {
- m_show+='8';
- if(!m_jisuanshi2.IsEmpty())
- m_jisuanshi= m_jisuanshi2.Pop()+'8';
- else
- m_jisuanshi +='8';
- }
- else
- {
- m_show='8';
- if(!m_jisuanshi2.IsEmpty())
- m_jisuanshi= m_jisuanshi2.Pop()+'8';
- else
- m_jisuanshi +='8';
- }
- //使控件能够接受到用户输入的值
- UpdateData(false);
- }
- void CcalculatorDlg::OnBnClickednum7()
- {
- // TODO: 在此添加控件通知处理程序代码
- if(hasEqual)
- {
- m_show = '0';
- m_jisuanshi="";
- hasEqual = false;
- }
- if(m_show!='0')
- {
- m_show+='7';
- if(!m_jisuanshi2.IsEmpty())
- m_jisuanshi= m_jisuanshi2.Pop()+'7';
- else
- m_jisuanshi +='7';
- }
- else
- {
- m_show='7';
- if(!m_jisuanshi2.IsEmpty())
- m_jisuanshi= m_jisuanshi2.Pop()+'7';
- else
- m_jisuanshi +='7';
- }
- //使控件能够接受到用户输入的值
- UpdateData(false);
- }
- void CcalculatorDlg::OnBnClickednum6()
- {
- // TODO: 在此添加控件通知处理程序代码
- if(hasEqual)
- {
- m_show = '0';
- m_jisuanshi="";
- hasEqual = false;
- }
- if(m_show!='0')
- {
- m_show+='6';
- if(!m_jisuanshi2.IsEmpty())
- m_jisuanshi= m_jisuanshi2.Pop()+'6';
- else
- m_jisuanshi +='6';
- }
- else
- {
- m_show='6';
- if(!m_jisuanshi2.IsEmpty())
- m_jisuanshi= m_jisuanshi2.Pop()+'6';
- else
- m_jisuanshi +='6';
- }
- //使控件能够接受到用户输入的值
- UpdateData(false);
- }
- void CcalculatorDlg::OnBnClickednum5()
- {
- // TODO: 在此添加控件通知处理程序代码
- if(hasEqual)
- {
- m_show = '0';
- m_jisuanshi="";
- hasEqual = false;
- }
- if(m_show!='0')
- {
- m_show+='5';
- if(!m_jisuanshi2.IsEmpty())
- m_jisuanshi= m_jisuanshi2.Pop()+'5';
- else
- m_jisuanshi +='5';
- }
- else
- {
- m_show='5';
- if(!m_jisuanshi2.IsEmpty())
- m_jisuanshi= m_jisuanshi2.Pop()+'5';
- else
- m_jisuanshi +='5';
- }
- //使控件能够接受到用户输入的值
- UpdateData(false);
- }
- void CcalculatorDlg::OnBnClickednum4()
- {
- // TODO: 在此添加控件通知处理程序代码
- if(hasEqual)
- {
- m_show = '0';
- m_jisuanshi="";
- hasEqual = false;
- }
- if(m_show!='0')
- {
- m_show+='4';
- if(!m_jisuanshi2.IsEmpty())
- m_jisuanshi= m_jisuanshi2.Pop()+'4';
- else
- m_jisuanshi +='4';
- }
- else
- {
- m_show='4';
- if(!m_jisuanshi2.IsEmpty())
- m_jisuanshi= m_jisuanshi2.Pop()+'4';
- else
- m_jisuanshi +='4';
- }
- //使控件能够接受到用户输入的值
- UpdateData(false);
- }
- void CcalculatorDlg::OnBnClickednum3()
- {
- // TODO: 在此添加控件通知处理程序代码
- if(hasEqual)
- {
- m_show = '0';
- m_jisuanshi="";
- hasEqual = false;
- }
- if(m_show!='0')
- {
- m_show+='3';
- if(!m_jisuanshi2.IsEmpty())
- m_jisuanshi= m_jisuanshi2.Pop()+'3';
- else
- m_jisuanshi +='3';
- }
- else
- {
- m_show='3';
- if(!m_jisuanshi2.IsEmpty())
- m_jisuanshi= m_jisuanshi2.Pop()+'3';
- else
- m_jisuanshi +='3';
- }
- //使控件能够接受到用户输入的值
- UpdateData(false);
- }
- void CcalculatorDlg::OnBnClickednum2()
- {
- // TODO: 在此添加控件通知处理程序代码
- if(hasEqual)
- {
- m_show = '0';
- m_jisuanshi="";
- hasEqual = false;
- }
- if(m_show!='0')
- {
- m_show+='2';
- if(!m_jisuanshi2.IsEmpty())
- m_jisuanshi= m_jisuanshi2.Pop()+'2';
- else
- m_jisuanshi +='2';
- }
- else
- {
- m_show='2';
- if(!m_jisuanshi2.IsEmpty())
- m_jisuanshi= m_jisuanshi2.Pop()+'2';
- else
- m_jisuanshi +='2';
- }
- //使控件能够接受到用户输入的值
- UpdateData(false);
- }
- void CcalculatorDlg::OnBnClickednum1()
- {
- // TODO: 在此添加控件通知处理程序代码
- if(hasEqual)
- {
- m_show = '0';
- m_jisuanshi="";
- hasEqual = false;
- }
- if(m_show!='0')
- {
- m_show+='1';
- if(!m_jisuanshi2.IsEmpty())
- m_jisuanshi= m_jisuanshi2.Pop()+'1';
- else
- m_jisuanshi +='1';
- }
- else
- {
- m_show='1';
- if(!m_jisuanshi2.IsEmpty())
- m_jisuanshi= m_jisuanshi2.Pop()+'1';
- else
- m_jisuanshi +='1';
- }
- //使控件能够接受到用户输入的值
- UpdateData(false);
- }
- void CcalculatorDlg::OnBnClickednum0()
- {
- // TODO: 在此添加控件通知处理程序代码
- if(hasEqual)
- {
- m_show = '0';
- m_jisuanshi="";
- hasEqual = false;
- }
- if(m_show!='0')
- {
- m_show+='0';
- if(!m_jisuanshi2.IsEmpty())
- m_jisuanshi= m_jisuanshi2.Pop()+'0';
- else
- m_jisuanshi +='0';
- }
- else
- {
- m_show='0';
- if(!m_jisuanshi2.IsEmpty())
- m_jisuanshi= m_jisuanshi2.Pop()+'0';
- else
- m_jisuanshi +='0';
- }
- //使控件能够接受到用户输入的值
- UpdateData(false);
- }
- //清除这一次计算C
- void CcalculatorDlg::OnBnClickedbegin2()
- {
- // TODO: 在此添加控件通知处理程序代码
- m_show='0';
- m_jisuanshi="";
- //使控件能够接受到用户输入的值
- UpdateData(false);
- }
- //加法运算符
- void CcalculatorDlg::OnBnClickedadd()
- {
- // TODO: 在此添加控件通知处理程序代码
- op=1; //设定加法运算符为1
- num1=m_show; //将当前的值给num1来保存
- m_jisuanshi+=" + ";
- m_jisuanshi2.Push(m_jisuanshi);
- UpdateData(false);
- m_show='0'; //将m_show的值 设为0 接收将要输入的值
- }
- //计算+,-,*,/,%,x^y
- void CcalculatorDlg::OnBnClickedresult()
- {
- // TODO: 在此添加控件通知处理程序代码
- m_jisuanshi2.Push(m_jisuanshi);
- num2=m_show; //将接下来输入的值 存储到num2里面
- double temp=0; //临时变量 用来保存结果
- double temp1; //临时数值1
- double temp2; //临时数值2
- int tp = 0;
- int xy =1;
- temp1 = _tstof(num1);
- temp2 = _tstof(num2);
- switch(op)
- {
- case 1:
- temp=temp1+temp2; //将这两个值 转换后相加
- break;
- case 2:
- temp=temp1-temp2; //将这两个值 相减
- break;
- case 3:
- temp=temp1*temp2; //将这两个值相乘
- break;
- case 4:
- temp=temp1/temp2; //将这两个值想除
- break;
- case 5:
- tp= int(temp1)%int(temp2);//求余
- temp = (double)tp;
- break;
- case 6:
- for(int i=0;i<int(temp2);i++)
- {
- xy = xy*int(temp1);
- }
- temp = double(xy);
- break;
- }
- CString strTemp;
- strTemp.Format(_T("%f"),temp);
- int count = Count(strTemp);
- switch(count)
- {
- case 0:
- m_show.Format(_T("%.0f"),temp); //将浮点类型的值 转换成字符串s
- break;
- case 1:
- m_show.Format(_T("%.1f"),temp); //将浮点类型的值 转换成字符串s
- break;
- case 2:
- m_show.Format(_T("%.2f"),temp); //将浮点类型的值 转换成字符串s
- break;
- case 3:
- m_show.Format(_T("%.3f"),temp); //将浮点类型的值 转换成字符串s
- break;
- case 4:
- m_show.Format(_T("%.4f"),temp); //将浮点类型的值 转换成字符串s
- break;
- case 5:
- m_show.Format(_T("%.5f"),temp); //将浮点类型的值 转换成字符串s
- break;
- case 6:
- m_show.Format(_T("%.6f"),temp); //将浮点类型的值 转换成字符串s
- break;
- }
- m_jisuanshi = m_jisuanshi2.Pop() + ' '+'='+' ' + m_show;
- hasEqual = true;
- UpdateData(false); //更新数据
- }
- //退格键
- void CcalculatorDlg::OnBnClickedbackspace()
- {
- // TODO: 在此添加控件通知处理程序代码
- m_show=m_show.Left(m_show.GetLength()-1); //提取左边的数值并将其长度减1
- if(m_show=="") //如果退格后的值为空
- {
- m_show='0';//将将其赋值为0
- }
- UpdateData(false);
- }
- //减法函数
- void CcalculatorDlg::OnBnClickedsub()
- {
- // TODO: 在此添加控件通知处理程序代码
- op=2; //设定减法运算符为2
- num1=m_show; //将当前的值给num1来保存
- m_jisuanshi+=" - ";
- UpdateData(false);
- m_show='0'; //将m_show的值 设为0 接收将要输入的值
- }
- //乘法函数
- void CcalculatorDlg::OnBnClickedmul()
- {
- // TODO: 在此添加控件通知处理程序代码
- op=3; //设定乘法运算符为3
- num1=m_show; //将当前的值给num1来保存
- m_jisuanshi+=" * ";
- UpdateData(false);
- m_show='0'; //将m_show的值 设为0 接收将要输入的值
- }
- //除法函数
- void CcalculatorDlg::OnBnClickeddiv()
- {
- // TODO: 在此添加控件通知处理程序代码
- op=4; //设定除法运算符为4
- num1=m_show; //将当前的值给num1来保存
- m_jisuanshi+=" / ";
- UpdateData(false);
- m_show='0'; //将m_show的值 设为0 接收将要输入的值
- }
- //小数点函数
- void CcalculatorDlg::OnBnClickedpoint()
- {
- // TODO: 在此添加控件通知处理程序代码
- m_show+='.';
- m_jisuanshi+='.';
- UpdateData(false);
- }
- //计算小数点后位数
- int CcalculatorDlg::Count(const TCHAR * str)
- {
- const TCHAR *pt = str;
- int num =0;
- int result=0;
- while(*pt!='.')
- {
- pt++;
- }
- while(num<6)
- {
- pt++;
- num ++;
- }
- num=0;
- while(*pt=='0'&&num<6)
- {
- pt --;
- num++;
- }
- if(num == 0)
- return 6;
- else
- return (6-num);
- }
- void CcalculatorDlg::OnBnClickedpi()
- {
- // TODO: 在此添加控件通知处理程序代码
- m_show = "3.141593";
- m_jisuanshi +="3.141593";
- UpdateData(false);
- }
- //求模 op = 5
- void CcalculatorDlg::OnBnClickedmode()
- {
- // TODO: 在此添加控件通知处理程序代码
- op =5;
- num1 = m_show;
- m_jisuanshi+=" % ";
- UpdateData(false);
- m_show = '0';
- }
- //求倒数
- void CcalculatorDlg::OnBnClickeddaoshu()
- {
- // TODO: 在此添加控件通知处理程序代码
- m_jisuanshi= '/'+m_jisuanshi;
- m_jisuanshi='1'+m_jisuanshi;
- UpdateData(false);
- SanjiaoFunc(7);
- }
- //求开方
- void CcalculatorDlg::OnBnClickedsqrt()
- {
- // TODO: 在此添加控件通知处理程序代码
- m_jisuanshi= m_jisuanshi+')';
- m_jisuanshi='('+m_jisuanshi;
- m_jisuanshi='t'+m_jisuanshi;
- m_jisuanshi='r'+m_jisuanshi;
- m_jisuanshi='q'+m_jisuanshi;
- m_jisuanshi='s'+m_jisuanshi;
- UpdateData(false);
- SanjiaoFunc(6);
- }
- //求n阶层
- void CcalculatorDlg::OnBnClickedjieceng()
- {
- // TODO: 在此添加控件通知处理程序代码
- m_jisuanshi+=" !";
- UpdateData(false);
- SanjiaoFunc(8);
- }
- //求sin函数
- void CcalculatorDlg::OnBnClickedsin()
- {
- // TODO: 在此添加控件通知处理程序代码
- m_jisuanshi= m_jisuanshi+')';
- m_jisuanshi='('+m_jisuanshi;
- m_jisuanshi='n'+m_jisuanshi;
- m_jisuanshi='i'+m_jisuanshi;
- m_jisuanshi='s'+m_jisuanshi;
- UpdateData(false);
- SanjiaoFunc(1);
- }
- //求cos函数
- void CcalculatorDlg::OnBnClickedcos()
- {
- // TODO: 在此添加控件通知处理程序代码
- m_jisuanshi= m_jisuanshi+')';
- m_jisuanshi='('+m_jisuanshi;
- m_jisuanshi='s'+m_jisuanshi;
- m_jisuanshi='o'+m_jisuanshi;
- m_jisuanshi='c'+m_jisuanshi;
- UpdateData(false);
- SanjiaoFunc(2);
- }
- //求tan函数
- void CcalculatorDlg::OnBnClickedtan()
- {
- // TODO: 在此添加控件通知处理程序代码
- m_jisuanshi= m_jisuanshi+')';
- m_jisuanshi='('+m_jisuanshi;
- m_jisuanshi='n'+m_jisuanshi;
- m_jisuanshi='a'+m_jisuanshi;
- m_jisuanshi='t'+m_jisuanshi;
- UpdateData(false);
- SanjiaoFunc(3);
- }
- //求ln函数
- void CcalculatorDlg::OnBnClickedln()
- {
- // TODO: 在此添加控件通知处理程序代码
- m_jisuanshi= m_jisuanshi+')';
- m_jisuanshi='('+m_jisuanshi;
- m_jisuanshi='n'+m_jisuanshi;
- m_jisuanshi='l'+m_jisuanshi;
- UpdateData(false);
- SanjiaoFunc(4);
- }
- //求log函数
- void CcalculatorDlg::OnBnClickedlog()
- {
- // TODO: 在此添加控件通知处理程序代码
- m_jisuanshi= m_jisuanshi+')';
- m_jisuanshi='('+m_jisuanshi;
- m_jisuanshi='g'+m_jisuanshi;
- m_jisuanshi='o'+m_jisuanshi;
- m_jisuanshi='l'+m_jisuanshi;
- UpdateData(false);
- SanjiaoFunc(5);
- }
- //递归函数
- int CcalculatorDlg::Jieceng(int n)
- {
- if(n==1)
- return 1;
- else
- return n*Jieceng(n-1);
- }
- //三角函数等计算,1代表sin,2代表cos,3代表tan,4代表lg,5代表log,
- //6代表sqrt,7代表1/x,8代表n!,9代表+/-,10代表x^2,11代表x^3,
- void CcalculatorDlg::SanjiaoFunc(int type)
- {
- num2=m_show; //将接下来输入的值 存储到num2里面
- double temp=0; //临时变量 用来保存结果
- double temp2; //临时数值2
- temp2 = _tstof(num2);
- int n=0,sum=0;
- switch(type)
- {
- case 1:
- temp = sin(temp2/180*3.141593);
- break;
- case 2:
- temp = cos(temp2/180*3.141593);
- break;
- case 3:
- temp = tan(temp2/180*3.141593);
- break;
- case 4:
- temp = log(temp2);
- break;
- case 5:
- temp = log10(temp2);
- break;
- case 6:
- temp = sqrt(temp2);
- break;
- case 7:
- temp = 1/temp2;
- break;
- case 8:
- n = int(temp2);
- sum = Jieceng(n);
- temp = double(sum);
- break;
- case 9:
- temp = 0 - temp2;
- break;
- case 10:
- temp = temp2*temp2;
- break;
- case 11:
- temp = temp2*temp2*temp2;
- break;
- }
- CString strTemp;
- strTemp.Format(_T("%f"),temp);
- int count = Count(strTemp);
- switch(count)
- {
- case 0:
- m_show.Format(_T("%.0f"),temp); //将浮点类型的值 转换成字符串s
- break;
- case 1:
- m_show.Format(_T("%.1f"),temp); //将浮点类型的值 转换成字符串s
- break;
- case 2:
- m_show.Format(_T("%.2f"),temp); //将浮点类型的值 转换成字符串s
- break;
- case 3:
- m_show.Format(_T("%.3f"),temp); //将浮点类型的值 转换成字符串s
- break;
- case 4:
- m_show.Format(_T("%.4f"),temp); //将浮点类型的值 转换成字符串s
- break;
- case 5:
- m_show.Format(_T("%.5f"),temp); //将浮点类型的值 转换成字符串s
- break;
- case 6:
- m_show.Format(_T("%.6f"),temp); //将浮点类型的值 转换成字符串s
- break;
- }
- hasEqual = true;
- //处理取相反数的情况
- if(type==9)
- {
- if(temp<0)
- m_jisuanshi='-'+m_jisuanshi;
- else
- m_jisuanshi=m_jisuanshi.Right(m_jisuanshi.GetLength()-1);
- }
- //其他的
- else
- m_jisuanshi=m_jisuanshi+' ' + '='+ ' '+m_show;
- UpdateData(false); //更新数据
- }
- //MR操作
- void CcalculatorDlg::OnBnClickedmr()
- {
- // TODO: 在此添加控件通知处理程序代码
- double temp = save.Pop();
- CString strTemp;
- strTemp.Format(_T("%f"),temp);
- int count = Count(strTemp);
- switch(count)
- {
- case 0:
- m_show.Format(_T("%.0f"),temp); //将浮点类型的值 转换成字符串s
- break;
- case 1:
- m_show.Format(_T("%.1f"),temp); //将浮点类型的值 转换成字符串s
- break;
- case 2:
- m_show.Format(_T("%.2f"),temp); //将浮点类型的值 转换成字符串s
- break;
- case 3:
- m_show.Format(_T("%.3f"),temp); //将浮点类型的值 转换成字符串s
- break;
- case 4:
- m_show.Format(_T("%.4f"),temp); //将浮点类型的值 转换成字符串s
- break;
- case 5:
- m_show.Format(_T("%.5f"),temp); //将浮点类型的值 转换成字符串s
- break;
- case 6:
- m_show.Format(_T("%.6f"),temp); //将浮点类型的值 转换成字符串s
- break;
- }
- m_jisuanshi=m_jisuanshi+m_show;
- UpdateData(false);
- }
- //MS操作
- void CcalculatorDlg::OnBnClickedms()
- {
- // TODO: 在此添加控件通知处理程序代码
- sv = m_show;
- double top = _tstof(sv);
- save.Push(top);
- }
- //M+操作
- void CcalculatorDlg::OnBnClickedmadd()
- {
- // TODO: 在此添加控件通知处理程序代码
- double destroy = save.Pop();
- sv = m_show;
- double top = _tstof(sv);
- save.Push(destroy+top);
- }
- //求相反数
- void CcalculatorDlg::OnBnClickedopposite()
- {
- // TODO: 在此添加控件通知处理程序代码
- SanjiaoFunc(9);
- }
- //求平方
- void CcalculatorDlg::OnBnClickedx2()
- {
- // TODO: 在此添加控件通知处理程序代码
- m_jisuanshi+="^2";
- UpdateData(false);
- SanjiaoFunc(10);
- }
- //求立方
- void CcalculatorDlg::OnBnClickedx3()
- {
- // TODO: 在此添加控件通知处理程序代码
- m_jisuanshi+="^3";
- UpdateData(false);
- SanjiaoFunc(11);
- }
- //求X^Y
- void CcalculatorDlg::OnBnClickedxy()
- {
- // TODO: 在此添加控件通知处理程序代码
- op=6; //设定减法运算符为2
- num1=m_show; //将当前的值给num1来保存
- m_jisuanshi+='^';
- UpdateData(false);
- m_show='0'; //将m_show的值 设为0 接收将要输入的值
- }
- //全部清除CE
- void CcalculatorDlg::OnBnClickedce()
- {
- // TODO: 在此添加控件通知处理程序代码
- save.Clear();
- m_jisuanshi2.Clear();
- m_show='0';
- m_jisuanshi="";
- //使控件能够接受到用户输入的值
- UpdateData(false);
- }