用MFC制作简易计算器
简单MFC程序设计(编写一个小型计算器)

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::OnButtonZhengfu() { UpdateData(); m_Num = 0-m_Num; UpdateData(FALSE); } void CTestDlg::OnButtonDengyu()
m_Num = m_Num * 10 + 8; } else m_Num = 8; } numflag = 1; mark=1; UpdateData(FALSE); } void CTestDlg::OnButtonNum9()
5
{ if(dotflag==1) { quan= quan*10; m_Num += 9 / (double)quan; } else { if(numflag==1) { m_Num = m_Num * 10 + 9; } else m_Num = 9; } numflag = 1; mark=1; UpdateData(FALSE);
是否为数字的 int 型标志 mark。
c) 然后考虑到在计算过程中 num1 和 num2 的储存状态有三种,num1==0 和
num2==0,也就是程序开始运行还没有开始录入数字的状态;num1!=0 和
num2==0,也就是第一个数字已经录入,第二个数字还没有录入的状态这时
简单计算器代码(MFC)

// changjiangDlg.cpp : implementation file//#include "stdafx.h"#include "changjiang.h"#include "changjiangDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialog{public:CAboutDlg();// Dialog Data//{{AFX_DATA(CAboutDlg)enum { IDD = IDD_ABOUTBOX };//}}AFX_DATA// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL// Implementationprotected://{{AFX_MSG(CAboutDlg)//}}AFX_MSGDECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){//{{AFX_DATA_INIT(CAboutDlg)//}}AFX_DATA_INIT}void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CAboutDlg)//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)//{{AFX_MSG_MAP(CAboutDlg)// No message handlers//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CChangjiangDlg dialogCChangjiangDlg::CChangjiangDlg(CWnd* pParent /*=NULL*/): CDialog(CChangjiangDlg::IDD, pParent){//{{AFX_DATA_INIT(CChangjiangDlg)xianshi = _T("");//}}AFX_DATA_INIT// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}void CChangjiangDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CChangjiangDlg)DDX_Text(pDX, IDC_EDIT1, xianshi);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CChangjiangDlg, CDialog)//{{AFX_MSG_MAP(CChangjiangDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON1, OnButton1)ON_BN_CLICKED(IDC_BUTTON2, OnButton2)ON_BN_CLICKED(IDC_BUTTON3, OnButton3)ON_BN_CLICKED(IDC_BUTTON4, OnButton4)ON_BN_CLICKED(IDC_BUTTON7, OnButton7)ON_BN_CLICKED(IDC_BUTTON12, OnButton12)ON_BN_CLICKED(IDC_BUTTON5, OnButton5)ON_BN_CLICKED(IDC_BUTTON8, OnButton8)ON_BN_CLICKED(IDC_BUTTON14, OnButton14)ON_BN_CLICKED(IDC_BUTTON6, OnButton6)ON_BN_CLICKED(IDC_BUTTON9, OnButton9)ON_BN_CLICKED(IDC_BUTTON16, OnButton16)ON_BN_CLICKED(IDC_BUTTON10, OnButton10)ON_EN_CHANGE(IDC_EDIT1, OnChangeEdit1)ON_BN_CLICKED(IDC_BUTTON17, OnButton17)ON_BN_CLICKED(IDC_BUTTON15, OnButton15)ON_BN_CLICKED(IDC_BUTTON13, OnButton13)ON_BN_CLICKED(IDC_BUTTON18, OnButton18)//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CChangjiangDlg message handlersBOOL CChangjiangDlg::OnInitDialog(){CDialog::OnInitDialog();// Add "About..." menu item to system menu.// IDM_ABOUTBOX must be in the system command range.ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// Set the icon for this dialog. The framework does this automatically// when the application's main window is not a dialogSetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small icon// TODO: Add extra initialization herereturn TRUE; // return TRUE unless you set the focus to a control}void CChangjiangDlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID, lParam);}}// If you add a minimize button to your dialog, you will need the code below// to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework.void CChangjiangDlg::OnPaint(){if (IsIconic()){CPaintDC dc(this); // device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);// Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// Draw the icondc.DrawIcon(x, y, m_hIcon);}else{CDialog::OnPaint();}}// The system calls this to obtain the cursor to display while the user drags// the minimized window.CChangjiangDlg::OnQueryDragIcon(){return (HCURSOR) m_hIcon;}double data_x = 0,data_y = 0;int flag = 0;void CChangjiangDlg::OnButton1(){xianshi += "7";UpdateData(FALSE);// TODO: Add your control notificationhandler code here}void CChangjiangDlg::OnButton2(){xianshi += "8";UpdateData(FALSE);// TODO: Add your control notification handler code here}void CChangjiangDlg::OnButton3(){xianshi += "9";UpdateData(FALSE);// TODO: Add your control notification handler code here}void CChangjiangDlg::OnButton4(){xianshi += "4";UpdateData(FALSE);// TODO: Add your control notification handler code here}void CChangjiangDlg::OnButton7(){xianshi += "5";UpdateData(FALSE);// TODO: Add your control notification handler code here}void CChangjiangDlg::OnButton12(){xianshi += "6";UpdateData(FALSE);// TODO: Add your control notification handler code here}void CChangjiangDlg::OnButton5(){xianshi += "1";UpdateData(FALSE);// TODO: Add your control notification handler code here}void CChangjiangDlg::OnButton8(){xianshi += "2";UpdateData(FALSE);// TODO: Add your control notification handler code here}void CChangjiangDlg::OnButton14(){xianshi += "3";UpdateData(FALSE);// TODO: Add your control notification handler code here}void CChangjiangDlg::OnButton6(){xianshi += "0";UpdateData(FALSE);// TODO: Add your control notification handler code here}void CChangjiangDlg::OnButton9(){xianshi += ".";UpdateData(FALSE);// TODO: Add your control notification handler code here}void CChangjiangDlg::OnButton16(){char str[30];strcpy(str,(LPSTR)(LPCTSTR)xianshi);data_x = atof(str);flag = 1;xianshi = "";UpdateData(FALSE);// TODO: Add your control notification handler code here}void CChangjiangDlg::OnButton10(){char str[30];strcpy(str,(LPSTR)(LPCTSTR)xianshi);data_y = atof(str);double ans = 0;switch(flag){case 1: ans = data_x + data_y;break;case 2:ans = data_x - data_y;break;case 3:ans = data_x * data_y;break;case 4:if(data_y != 0)ans = data_x / data_y;break;}char S[20];gcvt(ans,15,S);xianshi = S;UpdateData(FALSE);// TODO: Add your control notification handler code here}void CChangjiangDlg::OnChangeEdit1(){UpdateData(TRUE);// TODO: If this is a RICHEDIT control, the control will not// send this notification unless you override the CDialog::OnInitDialog()// function and call CRichEditCtrl().SetEventMask()// with the ENM_CHANGE flag ORed into the mask.// TODO: Add your control notification handler code here}void CChangjiangDlg::OnButton17(){char str[30];strcpy(str,(LPSTR)(LPCTSTR)xianshi);data_x = atof(str);flag = 2;xianshi = "";UpdateData(FALSE);// TODO: Add your control notification handler code here}void CChangjiangDlg::OnButton15(){char str[30];strcpy(str,(LPSTR)(LPCTSTR)xianshi);data_x = atof(str);flag = 3;xianshi = "";UpdateData(FALSE);// TODO: Add your control notification handler code here}void CChangjiangDlg::OnButton13(){char str[30];strcpy(str,(LPSTR)(LPCTSTR)xianshi);data_x = atof(str);flag = 4;xianshi = "";UpdateData(FALSE);// TODO: Add your control notification handler code here}void CChangjiangDlg::OnButton18(){xianshi = "";data_x = data_y = 0;flag = 0;UpdateData(FALSE);// TODO: Add your control notificationhandler code here }。
MFC设计简单的计算器范文

