calculatorDlg.cpp
上传用户:luojiayill
上传日期:2022-08-09
资源大小:18342k
文件大小:20k
源码类别:

其他小程序

开发平台:

Visual C++

  1. // calculatorDlg.cpp : 实现文件
  2. #include "stdafx.h"
  3. #include "calculator.h"
  4. #include "calculatorDlg.h"
  5. #include <cmath>
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #endif
  9. static Stack<double> save;
  10. static Stack<CString> m_jisuanshi2;//用来存储计算式的临时值
  11. // 用于应用程序“关于”菜单项的 CAboutDlg 对话框
  12. class CAboutDlg : public CDialog
  13. {
  14. public:
  15. CAboutDlg();
  16. // 对话框数据
  17. enum { IDD = IDD_ABOUTBOX };
  18. protected:
  19. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
  20. // 实现
  21. protected:
  22. DECLARE_MESSAGE_MAP()
  23. };
  24. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  25. {
  26. }
  27. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  28. {
  29. CDialog::DoDataExchange(pDX);
  30. }
  31. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  32. END_MESSAGE_MAP()
  33. // CcalculatorDlg 对话框
  34. CcalculatorDlg::CcalculatorDlg(CWnd* pParent /*=NULL*/)
  35. : CDialog(CcalculatorDlg::IDD, pParent)
  36. , m_show(_T("")),m_jisuanshi(_T(""))
  37. {
  38. m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON1); //左上角图标
  39. }
  40. void CcalculatorDlg::DoDataExchange(CDataExchange* pDX)
  41. {
  42. CDialog::DoDataExchange(pDX);
  43. DDX_Text(pDX, IDC_show, m_show);
  44. DDX_Text(pDX,IDC_jisuanshi,m_jisuanshi);
  45. }
  46. BEGIN_MESSAGE_MAP(CcalculatorDlg, CDialog)
  47. ON_WM_SYSCOMMAND()
  48. ON_WM_PAINT()
  49. ON_WM_QUERYDRAGICON()
  50. //}}AFX_MSG_MAP
  51. ON_BN_CLICKED(IDC_num9, &CcalculatorDlg::OnBnClickednum9)
  52. ON_BN_CLICKED(IDC_num8, &CcalculatorDlg::OnBnClickednum8)
  53. ON_BN_CLICKED(IDC_num7, &CcalculatorDlg::OnBnClickednum7)
  54. ON_BN_CLICKED(IDC_num6, &CcalculatorDlg::OnBnClickednum6)
  55. ON_BN_CLICKED(IDC_num5, &CcalculatorDlg::OnBnClickednum5)
  56. ON_BN_CLICKED(IDC_num4, &CcalculatorDlg::OnBnClickednum4)
  57. ON_BN_CLICKED(IDC_num3, &CcalculatorDlg::OnBnClickednum3)
  58. ON_BN_CLICKED(IDC_num2, &CcalculatorDlg::OnBnClickednum2)
  59. ON_BN_CLICKED(IDC_num1, &CcalculatorDlg::OnBnClickednum1)
  60. ON_BN_CLICKED(IDC_num0, &CcalculatorDlg::OnBnClickednum0)
  61. ON_BN_CLICKED(IDC_begin2, &CcalculatorDlg::OnBnClickedbegin2)
  62. ON_BN_CLICKED(IDC_add, &CcalculatorDlg::OnBnClickedadd)
  63. ON_BN_CLICKED(IDC_result, &CcalculatorDlg::OnBnClickedresult)
  64. ON_BN_CLICKED(IDC_backspace, &CcalculatorDlg::OnBnClickedbackspace)
  65. ON_BN_CLICKED(IDC_sub, &CcalculatorDlg::OnBnClickedsub)
  66. ON_BN_CLICKED(IDC_mul, &CcalculatorDlg::OnBnClickedmul)
  67. ON_BN_CLICKED(IDC_div, &CcalculatorDlg::OnBnClickeddiv)
  68. ON_BN_CLICKED(IDC_point, &CcalculatorDlg::OnBnClickedpoint)
  69. ON_BN_CLICKED(IDC_pi, &CcalculatorDlg::OnBnClickedpi)
  70. ON_BN_CLICKED(IDC_mode, &CcalculatorDlg::OnBnClickedmode)
  71. ON_BN_CLICKED(IDC_daoshu, &CcalculatorDlg::OnBnClickeddaoshu)
  72. ON_BN_CLICKED(IDC_sqrt, &CcalculatorDlg::OnBnClickedsqrt)
  73. ON_BN_CLICKED(IDC_jieceng, &CcalculatorDlg::OnBnClickedjieceng)
  74. ON_BN_CLICKED(IDC_sin, &CcalculatorDlg::OnBnClickedsin)
  75. ON_BN_CLICKED(IDC_cos, &CcalculatorDlg::OnBnClickedcos)
  76. ON_BN_CLICKED(IDC_tan, &CcalculatorDlg::OnBnClickedtan)
  77. ON_BN_CLICKED(IDC_ln, &CcalculatorDlg::OnBnClickedln)
  78. ON_BN_CLICKED(IDC_log, &CcalculatorDlg::OnBnClickedlog)
  79. ON_BN_CLICKED(IDC_mr, &CcalculatorDlg::OnBnClickedmr)
  80. ON_BN_CLICKED(IDC_ms, &CcalculatorDlg::OnBnClickedms)
  81. ON_BN_CLICKED(IDC_opposite, &CcalculatorDlg::OnBnClickedopposite)
  82. ON_BN_CLICKED(IDC_x2, &CcalculatorDlg::OnBnClickedx2)
  83. ON_BN_CLICKED(IDC_x3, &CcalculatorDlg::OnBnClickedx3)
  84. ON_BN_CLICKED(IDC_xy, &CcalculatorDlg::OnBnClickedxy)
  85. ON_BN_CLICKED(IDC_ce, &CcalculatorDlg::OnBnClickedce)
  86. ON_BN_CLICKED(IDC_madd, &CcalculatorDlg::OnBnClickedmadd)
  87. END_MESSAGE_MAP()
  88. // CcalculatorDlg 消息处理程序
  89. bool CcalculatorDlg::hasEqual = false;
  90. BOOL CcalculatorDlg::OnInitDialog()
  91. {
  92. CDialog::OnInitDialog();
  93. // 将“关于...”菜单项添加到系统菜单中。
  94. // IDM_ABOUTBOX 必须在系统命令范围内。
  95. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  96. ASSERT(IDM_ABOUTBOX < 0xF000);
  97. CMenu* pSysMenu = GetSystemMenu(FALSE);
  98. if (pSysMenu != NULL)
  99. {
  100. CString strAboutMenu;
  101. strAboutMenu.LoadString(IDS_ABOUTBOX);
  102. if (!strAboutMenu.IsEmpty())
  103. {
  104. pSysMenu->AppendMenu(MF_SEPARATOR);
  105. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  106. }
  107. }
  108. // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
  109. //  执行此操作
  110. SetIcon(m_hIcon, TRUE); // 设置大图标
  111. SetIcon(m_hIcon, FALSE); // 设置小图标
  112. // TODO: 在此添加额外的初始化代码
  113. m_show='0';
  114. m_jisuanshi="";
  115. UpdateData(false);
  116. return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
  117. }
  118. void CcalculatorDlg::OnSysCommand(UINT nID, LPARAM lParam)
  119. {
  120. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  121. {
  122. CAboutDlg dlgAbout;
  123. dlgAbout.DoModal();
  124. }
  125. else
  126. {
  127. CDialog::OnSysCommand(nID, lParam);
  128. }
  129. }
  130. // 如果向对话框添加最小化按钮,则需要下面的代码
  131. //  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
  132. //  这将由框架自动完成。
  133. void CcalculatorDlg::OnPaint()
  134. {
  135. if (IsIconic())
  136. {
  137. CPaintDC dc(this); // 用于绘制的设备上下文
  138. SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
  139. // 使图标在工作区矩形中居中
  140. int cxIcon = GetSystemMetrics(SM_CXICON);
  141. int cyIcon = GetSystemMetrics(SM_CYICON);
  142. CRect rect;
  143. GetClientRect(&rect);
  144. int x = (rect.Width() - cxIcon + 1) / 2;
  145. int y = (rect.Height() - cyIcon + 1) / 2;
  146. // 绘制图标
  147. dc.DrawIcon(x, y, m_hIcon);
  148. }
  149. else
  150. {
  151. CDialog::OnPaint();
  152. }
  153. }
  154. //当用户拖动最小化窗口时系统调用此函数取得光标
  155. //显示。
  156. HCURSOR CcalculatorDlg::OnQueryDragIcon()
  157. {
  158. return static_cast<HCURSOR>(m_hIcon);
  159. }
  160. void CcalculatorDlg::OnBnClickednum9()
  161. {
  162. // TODO: 在此添加控件通知处理程序代码
  163. if(hasEqual)
  164. {
  165. m_show = '0';
  166. m_jisuanshi="";
  167. hasEqual = false;
  168. }
  169. if(m_show!='0')
  170. {
  171. m_show+='9';
  172. if(!m_jisuanshi2.IsEmpty())
  173. m_jisuanshi= m_jisuanshi2.Pop()+'9';
  174. else
  175. m_jisuanshi +='9';
  176. }
  177. else
  178. {
  179. m_show='9';
  180. if(!m_jisuanshi2.IsEmpty())
  181. m_jisuanshi= m_jisuanshi2.Pop()+'9';
  182. else
  183. m_jisuanshi +='9';
  184. }
  185. //使控件能够接受到用户输入的值
  186. UpdateData(false);
  187. }
  188. void CcalculatorDlg::OnBnClickednum8()
  189. {
  190. // TODO: 在此添加控件通知处理程序代码
  191. if(hasEqual)
  192. {
  193. m_show = '0';
  194. m_jisuanshi="";
  195. hasEqual = false;
  196. }
  197. if(m_show!='0')
  198. {
  199. m_show+='8';
  200. if(!m_jisuanshi2.IsEmpty())
  201. m_jisuanshi= m_jisuanshi2.Pop()+'8';
  202. else
  203. m_jisuanshi +='8';
  204. }
  205. else
  206. {
  207. m_show='8';
  208. if(!m_jisuanshi2.IsEmpty())
  209. m_jisuanshi= m_jisuanshi2.Pop()+'8';
  210. else
  211. m_jisuanshi +='8';
  212. }
  213. //使控件能够接受到用户输入的值
  214. UpdateData(false);
  215. }
  216. void CcalculatorDlg::OnBnClickednum7()
  217. {
  218. // TODO: 在此添加控件通知处理程序代码
  219. if(hasEqual)
  220. {
  221. m_show = '0';
  222. m_jisuanshi="";
  223. hasEqual = false;
  224. }
  225. if(m_show!='0')
  226. {
  227. m_show+='7';
  228. if(!m_jisuanshi2.IsEmpty())
  229. m_jisuanshi= m_jisuanshi2.Pop()+'7';
  230. else
  231. m_jisuanshi +='7';
  232. }
  233. else
  234. {
  235. m_show='7';
  236. if(!m_jisuanshi2.IsEmpty())
  237. m_jisuanshi= m_jisuanshi2.Pop()+'7';
  238. else
  239. m_jisuanshi +='7';
  240. }
  241. //使控件能够接受到用户输入的值
  242. UpdateData(false);
  243. }
  244. void CcalculatorDlg::OnBnClickednum6()
  245. {
  246. // TODO: 在此添加控件通知处理程序代码
  247. if(hasEqual)
  248. {
  249. m_show = '0';
  250. m_jisuanshi="";
  251. hasEqual = false;
  252. }
  253. if(m_show!='0')
  254. {
  255. m_show+='6';
  256. if(!m_jisuanshi2.IsEmpty())
  257. m_jisuanshi= m_jisuanshi2.Pop()+'6';
  258. else
  259. m_jisuanshi +='6';
  260. }
  261. else
  262. {
  263. m_show='6';
  264. if(!m_jisuanshi2.IsEmpty())
  265. m_jisuanshi= m_jisuanshi2.Pop()+'6';
  266. else
  267. m_jisuanshi +='6';
  268. }
  269. //使控件能够接受到用户输入的值
  270. UpdateData(false);
  271. }
  272. void CcalculatorDlg::OnBnClickednum5()
  273. {
  274. // TODO: 在此添加控件通知处理程序代码
  275. if(hasEqual)
  276. {
  277. m_show = '0';
  278. m_jisuanshi="";
  279. hasEqual = false;
  280. }
  281. if(m_show!='0')
  282. {
  283. m_show+='5';
  284. if(!m_jisuanshi2.IsEmpty())
  285. m_jisuanshi= m_jisuanshi2.Pop()+'5';
  286. else
  287. m_jisuanshi +='5';
  288. }
  289. else
  290. {
  291. m_show='5';
  292. if(!m_jisuanshi2.IsEmpty())
  293. m_jisuanshi= m_jisuanshi2.Pop()+'5';
  294. else
  295. m_jisuanshi +='5';
  296. }
  297. //使控件能够接受到用户输入的值
  298. UpdateData(false);
  299. }
  300. void CcalculatorDlg::OnBnClickednum4()
  301. {
  302. // TODO: 在此添加控件通知处理程序代码
  303. if(hasEqual)
  304. {
  305. m_show = '0';
  306. m_jisuanshi="";
  307. hasEqual = false;
  308. }
  309. if(m_show!='0')
  310. {
  311. m_show+='4';
  312. if(!m_jisuanshi2.IsEmpty())
  313. m_jisuanshi= m_jisuanshi2.Pop()+'4';
  314. else
  315. m_jisuanshi +='4';
  316. }
  317. else
  318. {
  319. m_show='4';
  320. if(!m_jisuanshi2.IsEmpty())
  321. m_jisuanshi= m_jisuanshi2.Pop()+'4';
  322. else
  323. m_jisuanshi +='4';
  324. }
  325. //使控件能够接受到用户输入的值
  326. UpdateData(false);
  327. }
  328. void CcalculatorDlg::OnBnClickednum3()
  329. {
  330. // TODO: 在此添加控件通知处理程序代码
  331. if(hasEqual)
  332. {
  333. m_show = '0';
  334. m_jisuanshi="";
  335. hasEqual = false;
  336. }
  337. if(m_show!='0')
  338. {
  339. m_show+='3';
  340. if(!m_jisuanshi2.IsEmpty())
  341. m_jisuanshi= m_jisuanshi2.Pop()+'3';
  342. else
  343. m_jisuanshi +='3';
  344. }
  345. else
  346. {
  347. m_show='3';
  348. if(!m_jisuanshi2.IsEmpty())
  349. m_jisuanshi= m_jisuanshi2.Pop()+'3';
  350. else
  351. m_jisuanshi +='3';
  352. }
  353. //使控件能够接受到用户输入的值
  354. UpdateData(false);
  355. }
  356. void CcalculatorDlg::OnBnClickednum2()
  357. {
  358. // TODO: 在此添加控件通知处理程序代码
  359. if(hasEqual)
  360. {
  361. m_show = '0';
  362. m_jisuanshi="";
  363. hasEqual = false;
  364. }
  365. if(m_show!='0')
  366. {
  367. m_show+='2';
  368. if(!m_jisuanshi2.IsEmpty())
  369. m_jisuanshi= m_jisuanshi2.Pop()+'2';
  370. else
  371. m_jisuanshi +='2';
  372. }
  373. else
  374. {
  375. m_show='2';
  376. if(!m_jisuanshi2.IsEmpty())
  377. m_jisuanshi= m_jisuanshi2.Pop()+'2';
  378. else
  379. m_jisuanshi +='2';
  380. }
  381. //使控件能够接受到用户输入的值
  382. UpdateData(false);
  383. }
  384. void CcalculatorDlg::OnBnClickednum1()
  385. {
  386. // TODO: 在此添加控件通知处理程序代码
  387. if(hasEqual)
  388. {
  389. m_show = '0';
  390. m_jisuanshi="";
  391. hasEqual = false;
  392. }
  393. if(m_show!='0')
  394. {
  395. m_show+='1';
  396. if(!m_jisuanshi2.IsEmpty())
  397. m_jisuanshi= m_jisuanshi2.Pop()+'1';
  398. else
  399. m_jisuanshi +='1';
  400. }
  401. else
  402. {
  403. m_show='1';
  404. if(!m_jisuanshi2.IsEmpty())
  405. m_jisuanshi= m_jisuanshi2.Pop()+'1';
  406. else
  407. m_jisuanshi +='1';
  408. }
  409. //使控件能够接受到用户输入的值
  410. UpdateData(false);
  411. }
  412. void CcalculatorDlg::OnBnClickednum0()
  413. {
  414. // TODO: 在此添加控件通知处理程序代码
  415. if(hasEqual)
  416. {
  417. m_show = '0';
  418. m_jisuanshi="";
  419. hasEqual = false;
  420. }
  421. if(m_show!='0')
  422. {
  423. m_show+='0';
  424. if(!m_jisuanshi2.IsEmpty())
  425. m_jisuanshi= m_jisuanshi2.Pop()+'0';
  426. else
  427. m_jisuanshi +='0';
  428. }
  429. else
  430. {
  431. m_show='0';
  432. if(!m_jisuanshi2.IsEmpty())
  433. m_jisuanshi= m_jisuanshi2.Pop()+'0';
  434. else
  435. m_jisuanshi +='0';
  436. }
  437. //使控件能够接受到用户输入的值
  438. UpdateData(false);
  439. }
  440. //清除这一次计算C
  441. void CcalculatorDlg::OnBnClickedbegin2()
  442. {
  443. // TODO: 在此添加控件通知处理程序代码
  444. m_show='0';
  445. m_jisuanshi="";
  446. //使控件能够接受到用户输入的值
  447. UpdateData(false);
  448. }
  449. //加法运算符
  450. void CcalculatorDlg::OnBnClickedadd()
  451. {
  452. // TODO: 在此添加控件通知处理程序代码
  453. op=1;  //设定加法运算符为1 
  454. num1=m_show; //将当前的值给num1来保存
  455. m_jisuanshi+=" + ";
  456. m_jisuanshi2.Push(m_jisuanshi);
  457. UpdateData(false);
  458. m_show='0';  //将m_show的值 设为0 接收将要输入的值
  459. }
  460. //计算+,-,*,/,%,x^y
  461. void CcalculatorDlg::OnBnClickedresult()
  462. {
  463. // TODO: 在此添加控件通知处理程序代码
  464. m_jisuanshi2.Push(m_jisuanshi);
  465. num2=m_show; //将接下来输入的值 存储到num2里面
  466. double temp=0; //临时变量 用来保存结果
  467. double temp1; //临时数值1
  468. double temp2; //临时数值2
  469. int tp = 0;
  470. int xy =1;
  471. temp1 = _tstof(num1);
  472. temp2 = _tstof(num2);
  473. switch(op)
  474. {
  475. case 1:
  476. temp=temp1+temp2; //将这两个值 转换后相加
  477. break;
  478. case 2:
  479. temp=temp1-temp2; //将这两个值 相减
  480. break;
  481. case 3:
  482. temp=temp1*temp2; //将这两个值相乘
  483. break;
  484. case 4:
  485. temp=temp1/temp2; //将这两个值想除
  486. break;
  487. case 5:
  488. tp= int(temp1)%int(temp2);//求余
  489. temp = (double)tp;
  490. break;
  491. case 6:
  492. for(int i=0;i<int(temp2);i++)
  493. {
  494. xy = xy*int(temp1);
  495. }
  496. temp = double(xy);
  497. break;
  498. }
  499. CString strTemp;
  500. strTemp.Format(_T("%f"),temp);
  501. int count = Count(strTemp);
  502. switch(count)
  503. {
  504. case 0:
  505. m_show.Format(_T("%.0f"),temp); //将浮点类型的值 转换成字符串s
  506. break;
  507. case 1:
  508. m_show.Format(_T("%.1f"),temp); //将浮点类型的值 转换成字符串s
  509. break;
  510. case 2:
  511. m_show.Format(_T("%.2f"),temp); //将浮点类型的值 转换成字符串s
  512. break;
  513. case 3:
  514. m_show.Format(_T("%.3f"),temp); //将浮点类型的值 转换成字符串s
  515. break;
  516. case 4:
  517. m_show.Format(_T("%.4f"),temp); //将浮点类型的值 转换成字符串s
  518. break;
  519. case 5:
  520. m_show.Format(_T("%.5f"),temp); //将浮点类型的值 转换成字符串s
  521. break;
  522. case 6:
  523. m_show.Format(_T("%.6f"),temp); //将浮点类型的值 转换成字符串s
  524. break;
  525. }
  526. m_jisuanshi = m_jisuanshi2.Pop() + ' '+'='+' ' + m_show;
  527. hasEqual = true;
  528. UpdateData(false); //更新数据
  529. }
  530. //退格键
  531. void CcalculatorDlg::OnBnClickedbackspace()
  532. {
  533. // TODO: 在此添加控件通知处理程序代码
  534. m_show=m_show.Left(m_show.GetLength()-1); //提取左边的数值并将其长度减1
  535. if(m_show=="") //如果退格后的值为空
  536. {
  537. m_show='0';//将将其赋值为0
  538. }
  539. UpdateData(false);
  540. }
  541. //减法函数
  542. void CcalculatorDlg::OnBnClickedsub()
  543. {
  544. // TODO: 在此添加控件通知处理程序代码
  545. op=2;  //设定减法运算符为2 
  546. num1=m_show; //将当前的值给num1来保存
  547. m_jisuanshi+=" - ";
  548. UpdateData(false);
  549. m_show='0';  //将m_show的值 设为0 接收将要输入的值
  550. }
  551. //乘法函数 
  552. void CcalculatorDlg::OnBnClickedmul()
  553. {
  554. // TODO: 在此添加控件通知处理程序代码
  555. op=3;  //设定乘法运算符为3 
  556. num1=m_show; //将当前的值给num1来保存
  557. m_jisuanshi+=" * ";
  558. UpdateData(false);
  559. m_show='0';  //将m_show的值 设为0 接收将要输入的值
  560. }
  561. //除法函数
  562. void CcalculatorDlg::OnBnClickeddiv()
  563. {
  564. // TODO: 在此添加控件通知处理程序代码
  565. op=4;  //设定除法运算符为4 
  566. num1=m_show; //将当前的值给num1来保存
  567. m_jisuanshi+=" / ";
  568. UpdateData(false);
  569. m_show='0';  //将m_show的值 设为0 接收将要输入的值
  570. }
  571. //小数点函数
  572. void CcalculatorDlg::OnBnClickedpoint()
  573. {
  574. // TODO: 在此添加控件通知处理程序代码
  575. m_show+='.';
  576. m_jisuanshi+='.';
  577. UpdateData(false);
  578. }
  579. //计算小数点后位数
  580. int CcalculatorDlg::Count(const TCHAR * str)
  581. {
  582. const TCHAR *pt = str;
  583. int num =0;
  584. int result=0;
  585. while(*pt!='.')
  586. {
  587. pt++;
  588. }
  589. while(num<6)
  590. {
  591. pt++;
  592. num ++;
  593. }
  594. num=0;
  595. while(*pt=='0'&&num<6)
  596. {
  597. pt --;
  598. num++;
  599. }
  600. if(num == 0)
  601. return 6;
  602. else
  603. return (6-num);
  604. }
  605. void CcalculatorDlg::OnBnClickedpi()
  606. {
  607. // TODO: 在此添加控件通知处理程序代码
  608. m_show = "3.141593";
  609. m_jisuanshi +="3.141593"; 
  610. UpdateData(false);
  611. }
  612. //求模   op = 5
  613. void CcalculatorDlg::OnBnClickedmode()
  614. {
  615. // TODO: 在此添加控件通知处理程序代码
  616. op =5;
  617. num1 = m_show;
  618. m_jisuanshi+=" % ";
  619. UpdateData(false);
  620. m_show = '0';
  621. }
  622. //求倒数
  623. void CcalculatorDlg::OnBnClickeddaoshu()
  624. {
  625. // TODO: 在此添加控件通知处理程序代码
  626. m_jisuanshi= '/'+m_jisuanshi;
  627. m_jisuanshi='1'+m_jisuanshi;
  628. UpdateData(false);
  629. SanjiaoFunc(7);
  630. }
  631. //求开方
  632. void CcalculatorDlg::OnBnClickedsqrt()
  633. {
  634. // TODO: 在此添加控件通知处理程序代码
  635. m_jisuanshi= m_jisuanshi+')';
  636. m_jisuanshi='('+m_jisuanshi;
  637. m_jisuanshi='t'+m_jisuanshi;
  638. m_jisuanshi='r'+m_jisuanshi;
  639. m_jisuanshi='q'+m_jisuanshi;
  640. m_jisuanshi='s'+m_jisuanshi;
  641. UpdateData(false);
  642. SanjiaoFunc(6);
  643. }
  644. //求n阶层
  645. void CcalculatorDlg::OnBnClickedjieceng()
  646. {
  647. // TODO: 在此添加控件通知处理程序代码
  648. m_jisuanshi+=" !";
  649. UpdateData(false);
  650. SanjiaoFunc(8);
  651. }
  652. //求sin函数
  653. void CcalculatorDlg::OnBnClickedsin()
  654. {
  655. // TODO: 在此添加控件通知处理程序代码
  656. m_jisuanshi= m_jisuanshi+')';
  657. m_jisuanshi='('+m_jisuanshi;
  658. m_jisuanshi='n'+m_jisuanshi;
  659. m_jisuanshi='i'+m_jisuanshi;
  660. m_jisuanshi='s'+m_jisuanshi;
  661. UpdateData(false);
  662. SanjiaoFunc(1);
  663. }
  664. //求cos函数
  665. void CcalculatorDlg::OnBnClickedcos()
  666. {
  667. // TODO: 在此添加控件通知处理程序代码
  668. m_jisuanshi= m_jisuanshi+')';
  669. m_jisuanshi='('+m_jisuanshi;
  670. m_jisuanshi='s'+m_jisuanshi;
  671. m_jisuanshi='o'+m_jisuanshi;
  672. m_jisuanshi='c'+m_jisuanshi;
  673. UpdateData(false);
  674. SanjiaoFunc(2);
  675. }
  676. //求tan函数
  677. void CcalculatorDlg::OnBnClickedtan()
  678. {
  679. // TODO: 在此添加控件通知处理程序代码
  680. m_jisuanshi= m_jisuanshi+')';
  681. m_jisuanshi='('+m_jisuanshi;
  682. m_jisuanshi='n'+m_jisuanshi;
  683. m_jisuanshi='a'+m_jisuanshi;
  684. m_jisuanshi='t'+m_jisuanshi;
  685. UpdateData(false);
  686. SanjiaoFunc(3);
  687. }
  688. //求ln函数
  689. void CcalculatorDlg::OnBnClickedln()
  690. {
  691. // TODO: 在此添加控件通知处理程序代码
  692. m_jisuanshi= m_jisuanshi+')';
  693. m_jisuanshi='('+m_jisuanshi;
  694. m_jisuanshi='n'+m_jisuanshi;
  695. m_jisuanshi='l'+m_jisuanshi;
  696. UpdateData(false);
  697. SanjiaoFunc(4);
  698. }
  699. //求log函数
  700. void CcalculatorDlg::OnBnClickedlog()
  701. {
  702. // TODO: 在此添加控件通知处理程序代码
  703. m_jisuanshi= m_jisuanshi+')';
  704. m_jisuanshi='('+m_jisuanshi;
  705. m_jisuanshi='g'+m_jisuanshi;
  706. m_jisuanshi='o'+m_jisuanshi;
  707. m_jisuanshi='l'+m_jisuanshi;
  708. UpdateData(false);
  709. SanjiaoFunc(5);
  710. }
  711. //递归函数
  712. int CcalculatorDlg::Jieceng(int n)
  713. {
  714. if(n==1)
  715. return 1;
  716. else
  717. return n*Jieceng(n-1);
  718. }
  719. //三角函数等计算,1代表sin,2代表cos,3代表tan,4代表lg,5代表log,
  720. //6代表sqrt,7代表1/x,8代表n!,9代表+/-,10代表x^2,11代表x^3,
  721. void CcalculatorDlg::SanjiaoFunc(int type)
  722. {
  723. num2=m_show; //将接下来输入的值 存储到num2里面
  724. double temp=0; //临时变量 用来保存结果
  725. double temp2; //临时数值2
  726. temp2 = _tstof(num2);
  727. int n=0,sum=0;
  728. switch(type)
  729. {
  730. case 1:
  731. temp = sin(temp2/180*3.141593);
  732. break;
  733. case 2:
  734. temp = cos(temp2/180*3.141593);
  735. break;
  736. case 3:
  737. temp = tan(temp2/180*3.141593);
  738. break;
  739. case 4:
  740. temp = log(temp2);
  741. break;
  742. case 5:
  743. temp = log10(temp2);
  744. break;
  745. case 6:
  746. temp = sqrt(temp2);
  747. break;
  748. case 7:
  749. temp = 1/temp2;
  750. break;
  751. case 8:
  752. n = int(temp2);
  753. sum = Jieceng(n);
  754. temp = double(sum);
  755. break;
  756. case 9:
  757. temp = 0 - temp2;
  758. break;
  759. case 10:
  760. temp = temp2*temp2;
  761. break;
  762. case 11:
  763. temp = temp2*temp2*temp2;
  764. break;
  765. }
  766. CString strTemp;
  767. strTemp.Format(_T("%f"),temp);
  768. int count = Count(strTemp);
  769. switch(count)
  770. {
  771. case 0:
  772. m_show.Format(_T("%.0f"),temp); //将浮点类型的值 转换成字符串s
  773. break;
  774. case 1:
  775. m_show.Format(_T("%.1f"),temp); //将浮点类型的值 转换成字符串s
  776. break;
  777. case 2:
  778. m_show.Format(_T("%.2f"),temp); //将浮点类型的值 转换成字符串s
  779. break;
  780. case 3:
  781. m_show.Format(_T("%.3f"),temp); //将浮点类型的值 转换成字符串s
  782. break;
  783. case 4:
  784. m_show.Format(_T("%.4f"),temp); //将浮点类型的值 转换成字符串s
  785. break;
  786. case 5:
  787. m_show.Format(_T("%.5f"),temp); //将浮点类型的值 转换成字符串s
  788. break;
  789. case 6:
  790. m_show.Format(_T("%.6f"),temp); //将浮点类型的值 转换成字符串s
  791. break;
  792. }
  793. hasEqual = true;
  794. //处理取相反数的情况
  795. if(type==9)
  796. {
  797. if(temp<0)
  798. m_jisuanshi='-'+m_jisuanshi;
  799. else
  800. m_jisuanshi=m_jisuanshi.Right(m_jisuanshi.GetLength()-1);
  801. }
  802. //其他的
  803. else
  804. m_jisuanshi=m_jisuanshi+' ' + '='+ ' '+m_show;
  805. UpdateData(false); //更新数据
  806. }
  807. //MR操作
  808. void CcalculatorDlg::OnBnClickedmr()
  809. {
  810. // TODO: 在此添加控件通知处理程序代码
  811. double temp = save.Pop();
  812. CString strTemp;
  813. strTemp.Format(_T("%f"),temp);
  814. int count = Count(strTemp);
  815. switch(count)
  816. {
  817. case 0:
  818. m_show.Format(_T("%.0f"),temp); //将浮点类型的值 转换成字符串s
  819. break;
  820. case 1:
  821. m_show.Format(_T("%.1f"),temp); //将浮点类型的值 转换成字符串s
  822. break;
  823. case 2:
  824. m_show.Format(_T("%.2f"),temp); //将浮点类型的值 转换成字符串s
  825. break;
  826. case 3:
  827. m_show.Format(_T("%.3f"),temp); //将浮点类型的值 转换成字符串s
  828. break;
  829. case 4:
  830. m_show.Format(_T("%.4f"),temp); //将浮点类型的值 转换成字符串s
  831. break;
  832. case 5:
  833. m_show.Format(_T("%.5f"),temp); //将浮点类型的值 转换成字符串s
  834. break;
  835. case 6:
  836. m_show.Format(_T("%.6f"),temp); //将浮点类型的值 转换成字符串s
  837. break;
  838. }
  839. m_jisuanshi=m_jisuanshi+m_show;
  840. UpdateData(false);
  841. }
  842. //MS操作
  843. void CcalculatorDlg::OnBnClickedms()
  844. {
  845. // TODO: 在此添加控件通知处理程序代码
  846. sv = m_show;
  847. double  top = _tstof(sv);
  848. save.Push(top);
  849. }
  850. //M+操作
  851. void CcalculatorDlg::OnBnClickedmadd()
  852. {
  853. // TODO: 在此添加控件通知处理程序代码
  854. double destroy = save.Pop();
  855. sv = m_show;
  856. double top = _tstof(sv);
  857. save.Push(destroy+top);
  858. }
  859. //求相反数
  860. void CcalculatorDlg::OnBnClickedopposite()
  861. {
  862. // TODO: 在此添加控件通知处理程序代码
  863. SanjiaoFunc(9);
  864. }
  865. //求平方
  866. void CcalculatorDlg::OnBnClickedx2()
  867. {
  868. // TODO: 在此添加控件通知处理程序代码
  869. m_jisuanshi+="^2";
  870. UpdateData(false);
  871. SanjiaoFunc(10);
  872. }
  873. //求立方
  874. void CcalculatorDlg::OnBnClickedx3()
  875. {
  876. // TODO: 在此添加控件通知处理程序代码
  877. m_jisuanshi+="^3";
  878. UpdateData(false);
  879. SanjiaoFunc(11);
  880. }
  881. //求X^Y
  882. void CcalculatorDlg::OnBnClickedxy()
  883. {
  884. // TODO: 在此添加控件通知处理程序代码
  885. op=6;  //设定减法运算符为2 
  886. num1=m_show; //将当前的值给num1来保存
  887. m_jisuanshi+='^';
  888. UpdateData(false);
  889. m_show='0';  //将m_show的值 设为0 接收将要输入的值
  890. }
  891. //全部清除CE
  892. void CcalculatorDlg::OnBnClickedce()
  893. {
  894. // TODO: 在此添加控件通知处理程序代码
  895. save.Clear();
  896. m_jisuanshi2.Clear();
  897. m_show='0';
  898. m_jisuanshi="";
  899. //使控件能够接受到用户输入的值
  900. UpdateData(false);
  901. }