📄 dlglog.cpp
字号:
// Dlglog.cpp : implementation file
//
#include "stdafx.h"
#include "biao.h"
#include "Dlglog.h"
#include"fstream.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// Dlglog dialog
Dlglog::Dlglog(CWnd* pParent /*=NULL*/)
: CDialog(Dlglog::IDD, pParent)
{ //UpdateData(TRUE);
//m_j="Calculator.out";
// UpdateData(FALSE);
//{{AFX_DATA_INIT(Dlglog)
m_bids = _T("");
m_jsjg = 0.0f;
m_xianshi1 = _T("");
m_j = _T("");
//}}AFX_DATA_INIT
}
void Dlglog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(Dlglog)
DDX_Text(pDX, IDC_EDIT1, m_bids);
DDX_Text(pDX, IDC_EDIT2, m_jsjg);
DDX_Text(pDX, IDC_EDIT3, m_xianshi1);
DDX_Text(pDX, IDC_EDIT4, m_j);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(Dlglog, CDialog)
//{{AFX_MSG_MAP(Dlglog)
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// Dlglog message handlers
void Dlglog::OnButton1()
{ ab=0;
// TODO: Add your control notification handler code here
k1=0;k2=0;xu1=0;xu2=0;quan="";jian=0;
UpdateData(TRUE);
bds=m_bids;
if(bds.IsEmpty())
MessageBox("请输入表达式");
else
{
if(jiance()==0)
{
MessageBox("错误表达式输入");
}
else
{
int qz=0,j1=0;a.MakeEmpty();b.MakeEmpty();
for(int i=0;i<bds.GetLength();i++)
{
if((bds.GetAt(i)=='(')||(bds.GetAt(i)==')')||(bds.GetAt(i)=='+')||(bds.GetAt(i)=='-')||(bds.GetAt(i)=='*')||(bds.GetAt(i)=='/'))
{
if((bds.GetAt(0)=='-'&&(i==0))||((i>0)&&(bds.GetAt(i-1)=='(')&&(bds.GetAt(i)=='-')))
{
jian=1;
}
else
{
if(b.IsEmpty()==1)
{
b.Push(bds.GetAt(i));
k2=1;
quan=quan+quc1()+CString('\n');
}
else
{
int pad=0,pan1=0;
do
{
char bi=bijiao(b.Gettop(),bds.GetAt(i));
switch(bi)
{
case '<':
{
b.Push(bds.GetAt(i));
pan1=1;
k2=1;
quan=quan+quc1()+CString('\n');
}break;
case '=':
{
b.Pop();
pad=1;
k2=2;
quan=quan+quc1()+CString('\n');
}break;
case '>':
{
char js=b.Gettop();
b.Pop();
k2=2;
quan=quan+quc1()+CString('\n');
float aa1=a.Gettop();
a.Pop();
k1=2;
quan=quan+quc()+CString('\n');
float aa2=a.Gettop();
a.Pop();
k1=2;quan=quan+quc()+CString('\n');
float jieguo1=yunsuan(aa2,aa1,js);
a.Push(jieguo1);
k1=1;
quan=quan+quc()+CString('\n');
}break;
}
}
while((pad==0)&&b.IsEmpty()!=1&&pan1==0);
if(bds.GetAt(i)!=')'&&pan1==0)
{
b.Push(bds.GetAt(i));
k2=1;
quan=quan+quc1()+CString('\n');
}
}
}//字符操作if
}
else
{
qz=qz*10+zhuan(bds.GetAt(i));
if(i==bds.GetLength()-1)
{
if(jian==0)
a.Push((float)qz);
else
{
float rr=(float)qz*(-1);
a.Push(rr);
jian=0;
}
qz=0;
k1=1;
quan=quan+quc()+CString('\n');
}
else
{
if((bds.GetAt(i+1)=='(')||(bds.GetAt(i+1)==')')||(bds.GetAt(i+1)=='+')||(bds.GetAt(i+1)=='-')||(bds.GetAt(i+1)=='*')||(bds.GetAt(i+1)=='/'))
{
if(jian==0)
{
a.Push((float)qz);
}
else
{
float tt=(float)qz*(-1);
a.Push(tt);
jian=0;
}
qz=0;
k1=1;
quan=quan+quc()+CString('\n');
}
}
}//if数据操作
}//for
if(b.IsEmpty()==1)
{
}
else
{
do
{
char js1=b.Gettop();
b.Pop();
k2=2;
quan=quan+quc1()+CString('\n');
float aaa1=a.Gettop();
a.Pop();
k1=2;
quan=quan+quc()+CString('\n');
float aaa2=a.Gettop();
a.Pop();
k1=2;
quan=quan+quc()+CString('\n');
float jieguo2=yunsuan(aaa2,aaa1,js1);
a.Push(jieguo2);
k1=1;
quan=quan+quc()+CString('\n');
}
while(b.IsEmpty()!=1);
}
//else
if(ab==0)
{
float ddd=a.Gettop();
a.Pop();k1=2;quan=quan+quc()+CString('\n');
m_jsjg=ddd;
m_xianshi1=quan;
}
else
{
MessageBox("不能出现0做除数的情况");
}
UpdateData(FALSE);
}
}
du();
}
char Dlglog::bijiao(char a, char b)
{
switch(a)
{
case ')':
{
if((b==')')||(b=='('))
{return '=';}
else return '<';}break;
case '+':
{
if((b=='+')||(b=='-')||(b==')')){return '>';}
else{return '<';}
}break;
case '-':
{
if((b=='+')||(b=='-')||(b==')')){return '>';}
else{return '<';}
}break;
case '*':
{
if((b=='(')){return '<';}
else return '>';
}break;
case '/':
{
if((b=='(')){return '<';}
else return '>';
}break;
case '(':
{
if((b==')')){return '=';}
else return '<';
}break;
}
}
float Dlglog::yunsuan(float a1, float b1, char c)
{
float jieguo;
switch(c)
{
case '+':{jieguo=a1+b1;return jieguo;}break;
case '-':{jieguo=a1-b1;return jieguo;}break;
case '*':{jieguo=a1*b1;return jieguo;}break;
case '/':{if(b1==0.0){ab=1;}else{jieguo=a1/b1;return jieguo;}}break;
}
}
int Dlglog::zhuan(char x)
{
switch(x)
{ case '0':{return 0;break;}
case '1':{return 1;break;}
case '2':{return 2;break;}
case '3':{return 3;break;}
case '4':{return 4;break;}
case '5':{return 5;break;}
case '6':{return 6;break;}
case '7':{return 7;break;}
case '8':{return 8;break;}
case '9':{return 9;break;}
case '\0':{return 10;break;}
}
}
//DEL CString Dlglog::quc(Stack x1, Stack y1)
//DEL {
//DEL
//DEL }
CString Dlglog::quc()
{
CString fan="";
//CString shuzu[20];
switch(k1)
{case 1:
{
(shuzu[xu1]).Format("%f",a.Gettop());
xu1=xu1+1;
}break;
case 2:
{
xu1=xu1-1;
}break;
}
if(xu1==0)
{
fan="NULL";
}
else
{
for(int a=0;a<xu1;a++)
{
fan=fan+shuzu[a]+" ";
}//float hd=a.Gettop();
}
return fan+CString('\r');
}
CString Dlglog::quc1()
{CString fan1,bb="\t";
// char shuzu1[20];
switch(k2)
{case 1:
{
shuzu1[xu2]=b.Gettop();xu2=xu2+1;
}break;
case 2:
{
xu2=xu2-1;
}break;
}
if(xu2==0)
{
fan1="NULL";
}
else
{
for(int b=0;b<xu2;b++)
{
fan1=fan1+CString(shuzu1[b])+" ";
}//float hdd=a.Gettop();
}
return fan1+CString('\r');
}
//DEL char Dlglog::zhuanhua(float shuru)
//DEL {
//DEL int shuru1=(int)shuru;
//DEL float shuru2=(shuru-shuru1)*1000;
//DEL int shuru3=(int)shuru2/1000;
//DEL
//DEL return 'j';
//DEL
//DEL }
CString Dlglog::zhuanhua(float shuru)
{
int shuru1=(int)shuru;
float shuru2=(shuru-shuru1)*1000;
//if(shuru2==0.0){CString shuchu=
int shuru3=(int)shuru2/1000;
char shuru5=(char)shuru1;
char shuru6=(char)shuru3;
CString shuchu=CString(shuru5)+"."+CString(shuru6);
int a=9;
char b=char(a);
return shuchu;
}
int Dlglog::jiance()
{
int pand=0,pand1=0,p1=0,p2=0,p3=0,jj=0,zh=0,p0=0;
for(int zf=0;zf<bds.GetLength();zf++)
{
if(di1(bds.GetAt(zf))!=1&&di2(bds.GetAt(zf))!=1)
{
zh=1;break;
}
}
if((bds.GetLength()==1)&&(di1(bds.GetAt(0))==0))return 0;
else
{
if((bds.GetLength()==1)&&(di1(bds.GetAt(0))==1))return 1;
else
do
{
char tou=bds.GetAt(0);
char wei=bds.GetAt(bds.GetLength()-1);
char qi=bds.GetAt(jj);
char ho=bds.GetAt(jj+1);
if((di2(qi)==1)&&(di2(ho)==1))
{
if(((qi==')')&&(ho!='('))||((ho=='(')&&(qi!=')'))||(jj<bds.GetLength()&&qi=='('&&ho=='-'))
pand=1;
else
pand=0;
}
else
{pand=1;}
if(((di1(tou)==0)&&tou!='(')||((di1(wei)==0)&&wei!=')'))
{
if((tou=='-')&&(di1(bds.GetAt(1))==1))
pand1=1;
else pand1=0;////////////////////////////////
}
else pand1=1;
for(int gh=0;gh<bds.GetLength();gh++)
{
if(bds.GetAt(gh)=='(')p2=p2+1;
if(bds.GetAt(gh)==')')p3=p3+1;
}
for(int zuh=0;zuh<bds.GetLength()-1;zuh++)
{
if(((di1(bds.GetAt(zuh))==1)&&(bds.GetAt(zuh+1)=='('))||((di1(bds.GetAt(zuh+1))==1)&&(bds.GetAt(zuh)==')')))
p0=1;
}
if(pand==0||pand1==0||p2!=p3||p0==1)
{
return 0;p1=1;
}
jj++;
}
while((jj<bds.GetLength()-1)&&p1==0);
if(p1==0&&zh==0)
{
return 1;
}
else
{
return 0;
}
}
}
int Dlglog::di1(char d1)
{
int dd=0;
switch(d1)
{
case '0':dd=1;break;
case '1':dd=1;break;
case '2':dd=1;break;
case '3':dd=1;break;
case '4':dd=1;break;
case '5':dd=1;break;
case '6':dd=1;break;
case '7':dd=1;break;
case '8':dd=1;break;
case '9':dd=1;break;
}
if(dd==0)
return 0;
else
return 1;
}
int Dlglog::di2(char d2)
{int cc=0;
switch(d2)
{
case '+':cc=1;break;
case '-':cc=1;break;
case '*':cc=1;break;
case '/':cc=1;break;
case '(':cc=1;break;
case ')':cc=1;break;
}
if(cc==0)
{
return 0;
}
else
return 1;
}
void Dlglog::OnButton2()
{
// TODO: Add your control notification handler code here
CFileDialog dlg(TRUE);
if(dlg.DoModal()==IDOK);
{
str=dlg.GetPathName();
}
UpdateData(TRUE);
m_j=str;
UpdateData(FALSE);
}
void Dlglog::du()
{if(str=="")
return;
int i,j;
ofstream fout;
fout.open(str,ios::out,0);
for(i=0;i<quan.GetLength();i++)
{
fout<<quan.GetAt(i);
}
//fout.close();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -