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

📄 detreesvmdlg.cpp

📁 网页分类器
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		else
		{
			f.Close();//关闭

			m_progress.SetRange(0,80);
			m_progress.SetPos(0);
			m_strText = "测试中...";
			UpdateData(FALSE);

			int j=0;
			int nTemp1[KINDNUMBER]={0,0,0,0};
			for(int i=0; i<KINDNUMBER+1; i++)//将数据转存进行运算
			{
				nTemp[i] = nKindNumber[i];
			}
			while(nTemp[0] != 0)
			{
				int max=0;//临时变量
				int index=0;
				//找出样本数量最多的类别
				for(int i=1;i<=4;i++)
				{
					if(max<nTemp[i])
					{
						max=nTemp[i];
						index=i;
					}
				}
				nTemp[index]=0;
				nTemp1[j]=index;
				j++;
				nTemp[0]--;
			}

			CTest test( nKindNumber[0], nVectorItemNumber,nTemp1 );//创建一个对象

			if( test.Testing() )//测试完成
			{
				m_strText = "测试完毕!";
				UpdateData(FALSE);
				m_progress.SetPos(0);
				AfxMessageBox("测试完毕!",MB_OK);
				//设置按钮状态
				m_Button_Display.EnableWindow(TRUE);
				m_Button_Eva.EnableWindow(TRUE);
			}

			else//测试出错
			{	
				m_strText = "没有成功进行测试!";
				UpdateData(FALSE);
			}
		}
	}
	
}

/********************************************************************
       // 创建日期   :  2008-5-19 16:32:33
	   // 作    者	  : 祝美莲<zml123818@163.com> 
       // 函数名称	  : CDeTreeSVMDlg::OnButtonEva
       // 函数功能	  : 评测分类系统的性能
       // 返回类型	  : void 
********************************************************************/
void CDeTreeSVMDlg::OnButtonEva() 
{
	// TODO: Add your control notification handler code here
	CString strNameResult;
	strNameResult = "\\result.txt";
	strNameResult = pPath+strNameResult;
	CFileFind f;
	BOOL bWorking=f.FindFile(strNameResult);
	if(!bWorking)//没有找到结果文件
	{		
		AfxMessageBox("没有结果文件,请先测试!",MB_ICONSTOP);
	}
	else
	{
		f.Close();
		CEvaluateDlg dlg;
		dlg.DoModal();//调用对话框
	}
}

/********************************************************************
       // 创建日期   :  2008-5-19 16:33:23
	   // 作    者	  : 祝美莲<zml123818@163.com> 
       // 函数名称	  : CDeTreeSVMDlg::DeletePage
       // 函数功能	  : 删除网页
       // 返回类型	  : void 
       // 函数参数	  : int k
       // 函数参数	  : int nNumber
********************************************************************/
void CDeTreeSVMDlg::DeletePage(int k,int nNumber) 
{
	int a;//临时变量
	//找到类别为 k 的第一个网页

	int i=0;
	while(k != Page[i].GetType())
	{
		i++;
	}
	a = i;
	
	//将该类网页删除
	for(i=a;i<nPageNumber;i++)
	{
		if((i+nNumber) <= nPageNumber)
			Page[i] = Page[i+nNumber];
		else 
			return;
	}
}

/********************************************************************
       // 创建日期   :  2008-5-19 16:33:45
	   // 作    者	  : 祝美莲<zml123818@163.com> 
       // 函数名称	  : CDeTreeSVMDlg::OnDblclkTree
       // 函数功能	  : 双击树形控件的响应函数
       // 返回类型	  : void 
       // 函数参数	  : NMHDR* pNMHDR
       // 函数参数	  : LRESULT* pResult
********************************************************************/
void CDeTreeSVMDlg::OnDblclkTree(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	CString str;
	
	//删除列表中原先的显示的所有数据 以及表头信息
	
	m_listCtrl.DeleteAllItems();
	int nHeadNum = m_listCtrl.GetHeaderCtrl()->GetItemCount();
	for(int i=nHeadNum-1;i>=0;i--)
		m_listCtrl.DeleteColumn(i);

	//重写表头
	m_listCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
	m_listCtrl.InsertColumn(0,"名称",LVCFMT_IMAGE|LVCFMT_LEFT);
	m_listCtrl.InsertColumn(1,"类别",LVCFMT_CENTER);
	m_listCtrl.InsertColumn(2,"存放地址",LVCFMT_LEFT);

	//设置行高
	CImageList   m_l;   
	m_l.Create(1,15,TRUE|ILC_COLOR32,1,0);   
	m_listCtrl.SetImageList(&m_l,LVSIL_SMALL);  

	//设置列表各列的宽度
	m_listCtrl.SetColumnWidth(0,80);
	m_listCtrl.SetColumnWidth(1,80);
	m_listCtrl.SetColumnWidth(2,135);

	//得到双击的条目
	HTREEITEM hItem = m_TreeCtrl.GetSelectedItem();
	str = m_TreeCtrl.GetItemText(hItem);

	//得到完整路径
	char pBuf[MAX_PATH];//存放路径的变量
	strcpy(pBuf,pPath);
	strcat(pBuf,"\\结果文件夹\\");
	//判断选中的条目,将文件拷贝到结果文件夹对应的地方
	if( str == "01教育类" )
	{
		strcat(pBuf,"1类网页");
		FindFiles(pBuf);
	}

	else if( str == "02娱乐类" )
	{
		strcat(pBuf,"2类网页");
		FindFiles(pBuf);
	}

	else if( str == "03时尚类" )
	{
		strcat(pBuf,"3类网页");
		FindFiles(pBuf);
	}

	else if( str == "04计算机类" )
	{
		strcat(pBuf,"4类网页");
		FindFiles(pBuf);
	}
		
	*pResult = 0;
}

