📄 calculatordlg.cpp
字号:
// calculatorDlg.cpp : implementation file
#include "stdafx.h"
#include "calculator.h"
#include "calculatorDlg.h"
#include "bignum.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()
/////////////////////////////////////////////////////////////////////////////
// CCalculatorDlg dialog
CCalculatorDlg::CCalculatorDlg(CWnd* pParent /*=NULL*/)
: CDialog(CCalculatorDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CCalculatorDlg)
m_bignum = _T("");
//}}AFX_DATA_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_DATA_MAP(CCalculatorDlg)
DDX_Text(pDX, IDC_EDIT1, m_bignum);
DDV_MaxChars(pDX, m_bignum, 64000);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCalculatorDlg, CDialog)
//{{AFX_MSG_MAP(CCalculatorDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON2_COMPUTER, OnButton_Computer)
ON_BN_CLICKED(IDC_BUTTON_SAVE, OnButtonSave)
ON_BN_CLICKED(IDC_BUTTON3_CLEAR, OnButton3Clear)
ON_BN_CLICKED(IDC_BUTTON3_HELP, OnButton3Help)
ON_BN_CLICKED(IDC_BUTTON_7, OnButton7)
ON_BN_CLICKED(IDC_BUTTON_8, OnButton8)
ON_BN_CLICKED(IDC_BUTTON1_9, OnButton19)
ON_BN_CLICKED(IDC_BUTTON1_MUL, OnButton1Mul)
ON_BN_CLICKED(IDC_BUTTON_FRACTRRIAL, OnButtonFractrrial)
ON_BN_CLICKED(IDC_BUTTON_POWER, OnButtonPower)
ON_BN_CLICKED(IDC_BUTTON_4, OnButton4)
ON_BN_CLICKED(IDC_BUTTON_5, OnButton5)
ON_BN_CLICKED(IDC_BUTTON_6, OnButton6)
ON_BN_CLICKED(IDC_BUTTON_DEV, OnButtonDev)
ON_BN_CLICKED(IDC_BUTTON_b, OnBUTTONb)
ON_BN_CLICKED(IDC_BUTTON_COMPARE, OnButtonCompare)
ON_BN_CLICKED(IDC_BUTTON_1, OnButton1)
ON_BN_CLICKED(IDC_BUTTON_2, OnButton2)
ON_BN_CLICKED(IDC_BUTTON_3, OnButton3)
ON_BN_CLICKED(IDC_BUTTON_SUB, OnButtonSub)
ON_BN_CLICKED(IDC_BUTTON_o, OnBUTTONo)
ON_BN_CLICKED(IDC_BUTTON_M, OnButtonM)
ON_BN_CLICKED(IDC_BUTTON_0, OnButton0)
ON_BN_CLICKED(IDC_BUTTON_POINT, OnButtonPoint)
ON_BN_CLICKED(IDC_BUTTON_c, OnBUTTONc)
ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd)
ON_BN_CLICKED(IDC_BUTTON_X, OnButtonX)
ON_BN_CLICKED(IDC_BUTTON_EQUAL, OnButtonEqual)
ON_BN_CLICKED(IDC_BUTTON_A, OnButtonA)
ON_BN_CLICKED(IDC_BUTTON_B1, OnButtonB1)
ON_BN_CLICKED(IDC_BUTTON_C1, OnButtonC1)
ON_BN_CLICKED(IDC_BUTTON_D, OnButtonD)
ON_BN_CLICKED(IDC_BUTTON_E, OnButtonE)
ON_BN_CLICKED(IDC_BUTTON_F, OnButtonF)
ON_BN_CLICKED(IDC_BUTTON_CLEAR1, OnButtonClear1)
ON_WM_CAPTURECHANGED()
//ON_EN_CHANGE(IDC_EDIT2, OnChangeEdit_TIME)
//}}AFX_MSG_MAP
END_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_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
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 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 CCalculatorDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CCalculatorDlg::OnButton_Computer()
{
// TODO: Add your control notification handler code here
CString y;
CString x;
char a[maxlength];
char b[maxlength];
big_numnode * t=NULL;
char op='0';
strcpy(a,"");
strcpy(b,"");
UpdateData(true);
if(m_bignum=="")
{AfxMessageBox("请输入正确的操作数和正确的运算表达式\n\n\n加法: x+y\n减法: x-y\n比较大小:x&y\n乘法: x*y\n除法: x/y\n乘幂: x ^ y\n阶乘: x!\n排列组合: x c y\n二进制转换: y b\n八进制转换:y o \n十六进制转换: y x\n ");
exit(0);
}
m_bignumsave=m_bignum.Mid(0);
int j=0;
while(m_bignum.GetAt(j)!='&'&&m_bignum.GetAt(j)!='b'&&m_bignum.GetAt(j)!='B'&&m_bignum.GetAt(j)!='o'&&m_bignum.GetAt(j)!='O'&&m_bignum.GetAt(j)!='x'&&m_bignum.GetAt(j)!='X'&&m_bignum.GetAt(j)!='+'&&m_bignum.GetAt(j)!='-'&&m_bignum.GetAt(j)!='*'&&m_bignum.GetAt(j)!='/'&&m_bignum.GetAt(j)!='!'&&m_bignum.GetAt(j)!='^'&&m_bignum.GetAt(j)!='c')
{
a[j]=m_bignum.GetAt(j);
j++;
}
op=m_bignum.GetAt(j);//记录运算符号
op1=op;
a[j]='\0';
CString m =m_bignum.Mid(j+1);//截取j到末尾的字符串
j=0;
while(j < m.GetLength())
{
b[j]=m.GetAt(j);
j++;
}
b[j]='\0';
start = clock();//计算开始时间
t= bignum_operation.functionchoice(a,b,op);//进行运算功能选择
finish = clock();//计算结束时间
if(op=='!')//说明调用的是阶乘函数
{
m_bignum=CString(factorial.factorial_out).Mid(0);
UpdateData(false);//显示到编辑框
}
else {
j=0;
if(op=='b'||op=='B'||op=='x'||op=='X'||op=='o'||op=='O')
while(t->ahead !=NULL)
{ y.Insert(j,t->data);// 拷贝
j++;
t=t->ahead;
}
else{
j=0;
while(t!=NULL)
{
y.Insert(j,t->data);// 拷贝
j++;
t=t->next;
}
}
m_bignum=y.Mid(0);//复制到控件变量
if(op!='&')
UpdateData(false);//显示到编辑框
m_bignum="";
}
duration = (double)(finish-start) / CLOCKS_PER_SEC;//计算时间
//AfxMessageBox(_T"duration");
}
void CCalculatorDlg::OnButtonSave()
{
// TODO: Add your control notification handler code here
UpdateData(true);//显示到编辑框
//m_bignumsave=m_bignum.Mid(0);
//AfxMessageBox("计算结算已经保存在outfile.txt文件中!");
if(m_bignumsave!="")
{
out_stream.open("大数计算结果.txt",ios::app);//打开输出文件头插法写入要插数据
out_stream<<m_bignumsave<<endl<<endl;
out_stream<<"= ";
if(op1=='&')
{ if(bignum_operation.k==0)
out_stream<<"操作数1 小于 操作数2 "<<endl;
else
out_stream<<"操作数1 大于 操作数2 "<<endl;
}
else
out_stream<<m_bignum<<endl;
out_stream<<"---------------------------------------------------------------------------------------------"<<endl;
out_stream.close();
AfxMessageBox("计算结算已经保存在 :大数计算结果.txt文件中!");
}
}
void CCalculatorDlg::OnButton3Clear()
{
// TODO: Add your control notification handler code here
m_bignum="";
UpdateData(false);//显示到编辑框
}
void CCalculatorDlg::OnButton3Help()
{
// TODO: Add your control notification handler code here
AfxMessageBox("*******运算规则*******\n\n加法: x+y\n减法: x-y\n比较大小:x&y\n乘法: x*y\n除法: x/y\n乘幂: x^y\n阶乘: x!\n排列组合: xcy\n二进制转换: yb\n八进制转换:yo \n十六进制转换: yx 此处x 为进制转换标志位\n ");
}
void CCalculatorDlg::OnButton7()
{
// TODO: Add your control notification handler code here
UpdateData(true);//显示到编辑框
m_bignum = m_bignum + "7";
UpdateData(false);//显示到编辑框
}
void CCalculatorDlg::OnButton8()
{
UpdateData(true);//显示到编辑框
m_bignum = m_bignum + "8";
UpdateData(false);//显示到编辑框
}
void CCalculatorDlg::OnButton19()
{
UpdateData(true);//显示到编辑框
m_bignum = m_bignum + "9";
UpdateData(false);//显示到编辑框
}
void CCalculatorDlg::OnButton1Mul()
{
UpdateData(true);//显示到编辑框
m_bignum = m_bignum + "*";
UpdateData(false);//显示到编辑框
}
void CCalculatorDlg::OnButtonFractrrial()
{
UpdateData(true);//显示到编辑框
m_bignum = m_bignum + "!";
UpdateData(false);//显示到编辑框
}
void CCalculatorDlg::OnButtonPower()
{
UpdateData(true);//显示到编辑框
m_bignum = m_bignum + "^";
UpdateData(false);//显示到编辑框
}
void CCalculatorDlg::OnButton4()
{
UpdateData(true);//显示到编辑框
m_bignum = m_bignum + "4";
UpdateData(false);//显示到编辑框
}
void CCalculatorDlg::OnButton5()
{
UpdateData(true);//显示到编辑框
m_bignum = m_bignum + "5";
UpdateData(false);//显示到编辑框
}
void CCalculatorDlg::OnButton6()
{
UpdateData(true);//显示到编辑框
m_bignum = m_bignum + "6";
UpdateData(false);//显示到编辑框
}
void CCalculatorDlg::OnButtonDev()
{
UpdateData(true);//显示到编辑框
m_bignum = m_bignum + "/";
UpdateData(false);//显示到编辑框
}
void CCalculatorDlg::OnBUTTONb()
{
UpdateData(true);//显示到编辑框
m_bignum = m_bignum + "b";
UpdateData(false);//显示到编辑框
}
void CCalculatorDlg::OnButtonCompare()
{ UpdateData(true);//显示到编辑框
m_bignum = m_bignum + "&";
UpdateData(false);//显示到编辑框
}
void CCalculatorDlg::OnButton1()
{
UpdateData(true);//显示到编辑框
m_bignum = m_bignum + "1";
UpdateData(false);//显示到编辑框
}
void CCalculatorDlg::OnButton2()
{
UpdateData(true);//显示到编辑框
m_bignum = m_bignum + "2";
UpdateData(false);//显示到编辑框
}
void CCalculatorDlg::OnButton3()
{
UpdateData(true);//显示到编辑框
m_bignum = m_bignum + "3";
UpdateData(false);//显示到编辑框
}
void CCalculatorDlg::OnButtonSub()
{
UpdateData(true);//显示到编辑框
m_bignum = m_bignum + "-";
UpdateData(false);//显示到编辑框
}
void CCalculatorDlg::OnBUTTONo()
{
UpdateData(true);//显示到编辑框
m_bignum = m_bignum + "o";
UpdateData(false);//显示到编辑框
}
void CCalculatorDlg::OnButtonM()
{
// m_bignum = m_bignum + "M";
UpdateData(true);//显示到编辑框
//UpdateData(false);//显示到编辑框
OnButtonSave() ;
}
void CCalculatorDlg::OnButton0()
{ UpdateData(true);//显示到编辑框
m_bignum = m_bignum + "0";
UpdateData(false);//显示到编辑框
}
void CCalculatorDlg::OnButtonPoint()
{
UpdateData(true);//显示到编辑框
m_bignum = m_bignum + ".";
UpdateData(false);//显示到编辑框
}
void CCalculatorDlg::OnBUTTONc()
{ UpdateData(true);//显示到编辑框
m_bignum = m_bignum + "c";
UpdateData(false);//显示到编辑框
}
void CCalculatorDlg::OnButtonAdd()
{ UpdateData(true);//显示到编辑框
m_bignum = m_bignum + "+";
UpdateData(false);//显示到编辑框
}
void CCalculatorDlg::OnButtonX()
{
UpdateData(true);//显示到编辑框
m_bignum = m_bignum + "x";
UpdateData(false);//显示到编辑框
}
void CCalculatorDlg::OnButtonEqual()
{
// TODO: Add your control notification handler code here
OnButton_Computer();
}
void CCalculatorDlg::OnButtonA()
{
UpdateData(true);//显示到编辑框
m_bignum = m_bignum + "A";
UpdateData(false);//显示到编辑框
}
void CCalculatorDlg::OnButtonB1()
{ UpdateData(true);//显示到编辑框
m_bignum = m_bignum + "B";
UpdateData(false);//显示到编辑框
}
void CCalculatorDlg::OnButtonC1()
{
UpdateData(true);//显示到编辑框
m_bignum = m_bignum + "C";
UpdateData(false);//显示到编辑框
}
void CCalculatorDlg::OnButtonD()
{
UpdateData(true);//显示到编辑框
m_bignum = m_bignum + "D";
UpdateData(false);//显示到编辑框
}
void CCalculatorDlg::OnButtonE()
{
UpdateData(true);//显示到编辑框
m_bignum = m_bignum + "E";
UpdateData(false);//显示到编辑框
}
void CCalculatorDlg::OnButtonF()
{
UpdateData(true);//显示到编辑框
m_bignum = m_bignum + "F";
UpdateData(false);//显示到编辑框
}
void CCalculatorDlg::OnButtonClear1()
{
// TODO: Add your control notification handler code here
m_bignum ="";
UpdateData(false);//显示到编辑框
}
void CCalculatorDlg::OnCaptureChanged(CWnd *pWnd)
{
// TODO: Add your message handler code here
CDialog::OnCaptureChanged(pWnd);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -