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

📄 bbbdlg.cpp

📁 这是个源码合集
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	   {
         strcat(cstr_Buff_R_S,"\r\n");
	   }
       strcpy(m_wrongBuffer,m_myBuffer);
       strcat(cstr_Buff_R_S,m_wrongBuffer);
       m_S_P_Edit.SetSel(0,-1);
	   m_S_P_Edit.ReplaceSel(cstr_Buff_R_S); 
       //--显示段结束
	   //
	   //--显示段开始 //显示 "行附近。"
	   m_S_P_Edit.GetWindowText(cstr_Buff_R_S,MAX*LINES);
	   if ( strlen(cstr_Buff_R_S)!=0 )
	   {
         strcat(cstr_Buff_R_S,"\r\n");
	   }
       strcpy(m_wrongBuffer,"行附近。");
       strcat(cstr_Buff_R_S,m_wrongBuffer);
       m_S_P_Edit.SetSel(0,-1);
	   m_S_P_Edit.ReplaceSel(cstr_Buff_R_S); 
       //--显示段结束
	   //
       lsClose(CurEng);  //关闭逻辑服务器 
	   return;
	   }	
	}
  }
//
//////////////////////////////////////    
//  读出  询问 并载入逻辑服务器
//    
  m_G_P_Edit.GetLine(0,cstr_Buff,MAX);
 
//
//////////////////////////////////////    
//   
char temp[MAX];
char Num_temp[MAX];

  if (Num_V==0)
  //不带变量的目标,只用判断正误
  {
    strcpy(temp,"目标中没有待例化的变量");
	//--显示段开始
	m_R_P_Edit.GetWindowText(cstr_Buff_R_S,MAX*LINES);
	if ( strlen(cstr_Buff_R_S)!=0 )
	{
         strcat(cstr_Buff_R_S,"\r\n");
	}
    strcat(cstr_Buff_R_S,temp);
    m_R_P_Edit.SetSel(0,-1);
	m_R_P_Edit.ReplaceSel(cstr_Buff_R_S); 
    //--显示段结束
    strcpy(temp,"因此只检测目标的正确性");
	//--显示段开始
	m_R_P_Edit.GetWindowText(cstr_Buff_R_S,MAX*LINES);
	if ( strlen(cstr_Buff_R_S)!=0 )
	{
         strcat(cstr_Buff_R_S,"\r\n");
	}
    strcat(cstr_Buff_R_S,temp);
    m_R_P_Edit.SetSel(0,-1);
	m_R_P_Edit.ReplaceSel(cstr_Buff_R_S); 
    //--显示段结束
    tf=lsExecStr(CurEng,&t,cstr_Buff);
    if(tf==TRUE)
	{
	  strcpy(temp,"目标正确");
	}
    else
	{
      if(tf==FALSE)
	  {
	    strcpy(temp,"目标错误");
	  }
	  else
	  {
	    strcpy(temp,"与逻辑服务器连接错误");
	  }
	}
    //--显示段开始
	m_R_P_Edit.GetWindowText(cstr_Buff_R_S,MAX*LINES);
	if ( strlen(cstr_Buff_R_S)!=0 )
	{
         strcat(cstr_Buff_R_S,"\r\n");
	}
    strcat(cstr_Buff_R_S,temp);
    m_R_P_Edit.SetSel(0,-1);
	m_R_P_Edit.ReplaceSel(cstr_Buff_R_S); 
    //--显示段结束

  }
  else
  //带变量的目标,要返回变量的值
  {
      itoa(Num_V,Num_temp,10);
      strcpy(temp,"目标中有");
	  strcat(temp,Num_temp);
      strcat(temp,"个待例化的变量!");
	  //--显示段开始
	  m_R_P_Edit.GetWindowText(cstr_Buff_R_S,MAX*LINES);
	  if ( strlen(cstr_Buff_R_S)!=0 )
	  {
         strcat(cstr_Buff_R_S,"\r\n");
	  }
      strcat(cstr_Buff_R_S,temp);
      m_R_P_Edit.SetSel(0,-1);
	  m_R_P_Edit.ReplaceSel(cstr_Buff_R_S); 
      //--显示段结束
    tf=lsCallStr(CurEng,&t,cstr_Buff);
	int R_N=0;
    while(tf)
    {	
		R_N++;
        itoa(R_N,Num_temp,10);
        strcpy(temp,"第");
	    strcat(temp,Num_temp);
        strcat(temp,"组解为:\n");
	    //--显示段开始
	    m_R_P_Edit.GetWindowText(cstr_Buff_R_S,MAX*LINES);
	    if ( strlen(cstr_Buff_R_S)!=0 )
		{
           strcat(cstr_Buff_R_S,"\r\n");
		}
        strcat(cstr_Buff_R_S,temp);
        m_R_P_Edit.SetSel(0,-1);
	    m_R_P_Edit.ReplaceSel(cstr_Buff_R_S); 
        //--显示段结束
		for(i=1;i<=Num_V;i++)
		{
          lsGetArg(CurEng,t, i, cSTR,cstr_Buff);
		  //--显示段开始
		  m_R_P_Edit.GetWindowText(cstr_Buff_R_S,MAX*LINES);
	      if ( strlen(cstr_Buff_R_S)!=0 )
		  {
             strcat(cstr_Buff_R_S,"\r\n");
		  }
          strcat(cstr_Buff_R_S,cstr_Buff);
          m_R_P_Edit.SetSel(0,-1);
	      m_R_P_Edit.ReplaceSel(cstr_Buff_R_S); 
          //--显示段结束
		}

		tf=lsRedo(CurEng);
	}
    //////////////////////////////////////////////////////////////////
    //为无解的情况作出提示
    if(R_N==0)
	{
        //--显示段开始
	    m_R_P_Edit.GetWindowText(cstr_Buff_R_S,MAX*LINES);
	    if ( strlen(cstr_Buff_R_S)!=0 )
		{
           strcat(cstr_Buff_R_S,"\r\n");
		}
        strcat(cstr_Buff_R_S,"但该变量无解!");
        m_R_P_Edit.SetSel(0,-1);
	    m_R_P_Edit.ReplaceSel(cstr_Buff_R_S); 
        //--显示段结束
	}
  }

