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


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

        最近一段时间一直在做这个东西,刚刚拿到题目的时候认为这是一个简单的程序,可是随着编写程序的深入,发现这也不是一个很简单的程序,主要是需要考虑到一些连续加减以及混合运算的情况。
       首先介绍一下这个小计算器的功能。其实也没有什么新的功能啦,只是有一些简单的+、-、*、/运算,能够完成混合运算,是一个标准型的计算器。
     
    建立文件
    (1)建立应用程序外壳
        创建一个新的AppWizard项目,命名为shiyan,选择Dialog based;其他都选用默认属性,单击Finish完成生成应用程序的步骤。
    VC++标准型计算器(我的原创噢!)
        进入对话框界面以后,按下图所示布置显示框和功能按钮,这个小计算器一共需要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.  
       
    17.  
      }

    “+”号键程序:
    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.  
       
    47.  
      }

    “-”号键程序:

    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.  
       
    47.  
      }

    “*”号键程序:
    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.  
       
    47.  
      }

    “.”键程序:
    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.  
       
    19.  
      }

    乘方键程序:
    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.  
       
    12.  
      }

    “+/-”键程序:
    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.  
       
    13.  
      }

    “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.  
       
    17.  
      // TODO: Add your control notification handler code here
    18.  
       
    19.  
      }

    “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.  
       
    13.  
      }

    “=”号建:
    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.  
       
    82.  
      }
  • 相关阅读:
    记录第一次阿里云服务器部署java web工程的经历
    常用网站……
    根据ID获取CEdit的句柄实例
    (转)MFC中获得各个类的指针/句柄 ID的总结
    (转)DoDataExchange执行时机
    深入浅出Visual_C动态链接库(Dll)编程(宋宝华)----整理(word)
    (转)MFC的一些宏的整理 (DECLARE_DYNCREATE/IMPLEMENT_DYNCREATE)
    Socket 学习入门
    (转) 新的开始之Win7、CentOS 6.4 双系统 硬盘安装
    WIN7下使用VC2010调试uCOS-II 2.91
  • 原文地址:https://www.cnblogs.com/Firesun/p/11005399.html
Copyright © 2020-2023  润新知