/********************************************************************
       // 创建日期   :  2008-5-19 16:36:28
	   // 作    者	  : 祝美莲<zml123818@163.com> 
       // 函数名称	  : CDeTreeSVMDlg::FindFiles
       // 函数功能	  : 查找文件
       // 返回类型	  : void 
       // 函数参数	  : CString strPathName
********************************************************************/
void CDeTreeSVMDlg::FindFiles(CString strPathName)
{
	//定义相关变量
	int				i = 0;
	CFileFind		finder;   
	
	BOOL bWorking = finder.FindFile(strPathName+"\\*.*");//判断是否已经寻找完所有文件
    
	//通过递归的方式查询文件夹中的内容,这是因为有的文件夹中还
	//包含子文件夹
	while( bWorking )   
	{		  
		bWorking = finder.FindNextFile();  

		//是文件夹,跳过
		if(finder.IsDots())   
		{   
			continue;   
		}
		//子文件夹,递归查找
		else if(finder.IsDirectory())   
		{  
			FindFiles(finder.GetFilePath());   
		}   
		//查找到的就是文件
		else     
		{   
			//定义相关变量
			CString		strPath;//文件路径   
			CString		strFileName;//文件名
			CString		strType;//网页类别

			//得到文件名,文件大小以及路径
			strFileName = finder.GetFileName();
			strPath = strPathName+"\\"+finder.GetFileName();

			//获取网页的类别
			int nPos;   
			nPos = strPathName.ReverseFind('\\');  
			if( nPos == -1 )
				nPos = strPathName.ReverseFind('/');
			strType = strPathName.Right(strPathName.GetLength() - nPos - 1);
			//插入行
			m_listCtrl.InsertItem(i,strFileName);//文件名
			m_listCtrl.SetItemText(i,1,strType);//网页类别
			m_listCtrl.SetItemText(i++,2,strPath);//路径
		}   
	}
	
	finder.Close(); //关闭设备
}


/********************************************************************
       // 创建日期   :  2008-5-19 16:39:21
	   // 作    者	  : 祝美莲<zml123818@163.com> 
       // 函数名称	  : CDeTreeSVMDlg::OnDblclkList
       // 函数功能	  : 响应双击列表控件的函数
       // 返回类型	  : void 
       // 函数参数	  : NMHDR* pNMHDR
       // 函数参数	  : LRESULT* pResult
********************************************************************/
void CDeTreeSVMDlg::OnDblclkList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	HD_NOTIFY *phdn = (HD_NOTIFY *) pNMHDR;

	//存放文件存放的路径
	CString strNamePath;
	
	//获得表头信息
	LVCOLUMN lvcol;
	char  char1[256];
	CString str;
	lvcol.mask = LVCF_TEXT;
    lvcol.pszText = char1;
    lvcol.cchTextMax = 256;
	m_listCtrl.GetColumn(0,&lvcol);
	str=lvcol.pszText;//获得表头的第一项
	
	//表头第一项是“名称”同时选中了一个条目时,打开该网页
	if( (str=="名称") && phdn->iItem > -1)
	{
		strNamePath = m_listCtrl.GetItemText(phdn->iItem,2); 
		ShellExecute(this->m_hWnd,"open",strNamePath,NULL,NULL,SW_SHOWNORMAL); //打开文件
	}

	*pResult = 0;
}

/********************************************************************
       // 创建日期   :  2008-5-19 16:41:11
	   // 作    者	  : 祝美莲<zml123818@163.com> 
       // 函数名称	  : CDeTreeSVMDlg::GetFileNumber
       // 函数功能	  : 获得文件夹中网页的个数
       // 返回类型	  : int 
       // 函数参数	  : CString strPathName
********************************************************************/
int CDeTreeSVMDlg::GetFileNumber(CString strPathName)
{
	//定义相关变量
	int	i = 0;
	CFileFind finder;
	int nFileNumber = 0;
	
	BOOL bWorking = finder.FindFile(strPathName+"\\*.*");//判断是否已经寻找完所有文件
    
	//通过递归的方式查询文件夹中的
	while( bWorking )   
	{		  
		bWorking = finder.FindNextFile();  

		//上一级的文件夹跳过
		if(finder.IsDots())   
		{   
			continue;   
		}
		//子文件夹,递归查找
		else if(finder.IsDirectory())   
		{  
			GetFileNumber(finder.GetFilePath());   
		}   
		//查找到的就是文件,统计文件数目
		else     
		{   
			nFileNumber++;
		}   
	}
	finder.Close(); 
	return nFileNumber;
}