/////////////////////////////////////////////////////////////////////////////
  // 结论部分输出完毕,现在读出记号
  //

  // 原有的Flag_P中为  谓词名+(+f 故先要进行处理
  delete_one(Flag_P,'f');
  add_one(Flag_P,'X');
  add_one(Flag_P,')');
  add_one(Flag_P,'.');
  // AfxMessageBox(Flag_P);
  int tt;
  int f_l[LINES];
  for(tt=0;tt<LINES;tt++)
  {
    f_l[tt]=0;
  }
  tf=lsCallStr(CurEng,&t,Flag_P);
  tt=0;
  while(tf)
  {
   lsGetArg(CurEng,t, 1, cSTR,cstr_Buff);
   //AfxMessageBox(cstr_Buff);
   cut_first(cstr_Buff);
   f_l[atoi(cstr_Buff)]=1;
   tf=lsRedo(CurEng);
  }
  lsClose(CurEng);  //关闭逻辑服务器
  //
/////////////////////////////////////////////////////////////////////////////
  // 根据读出的记号 输出搜索路径
  //    
        char buff_flag[MAX];
	    //
	    //--显示段开始 //显示 "做出该结论所用到的规则有:"
	    m_S_P_Edit.GetWindowText(cstr_Buff_R_S,MAX*LINES);
	    if ( strlen(cstr_Buff_R_S)!=0 )
		{
           strcat(cstr_Buff_R_S,"\r\n");
		}
        strcpy(buff_flag,"做出该结论所用到的规则有:");
        strcat(cstr_Buff_R_S,buff_flag);
        m_S_P_Edit.SetSel(0,-1);
	    m_S_P_Edit.ReplaceSel(cstr_Buff_R_S); 
        //--显示段结束
  nLineCount = m_RF_P_Edit.GetLineCount();
  for (i=0;i < nLineCount;i++)
  {
    if(f_l[i]==1)
	{
	   j=0;
       m_RF_P_Edit.GetLine(i,cstr_Buff,MAX);
       for(j=0;j<m_RF_P_Edit.LineLength(m_RF_P_Edit.LineIndex(i));j++)
	   {
          m_myBuffer[j]=cstr_Buff[j];
	   } 
       m_myBuffer[j]='\0';
	   //AfxMessageBox(m_myBuffer);
        //
	    //--显示段开始 //显示 m_myBuffer
	    m_S_P_Edit.GetWindowText(cstr_Buff_R_S,MAX*LINES);
	    if ( strlen(cstr_Buff_R_S)!=0 )
		{
           strcat(cstr_Buff_R_S,"\r\n");
		}
        strcpy(buff_flag,m_myBuffer);
        strcat(cstr_Buff_R_S,buff_flag);
        m_S_P_Edit.SetSel(0,-1);
	    m_S_P_Edit.ReplaceSel(cstr_Buff_R_S); 
        //--显示段结束
	}
  }

}


void CBBBDlg::OnButtonRfPCls() 
{
	// TODO: Add your control notification handler code here
	m_RF_P_Edit.SetSel(0,-1);
	m_RF_P_Edit.ReplaceSel("");
}


