当前位置:文档之家› 简单计算器c++课程设计讲解

简单计算器c++课程设计讲解

简单计算器1 基本功能描述简单计算器包括双目运算符和单目运算符。

双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦、阶乘、对数、开方、倒数等运算。

可对输入任意操作数包含小数和整数及正数和负数进行以上的所有运算并能连续运算。

出现错误会给出提示,同时包含清除、退格、退出功能以及有与所有按钮相对应的菜单项。

2 设计思路如图1,是输入数据子函数的流程图。

打开计算器程序,输入数据,判断此次输入之前是否有数字输入,如果有,则在之前输入的数字字符后加上现有的数字字符;如果没有,则直接使编辑框显示所输入的数字字符。

判断是否继续键入数字,如果是,则继续进行前面的判断,如果否,则用UpdateData(FALSE)刷新显示。

如图2,是整个计算器的流程图。

对于输入的算式,判断运算符是双目运算符还是单目运算符。

如果是双目运算符,则把操作数存入数组a[z+2]中,把运算符存入b[z+1]中;如果是单目运算符,则把字符串转化为可计算的数字,再进行计算。

下面判断运算符是否合法,如果合法,则将结果存入a[0],不合法,则弹出对话框,提示错误。

结束程序。

输入一个数字在之前输入的数字字符后面加上现在的数字字符。

Eg :m_str+=”9”。

直接使编辑框显示所输入的数字字符。

Eg :m_str=”9”。

pass3=1表示已有数字输入开始之前是否有数字输入? pass3==1?继续键入数字?用UpdateData(FALSE)刷新显示图1 输入数据子函数流程图YNYN输入开始双目运算符是否每一个操作数都存入a[]数组?把操作数存入a[z+2],把运算符存入b[z+1]。

单目运算符将字符串转换为可计算的数进行运算运算是否合法?将结果存入a[0]弹出对话框提示错误结束YYNN图2 简单计算器总流程图3 软件设计3.1设计步骤打开Microsoft Visual C++6.0,在文件中点击新建,在弹出框内选择MFC AppWizard[exe]工程,输入工程名及其存储路径,点击确定,如图3所示。

图3 新建MFC AppWizard[exe]工程将弹出MFC AppWizard-step1对话框,选择基本对话框,点击完成,如图4所示。

图4 基本对话框这样,MFC AppWizard就建立了一个基于对话窗口的程序框架,如图5所示。

图5 新建的对话框3.2界面设计1、创建控件在图5所示的Resoure View选项卡中打开Dialog资源组,双击IDD_LUXIAOYING_DIALOG,在右边的窗口中显示出待编辑的对话框。

开始摆放控件,包括编辑框和按钮的创建。

按钮的创建以“0”为例进行介绍,其他按钮的创建可参照此进行操作。

1)在图5中控件的“编辑框”按钮上单击鼠标左键,在对话框编辑窗口上合适的位置按下鼠标左键并拖动鼠标画一个大小合适的编辑框。

在编辑框上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时弹出Edit属性对话框,如图6所示,在该对话框中输入ID属性。

图6 Edit属性对话框2)在图5中控件的“Button”按钮上单击鼠标左键,在对话框上的合适的位置按下鼠标左键并拖动鼠标画出一个大小合适的下压式按钮。

在按钮上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时弹出Push Button属性对话框,如图7所示,在该对话框中输入ID值和标题属性。

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

表1 各按钮和编辑框等对象的属性对象ID 标题或说明编辑框IDC_RESULT_EDIT 显示按钮IDC_0_BUTTON1 0按钮IDC_1_BUTTON2 1按钮IDC_2_BUTTON3 2按钮IDC_3_BUTTON4 3按钮IDC_4_BUTTON5 4按钮IDC_5_BUTTON6 5按钮IDC_6_BUTTON7 6对象ID 标题或说明按钮IDC_7_BUTTON8 7按钮IDC_8_BUTTON9 8按钮IDC_9_BUTTON10 9按钮IDC_OR_BUTTON11 +/-按钮IDC_DIAN_BUTTON12 .按钮IDC_JIA_BUTTON13 +按钮IDC_JIAN_BUTTON14 -按钮IDC_CHENG_BUTTON15 *按钮IDC_CHU_BUTTON16 /按钮IDC_CLEAR_BUTTON17 Clear 按钮IDC_SQRT_BUTTON18 sqrt按钮IDC_DAOSHU_BUTTON19 1/x按钮IDC_DENGYU_BUTTON20 =按钮IDC_LN_BUTTON21 ln按钮IDC_MI_BUTTON22 10^x按钮IDC_COS_BUTTON23 cos按钮IDC_SIN_BUTTON24 sin按钮IDC_TUIWEI_BUTTON Backspace 按钮IDC_LOG_BUTTON26 log对象ID 标题或说明按钮IDC_TAN_BUTTON27 tan按钮IDC_JIECHENG_BUTTON28 n!完成后界面如图8所示图8 计算机界面2 连接变量和代码1)给编辑框连接变量。

在编辑框上单击鼠标右键,在弹出的菜单中选择建立类向导菜单项,弹出MFC ClassWizard对话框,选择Member Variables选项卡,如图9所示。

2)在Control IDs列表框中选择IDC_RESULT_EDIT,单击Add Variables按钮,在弹出的对话框中连接变量m_str。

变量类型设定为CString型。

如图10所示。

图9 MFC ClassWizard对话框中的Member Variables选项卡图10 m_str属性设置2)给“0”按钮连接代码。

