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

📄 test.cpp

📁 小型计算器程序 ?⌒图扑闫鞒绦? 小型计算器程序
💻 CPP
字号:
// TEST.cpp : implementation file
//

#include "stdafx.h"
#include "T318.h"
#include "TEST.h"
#include "math.h"
#include "MyAbout.h"

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

/////////////////////////////////////////////////////////////////////////////
// TEST dialog


TEST::TEST(CWnd* pParent /*=NULL*/)
	: CDialog(TEST::IDD, pParent)
{
	//{{AFX_DATA_INIT(TEST)
	m_x = 0.0;
	//}}AFX_DATA_INIT
	m_ForS = 1;					//初始化
	m_ForF = 1;
	m_wfun = true;
	m_first = 0;
	m_second = 0;
	m_fun = 0;
	m_mfun = 0;
	m_firstz = 0;
	m_firstx = 0;
	m_firxw = 0;
	m_secondz = 0;
	m_secondx = 0;
	m_secxw = 0;
	m_firzorf = 1;
	m_seczorf = 1;
	m_firx = false;
	m_secx = false;

}


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


BEGIN_MESSAGE_MAP(TEST, CDialog)
	//{{AFX_MSG_MAP(TEST)
	ON_BN_CLICKED(IDC_0, On0)
	ON_BN_CLICKED(IDC_1, On1)
	ON_BN_CLICKED(IDC_2, On2)
	ON_BN_CLICKED(IDC_3, On3)
	ON_BN_CLICKED(IDC_4, On4)
	ON_BN_CLICKED(IDC_5, On5)
	ON_BN_CLICKED(IDC_6, On6)
	ON_BN_CLICKED(IDC_7, On7)
	ON_BN_CLICKED(IDC_8, On8)
	ON_BN_CLICKED(IDC_9, On9)
	ON_BN_CLICKED(IDC_ADD, OnAdd)
	ON_BN_CLICKED(IDC_SUB, OnSub)
	ON_BN_CLICKED(IDC_TIM, OnTim)
	ON_BN_CLICKED(IDC_DIV, OnDiv)
	ON_BN_CLICKED(IDC_XSD, OnXsd)
	ON_BN_CLICKED(IDC_ZFH, OnZfh)
	ON_BN_CLICKED(IDC_QC, OnQc)
	ON_BN_CLICKED(IDC_BA, OnBa)
	ON_BN_CLICKED(IDC_RESULT, OnResult)
	ON_BN_CLICKED(IDC_SIN, OnSin)
	ON_BN_CLICKED(IDC_COS, OnCos)
	ON_BN_CLICKED(IDC_PF, OnPf)
	ON_BN_CLICKED(IDC_DS, OnDs)
	ON_BN_CLICKED(IDC_SQR, OnSqr)
	ON_BN_CLICKED(IDC_ABOUT, OnAbout)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// TEST message handlers

void TEST::On0() 
{
	// TODO: Add your control notification handler code here
	AddNum(0);
}

void TEST::On1() 
{
	// TODO: Add your control notification handler code here
	AddNum(1);
}

void TEST::On2() 
{
	// TODO: Add your control notification handler code here
	AddNum(2);
}

void TEST::On3() 
{
	// TODO: Add your control notification handler code here
	AddNum(3);
}

void TEST::On4() 
{
	// TODO: Add your control notification handler code here
	AddNum(4);
}

void TEST::On5() 
{
	// TODO: Add your control notification handler code here
	AddNum(5);
}

void TEST::On6() 
{
	// TODO: Add your control notification handler code here
	AddNum(6);
}

void TEST::On7() 
{
	// TODO: Add your control notification handler code here
	AddNum(7);
}

void TEST::On8() 
{
	// TODO: Add your control notification handler code here
	AddNum(8);
}

void TEST::On9() 
{
	// TODO: Add your control notification handler code here
	AddNum(9);
}

void TEST::OnAdd() 
{
	// TODO: Add your control notification handler code here
	AddFun(1);
}

void TEST::OnSub() 
{
	// TODO: Add your control notification handler code here
	AddFun(2);
}

void TEST::OnTim() 
{
	// TODO: Add your control notification handler code here
	AddFun(3);
}

void TEST::OnDiv() 
{
	// TODO: Add your control notification handler code here
	AddFun(4);
}

