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

📄 计算器dlg.cpp

📁 这是一款非常实用的计算器,我认为其实用程度远远胜过Windows系统提供的计算器.主要特色是支持多项式运算,即可以一次输入整个多项式,并能够识别运算的优先级(利用堆栈实现),
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	display=display+"+";
	UpdateData(FALSE);
	if(amount!=0)
		stack2.push(amount);
	stack1.get_top(symbol);
	if(symbol=='#'||symbol=='(')
		stack1.push('+');
	else if(symbol=='+'||symbol=='-')
		{
			stack2.get_top(operate1);
			stack2.pop();
			stack2.get_top(operate2);
			stack2.pop();
			if(symbol=='+')
				operate=operate2+operate1;
			else 
				operate=operate2-operate1;
			stack2.push(operate);
			stack1.pop();
			stack1.push('+');
		}
	else{
		  while((symbol=='*')||(symbol=='/'))
		 {  
    	    stack2.get_top(operate1);
   			stack2.pop();
    		stack2.get_top(operate2);
			stack2.pop();
    		if(symbol=='*') operate=operate2*operate1;
    		else if(symbol=='/') operate=operate2/operate1;
    		stack2.push(operate);
    		stack1.pop();
    		stack1.get_top(symbol);
		 }
		  if(symbol=='+'||symbol=='-')
		 {
			stack2.get_top(operate1);
			stack2.pop();
			stack2.get_top(operate2);
			stack2.pop();
			if(symbol=='+')
				operate=operate2+operate1;
			else 
				operate=operate2-operate1;
			stack2.push(operate);
			stack1.pop();
		 }
    	 stack1.push('+');
       }
	amount=0;
	dot=0;
}

void CMyDlg::OnBnClickedButtonminus()
{
	// TODO: 在此添加控件通知处理程序代码
	if(haveparent==true)
	{
		GetDlgItem(IDC_EDIT2)->ShowWindow(SW_HIDE);
	    GetDlgItem(IDC_STATICB)->ShowWindow(SW_HIDE);
		display='('+display+')';
		haveparent=false;
	}
	display=display+"-";
	UpdateData(FALSE);
	if(amount!=0)
		stack2.push(amount);
	stack1.get_top(symbol);
	if(symbol=='#'||symbol=='(')
		stack1.push('-');
	else if(symbol=='+'||symbol=='-')
		{
			stack2.get_top(operate1);
			stack2.pop();
			stack2.get_top(operate2);
			stack2.pop();
			if(symbol=='+')
				operate=operate2+operate1;
			else 
				operate=operate2-operate1;
			stack2.push(operate);
			stack1.pop();
			stack1.push('-');
		}
	else{
		  while((symbol=='*')||(symbol=='/'))
		 {  
    	    stack2.get_top(operate1);
   			stack2.pop();
    		stack2.get_top(operate2);
			stack2.pop();
    		if(symbol=='*') operate=operate2*operate1;
    		else if(symbol=='/') operate=operate2/operate1;
    		stack2.push(operate);
    		stack1.pop();
    		stack1.get_top(symbol);
		 }
		  if(symbol=='+'||symbol=='-')
		 {
			stack2.get_top(operate1);
			stack2.pop();
			stack2.get_top(operate2);
			stack2.pop();
			if(symbol=='+')
				operate=operate2+operate1;
			else 
				operate=operate2-operate1;
			stack2.push(operate);
			stack1.pop();
		 }
    	 stack1.push('-');
       } 
	amount=0;
	dot=0;
}

void CMyDlg::OnBnClickedButtonmul()
{
	// TODO: 在此添加控件通知处理程序代码
	if(haveparent==true)
	{
		GetDlgItem(IDC_EDIT2)->ShowWindow(SW_HIDE);
	    GetDlgItem(IDC_STATICB)->ShowWindow(SW_HIDE);
		display='('+display+')';
		haveparent=false;
	}
	display=display+"*";
	UpdateData(FALSE);
	if(amount!=0)
		stack2.push(amount);
    stack1.get_top(symbol);
	if(symbol=='*'||symbol=='/')
	{
		stack2.get_top(operate1);
		stack2.pop();
		stack2.get_top(operate2);
		stack2.pop();
		if(symbol=='*')
			operate=operate2*operate1;
		else 
			operate=operate2/operate1;
		stack2.push(operate);
		stack1.pop();
	}
	stack1.push('*');
	amount=0;
	dot=0;
}

