




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MFC 计算器课程设计报告计算机应用 3 班 黄锦湫,罗洁,饶益指导老师:蒋鹏2009.3.15一题目:利用 MFC 框架编写简易计算器要求使用 MFC 框架在 Visual Studio 6.0 环境下编写一个简易的计算器,支持任意位数的加减乘数,正负转换,并且实现 BackSpace CE C 功能。二设计过程1. Windows 消息处理机制的理解 首先编写程序需要对 Windows 程序的消息处理机制(Message Handle)有个比较清晰的了解。Windows 的程序都是通过消息来传送数据,有不需要用户参与的系统消息,比如异常处理等。还有用户消息,比如鼠标的单击,双击,键盘的键入等。2. 界面的设计仿照 Windows 附件里面的计算器,在资源视图中画好界面,如图:主要使用到 Layout 菜单中的 Align 功能对各个按钮进行对其,使界面更加整洁。拖出的控件有上面的一个 Edit 控件用于显示数字,Button 控件用于处理鼠标的消息。3. 建立的变量,控件的命名,对应的消息处理函数对应表ID CAPTION Message HandlerIDD_CALC_DIALOG 简易计算器 1.0 Beta1 版 N/AIDC_NUM0 0 OnNum0IDC_NUM1 1 OnNum1IDC_NUM2 2 OnNum2IDC_NUM3 3 OnNum3IDC_NUM4 4 OnNum4IDC_NUM5 5 OnNum5IDC_NUM6 6 OnNum6IDC_NUM7 7 OnNum7IDC_NUM8 8 OnNum8IDC_NUM9 9 OnNum9IDC_NEG +/- OnNegIDC_PT . OnPtIDC_DIV / OnDivIDC_MUL * OnMulIDC_MIN - OnMinIDC_ADD + OnAddIDC_BACKSPACE BACK OnBackspaceIDC_CE CE OnCeIDC_CLEAR C OnClearIDC_EQU = OnEquIDC_DIS N/A N/AOnCal(double num)变量定义:double 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. 设计思路a) 首先考虑对所有按键分为两类,数字类和符号类,0,1,2,3,4,5,6,7,8,9 为数字类,+,- ,*,/,= 为符号类。数字在计算的过程中最多需要保存两个,所以定义了两个 double 型变量 numfirst 和 numsecond 来进行存储。符号需要一个 char op 来存储。b) 然后考虑在计算的过程中,numfirst 和 numsecond 的存储状态有三种,一种是numfirst=0 /小数进位m_Dis=m_Dis+poz*num;/递增UpdateData(false); /把结果从内存传递到屏幕elsem_Dis=m_Dis*10+num;UpdateData(false);if(numfirst!=0 m_Dis=m_Dis+poz*num;UpdateData(false); else/判定为整数m_Dis=m_Dis*10+num;/递增UpdateData(false);if(numfirst=0 m_Dis=m_Dis+poz*num;UpdateData(false); elsem_Dis=m_Dis*10+num;UpdateData(false);以 OnAdd()为例子讲解符号的处理函数,函数的功能是先判定之前按下字符时 op 的值,更具 op 的值来进行相应的运算。void CCalcDlg:OnAdd() /根据numfirst和numsecond和op的值分为5种状态。if(numfirst!=0 numfirst=numfirst+numsecond; /之前按的是加把两个数赋值到前一个数m_Dis=numfirst;/赋值给屏幕numsecond=0; /从新赋值为0,清空,不影响下一次判断UpdateData(FALSE);m_Dis=0; /屏幕的值同时清空if(numfirst!=0 numfirst=numfirst-numsecond;m_Dis=numfirst;numsecond=0;UpdateData(FALSE);m_Dis=0;if(numfirst!=0 numfirst=numfirst*numsecond;m_Dis=numfirst;numsecond=0;UpdateData(FALSE);m_Dis=0;if(numfirst!=0 numfirst=numfirst/numsecond;m_Dis=numfirst;numsecond=0;UpdateData(FALSE);m_Dis=0; if(numfirst=0 /屏幕的值赋值到numfirstUpdateData(FALSE); m_Dis=0;op=+; /最后记录最后一个操作是+poz=1;/小数点位置归位point_flag=FALSE;/默认小数点标志为整数,也就是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_Dis,sizeof(m_Dis),buffer); /把m_Dis存的数字转换为stringfor(int i=0;imessage,pMsg-wParam,pMsg-lParam); return CDialog:PreTranslateMessage(pMsg);总结:本次 MFC 计算器的制作,学习到了 MFC 基本的编程方法
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年甘肃省陇南市康县人民法院招聘工作人员相关事项模拟试卷及1套参考答案详解
- 2025年度周口西华县中医院校园招聘17名模拟试卷及一套参考答案详解
- 2025福建龙岩市上杭县文化旅游发展有限公司(上杭古田建设发展有限公司)所属企业招聘人员拟聘用人选模拟试卷完整答案详解
- 2025湖北武汉市通城县事业单位高层次和急需紧缺人才引进48人模拟试卷及答案详解1套
- 2025甘肃省特种设备检验检测研究院招聘20人考前自测高频考点模拟试题附答案详解(突破训练)
- 2025安徽宣城市人民医院(皖南医学院附属宣城医院)高层次人才招聘6人模拟试卷及答案详解(网校专用)
- 2025年矿物质药品专利药项目建议书
- 公办性质幼儿园委托办学协议书5篇
- 2025湖北恩施州巴东县信陵镇人民政府公益性岗位人员招聘8人考前自测高频考点模拟试题附答案详解(模拟题)
- 2025年铸造造型材料项目合作计划书
- 云南省2024-2025学年高二上学期11月期中考试数学试题(解析版)
- 农业银行笔试题库及答案
- 房屋抵押借贷合同(标准版)
- 医疗放射防护培训课件
- 装修安全生产培训讲解
- 海南省邮政业安全保障中心招聘事业编制人员考试真题2024
- 2025八年级美术国测试题(五)
- 煤棚安全操作培训课件
- 2025-2026学年八年级英语上学期第一次月考(Unit 1-2)(广州专用沪教版2024)原卷
- GB/T 4699.2-2025铬铁、硅铬合金、氮化铬铁和高氮铬铁铬含量的测定过硫酸铵氧化滴定法和电位滴定法
- 2025至2030年中国柔性电路板行业市场深度评估及投资战略规划报告
评论
0/150
提交评论