void TEST::OnXsd() 
{
	// TODO: Add your control notification handler code here
	if(m_ForS ==1 && m_wfun)
		m_firx = true;						//在输入第一个数时,将是否输入小数置为真
	if(m_ForS ==2 && m_wfun)
		m_secx = true;						//在输入第二个数时,将是否输入小数置为真
	if(m_ForS ==3 && m_wfun)
		m_firx = true;						//在重新输入第一个数时,将是否输入小数置为真
}

void TEST::OnZfh() 
{
	// TODO: Add your control notification handler code here
	if(m_ForS==1 && m_wfun)			//此时在输入第一个数
	{
		m_firzorf=-1;		//指示符置为-1
		m_first*=-1;
		m_x=m_first;
		UpdateData(false);
	}
	else if(m_ForS==2 && m_wfun)			//此时在输入第二个数
	{
		m_seczorf=-1;		//指示符置为-1
		m_second*=-1;
		m_x=m_second;
		UpdateData(false);
	}
	else if(m_ForS==3 && m_wfun)			//此时在重新输入第一个数
	{
		m_firzorf=-1;		//指示符置为-1
		m_first*=-1;
		m_x=m_first;
		UpdateData(false);
	}
	else if(!m_wfun)
	{
		m_seczorf=-1;		//指示符置为-1
		m_second*=-1;
		m_x=m_second;
		UpdateData(false);
	}
}

void TEST::OnQc() 
{
	// TODO: Add your control notification handler code here
	m_x = 0;
	m_ForS = 1;					
	m_ForF = 1;
	m_wfun = true;
	m_first = 0;
	m_second = 0;
	m_fun = 0;
	m_mfun = 0;
	m_firstz = 0;
	m_firstx = 0;
	m_firxw = 0;
	m_secondz = 0;
	m_secondx = 0;
	m_secxw = 0;
	m_firzorf = 1;
	m_seczorf = 1;
	m_firx = false;
	m_secx = false;
	UpdateData(false);
}

void TEST::OnBa() 
{
	// TODO: Add your control notification handler code here
	if(m_ForS == 1 && m_wfun)
	{
		if(m_firx == false)
		{
			if(m_firstz<10)
			{
				m_firstz = 0;
				m_firzorf = 1;
			}
			else
			{
				m_firstz = m_firstz / 10;
			
			}
		}
		else
		{
			if(m_firxw == 1)			//如果小数位数等于一,则清除小数位并去掉小数点
			{
				m_firstx =0;
				m_firxw--;
				m_firx = false;
			}
			else
			{
			/*	m_firstx = pow(10,(-1) * m_firxw-1) * (((int)(m_firstx* pow(10,m_firxw)))/10);
				m_firxw--;*/
				int y=(int)(m_firstx * pow(10,m_firxw));	//取一整数与小数点所有的数表示的整数相等,如123等于0.123的小数部分表示的数
				y/=10;m_firxw--;			//去掉最后一位
				m_firstx=y * pow(10,(-1) * m_firxw);
			}
		}
		m_first = m_firzorf * (m_firstz + m_firstx);
		m_x = m_first;
		
	}
	else if(m_ForS == 2 && m_wfun)
	{
		if(m_secx == false)
		{
			if(m_secondz<10)
			{
				m_secondz = 0;
				m_seczorf = 1;
			}
			else
			{
				m_secondz = m_secondz / 10;
			
			}
		}
		if(m_secx == true)
		{
			if(m_secxw == 1)			//如果小数位数等于一,则清除小数位并去掉小数点
			{
				m_secondx =0;
				m_secxw--;
				m_secx = false;
			}
			else
			{
			/*	m_firstx = pow(10,(-1) * m_firxw-1) * (((int)(m_firstx* pow(10,m_firxw)))/10);
				m_firxw--;*/
				int y=(int)(m_secondx * pow(10,m_secxw));	//取一整数与小数点所有的数表示的整数相等,如123等于0.123的小数部分表示的数
				y/=10;m_secxw--;			//去掉最后一位
				m_secondx=y * pow(10,(-1) * m_secxw);
			}
		}
		m_second = m_seczorf *(m_secondz + m_secondx);
		m_x = m_second;
	}
	else
	{
		m_x = 0;
		m_ForS = 1;					
		m_ForF = 1;
		m_wfun = true;
		m_first = 0;
		m_second = 0;
		m_fun = 0;
		m_mfun = 0;
		m_firstz = 0;
		m_firstx = 0;
		m_firxw = 0;
		m_secondz = 0;
		m_secondx = 0;
		m_secxw = 0;
		m_firzorf = 1;
		m_seczorf = 1;
		m_firx = false;
		m_secx = false;
	}
	UpdateData(false);
}

