收藏 分销(赏)

计算器程序设计报告.doc

上传人:a199****6536 文档编号:9904536 上传时间:2025-04-12 格式:DOC 页数:19 大小:193.50KB
下载 相关 举报
计算器程序设计报告.doc_第1页
第1页 / 共19页
计算器程序设计报告.doc_第2页
第2页 / 共19页
点击查看更多>>
资源描述
计算器程序设计报告 19 2020年4月19日 文档仅供参考,不当之处,请联系改正。 计算器程序设计报告 一、设计分析 编写一个计算器程序,要求: 1、界面类似于windows系统中提供的计算器界面; 2、能实现加、减、乘、除、乘方、开方等功能。 界面类似于windows系统中提供的计算器界面,则数字的输入和功能的执行都经过按键来实现,而且能够在显示区域里及时的显示出数据,所用本程序使用VC++提供的高度可视化的应用程序开发工具MFC来实现。 要实现加、减、乘、除、乘方、开方等功能,则在程序中包含"math.h"库函数文件,经过引用相应的函数来实现乘方、开方等功能。在输入第一个计算参数以后,点击需要执行的计算方式,然后输入第二个计算参数,点击“=”按钮,则会在显示区显示出正确的结果。 本程序从设计上来讲,主要分为两个重点部分,一个是数字的输入,即逐个点击单个数字(包括小数点)之后,这些数据能够在显示区正确的显示。第二个是数据的计算,先输入第一个计算参数,然后选择计算方式,再输入第二个计算参数,最后点击“=”按钮,计算结果。 二、程序结构 按照程序的设计,能够分为数据显示模块、数据输入模块、计算方式选择模块、结果计算模块、菜单模块等五个主要模块,其中,数字输入模块和计算模块是重点和难度,这两个模块的流程图如下所示: 1、数字输入的流程图: 点击一个数字键以后,流程开始: 开始 显示框中原来的数据是否继续使用。 是否已经输入小数点。 清除原来的数据; 而且将标识符改为继续使用。 m_num=m_num*10+1; float jishu=1; for(int i=0;i<m_dianshu;i++) jishu=jishu/10; m_num=m_num+jishu; m_dianshu=m_dianshu+1; 数据更新到界面上,显示在显示框 结束 否 是 是 否 2、数据计算的流程: 开始 结束 输入第一个操作数据。 输入第二个操作数据。 点击计算方式按钮,操作方式记入计算方式标识变量中。 数据更新到界面上,显示在显示框 点击“=”按钮后,根据第一个操作数据、计算方式、第二个操作数据进行相应的计算。 是否有后续的数据输入。 是 否 三、各模块的功能及程序说明 按照程序的设计,能够分为数据显示模块、数据输入模块、计算方式选择模块、结果计算模块、菜单模块等五个主要模块,以下逐个说明各模块的功能及程序说明。 1、数据显示模块。数据显示模块显示用户输入的数字和计算器计算的结果,主要由一个数字显示框组成。数字显示框是一个编辑框控件,属性设置为只读模式,不能由用户编辑。在MFC的类向导中,给数字显示框添加一个变量m_num,用来记录数字的变化,当每次操作以后,都会把数字更新到界面上,显示给用户。 2、数据输入模块。数据输入模块用来输入1、2、3、4、5、6、7、8、9、0等十个数字和一个“.”小数点,而且能够进行数据正负的转换。此模块由十个数字按键、一个小数点按键、一个正负转换按键组成。有一个bool型的变量来标识小数点是否已经输入,如果标识为假,则操作的数据为整数,如果标识为真,则操作的数据为小数。在同一个数据的输入中,小数点标识只在第一次点击时有效。每一个按键的操作都由一个函数单独完成,避免相互影响。每一次数据输入,都会更新数据框的显示,达到实时性。 3、计算方式选择模块。计算方式选择用来选择加、减、乘、除、乘方、开方等六个操作,每个计算方式都有一个单独的按钮,每个按钮都有一个单独的函数来执行。用一个int类型的变量m_fuhao来标识计算方式的选择。执行计算方式选择以后,把原先数据框中显示的数据赋值给第一个计算参数m_canshu1,而且对于系统标识变量进行相应的处理。因为对于六个函数来说,这些系统标识变量的相应处理都是相同的,因此把这些系统标识变量整理为一个函数void CJisuanqiDlg::TagFuc(),以利于代码的重复利用。 4、结果计算模块。结果计算模块是点击了“=”按键以后,执行相应的计算,而且输出结果。在其它的模块已经以此执行输入了第一个操作数据、计算方式、第二个操作数据,然后在这里根据这些数据进行计算。如果前面没有完整的执行输入第一个操作数据、计算方式、第二个操作数据,则此模块不做任何处理。在这个模块中,使用switch语句,分别根据计算方式的不同执行相应的操作,其中乘方和开方的操作需要调用"math.h"库函数文件中的pow(m_canshu1,m_canshu2)和sqrt(m_canshu1)函数来实现。执行完计算以后,将结果显示在显示框中,而且对系统标识变量进行一些相应的处理。 5、菜单模块。因为数据显示框中的数据对于用户是只读的,因此当用户在进行使用的时候,不能对数据框中的数据进行复制和粘贴等操作。这样在一定程度上限制了程序使用的方便性。为了解决这个问题,添加了菜单操作模块。菜单由两部分构成,第一个清零、关闭功能,当用户在输入数据的时候,如果不小心输入错误,能够执行清零操作,重新输入。如果用完计算器,能够执行关闭操作,关闭程序的运行。第二部分是编辑功能,包括数据的复制和粘贴功能,这样用户在使用中能够对重要的数据进行复制,先保存起来,然后再需要的时候进行粘贴,方便了用户的操作。 四、源程序 根据程序模块的划分,除显示模块只有变量不进行任何操作,不需要说明源程序外,下面根据模块依次来对其它模块的源程序进行说明。 1、数据输入模块: void CJisuanqiDlg::OnButton1() //Button1是字符1的按键 { // TODO: Add your control notification handler code here if(m_tag==false)//显示框中原来的数据是否继续使用。刚点击过加减乘除乘方开方或者等于按键,则原来的数据不继续使用 { m_num=0; m_tag=true; } if(m_dian==false)//是否已经输入小数点 { m_num=m_num*10+1; //整数,则把新数据加在原来数据之后 } else { float jishu=1; for(int i=0;i<m_dianshu;i++)jishu=jishu/10; m_num=m_num+jishu; m_dianshu=m_dianshu+1;//小数点后的位数再加1 } UpdateData(false); } void CJisuanqiDlg::OnButton12()//Button12是小数点的按键 { // TODO: Add your control notification handler code here if(m_dian==false) m_dian=true; } void CJisuanqiDlg::OnButton19()//Button19是清零的按键 { // TODO: Add your control notification handler code here m_num=0; m_dian=false; m_dianshu=1; m_tag=true; UpdateData(false); } void CJisuanqiDlg::OnButton11()//Button11是正负转换的按键 { // TODO: Add your control notification handler code here m_num=0-m_num; UpdateData(false); } 2、计算方式选择模块: void CJisuanqiDlg::OnButton13()//Button13是加法的按键 { // TODO: Add your control notification handler code here m_fuhao=1; m_canshu1=m_num; TagFuc(); m_tag=false; } void CJisuanqiDlg::OnButton14()//Button14是减法的按键 { // TODO: Add your control notification handler code here m_fuhao=2; m_canshu1=m_num; TagFuc(); m_tag=false; } void CJisuanqiDlg::OnButton15()//Button15是乘法的按键 { // TODO: Add your control notification handler code here m_fuhao=3; m_canshu1=m_num; TagFuc(); m_tag=false; } void CJisuanqiDlg::OnButton16()//Button16是除法的按键 { // TODO: Add your control notification handler code here m_fuhao=4; m_canshu1=m_num; TagFuc(); m_tag=false; } void CJisuanqiDlg::OnButton17()//Button17是乘方的按键 { // TODO: Add your control notification handler code here m_fuhao=5; m_canshu1=m_num; TagFuc(); m_tag=false; } void CJisuanqiDlg::OnButton18()//Button18是开方的按键 { // TODO: Add your control notification handler code here m_fuhao=6; m_canshu1=m_num; TagFuc(); m_tag=false; } void CJisuanqiDlg::TagFuc() { //m_num=0; m_dian=false; m_dianshu=1; m_tag=true; UpdateData(false); } 3、结果计算模块 void CJisuanqiDlg::OnButton20() { // TODO: Add your control notification handler code here if(m_tag==true)//这个判断是为了处理用户点击完“=”,没有点击其它按键再点击“=”,这种情况下,不更新第二个计算参数。 { m_canshu2=m_num; } //if(m_tag==true)m_canshu1=m_num; // CString sTemp; // sTemp.Format("m_canshu1= %f ;m_canshu2= %f \n", m_canshu1,m_canshu2); // MessageBox(sTemp); switch(m_fuhao) { case 1: m_num=m_canshu1+m_canshu2; UpdateData(false); break; case 2: m_num=m_canshu1-m_canshu2; UpdateData(false); break; case 3: m_num=m_canshu1*m_canshu2; UpdateData(false); break; case 4: m_num=m_canshu1/m_canshu2; UpdateData(false); break; case 5: m_num=pow(m_canshu1,m_canshu2); UpdateData(false); break; case 6: m_num=sqrt(m_canshu1);//m_canshu1 UpdateData(false); break; default: break; } //m_num=0; m_canshu1=m_num; m_tag=false; } 4、菜单模块: void CJisuanqiDlg::OnMenuitem32773()//复制 { // TODO: Add your command handler code here m_baocun=m_num; } void CJisuanqiDlg::OnMenuitem32774()//粘贴 { // TODO: Add your command handler code here if(m_baocun!=0)m_num=m_baocun; UpdateData(false); } void CJisuanqiDlg::OnMenuitem32771()//清零 { // TODO: Add your command handler code here OnButton19(); } void CJisuanqiDlg::OnMenuitem32772()//关闭 { // TODO: Add your command handler code here CDialog::OnCancel(); } 五、操作方法 1,输入第一个计算参数,比如:2642、246.78、-578、-2.6; 2,点击选择计算方式,比如:加、减、乘、除、乘方、开方; 3,输入第二个计算参数(注:开方计算只需要一个计算参数,不需要输入第二个计算参数。); 4,点击“=”按键,输入计算结果; 5,由于程序做过处理,能够实现连等操作,多次点击“=”按键计算; 6,在操作过程中,能够对操作框进行复制、粘贴等操作。 六、实验结果 1、输入7865.78,结果如下图显示: 2、执行34+98,结果如下图显示: 3、执行65-87,结果如下图显示: 4、执行26*9,结果如下图显示: 5、执行64%98,结果如下图显示: 6、执行4的3次方,结果如下图显示: 7、执行88的开方,结果如下图显示: 七、设计体会 在这段时间的课程设计中, 与其说是完成设计,我更觉得这是一个学习的过程。在设计过程中,我有很多的知识不懂或者已经淡忘了,可是经过求教于老师和同学,并勤于查阅资料,我又学到了很多的知识。本人真切地感受到此次课程设计带给我的学习动力与兴趣.我相信有了这些,将会对我以后的专业知识学习更加有利. 此次课程设计的顺利完成,还归功于老师殷切的指导和无私的帮助。在此,我向老师们表示衷心地感谢!
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服