利用MFC编译一个简单的计算器.docx

上传人:b****5 文档编号:4645393 上传时间:2022-12-07 格式:DOCX 页数:20 大小:161.49KB
下载 相关 举报
利用MFC编译一个简单的计算器.docx_第1页
第1页 / 共20页
利用MFC编译一个简单的计算器.docx_第2页
第2页 / 共20页
利用MFC编译一个简单的计算器.docx_第3页
第3页 / 共20页
利用MFC编译一个简单的计算器.docx_第4页
第4页 / 共20页
利用MFC编译一个简单的计算器.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

利用MFC编译一个简单的计算器.docx

《利用MFC编译一个简单的计算器.docx》由会员分享,可在线阅读,更多相关《利用MFC编译一个简单的计算器.docx(20页珍藏版)》请在冰豆网上搜索。

利用MFC编译一个简单的计算器.docx

利用MFC编译一个简单的计算器

目录

一.设计题目。

2

二.设计目的和内容。

2

三.基本功能描述。

3

四.设计思路。

3

五.软件设计:

设计步骤、界面设计、关键功能的实现。

4

a)设计步骤。

4

b)界面设计。

5

c)关键功能的实现。

6

六.附录。

9

一.设计题目。

小型计算器程序的编写.

二.设计目的和内容。

【设计目的】

1学习VisualC++的MFC开发程序的步骤。

2综合运用所学的类、继承和多态的知识。

3进一步掌握程序的调试方法。

【设计内容】

1利用MFC的向导,创建基于对话框的应用程序,添加按钮、编辑框等控件;

2实现算术加、减、乘、除等运算;

3选做:

三角函数的运算、对数运算、指数运算、进制转换等。

三.基本功能描述。

具备整型数据、浮点型数据的算术(加、减、乘、除)运算功能。

依次输入第一个运算数、运算符(+,-,*,/)、第二个运算数,然后输出结果,按‘CE’键清屏。

四.设计思路。

a)首先考虑对所有按键分为两类,数字类和符号类。

0,1,2,3,4,5,6,7,8,9为数字类,+,-,*,/为符号类。

数字在计算过程中最多需要保存两个,所以定义了两个double型变量num1和num2来进行存储,符号需要一个char型变量cal来存储。

b)为显示数字的编辑框设立一个double型的关联变量m_Num,为显示符号的编辑框设立一个CString型的关联变量m_result,设立一个int型的小数点标志dotflag,设立一个int型的键入数字标志numflag,设立一个long型的小数部分权值quan,最后为了防止用户输入错误,设立一个判断输入是否为数字的int型标志mark。

c)然后考虑到在计算过程中num1和num2的储存状态有三种,num1==0和num2==0,也就是程序开始运行还没有开始录入数字的状态;num1!

=0和num2==0,也就是第一个数字已经录入,第二个数字还没有录入的状态这时候把m_Num的值赋给num1,m_Num归零;num1!

=0和num2!

=0,把m_Num的值赋给num2,m_Num归零,令m_Num等于num1和num2合并后的值。

五.软件设计:

设计步骤、界面设计、关键功能的实现。

a)设计步骤。

1.添加头文件。

将test.cpp改为test.h将其添加到计算器Dlg.cpp:

implementationfile中,如下:

#include"test.h"。

2.成员函数及其释义。

voidCAboutDlg:

:

DoDataExchange(CDataExchange*pDX)

{

CDialog:

:

DoDataExchange(pDX);

}

BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)

END_MESSAGE_MAP()

CTestDlg:

:

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

:

CDialog(CTestDlg:

:

IDD,pParent)

{

m_Num=0.0;

m_result=_T("");

m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

voidCTestDlg:

:

DoDataExchange(CDataExchange*pDX)

{

CDialog:

:

DoDataExchange(pDX);

DDX_Text(pDX,IDC_EDIT_DISPLAY,m_Num);

DDX_Text(pDX,IDC_EDIT2_SIGNS,m_result);}

BEGIN_MESSAGE_MAP(CTestDlg,CDialog)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_BN_CLICKED(IDC_BUTTON_NUM1,OnButtonNum1)

ON_BN_CLICKED(IDC_BUTTON_NUM2,OnButtonNum2)

ON_BN_CLICKED(IDC_BUTTON_NUM3,OnButtonNum3)

ON_BN_CLICKED(IDC_BUTTON_NUM4,OnButtonNum4)

ON_BN_CLICKED(IDC_BUTTON_NUM5,OnButtonNum5)

ON_BN_CLICKED(IDC_BUTTON_NUM6,OnButtonNum6)

ON_BN_CLICKED(IDC_BUTTON_NUM7,OnButtonNum7)

ON_BN_CLICKED(IDC_BUTTON_NUM8,OnButtonNum8)

ON_BN_CLICKED(IDC_BUTTON_NUM9,OnButtonNum9)

ON_BN_CLICKED(IDC_BUTTON_ZHENGFU,OnButtonZhengfu)

ON_BN_CLICKED(IDC_BUTTON_DENGYU,OnButtonDengyu)

ON_BN_CLICKED(IDC_BUTTON_NUM0,OnButtonNum0)

ON_BN_CLICKED(IDC_BUTTON_CLEAR,OnButtonClear)

ON_BN_CLICKED(IDC_BUTTON_MULTIPLY,OnButtonMultiply)

ON_BN_CLICKED(IDC_BUTTON_DIVIDE,OnButtonDivide)

ON_BN_CLICKED(IDC_BUTTON_PLUS,OnButtonPlus)

ON_BN_CLICKED(IDC_BUTTON_MINUS,OnButtonMinus)

ON_BN_CLICKED(IDC_BUTTON_DOT,OnButtonDot)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

b)界面设计。

