版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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 De
8、stroyIcon 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 hereO
9、nOperandInput(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 he
10、reOnOperandInput(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
11、 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 c
12、ode 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() /处理“ =”按
13、钮/ 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_o
14、perator = 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”
15、按钮/ 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
16、);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-否
17、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 = Op
18、None) 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;
19、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.F
20、ormat(_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来存储当前的输入。而程序只使用一个函数来处理所有数字输入,也就是说每次单击数字按钮就会
21、调用该函数。由于计算数不仅仅是个位数,因此用户可能需要单击几个数字按钮来完成一个计算数的输入,这样在每次输入时都必须将输入的数字累加入m_operand中。而且对于小数输入和整数输入也必须采取不同的累加方式。如对整数的输入,累加方式为: m_operand=m_operand*10+n;其中n为输入的数字。而对于小数输入,累加方式为:m_operand=m_operand+n*10i ;其中n为数字,i为小数位数。因此在程序中还需设立布尔型变量m_coff 的值来标识当按下按钮小数点的时候来确定调用哪个累加方式。自定义消息处理函数、成员函数、变量在添加自定义函数、变量时需注意函数及变量的声明在头文件中如:CaaDlg.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 加工车间年度个人工作总结(23篇)
- 装饰公司股份转让合同书(3篇)
- 广东省广外实验2024-2025学年高二上学期10月月考 数学试题含答案
- 幼儿园师德师风论坛活动方案策划
- 江苏省苏州市(2024年-2025年小学五年级语文)统编版期末考试((上下)学期)试卷及答案
- 2024年BOD自动在线监测仪项目投资申请报告代可行性研究报告
- 2024-2025学年重庆乌江新高考协作体高三上学期二调英语试题及答案
- 上海市市辖区(2024年-2025年小学五年级语文)人教版综合练习(下学期)试卷及答案
- 2024年甘肃公务员考试申论试题(县乡卷)
- 垃圾误时投放
- 2023年金华市城市规划设计院招聘笔试真题
- 江西省宜春市丰城市多校2024-2025学年五年级上学期期中数学试卷(含答案)
- 期中模拟测试卷3(试题)-2024-2025学年四年级上册数学(福建)
- 人教版(PEP)三年级英语上册2024期中考试(无答案)
- 宪法与法律学习通超星期末考试答案章节答案2024年
- 《数学三年级上学期数学期中试卷》
- 方寸之间 课件 2024-2025学年苏少版(2024)初中美术七年级上册
- 2024-2025学年人教版七年级地理上学期 期中知识清单:第一章 地球
- 2024中国海油校园招聘2024人(高频重点提升专题训练)共500题附带答案详解
- TD/T 1061-2021 自然资源价格评估通则(正式版)
- 24春国家开放大学《建筑力学#》形考任务1-4参考答案
评论
0/150
提交评论