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. 5.移动端自动化测试-小知识 import和from...import的区别

    一.import   1 import导入的时,需要使用模块名的限定. 举个例子,我们首先创建一个md.py文件,里面有一个函数 2 然后在1.py文件中引用这个函数. 注意,我们需要使用md.的方式 ...

  2. dict 字典 函数值应用

    函数 说明 D代表字典对象   D.clear() 清空字典 D.pop(key) 移除键,同时返回此键所对应的值 D.copy() 返回字典D的副本,只复制一层(浅拷贝) D.update(D2) ...

  3. 英语是学习Java编程的基础吗

    就当前市场行情需求来看,Java人才需求依旧火爆,在如今互联网时代,手机移动端的软件开发是非常重要的,如今无论是大中小企业都是需要进行软件的开发的,又因为Java是开源的使用起来可以节约一大批的成本, ...

  4. SPI总线的原理与Verilog实现

    转载地址:https://www.cnblogs.com/liujinggang/p/9609739.html 一. 软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件 ...

  5. Linux rpm和yum软件管理

    rpm是管理程序的一个小工具,rpm常来用作查询 什么源码包:大多数都是tar.gz,bz.bz2结尾的包 zip结尾的包 压缩格式为 zip –r 命名.zip ./* 解压格式为 unzip 命名 ...

  6. Fiddler抓包HTTPS捕捉旧版App

    “现在可以公开的情报:简易操作Fiddler抓包可能” 任何App的更新都限于苹果开发者规定,有时为了上架不得已放弃一些真正实用的功能,比如视频音频的直接下载,脚本的直接导入,手机上IPA的直接安装等 ...

  7. 【cli命令集】

    1.调高bug等级 查看现在蜂窝目前sla情况 ROUTER> enable ROUTER# core set debug 18Core debug was 0 and is now 18Cor ...

  8. VS---《在VS2010中 使用C++创建和使用DLL》(003)

    VS---<在VS2010中 使用C++创建和使用DLL>(003) 这里实现一下,之前写好的一个工程(定义一个函数f + main函数调用),转成DLL.调用DLL测试.在两个工程里,分 ...

  9. cas多方式登录相关知识点的总结

    知识点: cas多表单登录(在用户名,密码的基础上,增加短信验证码登录) 自定义认证策略 自定义字段添加为空校验的错误信息 Controller层接口的调用 一:场景 项目涉及到的业务是,在原cas用 ...

  10. CentOS7下tftp服务安装配置

    1.软件包安装 root用户或者普通用户使用sudo权限执行如下命令: yum install xinetd tftp tftp-server # root 用户执行 sudo yum install ...