永发信息网

VC++高手解答下

答案:1  悬赏:0  手机版
解决时间 2021-07-30 12:15
计算器的代码怎么样编写? 能些下吗? 谢谢
最佳答案
用vc++写了一个计算器小程序,一个系差不多都用的我的代码,最高兴的是自己可以想到用bool变量来区分整数和小数,还有就是在连续运算的时候我没有用大家都用的复制代码的方法,而是用数组实现了。有点小兴奋,把代码贴上来,呵呵,望大家多多提意见……严格意义上说这是我的第一个像样的MFC小程序。(对话框控件变量,消息处理函数的关联以及变量的声明和初始化省略)

// jisuanqiDlg.cpp : implementation file
//


#include "stdafx.h"
#include "jisuanqi.h"
#include "jisuanqiDlg.h"
#include "math.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About


class 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


// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_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_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CJisuanqiDlg dialog


CJisuanqiDlg::CJisuanqiDlg(CWnd* pParent )
: CDialog(CJisuanqiDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CJisuanqiDlg)
m_num = 0.0;
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32


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


void CJisuanqiDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CJisuanqiDlg)
DDX_Text(pDX, IDC_EDIT1, m_num);
//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CJisuanqiDlg, CDialog)
//{{AFX_MSG_MAP(CJisuanqiDlg)
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_BUTTON5, OnButton5)
ON_BN_CLICKED(IDC_BUTTON6, OnButton6)
ON_BN_CLICKED(IDC_BUTTON7, OnButton7)
ON_BN_CLICKED(IDC_BUTTON8, OnButton8)
ON_BN_CLICKED(IDC_BUTTON9, OnButton9)
ON_BN_CLICKED(IDC_BUTTON14, OnButton0)
ON_BN_CLICKED(IDC_BUTTON15, OnButtonPoint)
ON_BN_CLICKED(IDC_BUTTON16, OnButtonEqual)
ON_BN_CLICKED(IDC_BUTTON13, OnButtonChu)
ON_BN_CLICKED(IDC_BUTTON12, OnButtonMul)
ON_BN_CLICKED(IDC_BUTTON11, OnButtonSub)
ON_BN_CLICKED(IDC_BUTTON10, OnButtonAdd)
ON_BN_CLICKED(IDC_BUTTON17, OnButtondelet)
ON_BN_CLICKED(IDC_BUTTON18, OnButtonclear)
ON_BN_CLICKED(IDC_BUTTON19, OnButtonkaifang)
ON_BN_CLICKED(IDC_BUTTON20, OnButtonziranduishu)
ON_BN_CLICKED(IDC_BUTTON21, OnButtonchangyongduishu)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CJisuanqiDlg message handlers


BOOL CJisuanqiDlg::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 dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon

// TODO: Add extra initialization here
t=true;
j=true;
i=10;
p=0;
q=0;
m_num=0;
m_lnum=0;


return TRUE; // return TRUE unless you set the focus to a control
}


void CJisuanqiDlg::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 CJisuanqiDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting


SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);


// Center icon in client rectangle
int 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 icon
dc.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 CJisuanqiDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}


void CJisuanqiDlg::OnButton1()
{
// TODO: Add your control notification handler code here


if(t)
{
m_num=m_num*10+1;
UpdateData(FALSE);


}
else
{
m_num=m_num+1.0/i;
i*=10;
UpdateData(FALSE);
}



}


void CJisuanqiDlg::OnButton2()
{
// TODO: Add your control notification handler code here


if(t)
{
m_num=m_num*10+2;
UpdateData(FALSE);


}
else
{
m_num=m_num+2.0/i;
i*=10;
UpdateData(FALSE);
}


}


void CJisuanqiDlg::OnButton3()
{
// TODO: Add your control notification handler code here

if(t)
{
m_num=m_num*10+3;
UpdateData(FALSE);


}
else
{
m_num=m_num+3.0/i;
i*=10;
UpdateData(FALSE);
}


}


void CJisuanqiDlg::OnButton4()
{
// TODO: Add your control notification handler code here

if(t)
{
m_num=m_num*10+4;
UpdateData(FALSE);


}
else
{
m_num=m_num+4.0/i;
i*=10;
UpdateData(FALSE);
}


}


void CJisuanqiDlg::OnButton5()
{
// TODO: Add your control notification handler code here


if(t)
{
m_num=m_num*10+5;
UpdateData(FALSE);


}
else
{
m_num=m_num+5.0/i;
i*=10;
UpdateData(FALSE);
}


}


void CJisuanqiDlg::OnButton6()
{
// TODO: Add your control notification handler code here

if(t)
{
m_num=m_num*10+6;
UpdateData(FALSE);


}
else
{
m_num=m_num+6.0/i;
i*=10;
UpdateData(FALSE);
}


}


void CJisuanqiDlg::OnButton7()
{
// TODO: Add your control notification handler code here

if(t)
{
m_num=m_num*10+7;
UpdateData(FALSE);


}
else
{
m_num=m_num+7.0/i;
i*=10;
UpdateData(FALSE);
}


}


void CJisuanqiDlg::OnButton8()
{
// TODO: Add your control notification handler code here

if(t)
{
m_num=m_num*10+8;
UpdateData(FALSE);


}
else
{
m_num=m_num+8.0/i;
i*=10;
UpdateData(FALSE);
}


}


