基于mfc的计算器实践报告_第1页
基于mfc的计算器实践报告_第2页
基于mfc的计算器实践报告_第3页
基于mfc的计算器实践报告_第4页
基于mfc的计算器实践报告_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上目录专心-专注-专业1 基本功能描述简单计算器包括双目运算和单目运算功能。双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦,阶乘,对数,开方,倒数等运算。可对输入任意操作数,包括小数和整数及正数和负数进行以上的所有运算并能连续运算。出现错误会给出相应提示,同时包含清除,退格,退出功能以及有与所有按钮相对应的菜单项。2 设计思路如图是整个计算器的流程图,打开计算器程序,输入数据,调用输入数据子程序。子程序开始时m_num为零。按下数字按钮后,判断m_num的正负号,对其进行相关处理,然后在判断是否有小数点,处理后输出结果。回到总流程图中,输完第一个操作数后,

2、若按下双目运算符,则把m_num存入num1,按下输入第二个操作数并算出结果。若按下的是单目运算符,则直接对其处理得出结果。若按下清零,则m_num等于0.在运算中还要判断运算是否合法,以及结果是否超出显示范围,以做出相关提示,按下清零。算出后把结果保存至num1。若需用算出的结果继续运算则回到输入完第一个操作数后,若不需要则判断试否需要开始新一轮的运算,不需要则结束。输入数据子函数用UpdateData(FALSE)刷新显示NNY键入一个数是否为正数?m_num =10*m_num+im_num =10*m_num-i是否为小数?还原m_num根据小数点后位数将键入的数乘以xsw累加到m_n

3、umYN继续键入数字?Y编辑框关联变量m_num=0图1 输入数据子函数流程图突起结束jieY开始输入数据子函数编辑框关联的变量保存至num1输入数据子函数进行运算运算是否合法把结果保存到num1m_num清零弹出对话框显示ERRORNY是否用保存的结果继续进行运算N双目运算符单目运算符是否开始新一轮的计算YN 图2 简单计算器总流程图3 软件设计3.1 设计步骤打开Microsoft Visual Studio2010,在文件中点击新建,在弹出框内选择MFC 应用程序工程,输入工程名Calculate及其所在位置,点击确定,如图3所示。 图3 新建MFC应用程序工程这样在MFC应用程序下建立

4、了一个基于对话窗口的程序框架,如图4所示。图4 新建的对话框3.2 界面设计1、创建控件在图4所示的在资源视图选项卡中打开Calculate资源组,双击IDD_Calculate_DIALOG,在右边的窗口中显示出待编辑的对话框。开始摆放控件,包括编辑框和按钮的创建。表1 各按钮和编辑框等对象的属性对象ID标题或说明编辑框IDC_EDIT1结果显示按钮IDC_BUTTON100按钮IDC_BUTTON11按钮IDC_BUTTON22按钮IDC_BUTTON33按钮IDC_BUTTON44按钮IDC_BUTTON55按钮IDC_BUTTON66按钮IDC_BUTTON77按钮IDC_BUTTON

5、88按钮IDC_BUTTON99按钮IDC_change+/-按钮IDC_point.按钮IDC_plus+按钮IDC_divide-按钮IDC_multiply*按钮IDC_devide/按钮IDC_sqrtsqrt按钮IDC_ reciprocal1/x按钮IDC_jiechengn!按钮IDC_lnln按钮IDC_sinsin按钮IDC_coscos按钮IDC_powxy按钮IDC_equal=按钮IDC_deleteDele按钮IDC_clearClear按钮IDC_pfx2按钮IDC_tanTan 完成后界面如图5所示。 图5 计算器界面2、连接变量和代码1) 给编辑框连接变量。在编

6、辑框上单击鼠标右键,在弹出菜单中选择ClassWizard菜单项,弹出MFC ClassWizard对话框,选择成员变量选项卡,如图6所示。 图6 MFC类向导对话框中的成员变量选项卡在选择 ID列表框中选择IDC_EDIT1,单击添加变量按钮,在弹出的对话框中连接变量m_num。变量类型设定为doubel型。3.3 关键功能的实现1)操作数的输入编辑框所关联的变量为m_num,程序开始时为零。每按下一个数字键按钮,就把它累加到m_num里并刷新显示。整型变量xsd来判断是否有小数点和一个double型xsw来表示小数点后的数据的位数。当xsd=0时,表示无小数点,否则则表示有小数点。按下小数

7、点按钮后执行xsd=1。当按下一个数字键时,首先判断m_numd的正负,再根据xsd判断是否按下小数点,若有则把小数点后数的位数xsw*0.1,将键入的数除以xsw然后正数累加,负数累减到编辑框所关联的变量m_num上,若没有则把m_num乘以10,然后累加或累减到编辑框所关联的变量m_num上。2)单目运算符功能的实现由于单目运算符中必须有执行运算的函数,因而头文件中要加入math.h,如m_num=sqrt(m_num).按下按钮即可实现其功能。3)双目运算符功能的实现双目运算符需要两个操作数才能运算,所以在执行双目运算符按钮的函数代码中,要把m_num中的值保存到变量num1中,然后把m