void CBBBDlg::OnButtonInRf() 
{
	//导入规则

  //
  //确认原先的规则内容为空
  ////////////////////////
  //
	char cstr_Test_RF_P[MAX*LINES];
	m_RF_P_Edit.GetWindowText(cstr_Test_RF_P,MAX*LINES);
	if(strlen(cstr_Test_RF_P)!=0 )
	{
		AfxMessageBox("在导入规则之前,请先清空已有的!如果需要保存它们,请先导出到文件!");
		return;
	}
  //
  //////////////////////////////////////////////////////////
  //
	static char BASED_CODE szFilterMIDI[]="Prolog规则文件(*.pro)|*.pro||";
	CFileDialog fileopenbox(TRUE,"专家系统文件",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilterMIDI);
	fileopenbox.m_ofn.lpstrTitle="导入Prolog规则文件";
	if(fileopenbox.DoModal()!=IDOK){
		return;
	}
    CString tempName = fileopenbox.GetPathName();
    CFile f;
	if (f.Open(tempName,CFile::modeRead))
	{
      f.Read(cstr_Test_RF_P,MAX*LINES);
	  //
	  char *m_myBuffer;
      m_myBuffer = new char[strlen(cstr_Test_RF_P)+1];
      int i;
	  for(i=0;i<f.GetLength();i++)
	  {
	   m_myBuffer[i]=cstr_Test_RF_P[i];
	  }
      m_myBuffer[i]='\0';
	  //
      m_RF_P_Edit.SetSel(0,-1);
      m_RF_P_Edit.ReplaceSel(m_myBuffer);
	  f.Close();
	}
	else
	{
      AfxMessageBox("Prolog规则文件打开失败!");
	}
	
}

void CBBBDlg::OnButtonOutRf() 
{
    //导出规则

	//
	//确认导出的规则内容不能为空
////////////////////////	
	char cstr_Test_RF_P[MAX*LINES];
	m_RF_P_Edit.GetWindowText(cstr_Test_RF_P,MAX*LINES);
	if(strlen(cstr_Test_RF_P)==0 )
	{
		AfxMessageBox("你要导出的规则为空,请确认!");
		return;
	}
/////////////////////////////////

	//
    //用对话框传入文件名
////////////////////////////////
	static char BASED_CODE szFilterMIDI[]="Prolog规则文件(*.pro)|*.pro||";
	CFileDialog filesavebox(FALSE,"专家系统文件",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilterMIDI);
	filesavebox.m_ofn.lpstrTitle="导出Prolog规则文件,保存为:";
	if(filesavebox.DoModal()!=IDOK){
		return;
	}

///////////////////////////
    CString tempName = filesavebox.GetPathName();
	CFile f;

	if (f.Open(tempName,CFile::modeWrite | CFile::modeCreate))
	{
		char endline[2]={13,10};
		CString blank;
		m_RF_P_Edit.GetWindowText(cstr_Test_RF_P,MAX*LINES);
        f.Write(cstr_Test_RF_P,strlen(cstr_Test_RF_P));
		f.Close();	
	}    
} 

/////////////////////////////////////////////////////////////////////////
void CBBBDlg::OnButtonInG() 
{
	// TODO: Add your control notification handler code here
	//
  //确认原先的内容为空
  ////////////////////////
  //
	char cstr_Test_G_P[MAX*LINES];
	m_G_P_Edit.GetWindowText(cstr_Test_G_P,MAX*LINES);
	if(strlen(cstr_Test_G_P)!=0 )
	{
		AfxMessageBox("在导入目标之前,请先清空已有的!如果需要保存它们,请先导出到文件!");
		return;
	}
  //
  //////////////////////////////////////////////////////////
  //
	static char BASED_CODE szFilterMIDI[]="Prolog目标文件(*.pro)|*.pro||";
	CFileDialog fileopenbox(TRUE,"专家系统文件",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilterMIDI);
	fileopenbox.m_ofn.lpstrTitle="导入Prolog目标文件";
	if(fileopenbox.DoModal()!=IDOK){
		return;
	}
    CString tempName = fileopenbox.GetPathName();
    CFile f;
	if (f.Open(tempName,CFile::modeRead))
	{
      f.Read(cstr_Test_G_P,MAX*LINES);
	  //
	  char *m_myBuffer;
      m_myBuffer = new char[strlen(cstr_Test_G_P)+1];
      int i;
	  for(i=0;i<f.GetLength();i++)
	  {
	   m_myBuffer[i]=cstr_Test_G_P[i];
	  }
      m_myBuffer[i]='\0';
	  //
      m_G_P_Edit.SetSel(0,-1);
      m_G_P_Edit.ReplaceSel(m_myBuffer);
	  f.Close();
	}
	else
	{
      AfxMessageBox("文件打开失败!");
	}
}

