VC++實現標準型計算器步驟及源碼

VC++實現標準型計算器步驟及源碼

    最近一段時間一直在作這個東西,剛剛拿到題目的時候認爲這是一個簡單的程序,但是隨着編寫程序的深刻,發現這也不是一個很簡單的程序,主要是須要考慮到一些連續加減以及混合運算的狀況。
   首先介紹一下這個小計算器的功能。其實也沒有什麼新的功能啦,只是有一些簡單的+、-、*、/運算,可以完成混合運算,是一個標準型的計算器。
 
創建文件
(1)創建應用程序外殼
    建立一個新的AppWizard項目,命名爲shiyan,選擇Dialog based;其餘都選用默認屬性,單擊Finish完成生成應用程序的步驟。
VC++標準型計算器(個人原創噢!)
    進入對話框界面之後,按下圖所示佈置顯示框和功能按鈕,這個小計算器一共須要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.  
    }

 

「-」號鍵程序:html

 

  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.  
    }
相關文章
相關標籤/搜索