C++简单计算器课程设计报告

河南机电高等专科学校

实验课程名称    C++语言程序设计教程与实验          

实验项目名称           计算器                       

系、部计科系  年级2013专业班级软件132(对口)

  贾永翔       1310124             

           2013616-619   

1 课程设计的目的

     在程序设计中,通过设计、编制、调试一个模拟计算器的程序,加深对语法及语义分析原理的理解,并实现对命令语句的灵活应用。

2 课程设计的任务

      实现一个简单计算器。其类似于Windows附件中自带的计算器。

 注:

  1/x :求x分之1

  Sqrt:求当前数的平方根

  AC  :清除所有运行数据

  C   :清除文本框内数据

  +/- :正负号

3 流程图

 

 软件设计

1、创建控件

在图5所示的Resoure View选项卡中打开Dialog资源组,双击IDD_ 09107xuzhujie_DIALOG,在右边的窗口中显示出待编辑的对话框。开始摆放控件,包括编辑框和按钮的创建。按钮的创建以“1”为例进行介绍,其他按钮的创建可参照此进行操作。

1)在图5中Controls的“编辑框”按钮上单击鼠标左键,在对话框编辑窗口上合适的位置按下鼠标左键并拖动鼠标画出一个大小合适的编辑框。在编辑框上单击鼠标右键,在弹出的快捷莱单中选择属性选项,此时弹出Edit属性对话框,如图所示,在该对话框中输入ID属性。

Edit属性对话框

2)在图3中Controls的“Button”按钮上单击鼠标左键,在对话框上的合适的位置上按下鼠标左键并拖动鼠标画出一个大小合适的下压式按钮。在按钮上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时也弹出Push Button属性对话框,如图所示,在该对话框中输入控件的ID值和标题属性。

Push Button属性

按照上面的操作过程编辑其他按钮和编辑框等对象的属性。

表1 各按钮和编辑框等对象的属性

完成后界面如图所示。

 计算器界面

源代码

void CCalculatorDemoDlg::OnBtnNo1()

{

       // TODO: Add your control notification handler code here

       PutIntoNum(1);

}

void CCalculatorDemoDlg::OnBtnNo2()

{

       // TODO: Add your control notification handler code here

       PutIntoNum(2);

}

void CCalculatorDemoDlg::OnBtnNo3()

{

       // TODO: Add your control notification handler code here

       PutIntoNum(3);

}

void CCalculatorDemoDlg::OnBtnNo4()

{

       // TODO: Add your control notification handler code here

       PutIntoNum(4);

}

void CCalculatorDemoDlg::OnBtnNo5()

{

       // TODO: Add your control notification handler code here

       PutIntoNum(5);

}

void CCalculatorDemoDlg::OnBtnNo6()

{

       // TODO: Add your control notification handler code here

       PutIntoNum(6);

}

void CCalculatorDemoDlg::OnBtnNo7()

{

       // TODO: Add your control notification handler code here

       PutIntoNum(7);

}

void CCalculatorDemoDlg::OnBtnNo8()

{

       // TODO: Add your control notification handler code here

       PutIntoNum(8);

}

void CCalculatorDemoDlg::OnBtnNo9()

{

       // TODO: Add your control notification handler code here

       PutIntoNum(9);

}

void CCalculatorDemoDlg::OnBtnNo0()

{

       // TODO: Add your control notification handler code here

       // TODO: Add your control notification handler code here

    //如果第一次输入数字

    if (cs_Num[m_i]=="0")

    {

        return ;

    }

    cs_Num[m_i]+="0";

    SetDlgItemText(IDC_EDIT_SHOW,cs_Num[m_i]);

    if (!b_Hasport)

    {

        CString temp;

        GetDlgItemText(IDC_EDIT_SHOW,temp);

        temp+=".";

        SetDlgItemText(IDC_EDIT_SHOW,temp);

    }

}

void CCalculatorDemoDlg::OnBtnPort()

{

    //已有小数点时

    if (b_Hasport)

    {

        return;

    }

    //无小数点

    cs_Num[m_i]+=".";

    b_Hasport=TRUE;

    b_Start=TRUE;

    SetDlgItemText(IDC_EDIT_SHOW,cs_Num[m_i]);

}

