ImageVerifierCode 换一换
格式:DOCX , 页数:37 ,大小:432.76KB ,
资源ID:11119198      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11119198.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(MFC简单计算器设计正文.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

MFC简单计算器设计正文.docx

1、MFC简单计算器设计正文实用计算器程序1.基本功能描述计算器是人们日常生活中非常实用的计算工具。预期设计目标与实际计算器为标准,Windows10系统提供的计算器为范例进行设计。实用计算器 要实现单目运算和双目运算。单目运算主要包括阶乘、正弦、余弦;双目运算主要包括加、减、乘、除、乘幂等。计算器要能够对输入的各种数据进行处理,包括小数、整数、负数等数据进行操作。实际过程中要能够对不同的数据灵活判断执行。同时要能够对不满足运算符的操作数,提示出错信息以方便用户进行处理。用户的修改包括清屏和退格。程序设计的重点和难点在于:第一,能够对于不同的操作数和操作符进行连续运算,运算过程中要有优先级的判断,

2、根据优先级执行不同的运算顺序;第二,能够用一个编辑框实现运算表达式的显示和结果的输出。编程环境采用Visual Studio2017提供的MFC建立对话框应用程序,设计界面要简单大方,并提供程序所有功能的接口。2.设计思路表1操作符优先级设计优先级操作符1阶乘、正弦、余弦2乘幂3乘、除4加、减对对话框编辑框关联一个变量从中读取数据,按下数字键时对数据数组num进行更新,其中num0表示的是当前已经存储变量的个数。由于算法设计为四层优先级,且单目运算的优先级最高。当按下相应单目运算符,首先将当前数据数组的最后一个存储(防止按下Backspace退格发生错误),并将此位数据执行运算后重新赋值。但按

3、下双目运算符相应按键后,将计数num0+,同时将运算符的类型和位置记录。当按下等于之前,这样就将一个单目双目混合的运算表达式转化为双目运算。如果没有按下等号键,则继续执行循环。在按下等号按钮之后,按照先乘幂、再乘除、后加减的运算顺序执行运算,将最后结果保存并显示。(在实际的计算器中,执行完运算之后,按下运算符的操作键,最终结果将按照左操作数的形式出现,故需要保存变量。)如果用户没有结束程序,在运行初始化程序,进行下一次运算,否则直接退出。图1程序流程图3.软件设计3.1 设计步骤1)创建基于对话框的程序利用AppWizard建立应用程序框架,创建一个基于对话框的MFC工程,命名为“fengwa

4、njincalculator”,如图2所示。在图3显示的应用程序类型中选择基于对话框。创建成功后,系统自动生成相应程序文件。图2创建MFC工程图图3应用程序类型选择图2)定义成员变量添加相应变量和标志位,以方便程序的编写,主要变量如表2所示:表2成员变量表变量名变量类型变量作用mystrCString编辑框关联变量m_editFontCFont设置编辑框字体numfloat存储操作数flagdianbool点号标志位flagdengyubool等号标志位flagerrorbool错误标志位Jiajianint存储加减运算符的位置4)添加事件处理程序MFC应用程序是通过消息响应来进行各项操作的,

5、必须在对话类中加入消息处理函数来处理这些事件。当点击相应控件,在进入WinMain函数之前,每个可以响应消息的MFC类都生成了一个消息映射表,程序运行时通过查询该表判断是否需要响应某条消息。在相应控件单击右键,弹出图4,选择添加事件处理程序,在图5的事件处理程序向导中选择fengwanjincalculatorDlg类,消息类型选择为BN_CLICKED,即左键单击。图4添加事件处理程序图5选择添加事件处理程序类型在完成上述操作后MFC使用ClassWizard帮助实现消息映射,它在源码中添加一些消息映射的内容,并声明和实现消息处理函数。首先,在类的定义(头文件)里,它增加了消息处理函数声明,

6、并添加一行声明消息映射的宏DECLARE_MESSAGE_MAP。在类的实现(实现文件)里,实现消息处理函数,并使用IMPLEMENT_MESSAGE_MAP宏实现消息映射。BEGIN_MESSAGE_MAP*END_MESSAGE_MAP3.2 界面设计图5向对话框添加控件在项目的资源视图中找到位于Dialog下的对话框,如图4所示。添加相应控件,完成用户界面设计。图6用户界面设计 其中编辑框行为下Multiline属性设置为True,作为多行编辑框。第一行显示算式,第二行结果。整体上将控件分为四组,数值控件区NUM,加减乘除一般运算控件区NORMAL,阶乘、乘幂、正余弦科学运算控件区SCI

