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

📄 code.txt

📁 利用Visual c++编程思想方法实现基于图书编码分类算法的程序
💻 TXT
字号:
HCURSOR CAsDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CAsDlg::sift_press(HEAPSORT *p[], int k, int i, int l)
{
	int m,n;
     char *t;
     HEAPSORT *w;
     t=(*p[i+k]).press;w=p[i+k];n=2*(i+1)-1;m=i;
     while(n<=l-1)
     {
       if((n<l-1)&&(strcmp((*p[n+k]).press,(*p[n+k+1]).press)<0))
        n=n+1;
        if(strcmp(t,(*p[n+k]).press)<0)
        {
           p[m+k]=p[n+k];
           m=n;n=2*(m+1)-1;
         } 
         else n=l;
     }
    p[m+k]=w;
    return;
}

void CAsDlg::sift_unknow(HEAPSORT *p[], int k, int i, int l)
{
	int m,n;
	char *t;
	HEAPSORT *w;
	t=(*p[i+k]).unknow;w=p[i+k];n=2*(i+1)-1;m=i;
	while(n<=l-1)
	{
		if((n<l-1)&&(strcmp((*p[n+k]).unknow,(*p[n+k+1]).unknow)<0))
			n=n+1;
        if(strcmp(t,(*p[n+k]).unknow)<0)
        {
			p[m+k]=p[n+k];
			m=n;n=2*(m+1)-1;
		} 
		else n=l;
	}
    p[m+k]=w;
    return;
}

void CAsDlg::sift_kind(HEAPSORT *p[], int k, int i, int l)
{
	int m,n;
	char *t;
	HEAPSORT *w;
	t=(*p[i+k]).kind;w=p[i+k];n=2*(i+1)-1;m=i;
	while(n<=l-1)
	{
		if((n<l-1)&&(strcmp((*p[n+k]).kind,(*p[n+k+1]).kind)<0))
			n=n+1;
        if(strcmp(t,(*p[n+k]).kind)<0)
        {
			p[m+k]=p[n+k];
			m=n;n=2*(m+1)-1;
		} 
		else n=l;
	}
    p[m+k]=w;
    return;
}

void CAsDlg::mtheap(HEAPSORT *p[], int n, int k, int m, void (*sift)(HEAPSORT *p[], int k, int i, int l))
{
	int i,l;
   HEAPSORT *w;
   if(k<0) k=0;
   if(m>n-1) m=n-1;
    l=m-k+1;
    for(i=l/2-1;i>=0;i--)
      (*sift)(p,k,i,l);
    for(i=l-1;i>=1;i--)
    {
     w=p[k];p[k]=p[i+k];p[i+k]=w;
     (*sift)(p,k,0,i);
     }
   return;
}

void CAsDlg::OnBtStart() 
{
	// TODO: Add your control notification handler code here
	int nCount = m_List1.GetItemCount();
	if (nCount <= 0)
	{
		return;
	}
	if (pStru != NULL)
	{
		delete [] pStru;
		pStru = NULL;
	}
	pStru = new HEAPSORT[nCount];
	memset(pStru, 0, sizeof(HEAPSORT) * nCount);
	int nIndex = 0;
	CString str;
	while (nIndex < nCount)
	{
		str = m_List1.GetItemText(nIndex, 0);
		strncpy(pStru[nIndex].press, str, 11);
		str = m_List1.GetItemText(nIndex, 1);
		strncpy(pStru[nIndex].unknow, str, 11);
		str = m_List1.GetItemText(nIndex, 2);
		strncpy(pStru[nIndex].kind, str, 11);
		nIndex += 1;
	}

	switch(m_select.GetCurSel())
	{
	case 0:
		press(nCount);
		break;
	case 1:
		unknow(nCount);
		break;
	case 2:
		kind(nCount);
		break;
	}
	nIndex = 0;
	nCount = m_List2.GetItemCount();
	while (nIndex < nCount)
	{
		if (m_List2.GetItemText(nIndex, 0) == newStru.press &&
			m_List2.GetItemText(nIndex, 1) == newStru.unknow &&
			m_List2.GetItemText(nIndex, 2) == newStru.kind)
		{
			break;
		}
		nIndex += 1;
	}
	nIndex = nIndex % nCount;
//	m_List2.SetSelectionMark(4);
	m_List2.SetHotItem(nIndex);
}

