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. merge into 笔记

    1 IF EXISTS (SELECT 1 FROM sys.types t            join sys.schemas s on t.schema_id=s.schema_id      ...

  2. 11.SSH整合

    由于自己学习的版本比较落后,这里就不总结了 在我这个版本整合的过程中的几点问题: 1.在web.xml的配置过程中: <!-- 如果使用的是load获取数据,在jsp页面申请取得数据时才真正的执 ...

  3. 【SpringBoot】入门程序和机制分析

    一.初建项目 首先要导入SpringBoot的Maven依赖 <!-- Inherit defaults from Spring Boot --> <!-- 这是SpringBoot ...

  4. 《浏览器工作原理与实践》<03>HTTP请求流程:为什么很多站点第二次打开速度会很快?

    一个 TCP 连接过程包括了建立连接.传输数据和断开连接三个阶段. 而 HTTP 协议,正是建立在 TCP 连接基础之上的.HTTP 是一种允许浏览器向服务器获取资源的协议,是 Web 的基础,通常由 ...

  5. C - Calculation 2 HDU - 3501 (欧拉)

    Given a positive integer N, your task is to calculate the sum of the positive integers less than N w ...

  6. gdb 使用finish命令(缩写fin)

    gdb 使用finish命令(缩写fin) gdb 使用finish命令(缩写fin) gdb 使用finish命令(缩写fin) 跳出跟踪的函数

  7. axios 用 params/data 发送参数给 springboot controller,如何才能正确获取

    今天有人遇到接口调用不通的情况,粗略看了一下是axios跨域请求引起了.找到问题,处理就简单多了. 但是我看其代码,发现比较有意思 export function agentlist(query) { ...

  8. HDU 6415 Rikka with Nash Equilibrium (计数DP)

    题意:给两个整数n,m,让你使用 1 ~ n*m的所有数,构造一个矩阵n*m的矩阵,此矩阵满足:只有一个元素在它的此行和此列中都是最大的,求有多种方式. 析:根据题意,可以知道那个元素一定是 n * ...

  9. Markdown使用教程(转载收藏)

    基础语法 标题 Markdown支持6种级别的标题,对应html标签 h1 ~ h6 # h1 ## h2 ### h3 #### h4 ##### h5 ###### h6 以上标记效果如下: h1 ...

  10. OBDSTAR X300 PRO3详细评论

    OBDSTAR 公司的X300 PRO3钥匙主控系统具有SKP900的防盗锁钥匙编程功能,以及新功能,例如,测速计调节,EEPROM / PIC和OBDII.它的风格完全符合工业惯例,例如,它采用双边 ...