7、ENCE以及清零退格控件。设计完成后的界面如图7所示。图7用户界面 设计的界面中只有编辑框关联Cstring类型变量mystr。其余控件关联相应的消息处理函数。3.3 关键功能的实现 程序主要分为数值、单目运算、双目运算、清除等。1) 数值控件消息处理函数void CfengwanjincalculatorDlg:OnBnClickedButton1() shuzihanshu(L1, 1);考虑到09数字的处理函数有很大的相似处,所以都采用调用shuzhihanshu函数的方法执行。shuzhihanshu包含两个参数,分别是数值对应字符和相应数值。其具体实现如下:void Cfengwan

8、jincalculatorDlg:shuzihanshu(char shuzi, intshuzhi)/09对应函数 UpdateData(TRUE); if (flagdengyu) OnBnClickedButtonClear(); flaglast = 0; mystr += shuzi; data = shuzhi; changevalue(); UpdateData(FALSE);首先,判断再点击数值控件之前是否按下等号键,如果按下执行OnBnClickedButtonClear(),即执行清除函数,然后将单击的数值显示在编辑框中。如果之前没有单击等号,则直接将数值添加到显示字符串的

9、最后,通过UpdateData(FALSE)更新编辑框控件。同时需要将数值传递给data,通过changevalue()函数改变数值数组中的数值。2)双目运算消息处理函数 void CfengwanjincalculatorDlg:OnBnClickedButtonJia()/加 sincos(); if (flaglast = 0)|(flaglast = jiecheng) shuangmusuanfu(L+, jia); flaglast = jia; jiajian0+; jiajianjiajian0 = 1; 双目运算首先设置相应标志和参数的改变,其主要的函数体部分由shuangm

10、usuanfu函数概括,其中jia参量为用枚举定义的一个常量。枚举定义如下:enumsuit jia = 1 , jian , cheng , chu , jiecheng , zhishu , Sin , Cos ;shuangmusuanfu中函数实现部分:函数体中首先对是否按下等号是否有表达式错误进行判断,如果相应标志为1,则转到相应处理函数,否则将算符存储,数值计数器num0加一。3)清除函数 void CfengwanjincalculatorDlg:OnBnClickedButtonClear() UpdateData(TRUE); mystr = L; flagdian = 0;

11、 beishu = 1; flagerror = 0; data = 0; flagdengyu = 0; for (inti = 0; iLoadIcon(IDR_MAINFRAME); / 自添加 flagdian = 0; beishu = 1; flagerror = 0; data = 0; flagdengyu = 0; for (inti = 0; iSetFont(&m_editFont); / 设置新字体5、清屏函数void CfengwanjincalculatorDlg:OnBnClickedButtonClear() / TODO: 在此添加控件通知处理程序代码 Upd

12、ateData(TRUE); mystr = L; flagdian = 0; beishu = 1; flagerror = 0; data = 0; flagdengyu = 0; for (inti = 0; i= 48 & temp = 57) if (!flagdian) num(int)num0 = (num(int)num0 - (temp - 48) / 10; else num(int)num0 = num(int)num0 - (temp - 48)*beishu; beishu *= 10; mystr = mystr.Left(mystr.GetLength() - 1

13、); else if (temp = .) flagdian = 0; mystr = mystr.Left(mystr.GetLength() - 1); else num0-; switch (temp) case 43: case 45: jiajianjiajian0 = 0; jiajian0-; mystr = mystr.Left(mystr.GetLength() - 1); break; case 42: case 47: chengchuchengchu0 = 0; chengchu0-; mystr = mystr.Left(mystr.GetLength() - 1);

14、 break; case 33: num0+; num(int)num0 = nextdata2 * (int)nextdata0; nextdata2 * (int)nextdata0 - 1 = 0; nextdata0-; mystr = mystr.Left(mystr.GetLength() - 1); break; case 94: mizhimizhi0 = 0; mizhi0-; mystr = mystr.Left(mystr.GetLength() - 1); break; case 110: num0+; num(int)num0 = nextdata2 * (int)nextdata0; nextdata2 * (int)nextdata0 - 1 = 0; nextdata0-; mystr = mys

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1