石家庄经济学院实验报告学院:专业: 计算机信息工程学院计算机实验中心制《Windows程序设计》实验报告姓名学号日期实验室计算机软件技术实验指导教师设备编号实验题目实验9 对话框一、实验目的1. 掌握对话框类的定义及使用2. 掌握对话框的数据交换和检验二、实验内容1.编写一个基于对话框的程序,当用户点击对话框上的按钮时弹出一个模态对话框,显示的对话框中央显示出当前时间。
程序界面如下图所示:2.试着编写一个可以完成计算器的基于对话框的应用程序,该应用程序具有“加”、“减”、“乘”、“除”的功能三、源代码及实验结果1.显示时间核心代码:class CMydialog : public CDialog{// Constructionpublic:C Mydialog(CWnd* pParent = NULL); // standard constructor// Dialog Data//{{AFX_DATA(CMydialog)e num { IDD = IDD_DIALOG1 };C String m_time;//}}AFX_DATA// Overrides// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CMydialog)p rotected:v irtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL// Implementationprotected:// Generated message map functions//{{AFX_MSG(CMydialog)a fx_msg void On_OK();a fx_msg void On_Cancel();//}}AFX_MSGD ECLARE_MESSAGE_MAP()};CMydialog::CMydialog(CWnd* pParent /*=NULL*/): CDialog(CMydialog::IDD, pParent){//{{AFX_DATA_INIT(CMydialog)m_time = _T("");//}}AFX_DATA_INIT}void CMydialog::DoDataExchange(CDataExchange* pDX) {C Dialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CMydialog)D DX_Text(pDX, IDC_STA TIC1, m_time);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CMydialog, CDialog)//{{AFX_MSG_MAP(CMydialog)O N_BN_CLICKED(IDC_BUTTON1, On_OK)O N_BN_CLICKED(IDC_BUTTON2, On_Cancel)//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CMydialog message handlersvoid CMydialog::On_OK(){// TODO: Add your control notification handler code here C Dialog::OnOK();}void CMydialog::On_Cancel(){// TODO: Add your control notification handler code here C Dialog::OnCancel();}void CTest10_1Dlg::OnButton1(){// TODO: Add your control notification handler code here C Time time = CTime::GetCurrentTime();C Mydialog dlg;d lg.m_time = time.Format("%Y-%m-%d %H:%M:%S");U pdateData(FALSE);d lg.DoModal();}结果:图一2.计算器核心代码:CTest10_2Dlg::CTest10_2Dlg(CWnd* pParent /*=NULL*/): CDialog(CTest10_2Dlg::IDD, pParent){n um1 = 0;n um2 = 0;//{{AFX_DATA_INIT(CTest10_2Dlg)// m_result = _T("");m_result.Format("%g",num1);//}}AFX_DATA_INIT// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON1);e = 0;o perate = 'N';_Flag = FALSE;D otFlag = FALSE;}void CTest10_2Dlg::DoDataExchange(CDataExchange* pDX){C Dialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CTest10_2Dlg)D DX_Text(pDX, IDC_EDIT1, m_result);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CTest10_2Dlg, CDialog)//{{AFX_MSG_MAP(CTest10_2Dlg)O N_WM_SYSCOMMAND()O N_WM_PAINT()O N_WM_QUERYDRAGICON()O N_BN_CLICKED(IDC_BUTTON0, OnButton0)O N_BN_CLICKED(IDC_BUTTON1, OnButton1)O N_BN_CLICKED(IDC_BUTTON2, OnButton2)O N_BN_CLICKED(IDC_BUTTON3, OnButton3)O N_BN_CLICKED(IDC_BUTTON4, OnButton4)O N_BN_CLICKED(IDC_BUTTON5, OnButton5)O N_BN_CLICKED(IDC_BUTTON6, OnButton6)O N_BN_CLICKED(IDC_BUTTON7, OnButton7)O N_BN_CLICKED(IDC_BUTTON8, OnButton8)O N_BN_CLICKED(IDC_BUTTON9, OnButton9)O N_BN_CLICKED(IDC_BUTTON00, OnButton00)O N_BN_CLICKED(IDC_DOT, OnDot)O N_BN_CLICKED(IDC_BUTTON_, OnButton)O N_BN_CLICKED(IDC_ADD, OnAdd)O N_BN_CLICKED(IDC_MINUS, OnMinus)O N_BN_CLICKED(IDC_MUL, OnMul)O N_BN_CLICKED(IDC_DIV, OnDiv)O N_BN_CLICKED(IDC_COUNT, OnCount)//}}AFX_MSG_MAPEND_MESSAGE_MAP()void CTest10_2Dlg::OnButton0(){// TODO: Add your control notification handler code here P ress(0);}void CTest10_2Dlg::OnButton1(){// TODO: Add your control notification handler code here P ress(1);}void CTest10_2Dlg::OnButton2(){// TODO: Add your control notification handler code here P ress(2);}void CTest10_2Dlg::OnButton3(){// TODO: Add your control notification handler code here}void CTest10_2Dlg::OnButton4(){// TODO: Add your control notification handler code here P ress(4);}void CTest10_2Dlg::OnButton5(){// TODO: Add your control notification handler code here P ress(5);}void CTest10_2Dlg::OnButton6(){// TODO: Add your control notification handler code here P ress(6);}void CTest10_2Dlg::OnButton7(){// TODO: Add your control notification handler code here P ress(7);}void CTest10_2Dlg::OnButton8(){// TODO: Add your control notification handler code here P ress(8);}void CTest10_2Dlg::OnButton9(){// TODO: Add your control notification handler code here P ress(9);}void CTest10_2Dlg::OnButton00(){// TODO: Add your control notification handler code here // Flag00 = TRUE;P ress(0);}void CTest10_2Dlg::OnDot(){// TODO: Add your control notification handler code here D otFlag = TRUE;}void CTest10_2Dlg::OnButton(){// TODO: Add your control notification handler code here // operate = 'n';m_result = "-";U pdateData(FALSE);_Flag = TRUE;}void CTest10_2Dlg::OnAdd(){// TODO: Add your control notification handler code here o perate = '+';D otFlag = FALSE;_Flag = FALSE;}void CTest10_2Dlg::OnMinus(){// TODO: Add your control notification handler code here o perate = '-';D otFlag = FALSE;_Flag = FALSE;}void CTest10_2Dlg::OnMul(){// TODO: Add your control notification handler code here o perate = '*';D otFlag = FALSE;_Flag = FALSE;}void CTest10_2Dlg::OnDiv(){// TODO: Add your control notification handler code here o perate = '/';D otFlag = FALSE;_Flag = FALSE;}void CTest10_2Dlg::OnCount(){// TODO: Add your control notification handler code here s witch(operate){c ase '+':num1 += num2;break;c ase '-':num1 -= num2;break;c ase '*':num1 *= num2;break;c ase '/':if(num2 == 0){MessageBox("除数不可以是0!");return;}num1 /= num2;break;c ase 'n':num1 = 0 - num2;break;c ase 'N':break;}m_result.Format("%g",num1);U pdateData(FALSE);D otFlag = FALSE;_Flag = FALSE;n um1 = 0;n um2 = 0;e = 0;o perate = 'N';}void CTest10_2Dlg::Press(int n){i f(DotFlag){if(operate == 'N'){if(n){if(_Flag){num1 -= n*pow(0.1,e);}else{num1 += n*pow(0.1,e);}m_result.Format("%g",num1);}else{UpdateData(TRUE);m_result += '0';}}else{if(_Flag){num2 -= n*pow(0.1,e);}num2 += n*pow(0.1,e);m_result.Format("%g",num2);}}else{if(operate == 'N'){num1 *= 10;if(_Flag){num1 -= n;}else{num1 += n;}m_result.Format("%g",num1);}else{num2 *= 10;if(_Flag){num2 -= n;}else{num2 += n;}m_result.Format("%g",num2);}}++e;UpdateData(FALSE);}结果:整数加法:123+33小数加法:23.65+19.8 365.389*23 129.65/15负数-78+23四、实验总结计算器可以完成简单的整数、小数、正负数的加减乘除运算,不过结果不够精确,使用的数据类型是double型,格式转换时使用的“%g”。
mfc入门教程之实现一个简单的计算器

mfc⼊门教程之实现⼀个简单的计算器mfc学习之前的了解什么是mfc?MFC是微软基础类的缩写(Microsoft Foundation Classes),是⼀个庞⼤的类库,可以理解为⼀种在Windows上开发软件的架构,是微软专为Visual C++定制的。
该类库提供⼀组通⽤的可重⽤的类库供开发⼈员使⽤。
没有MFC之前,Windows上⽤Win32 API进⾏编程,之后MFC出现,在⼀定程度上提⾼了软件开发效率,它是对win32 API的封装,所以易⽤性好,不过性能会⽐win32开发低⼀些,⼆者各有所长。
在Windows上开发界⾯程序以前⽤MFC最合适,能兼顾效率和性能。
简单来说mfc就是⽅便windows程序开发的框架,不单单是界⾯,更有很多类库。
mfc能⼲什么?在学习mfc之前想必⼤家都会关系这个问题,很多⼈学习了c++,或者是学习了c和c++之后发现还是只能⿊窗⼝下⾯做做数学题,写写算法,做不出什么实际的东西(这⾥不是说c/++做不出实际的东西,⽽是⼤多数的⼈做不出)。
问这个问题就像问⼀把剪⼑能⼲什么,剪⼑什么也⼲不了,我们可以拿着剪⼑剪东西,剪的好坏更多的是在于使⽤者⽽不是⼯具本⾝。
当使⽤⼀件⼯具熟练之后去使⽤同类的⼯具你会发现很轻松就能上⼿,因为它们看似有区别实则万变不离其宗。
mfc和qt的选择很多⼈会去推荐学习qt说mfc过时了,如果你想要跨平台那么qt⾮你莫属,如果只是在windows上,那么mfc⽆可替代。
⽆论是qt还是mfc在windows平台上内部的实现原理都是⼀样的,只是封装上有些区别。
mfc制作简单计算器-界⾯设计1.新建mfc项⽬启动vs2013,点击⽂件->新建->项⽬->vc++->mfc应⽤程序点击确定进⼊mfc应⽤程序向导下⼀步选择基于对话框,点击完成。
这时候mfc为我们⽣成了默认的界⾯,⼀个静态⽂本框,两个按钮。
2.计算器界⾯设计⾸先删除三个默认创建的控件,选中之后右键,删除或者直接按下delete键。
MFC计算器

, m_cInNumber(0) { m_hIcon = AfxGetApp->LoadIcon(IDR_MAINFRAME); } void CCalcDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT, m_csEditText); } BEGIN_MESSAGE_MAP(CCalcDlg, CDialog) ON_WM_SYSCOMMAND ON_WM_PAINT ON_WM_QUERYDRAGICON //}}AFX_MSG_MAP ON_BN_CLICKED(IDC_BTNNUM0, &CCalcDlg::OnBnClickedBtnnum0) ON_BN_CLICKED(IDC_BTNNUM1, &CCalcDlg::OnBnClickedBtnnum1) ON_BN_CLICKED(IDC_BTNNUM2, &CCalcDlg::OnBnClickedBtnnum2) ON_BN_CLICKED(IDC_BTNNUM3, &CCalcDlg::OnBnClickedBtnnum3) ON_BN_CLICKED(IDC_BTNNUM4, &CCalcDlg::OnBnClickedBtnnum4) ON_BN_CLICKED(IDC_BTNNUM5, &CCalcDlg::OnBnClickedBtnnum5) ON_BN_CLICKED(IDC_BTNNUM6, &CCalcDlg::OnBnClickedBtnnum6) ON_BN_CLICKED(IDC_BTNNUM7, &CCalcDlg::OnBnClickedBtnnum7) ON_BN_CLICKED(IDC_BTNNUM8, &CCalcDlg::OnBnClickedBtnnum8)
MFC实现简单计算器11页

