已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MFC 实现简易计算器姓 名 柳 超学 号 2012077501专 业 计算机科学与技术指导老师 蒋年德2013 年 01 月 12 日高级语言程序设计课程作业报告1一、 设计题目设计一个基于对话框的简单计算器,实现整数、小数的加减乘除四则运算以及开方、阶乘、取对数等操作。二、 运行环境硬件:Haier A60 Notebook,Celeron M 1.86GHz512MB250GB软件:Windows xp professional 5.1,visual C+ 6.0三、 算法设计的思想打开计算器程序,输入数据,开始时编辑框成员变量 m_num 初始化为零。按下数字按钮后,根据 bool 型变量 b_zf 判断 m_num 的正负号,对其进行相关处理,然后在判断是否有小数点,处理后输出结果。同时根据 judge 的大小,判断是单目运算还是双目运算,进入不同的处理程序,最终输出结果。若按下双目运算符,则把 m_num 存入 num2,按下输入第二个操作数并算出结果。若按下的是单目运算符,则直接对其处理得出结果。若按下清零,则 m_num等于 0.在运算中还要判断运算是否合法,以及结果是否超出显示范围,以做出相关提示,按下清零。算出后把结果保存至 num2。若需用算出的结果继续运算则回到输入完第一个操作数后,若不需要则判断试否需要开始新一轮的运算,不需要则结束。高级语言程序设计课程作业报告2四、 流程图NYNNYM_num=0,键入一个数是否为正数?m_num =10*m_num+im_num =10*m_num-i是否为小数?用 UpdateData(FALSE)刷新显示还原 m_num根据小数点后位数将键入的数除以 n 次 10 累加到 m_numYN继续键入数字?单目运算 双目运算进入对应单目运算程序员Num2=m_num输入数据,给 m_num计 算结果并显示继续输入运算开始结束Y高级语言程序设计课程作业报告3五、 算法分析设计在 visual C+ 6.0 中新建一个 MFC APPWizardexe工程文件,文件名为 CALU,应用程序类型选为基本对话,完成后,在 Dialog 中画出计算器的基本控件,包括 010个数字按钮,符号转换按钮 “+/-”,小数点符号 “.”,加、减、乘、除四个双目运算符按钮,开方 “sqrt”,阶乘“n!”,取对数“ln”等三个单目运算符按钮,计算并显示运算结果的等于号“=”按钮,以及用于退回的“backspace”按钮,清除“clear”按钮和退出“exit”按钮,一个编辑框,用于显示运算值。最后给每个控件定义 ID 号和标题。定义七个变量:bool b_point;/判断是否有小数点,true 无小数点 false 有小数点;bool b_zf;/判断是正数还是负数,true 正 false 负int i;int judge;/判断运算类型,单目运算或双目运算,在不同的双目运算符中给judge 赋不同的值,然后在等号中用 switch 语句来匹配 judge 值来判断需要执行何种双目运算。int n_point;/判断小数点后的位数double num1;/中间变量double num2;/用于双目运算中存储其中一个运算值最后为编辑框定义一个 double 型的成员变量 m_num,用于在显示框中显示。依次双击每个按钮,为所有按钮添加单击按钮事件。操作数的输入:开始时 m_num=0,每按下一个数字键按钮,就把它累加到m_num 里并刷新显示。BOOL 型变量 b_point 来判断是否有小数点和一个整型数 n_point来表示小数点后的数据的位数。当 b_point=TRUE 时,表示有小数点,否则则表示无小数点。按下小数点按钮后执行 b_point=TRUE。当按下一个数字键时,首先根据b_point 判断是否按下小数点,若有则把小数点后数的位数加 1,n_point 则为此次键入的数所处的位数,将键入的数除以 n_point 个 10 然后累加到编辑框所关联的变量m_num 上,若没有则把 m_num 乘以 10,然后累加到编辑框所关联的变量 m_num 上。具体操作代码:按钮 1:19 代相同,在此只列举按钮 1 的操作过程。void CCALUDlg:OnButton1() if(judge=0)num2=0;高级语言程序设计课程作业报告4if(b_zf=TRUE)m_num=m_num*10+1; /单击数字键 1 后把数据传送到输出框中else m_num=m_num*10-1;if (b_point=TRUE) /当前是否有小数点,如果有num1=1; n_point=n_point+;for (i=0;i=1.7E308|m_numSetWindowText(“结果过大,无法显示“);else GetDlgItem(IDC_EDIT_display)-SetWindowText(“不是整数无法进行阶乘运算“);m_num=0;num1=0;n_point=0;b_point=FALSE;b_zf=TRUE;取对数运算:lnvoid CCALUDlg:OnBUTTONln() if(judge!=0)OnBUTTONequal();if(m_num!=0)num2=m_num;高级语言程序设计课程作业报告7if(m_num0)m_num=log(num2); /对数进行求 lnUpdateData(FALSE); /数据刷新num2=m_num;else GetDlgItem(IDC_EDIT_display)-SetWindowText(“错误,操作数需大于 0“);m_num=0;num1=0;n_point=0;b_point=FALSE;b_zf=TRUE;开方运算:sqrtvoid CCALUDlg:OnBUTTONsqrt() if(judge!=0)OnBUTTONequal();if(m_num!=0)num2=m_num;if(m_num=0)m_num=sqrt(num2); /对数进行开根号UpdateData(FALSE); /数据刷新num2=m_num;高级语言程序设计课程作业报告8else GetDlgItem(IDC_EDIT_display)-SetWindowText(“错误,负数不能开根号“);m_num=0;num1=0;n_point=0;b_point=FALSE;b_zf=TRUE;双目运算符功能的实现:需要两个操作数才能运算,所以在执行双目运算符按钮的函数代码中,要把 m_num 中的值保存到变量 num2 中,然后把 m_num 清零。这样即可保存第一个操作数。另外先定义了一个整形变量 judge,在不同的双目运算符中给judeg 赋不同的值,然后在等号中用 switch 语句来匹配 judge 值来判断需要执行何种双目运算。加法:+void CCALUDlg:OnBUTTONadd() if(judge!=0)OnBUTTONequal();if(num2=0)num2=m_num; /把第二个值赋于输出框的成员变量m_num=0; /输出框的成员变量清 0b_point=FALSE; /当前小数无b_zf=TRUE; /当前符号为正n_point=0; /小数位数无judge=1;减法:-void CCALUDlg:OnBUTTONdifference() 高级语言程序设计课程作业报告9if(judge!=0)OnBUTTONequal();if(num2=0)num2=m_num;m_num=0;b_point=FALSE;b_zf=TRUE;n_point=0;judge=2;乘法:*void CCALUDlg:OnBUTTONmultiply() if(judge!=0)OnBUTTONequal();if(num2=0)num2=m_num;m_num=0;b_point=false;b_zf=TRUE;n_point=0;judge=3;除法:/void CCALUDlg:OnBUTTONdivide() if(judge!=0)OnBUTTONequal();高级语言程序设计课程作业报告10if(num2=0)num2=m_num;m_num=0;b_point=false;b_zf=TRUE;n_point=0;judge=4;退格键功能的实现:当按下一次退格按钮时,若 m_num 为整数,只需对其中数据除以 10 再取整即可,若按下一次退格按钮为小数,则根据小数点后数据的位数n_point 进行操作,先对 m_num 执行(n_point-1)次乘以 10 运算,然后取整,接着执行(n_point -1)次除以 10 的运算即可。完成后需要把 n_point 将减小 1。退格键:backspacevoid CCALUDlg:OnBUTTONbackspace() if(b_point=false)m_num=m_num/10-fmod(m_num/10,1);elseif (b_point=TRUE in_point-1;i+) /移动小数点m_num=m_num*10; /移动至只有一个小数位m_num=m_num-fmod(m_num,1); /去掉小数位for (i=0;in_point-1;i+) /小数点移至原来位置m_num=m_num/10; 高级语言程序设计课程作业报告11n_point=n_point-;if (n_point=0)b_point=FALSE;if(m_num=0)b_zf=TRUE;UpdateData(FALSE); /数据刷新清除键:clearvoid CCALUDlg:OnBUTTONclear() m_num=0; /输出框清 0num1=0; /变量 1 为 0num2=0; /变量 2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/Z 270-2026安全与韧性业务连续性管理体系业务连续性策略指南
- T/ZJSEE 0048.2-2025虚拟电厂 第2部分:信息交互功能规范
- T/JCJJ 048-2024钢渣资源回收利用一次处理工艺技术要求
- T/CNCA 065-2024二氧化碳深部咸水层地质封存泄漏监测指标体系
- T/CASMES 400-2024质子交换膜水电解制氢阳极催化剂 测试方法
- T/CSMT YB015-2025光电复合电离源飞行时间质谱仪性能测试方法
- GB/T 18591-2026焊接预热温度、道间温度及预热维持温度的测量
- 2027届重庆市沙坪坝区第八中学数学七上期末统考试题含解析
- 2025-2026学年辽宁省凤城市初中政治九年级期末上册自测核心强化题(附答案)
- PHP商城开发面试题及详细答案(实战版)
- GB/Z 270-2026安全与韧性业务连续性管理体系业务连续性策略指南
- 2026年溶聚丁苯橡胶行业洞察报告及未来五至十年发展趋势报告
- 2026年健康科普大赛基础测试题含答案
- 2026年四川省高考历史真题试卷
- 八年级物理上册期末《声现象》6大易错题专项训练
- 2026人教版六年级数学上册活动课《水是生命之源》教案
- 2026年四川省拟任县处级领导干部理论(任职资格考试)全真模拟试题及答案
- 钩吻碱中毒(断肠草中毒)的急诊处理
- 冷轧硅钢及金属制品深加工项目可行性研究报告模板拿地申报
- 制度壁垒经济效应-洞察与解读
- 设备日常维护保养培训课件
评论
0/150
提交评论