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

VC++实现标准型计算器步骤及源码的更多相关文章

  1. PHP 使用GD库合成带二维码的海报步骤以及源码实现

    PHP 使用GD库合成带二维码的海报步骤以及源码实现 在做微信项目开发过程中,经常会遇到图片合成的问题,比如将用户的二维码合成到宣传海报中,那么,遇到这种情况,利用PHP的GD库也是很容易实现的,实现 ...

  2. PHP 使用GD库合成带二维码和圆形头像的海报步骤以及源码实现

    PHP 使用GD库合成带二维码和圆形头像的海报步骤以及源码实现 之前记录过一篇文章,不过那只是简单将二维码合成到海报中去,这次还要合成头像,而且是圆形.所需要素材就不一一列举,直接代码吧 1.先获取用 ...

  3. Mybatis源码解析,一步一步从浅入深(二):按步骤解析源码

    在文章:Mybatis源码解析,一步一步从浅入深(一):创建准备工程,中我们为了解析mybatis源码创建了一个mybatis的简单工程(源码已上传github,链接在文章末尾),并实现了一个查询功能 ...

  4. ubuntu安装qt步骤(源码)

    1.安装gcc,g++ sudo apt-get install gcc sudo apt-get install g++ 2.解压源码包 tar xvzf qt-xxxx 3.安装xlib库 sud ...

  5. C语言实现计算器,附源码,超简单!

    #include<stdio.h> #include<math.h> void main() { calculator(); } double calculator() { / ...

  6. 微信小程序实例源码大全

    微信小程序实例源码大全下载 微信小应用示例代码(phodal/weapp-quick)源码链接:https://github.com/phodal/weapp-quick 微信小应用地图定位demo( ...

  7. Android源码之Gallery专题研究(1)

    前言 时光飞逝,从事Android系统开发已经两年了,总想写点什么来安慰自己.思考了很久总是无法下笔,觉得没什么好写的.现在终于决定写一些符合大多数人需求的东西,想必使用过Android手机的人们一定 ...

  8. 近期热门微信小程序demo源码下载汇总

    近期微信小程序demo源码下载汇总,乃小程序学习分析必备素材!点击标题即可下载: 即速应用首发!原创!电商商场Demo 优质微信小程序推荐 -秀人美女图 图片下载.滑动翻页 微信小程序 - 新词 GE ...

  9. jQuery源码研究——怎么看源码

    废话 这几天有想看源码的想法,于是就开始了源码的研究,经过几天的摸索发现看源码还是有点技巧在里面的,想着把这些东东写下来作为一个小总结. 在一个多月前我对Vue源码进行了一次研究,那时看源码的方式基本 ...

随机推荐

  1. canvas-绘制矩形-读书笔记

    使用<canvas>元素,必须先设置其width和height属性,指定可以绘图的区域大小. 要在画布上绘图,需要取得绘图上下文,也就是要调用getContext()方法并传入上下文的名字 ...

  2. 10.自定义EL函数和自定义标签

    需要在JSP页面中进行一些常见逻辑操作(如对字符串进行操作),首先考虑是否可以用到sun公司提供的EL函数库(fn.tld)和JSTL 核心标签库 如果sun公司的EL函数库没有或者无法满足,就需要自 ...

  3. Spring Cloud(O)服务的注册与发现(Eureka)

    一.微服务架构 1.1什么是分布式 不同模块部署在不同服务器上 作用:分布式解决网站高并发带来问题 1.2什么是集群 多台服务器部署相同应用构成一个集群 作用:通过负载均衡设备共同对外提供服务 1.3 ...

  4. Xshell连接阿里云服务被拒绝

    问题描述:突然的Xshell连接阿里云服务被拒绝了(如图)网上众多的方案都不行例如:https://www.cnblogs.com/wanglle/p/11416987.html(参考博文,本人这个问 ...

  5. namespace" 或The content of element type "mapper" must match "EMPTY"

    必须为元素类型 "mapper" 声明属性 "namespace" 或The content of element type "mapper" ...

  6. 四:MVC之LINQ方法语法

    linq 查询 有两种语法  ,前面我们说了一种,接下来说方法语法(我读着一直很绕口) 查询语法,方法语法 ------------------------以下文字都是复制-------------- ...

  7. svn中日志不展示解决方法记录

    一,问题:点击svn查看日志时不显示.筛选时间显示为1970 1,猜想可能没有查看日志权限 2,查看linux 下svn版本库 confg 下三个配制文件 authz ,passwd ,svnserv ...

  8. 【LOJ6671】EntropyIncreaser 与 Minecraft

    Orz lbt Description https://loj.ac/problem/6671 Solution

  9. JavaScript教程——数据类型概述

    简介 JavaScript 语言的每一个值,都属于某一种数据类型.JavaScript 的数据类型,共有六种.(ES6 又新增了第七种 Symbol 类型的值,本教程不涉及.) 数值(number): ...

  10. 【高维前缀和】8.15B. 组合数

    题目分析 没有接触过高维前缀和的话会有一点抽象