MFC实现简易计算器姓名柳超学号**********专业计算机科学与技术指导老师蒋年德2013年01月12日一、设计题目设计一个基于对话框的简单计算器,实现整数、小数的加减乘除四则运算以及开方、阶乘、取对数等操作。
二、运行环境硬件:Haier A60 Notebook,Celeron M 1.86GHz\512MB\250GB软件:Windows xp professional 5.1,visual C++ 6.0三、算法设计的思想打开计算器程序,输入数据,开始时编辑框成员变量m_num初始化为零。
按下数字按钮后,根据bool型变量b_zf判断m_num的正负号,对其进行相关处理,然后在判断是否有小数点,处理后输出结果。
同时根据judge的大小,判断是单目运算还是双目运算,进入不同的处理程序,最终输出结果。
若按下双目运算符,则把m_num存入num2,按下输入第二个操作数并算出结果。
若按下的是单目运算符,则直接对其处理得出结果。
若按下清零,则m_num 等于0.在运算中还要判断运算是否合法,以及结果是否超出显示范围,以做出相关提示,按下清零。
算出后把结果保存至num2。
若需用算出的结果继续运算则回到输入完第一个操作数后,若不需要则判断试否需要开始新一轮的运算,不需要则结束。
四、流程图五、算法分析设计在visual C++ 6.0中新建一个MFC APPWizard[exe]工程文件,文件名为CALU,应用程序类型选为基本对话,完成后,在Dialog中画出计算器的基本控件,包括0~10个数字按钮,符号转换按钮“+/-”,小数点符号“.”,加、减、乘、除四个双目运算符按钮,开方“sqrt”,阶乘“n!”,取对数“ln”等三个单目运算符按钮,计算并显示运算结果的等于号“=”按钮,以及用于退回的“backspace”按钮,清除“clear”按钮和退出“exit”按钮,一个编辑框,用于显示运算值。
最后给每个控件定义ID号和标题。
基于MFC的一个简单计算器

基于MFC的⼀个简单计算器写⼀个简单的计算器并不是什么很难的事,主要⽬的是要通过这个程序来学习和分析其中的核⼼算法。
这个简易计算器的核⼼部分就是对输⼊的表达式的正确性判断与求值,其中包括对表达式的解析、中缀表达式转后缀表达式、后缀表达式求值等等⼏个⽅⾯。
⼀、封装核⼼代码《》和《》这两篇⽂章已经对核⼼算法部分进⾏了讲解,并附有源码。
在此基础上制作⼀个简单计算器,我们要做的仅仅是封装核⼼代码并加⼊MFC⼯程中。
下⾯是我封装的⼀个 Expression 类:Expression.h#pragma once#include <iostream>#include <sstream>#include <string>#include <vector>#include <stack>#include <utility>using namespace std;class Expression{public:Expression(string str);bool test(); // 外部接⼝,判断表达式是否合法double calculate(); // 外部接⼝,计算表达式的值private:vector<pair<string, int>> word;string expr; // 算术表达式int idx; // word下标int sym; // 单词种别编码int err; // 错误int word_analysis(vector<pair<string, int>>& , const string);void Next();void E();void T();void F();bool Right; // 保存表达式test结果private:int prior(int); // 获取运算符的优先级bool isOperator(int); // 通过种别编码判定是否是运算符vector<pair<string,int>> getPostfix(const vector<pair<string,int>>&); // 中缀转后缀void popTwoNumbers(stack<double>&, double&, double&); // 从栈中连续弹出两个操作数double stringToDouble(const string&); // 把string转换为doubledouble expCalculate(const vector<pair<string, int>>&); // 计算后缀表达式的值};Expression.cpp#include "Expression.h"// 构造函数Expression::Expression( string str ):expr(str),idx(0),err(0),Right(true){}// 外部接⼝bool Expression::test(){return Right;}int err_num = word_analysis(word, expr);if (-1 == err_num){Right = false;}else{// 词法正确,进⾏语法分析Next();E();if (sym == 0 && err == 0) // 注意要判断两个条件Right = true;elseRight = false;}return Right;}// 外部接⼝double Expression::calculate(){if (test()){return expCalculate(getPostfix(word));}else{exit(0);}}/*--------------------------------词法分析----------------------------*/int Expression::word_analysis(vector<pair<string, int>>& word, const string expr) {for(int i=0; i<expr.length(); ++i){// 如果是 + - x ÷ ( )if(expr[i] == '(' || expr[i] == ')' || expr[i] == '+'|| expr[i] == '-' || expr[i] == '*' || expr[i] == '/'){string tmp;tmp.push_back(expr[i]);switch (expr[i]){case '+':word.push_back(make_pair(tmp, 1));break;case '-':word.push_back(make_pair(tmp, 2));break;case '*':word.push_back(make_pair(tmp, 3));break;case '/':word.push_back(make_pair(tmp, 4));break;case '(':word.push_back(make_pair(tmp, 6));break;case ')':word.push_back(make_pair(tmp, 7));break;}}// 如果是数字开头else if(expr[i]>='0' && expr[i]<='9'){string tmp;while(expr[i]>='0' && expr[i]<='9'){tmp.push_back(expr[i]);++i;}if(expr[i] == '.'){++i;if(expr[i]>='0' && expr[i]<='9'){tmp.push_back('.');tmp.push_back(expr[i]);++i;}}else{return -1; // .后⾯不是数字,词法错误}}word.push_back(make_pair(tmp, 5));--i;}// 如果以.开头else{return -1; // 以.开头,词法错误}}return 0;}/*--------------------------------语法分析----------------------------*/ // 读下⼀单词的种别编码void Expression::Next(){if(idx < word.size())sym = word[idx++].second;elsesym = 0;}// E → T { +T | -T }void Expression::E(){T();while(sym == 1 || sym == 2){Next();T();}}// T → F { *F | /F }void Expression::T(){F();while(sym == 3 || sym == 4){Next();F();}}// F → (E) | dvoid Expression::F(){if (sym == 5){Next();}else if(sym == 6){Next();E();if (sym == 7){Next();}else{err = -1;}}else{err = -1;}}/*--------------------------------求值部分----------------------------*/ int Expression::prior(int sym){case 1:case 2:return 1;case 3:case 4:return 2;default:return 0;}}bool Expression::isOperator(int sym){switch (sym){case 1:case 2:case 3:case 4:return true;default:return false;}}vector<pair<string,int>> Expression::getPostfix( const vector<pair<string,int>>& expr){vector<pair<string, int>> output; // 输出stack<pair<string, int>> s; // 操作符栈for(int i=0; i<expr.size(); ++i){pair<string, int> p = expr[i];if(isOperator(p.second)){while(!s.empty() && isOperator(s.top().second) && prior(s.top().second)>=prior(p.second)) {output.push_back(s.top());s.pop();}s.push(p);}else if(p.second == 6){s.push(p);}else if(p.second == 7){while(s.top().second != 6){output.push_back(s.top());s.pop();}s.pop();}else{output.push_back(p);}}while (!s.empty()){output.push_back(s.top());s.pop();}return output;}void Expression::popTwoNumbers( stack<double>& s, double& first, double& second ){first = s.top();s.pop();second = s.top();s.pop();}double Expression::stringToDouble( const string& str ){double d;stringstream ss;ss << str;ss >> d;return d;double Expression::expCalculate( const vector<pair<string,int>>& postfix ){double first,second;stack<double> s;for(int i=0; i<postfix.size(); ++i){pair<string,int> p = postfix[i];switch (p.second){case 1:popTwoNumbers(s, first, second);s.push(second+first);break;case 2:popTwoNumbers(s, first, second);s.push(second-first);break;case 3:popTwoNumbers(s, first, second);s.push(second*first);break;case 4:popTwoNumbers(s, first, second);s.push(second/first);break;default:s.push(stringToDouble(p.first));break;}}double result = s.top();s.pop();return result;}使⽤⽅法(测试):int main(){Expression e("(1.5+2.5)*2+0.53");if(e.test()) // 判断表达式是否合法cout << e.calculate() << endl;return 0;}⼆、加⼊MFC⼯程OK,核⼼代码(表达式的合法性判断与求值)已经封装到 Expression 类中,下⾯要做的就是新建⼀个 MFC ⼯程,并把 Expression 类加⼊⼯程⾥,并实现按钮的功能就⾏了。
MFC编程简单计算器

