VC++实现标准型计算器步骤及源码

VC++实现标准型计算器步骤及源码

    最近一段时间一直在做这个东西,刚刚拿到题目的时候认为这是一个简单的程序,可是随着编写程序的深入,发现这也不是一个很简单的程序,主要是需要考虑到一些连续加减以及混合运算的情况。
   首先介绍一下这个小计算器的功能。其实也没有什么新的功能啦,只是有一些简单的+、-、*、/运算,能够完成混合运算,是一个标准型的计算器。
建立文件
(1)建立应用程序外壳
    创建一个新的AppWizard项目,命名为shiyan,选择Dialog based;其他都选用默认属性,单击Finish完成生成应用程序的步骤。
    进入对话框界面以后,按下图所示布置显示框和功能按钮,这个小计算器一共需要10个数字键,9个功能键两个文本框。(下面的显示窗口是在测试程序时用的跟踪窗口,一般的计算器可以删去)。
(2)设置窗口属性
    将上面的显示框属性设置成为CString型,下面的跟踪显示框设置成为Double型,并且绑定两个变量给他们。分别是m_text(显示框),m_show(跟踪显示框)ID改成IDC_text,IDC_show。数字键的ID号更改成为IDC_OnX,Caption改为相应的数字。
(3)设置公有变量
    这个程序中我用的公共变量比较得多,主要是因为我是新手吗!!下面是所有公有变量的列表:
  1. int numb;
  2. int h; //.计数
  3. double temp4;
  4. double temp1;
  5. double temp3;
  6. double temp2;
  7. CString ss;
  8. char sign;
  9. int a; //减法计数
  10. int b; //乘法计数
  11. int c; //除法计数
  12. int d; //加法计数
   要给公有变量赋值需要在 OnInitDialog()函数中赋值,而这个函数就是在运行对话框时首先要运行的初始化函数,现在给需要赋初值的公有变量赋初值。
  1. sign= 0;
  2. CString ss= "0";
  3. temp4= 0;
  4. temp2= 0;
  5. a=b=c=d= 0;
  6. h= 0;
  7. numb= 0;
(3)编写按钮程序
数字键
    双击你所要编写的数字键进入相应的按键程序编写,例如1建,双击后编写程序:
  1. void CShiyanDlg::OnOn1()
  2. {
  3. UpdateData( 1);//上传数据开启
  4. if(numb==1)//判断是否已经按下=号建
  5. {
  6. ss= "";
  7. m_text;
  8. numb= 0;
  9. }
  10. int a;
  11. a=ss.GetLength(); //截取当前显示框字符串长度
  12. ss.Insert(a, "1");//插入字符
  13. m_text=ss;
  14. UpdateData( 0);//上传数据关闭
  15. // TODO: Add your control notification handler code here
  16. }

“+”号键程序:
  1. void CShiyanDlg::Onadd()
  2. {
  3. h= 0;
  4. a=b=c= 0;
  5. d++;
  6. UpdateData( 1);
  7. temp1=atof(ss);
  8. if((sign=='-')||(sign=='*')||(sign=='/'))
  9. {
  10. switch(sign)//change
  11. {
  12. case'-':
  13. {
  14. temp1=atof(ss);
  15. temp4=temp4-temp1;
  16. break;
  17. }
  18. case'*':
  19. {
  20. temp1=atof(ss);
  21. temp4=temp4*temp1;
  22. break;
  23. }
  24. case'/':
  25. {
  26. temp1=atof(ss);
  27. temp4=temp4/temp1;
  28. break;
  29. }
  30. }
  31. }
  32. else
  33. {
  34. if (d==1)///carefull!!
  35. temp4=temp1;
  36. else
  37. temp4=temp4+temp1;
  38. }
  39. ss="";
  40. m_text=ss;
  41. m_show=temp4;
  42. sign='+';
  43. //numb++;
  44. UpdateData(0);
  45. // TODO: Add your control notification handler code here
  46. }

“-”号键程序:

  1. void CShiyanDlg::Onsub()
  2. {
  3. h= 0;
  4. b=c=d= 0;
  5. a++;
  6. UpdateData( 1);
  7. temp1=atof(ss);
  8. if((sign=='+')||(sign=='*')||(sign=='/'))
  9. {
  10. switch(sign)//change
  11. {
  12. case'+':
  13. {
  14. temp1=atof(ss);
  15. temp4=temp4+temp1;
  16. break;
  17. }
  18. case'*':
  19. {
  20. temp1=atof(ss);
  21. temp4=temp4*temp1;
  22. break;
  23. }
  24. case'/':
  25. {
  26. temp1=atof(ss);
  27. temp4=temp4/temp1;
  28. break;
  29. }
  30. }
  31. }
  32. else
  33. {
  34. if (a==1)///carefull!!
  35. temp4=temp1;
  36. else
  37. temp4=temp4-temp1;
  38. }
  39. ss="";
  40. m_text=ss;
  41. m_show=temp4;
  42. sign='-';
  43. //numb++;
  44. UpdateData(0);
  45. // TODO: Add your control notification handler code here
  46. }

