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

📄 qiqidlg.cpp

📁 vc++多功能计算器
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	}
	else
	{	
		m_qplay3=m_qq;//这俩句是不可少的,是程序的真正核心!当触发.的按钮后,b=false把执行带到了小数部分中,
		m_qq=0;       //则各个数字按钮就随之进入小数输入中,进入后我先把123.125的整数部分保存在m_qplay中
                      //其余的小数点后面的数就按小数输入,因为前面整数的输入是按整数输入的
		m_qq=m_qplay3+9*1/pow(10,i);
		i++;
	}

   UpdateData(false);

}

void CQiqiDlg::OnButton10() ///这里很特殊,是0的按钮,无论是整数还是小数,尤其是小数的问题最为头痛!
{
 // 	d=10;///这是为Backspace准备的!
	if(b!=false)
	{
	    m_qq=m_qq*10;
	}
	else
	{	
		m_qplay3=m_qq;
		m_qq=0;
		m_qq=m_qplay3+1*1/pow(10,i)-1*1/pow(10,i);//这里是难点!如0.102中的0.10如何作到!我再减去多加的0.02(以例为例)即可
		i++;
	}

   UpdateData(false);

}

void CQiqiDlg::OnButton11() //正负号
{
	// TODO: Add your control notification handler code here
	m_qq=-m_qq;
	UpdateData(false);
//	m_qq=0;
//	if(a==7)  c=0;
}

void CQiqiDlg::OnButton12() ////小数的运用是本程序的第二个至关重要的核心
{
	// TODO: Add your control notification handler code here
//	m_qq=m_qq*1/10;有错误!!!!!!!!!
//	m_qplay3=m_qq;
//	m_qq=0;
   	//UpdateData(false);
//	i=0;
	b=false;//这是一个标记//
	i=1;///这是对i的初始化,要不初始化的话,只要打开计算机当第一次使用小数时,系统就自动赋下小数点记位的i值,它分配的数过大,所以会出现如1#end
//	UpdateData(false);
}///在这里并不进行小数的程序,只是设定一些开关,真正的小数代码有各个数据按钮来完成!·
void CQiqiDlg::OnButton18() //倒数
{
	// TODO: Add your control notification handler code here
	m_qq=1/m_qq;
	UpdateData(false);
//	m_qq=0;本想刷新一下,但由于与连续的四则运算不兼容。所以刷新的工作就全权有刷新按钮来实现
//	if(a==7)  c=0;
}

void CQiqiDlg::OnButton16() //次方的计算
{
	// TODO: Add your control notification handler code here
	m_qplay1=m_qq;
	m_qq=0;
	i=0;//结束上一个小数的输入后,把小数记位回0。
	//m_qq=pow(m_qplay3,m_qq);在这儿写这句话是错误的,在这我已经把m_qq赋值为0了!
	UpdateData(false);
	a=5;////也要输入俩个数,所以这个与四则运算一样,也在=号中完成!
//	if(a==7)  c=0;
}

void CQiqiDlg::OnButton14() //开根号
{
	// TODO: Add your control notification handler code here
	if(m_qq>=0)
	{
	   m_qq=sqrt(m_qq);
       UpdateData(false);
	}
	else 
	{
		AfxMessageBox("根号下不能为负值!!!请重新输入!");
		m_qq=0;
		UpdateData(false);
		return;
	}
//	if(a==7)  c=0;
//	m_qq=0;////
}

void CQiqiDlg::OnButton13() //除法
{
	// TODO: Add your control notification handler code here
	m_qplay1=m_qq;//把输入完毕的第一个数具给一个变量,来做到储存的目的。
	              //这样在输入第二个数据时可还利用m_qq,保证程序不变。
	m_qq=0;//使其值恢复为0,即初始值。
	i=0;//这样做的目的是为了刷新一下小数点,否则,记下一个数时会错!!
	a=1;//这样做的目的是标记一下,当按下加号是其标记是1。以便在编辑=号代码时好识别是进行的哪种运算。
//	b=true;
//	if(a==7)  c=0;
}//此程序的代码还可解释为:点击+-*/运算符后,取值,换句话说就是表示第一个数据输入结束

void CQiqiDlg::OnButton15() //乘法
{
	// TODO: Add your control notification handler code here
	m_qplay1=m_qq;
	m_qq=0;
	i=0;
    a=2;
//	if(a==7)  c=0;
//	b=true;
}