void TEST::OnResult() 
{
	// TODO: Add your control notification handler code here
	if(m_ForF = 2 && m_wfun)
	{
		switch(m_mfun)
		{
		case 1: m_x = m_first + m_second;break;		//作加法运算
		case 2: m_x = m_first - m_second;break;		//作减法运算
		case 3: m_x = m_first * m_second;break;		//作乘法运算
		case 4: 
			if(m_second){m_x = m_first / m_second;break;}
					else 
					{
						AfxMessageBox("除数不能为0!");
						return;
					}                                       //作除法运算
		default: return;
		}
		m_first = m_x;
		m_ForS = 3;
		UpdateData(false);
	}
}

void TEST::AddNum(int i)
{
	if(m_ForS == 1)
	{
		if(m_firx == false)              //输入整数部分
		{
			m_firstz *= 10;m_firstz += i;
		}
		else                             //输入小数部分
		{
			m_firxw++;m_firstx += pow(10,(-1) * m_firxw) *i;
		}
		m_first = m_firzorf * (m_firstz + m_firstx);
		m_x = m_first;
		m_wfun = true;
		UpdateData(false);
	}
	if(m_ForS == 2)
	{
		if(m_secx == false)              //输入整数部分
		{
			m_secondz *= 10;m_secondz += i;
		}
		else                             //输入小数部分
		{
			m_secxw++;m_secondx += pow(10,(-1) * m_secxw) * i;
		}
		m_second = m_seczorf * (m_secondz + m_secondx);
		m_x = m_second;
		m_wfun = true;
		UpdateData(false);
	}
	if(m_ForS == 3)
	{
		m_firstz = 0;
		m_firstx = 0;
		m_first = 0;
		m_firx = false;
		m_firxw = 0;
		m_firzorf = 1;
		m_second = 0;
		m_secondz = 0;
		m_secondx = 0;
		m_seczorf = 1;
		m_secxw = 0;								//运算后再输入数字则清屏后输入第一个数
		m_ForF = 1;
		m_mfun = 0;
		m_wfun = true;
		if(m_firx == false)							//输入整数部分
		{
			m_firstz *= 10;m_firstz += i;
		}
		else										//输入小数部分
		{
			m_firxw++;m_firstx += pow(10,(-1) * m_firxw) *i;
		}
		m_first = m_firzorf * (m_firstz + m_firstx);
		m_x = m_first;
		m_wfun = true;
		m_ForS = 1;
		UpdateData(false);
	}
}