void CJisuanqiDlg::OnButton9()
{
// TODO: Add your control notification handler code here

if(t)
{
m_num=m_num*10+9;
UpdateData(FALSE);


}
else
{
m_num=m_num+9.0/i;
i*=10;
UpdateData(FALSE);
}


}


void CJisuanqiDlg::OnButton0()
{
// TODO: Add your control notification handler code here
//UpdateData();

if(t)
{
m_num=m_num*10+0;
UpdateData(FALSE);


}
else
{
m_num=m_num+0.0/i;
i*=10;
UpdateData(FALSE);
}

}


void CJisuanqiDlg::OnButtonPoint()
{
// TODO: Add your control notification handler code here
int i=10;
t=false;

}


void CJisuanqiDlg::OnButtonEqual()
{
// TODO: Add your control notification handler code here


switch(r)
{

case '+':
{
m_num=m_num+m_lnum;
UpdateData(FALSE);
break;
}
case '-':
{
m_num=m_snum-m_num;
UpdateData(FALSE);
break;
}
case '*':
{
m_num=m_mnum*m_num;
UpdateData(FALSE);
break;
}
case '/':
{
if(m_num==0)
{
MessageBox("除数不能是0!");

}
else
{

m_num=m_cnum/m_num;
UpdateData(FALSE);
break;
}
}
}
t=true;


}


void CJisuanqiDlg::OnButtonMul()
{
// TODO: Add your control notification handler code here
r='*';
t=true;
m_mnum=m_num;
m_num=0;
UpdateData(FALSE);
}


void CJisuanqiDlg::OnButtonChu()
{
// TODO: Add your control notification handler code here
r='/';
t=true;
i=10;
m_cnum=m_num;
m_num=0;
UpdateData(FALSE);

}


void CJisuanqiDlg::OnButtonSub()
{
// TODO: Add your control notification handler code here
r='-';
i=10;
t=true;
if(j)
{
m_snum=m_num;
}
else
{
p=0;
adda[p]=m_num;
p++;
for(q=0;q<=p;q++)
{
m_lnum=m_lnum+adda[q];
q++;
}


m_num=m_lnum;
UpdateData(FALSE);
m_num=0;
m_snum=m_lnum;
}
m_num=0;

}


void CJisuanqiDlg::OnButtonAdd()
{
// TODO: Add your control notification handler code here
r='+';
t=true;
j=false;
i=10;
p=0;
adda[p]=m_num;
p++;
for(q=0;q<=p;q++)
{
m_lnum=m_lnum+adda[q];
q++;
}


m_num=m_lnum;
UpdateData(FALSE);
m_num=0;

}


void CJisuanqiDlg::OnButtondelet()
{
// TODO: Add your control notification handler code here
int p;
p=m_num/10;
m_num=p;
UpdateData(FALSE);


}


void CJisuanqiDlg::OnButtonclear()
{
// TODO: Add your control notification handler code here
t=true;
i=10;
j=true;
m_num=0;
m_lnum=0;
UpdateData(FALSE);


}


void CJisuanqiDlg::OnButtonkaifang()
{
// TODO: Add your control notification handler code here

m_num=sqrt(m_num);
UpdateData(FALSE);

}


void CJisuanqiDlg::OnButtonziranduishu()
{
// TODO: Add your control notification handler code here
m_num=log(m_num);
UpdateData(FALSE);

}


void CJisuanqiDlg::OnButtonchangyongduishu()
{
// TODO: Add your control notification handler code here
m_num=log10(m_num);
UpdateData(FALSE);



}

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我家的相邻权纠纷,大家帮帮忙,十分感谢
次梁粉刷荷载怎么算,怎么区分主梁的跨度,次
魏都区许昌媛君舞蹈地址在什么地方,想今天过
求(离开你以后我会哭)QQ空间背景音乐连接地
悲凉景物的诗句,关于 景物的诗句 古诗
鼻炎导致鼻子不通气了该怎么疏通?
5606的原型宠物怎么学影藏技能
qq爱可信吗?
我现在耍DNF不知道耍什么职业了.什么职业我都
金立v7000
桂阳县郴州鸣洞鸡排这个地址在什么地方,我要
网通飞车 136J 咨询
让胡路区大庆蜀都熟食(让胡路店)地址有谁知道
麦迪上半场得1分,下半场连续得20几分,那是
帮忙划分下句子结构!顺便翻译下.
推荐资讯
天秤座的男生和女生天生合得来吗?
嘉鱼县咸宁泰丰国际城销售中心这个地址怎么能
怎样庆祝元旦
珠晖区衡阳筑天水果副食店地址在哪里啊
我的电脑是日本东芝牌的!我搞开机要密码的.明
今天看人家的QQ空间说是系统在升级只能加好友
CPUE、5300好吗、玩游戏怎么样、还有报价
白色的羽绒服可不可以去干洗?
幸福是每个人都有的吗?为什么我总是还找出心
为什么我老不是李嘉诚,为什么我爸爸不是李嘉
找QQ空间搞笑的歌
世界国土面积排行,中国的土地面积在全世界排
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?