void CAsDlg::OnBtReadData() 
{
	// TODO: Add your control notification handler code here
	CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "文本文件(*.txt) |*.txt||",NULL);
	if (dlg.DoModal() == IDOK)
	{
		m_List1.DeleteAllItems();
		FILE *fp;
		char buf[1024] = {0};
		CString str;
		int nIndex = 0;
		if ((fp = fopen(dlg.m_ofn.lpstrFile,"r")) == NULL)
		{
			str.Format("打不开文件%s", dlg.m_ofn.lpstrFile);
			MessageBox(str, "提示", MB_OK | MB_ICONWARNING);
		}
		else 
		{
			while (feof(fp) == 0)
			{
				fgets(buf, 1023, fp);
				str = buf;
				str.TrimLeft();
				str.TrimRight();
				m_List1.InsertItem(nIndex, str.Left(str.Find(" ")));
				str.Delete(0, str.Find(" "));
				str.TrimLeft();
				str.TrimRight();
				m_List1.SetItemText(nIndex, 1, str.Left(str.Find(" ")));
				str.Delete(0, str.Find(" "));
				str.TrimLeft();
				str.TrimRight();
				m_List1.SetItemText(nIndex, 2, str);
				nIndex+=1;
			}
			fclose(fp);
		}
	}
}

void CAsDlg::press(int nCount)
{
	m_List2.DeleteAllItems();
	HEAPSORT **p = new HEAPSORT*[nCount];
	for (int i =0; i < nCount; i++)
		p[i] = &pStru[i];
	mtheap(p,nCount,0,nCount-1, sift_press);
	i = 0;
	int nIndex = 0;
	while (i < nCount)
	{
		m_List2.InsertItem(nIndex, p[i]->press);
		m_List2.SetItemText(nIndex, 1, p[i]->unknow);
		m_List2.SetItemText(nIndex, 2, p[i]->kind);
		nIndex += 1;
		if (i < nCount-1 && strcmp(p[i]->press, p[i+1]->press) != 0)
		{
			m_List2.InsertItem(nIndex, "");
			nIndex += 1;
		}
		i += 1;	
	}
	delete [] p;
}

void CAsDlg::unknow(int nCount)
{
	m_List2.DeleteAllItems();
	HEAPSORT **p = new HEAPSORT*[nCount];
	for (int i =0; i < nCount; i++)
		p[i] = &pStru[i];
	mtheap(p,nCount,0,nCount-1, sift_unknow);
	i = 0;
	int nIndex = 0;
	while (i < nCount)
	{
		m_List2.InsertItem(nIndex, p[i]->press);
		m_List2.SetItemText(nIndex, 1, p[i]->unknow);
		m_List2.SetItemText(nIndex, 2, p[i]->kind);
		nIndex += 1;
		if (i < nCount-1 && strcmp(p[i]->unknow, p[i+1]->unknow) != 0)
		{
			m_List2.InsertItem(nIndex, "");
			nIndex += 1;
		}
		i += 1;	
	}
	delete [] p;
}

void CAsDlg::kind(int nCount)
{
	m_List2.DeleteAllItems();
	HEAPSORT **p = new HEAPSORT*[nCount];
	for (int i =0; i < nCount; i++)
		p[i] = &pStru[i];
	mtheap(p,nCount,0,nCount-1, sift_kind);
	i = 0;
	int nIndex = 0;
	while (i < nCount)
	{
		m_List2.InsertItem(nIndex, p[i]->press);
		m_List2.SetItemText(nIndex, 1, p[i]->unknow);
		m_List2.SetItemText(nIndex, 2, p[i]->kind);
		nIndex += 1;
		if (i < nCount-1 && strcmp(p[i]->kind, p[i+1]->kind) != 0)
		{
			m_List2.InsertItem(nIndex, "");
			nIndex += 1;
		}
		i += 1;	
	}
	delete [] p;
}

void CAsDlg::OnOK() 
{
	// TODO: Add extra validation here
	if (pStru != NULL)
	{
		delete [] pStru;
	}
	CDialog::OnOK();
}

BOOL CAsDlg::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	if (pMsg->message == WM_KEYDOWN)
	{
		if (pMsg->wParam == VK_ESCAPE)
		{
			return TRUE;
		}
		else if (pMsg->wParam == VK_RETURN)
		{
			switch(nEnter)
			{
			case 1:
				m_code2.SetFocus(); break;
			case 2:
				m_code3.SetFocus(); break;
			case 3:
				UpdateData();
				int nIndex = 0;
				memset(&newStru, 0, sizeof(HEAPSORT));
				m_List1.InsertItem(nIndex, m_strCode1);
				m_List1.SetItemText(nIndex, 1, m_strCode2);
				m_List1.SetItemText(nIndex, 2, m_strCode3);
				strcpy(newStru.press, m_strCode1);
				strcpy(newStru.unknow, m_strCode2);
				strcpy(newStru.kind, m_strCode3);
				GetDlgItem(IDC_BT_START)->SetFocus();
				break;
			}
			nEnter += 1;
			return TRUE;
		}
	}
	return CDialog::PreTranslateMessage(pMsg);
}

void CAsDlg::OnSetfocusCode1() 
{
	// TODO: Add your control notification handler code here
	nEnter = 1;
	m_code1.SetWindowText("");
	m_code2.SetWindowText("");
	m_code3.SetWindowText("");
}

⌨️ 快捷键说明

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