“*”号键程序:
  1. void CShiyanDlg::Onmul()
  2. {
  3. a=c=d= 0;
  4. h= 0;
  5. b++;
  6. UpdateData( 1);
  7. temp1=atof(ss);
  8. if((sign=='+')||(sign=='-')||(sign=='/'))
  9. {
  10. switch(sign)//change
  11. {
  12. case'+':
  13. {
  14. temp1=atof(ss);
  15. temp4=temp4+temp1;
  16. break;
  17. }
  18. case'-':
  19. {
  20. temp1=atof(ss);
  21. temp4=temp4-temp1;
  22. break;
  23. }
  24. case'/':
  25. {
  26. temp1=atof(ss);
  27. temp4=temp4/temp1;
  28. break;
  29. }
  30. }
  31. }
  32. else
  33. {
  34. if (b==1)///carefull!!
  35. temp4=temp1;
  36. else
  37. temp4=temp4*temp1;
  38. }
  39. ss="";
  40. m_text=ss;
  41. m_show=temp4;
  42. sign='*';
  43. //numb++;
  44. UpdateData(0);
  45. // TODO: Add your control notification handler code here
  46. }

“.”键程序:
  1. void CShiyanDlg::Onpoint()
  2. {
  3. UpdateData( 1);
  4. int a;
  5. if(h==0)
  6. {
  7. a=ss.GetLength();
  8. ss.Insert(a, ".");
  9. m_text=ss;
  10. }
  11. else
  12. {;}
  13. h= 1;
  14. UpdateData( 0);
  15. //sign=0;
  16. //a=0;
  17. // TODO: Add your control notification handler code here
  18. }

乘方键程序:
  1. void CShiyanDlg::Onsqrt() //try again
  2. {
  3. UpdateData( 1);
  4. temp4=atof(ss)*atof(ss);
  5. ss.Format(_T( "%f"),temp4);
  6. m_text=ss;
  7. m_show=temp4;
  8. //sign=0;
  9. UpdateData( 0);
  10. // TODO: Add your control notification handler code here
  11. }

“+/-”键程序:
  1. void CShiyanDlg::Onsign()
  2. {
  3. UpdateData( 1);
  4. numb= 0;
  5. temp2=-atof(ss);
  6. ss.Format(_T( "%f"),temp2);
  7. m_text=ss;
  8. m_show=temp2;
  9. temp2= 0;
  10. UpdateData( 0);
  11. // TODO: Add your control notification handler code here
  12. }

“C”键程序:
  1. void CShiyanDlg::OnCE() //C
  2. {
  3. numb= 0;
  4. h= 0;
  5. UpdateData( 1);
  6. ss= "";
  7. m_text=ss;
  8. m_show=atof(ss);
  9. temp1= 0;
  10. temp2= 0;
  11. temp3= 0;
  12. temp4= 0;
  13. sign= 'o';
  14. UpdateData( 0);
  15. a=b=c=d= 0;
  16. // TODO: Add your control notification handler code here
  17. }

“DEL”键程序:
  1. void CShiyanDlg::Ondel()
  2. {
  3. UpdateData( 1);
  4. int u,v;
  5. ss=m_text;
  6. v=ss.GetLength();
  7. u=v -1;
  8. ss.Format( "%s",ss.Left(u));
  9. m_text=ss;
  10. UpdateData( 0);
  11. // TODO: Add your control notification handler code here
  12. }

“=”号建:
  1. void CShiyanDlg::Onequ()
  2. {
  3. numb= 1;
  4. h= 0;
  5. UpdateData( 1);
  6. switch(sign)
  7. {
  8. case '+':
  9. {
  10. a=b=c= 0;
  11. temp1=atof(ss);
  12. d++;
  13. if (d==1)
  14. temp4=temp1;
  15. else
  16. temp4=temp4+temp1;
  17. ss.Format(_T( "%f"),temp4);
  18. m_text=ss;
  19. m_show=temp4;
  20. temp1= 0;
  21. temp4= 0;
  22. d= 0;
  23. break;
  24. }
  25. case '-':
  26. {
  27. b=c=d= 0;
  28. temp1=atof(ss);
  29. a++;
  30. if (a==1)
  31. temp4=temp1;
  32. else
  33. temp4=temp4-temp1;
  34. ss.Format(_T( "%f"),temp4);
  35. m_text=ss;
  36. m_show=temp4;
  37. temp1= 0;
  38. temp4= 0;
  39. a= 0;
  40. break;
  41. }
  42. case '*':
  43. {
  44. a=c=d= 0;
  45. temp1=atof(ss);
  46. b++;
  47. if (b==1)
  48. temp4=temp1;
  49. else
  50. temp4=temp4*temp1;
  51. ss.Format(_T( "%f"),temp4);
  52. m_text=ss;
  53. m_show=temp4;
  54. temp1= 0;
  55. temp4= 0;
  56. b= 0;
  57. break;
  58. }
  59. case '/':
  60. {
  61. a=b=d= 0;
  62. temp1=atof(ss);
  63. c++;
  64. if (c==1)
  65. temp4=temp1;
  66. else
  67. temp4=temp4/temp1;
  68. ss.Format(_T( "%f"),temp4);
  69. m_text=ss;
  70. m_show=temp4;
  71. temp1= 0;
  72. temp4= 0;
  73. c= 0;
  74. break;
  75. }
  76. //a=b=c=d=0;
  77. }
  78. sign= 0;
  79. UpdateData( 0);
  80. // TODO: Add your control notification handler code here
  81. }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值