//四则运算符

void CCalculatorDemoDlg::OnBtnAdd()

{

    if (!b_Start)

    {

        return;

    }

    if (en_LastSignl==en_none)

    {

        en_LastSignl=en_add;

    }

    RunOperation(en_LastSignl);

    en_LastSignl=en_add;

}

void CCalculatorDemoDlg::OnBtnSub()

{

    if (!b_Start)

    {

        return;

    }

   

       // TODO: Add your control notification handler code here

    if (en_LastSignl==en_none)

    {

        en_LastSignl=en_sub;

    }

       RunOperation(en_LastSignl);

    en_LastSignl=en_sub;

}

void CCalculatorDemoDlg::OnBtnMul()

{

    if (!b_Start)

    {

        return;

    }

    if (en_LastSignl==en_none)

    {

        cs_Num[1]="1";

        en_LastSignl=en_mul;

    }

   

       RunOperation(en_LastSignl);

    en_LastSignl=en_mul;

}

void CCalculatorDemoDlg::OnBtnDiv()

{

       if (!b_Start)

    {

        return;

    }

    if (en_LastSignl==en_none)

    {

        cs_Num[1]="1";

        en_LastSignl=en_div;

    }

       RunOperation(en_LastSignl);

    en_LastSignl=en_div;

}

void CCalculatorDemoDlg::OnBtnEquel()

{

       // TODO: Add your control notification handler code here

       RunOperation(en_LastSignl);

    //****特殊****

    en_LastSignl=en_none;

    b_Start=TRUE;

}

BOOL CCalculatorDemoDlg::OnInitDialog()

{

       CDialog::OnInitDialog();

      

       // TODO: Add extra initialization here

       InitAllDate();

       return TRUE;  // return TRUE unless you set the focus to a control

                     // EXCEPTION: OCX Property Pages should return FALSE

}

void CCalculatorDemoDlg::PutIntoNum(int n)

{

    CString tem_i;

    tem_i.Format("%d",n);

    CString temp;

    //第一次输入

    if (!b_Start)

       {

        cs_Num[m_i]=tem_i;

        b_Start=TRUE;

        SetDlgItemText(IDC_EDIT_SHOW,cs_Num[m_i]);

        if (!b_Hasport)

        {

            GetDlgItemText(IDC_EDIT_SHOW,temp);

            temp+=".";

            SetDlgItemText(IDC_EDIT_SHOW,temp);

        }

        return;

       }

    cs_Num[m_i]+=tem_i;

    SetDlgItemText(IDC_EDIT_SHOW,cs_Num[m_i]);

    if (!b_Hasport)

    {

        GetDlgItemText(IDC_EDIT_SHOW,temp);

        temp+=".";

        SetDlgItemText(IDC_EDIT_SHOW,temp);

    }

}

void CCalculatorDemoDlg::InitAllDate()

{

    en_LastSignl=en_none;

    b_Hasport=FALSE;

    b_Start=FALSE;

    b_Hasmul=FALSE;

    b_Hasdiv=FALSE;

    cs_Num[0]="0";

    cs_Num[1]="0";

    m_i=0;

    SetDlgItemText(IDC_EDIT_SHOW,cs_Num[m_i]+".");

}

void CCalculatorDemoDlg::RunOperation(eum_signl e_signl)

{

    // TODO: Add your control notification handler code here

       double sum;

       double nAdd1;

    double nAdd2;

    nAdd1=atof(cs_Num[0]);

    nAdd2=atof(cs_Num[1]);

    //sum=nAdd1+nAdd2;

    switch(e_signl)

    {

    case en_add:

        sum=nAdd1+nAdd2;

        break;

    case en_sub:

        sum=nAdd1-nAdd2;

        break;

    case en_mul:

        sum=nAdd1*nAdd2;

        break;

    case en_div:

        sum=nAdd1/nAdd2;

        break;

    }

   

    cs_Num[0].Format("%g",sum);

    SetDlgItemText(IDC_EDIT_SHOW,cs_Num[0]);

    if (!b_Hasport && -1==cs_Num[0].Find('.'))

    {

        CString temp;

        GetDlgItemText(IDC_EDIT_SHOW,temp);

        temp+=".";

        SetDlgItemText(IDC_EDIT_SHOW,temp);

    }

    m_i = 1;

    b_Hasport=FALSE;

    b_Start=FALSE;

    cs_Num[m_i]="0";

}