1.仿照Windows附件里面的计算器,在资源视图中画好界面,如图1:

图1

2.修改每个button的属性,如图2:

图2

3.修改每个button的处理机制,如图:

在类向导Classwizard窗口中进行,如下图3:

图3

其他button按钮的修改类似。

4.修改每个edit的类型和名称,如图4:

在类向导Classwizard窗口中进行:

图4

单击AddVariable按钮,在如下窗口中进行修改,如图5:

图5

另一个edit的修改类似。

c)关键功能的实现。

1.OnButtonNum8()按钮的处理函数。

voidCTestDlg:

:

OnButtonNum8()

{

if(dotflag==1)

{

quan=quan*10;

m_Num+=8/(double)quan;

}

else

{

if(numflag==1)

{

m_Num=m_Num*10+8;

}

elsem_Num=8;

}

numflag=1;

mark=1;

UpdateData(FALSE);

}

其他数字按钮的处理函数均与其类似。

2.OnButtonMultiply()按钮的处理函数。

voidCTestDlg:

:

OnButtonMultiply()

{

UpdateData();

num1=m_Num;

cal='*';

numflag=0;

dotflag=0;

quan=1;

m_result='*';

mark=0;

UpdateData(FALSE);

}

其他符号按钮的处理函数均与其类似。

3.OnButtonDot()按钮的处理函数。

voidCTestDlg:

:

OnButtonDot()

{

UpdateData();

dotflag=1;

m_Num+=0.0;

m_result='.';

UpdateData(FALSE);

}

4.OnButtonClear()按钮的处理函数。

voidCTestDlg:

:

OnButtonClear()

{

UpdateData();

m_Num=0;

m_result='';

num1=0;

num2=0;

numflag=0;

dotflag=0;

quan=1;

mark=0;

UpdateData(FALSE);

}

5.OnButtonDengyu()按钮的处理函数。

voidCTestDlg:

:

OnButtonDengyu()

{

if(mark==1){

num2=m_Num;

switch(cal)

{

case'+':

m_Num=num1+num2;cal=0;break;

case'-':

m_Num=num1-num2;cal=0;break;

case'*':

m_Num=num1*num2;cal=0;break;

case'/':

m_Num=num1/num2;cal=0;break;

}

numflag=0;

dotflag=0;

quan=1;

UpdateData(FALSE);

}

else

MessageBox("error");

}

6.OnButtonZhengfu()按钮的处理函数。

voidCTestDlg:

:

OnButtonZhengfu()

{

UpdateData();

m_Num=0-m_Num;

UpdateData(FALSE);

}

六.附录。

1.调试。

图6

图7

24/6

2.测试结果。

图8

结果=4.

3.关键源代码。

voidCTestDlg:

:

OnButtonNum1()

{

if(dotflag==1)

{

quan=10*quan;

m_Num+=1/(double)quan;

}

else

{

if(numflag==1)

{

m_Num=10*m_Num+1;

}

elsem_Num=1;

}

numflag=1;

mark=1;

UpdateData(FALSE);

}

voidCTestDlg:

:

OnButtonNum2()

{

if(dotflag==1)

{

quan=quan*10;

m_Num+=2/(double)quan;

}

else

{

if(numflag==1)

{

m_Num=m_Num*10+2;

}

elsem_Num=2;

}

numflag=1;

mark=1;

UpdateData(FALSE);

}

voidCTestDlg:

:

OnButtonNum3()

{

if(dotflag==1)

{

quan=quan*10;

m_Num+=3/(double)quan;

}

else

{

if(numflag==1)

{

m_Num=m_Num*10+3;

}

elsem_Num=3;

}

numflag=1;

mark=1;

UpdateData(FALSE);

}

voidCTestDlg:

:

OnButtonNum4()

{

if(dotflag==1)

{

quan=quan*10;

m_Num+=4/(double)quan;

}

else

{

if(numflag==1)

{

m_Num=m_Num*10+4;

}

elsem_Num=4;

}

numflag=1;

mark=1;

UpdateData(FALSE);

}

voidCTestDlg:

:

OnButtonNum5()

{

if(dotflag==1)

{

quan=quan*10;

m_Num+=5/(double)quan;

}

else

{

if(numflag==1)

{

m_Num=m_Num*10+5;

}

elsem_Num=5;

}

numflag=1;

mark=1;

UpdateData(FALSE);

}

voidCTestDlg:

:

OnButtonNum6()

