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

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.  

    }

原文地址:https://www.cnblogs.com/Firesun/p/11005399.html

时间: 2024-10-16 17:20:55

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

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

PHP 使用GD库合成带二维码和圆形头像的海报步骤以及源码实现 之前记录过一篇文章,不过那只是简单将二维码合成到海报中去,这次还要合成头像,而且是圆形.所需要素材就不一一列举,直接代码吧 1.先获取用户头像 有的用户是自定义头像(自定义头像是其他站点),有的用户是小程序头像 1 if (!$user['logo_status'] && $user['logo']) { 2 $app_domain = config('app_url');//因为自己上传的头像都放在了小程序的后台上 3 $u

ubuntu安装qt步骤(源码)

1.安装gcc,g++ sudo apt-get install gcc sudo apt-get install g++ 2.解压源码包 tar xvzf qt-xxxx 3.安装xlib库 sudo apt-get install libX11-dev libXext-dev libXtst-dev 4.配置 ./configure 5.编译 make 6.安装 make install

vc 下和Linux 下的auto_ptr源码剖析

1.vc template<class _Ty> class auto_ptr { public: typedef _Ty element_type; auto_ptr(_Ty *_P = 0)  : _Owns(_P != 0), _Ptr(_P) {} //拷贝构造  将_Y的管理权_Owns = false 释放后将指针赋值过去 auto_ptr(const auto_ptr<_Ty>& _Y) : _Owns(_Y._Owns), _Ptr(_Y.release()

SSO CAS单点登录搭建详细步骤及源码

1.因为是本地模拟sso环境,而sso的环境测试需要域名,所以需要虚拟几个域名出来,步骤如下: 2.进入目录C:\Windows\System32\drivers\etc 3.修改hosts文件 127.0.0.1 jeesz.cn 127.0.0.1 sso1.jeesz.cn 127.0.0.1 sso2.jeesz.cn 4.生成认证证书 注意:我们可以根据sso单点登录的架构图可以看到,在客户端和服务端进行交互的时候,是需要认证的,在这里我们使用jdk中的keytool方案生成证书(一般

计算器的实现 源码

package com.example.cal; import android.R.integer; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ImageBut

简易计算器c语言源码,

本人新学, 用的都是最基本的语句, 程序功能不完善, 有以下问题, 1.大数据无法计算, 2.较大整型数据输出为浮点型,(因为是老师布置的作业,有要求含实数的算术计算输出要含小数.) 3.无法用()提升运算优先级, 欢迎提出改进意见 代码附上: void fun1()//算术运算函数{ char a[20][30],b[20]; double c[20],s; int i,j,k,flag; system("cls");// printf("输入算术式\n格式如:31+42*

微信小程序-整理各种小程序源码和资料免费下载

微信小程序整理下载 [小程序源码]微信小程序-车源宝微信版 [小程序源码]小程序-微赞社区(论坛demo) [小程序源码]微信小程序-收支账单 [小程序工具]微信小程序-日历 [小程序源码]小程序-在线聊天功能 [小程序源码]微信小程序-大好商城(新增功能天气查询和2048游戏) [小程序源码]微信小程序-查询号码归属地 [小程序源码]微信小程序-备忘录2 [小程序源码]微信小程序-QQ音乐 [小程序源码]小程序-货币汇率 [小程序源码]微信小程序-大学图书馆 [小程序源码]小程序-积分商城 [

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

前言 时光飞逝,从事Android系统开发已经两年了,总想写点什么来安慰自己.思考了很久总是无法下笔,觉得没什么好写的.现在终于决定写一些符合大多数人需求的东西,想必使用过Android手机的人们一定对“图库”(以下简称Gallery)这个应用非常熟悉.在Android市场里面有各种关于图库的应用,他们的最初原型其实就是Android系统原生“图库”,只是做了不同的差异化而已(UI差异化).在研究Gallery源码之前,我们需要对设计模式有一定的了解,根据自己对Gallery的了解,Galler

kettle源码部署

一 kettle源码部署概述 1.从git上选择合适的版本,并down下来: 2.创建一个java项目,建立core,dbdialog,engine,ui,plugins文件夹,和一个lib文件夹: 3.将kettle源码中上述五个文件夹中的src下的代码拷贝到我们创建的java项目的五个文件夹下: 4.将发行版kettle工具免安装包的lib,libswt,launcher,simple-jndi 四个文件夹拷贝至java项目根目录,并系统的位数选择libswt.jar  add to bui