《计算器程序设计》word版

上传人:xt****7 文档编号:103573751 上传时间:2022-06-09 格式:DOC 页数:14 大小:131.51KB
收藏 版权申诉 举报 下载
《计算器程序设计》word版_第1页
第1页 / 共14页
《计算器程序设计》word版_第2页
第2页 / 共14页
《计算器程序设计》word版_第3页
第3页 / 共14页
资源描述:

《《计算器程序设计》word版》由会员分享,可在线阅读,更多相关《《计算器程序设计》word版(14页珍藏版)》请在装配图网上搜索。

1、C+程序设计(MFC)课程设计报告设计题目: 简易计算器 班 级: 姓 名: 学 号: 指导教师: 时 间: 2010年6月30日 目 录1.设计目标2.设计内容3.设计思想 4.设计说明5.设计步骤6.主要成员函数关系图7.程序主要代码8. 难点分析9. 总结简易计算器(MFC)1设计目标了解Windows应用程序的结构与DOS程序的不同,掌握应用MFC类库编写Windows应用程序的基本模式。2设计内容以简易计算器为例,通过对简单应用软件计算器的设计,编制、调试,实现简单的加,减,乘,除等运算,以学习应用MFC库类编写对话框的原理,加深对C+类的学习及应用。3. 设计思想基于MFC库类对对

2、话框界面的设计,通过创建类成员函数成员变量,编辑控件创建消息映射,调用消息函数完成数据的输入输出,实现计算功能。生成简单的应用软件。4. 设计说明(1)包含的功能有:加、减、乘、除运算,开方、平方等功能。(2)计算器上数字09为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件。(3)输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个标签中。(4)计算功能基本上是用系统内部函数。(5)程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以0开头等不正常现象。(6)“CE”按钮可以清除所有已输入的数据从头计算5. 设计步骤(1)选择FileNewlProject命令,

3、选择MFC AppWizard(exe)创建Project名为Caa,按确定。在弹出界面选择创建对话框,单击Finish按钮(2)在生成的设计界面中加入控件,得到计算器应用界面。如图:(3)为控件编辑框编辑ID,如图:按钮名称ID用途0IDC_0按键01IDC_1按键12IDC_2按键23IDC_3按键34IDC_4按键45IDC_5按键56IDC_6按键67IDC_7按键78IDC_8按键89IDC_9按键9.IDC_dian按键 .+/-IDC_zhengfu正负+IDC_jia加-IDC_jian减*IDC_cheng乘/IDC_chu除CEIDC_qinglin清零sqrtIDC_sq

4、rt开方x*xIDC_pingfang平方=IDC_dengyu等于编辑框IDC_E1显示数据输入输出(4)进入ClassWizard界面选择Message Maps为控件插入消息映射,插入消息函数,实现控件命令功能。如图: (5) 进入ClassWizard界面Message Varibles为编辑框添加成员变量m_result用以显示结果。如图:(6)在CaaDlg.h中加入在主要成员函数和成员变量的申明在CaaDlg.cpp中加入主要成员函数实现过程和成员变量的初始化(代码片段将于后面介绍)。6. 主要成员函数关系图按钮09.函数如: On0( ).On1( ).On2( ).处理数字输

5、入OnOperandInput( )计算Calculate( )显示输出UpdateDisplay( )按 钮 + - * / . +/- CE = 函数如:Onjia( ). Onjian( ).Oncheng( ) .按 钮 sqrt x*x 函数:Onsqrt( ).Onpingfang( )7. 程序主要代码/在头文件中手动添加成员函数与变量声明/ caaDlg.h : header file/定义两个euum型结构enum Operator OpNone, OpAdd, OpSubtract, OpMultiply, OpDivide ;enum CalcError ErrNone,

6、 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 OnOper