//void CCalculatorDemoDlg::RunOperation(eum_signl en_signl)

//{

//}

void CCalculatorDemoDlg::OnBtnC()

{

       // TODO: Add your control notification handler code here

       InitAllDate();

}

// 根号

void CCalculatorDemoDlg::OnBtnSqrt()

{

       // TODO: Add your control notification handler code here

       if (!b_Start)

    {

        return;

    }

    double num;

    CString temp;

    GetDlgItemText(IDC_EDIT_SHOW,temp);

    num=atof(temp);

    num=sqrt(num);

    temp.Format("%lf",num);

    if (temp.Find('.')==-1)

        SetDlgItemText(IDC_EDIT_SHOW,temp+".");

    else

        SetDlgItemText(IDC_EDIT_SHOW,temp);

}

// %

void CCalculatorDemoDlg::OnBtnPercent()

{

       // TODO: Add your control notification handler code here

      

}

// 1/x

void CCalculatorDemoDlg::OnBtnDown()

{

       // TODO: Add your control notification handler code here

       if (!b_Start)

    {

        return;

    }

    double num;

    CString temp;

    GetDlgItemText(IDC_EDIT_SHOW,temp);

    num=atof(temp);

    num=1/num;

    temp.Format("%lf",num);

    if (temp.Find('.')==-1)

        SetDlgItemText(IDC_EDIT_SHOW,temp+".");

    else

        SetDlgItemText(IDC_EDIT_SHOW,temp);

}

// +-

void CCalculatorDemoDlg::OnBtnNequa()

{

       // TODO: Add your control notification handler code here

       if (!b_Start)

    {

        return;

    }

    double num;

    CString temp;

    GetDlgItemText(IDC_EDIT_SHOW,temp);

    num=atof(temp);

    num=0-num;

    SetDlgItemText(IDC_EDIT_SHOW , b_Hasport ? temp:temp+".");

}

// 退格键

void CCalculatorDemoDlg::OnBtnSpace()

{

       // TODO: Add your control notification handler code here

       if (!b_Start)

    {

        return;

    }

    double num;

    CString temp;

    int len;

    CHAR temp_ch[32];

    GetDlgItemText(IDC_EDIT_SHOW,temp);

    //AfxMessageBox(temp);

    num=atof(temp);

    sprintf(temp_ch,"%g",num);

    num=0;

    //AfxMessageBox(temp_ch);

    len=strlen(temp_ch);

    int te_i=len-1;

    if(temp_ch[te_i]=='.')

        te_i-=1,b_Hasport=FALSE;

    temp_ch[te_i]='\0';

    //////////////////////////////////////////////////////////////////////////

    //AfxMessageBox(temp_ch);

    if (strlen(temp_ch)==0)

    {

        temp_ch[0]='0';

        temp_ch[1]='\0';

    }

    //////////////////////////////////////////////////////////////////////////

    sscanf(temp_ch,"%lf",&num);

    temp.Format("%g",num);

    //AfxMessageBox(temp);

    SetDlgItemText(IDC_EDIT_SHOW,b_Hasport?temp:temp+".");

}

5 结论与心得体会

经过多番测试,得出结论为设计的计算器能够完成功能描述内容中的全部功能。

认识到不能马虎经常犯犯小错误。要提高自己找错纠错能力,通常错误总是那几种,多练习就熟练了。

要善于查找资料提高自己的资料查询能力,要善于利用网络来获得知识,获得帮助。开始着手程序设计时,有些功能感觉无从下手,都不知道要干什么。这些问题只要找到相关的资料就会得到提示从而理解所要解决问题的大致方向。有了明确的目的,就可以发挥自己的头脑来完成它了。

要善于思考。程序中有些实现难点和最初完成程序时免不了的许多不足就需要自己根据代码认真思考来解决。只有这样才能纠正程序的不足并使其更加人性化。

 

相关推荐