• 计算器部分代码


      1 // CalculatorDemoDlg.cpp : implementation file
      2 
      3 
      4 #include "stdafx.h"
      5 #include "TestCalculatorDemo.h"
      6 #include "CalculatorDemoDlg.h"
      7 #include "math.h"
      8 #include "string"
      9 
     10 #ifdef _DEBUG
     11 #define new DEBUG_NEW
     12 #undef THIS_FILE
     13 static char THIS_FILE[] = __FILE__;
     14 #endif
     15 
     16 /////////////////////////////////////////////////////////////////////////////
     17 // CCalculatorDemoDlg dialog
     18 
     19 
     20 CCalculatorDemoDlg::CCalculatorDemoDlg(CWnd* pParent /*=NULL*/)
     21     : CDialog(CCalculatorDemoDlg::IDD, pParent)
     22 {
     23     //{{AFX_DATA_INIT(CCalculatorDemoDlg)
     24         // NOTE: the ClassWizard will add member initialization here
     25     //}}AFX_DATA_INIT
     26 }
     27 
     28 
     29 void CCalculatorDemoDlg::DoDataExchange(CDataExchange* pDX)
     30 {
     31     CDialog::DoDataExchange(pDX);
     32     //{{AFX_DATA_MAP(CCalculatorDemoDlg)
     33         // NOTE: the ClassWizard will add DDX and DDV calls here
     34     //}}AFX_DATA_MAP
     35 }
     36 
     37 
     38 BEGIN_MESSAGE_MAP(CCalculatorDemoDlg, CDialog)
     39     //{{AFX_MSG_MAP(CCalculatorDemoDlg)
     40     ON_BN_CLICKED(IDC_BTN_NO1, OnBtnNo1)
     41     ON_BN_CLICKED(IDC_BTN_NO2, OnBtnNo2)
     42     ON_BN_CLICKED(IDC_BTN_NO3, OnBtnNo3)
     43     ON_BN_CLICKED(IDC_BTN_NO4, OnBtnNo4)
     44     ON_BN_CLICKED(IDC_BTN_NO5, OnBtnNo5)
     45     ON_BN_CLICKED(IDC_BTN_NO6, OnBtnNo6)
     46     ON_BN_CLICKED(IDC_BTN_NO7, OnBtnNo7)
     47     ON_BN_CLICKED(IDC_BTN_NO8, OnBtnNo8)
     48     ON_BN_CLICKED(IDC_BTN_NO9, OnBtnNo9)
     49     ON_BN_CLICKED(IDC_BTN_NO0, OnBtnNo0)
     50     ON_BN_CLICKED(IDC_BTN_PORT, OnBtnPort)
     51     ON_BN_CLICKED(IDC_BTN_ADD, OnBtnAdd)
     52     ON_BN_CLICKED(IDC_BTN_SUB, OnBtnSub)
     53     ON_BN_CLICKED(IDC_BTN_MUL, OnBtnMul)
     54     ON_BN_CLICKED(IDC_BTN_DIV, OnBtnDiv)
     55     ON_BN_CLICKED(IDC_BTN_EQUEL, OnBtnEquel)
     56     ON_BN_CLICKED(IDC_BTN_PERCENT, OnBtnPercent)
     57     ON_BN_CLICKED(IDC_BTN_DOWN, OnBtnDown)
     58     ON_BN_CLICKED(IDC_BTN_NEQUA, OnBtnNequa)
     59     ON_BN_CLICKED(IDC_BTN_SPACE, OnBtnSpace)
     60     ON_BN_CLICKED(IDC_BTN_C, OnBtnC)
     61     ON_BN_CLICKED(IDC_BTN_SQRT, OnBtnSqrt)
     62     //}}AFX_MSG_MAP
     63 END_MESSAGE_MAP()
     64 
     65 /////////////////////////////////////////////////////////////////////////////
     66 // CCalculatorDemoDlg message handlers
     67 
     68 void CCalculatorDemoDlg::OnBtnNo1() 
     69 {
     70     // TODO: Add your control notification handler code here
     71     PutIntoNum(1);
     72 }
     73 
     74 void CCalculatorDemoDlg::OnBtnNo2() 
     75 {
     76     // TODO: Add your control notification handler code here
     77     PutIntoNum(2);
     78 }
     79 
     80 void CCalculatorDemoDlg::OnBtnNo3() 
     81 {
     82     // TODO: Add your control notification handler code here
     83     PutIntoNum(3);
     84 }
     85 
     86 void CCalculatorDemoDlg::OnBtnNo4() 
     87 {
     88     // TODO: Add your control notification handler code here
     89     PutIntoNum(4);
     90 }
     91 
     92 void CCalculatorDemoDlg::OnBtnNo5() 
     93 {
     94     // TODO: Add your control notification handler code here
     95     PutIntoNum(5);
     96 }
     97 
     98 void CCalculatorDemoDlg::OnBtnNo6() 
     99 {
    100     // TODO: Add your control notification handler code here
    101     PutIntoNum(6);
    102 }
    103 
    104 void CCalculatorDemoDlg::OnBtnNo7() 
    105 {
    106     // TODO: Add your control notification handler code here
    107     PutIntoNum(7);
    108 }
    109 
    110 void CCalculatorDemoDlg::OnBtnNo8() 
    111 {
    112     // TODO: Add your control notification handler code here
    113     PutIntoNum(8);
    114 }
    115 
    116 void CCalculatorDemoDlg::OnBtnNo9() 
    117 {
    118     // TODO: Add your control notification handler code here
    119     PutIntoNum(9);
    120 }
    121 
    122 void CCalculatorDemoDlg::OnBtnNo0() 
    123 {
    124     // TODO: Add your control notification handler code here
    125     // TODO: Add your control notification handler code here
    126     //如果第一次输入数字
    127     if (cs_Num[m_i]=="0") 
    128     {
    129         return ;
    130     }
    131     cs_Num[m_i]+="0";
    132     SetDlgItemText(IDC_EDIT_SHOW,cs_Num[m_i]);
    133     if (!b_Hasport)
    134     {
    135         CString temp;
    136         GetDlgItemText(IDC_EDIT_SHOW,temp);
    137         temp+=".";
    138         SetDlgItemText(IDC_EDIT_SHOW,temp);
    139     }
    140 }
    141 
    142 void CCalculatorDemoDlg::OnBtnPort() 
    143 {
    144     //已有小数点时
    145     if (b_Hasport)
    146     {
    147         return;
    148     }
    149     //无小数点
    150     cs_Num[m_i]+=".";
    151     b_Hasport=TRUE;
    152     b_Start=TRUE;
    153     SetDlgItemText(IDC_EDIT_SHOW,cs_Num[m_i]);
    154 }
    155 
    156 
    157 //四则运算符
    158 
    159 void CCalculatorDemoDlg::OnBtnAdd() 
    160 {
    161     if (!b_Start)
    162     {
    163         return;
    164     }
    165     if (en_LastSignl==en_none)
    166     {
    167         en_LastSignl=en_add;
    168     }
    169     RunOperation(en_LastSignl);
    170     en_LastSignl=en_add;
    171 }
    172 
    173 void CCalculatorDemoDlg::OnBtnSub() 
    174 {
    175     if (!b_Start)
    176     {
    177         return;
    178     }
    179     
    180     // TODO: Add your control notification handler code here
    181     if (en_LastSignl==en_none)
    182     {
    183         en_LastSignl=en_sub;
    184     }
    185     RunOperation(en_LastSignl);
    186     en_LastSignl=en_sub;
    187 }
    188 
    189 void CCalculatorDemoDlg::OnBtnMul() 
    190 {
    191     if (!b_Start)
    192     {
    193         return;
    194     }
    195     if (en_LastSignl==en_none)
    196     {
    197         cs_Num[1]="1";
    198         en_LastSignl=en_mul;
    199     }
    200     
    201     RunOperation(en_LastSignl);
    202     en_LastSignl=en_mul;
    203 }
    204 
    205 void CCalculatorDemoDlg::OnBtnDiv() 
    206 {
    207     if (!b_Start)
    208     {
    209         return;
    210     }
    211     if (en_LastSignl==en_none)
    212     {
    213         cs_Num[1]="1";
    214         en_LastSignl=en_div;
    215     }
    216     RunOperation(en_LastSignl);
    217     en_LastSignl=en_div;
    218 }
    219 
    220 void CCalculatorDemoDlg::OnBtnEquel() 
    221 {
    222     // TODO: Add your control notification handler code here
    223     RunOperation(en_LastSignl);
    224     //****特殊****
    225     en_LastSignl=en_none;
    226     b_Start=TRUE;
    227 }
    228 
    229 BOOL CCalculatorDemoDlg::OnInitDialog() 
    230 {
    231     CDialog::OnInitDialog();
    232     
    233     // TODO: Add extra initialization here
    234     InitAllDate();
    235     return TRUE;  // return TRUE unless you set the focus to a control
    236                   // EXCEPTION: OCX Property Pages should return FALSE
    237 }
    238 
    239 void CCalculatorDemoDlg::PutIntoNum(int n)
    240 {
    241     CString tem_i;
    242     tem_i.Format("%d",n);
    243     CString temp;
    244     //第一次输入
    245     if (!b_Start)
    246     {
    247         cs_Num[m_i]=tem_i;
    248         b_Start=TRUE;
    249         SetDlgItemText(IDC_EDIT_SHOW,cs_Num[m_i]);
    250         if (!b_Hasport)
    251         {
    252             GetDlgItemText(IDC_EDIT_SHOW,temp);
    253             temp+=".";
    254             SetDlgItemText(IDC_EDIT_SHOW,temp);
    255         }
    256         return;
    257     }
    258     cs_Num[m_i]+=tem_i;
    259     SetDlgItemText(IDC_EDIT_SHOW,cs_Num[m_i]);
    260     if (!b_Hasport)
    261     {
    262         GetDlgItemText(IDC_EDIT_SHOW,temp);
    263         temp+=".";
    264         SetDlgItemText(IDC_EDIT_SHOW,temp);
    265     }
    266 }
    267 
    268 void CCalculatorDemoDlg::InitAllDate()
    269 {
    270     en_LastSignl=en_none;
    271     b_Hasport=FALSE;
    272     b_Start=FALSE;
    273     b_Hasmul=FALSE;
    274     b_Hasdiv=FALSE;
    275     cs_Num[0]="0";
    276     cs_Num[1]="0";
    277     m_i=0;
    278     SetDlgItemText(IDC_EDIT_SHOW,cs_Num[m_i]+".");
    279 }
    280 
    281 void CCalculatorDemoDlg::RunOperation(eum_signl e_signl)
    282 {
    283     // TODO: Add your control notification handler code here
    284     double sum;
    285     double nAdd1;
    286     double nAdd2;
    287     nAdd1=atof(cs_Num[0]);
    288     nAdd2=atof(cs_Num[1]);
    289 
    290     //sum=nAdd1+nAdd2;
    291     switch(e_signl)
    292     {
    293     case en_add:
    294         sum=nAdd1+nAdd2;
    295         break;
    296     case en_sub:
    297         sum=nAdd1-nAdd2;
    298         break;
    299     case en_mul:
    300         sum=nAdd1*nAdd2;
    301         break; 
    302     case en_div:
    303         sum=nAdd1/nAdd2;
    304         break;
    305     }
    306     
    307     cs_Num[0].Format("%g",sum);
    308     SetDlgItemText(IDC_EDIT_SHOW,cs_Num[0]);
    309     if (!b_Hasport && -1==cs_Num[0].Find('.'))
    310     {
    311         CString temp;
    312         GetDlgItemText(IDC_EDIT_SHOW,temp);
    313         temp+=".";
    314         SetDlgItemText(IDC_EDIT_SHOW,temp);
    315     }
    316     m_i = 1;
    317     b_Hasport=FALSE;
    318     b_Start=FALSE;
    319     cs_Num[m_i]="0";
    320 }
    321 
    322 //void CCalculatorDemoDlg::RunOperation(eum_signl en_signl)
    323 //{
    324 
    325 //}
    326 
    327 void CCalculatorDemoDlg::OnBtnC() 
    328 {
    329     // TODO: Add your control notification handler code here
    330     InitAllDate();
    331 }
    332 
    333 // 根号
    334 void CCalculatorDemoDlg::OnBtnSqrt() 
    335 {
    336     // TODO: Add your control notification handler code here
    337     if (!b_Start)
    338     {
    339         return;
    340     }
    341 
    342     double num;
    343     CString temp;
    344     GetDlgItemText(IDC_EDIT_SHOW,temp);
    345     num=atof(temp);
    346     num=sqrt(num);
    347     temp.Format("%lf",num);
    348     if (temp.Find('.')==-1)
    349         SetDlgItemText(IDC_EDIT_SHOW,temp+".");
    350     else
    351         SetDlgItemText(IDC_EDIT_SHOW,temp);
    352 }
    353 
    354 
    355 // %
    356 void CCalculatorDemoDlg::OnBtnPercent() 
    357 {
    358     // TODO: Add your control notification handler code here
    359     
    360 }
    361 
    362 // 1/x
    363 void CCalculatorDemoDlg::OnBtnDown() 
    364 {
    365     // TODO: Add your control notification handler code here
    366     if (!b_Start)
    367     {
    368         return;
    369     }
    370     double num;
    371     CString temp;
    372     GetDlgItemText(IDC_EDIT_SHOW,temp);
    373     num=atof(temp);
    374     num=1/num;
    375     temp.Format("%lf",num);
    376     if (temp.Find('.')==-1)
    377         SetDlgItemText(IDC_EDIT_SHOW,temp+".");
    378     else
    379         SetDlgItemText(IDC_EDIT_SHOW,temp);
    380 }
    381 
    382 // +-
    383 void CCalculatorDemoDlg::OnBtnNequa() 
    384 {
    385     // TODO: Add your control notification handler code here
    386     if (!b_Start)
    387     {
    388         return;
    389     }
    390     double num;
    391     CString temp;
    392     GetDlgItemText(IDC_EDIT_SHOW,temp);
    393     num=atof(temp);
    394     num=0-num;
    395     SetDlgItemText(IDC_EDIT_SHOW , b_Hasport ? temp:temp+".");
    396 }
    397 
    398 // 退格键
    399 void CCalculatorDemoDlg::OnBtnSpace() 
    400 {
    401     // TODO: Add your control notification handler code here
    402     if (!b_Start)
    403     {
    404         return;
    405     }
    406     double num;
    407     CString temp;
    408     int len;
    409     CHAR temp_ch[32];
    410     GetDlgItemText(IDC_EDIT_SHOW,temp);
    411     //AfxMessageBox(temp);
    412     num=atof(temp);
    413     sprintf(temp_ch,"%g",num);
    414     num=0;
    415     //AfxMessageBox(temp_ch);
    416     len=strlen(temp_ch);
    417     int te_i=len-1;
    418     if(temp_ch[te_i]=='.')
    419         te_i-=1,b_Hasport=FALSE;
    420     temp_ch[te_i]='\0';
    421     //////////////////////////////////////////////////////////////////////////
    422     //AfxMessageBox(temp_ch);
    423     if (strlen(temp_ch)==0)
    424     {
    425         temp_ch[0]='0';
    426         temp_ch[1]='\0';
    427     }
    428     //////////////////////////////////////////////////////////////////////////
    429     sscanf(temp_ch,"%lf",&num);
    430     temp.Format("%g",num);
    431     //AfxMessageBox(temp);
    432     SetDlgItemText(IDC_EDIT_SHOW,b_Hasport?temp:temp+".");
    433 }
    CalculatorDemoDlg.h
     1 #if !defined(AFX_CALCULATORDEMODLG_H__6033594F_8916_49DF_B7FE_B09720CC9632__INCLUDED_)
     2 #define AFX_CALCULATORDEMODLG_H__6033594F_8916_49DF_B7FE_B09720CC9632__INCLUDED_
     3 
     4 #if _MSC_VER > 1000
     5 #pragma once
     6 #endif // _MSC_VER > 1000
     7 // CalculatorDemoDlg.h : header file
     8 //
     9 
    10 /////////////////////////////////////////////////////////////////////////////
    11 // CCalculatorDemoDlg dialog
    12 //加减乘除四则运算
    13 enum eum_signl {en_none,en_add,en_sub,en_mul,en_div};
    14 
    15 class CCalculatorDemoDlg : public CDialog
    16 {
    17 // Construction
    18 public:
    19     eum_signl en_LastSignl;
    20     BOOL b_Hasdiv;
    21     BOOL b_Hasmul;
    22     void RunOperation(eum_signl en_signl);
    23     void InitAllDate();
    24     void PutIntoNum(int n);
    25     BOOL b_Hasport;  //是否输入了小数点
    26     BOOL b_Start;    //是否开始输入一个数据
    27     int m_i;         //记录当前使用哪个CString
    28     //存两个数据
    29     CString cs_Num[2];
    30 
    31     CCalculatorDemoDlg(CWnd* pParent = NULL);   // standard constructor
    32 
    33 // Dialog Data
    34     //{{AFX_DATA(CCalculatorDemoDlg)
    35     enum { IDD = IDD_CALC_SLP_DLG };
    36         // NOTE: the ClassWizard will add data members here
    37     //}}AFX_DATA
    38 
    39 
    40 // Overrides
    41     // ClassWizard generated virtual function overrides
    42     //{{AFX_VIRTUAL(CCalculatorDemoDlg)
    43     protected:
    44     virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    45     //}}AFX_VIRTUAL
    46 
    47 // Implementation
    48 protected:
    49 
    50     // Generated message map functions
    51     //{{AFX_MSG(CCalculatorDemoDlg)
    52     afx_msg void OnBtnNo1();
    53     afx_msg void OnBtnNo2();
    54     afx_msg void OnBtnNo3();
    55     afx_msg void OnBtnNo4();
    56     afx_msg void OnBtnNo5();
    57     afx_msg void OnBtnNo6();
    58     afx_msg void OnBtnNo7();
    59     afx_msg void OnBtnNo8();
    60     afx_msg void OnBtnNo9();
    61     afx_msg void OnBtnNo0();
    62     afx_msg void OnBtnPort();
    63     afx_msg void OnBtnAdd();
    64     afx_msg void OnBtnSub();
    65     afx_msg void OnBtnMul();
    66     afx_msg void OnBtnDiv();
    67     afx_msg void OnBtnEquel();
    68     virtual BOOL OnInitDialog();
    69     afx_msg void OnBtnPercent();
    70     afx_msg void OnBtnDown();
    71     afx_msg void OnBtnNequa();
    72     afx_msg void OnBtnSpace();
    73     afx_msg void OnBtnC();
    74     afx_msg void OnBtnSqrt();
    75     //}}AFX_MSG
    76     DECLARE_MESSAGE_MAP()
    77 };
    78 
    79 //{{AFX_INSERT_LOCATION}}
    80 // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
    81 
    82 #endif // !defined(AFX_CALCULATORDEMODLG_H__6033594F_8916_49DF_B7FE_B09720CC9632__INCLUDED_)
  • 相关阅读:
    facebook开源前端UI框架React初探
    javascript中数组的map方法
    处理 InterruptedException——Brian Goetz
    eclipse 打开是报错"reload maven project has encountered a problem"
    Java并发大师Brain Goetz和Doug Lea 的中英文博客文章地址
    修复 Java 内存模型,第 2 部分——Brian Goetz
    修复 Java 内存模型,第 1 部分——Brian Goetz
    正确使用 Volatile 变量——Brian Goetz
    mysql数据备份
    小知识点
  • 原文地址:https://www.cnblogs.com/tk091/p/2454529.html
Copyright © 2020-2023  润新知