void CMyDlg::OnBnClickedButtondiv()
{
	// TODO: 在此添加控件通知处理程序代码
	if(haveparent==true)
	{
		GetDlgItem(IDC_EDIT2)->ShowWindow(SW_HIDE);
	    GetDlgItem(IDC_STATICB)->ShowWindow(SW_HIDE);
		display='('+display+')';
		haveparent=false;
	}
	display=display+"/";
	UpdateData(FALSE);
	if(amount!=0)
		stack2.push(amount);
	stack1.get_top(symbol);
	if(symbol=='*'||symbol=='/')
	{
		stack2.get_top(operate1);
		stack2.pop();
		stack2.get_top(operate2);
		stack2.pop();
		if(symbol=='*')
			operate=operate2*operate1;
		else 
			operate=operate2/operate1;
		stack2.push(operate);
		stack1.pop();
	}
	stack1.push('/');
	amount=0;
	dot=0;
}

void CMyDlg::OnBnClickedButtonleft()
{
	// TODO: 在此添加控件通知处理程序代码
	display=display+"(";
	UpdateData(FALSE);
	stack1.push('(');
	amount=0;
	dot=0;
}

void CMyDlg::OnBnClickedButtonright()
{
	// TODO: 在此添加控件通知处理程序代码
	display=display+")";
	UpdateData(FALSE);
	stack2.push(amount);
	stack1.get_top(symbol);
    stack1.pop();
    while(symbol!='(')
	{  
    	stack2.get_top(operate1);
    	stack2.pop();
    	stack2.get_top(operate2);
        stack2.pop();
    	if(symbol=='+') operate=operate2+operate1;
    	else if(symbol=='-') operate=operate2-operate1;
	    else if(symbol=='*') operate=operate2*operate1;
	    else operate=operate2/operate1;
	    stack2.push(operate);
	    stack1.get_top(symbol);
	    stack1.pop();
	}
	amount=0;
	dot=0;
}


void CMyDlg::OnBnClickedButtonenter()
{
	// TODO: 在此添加控件通知处理程序代码
	if(symbol!='(')
		stack2.push(amount);
	do{
        stack1.get_top(symbol);
		stack1.pop();
		stack2.get_top(operate1);
	    stack2.pop();
		stack2.get_top(operate2);
        stack2.pop();
		if(symbol=='+') operate=operate2+operate1;
		if(symbol=='-') operate=operate2-operate1;
		else if(symbol=='*') operate=operate2*operate1;
		else if(symbol=='/') operate=operate2/operate1;
	    stack2.push(operate);  
	}while(symbol!='#');
	answer=operate;
	GetDlgItem(IDC_EDIT2)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_STATICB)->ShowWindow(SW_SHOW);
	UpdateData(FALSE);
	amount=operate;
    stack1.push('#');
	haveparent=true;
}

void CMyDlg::OnBnClickedButtonce()
{
	// TODO: 在此添加控件通知处理程序代码
	while(!stack1.empty())
		stack1.pop();
	while(!stack2.empty())
		stack2.pop();
	this->OnInitDialog();

}

BOOL CMyDlg::PreTranslateMessage(MSG* pMsg)
{
	// TODO: 在此添加专用代码和/或调用基类
    if(m_hAccel!=NULL)
		if(::TranslateAccelerator(m_hWnd,m_hAccel,pMsg))
			return TRUE;
	return CDialog::PreTranslateMessage(pMsg);
}

void CMyDlg::OnBnClickedButtonex()
{
	// TODO: 在此添加控件通知处理程序代码
	if(stack2.empty()==true)
	{
		haveparent=true;
	}
	if(haveparent==true&&stack2.empty()==true)
	{
		answer=exp(amount);
		display="exp"+display;
		GetDlgItem(IDC_EDIT2)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATICB)->ShowWindow(SW_SHOW);
		amount=answer;
		stack1.push('#');
		haveparent=true;
	}
	else 
	{
		if(symbol!='(')
		stack2.push(amount);
		do{
			stack1.get_top(symbol);
			stack1.pop();
			stack2.get_top(operate1);
			stack2.pop();
			stack2.get_top(operate2);
			stack2.pop();
			if(symbol=='+') operate=operate2+operate1;
			if(symbol=='-') operate=operate2-operate1;
			else if(symbol=='*') operate=operate2*operate1;
			else if(symbol=='/') operate=operate2/operate1;
			stack2.push(operate);  
		}while(symbol!='#');
		answer=exp(operate);
		display="exp("+display+")";
		GetDlgItem(IDC_EDIT2)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATICB)->ShowWindow(SW_SHOW);
		amount=answer;
		stack1.push('#');
		haveparent=true;
	}
	UpdateData(FALSE);
}

