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

2013年06月19日 09:48:47 无敌的成长日记 阅读数:4686
 
    最近一段时间一直在做这个东西,刚刚拿到题目的时候认为这是一个简单的程序,可是随着编写程序的深入,发现这也不是一个很简单的程序,主要是需要考虑到一些连续加减以及混合运算的情况。
   首先介绍一下这个小计算器的功能。其实也没有什么新的功能啦,只是有一些简单的+、-、*、/运算,能够完成混合运算,是一个标准型的计算器。
 
建立文件
(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.  
     
  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.  
    }

最新文章

  1. 在DevExpress程序中使用GridView直接录入数据的时候,增加列表选择的功能
  2. oracle is not in the sudoers file. This incident will be reported.
  3. Solr集群更新配置的方式
  4. 反射生成SQL语句
  5. Android学习笔记之Json的使用....
  6. hdu 4398 STL
  7. php 经典分页(推荐和laypage配合)
  8. hdu 3152 Obstacle Course
  9. JavaScript 代码片段
  10. memmove 和 memcpy的区别
  11. Canvas使用渐变之-线性渐变详解
  12. 工厂方法模式(factory method pattern)
  13. [转]C#通过委托更新UI(异步加载)
  14. ArcGis 属性表.dbf文件使用Excel打开中文乱码的解决方法
  15. 详述 hosts 文件的作用及修改 hosts 文件的方法
  16. html常见的块元素和行内元素(特别注意个别块元素不能嵌套其他块元素)
  17. 洛谷 P1110 [ZJOI2007]报表统计 解题报告
  18. 通过my.ini修改mysql默认编码为gbk
  19. Prometheus Node_exporter 之 CPU Memory Net Disk
  20. jquery 中$符号六大作用

热门文章

  1. base64转换成文件图片
  2. android项目笔记整理(2)
  3. 【Java并发】线程安全和内存模型
  4. 二、MySQL介绍
  5. springboot升级2.0 fastjson报错? 2.0以上应该怎么整合fastjson?
  6. 【2019 CCPC 秦皇岛】J - MUV LUV EXTRA
  7. Python3+Appium学习笔记02-环境配置(下)
  8. 百度人脸识别java html5
  9. mybatis详解(三)
  10. [原创]在Windows平台使用msvc(cl.exe) + vscode编写和调试C/C++代码