{

if(dotflag==1)

{

quan=quan*10;

m_Num+=6/(double)quan;

}

else

{

if(numflag==1)

{

m_Num=m_Num*10+6;

}

elsem_Num=6;

}

numflag=1;

mark=1;

UpdateData(FALSE);

}

voidCTestDlg:

:

OnButtonNum7()

{

if(dotflag==1)

{

quan=quan*10;

m_Num+=7/(double)quan;

}

else

{

if(numflag==1)

{

m_Num=m_Num*10+7;

}

elsem_Num=7;

}

numflag=1;

mark=1;

UpdateData(FALSE);

}

voidCTestDlg:

:

OnButtonNum8()

{

if(dotflag==1)

{

quan=quan*10;

m_Num+=8/(double)quan;

}

else

{

if(numflag==1)

{

m_Num=m_Num*10+8;

}

elsem_Num=8;

}

numflag=1;

mark=1;

UpdateData(FALSE);

}

voidCTestDlg:

:

OnButtonNum9()

{

if(dotflag==1)

{

quan=quan*10;

m_Num+=9/(double)quan;

}

else

{

if(numflag==1)

{

m_Num=m_Num*10+9;

}

elsem_Num=9;

}

numflag=1;

mark=1;

UpdateData(FALSE);

}

voidCTestDlg:

:

OnButtonNum0()

{

if(dotflag==1)

{

quan=quan*10;

m_Num+=0/(double)quan;

}

else

{

if(numflag==1)

{

m_Num=m_Num*10+0;

}

elsem_Num=0;

}

numflag=1;

mark=1;

UpdateData(FALSE);

}

voidCTestDlg:

:

OnButtonZhengfu()

{

UpdateData();

m_Num=0-m_Num;

UpdateData(FALSE);

}

voidCTestDlg:

:

OnButtonDengyu()

{

if(mark==1){

num2=m_Num;

switch(cal)

{

case'+':

m_Num=num1+num2;cal=0;break;

case'-':

m_Num=num1-num2;cal=0;break;

case'*':

m_Num=num1*num2;cal=0;break;

case'/':

m_Num=num1/num2;cal=0;break;

}

numflag=0;

dotflag=0;

quan=1;

UpdateData(FALSE);

}

else

MessageBox("error");

}

voidCTestDlg:

:

OnButtonClear()

{

UpdateData();

m_Num=0;

m_result='';

num1=0;

num2=0;

numflag=0;

dotflag=0;

quan=1;

mark=0;

UpdateData(FALSE);

}

voidCTestDlg:

:

OnButtonMultiply()

{

UpdateData();

num1=m_Num;

cal='*';

numflag=0;

dotflag=0;

quan=1;

m_result='*';

mark=0;

UpdateData(FALSE);

}

voidCTestDlg:

:

OnButtonDivide()

{

UpdateData();

num1=m_Num;

cal='/';

numflag=0;

dotflag=0;

quan=1;

m_result='/';

mark=0;

UpdateData(FALSE);

}

 

voidCTestDlg:

:

OnButtonPlus()

{

UpdateData();

num1=m_Num;

cal='+';

numflag=0;

dotflag=0;

quan=1;

m_result='+';

mark=0;

UpdateData(FALSE);

}

voidCTestDlg:

:

OnButtonMinus()

{

UpdateData();

num1=m_Num;

cal='-';

numflag=0;

dotflag=0;

quan=1;

m_result='-';

mark=0;

UpdateData(FALSE);

}

voidCTestDlg:

:

OnButtonDot()

{

UpdateData();

dotflag=1;

m_Num+=0.0;

m_result='.';

UpdateData(FALSE);

}

classCTestDlg:

publicCDialog

{

public:

intmark;

longquan;

intnumflag;

intdotflag;

charcal;

doublenum2;

doublenum1;

CTestDlg(CWnd*pParent=NULL);//standardconstructor

enum{IDD=IDD_TEST_DIALOG};

doublem_Num;

CStringm_result;

protected:

virtualvoidDoDataExchange(CDataExchange*pDX);

//Implementation

protected:

HICONm_hIcon;

virtualBOOLOnInitDialog();

afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);

afx_msgvoidOnPaint();

afx_msgHCURSOROnQueryDragIcon();

afx_msgvoidOnButtonNum1();

afx_msgvoidOnButtonNum2();

afx_msgvoidOnButtonNum3();

afx_msgvoidOnButtonNum4();

afx_msgvoidOnButtonNum5();

afx_msgvoidOnButtonNum6();

afx_msgvoidOnButtonNum7();

afx_msgvoidOnButtonNum8();

afx_msgvoidOnButtonNum9();

afx_msgvoidOnButtonZhengfu();

afx_msgvoidOnButtonDengyu();

afx_msgvoidOnButtonNum0();

afx_msgvoidOnButtonClear();

afx_msgvoidOnButtonMultiply();

afx_msgvoidOnButtonDivide();

afx_msgvoidOnButtonPlus();

afx_msgvoidOnButtonMinus();

afx_msgvoidOnButtonDot();

DECLARE_MESSAGE_MAP()

};

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

当前位置:首页 > 高中教育 > 高中教育

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

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