/********************************************************************
       // 创建日期   :  2008-5-19 16:42:22
	   // 作    者	  : 祝美莲<zml123818@163.com> 
       // 函数名称	  : CDeTreeSVMDlg::OnInitDialog
       // 函数功能	  : 初始化对话框
       // 返回类型	  : BOOL 
********************************************************************/
BOOL CDeTreeSVMDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	p=this;
	// TODO: Add extra initialization here
     
	//初始化分类时间控件
	GetDlgItem(IDC_STATIC_TIME)->SetWindowText("");
	GetDlgItem(IDC_STATIC_TEXT)->SetWindowText("欢迎使用!!");
	//变量初始化
	nPageNumber = 0;
	nVectorItemNumber = 0;
	nFlag=0;
	nFlag1=0;

	for( int i = 0; i < KINDNUMBER + 1; i++ )
	{
		nKindNumber[i] = 0;
		nTemp[i] = 0;
	}

	for( i = 0; i < VECTORITEMNUMBER; i++ )
	{
		nTNumber[i] = 0;
	}

	// TODO: Add extra initialization here
	//设置按钮状态
	m_Button_Train.EnableWindow(FALSE);
	
	//如果向量模型已经存在,可以直接进行测试
	CString strModName;
	strModName = pPath;
	strModName = strModName + "\\向量机模型";
	CFileFind f;
	if( !f.FindFile(strModName)  )
	{
		m_Button_Test.EnableWindow(FALSE);
	}
	
	//如果结果文件夹存在,可以直接显示结果
	CString strResultName;
	strResultName = pPath;
	strResultName = strResultName + "\\结果文件夹";

	if(!f.FindFile(strResultName))
	{
		m_Button_Display.EnableWindow(FALSE);
	}
	f.Close();

	//如果结果文件“result.txt”存在,可以直接评测分类结果
	strResultName = pPath;
	strResultName = strResultName + "\\result.txt";

	if(!f.FindFile(strResultName))
	{
		m_Button_Eva.EnableWindow(FALSE);
	}

	f.Close();//关闭设备
	
	//初始化树控件
	HTREEITEM hItem = m_TreeCtrl.InsertItem(_T("所有类别"),0,1);
	m_TreeCtrl.InsertItem(_T("01教育类"),0,1,hItem,TVI_LAST);
	m_TreeCtrl.InsertItem(_T("02娱乐类"),0,1,hItem,TVI_LAST);
	m_TreeCtrl.InsertItem(_T("03时尚类"),0,1,hItem,TVI_LAST);
	m_TreeCtrl.InsertItem(_T("04计算机类"),0,1,hItem,TVI_LAST);
	
	//初始化列表控件
	m_listCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
	m_listCtrl.EnableTips();
	m_listCtrl.InsertColumn(0,"网页类别",LVCFMT_IMAGE|LVCFMT_CENTER);
	m_listCtrl.SetColumnWidth(0,155);
    m_listCtrl.InsertColumn(1," 网页数目统计",LVCFMT_CENTER);
	m_listCtrl.SetColumnWidth(1,160);

	//提示的功能实现
	 m_pToolTip = new CToolTipCtrl;
	 m_pToolTip->Create(this);
	 m_pToolTip->AddTool(GetDlgItem(IDC_BUTTON_READTRAINSET),_T("读取训练集,也可以直接用默认训练集打开!"));
	 m_pToolTip->AddTool(GetDlgItem(IDC_BUTTON_TRAIN),_T("训练得到支持向量"));
	 m_pToolTip->AddTool(GetDlgItem(IDC_BUTTON_TEST),_T("测试支持向量机,判断分类结果是否正确"));
	 m_pToolTip->AddTool(GetDlgItem(IDC_BUTTON_DISPLAY),_T("显示分类结果,统计各类的网页个数"));
	 m_pToolTip->AddTool(GetDlgItem(IDC_BUTTON_EVA),_T("评测分类结果,分别用列表图形表示"));
	 m_pToolTip->Activate(TRUE);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}


/********************************************************************
       // 创建日期   :  2008-6-1 8:53:32
	   // 作    者	  : 祝美莲<zml123818@163.com> 
       // 函数名称	  : CDeTreeSVMDlg::PreTranslateMessage
       // 函数功能	  : 传递消息
       // 返回类型	  : BOOL 
       // 函数参数	  : MSG* pMsg
********************************************************************/
BOOL CDeTreeSVMDlg::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	if(m_pToolTip)
	{
		m_pToolTip->RelayEvent(pMsg);//显示提示信息
	}
	return CDialog::PreTranslateMessage(pMsg);
}

⌨️ 快捷键说明

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