在“0”按钮上单击鼠标右键,选择建立类向导菜单项,在弹出的对话框中选择Messages Maps选项卡,然后在Object IDs列表框中选择IDC_0_BUTTON1,在Messages列表框中选择BN_CLICKED项,即选择单击按钮事件,如图11所示。

图11 “0”按钮连接代码对话框3 菜单的设计选择插入/资源命令,将显示插入资源对话框,如图12所示。

选择Menu,单击新建即可。

图12 插入资源对话框Resoure View选项卡中打开Menu资源组,双击IDR_MENU1,然后给菜单添加相应的标题,并把每个菜单对应的ID值与相应的按钮的一致。

如图13所示。

图13 菜单属性对话框在对话框的任何一个空白域单击鼠标右键,然后在弹出的快捷菜单中选择属性命令,弹出对话属性对话框,如图14所示。

在对话框中的菜单组合框中选择IDR_MENU1。

图14 对话属性对话框最终得到的界面如图15所示。

图15 计算器完整界面3.3 关键功能的实现1)操作数、小数点以及双目运算符的输入编辑框所关联的变量为m_str,程序开始时为零。

每按下一个数字键按钮、双目运算符按钮或小数点按钮,就把它累加到m_str里并刷新显示。

BOOL型变量pass1判断之前是否有操作符输入,有,则pass为1;无,则为0。

BOOL型变量pass2判断是否有小数点,有,则为0;无,则为1;BOOL型变量pass3判断之前是否有数字输入,有,则为0;无,则为1。

2)单目运算符功能的实现由于所输入的操作数类型为String类,所以需要将其转化为数字才能进行运算。

首先,将比率rate赋值为10,将每一位输入的字符与’0’字符做差,得到他们ASCII值的差,在遇到小数点之前,将这些差值通过循环求和以及乘以rate值得到字符串所表达的数值的整数部分,然后,当遇到小数点时,将rate 赋值为0.1,再通过类似的计算方法得到字符串所表达的数值的小数部分,最后,将所得数值的整数部分和小数部分合在一起赋值给变量a,再通过单目运算符作用于a上即可实现相应功能。

3)双目运算符功能的实现由于所输入的操作数类型为String类,所以要通过与单目运算符中类似的方法将其转换为数值,再进行相关运算。

对于双目运算符功能中操作数和操作符的区分,可以将它们分别存储在数组a[]中和数组b[]中加以区分,再进行计算。

4)退格键功能的实现如果m_str中有字符串,则每次按下退位键都将去掉最右边一个字符剩下的字符串重新赋值给m_str,从而实现退位功能。

如果,m_str中本来就没有字符串,则将字符’0’赋值给m_str。

5)正负号功能的实现由于所输入的操作数类型为String类,所以要通过与单目运算符中类似的方法将其转换为数值,再进行相关运算。

对于正负号功能,只要在原来数值的前面加一个负号,即可实现相应功能。

4结论与心得体会经过多次调试,设计的计算器可以实现本次要求的所有功能。

此次VC++课程设计,在同学的帮助下,顺利完成,收获也很大。

本学期我们开设了《面向对象程序设计与VC++实践》这门课,其中MFC部分皆是需要实践的,所以,此次课程设计是很及时、很有必要的。

这样,不仅能加深我们对MFC程序设计的掌握,而且,还能让我们真正做到学以致用。

课程设计刚开始的时候,觉着比较轻松,毕竟上课时做过简单计算器,觉着这次的题目也不会太难。

后来,通过老师的讲解,发现这次课程设计与平时做的计算器有很多不同,不仅需要考虑运算的优先级,还需要实现连续运算,而且还有单目运算与双目运算的不同等一系列新的问题。

但是,真正开始做的时候,通过查找资料和与同学的交流,渐渐有了头绪。

在完成过程中,仍然避免不了会遇到一些问题,这时,不仅需要思考,还需要查阅相关资料来解决。

当然,做课程设计,基本知识是必备的。

只有具有了一定的基础知识,才能在课程设计过程中高质高效完成。

同时,也不能请示任何一道题,每一道题都有它自己的难点。

这次课程设计让我学到了很多,不仅巩固了先前学的MFC程序设计知识,而且也培养了我的实践能力,将理论知识与实践联系起来,更令我的创造性思维得到了拓展。

希望以后类似这样的课程设计、这样的实践机会能多一些。

5思考题1、程序中如何实现小数的显示与运算?答:编辑框所关联的变量为Cstring类的m_str,当输入小数点时,直接将字符’.’加在之前已输入字符后面即可。

运算时,通过BOOL型变量pass2判断是否有小数点,有,则为0;无,则为1。

当有小数点时,在把已输入的字符串转化为相应数值时,乘以的比率rate为0.1,且每乘一次,都使rate值变为原来rate值的十分之一,之后由于头文件中加了“math.h”,故,再通过进行相关数学运算即可得到结果。

2、描述等号对应的消息处理函数中需要处理的问题及相应的实现代码?答:等号对应的消息处理函数中需要实现双目运算符的功能和连续运算,同时还要解决运算优先级的问题,另外还需要有相应的错误提示。

实现代码:void CLuxiaoyingDlg::OnDengyuButton20(){// TODO: Add your control notification handler code hereint i, j, z, s, x=0, y=1, t, m=1;char b[10];double rate=10.0, itemp=0.0,a[20], l;for(i=0;i<20;i++)a[i]=100000000.0;for(i=0;i<10;i++)b[i]=' ';//以下为双目运算;z=0;for(i=0;i<m_str.GetLength();i++)//GetLength获得当前字节文件的逻辑//长度{if(isdigit(m_str.GetAt(i)))//isdigit 若参数c为阿拉伯数字,则//返回TRUE,否则返回NULL(0)。

相关主题