2022年2022年计算器程序设计.C++,MFC .pdf
-
资源ID:39710221
资源大小:256.79KB
全文页数:13页
- 资源格式: PDF
下载积分:4.3金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
2022年2022年计算器程序设计.C++,MFC .pdf
C+程序设计(MFC)课程设计报告设计题目:简易计算器班级:姓名:学号:指导教师:时间:2010 年 6 月 30 日名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 13 页 -目录1.设计目标,2.设计内容,3.设计思想,4.设计说明,5.设计步骤,6.主要成员函数关系图,7.程序主要代码,8.难点分析,9.总结,名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 13 页 -简易计算器(MFC)1设计目标了解 Windows 应用程序的结构与DOS 程序的不同,掌握应用MFC 类库编写 Windows 应用程序的基本模式。2设计内容以简易计算器为例,通过对简单应用软件计算器的设计,编制、调试,实现简单的加,减,乘,除等运算,以学习应用MFC 库类编写对话框的原理,加深对 C+类的学习及应用。3.设计思想基于 MFC 库类对对话框界面的设计,通过创建类成员函数成员变量,编辑控件创建消息映射,调用消息函数完成数据的输入输出,实现计算功能。生成简单的应用软件。4.设计说明(1)包含的功能有:加、减、乘、除运算,开方、平方等功能。(2)计算器上数字 09 为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件。(3)输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个标签中。(4)计算功能基本上是用系统内部函数。(5)程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以 0 开头等不正常现象。(6)“CE”按钮可以清除所有已输入的数据从头计算5.设计步骤(1)选择 FileNewlProject 命令,选择 MFC AppWizard(exe)创建 Project 名为 Caa,按确定。在弹出界面选择创建对话框,单击Finish 按钮(2)在生成的设计界面中加入控件,得到计算器应用界面。如图:名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 13 页 -(3)为控件编辑框编辑ID,如图:按钮名称ID 用途0 IDC_0 按键 0 1 IDC_1 按键 1 2 IDC_2 按键 2 3 IDC_3 按键 3 4 IDC_4 按键 4 5 IDC_5 按键 5 6 IDC_6 按键 6 7 IDC_7 按键 7 8 IDC_8 按键 8 9 IDC_9 按键 9.IDC_dian 按键.+/-IDC_zhengfu 正负名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 13 页 -+IDC_jia 加-IDC_jian 减*IDC_cheng 乘/IDC_chu 除CE IDC_qinglin 清零sqrt IDC_sqrt 开方x*x IDC_pingfang 平方=IDC_dengyu 等于编辑框IDC_E1 显示数据输入输出(4)进入 ClassWizard界面选择 Message Maps为控件插入消息映射,插入消息函数,实现控件命令功能。如图:(5)进入 ClassWizard界面 Message Varibles为编辑框添加成员变量m_result用以显示结果。如图:名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 13 页 -(6)在 CaaDlg.h 中加入在主要成员函数和成员变量的申明在CaaDlg.cpp中加入主要成员函数实现过程和成员变量的初始化(代码片段将于后面介绍)。6.主要成员函数关系图按钮09.函数如:On0().On1().On2().处理数字输入OnOperandInput()计算 Calculate()显示输出 UpdateDisplay()按 钮+-*/.+/-CE=函数 如:Onjia().Onjian().Oncheng().按钮 sqrt x*x 函数:Onsqrt().Onpingfang()名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 13 页 -7.程序主要代码/在头文件中手动添加成员函数与变量声明/caaDlg.h:header file/定义两个 euum型结构enum Operator OpNone,OpAdd,OpSubtract,OpMultiply,OpDivide;enum CalcError ErrNone,ErrDivideByZero;float m_operand;/存储当前输入的操作数float m_accum;/存储当前的计算处理结束BOOL m_bCoff;/标识当前输入是否是小数float m_coff;/小数输入时的系数Operator m_operator;/enum型变量用以标识当前运算符CalcError m_errorState;/enum型变量用以标识当前运算状态BOOL m_bOperandAvail;/标识当前输入是否是新输入数字void UpdateDisplay();/处理显示void Calculate();/处理计算void OnOperandInput(int a);/处理数字输入/在执行文件中添加成员函数实现部分与变量初始/caaDlg.cpp:implementation file /以下是对声明变量进行初始CCaaDlg:CCaaDlg(CWnd*pParent/*=NULL*/):CDialog(CCaaDlg:IDD,pParent)/AFX_DATA_INIT(CCaaDlg)m_result=_T();/默认为 m_result 变量初始/AFX_DATA_INIT/Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon=AfxGetApp()-LoadIcon(IDR_MAINFRAME);m_coff=0.1;/为变量进行初始m_bCoff=0;/为变量进行初始m_errorState=ErrNone;/为变量进行初始m_bOperandAvail=FALSE;/为变量进行初始m_operator=OpNone;/为变量进行初始/以下是消息处理函数,用以响应消息映射void CCaaDlg:On0()/处理“0”按钮 名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 13 页 -/TODO:Add your control notification handler code here OnOperandInput(0);void CCaaDlg:On1()/处理“1”按钮/TODO:Add your control notification handler code here OnOperandInput(1);void CCaaDlg:On2()/处理“2”按钮/TODO:Add your control notification handler code here OnOperandInput(2);void CCaaDlg:On3()/处理“3”按钮/TODO:Add your control notification handler code here OnOperandInput(3);void CCaaDlg:On4()/处理“4”按钮/TODO:Add your control notification handler code here OnOperandInput(4);void CCaaDlg:On5()/处理“5”按钮/TODO:Add your control notification handler code here OnOperandInput(5);void CCaaDlg:On6()/处理“6”按钮/TODO:Add your control notification handler code here OnOperandInput(6);void CCaaDlg:On7()/处理“7”按钮/TODO:Add your control notification handler code here OnOperandInput(7);名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 13 页 -void CCaaDlg:On8()/处理“8”按钮/TODO:Add your control notification handler code here OnOperandInput(8);void CCaaDlg:On9()/处理“9”按钮/TODO:Add your control notification handler code here OnOperandInput(9);void CCaaDlg:Oncheng()/处理“*”按钮/TODO:Add your control notification handler code here Calculate();m_operator=OpMultiply;void CCaaDlg:Onchu()/处理“/”按钮/TODO:Add your control notification handler code here Calculate();m_operator=OpDivide;void CCaaDlg:Ondengyu()/处理“=”按钮/TODO:Add your control notification handler code here Calculate();m_operator=OpNone;void CCaaDlg:Ondian()/处理“.”按钮/TODO:Add your control notification handler code here m_bCoff=1;UpdateDisplay();void CCaaDlg:Onjia()/处理“+”按钮名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 13 页 -/TODO:Add your control notification handler code here Calculate();m_operator=OpAdd;void CCaaDlg:Onjian()/处理“-”按钮/TODO:Add your control notification handler code here Calculate();m_operator=OpSubtract;void CCaaDlg:Onpingfang()/处理“x*x”按钮/TODO:Add your control notification handler code here m_operand*=m_operand;UpdateDisplay();void CCaaDlg:Onqinglin()/处理“CE”按钮/TODO:Add your control notification handler code here m_operator=OpNone;m_operand=0;m_accum=0;m_bOperandAvail=FALSE;m_errorState=ErrNone;m_coff=0.1;m_bCoff=0;UpdateDisplay();void CCaaDlg:Onsqrt()/处理“sqrt”按钮/TODO:Add your control notification handler code here m_operand=sqrt(m_operand);UpdateDisplay();void CCaaDlg:Onzhengfu()/处理“+/-”按钮/TODO:Add your control notification handler code here m_operand*=-1;名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 13 页 -UpdateDisplay();/以下是自定义函数,用于实现计算功能void CCaaDlg:OnOperandInput(int a)/处理 0-9 数字的输入函数 if(m_errorState!=ErrNone)/判断当前运算是否有误,若有则返回return;if(!m_bOperandAvail)/判断是否输入新的数字,1-是 0-否m_operand=0;if(!m_bCoff)/判断是否是小数输入,1-是 0-否m_operand=m_operand*10+(a);else m_operand=m_operand+(a)*m_coff;m_coff*=0.1;m_bOperandAvail=TRUE;UpdateDisplay();/更新显示 void CCaaDlg:Calculate()/处理计算函数 if(m_errorState!=ErrNone)return;if(m_bOperandAvail)/如果没有计算符就将m_operand值赋予 m_accum if(m_operator=OpNone)m_accum=m_operand;else if(m_operator=OpMultiply)/否则按计算符进行计算m_accum*=m_operand;else if(m_operator=OpDivide)if(m_operand=0)m_errorState=ErrDivideByZero;else m_accum/=m_operand;else if(m_operator=OpAdd)m_accum+=m_operand;else if(m_operator=OpSubtract)名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 13 页 -m_accum-=m_operand;m_bOperandAvail=FALSE;m_bCoff=0;m_coff=0.1;UpdateDisplay();void CCaaDlg:UpdateDisplay()/处理显示函数 if(GetSafeHwnd()=NULL)return;if(m_errorState!=ErrNone)m_result=除数不能为零;else /如果当前计算无错误那么进行显示/如果是输入计算数,那么显示输入情况,如果按下计算符,则显示结果float lVal=(m_bOperandAvail)?m_operand:m_accum;m_result.Format(_T(%f),lVal);/将 float型转化为 CString 型int i=m_result.GetLength();while(m_result.GetAt(i-1)=0)m_result.Delete(i-1,1);i-=1;/用编辑控件变量 m_result 改变编辑控件的值,更新显示UpdateData(FALSE);8 难点分析在利用 MFC 编写计算器过程中,遇到的技术上的问题,及解决方法。例如:计算数输入的处理在程序中使用 m_operand来存储当前的输入。而程序只使用一个函数来处理所有数字输入,也就是说每次单击数字按钮就会调用该函数。由于计算数不仅仅是个位数,因此用户可能需要单击几个数字按钮来完成一个计算数的输入,这样在每次输入时都必须将输入的数字累加入m_operand中。而且对于小数输入和整数输入也必须采取不同的累加方式。如对整数的输入,累加方式为:名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 13 页 -m_operand=m_operand*10+n;其中 n 为输入的数字。而对于小数输入,累加方式为:m_operand=m_operand+n*10i;其中 n 为数字,i 为小数位数。因此在程序中还需设立布尔型变量m_coff 的值来标识当按下按钮小数点的时候来确定调用哪个累加方式。自定义消息处理函数、成员函数、变量在添加自定义函数、变量时需注意函数及变量的声明在头文件中如:CaaDlg.h;而函数的实现部分及变量的初始在执行文件中如:CaaDlg.cpp。值得提醒的是手动添加消息处理函数时,需声明在头文件/AFX_MSG(CCaaDlg)/AFX_MSG中的部分。而添加消息映射在执行文件/AFX_MSG_MAP(CCaaDlg)/AFX_MSG_MAP中的部分。最后将消息处理函数添加到执行文件末即可。9 总结课程设计到此已告一段落,从中学到很多有用的知识,也积累了不少宝贵的经验。从一开始对MFC 这样一个陌生的类库名词,在不断的翻阅书籍学习中开始渐渐的有所了解,虽然在此次课程设计我们只是针对性的去学习对对话框应用程序的编程模式,但也体会到了MFC 这类库的博大精深。想全部了解这样一个类库,今后还需多下功夫。本次课程设计我们完成了一个简易计算器应用软件,在此期间,遇上了不少的技术难题,但是经过努力,通过查找资料,难题还是一个个被解决了,从中学到了许多课堂上没学到的东西,这是很值得高兴的。经过设计的各个环节,从中学到了很多,锻炼了系统的设计的能力,培养了团队分工合作精神。这样对我们以后在工作中或学习中得到很好的锻炼,为用VC+编辑软件奠定基础。在本次实践期间对简易计算器的设计虽然大体实现各个控件的功能,但仍存在许多的不足与漏洞,还待以后的不断学习进一步完善。参考文献:1 Visual C+7.0 起步进阶,国防工业出版社武装等编著2 Visual C+基础教程,西安电子科技大学出版社,2006.6 开发环境:Microsoft Visual C+6.0 Microsoft Visual C+7.0名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 13 页 -