void CQiqiDlg::OnButton17() //减法
{
	// TODO: Add your control notification handler code here
	m_qplay1=m_qq;
	m_qq=0;
	i=0;
	a=3;
//	if(a==7)  c=0;
//	b=true;
}


void CQiqiDlg::OnButton19() //加法
{
	// TODO: Add your control notification handler code here
	m_qplay1=m_qq;
	m_qq=0;
	i=0;
	a=4;//这样做的目的是标记一下,当按下加号是其标记是1。以便在编辑=号代码时好识别是进行的哪种运算。
	   //这样就简化了在=号程序中识别的难点。
	  //主要原因是加减乘除运算必须在=号中实现,因为第二个去值必须在出发等号时才可提取!
//	if(a==7)  c=0;
	
//	b=true;
}

void CQiqiDlg::OnButton20() //=的程序是本程序的第四个核心   主要用在四则运算中,其余如sin,cos..都是自己的消息响应函数来直接输出
{
	// TODO: Add your control notification handler code here
//	m_qplay2=m_qq;//我为什么敢这样做,而不担心当输入的是两个数时,m_qq可能是第一个值。因为在这是消息响应函数,只有出发按钮才可执行。
//我把上面一行隐去的原因是在对数运算中底不能为负值,我要进行判断!只是为了a==6这一行!
	if(a==1)  {m_qplay2=m_qq; m_qq=m_qplay1/m_qplay2;}
    else if(a==2) {m_qplay2=m_qq; m_qq=m_qplay1*m_qplay2;}	
	else if(a==3)  {m_qplay2=m_qq; m_qq=m_qplay1-m_qplay2;}
	else if(a==4)  {m_qplay2=m_qq; m_qq=m_qplay1+m_qplay2;}
   	else if(a==5)  {m_qplay2=m_qq; m_qq=pow(m_qplay1,m_qplay2);}
	else if(a==6)  
	{
	    if(m_qq>0)
		{
		    m_qplay2=m_qq; 
		    m_qq=log10(m_qplay1)/log10(m_qplay2);
		}
	    else if (m_qq=1)
		{
			AfxMessageBox("对数函数的底不能为1!!!请重新输入!");
		 	m_qplay2=m_qq=0;
		    UpdateData(false);
			return;
		}
		else 
		{
			AfxMessageBox("对数函数的底不能为负!!!请重新输入!");
		   	m_qplay2=m_qq=0;
		    UpdateData(false);
			return;
		}
	}
//	else if(a==7)  c=0;
	UpdateData(false);
	b=true;//退出小数模式,否则,再输入时就自动成了小数模式,输入的永远是是小数。
//	m_qq=0;
	m_qplay1=0;
	m_qplay2=0;
    m_qplay3=0;
	a=0;
	i=0;
}

void CQiqiDlg::OnButton21() //还原
{
	// TODO: Add your control notification handler code here
	m_qq=0;
	m_qplay1=0;
	m_qplay2=0;
    m_qplay3=0;
	a=0;
	i=0;
//	c=0;
	b=true;
	UpdateData(false);
}

void CQiqiDlg::OnButton22() //正弦
{
	// TODO: Add your control notification handler code here
	m_qq=sin(m_qq);
	UpdateData(false);
//	if(a==7)  c=0;
}

void CQiqiDlg::OnButton23() //余弦
{
	// TODO: Add your control notification handler code here
	m_qq=cos(m_qq);
	UpdateData(false);
//	if(a==7)  c=0;
}

void CQiqiDlg::OnButton24() //正切
{
	// TODO: Add your control notification handler code here
	m_qq=tan(m_qq);
	UpdateData(false);
//	if(a==7)  c=0;
}

void CQiqiDlg::OnButton25() //余切
{
	// TODO: Add your control notification handler code here
	m_qq=1/tan(m_qq);
	UpdateData(false);
//	if(a==7)  c=0;
}

void CQiqiDlg::OnButton26() //阶乘
{
	// TODO: Add your control notification handler code here
	if(m_qq>=1)//不要忽略掉数学函数成立的条件
	{
	double n=1;
	    for(int l=1;l<=m_qq;l++)
		   {
			n=n*l;///用一个变量代替m_qq; 
		   }
		m_qq=n;
       	UpdateData(false);
	}
	else
	{
		AfxMessageBox("阶乘函数的定义域必须是正整数!!!请重新输入!");
		m_qq=0;
		UpdateData(false);///这样做是清空编辑框,为了重新输入!
		return;
	}
//	if(a==7)  c=0;
}