/////////////////////////////////////////////////////////////////////////

void CBBBDlg::OnButtonOutG() 
{
	// TODO: Add your control notification handler code here
		//
	//确认导出的内容不能为空
////////////////////////	
	char cstr_Test_G_P[MAX*LINES];
	m_G_P_Edit.GetWindowText(cstr_Test_G_P,MAX*LINES);
	if(strlen(cstr_Test_G_P)==0 )
	{
		AfxMessageBox("你要导出的规则与事实为空,请确认!");
		return;
	}
/////////////////////////////////

	//
    //用对话框传入文件名
////////////////////////////////
	static char BASED_CODE szFilterMIDI[]="Prolog规则事实文件(*.pro)|*.pro||";
	CFileDialog filesavebox(FALSE,"专家系统文件",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilterMIDI);
	filesavebox.m_ofn.lpstrTitle="导出Prolog规则事实文件,保存为:";
	if(filesavebox.DoModal()!=IDOK){
		return;
	}

///////////////////////////
    CString tempName = filesavebox.GetPathName();
	CFile f;

	if (f.Open(tempName,CFile::modeWrite | CFile::modeCreate))
	{
		char endline[2]={13,10};
		CString blank;
		m_G_P_Edit.GetWindowText(cstr_Test_G_P,MAX*LINES);
        f.Write(cstr_Test_G_P,strlen(cstr_Test_G_P));
		f.Close();	
	}
}

void CBBBDlg::OnButtonGPCls() 
{
	// TODO: Add your control notification handler code here
	m_G_P_Edit.SetSel(0,-1);
	m_G_P_Edit.ReplaceSel("");
}

void CBBBDlg::OnButtonTestGoalSyn() 
{
	// TODO: Add your control notification handler code here
//
//清空状态栏中的过时信息
////////////////////////
//   
	m_S_P_Edit.SetSel(0,-1);
	m_S_P_Edit.ReplaceSel("");
//
//相关的全局变量的初始化
////////////////////////
// 
Num_V=0;
Syn_Key=true;
strcpy(m_error_temp,"");
//------------------------------------
  //确认目标的内容不为空
  ////////////////////////
  //
	char cstr_Test_G_P[MAX*LINES];
    m_G_P_Edit.GetWindowText(cstr_Test_G_P,MAX*LINES);
	if(strlen(cstr_Test_G_P)==0 )
	{
		AfxMessageBox("要想检测目标的语法,请先添加目标!");
		return;
	}
  //
//////////////////////////////////////////////////////////////////////
//
//词法分析部分:
//////////////////////////////////////////////////////////////////////
    CString tempName ="Test_G_Syn_In.dat";
	CFile f;

	if (f.Open(tempName,CFile::modeWrite | CFile::modeCreate))
	{
		char endline[2]={13,10};
		CString blank;
		m_G_P_Edit.GetWindowText(cstr_Test_G_P,MAX*LINES);
        f.Write(cstr_Test_G_P,strlen(cstr_Test_G_P));
		f.Close();	
	}
	//
	///////
	//
	FILE *f1,*f2;
	if((f1=fopen("Test_G_Syn_In.dat","r"))==NULL)
	{
        AfxMessageBox("不能打开输入文件!Test_G_Syn_In.dat");
	    return;
	}
	if((f2=fopen("Test_G_Syn_Out.dat","w"))==NULL)
	{
        AfxMessageBox("不能打开输出文件!Test_G_Syn_Out.dat");
	    return;
	}	
    ofstream onfile;
    onfile.open("Test_G_Syn_Out.dat");
    Syn_Lines=0;
    while(fgets(buff,BY_MAX_BUFF_LENTH,f1)!=NULL)
    {
      I=0;
      while(I<=strlen(buff)-1)
	  {
        Get_A_Word(onfile);
	  }
	}
    fclose(f1); 
	fclose(f2);
    onfile.close();
//  AfxMessageBox("词法分析部分结束");
//////////////////////////////////////////////////////////////////////
//
//语法分析部分:
//////////////////////////////////////////////////////////////////////
//
	//语法分析器中的输入文件流
    ifstream infile("Test_G_Syn_Out.dat",ios::in|ios::nocreate);
	if (!infile)
	{
	  AfxMessageBox("不能打开输入文件!Test_G_Syn_Out.dat");
	  return;
	}
    int kk;
	Code_I=0;
    for(kk=1;kk<=Syn_Lines;kk++)
	{  
      infile>>Code_F[Code_I];
      infile>>buff;
      Code_I++;
	}
    infile.close();
//
////////
//
    Code_I=0;
    quest();

⌨️ 快捷键说明

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