1、利用MFC编译一个简单的计算器目录一.设计题目。 2二.设计目的和内容。 2三.基本功能描述。 3四.设计思路。 3五.软件设计:设计步骤、界面设计、关键功能的实现。 4a)设计步骤。 4b)界面设计。 5c)关键功能的实现。 6六.附录。 9一.设计题目。小型计算器程序的编写.二.设计目的和内容。【设计目的】1 学习Visual C+的MFC开发程序的步骤。2 综合运用所学的类、继承和多态的知识。3 进一步掌握程序的调试方法。【设计内容】 1 利用MFC的向导,创建基于对话框的应用程序,添加按钮、编辑框等控件;2 实现算术加、减、乘、除等运算;3 选做:三角函数的运算、对数运算、指数运算、进
2、制转换等。三.基本功能描述。具备整型数据、浮点型数据的算术(加、减、乘、除)运算功能。依次输入第一个运算数、运算符(+,-,*,/)、第二个运算数,然后输出结果,按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
3、型的小数点标志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合并后的值。五.软件设计
4、:设计步骤、界面设计、关键功能的实现。a)设计步骤。1.添加头文件。将test.cpp改为test.h将其添加到计算器Dlg.cpp : implementation file中,如下:#include test.h。2.成员函数及其释义。void CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)END_MESSAGE_MAP()CTestDlg:CTestDlg(CWnd* pParent /*=NULL*/) : CDia
5、log(CTestDlg:IDD, pParent) m_Num =0.0; m_result = _T(); m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);void CTestDlg: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
6、_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_BUTT
7、ON_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, OnButtonNum
8、0) 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_MAPE
9、ND_MESSAGE_MAP()b)界面设计。1.仿照Windows附件里面的计算器,在资源视图中画好界面,如图1:图 12.修改每个button的属性,如图2:图 23.修改每个button的处理机制,如图:在类向导Classwizard窗口中进行,如下图3:图 3其他button按钮的修改类似。4.修改每个edit的类型和名称,如图4:在类向导Classwizard窗口中进行:图 4单击Add Variable按钮,在如下窗口中进行修改,如图5:图 5另一个edit的修改类似。c)关键功能的实现。1. OnButtonNum8()按钮的处理函数。void CTestDlg:OnButton
10、Num8() if(dotflag=1) quan= quan*10; m_Num += 8 / (double)quan; else if(numflag=1) m_Num = m_Num * 10 + 8; else m_Num = 8; numflag = 1; mark=1; UpdateData(FALSE); 其他数字按钮的处理函数均与其类似。2. OnButtonMultiply()按钮的处理函数。void CTestDlg:OnButtonMultiply() UpdateData(); num1 = m_Num; cal = *; numflag = 0; dotflag =
11、 0; quan = 1; m_result=*; mark=0; UpdateData(FALSE);其他符号按钮的处理函数均与其类似。3. OnButtonDot()按钮的处理函数。void CTestDlg:OnButtonDot() UpdateData(); dotflag = 1; m_Num += 0.0; m_result=.; UpdateData(FALSE);4. OnButtonClear()按钮的处理函数。void CTestDlg:OnButtonClear() UpdateData(); m_Num =0; m_result= ; num1 = 0; num2 =
12、 0; numflag=0; dotflag=0; quan=1; mark=0; UpdateData(FALSE); 5. OnButtonDengyu()按钮的处理函数。void CTestDlg: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
13、 / num2;cal=0; break; numflag = 0; dotflag = 0; quan = 1; UpdateData(FALSE); else MessageBox(error);6. OnButtonZhengfu()按钮的处理函数。void CTestDlg:OnButtonZhengfu() UpdateData(); m_Num = 0-m_Num; UpdateData(FALSE);六.附录。1.调试。 图 6 图 724/62.测试结果。图 8结果=4.3.关键源代码。void CTestDlg:OnButtonNum1() if(dotflag=1) qua
14、n=10*quan;m_Num += 1 / (double)quan; else if(numflag=1) m_Num = 10*m_Num+ 1; else m_Num =1; numflag = 1; mark=1; UpdateData(FALSE);void CTestDlg:OnButtonNum2() if(dotflag=1) quan = quan*10; m_Num += 2 / (double)quan; else if(numflag=1) m_Num = m_Num * 10 + 2; else m_Num = 2; numflag = 1; mark=1; Upd
15、ateData(FALSE); void CTestDlg:OnButtonNum3() if(dotflag=1) quan= quan*10; m_Num += 3 / (double)quan; else if(numflag=1) m_Num = m_Num * 10 + 3; else m_Num = 3; numflag = 1; mark=1; UpdateData(FALSE); void CTestDlg:OnButtonNum4() if(dotflag=1) quan= quan*10; m_Num += 4 / (double)quan; else if(numflag
16、=1) m_Num = m_Num * 10 + 4; else m_Num = 4; numflag = 1; mark=1; UpdateData(FALSE); void CTestDlg:OnButtonNum5() if(dotflag=1) quan= quan*10; m_Num += 5 / (double)quan; else if(numflag=1) m_Num = m_Num * 10 + 5; else m_Num = 5; numflag = 1; mark=1; UpdateData(FALSE); void CTestDlg:OnButtonNum6() if(
17、dotflag=1) quan= quan*10; m_Num += 6 / (double)quan; else if(numflag=1) m_Num = m_Num * 10 + 6; else m_Num = 6; numflag = 1; mark=1; UpdateData(FALSE); void CTestDlg:OnButtonNum7() if(dotflag=1) quan= quan*10; m_Num += 7 / (double)quan; else if(numflag=1) m_Num = m_Num * 10 + 7; else m_Num = 7; numf
18、lag = 1; mark=1; UpdateData(FALSE); void CTestDlg:OnButtonNum8() if(dotflag=1) quan= quan*10; m_Num += 8 / (double)quan; else if(numflag=1) m_Num = m_Num * 10 + 8; else m_Num = 8; numflag = 1; mark=1; UpdateData(FALSE); void CTestDlg:OnButtonNum9() if(dotflag=1) quan= quan*10; m_Num += 9 / (double)q
19、uan; else if(numflag=1) m_Num = m_Num * 10 + 9; else m_Num = 9; numflag = 1; mark=1; UpdateData(FALSE);void CTestDlg:OnButtonNum0() if(dotflag=1) quan= quan*10; m_Num += 0 / (double)quan; else if(numflag=1) m_Num = m_Num * 10 + 0; else m_Num = 0; numflag = 1; mark=1; UpdateData(FALSE);void CTestDlg:
20、OnButtonZhengfu() UpdateData(); m_Num = 0-m_Num; UpdateData(FALSE);void CTestDlg: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;
21、 numflag = 0; dotflag = 0; quan = 1; UpdateData(FALSE); else MessageBox(error);void CTestDlg:OnButtonClear() UpdateData(); m_Num =0; m_result= ; num1 = 0; num2 = 0; numflag=0; dotflag=0; quan=1; mark=0; UpdateData(FALSE); void CTestDlg:OnButtonMultiply() UpdateData(); num1 = m_Num; cal = *; numflag
22、= 0; dotflag = 0; quan = 1; m_result=*; mark=0; UpdateData(FALSE);void CTestDlg:OnButtonDivide() UpdateData(); num1 = m_Num; cal = /; numflag = 0; dotflag = 0; quan = 1; m_result=/; mark=0; UpdateData(FALSE);void CTestDlg:OnButtonPlus() UpdateData(); num1 = m_Num; cal = +; numflag = 0; dotflag = 0;
23、quan = 1; m_result=+; mark=0; UpdateData(FALSE);void CTestDlg:OnButtonMinus() UpdateData(); num1 = m_Num; cal = -; numflag = 0; dotflag = 0; quan = 1; m_result=-; mark=0; UpdateData(FALSE);void CTestDlg:OnButtonDot() UpdateData(); dotflag = 1; m_Num += 0.0; m_result=.; UpdateData(FALSE);class CTestD
24、lg : public CDialogpublic: int mark; long quan; int numflag; int dotflag; char cal; double num2; double num1; CTestDlg(CWnd* pParent = NULL); / standard constructor enum IDD = IDD_TEST_DIALOG ; double m_Num; CString m_result; protected: virtual void DoDataExchange(CDataExchange* pDX);/ Implementatio
25、nprotected: HICON m_hIcon; virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); afx_msg void OnButtonNum1(); afx_msg void OnButtonNum2(); afx_msg void OnButtonNum3(); afx_msg void OnButtonNum4(); afx_msg void OnBu
26、ttonNum5(); afx_msg void OnButtonNum6(); afx_msg void OnButtonNum7(); afx_msg void OnButtonNum8(); afx_msg void OnButtonNum9(); afx_msg void OnButtonZhengfu(); afx_msg void OnButtonDengyu(); afx_msg void OnButtonNum0(); afx_msg void OnButtonClear(); afx_msg void OnButtonMultiply(); afx_msg void OnButtonDivide(); afx_msg void OnButtonPlus(); afx_msg void OnButtonMinus(); afx_msg void OnButtonDot(); DECLARE_MESSAGE_MAP();
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1