c++面向对象程序设计MFC简单计算器实验报告

上传人:博****1 文档编号:567394162 上传时间:2024-07-20 格式:PDF 页数:11 大小:249.56KB
返回 下载 相关 举报
c++面向对象程序设计MFC简单计算器实验报告_第1页
第1页 / 共11页
c++面向对象程序设计MFC简单计算器实验报告_第2页
第2页 / 共11页
c++面向对象程序设计MFC简单计算器实验报告_第3页
第3页 / 共11页
c++面向对象程序设计MFC简单计算器实验报告_第4页
第4页 / 共11页
c++面向对象程序设计MFC简单计算器实验报告_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《c++面向对象程序设计MFC简单计算器实验报告》由会员分享,可在线阅读,更多相关《c++面向对象程序设计MFC简单计算器实验报告(11页珍藏版)》请在金锄头文库上搜索。

1、计算机与信息工程学院程序设计基础课程设计报告题目名称:60.编写一个能实现简单功能的计算器学生姓名:刘沛东学生学号:2011508154 专业班级:电子信息工程(1)班指导教师:高攀1 课程设计的题目编写一个能实现简单功能的计算器2 题目要求1. 有一个计算器图形。2. 能实现加、减、乘、除及乘方的运算。3. 当输入题目时,屏幕上要在指定位置上显示出相应的题目内容,且相应的数字键要改变颜色例如:输入数字 1 时,在计算器图形上的1 键变为红色。4. 屏幕、图形颜色、形状自定3 总体设计3.1 总体框架图 1 系统框架开始结束键入第一个按钮键入第二个按钮显 示 结 果加法减法乘法除法乘方清零3.

2、2 系统功能说明在 VC+6.0中绘制计算器界面,各控件的设置对 09控件设定相应的 ID 和其他属性:图 2 “1”控件设置对“+、- 、*、 ”控件设定相应的 ID 和其他属性:图 2 “+”控件设置对其它控件设定相应的ID 和其他属性:图 3 其它控件设置主要使用到 Layout 菜单中的 Align 功能对各个按钮进行对其, 使界面更加整洁。拖出的控件有上面的一个Edit 控件用于显示数字, Button 控件用于处理鼠标的消息。4 程序详细设计4.1 系统主调模块图 5 程序流程图实现文件 .cpp 显示计算器界面开始执行工程全局对象资源文件 .rc 模块定义文件.def 头文件 .

3、h 执行Afxmain() 创建窗口实现窗口类注册Set window Void Void 点击鼠标发出消息Void 等待消息处理Void Void clc:onAdd() 文本框中显示结果程 序 运 行 结4.2 各模块详细设计4.2.1 建立的变量,控件的命名,对应的消息处理函数对应表ID CAPTION Message Handler IDD_CALC_DIALOG 简易计算器N/A IDC_NUM0 0 OnNum0 IDC_NUM1 1 OnNum1 IDC_NUM2 2 OnNum2 IDC_NUM3 3 OnNum3 IDC_NUM4 4 OnNum4 IDC_NUM5 5 On

4、Num5 IDC_NUM6 6 OnNum6 IDC_NUM7 7 OnNum7 IDC_NUM8 8 OnNum8 IDC_NUM9 9 OnNum9 IDC_NEG +/- OnNeg IDC_PT .OnPt IDC_DIV / OnDiv IDC_MUL * OnMul IDC_MIN - OnMin IDC_ADD + OnAdd IDC_BACKSPACE BACK OnBackspace IDC_CE CE OnCe IDC_CLEAR C OnClear IDC_EQU = OnEqu IDC_DIS N/A N/A OnCal(double num) 变量定义:double

5、poz; /保存小数点的位置,初始化为1,表示 poz-1 个小数点。double m_Dis; /Edit控件上需要显示的数字BOOL point_flag; /小数点表示位,判定是否是小数,是小数为1,不是小数为 0。double numfirst; /保存计算过程中的前一个数字,double numsecond;/保存计算过程中的第二个数字char op;/记录当前的计算符号,可以为+, - , *, / , =, c, n变量初始化:poz=1; m_Dis = 0.0; numfirst=0; numsecond=0; op=0; 4.4.2 设计思路a)首先考虑对所有按键分为两类,

6、数字类 和符号类 , 0,1,2,3,4,5,6,7,8,9为数字类,+, - ,* ,/ ,=为符号类。数字在计算的过程中最多需要保存两个,所以定义了两个 double 型变量 numfirst和 numsecond来进行存储。 符号需要一个char op 来存储。b)然后考虑在计算的过程中,numfirst和 numsecond 的存储状态有三种,一种是numfirst=0 & numsecond=0 也就是程序刚开始运行还没有开始录入数字的状态。二种是numfirst!=0 & numsecond=0 也就是第一个数字已经录入,符号也已经录入时候把m_Dis 的值直接赋值给numfirs

7、t,第三种是 numfirst!=0 &numsecond!=0,表示可以通过op 来把两数合并为一个数。c)考虑到该计算器支持连续的计算,比如3.33+1.33*88/96= ?。所以必须在点符号Button 也要计算出之前的结果,通过判断op, 来计算 , 把两个数字合并为一个数字,方便下一次运算,功能近似于点=,所以把 =也划分到符号类。d)因为数字全部使用的是double ,键入的数字必须通过一定的处理达到累加的效果,加上小数和整数的处理差异性大,所以分别用point_flag来判断,分别出来小数和整数。4.2.3 成员函数及其释义因为对 OnNum0() 到 OnNum9() 的处理