7、andInput(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

8、 Win32m_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”按钮/ TODO: Add your control notification handler code hereOnOperandInput(0)

9、;void CCaaDlg:On1() /处理“ 1”按钮/ TODO: Add your control notification handler code hereOnOperandInput(1);void CCaaDlg:On2() /处理“ 2”按钮/ TODO: Add your control notification handler code hereOnOperandInput(2);void CCaaDlg:On3() /处理“ 3”按钮/ TODO: Add your control notification handler code hereOnOperandInput

10、(3);void CCaaDlg:On4() /处理“ 4”按钮/ TODO: Add your control notification handler code hereOnOperandInput(4);void CCaaDlg:On5() /处理“ 5”按钮/ TODO: Add your control notification handler code hereOnOperandInput(5);void CCaaDlg:On6() /处理“ 6”按钮/ TODO: Add your control notification handler code hereOnOperandIn

11、put(6);void CCaaDlg:On7() /处理“ 7”按钮/ TODO: Add your control notification handler code hereOnOperandInput(7);void CCaaDlg:On8() /处理“ 8”按钮/ TODO: Add your control notification handler code hereOnOperandInput(8);void CCaaDlg:On9() /处理“ 9”按钮/ TODO: Add your control notification handler code hereOnOperan

12、dInput(9);void CCaaDlg:Oncheng() /处理“ *”按钮/ TODO: Add your control notification handler code hereCalculate();m_operator = OpMultiply;void CCaaDlg:Onchu() /处理“ /”按钮/ TODO: Add your control notification handler code hereCalculate();m_operator = OpDivide;void CCaaDlg:Ondengyu() /处理“ =”按钮/ TODO: Add you

13、r control notification handler code hereCalculate();m_operator = OpNone;void CCaaDlg:Ondian() /处理“ .”按钮/ TODO: Add your control notification handler code herem_bCoff=1;UpdateDisplay();void CCaaDlg:Onjia() /处理“ +”按钮/ TODO: Add your control notification handler code hereCalculate();m_operator = OpAdd;

14、void CCaaDlg:Onjian() /处理“ -”按钮/ TODO: Add your control notification handler code hereCalculate();m_operator = OpSubtract;void CCaaDlg:Onpingfang() /处理“ x*x”按钮/ TODO: Add your control notification handler code herem_operand*=m_operand;UpdateDisplay();void CCaaDlg:Onqinglin() /处理“ CE”按钮/ TODO: Add yo

15、ur control notification handler code herem_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 herem_operand=sqrt(m_operand);UpdateDisplay(

16、);void CCaaDlg:Onzhengfu() /处理“ +/-”按钮/ TODO: Add your control notification handler code herem_operand*=-1;UpdateDisplay();/以下是自定义函数,用于实现计算功能void CCaaDlg:OnOperandInput(int a) /处理0-9 数字的输入函数if (m_errorState != ErrNone) /判断当前运算是否有误,若有则返回return;if (!m_bOperandAvail) /判断是否输入新的数字,1-是 0-否m_operand = 0; i

17、f(!m_bCoff) /判断是否是小数输入,1-是 0-否m_operand=m_operand*10+(a); elsem_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_accumif (m_operator = OpNone) m_accum =

18、m_operand;else if (m_operator = OpMultiply) /否则按计算符进行计算m_accum *= m_operand;else if (m_operator = OpDivide)if (m_operand = 0)m_errorState = ErrDivideByZero;elsem_accum /= m_operand;else if (m_operator = OpAdd)m_accum += m_operand;else if (m_operator = OpSubtract)m_accum -= m_operand;m_bOperandAvail

19、= 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); /将floa

20、t型转化为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来存储当前的输入。而程序只使用一个函数来处理所有数字输入,也就是说每次单击数字按钮就会调用该函数。由于计算数不仅仅是个位数,因此用户可能需要单击几个数字按钮来完成一个计算数的输入,这样

21、在每次输入时都必须将输入的数字累加入m_operand中。而且对于小数输入和整数输入也必须采取不同的累加方式。如对整数的输入,累加方式为: m_operand=m_operand*10+n;其中n为输入的数字。而对于小数输入,累加方式为:m_operand=m_operand+n*10i ;其中n为数字,i为小数位数。因此在程序中还需设立布尔型变量m_coff 的值来标识当按下按钮小数点的时候来确定调用哪个累加方式。自定义消息处理函数、成员函数、变量在添加自定义函数、变量时需注意函数及变量的声明在头文件中如:CaaDlg.h ;而函数的实现部分及变量的初始在执行文件中如:CaaDlg.cpp

22、。值得提醒的是手动添加消息处理函数时,需声明在头文件/AFX_MSG(CCaaDlg) /AFX_MSG中的部分。而添加消息映射在执行文件/AFX_MSG_MAP(CCaaDlg) /AFX_MSG_MAP中的部分。 最后将消息处理函数添加到执行文件末即可。9 总结课程设计到此已告一段落,经过团队的努力,在将近一个月的实践中课程设计基本完成了。从中学到很多有用的知识,也积累了不少宝贵的经验。从一开始对MFC这样一个陌生的类库名词,在不断的翻阅书籍学习中开始渐渐的有所了解,虽然在此次课程设计我们只是针对性的去学习对对话框应用程序的编程模式,但也体会到了MFC这类库的博大精深。想全部了解这样一个类

23、库,今后还需多下功夫。本次课程设计我们完成了一个简易计算器应用软件,在此期间,遇上了不少的技术难题,但是经过努力,通过查找资料,难题还是一个个被解决了,从中学到了许多课堂上没学到的东西,这是很值得高兴的。经过设计的各个环节,从中学到了很多,锻炼了系统的设计的能力,培养了团队分工合作精神。这样对我们以后在工作中或学习中得到很好的锻炼,为用VC+编辑软件奠定基础。在本次实践期间对简易计算器的设计虽然大体实现各个控件的功能,但仍存在许多的不足与漏洞,还待以后的不断学习进一步完善。参考文献:1Visual C+ 7.0 起步进阶,国防工业出版社 武装 等编著2Visual C+ 基础教程,西安电子科技大学出版社,2006.6开发环境: Microsoft Visual C+ 6.0 Microsoft Visual C+ 7.0

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!