计算器程序设计C++MFCWord文件下载.docx

上传人:b****6 文档编号:20923528 上传时间:2023-01-26 格式:DOCX 页数:13 大小:152.60KB
下载 相关 举报
计算器程序设计C++MFCWord文件下载.docx_第1页
第1页 / 共13页
计算器程序设计C++MFCWord文件下载.docx_第2页
第2页 / 共13页
计算器程序设计C++MFCWord文件下载.docx_第3页
第3页 / 共13页
计算器程序设计C++MFCWord文件下载.docx_第4页
第4页 / 共13页
计算器程序设计C++MFCWord文件下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

计算器程序设计C++MFCWord文件下载.docx

《计算器程序设计C++MFCWord文件下载.docx》由会员分享,可在线阅读,更多相关《计算器程序设计C++MFCWord文件下载.docx(13页珍藏版)》请在冰豆网上搜索。

计算器程序设计C++MFCWord文件下载.docx

基于MFC库类对对话框界面的设计,通过创建类成员函数成员变量,编辑控件创建消息映射,调用消息函数完成数据的输入输出,实现计算功能。

生成简单的应用软件。

4.设计说明

(1)包含的功能有:

加、减、乘、除运算,开方、平方等功能。

(2)计算器上数字0—9为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件。

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

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

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

(6)“CE”按钮可以清除所有已输入的数据从头计算

5.设计步骤

(1)选择FileNewlProject命令,选择MFCAppWizard(exe)创建Project名为Caa,按确定。

在弹出界面选择创建对话框,单击Finish按钮

(2)在生成的设计界面中加入控件,得到计算器应用界面。

如图:

(3)为控件编辑框编辑ID,如图:

按钮名称

ID

用途

IDC_0

按键0

1

IDC_1

按键1

2

IDC_2

按键2

3

IDC_3

按键3

4

IDC_4

按键4

5

IDC_5

按键5

6

IDC_6

按键6

7

IDC_7

按键7

8

IDC_8

按键8

9

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界面选择MessageMaps为控件插入消息映射,插入消息函数,实现控件命令功能。

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

(6)在CaaDlg.h中加入在主要成员函数和成员变量的申明在CaaDlg.cpp中加入主要成员函数实现过程和成员变量的初始化(代码片段将于后面介绍)。

6.主要成员函数关系图

7.程序主要代码

//在头文件中手动添加成员函数与变量声明

//caaDlg.h:

headerfile

//定义两个euum型结构

enumOperator{OpNone,OpAdd,OpSubtract,OpMultiply,OpDivide};

enumCalcError{ErrNone,ErrDivideByZero};

floatm_operand;

//存储当前输入的操作数

floatm_accum;

//存储当前的计算处理结束

BOOLm_bCoff;

//标识当前输入是否是小数

floatm_coff;

//小数输入时的系数

Operatorm_operator;

//enum型变量用以标识当前运算符

CalcErrorm_errorState;

//enum型变量用以标识当前运算状态

BOOLm_bOperandAvail;

//标识当前输入是否是新输入数字

voidUpdateDisplay();

//处理显示

voidCalculate();

//处理计算

voidOnOperandInput(inta);

//处理数字输入

//在执行文件中添加成员函数实现部分与变量初始

//caaDlg.cpp:

implementationfile

//以下是对声明变量进行初始

CCaaDlg:

:

CCaaDlg(CWnd*pParent/*=NULL*/)

:

CDialog(CCaaDlg:

IDD,pParent)

{

//{{AFX_DATA_INIT(CCaaDlg)

m_result=_T("

"

);

//默认为m_result变量初始

//}}AFX_DATA_INIT

//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32

m_hIcon=AfxGetApp()->

LoadIcon(IDR_MAINFRAME);

m_coff=0.1;

//为变量进行初始

m_bCoff=0;

m_errorState=ErrNone;

m_bOperandAvail=FALSE;

m_operator=OpNone;

}

//以下是消息处理函数,用以响应消息映射

voidCCaaDlg:

On0()//处理“0”按钮

//TODO:

Addyourcontrolnotificationhandlercodehere

OnOperandInput(0);

On1()//处理“1”按钮

OnOperandInput

(1);

On2()//处理“2”按钮

OnOperandInput

(2);

On3()//处理“3”按钮

OnOperandInput(3);

On4()//处理“4”按钮

OnOperandInput(4);

On5()//处理“5”按钮

OnOperandInput(5);