8、_num清零。这样即可保存第一个操作数。另外先定义了一个整形变量cal,在不同的双目运算符中给cal赋不同的值,然后在等号中用switch语句来匹配cal值来判断需要执行何种双目运算。4)退格键功能的实现当按下一次退格按钮时,若m_num为整数,只需对其中数据除以10再取整(floor()和ceil()函数)即可,若按下一次退格按钮为小数,则根据小数点后数据的位数xsw进行操作,先对xsw乘以10,然后被m_num除取整,接着与xsw相乘即可。4 结论与心得体会经过多番测试,得出结论为设计的计算器能够完成功能描述内容中的全部功能。正所谓“纸上谈兵终觉浅,觉知此事要躬行。”所以在本学期课程设计是

9、很及时、很必要的。这样不仅能加深我们对MFC程序设计的掌握,而且还及时、真正的做到了学以致用。主要是以下几点。基本功要过硬。不能马虎经常犯犯小错误。提高自己找错纠错能力,通常错误总是那几种,多练习就熟练了。要善于查找资料提高自己的资料查询能力,要善于利用网络来获得知识,获得帮助。开始着手程序设计时,有些功能感觉无从下手,都不知道要干什么。这些问题只要找到相关的资料就会得到提示从而理解所要解决问题的大致方向。有了明确的目的,就可以发挥自己的头脑来完成它了。要善于思考。程序中有些实现难点和最初完成程序时免不了的许多不足就需要自己根据代码认真思考来解决。只有这样才能纠正程序的不足并使其更加人性化。5

10、编程中的困难及解决方法描述等号对应的消息处理函数中需要处理的问题及相应的实现代码?答:在双目运算符按钮函数代码中将整形变量cal赋值,然后在等号中用switch语句来匹配cal值来判断需要执行何种双目运算 ,保存结果便于下次计算和一些变量的清零。实现代码见6.3。怎样在编辑框中实现中文字提示?经网上查找,使用SetWindowText("XXXXXXX");可以实现该功能,但是经过多次尝试,却总是出现如下的错误:经过多次查找资料和尝试最终发现需要一个转换的操作就是在用_T()进行转换。如上GetDlgItem(IDC_EDIT1)->SetWindowText(_T(

11、"结果过大,无法显示");就可以了!6 附录6.1 调试报告6.2 测试结果1.输入“90.5”,“-”,“60.7”,“=”,“+”,“2.36”,“ =”,得到结果如图7。图7结果图12.输入“0”,“ln”,结果如图2图7结果图2证明错误提示功能实现正常。6.3 关键源代码1、 数字键0的程序:void CCalculateDlg:OnClickedButton10()if (m_num>=0)if(xsd=0)m_num=m_num*10+0;elsem_num=m_num+xsw*0;xsw*=0.1;UpdateData(false); elseif(xs

12、d=0)m_num=m_num*10-0;elsem_num=m_num-xsw*0;xsw*=0.1;UpdateData(false);2、 加法键+的程序:(-,*,/,x,xy的代码类似)void CCalculateDlg:OnBnClickedplus()cal=1;num1=m_num;m_num=0;xsd=0;xsw=1.0;3、 = 键的程序:void CCalculateDlg:OnBnClickedequal()switch (cal)case 1:m_num=m_num+num1;UpdateData(false); /数ºy据Y刷¡é新

13、?break;case 2:m_num=num1-m_num; /两¢?数ºy相¨¤减?UpdateData(false); /数ºy据Y刷¡é新?break;case 3:m_num=num1*m_num; /两¢?数ºy相¨¤乘?if(m_num>=1.7e308|m_num<-1.7e308)GetDlgItem(IDC_EDIT1)->SetWindowText(_T("结果太大,无法显示!");UpdateData(false); /数&

14、#186;y据Y刷¡é新?break;case 4:if (m_num=0) /在¨²除y法¤¡§中D,ê?判D断?除y数ºy是º?否¤?为a0GetDlgItem(IDC_EDIT1)->SetWindowText(_T("错误,0不能作除数”);else m_num=num1/m_num;UpdateData(false);break;case 5:m_num=pow(num1,m_num);if(m_num>=1.7e308|m_num<-1.7e30

15、8)GetDlgItem(IDC_EDIT1)->SetWindowText(_T("结果太大,无法显示!");UpdateData(FALSE);break;xsw=1.0;xsd=0;cal=0;4、n!键的程序:void CCalculateDlg:OnBnClickedfactorial()int i;if (xsd=0)for (i=m_num;i>0;i-)m_num*=i;elseGetDlgItem(IDC_EDIT1)->SetWindowText(_T("整?数ºy才?能¨¹进?行D阶¡

16、Á乘?运?算?!ê?");if(m_num>=1.7e308|m_num<-1.7e308)GetDlgItem(IDC_EDIT1)->SetWindowText(_T("结¨¢果?太¬?大䨮,ê?无T法¤¡§显?示º?");elseUpdateData(FALSE);xsd=0;xsw=1.0;5、Dele键的程序:void CCalculateDlg:OnBnClickeddelete()if (xsd=0)if (m_num<0)m_num=ceil(m_num/10);elsem_num=flo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论