void TEST::AddFun(int j)
{
	if(j == 1 ||j == 2 ||j == 3 ||j == 4)
	{
		if(m_ForS == 1||m_ForS == 2)
		{
			if(m_ForF == 1 && m_wfun)
			{
				m_mfun = j;
				m_ForF = 2;
				m_ForS = 2;
				m_wfun = false;
			}
			else if(m_ForF == 2 && m_wfun)
			{
				switch(m_mfun)
				{
				case 1: m_x = m_first + m_second;break;		//作加法运算
				case 2: m_x = m_first - m_second;break;		//作减法运算
				case 3: m_x = m_first * m_second;break;		//作乘法运算
				case 4: 
					if(m_second){m_x = m_first / m_second;break;}
					else 
					{
						AfxMessageBox("除数不能为0!");
						return;
					}                                       //作除法运算
				default: return;
				}
				UpdateData(false);
				m_first = m_x;
				m_second = 0;
				m_secondz = 0;
				m_secondx = 0;
				m_seczorf = 1;
				m_secxw = 0;
				m_mfun = j;
				m_ForS = 2;
				m_wfun = false;
			}
			else if(m_ForF == 2 && !m_wfun)
			{	
				m_mfun = j;
				m_ForF = 2;
				m_ForS = 2;
				m_wfun = false;
			}
		}
		else if(m_ForS == 3)
		{
			m_second = 0;
			m_secondz = 0;
			m_secondx = 0;
			m_seczorf = 1;
			m_secxw = 0;								//运算后再输入数字则清屏后输入第一个数
			m_ForF = 1;
			m_mfun = 0;
			m_wfun = true;
			if(m_ForF == 1 && m_wfun)
			{
				m_mfun = j;
				m_ForF = 2;
				m_ForS = 2;
				m_wfun = false;
			}
			else if(m_ForF == 2 && m_wfun)
			{
				switch(m_mfun)
				{
				case 1: m_x = m_first + m_second;break;		//作加法运算
				case 2: m_x = m_first - m_second;break;		//作减法运算
				case 3: m_x = m_first * m_second;break;		//作乘法运算
				case 4: 
					if(m_second){m_x = m_first / m_second;break;}
					else 
					{
						AfxMessageBox("除数不能为0!");
						return;
					}                                       //作除法运算
				default: return;
				}
				UpdateData(false);
				m_first = m_x;
				m_second = 0;
				m_secondz = 0;
				m_secondx = 0;
				m_seczorf = 1;
				m_secxw = 0;
				m_mfun = j;
				m_ForS = 2;
				m_wfun = false;
			}
		}
	}
	else
	{
		if((m_ForS == 1 && m_wfun) || m_ForS == 3)
		{
			switch(j)
			{
			case 5: m_first = sin(m_first/45 * atan(1));	break;			//作正弦运算
			case 6: m_first = cos(m_first/45 * atan(1));	break;			//作余弦运算
			case 7: m_first = m_first * m_first;break;			            //作平方运算
			case 8: 
				if(m_first){m_first = 1/m_first;break;}
					else 
					{
						AfxMessageBox("0不能求倒数!");
						return;
					}                                   					//作倒数运算
			case 9: 
				if(m_first>=0){m_first = sqrt(m_first);break;}
					else 
					{
						AfxMessageBox("负数不能开平方!");
						return;
					}														//作开方运算
			}
			m_x = m_first;
			m_ForF = 2;
			m_ForS = 3;
			UpdateData(false);
		}
		else if(m_ForS == 1 && !m_wfun)
		{
			switch(j)
			{
			case 5: m_first = sin(m_first/45 * atan(1));  break;
			case 6: m_first = cos(m_first/45 * atan(1));  break;
			case 7: m_first = pow(m_first,2);    break;
			case 8: 
				if(m_first){m_first = 1/m_first;break;}
					else 
					{
						AfxMessageBox("0不能求倒数!");
						return;
					}                                   					//作倒数运算
			case 9: 
				if(m_first>=0){m_first = sqrt(m_first);break;}
					else 
					{
						AfxMessageBox("负数不能开平方!");
						return;
					}														//作开方运算
			}
			m_x = m_first;
			m_wfun = true;
			m_ForF = 2;
			m_ForS = 3;
			UpdateData(false);
		}
		else if(m_ForS == 2 && m_wfun)
		{
			switch(j)
			{
			case 5: m_second = sin(m_second/45 * atan(1));break;
			case 6: m_second = cos(m_second/45 * atan(1));break;
			case 7: m_second = pow(m_second,2);break;
			case 8:
				if(m_second){m_second = 1/m_second;}
					else 
					{
						AfxMessageBox("0不能求倒数!");
						return;
					}break;
			case 9: 
				if(m_second>=0){m_second = sqrt(m_second);}
					else 
					{
						AfxMessageBox("负数不能开平方!");
						return;
					}break;
			}
			m_x = m_second;
			UpdateData(false);
		}
		else 
		{
			AfxMessageBox("输入不合法!");
		}
	}
}



void TEST::OnSin() 
{
	// TODO: Add your control notification handler code here
	AddFun(5);
}

void TEST::OnCos() 
{
	// TODO: Add your control notification handler code here
	AddFun(6);
}

void TEST::OnPf() 
{
	// TODO: Add your control notification handler code here
	AddFun(7);
}

void TEST::OnDs() 
{
	// TODO: Add your control notification handler code here
	AddFun(8);
}

void TEST::OnSqr() 
{
	// TODO: Add your control notification handler code here
	AddFun(9);
}

void TEST::OnAbout() 
{
	// TODO: Add your control notification handler code here
	MyAbout Dlg;
	Dlg.DoModal();
}

void TEST::OnOK() 
{
	// TODO: Add extra validation here
	
	CDialog::OnOK();
}

⌨️ 快捷键说明

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