void CQiqiDlg::OnButton27() //lnx
{
	// TODO: Add your control notification handler code here
    if(m_qq>0)
	{
	   m_qq=log(m_qq);
	   UpdateData(false);
	}
	else
	{
		AfxMessageBox("自然对数的定义域是非负的!!!请重新输入!"); //其后()内是弹出对话框中的内容!不过它只是
		                      //对话框中一种提示信息的对话框,但不能进行修改和编辑
		m_qq=0;
		UpdateData(false);
		return;
	}
//	if(a==7)  c=0;
}

void CQiqiDlg::OnButton28() //lgx
{
	// TODO: Add your control notification handler code here
    if(m_qq>0)
	{
	   m_qq=log10(m_qq);
	   UpdateData(false);
	}
	else
	{
		AfxMessageBox("常用对数的定义域是非负的!!!请重新输入!"); //其后()内是弹出对话框中的内容!不过它只是
		                      //对话框中一种提示信息的对话框,但不能进行修改和编辑
		m_qq=0;
		UpdateData(false);
		return;
	}
//	if(a==7)  c=0;
}

void CQiqiDlg::OnButton29() //logaX
{
	// TODO: Add your control notification handler code here
	if (m_qq>0)
	{
	  m_qplay1=m_qq;
	  m_qq=0;
	  i=0;
	  a=6;////也要输入俩个数,所以这个与四则运算一样,也在=号中完成!
	}
	else
	{
		AfxMessageBox("常用对数的定义域是非负的!!!请重新输入!");
		m_qq=0;
		UpdateData(false);
		return;
	}

//	if(a==7)  c=0;
}

//void CQiqiDlg::OnButton30() //Backspace
//{
	// TODO: Add your control notification handler code here

//    c+=1;//是Backspace按钮的点击积家器//点击一下累积一次
//	m_qq=int m_qq/10;//点击一下879变为87。由将879除以10后成87.9然后强制转化为整型数来做到!   m_qq=int pow(m_qq,c);
//    int q=int m_qq/pow(10,1);//本以为可以将其强制转化为整形,这个问题解决了但由于m_qq是double型int不能等于double型!所以我要再定义一个整形的数来实现转换,这个整形数定义为此函数的局部变量。
//    q=int m_qq;
//	q=int q/pow(10,c);

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///本以为可将其强制转化为整型但系统不承认!!另行方法:::::就是识别一下输入的数据最后一位是谁,所以我要标记一下各个数据按钮!!再定义一个标记符,其为成员数据与a,b,c一样。
//  while(c!=0)///用while循环,这样就可以在不知道循环几次的的条件下进行循环!只要按下Backspace按钮就可。
//  {
//	    switch(d)
//		{
//         case 1:m_qq=(m_qq-(m_qq-1))/10;
//         case 2:m_qq=(m_qq-(m_qq-2))/10;
//         case 3:m_qq=(m_qq-(m_qq-3))/10;
//         case 4:m_qq=(m_qq-(m_qq-4))/10;
//         case 5:m_qq=(m_qq-(m_qq-5))/10;
//         case 6:m_qq=(m_qq-(m_qq-6))/10;
//         case 7:m_qq=(m_qq-(m_qq-7))/10;
//         case 8:m_qq=(m_qq-(m_qq-8))/10;
//         default:m_qq=m_qq/10;
//		}////如879变成87就是(879-(879-9))/10; 
//   }
//	d=(m_qq/10) 
//////////////////////////////////////////////////////////////////////////////////////////////////////////
///执行不了,因为我没做到识别谁是最后一位!!!!!!!!!!!!

//	UpdateData(false);
//	a=7;//这样作的目的是为将此按钮的点击累加器c值在对下一个数操作时使之为0。重新开始!但在这作不到所以必须在判断一个数输完的按钮中做,即=-+*/号以及开根号等等的运算中,即只要是运算都要处理!

//}

void CQiqiDlg::OnButton31() //CE
{
	// TODO: Add your control notification handler code here
	m_qq=0;
	UpdateData(false);
	b=true;
}

void CQiqiDlg::OnButton32() //绝对值
{
	// TODO: Add your control notification handler code here
	if(m_qq<0)
		m_qq=-m_qq;
	else
		m_qq=m_qq;
	UpdateData(false);
	b=true;
}

void CQiqiDlg::OnButton33() //π
{
	// TODO: Add your control notification handler code here
	m_qq=3.1415926;
	UpdateData(false);
}

⌨️ 快捷键说明

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