利用MFC编译一个简单的计算器.docx
- 文档编号:4645393
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:20
- 大小:161.49KB
利用MFC编译一个简单的计算器.docx
《利用MFC编译一个简单的计算器.docx》由会员分享,可在线阅读,更多相关《利用MFC编译一个简单的计算器.docx(20页珍藏版)》请在冰豆网上搜索。
利用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()
};
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 利用 MFC 编译 一个 简单 计算器