第一步:设置界面,变量及函数首先打开VC,选择MFC AppWizard[exe],设定好路径和工程名(这里我设置工程名为为“My”)。
这里要注意的是在创建向导步骤1的时候,我们选择“基本对话框”。
之后我们可以点击完成便看到以下界面此时我们把当前页面上原配的控件按Delete全部清除(如下图)1、设置界面接着我们按照MFC自带的控件选项进行我们本次计算器的控件添加(以下是控件)我们在原先清空的界面中依次用上图控件画出一个基本的计算器页面(如下图)。
上图我们用按钮控件添加一共15个按钮,分别是数字“ 0 ~ 9”以及“+ - * /”。
每个控件“属性”都有属于它自己的ID,默认的按钮按键为IDC_BUTTON0,而且Cap当然我们为了“顾名思义”,对控件ID进行修改成我们容易辨认的(也可以不改),添加完控件并修改ID之后。
(如下图)这里我们把数字按钮0 设置ID为IDC_BUTTON14_NUM0,其他的依次类推2、添加变量添加3个成员变量和一个CEdit类的变量具体添加方法,就是右键主对话框CMyDlg->Add Member Variable 也可以是在菜单栏中选择“查看”->“建立类向导”这里我们把3个编辑框控件内的变量都改变为double型的(因为进行四则运算难免出现小数点)之后再在控件IDC_EDIT3中选择"Add Variable"并且数据类型选择 Control类型此时变量自动改为了 CEdit类这步的意思是说我们把编辑框控件3的设置为CEdit类并且设置一个成员对象是m_CResult。
3、添加消息相应函数完成修改ID后,就需给控件添加消息响应了,基本操作可以是直接双击控件,便会有向导提示。
MFC默认下了的响应信息都为On_开头,而且以下显示的是数字5的消息响应.之后所有的依次类推,这步骤一般不对成员函数名称做任何修改,直接点击OK即可到此为止我们基本上完成了计算器页面的前半部分预备工作,下来是我们的对控件具体实现代码的添加第2步:添加代码1、基本控件代码首先从加法开始void CMyDlg::OnButton1(){// TODO: Add your control notification handler code hereUpdateData();double n_result;n_result = m_num1 + m_num2;m_result = n_result;char sz[20];sprintf(sz,"%f",m_result);m_CResult.SetWindowText(sz);}UpdateData() 是MFC的窗口函数,用来刷新数据的由于我们进行基本运算需要更新数据所以必须添加这个函数。
MFC实现简易计算器

MFC实现简易计算器©Free Copy操作简便,还有帮助提示,支持double类型的数据进行运算,显示清除无效0. By: 杜运福计算器类结构如下:class CCalculatorDlg : public CDialog{// Constructionpublic:CCalculatorDlg(CWnd* pParent = NULL); // standard constructor// Dialog Data//{{AFX_DA TA(CCalculatorDlg)enum { IDD = IDD_CALCULA TOR_DIALOG };double m_Num;//}}AFX_DA TAdouble num1,num2; //第一、二操作数char cal; //运算符号BYTE dotflag; //小数点标志BYTE numflag; //键入数字标志long quan2; //小数部分权值// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CCalculatorDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL// Implementationprotected:HICON m_hIcon;// Generated message map functions//{{AFX_MSG(CCalculatorDlg)virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg void OnNum0();afx_msg void OnNum1();afx_msg void OnNum2();afx_msg void OnNum3();afx_msg void OnNum4();afx_msg void OnNum5();afx_msg void OnNum6();afx_msg void OnNum7();afx_msg void OnNum8();afx_msg void OnNum9();afx_msg void OnAdd();afx_msg void OnSub();afx_msg void OnMul();afx_msg void OnDiv();afx_msg void OnEqual();afx_msg void OnSign();afx_msg void OnInv();afx_msg void OnMod();afx_msg void OnSqrt();afx_msg void OnDot();afx_msg void OnClear();afx_msg void OnBackspace();afx_msg void OnHelp();//}}AFX_MSGDECLARE_MESSAGE_MAP()};完整实现代码如下:// CalculatorDlg.cpp : implementation file///****************************************************************************** *********** 简易计算器***** by 追梦2011-4-18******************************************************************************* *****/#include "stdafx.h"#include "Calculator.h"#include "CalculatorDlg.h"#include "math.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialog{public:CAboutDlg();// Dialog Data//{{AFX_DA TA(CAboutDlg)enum { IDD = IDD_ABOUTBOX };//}}AFX_DA TA// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support//}}AFX_VIRTUAL// Implementationprotected://{{AFX_MSG(CAboutDlg)//}}AFX_MSGDECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){//{{AFX_DA TA_INIT(CAboutDlg)//}}AFX_DA TA_INIT}void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DA TA_MAP(CAboutDlg)//}}AFX_DA TA_MAP}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)//{{AFX_MSG_MAP(CAboutDlg)// No message handlers//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CCalculatorDlg dialogCCalculatorDlg::CCalculatorDlg(CWnd* pParent /*=NULL*/): CDialog(CCalculatorDlg::IDD, pParent){//{{AFX_DA TA_INIT(CCalculatorDlg)m_Num = 0.0;//}}AFX_DA TA_INIT// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}void CCalculatorDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DA TA_MAP(CCalculatorDlg)DDX_Text(pDX, IDC_Num, m_Num);//}}AFX_DA TA_MAP}BEGIN_MESSAGE_MAP(CCalculatorDlg, CDialog) //{{AFX_MSG_MAP(CCalculatorDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_Num0, OnNum0)ON_BN_CLICKED(IDC_Num1, OnNum1)ON_BN_CLICKED(IDC_Num2, OnNum2)ON_BN_CLICKED(IDC_Num3, OnNum3)ON_BN_CLICKED(IDC_Num4, OnNum4)ON_BN_CLICKED(IDC_Num5, OnNum5)ON_BN_CLICKED(IDC_Num6, OnNum6)ON_BN_CLICKED(IDC_Num7, OnNum7)ON_BN_CLICKED(IDC_Num8, OnNum8)ON_BN_CLICKED(IDC_Num9, OnNum9)ON_BN_CLICKED(IDC_Add, OnAdd)ON_BN_CLICKED(IDC_Sub, OnSub)ON_BN_CLICKED(IDC_Mul, OnMul)ON_BN_CLICKED(IDC_Div, OnDiv)ON_BN_CLICKED(IDC_Equal, OnEqual)ON_BN_CLICKED(IDC_Sign, OnSign)ON_BN_CLICKED(IDC_Inv, OnInv)ON_BN_CLICKED(IDC_Mod, OnMod)ON_BN_CLICKED(IDC_Sqrt, OnSqrt)ON_BN_CLICKED(IDC_Dot, OnDot)ON_BN_CLICKED(IDC_Clear, OnClear)ON_BN_CLICKED(IDC_Backspace, OnBackspace) ON_BN_CLICKED(IDC_Help, OnHelp)//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CCalculatorDlg message handlers//////////////////////////////////////////////////////////////////////////// BOOL CCalculatorDlg::OnInitDialog(){CDialog::OnInitDialog();// Add "About..." menu item to system menu.// IDM_ABOUTBOX must be in the system command range.ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARA TOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// Set the icon for this dialog. The framework does this automatically// when the application's main window is not a dialogSetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small icon// TODO: Add extra initialization herequan2 = 1;dotflag = 0;numflag = 0;return TRUE; // return TRUE unless you set the focus to a control}void CCalculatorDlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID, lParam);}}// If you add a minimize button to your dialog, you will need the code below// to draw the icon. For MFC applications using the document/view model,// this is automatically done for you by the framework.void CCalculatorDlg::OnPaint(){if (IsIconic()){CPaintDC dc(this); // device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);// Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// Draw the icondc.DrawIcon(x, y, m_hIcon);}else{CDialog::OnPaint();}}// The system calls this to obtain the cursor to display while the user drags// the minimized window.HCURSOR CCalculatorDlg::OnQueryDragIcon(){return (HCURSOR) m_hIcon;}//键入0void CCalculatorDlg::OnNum0(){UpdateData();if(dotflag){quan2 *= 10;m_Num += 0 / (double)quan2;}else{if(numflag){m_Num = m_Num * 10 + 0;}else m_Num = 0;}numflag = 1;UpdateData(FALSE);}//键入 1void CCalculatorDlg::OnNum1(){UpdateData();if(dotflag){quan2 *= 10;m_Num += 1 / (double)quan2;}else{if(numflag){m_Num = m_Num * 10 + 1;}else m_Num = 1;}numflag = 1;UpdateData(FALSE);}//键入 2void CCalculatorDlg::OnNum2(){UpdateData();if(dotflag){quan2 *= 10;m_Num += 2 / (double)quan2;}else{if(numflag){m_Num = m_Num * 10 + 2;}else m_Num = 2;}numflag = 1;UpdateData(FALSE);}//键入 3void CCalculatorDlg::OnNum3(){UpdateData();if(dotflag){quan2 *= 10;m_Num += 3 / (double)quan2;}else{if(numflag){m_Num = m_Num * 10 + 3;}else m_Num = 3;}numflag = 1;UpdateData(FALSE);}//键入 4void CCalculatorDlg::OnNum4(){UpdateData();if(dotflag){quan2 *= 10;m_Num += 4 / (double)quan2;}else{if(numflag){m_Num = m_Num * 10 + 4;}else m_Num = 4;}numflag = 1;UpdateData(FALSE);}//键入 5void CCalculatorDlg::OnNum5(){UpdateData();if(dotflag){quan2 *= 10;m_Num += 5 / (double)quan2;}else{if(numflag){m_Num = m_Num * 10 + 5;}else m_Num = 5;}numflag = 1;UpdateData(FALSE);}//键入 6void CCalculatorDlg::OnNum6(){UpdateData();if(dotflag){quan2 *= 10;m_Num += 6 / (double)quan2;}else{if(numflag){m_Num = m_Num * 10 + 6;}else m_Num = 6;}numflag = 1;UpdateData(FALSE);}//键入7void CCalculatorDlg::OnNum7(){UpdateData();if(dotflag){quan2 *= 10;m_Num += 7 / (double)quan2;}else{if(numflag){m_Num = m_Num * 10 + 7;}else m_Num = 7;}numflag = 1;UpdateData(FALSE);}//键入8void CCalculatorDlg::OnNum8(){UpdateData();if(dotflag){quan2 *= 10;m_Num += 8 / (double)quan2;}else{if(numflag){m_Num = m_Num * 10 + 8;}else m_Num = 8;}numflag = 1;UpdateData(FALSE);}//键入9void CCalculatorDlg::OnNum9(){UpdateData();if(dotflag){quan2 *= 10;m_Num += 9 / (double)quan2;}else{if(numflag){m_Num = m_Num * 10 + 9;}else m_Num = 9;}numflag = 1;UpdateData(FALSE);}//键入+void CCalculatorDlg::OnAdd(){UpdateData();num1 = m_Num;cal = '+';numflag = 0;dotflag = 0;quan2 = 1;}//键入-void CCalculatorDlg::OnSub(){UpdateData();num1 = m_Num;cal = '-';numflag = 0;dotflag = 0;quan2 = 1;}//键入*void CCalculatorDlg::OnMul(){UpdateData();num1 = m_Num;cal = '*';numflag = 0;dotflag = 0;quan2 = 1;}//键入/void CCalculatorDlg::OnDiv(){UpdateData();num1 = m_Num;cal = '/';numflag = 0;dotflag = 0;quan2 = 1;}//键入%void CCalculatorDlg::OnMod(){UpdateData();num1 = m_Num;cal = '%';numflag = 0;dotflag = 0;quan2 = 1;}//键入=void CCalculatorDlg::OnEqual(){UpdateData();num2 = m_Num;switch(cal){case '+': m_Num = num1 + num2; break;case '-': m_Num = num1 - num2; break;case '*': m_Num = num1 * num2; break;case '/': m_Num = num1 / num2; break;case '%': m_Num = (int)num1 % (int)num2; break;}numflag = 0;dotflag = 0;quan2 = 1;UpdateData(FALSE);}//键入+/-void CCalculatorDlg::OnSign(){UpdateData();m_Num = 0 - m_Num;UpdateData(FALSE);}//键入1/xvoid CCalculatorDlg::OnInv(){UpdateData();m_Num = 1 / m_Num;numflag = 0;dotflag = 0;quan2 = 1;UpdateData(FALSE);}//键入sqrtvoid CCalculatorDlg::OnSqrt(){UpdateData();m_Num = sqrt(m_Num);numflag = 0;dotflag = 0;quan2 = 1;UpdateData(FALSE);}//键入'.' 小数点void CCalculatorDlg::OnDot(){UpdateData();dotflag = 1;m_Num += 0.0;UpdateData(FALSE);}void CCalculatorDlg::OnClear(){UpdateData();m_Num = 0;num1 = 0;num2 = 0;numflag = 0;dotflag = 0;quan2 = 1;UpdateData(FALSE);}//撤销之前键入的数,可以依次撤销所有整数位或小数位void CCalculatorDlg::OnBackspace(){UpdateData();static int dotquan = quan2; //一次初始化long temp;if(dotflag && numflag) //撤销小数部分{if(dotquan >= 10){temp = (long)(m_Num * dotquan);m_Num= (double)(temp/10);dotquan /= 10;m_Num= m_Num / dotquan;}}else //撤销整数部分{if(numflag && m_Num){ m_Num = (long)m_Num /10;}}UpdateData(FALSE);}//帮助提示void CCalculatorDlg::OnHelp(){const char tipname[]="简易计算器帮助by 追梦";MessageBox("\t简易计算器\tby追梦\n\n 只用一个文本编辑框,用于输入和输出,接受粘贴或键盘输入。
MFC入门教程之简易计算器制作

MFC入门之简易计算器制作最近自学MFC,入门的时候走了不少弯路,所以特做此教程,希望能帮助一些人能够快速入门,少走一些弯路。
这个教程就是通过一个简易计算器的制作让大家了解MFC界面编程的基本步骤和几个常用控件的使用方法。
使用软件Visual C++ 6.0.首先,新建一个MFC基于对话框的工程。
点击文件-新建,在工程选项卡里选择MFC AppWizard[exe],给工程命名Jisuan。
点击确定。
在接下来的向导里选择基于对话框,其他选项使用默认即可,之间点击完成。
先给大家介绍一下Visual C++ 6.0的界面。
左边框起来的是文件资源控制区,默认有三个选项卡,分别是ClassView、ResourceView和FileView。
分别用来显示类、资源和文件。
中间这个主要操作区呢,就是我们用来设计界面和编程的窗口了。
现在这个是IDD_JISUAN_DIALOG资源,如图所示。
右边那个是控件工具箱,如果没有显示的话可以右击菜单栏空白区域,把控件前打上对号即可。
然后给大家介绍一下今天需要用到的控件。
如左图所示,今天主要需要用到四个控件。
第一个是静态文本控件,就是可以往对话框上放一些静态的文字。
第二个是编辑框,它是可以往里面输入文字的。
第三个是组合框,它是把用来给对话框分区,使界面更加美观明了。
第四个是按钮控件,是用来点一下产生某个操作的。
上面那个是编辑框,下面这个是按钮控件。
点一下控件,拖到对话框上,即可使用。
下面我们可以这样布局:上面两个编辑框里输入数字,中间四个按钮分别是+ - * /,然后下面编辑框里显示数字。
下面开始给大家介绍第一个最重要的操作,就是属性操作。
我们想让这些控件的显示文字改变,就需要修改它的属性。
选定某个控件,右击,选择属性,即可来改变它们的属性了。
我们挨个控件介绍。
首先是组合框。
组合框的属性,我们看到有一个ID,一个标题。
首先说明一点,每个控件都必须有一个ID值,而且一般每个控件的ID值不能相同。
MFC基于对话框设计的简易计算器源代码

return CDialog::PreTranslateMessage(pMsg);
}
void CCALDlg::OnButton9()
{
// TODO: Add your control notification handler code here
UpdateData(true);
m_edit3=m_edalse);
}
void CCALDlg::OnButton7()
{
// TODO: Add your control notification handler code here
if(m_edit1==0)
{
MessageBox("不能对0求倒数");
return;
}
m_edit3=1/m_edit1;
UpdateData(false);
}
void CCALDlg::OnButton6()
{
// TODO: Add your control notification handler code here
{
if(pMsg->message==WM_KEYDOWN&&pMsg->wParam==VK_RETURN)
return TRUE;
if(pMsg->message==WM_KEYDOWN&&pMsg->wParam==VK_ESCAPE)
}
void CCALDlg::OnButton2()
{
// TODO: Add your control notification handler code here
简易计算器MFC程序

1、编写一个对话框应用程序,添加三按钮,三文本编辑框,实现加、减、乘、除简单运算,并实现编辑框的文本复制、粘贴、清空;程序代码:实验4View.cppvoid C实验4View::OnModelDialog(){CMyDlg dlg;dlg.DoModal();}void C实验4View::OnModellessDialog(){CMyDlg *pDlg=new CMyDlg;pDlg->Create(IDD_DIALOG1,this);pDlg->ShowWindow(SW_SHOW);}MyDlg.hpublic:CEdit m_edit1;CEdit m_edit2;CEdit m_edit3;CEdit m_edit4;CEdit m_edit5;afx_msg void OnBnClickedAdd();afx_msg void OnBnClickedSubtact();afx_msg void OnBnClickedMultiply();afx_msg void OnBnClickedDivide();afx_msg void OnBnClickedClearwrite();afx_msg void OnBnClickedClearsave();afx_msg void OnBnClickedCopy();afx_msg void OnBnClickedPaste();afx_msg void OnEnSetfocusEdit4();afx_msg void OnEnSetfocusEdit5();};MyDlg.cppint nEDITtemp;//全局变量BEGIN_MESSAGE_MAP(CMyDlg, CDialog)ON_BN_CLICKED(IDM_ADD, &CMyDlg::OnBnClickedAdd)ON_BN_CLICKED(IDM_SUBTACT, &CMyDlg::OnBnClickedSubtact)ON_BN_CLICKED(IDM_MULTIPLY, &CMyDlg::OnBnClickedMultiply)ON_BN_CLICKED(IDM_DIVIDE, &CMyDlg::OnBnClickedDivide)ON_BN_CLICKED(IDM_CLEARWRITE, &CMyDlg::OnBnClickedClearwrite) ON_BN_CLICKED(IDM_CLEARSAVE, &CMyDlg::OnBnClickedClearsave) ON_BN_CLICKED(IDM_COPY, &CMyDlg::OnBnClickedCopy)ON_BN_CLICKED(IIDM_PASTE, &CMyDlg::OnBnClickedPaste)ON_EN_SETFOCUS(IDC_EDIT4, &CMyDlg::OnEnSetfocusEdit4)ON_EN_SETFOCUS(IDC_EDIT5, &CMyDlg::OnEnSetfocusEdit5)END_MESSAGE_MAP()// CMyDlg 消息处理程序void CMyDlg::OnBnClickedAdd()//加法{// TODO: 在此添加控件通知处理程序代码double num1, num2, num3;int i=0;CString ch1, ch2, ch3;m_edit1.GetWindowText(ch1);m_edit2.GetWindowText(ch2);num1 =_tstof(ch1);num2 =_tstof(ch2);num3 = num1 + num2;ch3.Format(_T("%g"), num3);m_edit3.SetWindowText(ch3);}void CMyDlg::OnBnClickedSubtact()//减法{// TODO: 在此添加控件通知处理程序代码double num1, num2, num3;CString ch1, ch2, ch3;m_edit1.GetWindowText(ch1);m_edit2.GetWindowText(ch2);num1 = _tstof(ch1);num2 = _tstof(ch2);num3 = num1 - num2;ch3.Format(_T("%g"), num3);m_edit3.SetWindowText(ch3);}void CMyDlg::OnBnClickedMultiply()//乘法// TODO: 在此添加控件通知处理程序代码double num1, num2, num3;CString ch1, ch2, ch3;m_edit1.GetWindowText(ch1);m_edit2.GetWindowText(ch2);num1 = _tstof(ch1);num2 = _tstof(ch2);num3 = num1 * num2;ch3.Format(_T("%g"), num3);m_edit3.SetWindowText(ch3);}void CMyDlg::OnBnClickedDivide()//除法{// TODO: 在此添加控件通知处理程序代码double num1, num2, num3;CString ch1, ch2, ch3;m_edit1.GetWindowText(ch1);m_edit2.GetWindowText(ch2);num1 = _tstof(ch1);num2 = _tstof(ch2);num3 = num1 / num2;ch3.Format(_T("%g"), num3);m_edit3.SetWindowText(ch3);}void CMyDlg::OnBnClickedClearwrite()//初始化编辑框数据{// TODO: 在此添加控件通知处理程序代码m_edit1.SetSel(0,-1);m_edit1.Clear();m_edit2.SetSel(0,-1);m_edit2.Clear();m_edit3.SetSel(0,-1);m_edit3.Clear();}void CMyDlg::OnBnClickedClearsave()//初始化保存框数据{// TODO: 在此添加控件通知处理程序代码m_edit4.SetSel(0,-1);m_edit4.Clear();m_edit5.SetSel(0,-1);m_edit5.Clear();}void CMyDlg::OnBnClickedCopy()//复制// TODO: 在此添加控件通知处理程序代码m_edit3.SetSel(0,-1);m_edit3.Copy();}void CMyDlg::OnBnClickedPaste()//粘贴{// TODO: 在此添加控件通知处理程序代码if (nEDITtemp==1)m_edit4.Paste();else if(nEDITtemp==2)m_edit5.Paste();}void CMyDlg::OnEnSetfocusEdit4()//判断光标是否在SAVEREASULT1指示框中{// TODO: 在此添加控件通知处理程序代码nEDITtemp=1;}void CMyDlg::OnEnSetfocusEdit5()//判断光标是否在SAVEREASULT2指示框中{// TODO: 在此添加控件通知处理程序代码nEDITtemp=2;}运行结果:。
MFC实现简单计算器-12页文档资料

MFC实现简易计算器姓名柳超学号2012077501专业计算机科学与技术指导老师蒋年德2013年01月12日一、设计题目设计一个基于对话框的简单计算器,实现整数、小数的加减乘除四则运算以及开方、阶乘、取对数等操作。
二、运行环境硬件:Haier A60 Notebook,Celeron M 1.86GHz\512MB\250GB软件:Windows xp professional 5.1,visual C++ 6.0三、算法设计的思想打开计算器程序,输入数据,开始时编辑框成员变量m_num初始化为零。
按下数字按钮后,根据bool型变量b_zf判断m_num的正负号,对其进行相关处理,然后在判断是否有小数点,处理后输出结果。
同时根据judge的大小,判断是单目运算还是双目运算,进入不同的处理程序,最终输出结果。
若按下双目运算符,则把m_num存入num2,按下输入第二个操作数并算出结果。
若按下的是单目运算符,则直接对其处理得出结果。
若按下清零,则m_num等于0.在运算中还要判断运算是否合法,以及结果是否超出显示范围,以做出相关提示,按下清零。
算出后把结果保存至num2。
若需用算出的结果继续运算则回到输入完第一个操作数后,若不需要则判断试否需要开始新一轮的运算,不需要则结束。
四、流程图五、算法分析设计在visual C++ 6.0中新建一个MFC APPWizard[exe]工程文件,文件名为CALU,应用程序类型选为基本对话,完成后,在Dialog中画出计算器的基本控件,包括0~10个数字按钮,符号转换按钮“+/-”,小数点符号“.”,加、减、乘、除四个双目运算符按钮,开方“sqrt”,阶乘“n!”,取对数“ln”等三个单目运算符按钮,计算并显示运算结果的等于号“=”按钮,以及用于退回的“backspace”按钮,清除“clear”按钮和退出“exit”按钮,一个编辑框,用于显示运算值。
最后给每个控件定义ID号和标题。
MFC计算器的实现

MFC计算器的实现MFC是Microsoft Foundation Classes的缩写,是一个框架,用于开发Windows平台上的应用程序。
在MFC框架下,我们可以很方便地实现计算器应用程序。
以下是一个基于MFC框架的简单计算器应用程序的实现。
1.首先,创建一个新的MFC应用程序项目,并选择创建一个对话框为基础的应用程序。
4. 创建一个新的类(例如名为CalculatorDlg)作为对话框的类派生自CDialog。
在类头文件中声明需要的成员变量和函数。
```cppclass CalculatorDlg : public CDialogpublic:CalculatorDlg(CWnd* pParent = nullptr);enum { IDD = IDD_DLG_CALC };protected:virtual void DoDataExchange(CDataExchange* pDX);protected:afx_msg void OnBnClickedButtonNumber(UINT nID); // 数字按钮点击事件处理函数afx_msg void OnBnClickedButtonOperator(UINT nID); // 运算符按钮点击事件处理函数afx_msg void OnBnClickedButtonClear(; // 清零按钮点击事件处理函数afx_msg void OnBnClickedButtonEqual(; //等于按钮点击事件处理函数DECLARE_MESSAGE_MAP};```5. 在类的.cpp文件中实现需要的成员函数和消息映射。
```cppIMPLEMENT_DYNAMIC(CalculatorDlg, CDialog)CalculatorDlg::CalculatorDlg(CWnd* pParent) :CDialog(IDD_DLG_CALC, pParent)//初始化成员变量m_hResultEdit = nullptr;void CalculatorDlg::DoDataExchange(CDataExchange* pDX)CDialog::DoDataExchange(pDX);BEGIN_MESSAGE_MAP(CalculatorDlg, CDialog)ON_BN_CLICKED(IDC_BUTTON_0,&CalculatorDlg::OnBnClickedButtonNumber) ON_BN_CLICKED(IDC_BUTTON_1,&CalculatorDlg::OnBnClickedButtonNumber) ON_BN_CLICKED(IDC_BUTTON_2,&CalculatorDlg::OnBnClickedButtonNumber) ON_BN_CLICKED(IDC_BUTTON_3,&CalculatorDlg::OnBnClickedButtonNumber) ON_BN_CLICKED(IDC_BUTTON_4,&CalculatorDlg::OnBnClickedButtonNumber) ON_BN_CLICKED(IDC_BUTTON_5,&CalculatorDlg::OnBnClickedButtonNumber) ON_BN_CLICKED(IDC_BUTTON_6,&CalculatorDlg::OnBnClickedButtonNumber) ON_BN_CLICKED(IDC_BUTTON_7,&CalculatorDlg::OnBnClickedButtonNumber) ON_BN_CLICKED(IDC_BUTTON_8,&CalculatorDlg::OnBnClickedButtonNumber) ON_BN_CLICKED(IDC_BUTTON_9,&CalculatorDlg::OnBnClickedButtonNumber) ON_BN_CLICKED(IDC_BUTTON_ADD,&CalculatorDlg::OnBnClickedButtonOperator)ON_BN_CLICKED(IDC_BUTTON_SUBTRACT,&CalculatorDlg::OnBnClickedButtonOperator)ON_BN_CLICKED(IDC_BUTTON_MULTIPLY,&CalculatorDlg::OnBnClickedButtonOperator)ON_BN_CLICKED(IDC_BUTTON_DIVIDE,&CalculatorDlg::OnBnClickedButtonOperator)ON_BN_CLICKED(IDC_BUTTON_CLEAR,&CalculatorDlg::OnBnClickedButtonClear)ON_BN_CLICKED(IDC_BUTTON_EQUAL,&CalculatorDlg::OnBnClickedButtonEqual)END_MESSAGE_MAP``````cppvoid CalculatorDlg::OnBnClickedButtonNumber(UINT nID)//获取按钮上的数字CString strNumber;strNumber.Format(_T("%d"), nID - IDC_BUTTON_0);::SetWindowText(m_hResultEdit, strNumber);void CalculatorDlg::OnBnClickedButtonOperator(UINT nID) //获取按钮上的运算符TCHAR chOperator = '+';switch (nID)case IDC_BUTTON_ADD:chOperator = '+';break;case IDC_BUTTON_SUBTRACT:chOperator = '-';break;case IDC_BUTTON_MULTIPLY:chOperator = '*';break;case IDC_BUTTON_DIVIDE:chOperator = '/';break;}CString strOperator;strOperator.Format(_T("%c"), chOperator); ::SetWindowText(m_hResultEdit, strOperator); void CalculatorDlg::OnBnClickedButtonClear::SetWindowText(m_hResultEdit, _T(""));void CalculatorDlg::OnBnClickedButtonEqual//执行运算CString strExpression;::GetWindowText(m_hResultEdit, strExpression);//2.使用字符串解析和计算函数,计算结果//...//3.显示结果CString strResult;strResult.Format(_T("%f"), 123.456); // 替换为实际的计算结果::SetWindowText(m_hResultEdit, strResult);```请注意,在实际的计算过程中,您需要实现字符串解析和数学计算部分的代码。
MFC简单计算器设计正文

MFC简单计算器设计正文实用计算器程序1.基本功能描述计算器是人们日常生活中非常实用的计算工具。
预期设计目标与实际计算器为标准,Windows 10系统提供的计算器为范例进行设计。
实用计算器要实现单目运算和双目运算。
单目运算主要包括阶乘、正弦、余弦;双目运算主要包括加、减、乘、除、乘幂等。
计算器要能够对输入的各种数据进行处理,包括小数、整数、负数等数据进行操作。
实际过程中要能够对不同的数据灵活判断执行。
同时要能够对不满足运算符的操作数,提示出错信息以方便用户进行处理。
用户的修改包括清屏和退格。
程序设计的重点和难点在于:第一,能够对于不同的操作数和操作符进行连续运算,运算过程中要有优先级的判断,根据优先级执行不同的运算顺序;第二,能够用一个编辑框实现运算表达式的显示和结果的输出。
编程环境采用Visual Studio 2017提供的MFC建立对话框应用程序,设计界面要简单大方,并提供程序所有功能的接口。
2.设计思路表1 操作符优先级设计优先级操作符1 阶乘、正弦、余弦2 乘幂3 乘、除4 加、减对对话框编辑框关联一个变量从中读取数据,按下数字键时对数据数组num[]进行更新,其中num[0]表示的是当前已经存储变量的个数。
由于算法设计为四层优先级,且单目运算的优先级最高。
当按下相应单目运算符,首先将当前数据数组的最后一个存储(防止按下Backspace退格发生错误),并将此位数据执行运算后重新赋值。
但按下双目运算符相应按键后,将计数num[0]++,同时将运算符的类型和位置记录。
当按下等于之前,这样就将一个单目双目混合的运算表达式转化为双目运算。
如果没有按下等号键,则继续执行循环。
在按下等号按钮之后,按照先乘幂、再乘除、后加减的运算顺序执行运算,将最后结果保存并显示。
(在实际的计算器中,执行完运算之后,按下运算符的操作键,最终结果将按照左操作数的形式出现,故需要保存变量。
)如果用户没有结束程序,在运行初始化程序,进行下一次运算,否则直接退出。
VS2024下计算器的MFC编程实现

VS2024下计算器的MFC编程实现MFC(Microsoft Foundation Classes)是Windows 平台上的一个基础类库,用于创建界面友好的Windows应用程序。
通过MFC,我们可以使用C++语言来编写Windows应用程序,并且能够充分利用Windows操作系统的各种功能。
计算器是一个经典的应用程序,可以通过MFC来实现。
下面我们将通过以下步骤来编写一个简单的计算器程序。
1.创建一个新的MFC应用程序项目在Visual Studio 2024中,选择File -> New -> Project,然后选择Visual C++ -> MFC -> MFC Application,并设置相应的项目名称和位置。
点击OK按钮创建项目。
2.设计界面在资源视图中,打开Dialog文件夹,双击IDD_CALCULATOR_DIALOG查看对话框。
在对话框中,我们可以添加按钮、文本框等控件来设计计算器的界面。
3.添加控件和事件处理函数在对话框中添加控件,如按钮、文本框等。
为按钮添加事件处理函数,在事件处理函数中实现计算器的相应功能。
例如,我们可以添加以下按钮:-数字按钮0-9-运算符按钮+、-、*、/-清空按钮C-等号按钮=-小数点按钮.对于数字按钮0-9,我们可以为每个按钮添加一个点击事件处理函数,将对应的数字添加到文本框中。
对于运算符按钮,我们可以为每个按钮添加一个点击事件处理函数,根据当前点击的运算符更新计算器的状态。
对于清空按钮C,我们可以为其添加一个点击事件处理函数,在事件处理函数中清空文本框的内容。
对于等号按钮=,我们可以为其添加一个点击事件处理函数,在事件处理函数中根据计算器的状态进行相应的计算,并将结果显示在文本框中。
对于小数点按钮.,我们可以为其添加一个点击事件处理函数,在事件处理函数中向文本框中添加一个小数点。
4.实现计算功能在事件处理函数中,我们可以使用字符串转换函数和数学运算函数来实现计算器的相应功能。
基于MFC的简易计算器制作设计

《面向对象的Visual C++程序设计》课程设计报告学号:1123101750姓名:金鹏举专业年级:11测控技术与仪器河南大学物理与电子学院测控技术与仪器教研室基于对话框的计算器MFC方法实现随着社会的发展,人们在日常生活中经常需要用到计算器来进行简单或者复杂的运算,计算器在人们生活中的地位也越来越重要。
简单的计算器能实现加、减、乘、除、开方、平方等运算。
学习了C++的程序设计语言这门课程,可以利用基于VC的MFC方法制作一个简易的计算器,实现基本的运算功能,从而满足生活中的需要,降低计算的难度。
一. 面向对象的程序设计方法区别与面向过程的“先功能后数据”思想,面向对象的程序设计方法把状态(数据)和行为(功能)捆绑在一起,形成了对象。
当遇到一个具体的问题时,我们只需要将一个系统分解成一个个的对象,同时将状态和行为封装在对象中。
面向对象的程序设计方法具有三个基本特点:封装、继承和多态。
(1)封装性封装是一个用来指代将对象的状态和行为捆绑到一个单一逻辑单元的机制的正式术语。
它不是面向对象语言所特有的,面向过程的C语言用结构封装了数据,函数封装了逻辑。
但是面向对象封装了两者,从这种意义上来说,面向对象的封装更加完美。
出于一些安全性与方便性的考虑,对象经常会限制对它们特征(包括属性和方法)的访问,这种限制称为信息隐藏。
作为对象的抽象,类通常只公开对象可以公开的东西,主要是一个特定对象对系统的服务,而隐藏执行服务的内部细节和为了完成这些服务而设计的数据。
( 2)继承性继承是定义新类的一种机制,使用这种机制创建新类时只需要声明新类和已创建类之间的差别。
对于一个特定的继承关系,我们将创建的新类称为子类(subclass),被继承的原始类称为超类(superclass)。
子类可以使用超类定义属性和方法,也可以自己定义新的属性和方法。
超类的特征不会受到子类的影响。
继承带来的第一个且是最显而易见的好处是减少了代码冗余,因此也减轻了需要改进或重写代码时的负担。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
b[y]=b[j]; y=y+2; } } for(j=0;j<=y-2;j++) { if(b[j]=='+') a[0]=a[0]+a[j+1]; else if(b[j]=='-') a[0]=a[0]-a[j+1]; } m_str.Format("%1f",a[0]); UpdateData(0); } “ +”按钮对应的代码 void CMyDlg::Onadd() { UpdateData(1); m_str+="+"; UpdateData(0); } “- ”按钮对应的代码 void CMyDlg::Onjian() { UpdateData(1); m_str+="-"; UpdateData(0); } “* ”按钮对应的代码 void CMyDlg::Oncheng() { UpdateData(1); m_str+="*";
用 VC++ 制作简单计算器
简述: 该课程设计将实现一个简单计算器。 其类似于 Windows 附件中自带的计算器。 这 个计算器可以实现简单的四则运算功能, 而且具有简洁大方的图文外观。 系统具有良好的界 面和必要的交互信息。 即时准确地获得需要的计算的结果, 充分降低了数字计算的难度, 从 而节约了时间, 对人们的生活有一定的帮助。 在课程设计中, 程序设计设计语言采用 Visual C++,在程序设计中,采用了面向对象解决问题的方法。
// //
//x //
// //y
// //
如果 a[i] 的值不为 0.0 把 a[i] 的值赋给 a[x]
自加 2 如果 b[i] 的值不为空格 把 b[i] 的值赋给 b[y]
自加 2
如果 b[i] 等于加号 如果 b[i] 等于减号
UpdateData(0); } “/ ”按钮对应的代码 void CMyDlg::Onchu() {
加号
-
IDC_jian
减号
*
IDC_cheng
乘号
/
IDC_chu
除号
AC
IDC_ac
清屏
DEL
IDC_del
删除
创建步骤 新建一个 MFC 基于对话框的工程
VC++ 对话框界面
右击按钮,修改按钮的属性
建立类向导
最后点击 Edit Code 就可以添加代码
对其它按钮的操作与之类似, 对编辑框的“建立类向导”有点区别,
课题背景
计算器是日常生活中十分便捷有效的工具,能实现加、减、乘、除简单运算的工具。要 实现计算功能,可以用 VC++的知识编写程序来解决此问题。该计算器大大的降低了数字计 算的难度及提高了计算的准确度和精确度。 该计算器使用非常简单和方便, 对广大中小学生 的学习有巨大帮助作用,也对在职人员的工作有点帮助作用。
m_str=m_str.Left(m_str.GetLength()-1); else {
m_str="0"; } UpdateData(0); } “. ”按钮对应的代码 void CMyDlg::Onpoint() { UpdateData(1); if(pass1==1)
m_str="."; else
if(isdigit(m_str.GetAt(i))) {
if(rate==10.0) { itemp=itemp*rate+(m_str.GetAt(i)-'0');
if(i==m_str.GetLength()-1) a[z]=itemp;
} else {
itemp=itemp+rate*(m_str.GetAt(i)-'0'); rate=rate/10; if(i==m_str.GetLength()-1)
a[z]=itemp;itemp=0; z++;
b[z]='-'; z++; rate=10.0; } else if(m_str.GetAt(i)=='*') { a[z]=itemp;itemp=0; z++; b[z]='*'; z++; rate=10.0; } else if(m_str.GetAt(i)=='/') { a[z]=itemp;itemp=0; z++; b[z]='/'; z++; rate=10.0; } } s=z; for(j=0;j<=s;j++) { if(b[j]=='/') { a[j+1]=1/a[j+1]; b[j]='*'; } } for(j=0;j<=s;j++) { if(b[j]=='*') { if(j-t==2) {
这里不附详细步骤
“1”按钮对应的代码
代码展示
void CMyDlg::OnButton1() {
UpdateData(1); if(pass1==1 )
m_str="1"; else m_str+="1"; pass1=0; UpdateData(0); } “2”按钮对应的代码 void CMyDlg::OnButton2() { UpdateData(1); if(pass1==1 )
m_str="2"; else m_str+="2"; pass1=0; UpdateData(0); } “3”按钮对应的代码 void CMyDlg::OnButton3() { UpdateData(1); if(pass1==1 )
m_str="3"; else m_str+="3"; pass1=0; UpdateData(0); } “4”按钮对应的代码 void CMyDlg::OnButton3() { UpdateData(1); if(pass1==1 )
m_str="4"; else m_str+="4"; pass1=0; UpdateData(0); }
“5、 6、 7、 8、9、 0”按钮对应的代码与“ 1、 2、 3、4”按钮对应的代码相近 “=”按钮对应的代码 void CMyDlg::Onresult() { UpdateData(1);
int i,z,s,j,x=0,y=1,t,m=1; char b[10];
double rate=10.0,itemp=0.0,a[20]; for(i=0;i<20;i++)
a[i]=1000000.0; for(i=0;i<10;i++)
b[i]=' '; z=0; for(i=0;i<m_str.GetLength(键 2 按键 3
4
IDC_BUTTON4
按键 4
5
IDC_BUTTON5
按键 5
6
IDC_BUTTON6
按键 6
7
IDC_BUTTON7
按键 7
8
IDC_BUTTON8
按键 8
9
IDC_BUTTON9
按键 9
.
IDC_point
小数点
=
IDC_result
求值
+
IDC_add
a[t-m]=a[t-m]*a[j+1]; m=m+2; } else a[j-1]=a[j-1]*a[j+1]; a[j+1]=1000000.0; b[j]=' '; t=j;
} } for(j=0;j<=s;j++) {
if(a[j]!=1000000.0) {
a[x]=a[j]; x+=2;
可以让用户选择所需的数字以及小数点;功能区,该区域提供用户所需的运算按钮;
( 3)计算功能基本上是用系统内部函数;
( 4)“AC”按钮可以清除所有已输入的数据从头计算;
( 5)“DEL”按钮可以删除所输入的最后以为数字;
编辑资源
按钮名称 0 1 2 3
按钮 ID IDC_BUTTON0 IDC_BUTTON1 IDC_BUTTON2 IDC_BUTTON3
a[z]=itemp; } } else if(m_str.GetAt(i)=='.') rate=0.1; else if(m_str.GetAt(i)=='+') { a[z]=itemp;itemp=0; z++; b[z]='+'; z++; rate=10.0; } else if(m_str.GetAt(i)=='-') {
功能说明
系统具有良好的界面; 必要的交互信息; 简约美观的效果。 使用人员能快捷简单地进行
操作。可单机按钮进行操作即时准确地获得需要的计算的结果,
充分降低了数字计算的难度
和节约了时间,对人们的生活有一定的帮助。
(1) 包含的功能有:加、减、乘、除;
(2) 计算器上数字分为显示区,可以显示用户所点击的按键,最后显示结果;按键区,
UpdateData(1); m_str+="/"; UpdateData(0); } “AC”按钮对应的代码 void CMyDlg::Onac() { UpdateData(1); m_str="0"; pass1=1; UpdateData(0); } “DEL”按钮对应的代码 void CMyDlg::Ondel() { UpdateData(1); if(m_str!="0" && m_str.GetLength()>1)