On6()//处理“6”按钮

OnOperandInput(6);

On7()//处理“7”按钮

OnOperandInput(7);

On8()//处理“8”按钮

OnOperandInput(8);

On9()//处理“9”按钮

OnOperandInput(9);

Oncheng()//处理“*”按钮

Calculate();

m_operator=OpMultiply;

Onchu()//处理“/”按钮

Calculate();

m_operator=OpDivide;

Ondengyu()//处理“=”按钮

m_operator=OpNone;

Ondian()//处理“.”按钮

m_bCoff=1;

UpdateDisplay();

Onjia()//处理“+”按钮

m_operator=OpAdd;

Onjian()//处理“-”按钮

m_operator=OpSubtract;

Onpingfang()//处理“x*x”按钮

m_operand*=m_operand;

Onqinglin()//处理“CE”按钮

m_operator=OpNone;

m_operand=0;

m_accum=0;

m_bOperandAvail=FALSE;

Onsqrt()//处理“sqrt”按钮

m_operand=sqrt(m_operand);

Onzhengfu()//处理“+/-”按钮

m_operand*=-1;

//以下是自定义函数,用于实现计算功能

OnOperandInput(inta)//处理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;

//更新显示

Calculate()//处理计算函数

if(m_errorState!

=ErrNone)

if(m_bOperandAvail)

{

//如果没有计算符就将m_operand值赋予m_accum

if(m_operator==OpNone)

m_accum=m_operand;

elseif(m_operator==OpMultiply)//否则按计算符进行计算

m_accum*=m_operand;

elseif(m_operator==OpDivide)

{

if(m_operand==0)

m_errorState=ErrDivideByZero;

else

m_accum/=m_operand;

}

elseif(m_operator==OpAdd)

m_accum+=m_operand;

elseif(m_operator==OpSubtract)

m_accum-=m_operand;

UpdateDisplay()//处理显示函数

if(GetSafeHwnd()==NULL)

m_result="

除数不能为零"

;

else//如果当前计算无错误那么进行显示

//如果是输入计算数,那么显示输入情况,如果按下计算符,则显示结果

floatlVal=(m_bOperandAvail)?

m_operand:

m_accum;

m_result.Format(_T("

%f"

),lVal);

//将float型转化为CString型

inti=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*10i;

其中n为数字,i为小数位数。

因此在程序中还需设立布尔型变量m_coff的值来标识当按下按钮小数点的时候来确定调用哪个累加方式。

⑵.自定义消息处理函数、成员函数、变量

在添加自定义函数、变量时需注意函数及变量的声明在头文件中如:

CaaDlg.h;

而函数的实现部分及变量的初始在执行文件中如:

CaaDlg.cpp。

值得提醒的是手动添加消息处理函数时,需声明在头文件//{{AFX_MSG(CCaaDlg)…//}}AFX_MSG中的部分。

而添加消息映射在执行文件

//{{AFX_MSG_MAP(CCaaDlg)…//}}AFX_MSG_MAP中的部分。

最后将消息处理函数添加到执行文件末即可。

9.总结

课程设计到此已告一段落,经过团队的努力,在将近一个月的实践中课程设计基本完成了。

从中学到很多有用的知识,也积累了不少宝贵的经验。

从一开始对MFC这样一个陌生的类库名词,在不断的翻阅书籍学习中开始渐渐的有所了解,虽然在此次课程设计我们只是针对性的去学习对对话框应用程序的编程模式,但也体会到了MFC这类库的博大精深。

想全部了解这样一个类库,今后还需多下功夫。

本次课程设计我们完成了一个简易计算器应用软件,在此期间,遇上了不少的技术难题,但是经过努力,通过查找资料,难题还是一个个被解决了,从中学到了许多课堂上没学到的东西,这是很值得高兴的。

经过设计的各个环节,从中学到了很多,锻炼了系统的设计的能力,培养了团队分工合作精神。

这样对我们以后在工作中或学习中得到很好的锻炼,为用VC++编辑软件奠定基础。

在本次实践期间对简易计算器的设计虽然大体实现各个控件的功能,但仍存在许多的不足与漏洞,还待以后的不断学习进一步完善。

参考文献:

[1]《VisualC++7.0起步进阶》,国防工业出版社武装等编著

[2]《VisualC++基础教程》,西安电子科技大学出版社,2006.6

开发环境:

MicrosoftVisualC++6.0

MicrosoftVisualC++7.0

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1