⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calculatordlg.cpp

📁 大数运算的设计与实现
💻 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 + -