?? 計算器dlg.cpp
字號:
shizhuanqita(n4, 16);
UpdateData(FALSE);
OperatorPressed=true;
k=16; i=0;
m_RadioHex.SetCheck(1);
m_NumA.EnableWindow(TRUE);
m_NumB.EnableWindow(TRUE);
m_NumC.EnableWindow(TRUE);
m_NumD.EnableWindow(TRUE);
m_NumE.EnableWindow(TRUE);
m_NumF.EnableWindow(TRUE);
m_Num2.EnableWindow(TRUE);
m_Num3.EnableWindow(TRUE);
m_Num4.EnableWindow(TRUE);
m_Num5.EnableWindow(TRUE);
m_Num6.EnableWindow(TRUE);
m_Num7.EnableWindow(TRUE);
m_Num8.EnableWindow(TRUE);
m_Num9.EnableWindow(TRUE);
m_RadioDegree.EnableWindow(FALSE);
m_OprDaoshu.EnableWindow(FALSE);
m_OprDot.EnableWindow(FALSE);
m_RadioRadian.EnableWindow(FALSE);
m_OprSin.EnableWindow(FALSE);
m_OprCos.EnableWindow(FALSE);
m_OprCot.EnableWindow(FALSE);
m_OprAcot.EnableWindow(FALSE);
m_OprTan.EnableWindow(FALSE);
m_OprAsin.EnableWindow(FALSE);
m_OprAcos.EnableWindow(FALSE);
m_OprAtan.EnableWindow(FALSE);
m_OprPi.EnableWindow(FALSE);
}
void CMyDlg::OnOctal() //八進制
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
strcpy (str1,m_strResult);
n4=qitazhuanshi(str1, k);
shizhuanqita(n4, 8);
UpdateData(FALSE);
OperatorPressed=true;
k=8; i=0;
m_RadioOctal.SetCheck(1);
m_Num2.EnableWindow(TRUE);
m_Num3.EnableWindow(TRUE);
m_Num4.EnableWindow(TRUE);
m_Num5.EnableWindow(TRUE);
m_Num6.EnableWindow(TRUE);
m_Num7.EnableWindow(TRUE);
m_OprDot.EnableWindow(FALSE);
m_OprDaoshu.EnableWindow(FALSE);
m_Num8.EnableWindow(FALSE);
m_Num9.EnableWindow(FALSE);
m_OprSin.EnableWindow(FALSE);
m_OprCos.EnableWindow(FALSE);
m_OprCot.EnableWindow(FALSE);
m_OprAcot.EnableWindow(FALSE);
m_OprTan.EnableWindow(FALSE);
m_OprAsin.EnableWindow(FALSE);
m_OprAcos.EnableWindow(FALSE);
m_OprAtan.EnableWindow(FALSE);
m_OprPi.EnableWindow(FALSE);
m_NumA.EnableWindow(FALSE);
m_NumB.EnableWindow(FALSE);
m_NumC.EnableWindow(FALSE);
m_NumD.EnableWindow(FALSE);
m_NumE.EnableWindow(FALSE);
m_NumF.EnableWindow(FALSE);
m_RadioDegree.EnableWindow(FALSE);
m_RadioRadian.EnableWindow(FALSE);
}
void CMyDlg::OnBinary() //二進制
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
strcpy (str1,m_strResult);
n4=qitazhuanshi(str1, k);
shizhuanqita(n4, 2);
UpdateData(FALSE);
OperatorPressed=true;
k=2; i=0;
m_RadioBinary.SetCheck(1);
m_Num2.EnableWindow(FALSE);
m_Num3.EnableWindow(FALSE);
m_Num4.EnableWindow(FALSE);
m_Num5.EnableWindow(FALSE);
m_Num6.EnableWindow(FALSE);
m_Num7.EnableWindow(FALSE);
m_Num8.EnableWindow(FALSE);
m_Num9.EnableWindow(FALSE);
m_OprDot.EnableWindow(FALSE);
m_OprSin.EnableWindow(FALSE);
m_OprCos.EnableWindow(FALSE);
m_OprDaoshu.EnableWindow(FALSE);
m_OprCot.EnableWindow(FALSE);
m_OprAcot.EnableWindow(FALSE);
m_OprTan.EnableWindow(FALSE);
m_OprAsin.EnableWindow(FALSE);
m_OprAcos.EnableWindow(FALSE);
m_OprAtan.EnableWindow(FALSE);
m_OprPi.EnableWindow(FALSE);
m_NumA.EnableWindow(FALSE);
m_NumB.EnableWindow(FALSE);
m_NumC.EnableWindow(FALSE);
m_NumD.EnableWindow(FALSE);
m_NumE.EnableWindow(FALSE);
m_NumF.EnableWindow(FALSE);
m_RadioDegree.EnableWindow(FALSE);
m_RadioRadian.EnableWindow(FALSE);
}
void CMyDlg::OnDegree() //弧度
{
// TODO: Add your control notification handler code here
j=1;
}
void CMyDlg::OnRadian() //角度
{
// TODO: Add your control notification handler code here
j=2;
}
void CMyDlg::Error(int n) //出錯處理
{ char *err[]={ "多個小數點",
"除數不能為零",
"被開方數不能負數",
"對數的真數不能小于等于零",
"求模的分母不能為零",
"正切的角度不能為90度、270度等等",
"余切的角度不能為0度、180度、360度等等",
"反正弦的輸入范圍為(-1,1)",
"反余弦的輸入范圍為(-1,1)",
"階乘要大于等于零且為整數",
"被開方數不能為負數",
"沒有輸入操作數",
"不能連續按多下等號鍵"
};
m_strResult.Format("出錯了: %s",err[n]);
i=0;h=0;
m_shi="";s=NULL;
UpdateData(FALSE);
OperatorPressed=true;
}
void CMyDlg::OnAsin()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if(h==0)
{ Error(11);return;}
m_shi="ASIN";
m_shi+=m_strResult;
n1=atof(m_strResult);
if(n1>1||n1<-1)
{ Error(7);OperatorPressed=true;i=0;return;}
if(j!=1)
{
n1=asin(n1)*180/pi;
m_strResult.Format("%f",n1);
}
else
m_strResult.Format("%f",asin(n1));
m_strResult.TrimRight('0');
m_strResult.TrimRight('.');
m_shi+='=';
m_shi+=m_strResult;
if(t<16)
{strcpy(str3[t].str2,m_shi);t++;}
else
{t=1;strcpy(str3[t].str2,m_shi);t++;}
m_shi="";
i=0;
UpdateData(FALSE);
OperatorPressed=true;
}
void CMyDlg::OnAcos()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if(h==0)
{ Error(11);return;}
m_shi="ACOS";
m_shi+=m_strResult;
n1=atof(m_strResult);
if(n1>1||n1<-1)
{ Error(8);OperatorPressed=true;i=0;return;}
if(j!=1)
{
n1=acos(n1)*180/pi;
m_strResult.Format("%f",n1);
}
else
m_strResult.Format("%f",cos(n1));
m_strResult.TrimRight('0');
m_strResult.TrimRight('.');
m_shi+='=';
m_shi+=m_strResult;
if(t<16)
{strcpy(str3[t].str2,m_shi);t++;}
else
{t=1;strcpy(str3[t].str2,m_shi);t++;}
m_shi="";
i=0;
UpdateData(FALSE);
OperatorPressed=true;
}
void CMyDlg::OnAtan()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if(h==0)
{ Error(11);return;}
m_shi="ATAN";
m_shi+=m_strResult;
n1=atof(m_strResult);
if(j!=1)
{
n1=atan(n1)*180/pi;
m_strResult.Format("%f",n1);
}
else
m_strResult.Format("%f",atan(n1));
m_strResult.TrimRight('0');
m_strResult.TrimRight('.');
m_shi+='=';
m_shi+=m_strResult;
if(t<16)
{strcpy(str3[t].str2,m_shi);t++;}
else
{t=1;strcpy(str3[t].str2,m_shi);t++;}
m_shi="";
i=0;
UpdateData(FALSE);
OperatorPressed=true;
}
void CMyDlg::OnAcot()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if(h==0)
{ Error(11);return;}
m_shi="ACOT";
m_shi+=m_strResult;
n1=atof(m_strResult);
if(j!=1)
{
n1=(pi/2-atan(n1))*180/pi;
m_strResult.Format("%f",n1);
}
else
m_strResult.Format("%f",pi/2-atan(n1));
m_strResult.TrimRight('0');
m_strResult.TrimRight('.');
m_shi+='=';
m_shi+=m_strResult;
if(t<16)
{strcpy(str3[t].str2,m_shi);t++;}
else
{t=1;strcpy(str3[t].str2,m_shi);t++;}
m_shi="";
i=0;
UpdateData(FALSE);
OperatorPressed=true;
}
void CMyDlg::OnExp()//e的x次方
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if(h==0)
{ Error(11);return;}
m_shi="E^";
m_shi+=m_strResult;
if(k==2||k==8||k==16)
{
strcpy (str1,m_strResult);
n1=qitazhuanshi(str1, k);
}
else
n1=atof(m_strResult);
if(k==2||k==8||k==16)
shizhuanqita(exp(n1), k);
else
m_strResult.Format("%f",exp(n1));
m_strResult.TrimRight('0');
m_strResult.TrimRight('.');
m_shi+='=';
m_shi+=m_strResult;
if(t<16)
{strcpy(str3[t].str2,m_shi);t++;}
else
{t=1;strcpy(str3[t].str2,m_shi);t++;}
m_shi="";
i=0;
UpdateData(FALSE);
OperatorPressed=true;
}
void CMyDlg::OnDaoshu() //x的倒數
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if(h==0)
{ Error(11);return;}
m_shi="1/";
m_shi+=m_strResult;
n1=atof(m_strResult);
if(n1==0)
{Error(1);return;}
else
m_strResult.Format("%f",1/n1);
m_strResult.TrimRight('0');
m_strResult.TrimRight('.');
m_shi+='=';
m_shi+=m_strResult;
if(t<16)
{strcpy(str3[t].str2,m_shi);t++;}
else
{t=1;strcpy(str3[t].str2,m_shi);t++;}
m_shi="";
i=0;
UpdateData(FALSE);
OperatorPressed=true;
}
void CMyDlg::OnJiecehg() //n的階乘
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if(h==0)
{ Error(11);return;}
m_shi=m_strResult;
m_shi+="!";
if(k==2||k==8||k==16)
{
strcpy (str1,m_strResult);
n1=qitazhuanshi(str1, k);
}
else
n1=atof(m_strResult);
int b;
double sum=n1;
if(n1<0||fmod(n1,floor(n1))!=0)
{Error(9);return;}
else
if(n1==0)
{
n1=1;
m_strResult.Format("%.0f",n1);
}
else
{for(b=1;n1>1;n1--)
sum*=(n1-1);
if(k==2||k==8||k==16)
shizhuanqita(sum, k);
else
m_strResult.Format("%.0f",sum);
}
m_shi+='=';
m_shi+=m_strResult;
if(t<16)
{strcpy(str3[t].str2,m_shi);t++;}
else
{t=1;strcpy(str3[t].str2,m_shi);t++;}
m_shi="";
i=0;
UpdateData(FALSE);
OperatorPressed=true;
}
void CMyDlg::OnPi() //派
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_strResult.Format("%.10f",pi);
h=1;
OperatorPressed=true;
UpdateData(FALSE);
}
void CMyDlg::OnSqr() //開平方
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if(h==0)
{ Error(11);return;}
m_shi=m_strResult;
m_shi+="Sqrt";
if(k==2||k==8||k==16)
{
strcpy (str1,m_strResult);
n1=qitazhuanshi(str1, k);
}
else
n1=atof(m_strResult);
if(n1<0)
{Error(10);return;}
else
if(k==2||k==8||k==16)
shizhuanqita(sqrt(n1), k);
else
m_strResult.Format("%.10f",sqrt(n1));
m_strResult.TrimRight('0');
m_strResult.TrimRight('.');
m_shi+='=';
m_shi+=m_strResult;
if(t<16)
{strcpy(str3[t].str2,m_shi);t++;}
else
{t=1;strcpy(str3[t].str2,m_shi);t++;}
m_shi="";
i=0;
h=1;
UpdateData(FALSE);
OperatorPressed=true;
}
double CMyDlg::qitazhuanshi(char str[], int m1)//轉化為十進制
{double sum=0.0;
int n,m=0;
int i;
double n6;
if(m1==10)
{
n6=atof(m_strResult);
m_strResult.Format("%.0f",n6);
strcpy (str,m_strResult);
}
n=strlen (str)-1;
if(m_strResult.GetAt(0)=='-') m=1;
if(m==0)
{for(i=0;n>=0;n--,i++)
{if(str[i]>='A' &&str[i]<='F')
sum+=(str[i]-'A'+10)*pow(m1,n);
else
sum+=(str[i]-'0')*pow(m1,n);
}
}
else
{for(i=1;n>=1;n--,i++)
{if(str[i]>='A' &&str[i]<='F')
sum+=(str[i]-'A'+10)*pow(m1,n-1);
else
sum+=(str[i]-'0')*pow(m1,n-1);
}
}
if(m==0)
return sum;
else
return 0-sum;
}
void CMyDlg::shizhuanqita(double p, int m2)//十進制轉為其他
{ char ch[30];
int m=0;
if(p<0) {m=1;p=0-p;}
if (m2==2||m2==8||m2==16)
{
_itoa((int)p,ch,m2);m_strResult=ch;
if(m==1) m_strResult="-"+m_strResult;
}
else
{
m_strResult.Format("%.0f",p);
if(m==1) m_strResult="-"+m_strResult;
}
}
void CMyDlg::OnXianshi() //顯示歷史記錄
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
int e,b,b2;
m_lishi="";
for(e=1;e<16&&strlen(str3[e].str2)!=0;e++)
{
b2=strlen(str3[e].str2);
m_lishi+=str3[e].str2;
if(b2<=17)
for(b=1;b<=(17-b2);b++)
m_lishi+=" ";
else
if(b2<=34)
for(b=1;b<=(34-b2);b++)
m_lishi+=" ";
else
for(b=1;b<=(51-b2);b++)
m_lishi+=" ";
}
UpdateData(FALSE);
}
void CMyDlg::OnBuxianshi() //不顯示歷史記錄
{
// TODO: Add your control notification handler code here
m_lishi="";
UpdateData(FALSE);
}
void CMyDlg::OnQingchu() //清除歷史記錄
{
// TODO: Add your control notification handler code here
int a;
m_lishi="";
char str7[50]="";
for(a=1;a<16;a++)
{
strcpy(str3[a].str2,str7);
}
t=1;
UpdateData(FALSE);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -