当前位置:文档之家› 简易计算器课程设计报告

简易计算器课程设计报告

《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)计算器上数字0—9为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件。

(3)输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个标签中。

(4)计算功能基本上是用系统内部函数。

(5)程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以0开头等不正常现象。

(6)“CE”按钮可以清除所有已输入的数据从头计算5. 设计步骤(1)选择FileNewlProject命令,选择MFC AppWizard(exe)创建Project名为Caa,按确定。

在弹出界面选择创建对话框,单击Finish按钮(2)在生成的设计界面中加入控件,得到计算器应用界面。

如图:(3)为控件编辑框编辑ID,如图:(4)进入ClassWizard界面选择Message Maps为控件插入消息映射,插入消息函数,实现控件命令功能。

如图:(5) 进入ClassWizard界面Message Varibles为编辑框添加成员变量m_result 用以显示结果。

如图:(6)在CaaDlg.h中加入在主要成员函数和成员变量的申明在CaaDlg.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; //标识当前输入是否是小数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 here Calculate();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 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 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);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;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编写计算器过程中,遇到的技术上的问题,及解决方法。

相关主题