《简易计算器课程设计报告.docx》由会员分享,可在线阅读,更多相关《简易计算器课程设计报告.docx(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、简易计算器课程设计报告 C+程序设计(MFC)课程设计报告 设计题目:简易计算器 班级: 姓名: 学号: 指导教师: 时间:2022年6月30日 目录 1.设计目标 2.设计内容 3.设计思想 4.设计说明 5.设计步骤 6.主要成员函数关系图 7.程序主要代码 8. 难点分析 9. 总结 简易计算器(MFC) 1设计目标 了解Windows应用程序的结构与DOS程序的不同,掌握应用MFC类库编写Windows应用程序的基本模式。 2设计内容 以简易计算器为例,通过对简单应用软件计算器的设计,编制、调试,实现简单的加,减,乘,除等运算,以学习应用MFC库类编写对话框的原理,加深对C+类的学习及
2、应用。 3. 设计思想 基于MFC库类对对话框界面的设计,通过创建类成员函数成员变量,编辑控件创建消息映射,调用消息函数完成数据的输入输出,实现计算功能。生成简单的应用软件。 4.设计说明 (1)包含的功能有:加、减、乘、除运算,开方、平方等功能。 (2)计算器上数字09为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件。 (3)输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个标签中。 (4)计算功能基本上是用系统内部函数。 (5)程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以0开头等不正常现象。 (6)“CE”按钮可以清除所有已输入的数据从头计算 5.
3、 设计步骤 (1)选择FileNewlProject命令,选择MFC AppWizard(exe)创建Project名为Caa,按确定。在弹出界面选择创建对话框,单击Finish按钮 (2)在生成的设计界面中加入控件,得到计算器应用界面。如图: (3)为控件编辑框编辑ID,如图: (4)进入ClassWizard界面选择Message Maps为控件插入消息映射,插入消息函数,实现控件命令功能。如图: (5) 进入ClassWizard界面Message Varibles为编辑框添加成员变量m_result 用以显示结果。如图: (6)在CaaDlg.h中加入在主要成员函数和成员变量的申明在C
4、aaDlg.cpp 中加入主要成员函数实现过程和成员变量的初始化(代码片段将于后面介绍)。 6. 主要成员函数关系图 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;
5、 /标识当前输入是否是小数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 /以下
6、是对声明变量进行初始 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_bCo
7、ff=0; /为变量进行初始 m_errorState = ErrNone; /为变量进行初始m_bOperandAvail=FALSE; /为变量进行初始m_operator=OpNone; /为变量进行初始 /以下是消息处理函数,用以响应消息映射 void CCaaDlg:On0() /处理“ 0”按钮 / TODO: Add your control notification handler code here OnOperandInput(0); void CCaaDlg:On1() /处理“ 1”按钮 / TODO: Add your control notification han
8、dler 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 noti
9、fication 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
10、control notification handler code here OnOperandInput(7); 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() /处理“ *”按钮 /
11、 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
12、 here Calculate(); m_operator = OpNone; void CCaaDlg:Ondian() /处理“ .”按钮 / TODO: Add your control notification handler code here m_bCoff=1; UpdateDisplay(); void CCaaDlg:Onjia() /处理“ +”按钮 / TODO: Add your control notification handler code here Calculate(); m_operator = OpAdd; void CCaaDlg:Onjian() /处
13、理“ -”按钮 / 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 noti
14、fication 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();
15、void CCaaDlg:Onzhengfu() /处理“ +/-”按钮 / TODO: Add your control notification handler code here m_operand*=-1; UpdateDisplay(); /以下是自定义函数,用于实现计算功能 void CCaaDlg:OnOperandInput(int a) /处理0-9 数字的输入函数 if (m_errorState != ErrNone) /判断当前运算是否有误,若有则返回return; if (!m_bOperandAvail) /判断是否输入新的数字,1-是 0-否m_operand =
16、 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)