void CMyDlg::OnBnClickedButtonsqrt()
{
	// TODO: 在此添加控件通知处理程序代码
	if(stack2.empty()==true)
		haveparent=true;
	if(haveparent==true&&stack2.empty()==true)
	{
		answer=sqrt(amount);
		display="sqrt"+display;
		GetDlgItem(IDC_EDIT2)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATICB)->ShowWindow(SW_SHOW);
		amount=answer;
		stack1.push('#');
		haveparent=true;
	}
	else 
	{
		if(symbol!='(')
		stack2.push(amount);
		do{
			stack1.get_top(symbol);
			stack1.pop();
			stack2.get_top(operate1);
			stack2.pop();
			stack2.get_top(operate2);
			stack2.pop();
			if(symbol=='+') operate=operate2+operate1;
			if(symbol=='-') operate=operate2-operate1;
			else if(symbol=='*') operate=operate2*operate1;
			else if(symbol=='/') operate=operate2/operate1;
			stack2.push(operate);  
		}while(symbol!='#');
		answer=sqrt(operate);
		display="sqrt("+display+")";
		GetDlgItem(IDC_EDIT2)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATICB)->ShowWindow(SW_SHOW);
		amount=answer;
		stack1.push('#');
		haveparent=true;
	}
	UpdateData(FALSE);
}


void CMyDlg::OnBnClickedButtonx2()
{
	// TODO: 在此添加控件通知处理程序代码
	if(stack2.empty()==true)
		haveparent=true;
	if(haveparent==true&&stack2.empty()==true)
	{
		answer=amount*amount;
		display="square"+display;
		GetDlgItem(IDC_EDIT2)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATICB)->ShowWindow(SW_SHOW);
		amount=answer;
		stack1.push('#');
		haveparent=true;
	}
	else 
	{
		if(symbol!='(')
		stack2.push(amount);
		do{
			stack1.get_top(symbol);
			stack1.pop();
			stack2.get_top(operate1);
			stack2.pop();
			stack2.get_top(operate2);
			stack2.pop();
			if(symbol=='+') operate=operate2+operate1;
			if(symbol=='-') operate=operate2-operate1;
			else if(symbol=='*') operate=operate2*operate1;
			else if(symbol=='/') operate=operate2/operate1;
			stack2.push(operate);  
		}while(symbol!='#');
		answer=operate*operate;
		display="square("+display+")";
		GetDlgItem(IDC_EDIT2)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATICB)->ShowWindow(SW_SHOW);
		amount=answer;
		stack1.push('#');
		haveparent=true;
	}
	UpdateData(FALSE);
}


void CMyDlg::OnBnClickedButtonn()
{
	// TODO: 在此添加控件通知处理程序代码
	answer=1;
	if(stack2.empty()==true)
		haveparent=true;
	if(haveparent==true&&stack2.empty()==true)
	{	
		for(int i=1;i<=amount;i++)
			answer=i*answer;
		display=display+"!";
		GetDlgItem(IDC_EDIT2)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATICB)->ShowWindow(SW_SHOW);
		amount=answer;
		stack1.push('#');
		haveparent=true;
	}
	else 
	{
		if(symbol!='(')
		stack2.push(amount);
		do{
			stack1.get_top(symbol);
			stack1.pop();
			stack2.get_top(operate1);
			stack2.pop();
			stack2.get_top(operate2);
			stack2.pop();
			if(symbol=='+') operate=operate2+operate1;
			if(symbol=='-') operate=operate2-operate1;
			else if(symbol=='*') operate=operate2*operate1;
			else if(symbol=='/') operate=operate2/operate1;
			stack2.push(operate);  
		}while(symbol!='#');
		for(int i=1;i<=operate;i++)
			answer=i*answer;
		display="("+display+")!";
		GetDlgItem(IDC_EDIT2)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATICB)->ShowWindow(SW_SHOW);
		amount=answer;
		stack1.push('#');
		haveparent=true;
	}
	UpdateData(FALSE);
}

void CMyDlg::OnBnClickedButtonln()
{
	// TODO: 在此添加控件通知处理程序代码
	if(stack2.empty()==true)
		haveparent=true;
	if(haveparent==true&&stack2.empty()==true)
	{
		answer=log(amount);
		display="ln"+display;
		GetDlgItem(IDC_EDIT2)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATICB)->ShowWindow(SW_SHOW);
		amount=answer;
		stack1.push('#');
		haveparent=true;
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -