




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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 库类对对话框界面的设计,通过创建类成员函数成员变量,编辑控件创建消息映射,调用消息函数完成数据的输入输出,实现计算功能。生成简单的应用软件。4. 设计说明(1)包含的功能有:加、减、乘、除运算,开方、平方等功能。(2)计算器上数字 09 为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件。(3)输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个标签中。(4)计算功能基本上是用系统内部函数。(5)程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以 0 开头等不正常现象。(6)“CE”按钮可以清除所有已输入的数据从头计算5. 设计步骤(1)选择 FileNewlProject 命令,选择 MFC AppWizard(exe)创建 Project 名为 Caa,按确定。在弹出界面选择创建对话框,单击 Finish 按钮(2)在生成的设计界面中加入控件,得到计算器应用界面。如图:(3)为控件编辑框编辑 ID,如图:按钮名称 ID 用途0 IDC_0 按键 01 IDC_1 按键 12 IDC_2 按键 23 IDC_3 按键 34 IDC_4 按键 45 IDC_5 按键 56 IDC_6 按键 67 IDC_7 按键 78 IDC_8 按键 89 IDC_9 按键 9. IDC_dian 按键 .+/- IDC_zhengfu 正负+ 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 用以显示结果。如图:(6)在 CaaDlg.h 中加入在主要成员函数和成员变量的申明在 CaaDlg.cpp中加入主要成员函数实现过程和成员变量的初始化(代码片段将于后面介绍)。6. 主要成员函数关系图按钮 09.函数如: On0( ).On1( ).On2( ).处理数字输入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, 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 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);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(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 hereOnOperandInput(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 hereOnOperandInput(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 your 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;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 your 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();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;if(!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 = 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 = 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 中。而且对于小数输入和整数输入也必须采取不同的累加方式。如对整数的输入,累加方式为: m_operand=m_operand*10+n;其中 n 为输入的数字。而对于小数输入,累加方式为:m_operand=m_operand+n*10 i ;其中 n 为数字,i 为小数位数。因此在程序中还需设立布尔型变量 m_coff 的值来标识当按下按钮小数点的时候来确定调用哪个累加方式。自定义消息处理函数、成员函数、变量在添加自定义函数、变量时需注意函数及变量的声明在头文件中如:CaaDl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学校维修施工合同范本
- 灯具买卖全款合同范本
- 卫生护理合同范本
- 矿山监控施工合同范本
- 餐厅店面股份合同范本
- 公积金组合贷款合同范本
- 锅炉采购简易合同范本
- 建筑木工材料合同范本
- 委托劳务公司合同范本
- 包车合同范本
- 人教版小学五年级数学下册《第五单元 图形的运动(三)》大单元整体教学设计2022课标
- 全国中学教师《初中数学》说课教学比赛-主题:《等腰三角形的性质》说课-一等奖课件
- 2024年工会财务知识竞赛试题及答案
- 26个英语字母描红练习(素材)-小学英语
- DL∕T 686-2018 电力网电能损耗计算导则
- 2023年河南省中考数学试卷及答案
- 中外民歌欣赏(高中音乐课件)
- Revit-基础教程课件
- 大学美育(第二版) 课件 第五单元:书法艺术
- 消防工程技术咨询合同
- 从《史记》看司马迁的命运观
评论
0/150
提交评论