8、函数差异仅在一个数字上,可以通过调用一个共同的函数OnCal(double num)来简化源代码长度,增加模块性。void CCalcDlg:OnCal(double num) / 分三种状态来处理if (numfirst!=0 & numsecond!=0) if (point_flag=TRUE) /判定为小数 poz*=0.1; /小数进位m_Dis=m_Dis+poz*num;/ 递增UpdateData( false ); /把结果从内存传递到屏幕 else m_Dis=m_Dis*10+num; UpdateData( false ); if (numfirst!=0 & nums

9、econd=0) if (point_flag=TRUE) poz*=0.1; m_Dis=m_Dis+poz*num; UpdateData( false ); else / 判定为整数 m_Dis=m_Dis*10+num;/ 递增UpdateData( false ); if (numfirst=0 & numsecond=0) if (point_flag=TRUE) poz*=0.1; m_Dis=m_Dis+poz*num; UpdateData( false ); else m_Dis=m_Dis*10+num; UpdateData( false ); 4.2.4 以 OnAd

10、d()为例子讲解符号的处理函数, 函数的功能是先判定之前按下字符时 op 的值,更具 op的值来进行相应的运算。void CCalcDlg:OnAdd() / 根据 numfirst和numsecond和op的值分为 5种状态。if (numfirst!=0 & numsecond=0&op=+) numsecond=m_Dis; numfirst=numfirst+numsecond; /之前按的是加把两个数赋值到前一个数m_Dis=numfirst;/赋值给屏幕numsecond=0; /从新赋值为 0, 清空,不影响下一次判断UpdateData(FALSE); m_Dis=0; /屏幕

11、的值同时清空 if (numfirst!=0 & numsecond=0&op=-) numsecond=m_Dis; numfirst=numfirst-numsecond; m_Dis=numfirst; numsecond=0; UpdateData(FALSE); m_Dis=0; if (numfirst!=0 & numsecond=0&op=*) numsecond=m_Dis; numfirst=numfirst*numsecond; m_Dis=numfirst; numsecond=0; UpdateData(FALSE); m_Dis=0; if (numfirst!=0

12、 & numsecond=0&op=/) numsecond=m_Dis; numfirst=numfirst/numsecond; m_Dis=numfirst; numsecond=0; UpdateData(FALSE); m_Dis=0; if (numfirst=0 & numsecond=0) /该状态为程序启动还没有开始录入输入的状态numfirst=m_Dis; /屏幕的值赋值到numfirst UpdateData(FALSE); m_Dis=0; op=+; /最后记录最后一个操作是+ poz=1;/小数点位置归位point_flag=FALSE;/默认小数点标志为整数,也

13、就是0,也就是 FALSE “+/ - “按钮的处理函数void CCalcDlg:OnNeg() m_Dis=-m_Dis;/换个符号,其他都一样UpdateData(FALSE); poz=1; point_flag=FALSE; . 按钮的处理函数void CCalcDlg:OnPt() point_flag=TRUE; /把标志位改为“小数点”状态 “Backspace ”按钮的处理void CCalcDlg:OnBackspace() / 主要通过 _gcvt() 和strtod()函数进行字符串和浮点数之间的转换char buffer30; /定义个装字符的数组_gcvt(m_Di

14、s, sizeof (m_Dis),buffer); /把m_Dis存的数字转换为string for ( int i=0;i30;i+) if ( bufferi=.& bufferi+1=0)/ 判断是否为整数 point_flag=FALSE; / 标志位设置为“整数位”break ; if (point_flag=TRUE) / 如果是小数 for ( int j=0;jmessage,pMsg-wParam,pMsg-lParam); return CDialog:PreTranslateMessage(pMsg); 5 程序运行结果6 课程设计总结通过这次课程设计 , 我又收获到很

15、多 , 平时的在做作业时 , 因为题形与结构都是很简单的 , 并且每一章的内容都是有相应的例题可以参考, 所以在做题时没有遇到过很麻烦的问题,而这次不同了 , 一个课题拿到手时 , 给我的感觉是无从下手 , 而且要求很多 , 使得题目要求更大了。我将整个程序分块完成的 . 将整个大的程序的实现分8 个功能, 每个功能都通过一个相应的函数来实现. 在调试时分别进行调试, 使得调试更方便些 . 在编写各个函数只是按着题目要求的去完成, 后来经指导老师指导后 , 发现了很多自己欠缺的地方, 又一次将程序整体进行调试 . 最后把程序完善了许多。本次 MFC 计算器的制作, 学习到了 MFC 基本的编程方法。 对 OOP 编程的理解进一步加深。 但是程序仍然存在一定的问题,比如除数不能为0 的 Exception handle,符号键多次点击结果混乱。通过这次课程设计,以后 Windows 应用程序势必会轻车熟路。参考书目:1谭浩强,C+ 程序设计,北京,清华大学出版社,2006年。2孙鑫深入浅出MFC ,视频教程。3Visual_C+MFC入门教程,电子版。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号