简单计算器设计.docx
- 文档编号:8816097
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:17
- 大小:476.23KB
简单计算器设计.docx
《简单计算器设计.docx》由会员分享,可在线阅读,更多相关《简单计算器设计.docx(17页珍藏版)》请在冰豆网上搜索。
简单计算器设计
摘要
本课程设计将实现一个模拟计算器的程序。
其类似于Windows附件中自带的计算器。
这个计算器不仅实现了简单的加、减、乘、除运算功能,还实现了高级的科学计算功能,而且具有简洁大方的图文外观。
它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互信息使用人员能快捷简单地进行操作。
即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。
在课程设计中,系统开发平台为Windows7,程序设计设计语言采用VisualC++,在程序设计中,采用了结构化与面向对象两种解决问题的方法。
关键词模拟程序,计算器,MFC,按钮控件
摘要…………………………………………………………………………………Ⅲ
1需求分析3
1.1系统的基本要求3
1.2数据结构设计及用法3
1.3功能模块3
1.4流程图4
1.5数据结构5
1.6系统实现5
2基本功能描述7
2.1设计思路7
2.2软件设计10
2.3界面设计11
2.4菜单设计15
2.5关键功能实现17
3测试过程及结果20
参考文献23
1需求分析
1.1系统的基本要求
1.算术运算功能。
能够实现+、-、*、/、mod、int运算。
2.函数运算功能。
能够实现exp、ln、sin、x^y、log、cos、x^3、n!
、tan、x^2、1/x等运算。
3.进制之间的转换功能。
能够实现十六、十、二、八进制数据之间的转换。
4.通过键盘控制字符和数字的输入。
1.2数据结构设计及用法说明
此程序调用的函数主要有
基本使用:
用→←↑↓控制鼠标图形移动,当*变量长度参数表*/
加法:
输入一个被加数数,按“+”,输入被加数,按“=”,输出结果。
乘法:
输入一个数,按“*”,输入另个数,按“=”,输出结果。
除法:
输入一个被除数,按“+”,输入另个除数,按“=”,输出结果。
求余:
输入一个数,按“mod”,按“=”,输出结果。
取整:
输入一个数,按“int”,按“=”,输出结果。
八进制转十进制:
输入一个八进制数,按“10->8”,按“=”,输出十进制结果。
十六进制转十进制:
输入一个十六进制数,按下“jz”+“16->10”按“=”,输出十进制结果
1.3功能模块
键盘控制模块:
通过intspecialkey(void)和键盘来实现输入数据,操作方式的控制。
计算模块:
通过调用math.h中的数学函数,如:
+、-、*、/、sin、cos、mod等来实现对result的赋值。
输出模块:
在指定位置输出计算模块中result的值,在指定位置输出键盘控制模块中对参量所赋的值以及在指定位置输出键盘控制模块中得到的运算符。
1.4流程图
图1.1
1.5数据结构
用到了if判断语句,for循环语句,while语句,且主要通过while语句实现对键盘、光标的操作和数据、运算符的输入,还用到了switch语句,switch语句的主要作用是实现对所输入的数据的运算操作,然后将运算结果赋值给result,最后输出。
1.6系统实现(开发工具)
VisualC++6.0是Microsoft公司在1998年推出的基于Windows9X和WindowsNT的优秀集成开发环境。
该环境为用户提供了良好的可视化编程环境,程序员可以里利用该开发环境轻松地访问C++源代码编辑器,资源编辑器和使用内部调试器,并且可以创建项目文件。
VisualC++6.0不仅包括编译器,而且它还包括许多有用组件,通过这些组件的协同工作,可以在VisualC++6.0集成环境中轻松地完成创建源文件,编辑资源,以及对程序的编译,连接和调试等各项工作。
VC++6.0是Windows95/98、XP或WindowsNT下的一个应用程序,本身对软硬件没有特殊要求。
就是说它对环境的要求与Windows95/98、WindowsNT要求是一致的。
硬件要求:
一般在586以上的处理器、16MB以上内存、100MB以上的硬盘。
软件要求:
Windows95/98或WindowsNT3.51以上版本。
VC++6.0系统可以在一张CD盘上,也可以在“VisualStudio(VisualC++、VisualFoxpro)”等产品的第一张CD盘上。
一般都有一个VC的自动安装程序,也可以执行VC6目录下的setup.exe,在安装包的提示下进行,对初学者可采用“典型安装”方式。
在安装好VC6.0系统后,有时根据需要添加或删除某些部件,可插入CD盘重新执行setup.exe安装程序,安装程序会检测当前系统安装VC6的足件,用户单击“添加/删除”按钮后,在“安装维护”对话框中选定要添加的部件或撤消选定要删除的部件。
与一般的应用软件一样,有以下两种启动方式:
(1)通过“开始”按钮,选择“程序”菜单,然后打开“MicrosoftVisualstudio6.0中文版”子菜单中的“MicrosoftVisualC++6.0中文版”程序。
(2)用户也可以使用命令行启动VC。
单击“开始”按钮后选择“运行”命令,在“运行”对话框中输入c:
\ProgramFiles\MicrosoftVisualStudio\VC98\VC6.exe(按默认盘符和路径安装)即可。
2基本功能描述
简单计算器包括双目运算和单目运算功能。
双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦,阶乘,对数,开方,倒数等运算。
可对输入任意操作数,包括小数和整数及正数和负数进行以上的所有运算并能连续运算。
出现错误会给出相应提示,同时包含清除,退格,退出功能以及有与所有按钮相对应的菜单项。
2.1设计思路
如图是整个计算器的流程图,打开计算器程序,输入数据,调用输入数据子程序。
子程序开始时m_num为零。
按下数字按钮后,判断m_num的正负号,对其进行相关处理,然后在判断是否有小数点,处理后输出结果。
回到总流程图中,输完第一个操作数后,若按下双目运算符,则把m_num存入num2,按下输入第二个操作数并算出结果。
若按下的是单目运算符,则直接对其处理得出结果。
若按下清零,则m_num等于0.在运算中还要判断运算是否合法,以及结果是否超出显示范围,以做出相关提示,按下清零。
算出后把结果保存至num2。
若需用算出的结果继续运算则回到输入完第一个操作数后,若不需要则判断试否需要开始新一轮的运算,不需要则结束。
图2.1输入数据子函数流程图
图2.2简单计算器总流程图
2.2软件设计
打开MicrosoftVisualC++6.0,在文件中点击新建,在弹出框内选择MFCAppWizard[exe]工程,输入工程名zhoutong及其所在位置,点击确定,如图2.3所示。
图2.3新建MFCAppWizard[exe]工程
将弹出MFCAppWizard-step1对话框,选择基本对话框,点击完成,如图2.4所示。
图2.4基本对话框
这样,MFCAppWizard就建立了一个基于对话窗口的程序框架,如图2.5所示。
图2.5新建的对话框
2.3界面设计
2.3.1创建控件
在图5所示的ResoureView选项卡中打开Dialog资源组,双击IDD_ZHOUTONG_DIALOG,在右边的窗口中显示出待编辑的对话框。
开始摆放控件,包括编辑框和按钮的创建。
按钮的创建以“1”为例进行介绍,其他按钮的创建可参照此进行操作。
1)在图5中Controls的“编辑框”按钮上单击鼠标左键,在对话框编辑窗口上合适的位置按下鼠标左键并拖动鼠标画出一个大小合适的编辑框。
在编辑框上单击鼠标右键,在弹出的快捷莱单中选择属性选项,此时弹出Edit属性对话框,如图2.6所示,在该对话框中输入ID属性。
图2.6Edit属性对话框
2)在图3中Controls的“Button”按钮上单击鼠标左键,在对话框上的合适的位置上按下鼠标左键并拖动鼠标画出一个大小合适的下压式按钮。
在按钮上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时也弹出PushButton属性对话框,如图2.7所示,在该对话框中输入控件的ID值和标题属性。
图2.7PushButton属性
按照上面的操作过程编辑其他按钮和编辑框等对象的属性。
表2.1各按钮和编辑框等对象的属性
对象
ID
标题或说明
编辑框
IDC_xianshi
结果显示
按钮
IDC_BUTTON0
0
按钮
IDC_BUTTON1
1
按钮
IDC_BUTTON2
2
按钮
IDC_BUTTON3
3
按钮
IDC_BUTTON4
4
按钮
IDC_BUTTON5
5
按钮
IDC_BUTTON6
6
按钮
IDC_BUTTON7
7
按钮
IDC_BUTTON8
8
按钮
IDC_BUTTON9
9
按钮
IDC_change
+/-
按钮
IDC_point
.
按钮
IDC_add
+
按钮
IDC_difference
-
按钮
IDC_multiply
*
按钮
IDC_devide
/
按钮
IDC_sqrt
sqrt
按钮
IDC_daoshu
1/x
按钮
IDC_jiecheng
n!
按钮
IDC_ln
ln
按钮
IDC_sin
sin
按钮
IDC_cos
cos
按钮
IDC_pow
x^y
按钮
IDC_Onequal
=
按钮
IDC_backspace
Backspace
按钮
IDC_Onclear
Clear
完成后界面如图2.8所示。
图2.8计算器界面
2.3.2连接变量和代码
1)给编辑框连接变量。
在编辑框上单击鼠标右键,在弹出菜单中选择ClassWizard菜单项,弹出MFCClassWizard对话框,选择MemberVariables选项卡,如图2.9所示。
图2.9MFCClassWizard对话框中的MenberVariable选项卡
在ControlIDs列表框中选择IDC_xianshi,单击AddVariables按钮,在弹出的对话框中连接变量m_num。
变量类型设定为doubel型。
如图2.10所示。
图2.10m_num属性设置
2)给“1”按钮连接代码。
在“1”按钮上单击鼠标右键,选择ClassWizard菜单项,在弹出的对话框中选择MessagesMaps选项卡,然后在ObjectIDs列表框中选择IDC_ADD_BUTTON,在Messages列表框中选择BN_CLICKED项,即选择单击按钮事件,如图2.11所示。
图2.11“1”按钮链接代码对话框
2.4菜单的设计
选择插入/资源命令,将显示插入资源对话框。
如图2.12所示。
选择Menu,点击新建即可。
图2.12插入资源对话框
ResoureView选项卡中打开Menu资源组,双击IDR_MENU1,然后给菜单添加相应的标题,并把每个菜单对应的ID值与相应的按钮的一致。
如图2.13所示。
图2.13菜单属性对话框
在对话框的任何一个空白域单击鼠标右键,然后在弹出的快捷菜单中选择Properties命令,弹出DialogProperties对话框,如图2.14。
在对话框中的菜单组合框中选择IDR_MENU1。
图2.14对话属性对话框
最终的得到的界面如图2.15。
图2.15计算器完整界面
2.5关键功能的实现
1)操作数的输入
编辑框所关联的变量为m_num,程序开始时为零。
每按下一个数字键按钮,就把它累加到m_num里并刷新显示。
BOOL型变量ele来判断是否有小数点和一个整型数dint来表示小数点后的数据的位数。
当ele=TRUE时,表示有小数点,否则则表示无小数点。
按下小数点按钮后执行ele=TRUE。
当按下一个数字键时,首先根据ele判断是否按下小数点,若有则把小数点后数的位数加1,dint则为此次键入的数所处的位数,将键入的数除以dint个10然后累加到编辑框所关联的变量m_num上,若没有则把m_num乘以10,然后累加到编辑框所关联的变量m_num上。
2)单目运算符功能的实现
由于单目运算符中必须有执行运算的函数,因而头文件中要加入math.h,如m_num=sqrt(m_num).按下按钮即可实现其功能。
为实现连续运算,程序有所改动,参见(6)。
3)双目运算符功能的实现
双目运算符需要两个操作数才能运算,所以在执行双目运算符按钮的函数代码中,要把m_num中的值保存到变量num2中,然后把m_num清零。
这样即可保存第一个操作数。
另外先定义了一个整形变量addt,在不同的双目运算符中给addt赋不同的值,然后在等号中用switch语句来匹配addt值来判断需要执行何种双目运算。
为实现连续运算,程序有所改动,参见(6)。
4)退格键功能的实现
当按下一次退格按钮时,若m_num为整数,只需对其中数据除以10再取整即可,若按下一次退格按钮为小数,则根据小数点后数据的位数dint进行操作,先对m_num执行(dint-1)次乘以10运算,然后取整,接着执行(dint-1)次除以10的运算即可。
完成后需要把dint将减小1。
5)正负号功能的实现
在头文件中定义一个BOOL型变量ele2来判断m_num的正负。
ele2=TRUE时表示为正。
在键入操作数时需要用到ele2。
在正负号按钮的消息响应函数内容为m_num=-m_num;ele2=!
ele2。
6)连续运算功能的实现
要连续运算必须将每次运算的结果保存下来。
对于双目运算符:
首先在等号按钮的消息处理函数中在m_num清零之前将m_num的值赋给num2.不过这样的话如果再按双目运算符则num2的值将会被覆盖,于是在双目运算符按钮的消息处理函数中将“num2=m_num;”改为“if(m_num!
=0)num2=m_num;”.这样若已经保存了结果则不进行覆盖。
然后在每个数字按钮前加上“if(addt==0)num2=0;”,这样如果进行完一次运算之后按下任一数字键表示不需要连续运算,则将保存的结果删除,若按下的是双目运算符按钮则可以继续运算。
对于单目运算符:
每次运算完之后都会对m_num清零,因此其结果也要赋给num2,下次运算是则会用到num2,于是第一次运算时直接将m_num的值赋给num2,对其进行运算。
以开根号为例,在消息处理函数代码中将“m_num=sqrt(m_num);”改为“num2=m_num;m_num=sqrt(num2);num2=m_num;”。
但是第一次运算执行完成之后m_num被清零,所以之后将m_num的值不能赋给num2,代码改为“if(m_num>=0)m_num=sqrt(num2);num2=m_num;”。
其他单目运算符同理。
为实现连续运算是不需要按下等号即可实现,又在所有的运算符按钮的消息处理函数代码前加上了“if(addt!
=0)Onequal();”。
既若之前有按下双目运算符和两个操作数则连续运算再按下任一运算符时会自动调用等号的处理函数将上次的运算完成并保存结果方便下一次的运算。
3测试过程及结果
1.输入“90.5”,“-”,“60.7”,“+”,“2.36”,“=”,并在菜单中同样输入这组操作,均得到结果如图3.1。
图3.1结果图1
结果正确,证明可以实现双目运算符的连续运算,菜单功能正常。
2.输入“901”,“+/-”,“backspace”,“+”,“120”,“sin”,结果如图3.2
图3.2
因为π取的是3.1415926,因此与0.5有小小偏差,认为结果正确。
证明可以实现单目运算符的连续运算与backspace回格功能。
3.输入“0”,“ln”,结果如图3.3
图3.3
证明错误提示功能实现正常。
4结论与心得体会
经过1个星期的VC++课程设计,我在老师和同学的共同帮助下,顺利完成该课程设计,收获很大。
我们已经学习了《C++课程设计》和《数据结构》,对老师所讲的知识也有了很大的认识。
正所谓“纸上谈兵终觉浅,觉知此事要躬行。
”所以在本学期课程设计是很及时、很必要的。
这样不仅能加深我们对程序设计的掌握,而且还及时、真正的做到了学以致用。
主要是以下几点。
基本功要过硬。
不能马虎经常犯犯小错误。
提高自己找错纠错能力,通常错误总是那几种,多练习就熟练了。
要善于查找资料提高自己的资料查询能力,要善于利用网络来获得知识,获得帮助。
开始着手程序设计时,有些功能感觉无从下手,都不知道要干什么。
这些问题只要找到相关的资料就会得到提示从而理解所要解决问题的大致方向。
有了明确的目的,就可以发挥自己的头脑来完成它了。
要善于思考。
程序中有些实现难点和最初完成程序时免不了的许多不足就需要自己根据代码认真思考来解决。
只有这样才能纠正程序的不足并使其更加人性化。
这次课程设计让我学到了很多,不仅是巩固了先前学的程序设计知识,而且也培养了我的动手能力,更令我的创造性思维得到拓展。
希望今后类似这样课程设计、类似这样的锻炼机会能更多些!
参考文献
[1]揣锦华.面向对象程序设计与VC++实践.西安电子科技大学出版社,2005
[2]张建宏,汤练兵,马德骏.计算机程序设计基础-C语言程序设计.科学出版社,2006
[3]陈清华.VisualC++课程设计案例精选与编程指导.东南大学出版社,2004
[4]严华峰.VisualC++课程设计案例精编.北京:
中国水利水电出版社,2002
[5]张宏军,党留群,赵天巨.VisualC++6.0编程案例精解.北京:
电子工业出版社,2005
[6]郑阿奇,丁有和.VisualC++教程.北京:
机械工业出版社,2006
........忽略此处.......
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简单 计算器 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)