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

📄 sbsgl.cpp

📁 这是一套学校设备管理系统的源码 里面有树形结构使用的很棒的方法
💻 CPP
字号:
 // sbsgl.cpp : implementation file
//

#include "stdafx.h"
#include "xxgl.h"
#include "sbsgl.h"
#include "time.h"
#include "strt.h"
#include "ext.h"
#include "func.h"

#ifdef _DEBUG			
#define new DEBUG_NEW
#undef THIS_FILE	
static char THIS_FILE[] = __FILE__;
#endif

Csbsgl::Csbsgl(CWnd* pParent /*=NULL*/)
	: CDialog(Csbsgl::IDD, pParent)
{

	//{{AFX_DATA_INIT(Csbsgl)
	m_byjx = _T("");
	m_cjpp = _T("");
	m_gdbh = _T("");
	m_ghdw = _T("");
	m_jbr = _T("");
	m_jfxs = _T("");
	m_rkfs = _T("");
	m_rkn = _T("");
	m_rkr = _T("");
	m_rky = _T("");
	m_sbmc = _T("");
	m_scdm = _T("");
	m_ssbm = _T("");
	m_sxjf = _T("");
	m_wpdj = _T("");
	m_wpsl = _T("");
	m_xhgg = _T("");
	m_yqdm = _T("");
	m_zje = _T("");
	m_zjly = _T("");
	//}}AFX_DATA_INIT
}


void Csbsgl::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(Csbsgl)
	DDX_Control(pDX, IDC_xyg, m_xyg);
	DDX_Control(pDX, IDC_TREE1, m_tree);
	DDX_Text(pDX, IDC_byjx, m_byjx);
	DDX_Text(pDX, IDC_cjpp, m_cjpp);
	DDX_Text(pDX, IDC_gdbh, m_gdbh);
	DDX_Text(pDX, IDC_ghdw, m_ghdw);
	DDX_Text(pDX, IDC_jbr, m_jbr);
	DDX_Text(pDX, IDC_jfxs, m_jfxs);
	DDX_Text(pDX, IDC_rkfs, m_rkfs);
	DDX_Text(pDX, IDC_rkn, m_rkn);
	DDX_Text(pDX, IDC_rkr, m_rkr);
	DDX_Text(pDX, IDC_rky, m_rky);
	DDX_Text(pDX, IDC_sbmc, m_sbmc);
	DDX_Text(pDX, IDC_scdm, m_scdm);
	DDX_Text(pDX, IDC_ssbm, m_ssbm);
	DDX_Text(pDX, IDC_sxjf, m_sxjf);
	DDX_Text(pDX, IDC_wpdj, m_wpdj);
	DDX_Text(pDX, IDC_wpsl, m_wpsl);
	DDX_Text(pDX, IDC_xhgg, m_xhgg);
	DDX_Text(pDX, IDC_yqdm, m_yqdm);
	DDX_Text(pDX, IDC_zje, m_zje);
	DDX_Text(pDX, IDC_zjly, m_zjly);
	//}}AFX_DATA_MAP
	HTREEITEM htreeitem;
	HTREEITEM h1,h2;
	FILE *fpe;
	char e_id_buf[50],e_code_buf[50],p_id_buf[50];
	char e_name_buf[50],e_abbr_buf[50],a_id_buf[50];
	char m_un_buf[50],c_pr_buf[50];
	char id_buf[7][3];
	int i,j,k,l,n,m;
	long order;
	int flag,flag1;
	char buf1[50];
	int parent,ret;
	char buf2[10];

	if (g_come_in_flag == 0){
/*
	m_rkn = _T("");
    g_cur_sb_search_pos = 0;
    g_old_htreeitem = NULL;
	fpe = fopen("c:\\xxsbgl\\sbqk.txt","rb");
	i = 0;
	flag = 0;
	g_end_p = g_begin_p = 0;
	while (flag == 0){
	  ret = get_a_line(fpe,g_e_id[i]);
	  if (ret == -1)
		  break;
	  get_a_line(fpe,g_e_code[i]);
	  get_a_line(fpe,g_p_id[i]);
	  get_a_line(fpe,g_e_name[i]);
	  get_a_line(fpe,g_e_abbr[i]);
	  get_a_line(fpe,g_a_id[i]);
	  get_a_line(fpe,g_m_un[i]);
	  get_a_line(fpe,g_c_pr[i]);
	  get_a_line(fpe,buf2);
	  g_parent[i] = atoi(buf2);
	  if (buf2[0] != '-'){
		  if ((buf2[0] < '0')||(buf2[0] > '9'))
			  j = 0;
	  }
	  order = i;
	  if (g_parent[i] == -1)
        g_htreeitem[i] = m_tree.InsertItem(0,"",0,0,TVIS_BOLD,0xff,order,NULL,TVI_LAST);
	  else
        g_htreeitem[i] = m_tree.InsertItem(0,"",0,0,TVIS_BOLD,0xff,order,g_htreeitem[g_parent[i]],TVI_LAST);
	  m_tree.SetItemText(g_htreeitem[i],g_e_name[i]);
	  i ++;
	  if (i == 1681)
		  j = 0;
	}
    g_end_sbs = i;

*/
	end_g_id_buf = 0;
	order = 0;
	g_end_sbs = 0;
	fpe = fopen("c:\\xxsbgl\\sbqk1.txt","r");
	while (!feof(fpe)){
		memset(e_id_buf,0,50);
		memset(e_code_buf,0,50);
		memset(p_id_buf,0,50);
		memset(e_name_buf,0,50);
		memset(e_abbr_buf,0,50);
		memset(a_id_buf,0,50);
		memset(m_un_buf,0,50);
		memset(c_pr_buf,0,50);
		fgets(e_id_buf,50,fpe);
		e_id_buf[strlen(e_id_buf)-1] = 0;
		if (e_id_buf[0] == 0)
			goto end;
		fgets(e_code_buf,50,fpe);
		e_code_buf[strlen(e_code_buf)-1] = 0;
		fgets(p_id_buf,50,fpe);
		p_id_buf[strlen(p_id_buf)-1] = 0;
		fgets(e_name_buf,50,fpe);
		e_name_buf[strlen(e_name_buf)-1] = 0;
		fgets(e_abbr_buf,50,fpe);
		e_abbr_buf[strlen(e_abbr_buf)-1] = 0;
		fgets(a_id_buf,50,fpe);
		a_id_buf[strlen(a_id_buf)-1] = 0;
		fgets(m_un_buf,50,fpe);
		m_un_buf[strlen(m_un_buf)-1] = 0;
		fgets(c_pr_buf,50,fpe);
		c_pr_buf[strlen(c_pr_buf)-1] = 0;
		for (i=0;i<7;i++){
		  g_id_buf[end_g_id_buf][i][0] = id_buf[i][0] = e_id_buf[i*2];
		  g_id_buf[end_g_id_buf][i][1] = id_buf[i][1] = e_id_buf[i*2+1];
		  g_id_buf[end_g_id_buf][i][2] = id_buf[i][2] = 0;
		}
		for (i=0;i<7;i++){
			if ((id_buf[i][0] != '0')||(id_buf[i][1] != '0')){
		      flag = 0;
		      for (k=order-1;k>=0;k--){
				  flag1 = 0;
				  for (l=0;l<=i;l++){
					  if ((id_buf[l][0] != g_e_id[k][l*2])||
						  ((id_buf[l][1] != g_e_id[k][l*2+1]))){
						  flag1 = 1;
					  }
				  }
				  if (flag1 == 0){
					  flag = 1;
					  break;
				  }
			  }
			  if (flag == 0){
				  if (i == 0){
                    h1 = m_tree.InsertItem(0,"",0,0,TVIS_BOLD,0xff,order,NULL,TVI_LAST);
					strcpy(buf1,e_id_buf);
					for (m=2;m<14;m++)
						e_id_buf[m] = '0';

					clear_space(e_id_buf);
					strcpy(g_e_id[g_end_sbs],e_id_buf);
					strcpy(e_id_buf,buf1);
					clear_space(e_code_buf);
					strcpy(g_e_code[g_end_sbs],e_code_buf);
					clear_space(p_id_buf);
					strcpy(g_p_id[g_end_sbs],p_id_buf);
					clear_space(e_name_buf);
					strcpy(g_e_name[g_end_sbs],e_name_buf);
					clear_space(e_abbr_buf);
					strcpy(g_e_abbr[g_end_sbs],e_abbr_buf);
					clear_space(a_id_buf);
					strcpy(g_a_id[g_end_sbs],a_id_buf);
					clear_space(m_un_buf);
					strcpy(g_m_un[g_end_sbs],m_un_buf);
					clear_space(c_pr_buf);
					strcpy(g_c_pr[g_end_sbs],c_pr_buf);
					g_htreeitem[g_end_sbs] = h1;
					g_parent[order] = -1;
					g_end_sbs ++;
					order ++;
	                m_tree.SetItemText(h1,e_name_buf);
				  }
				  else{
					for (k=0;k<g_end_sbs;k++){
					  flag = 0;
					  for (j=0;j<i;j++){
						  if ((g_e_id[k][j*2] != id_buf[j][0])||
							  (g_e_id[k][j*2+1] != id_buf[j][1])){
							  flag = 1;
							  break;
						  }
					  }
					  if (flag == 0){
						  if ((g_e_id[k][i*2] != '0')||
                              (g_e_id[k][i*2+1] != '0')){
							  flag = 1;
						  }
					  }
					  if (flag == 0){
						  parent = k;
						  h2 = g_htreeitem[k];
					  }
					}
                    h1 = m_tree.InsertItem(0,"",0,0,TVIS_BOLD,0xff,order,h2,TVI_LAST);
					strcpy(buf1,e_id_buf);
					for (m=2*i+2;m<14;m++)
						e_id_buf[m] = '0';
					clear_space(e_id_buf);
					strcpy(g_e_id[g_end_sbs],e_id_buf);
					strcpy(e_id_buf,buf1);
					clear_space(e_code_buf);
					strcpy(g_e_code[g_end_sbs],e_code_buf);
					clear_space(p_id_buf);
					strcpy(g_p_id[g_end_sbs],p_id_buf);
					clear_space(e_name_buf);
					strcpy(g_e_name[g_end_sbs],e_name_buf);
					clear_space(e_abbr_buf);
					strcpy(g_e_abbr[g_end_sbs],e_abbr_buf);
					clear_space(a_id_buf);
					strcpy(g_a_id[g_end_sbs],a_id_buf);
					clear_space(m_un_buf);
					strcpy(g_m_un[g_end_sbs],m_un_buf);
					clear_space(c_pr_buf);
					strcpy(g_c_pr[g_end_sbs],c_pr_buf);
					g_htreeitem[g_end_sbs] = h1;
					g_parent[order] = parent;
					g_end_sbs ++;
					order ++;
	                m_tree.SetItemText(h1,e_name_buf);
				  }
			  }
			}
			else{
				break;
			}
		}
        end_g_id_buf ++;
	}
end:
	fclose(fpe);

	}
//							  TV_INSERTSTRUCT TV_ITEM
}


BEGIN_MESSAGE_MAP(Csbsgl, CDialog)
	//{{AFX_MSG_MAP(Csbsgl)
	ON_EN_CHANGE(IDC_byjx, OnChangebyjx)
	ON_BN_CLICKED(IDC_xyg, Onxyg)
	ON_WM_KEYDOWN()
	ON_EN_SETFOCUS(IDC_sbmc, OnSetfocussbmc)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// Csbsgl message handlers

clear_space(char buf[])
{
	int n,l;

	l = strlen(buf);
	n = l-1;
	while (buf[n] == ' '){
		buf[n] = 0;
		n --;
		if (n == 0)
			break;
    }
}


void Csbsgl::OnOK() 
{
	// TODO: Add extra validation here
	FILE *fpe;
	int i,j,k;
	
	fpe = fopen("c:\\xxsbgl\\sbqk.txt","w");
	for (i=0;i<g_end_sbs;i++){
		if (g_e_id[i][0] == 0){
			strcpy(g_e_id[i]," ");
		} 
      fprintf(fpe,"%s\n",g_e_id[i]);
		if (g_e_code[i][0] == 0){
			strcpy(g_e_code[i]," ");
		} 
      fprintf(fpe,"%s\n",g_e_code[i]);
		if (g_p_id[i][0] == 0){
			strcpy(g_p_id[i]," ");
		} 
      fprintf(fpe,"%s\n",g_p_id[i]);
		if (g_e_name[i][0] == 0){
			strcpy(g_e_name[i]," ");
		} 
      fprintf(fpe,"%s\n",g_e_name[i]);
		if (g_e_abbr[i][0] == 0){
			strcpy(g_e_abbr[i]," ");
		} 
      fprintf(fpe,"%s\n",g_e_abbr[i]);
		if (g_a_id[i][0] == 0){
			strcpy(g_a_id[i]," ");
		} 
      fprintf(fpe,"%s\n",g_a_id[i]);
		if (g_m_un[i][0] == 0){
			strcpy(g_m_un[i]," ");
		} 
      fprintf(fpe,"%s\n",g_m_un[i]);
		if (g_c_pr[i][0] == 0){
			strcpy(g_c_pr[i]," ");
		} 
      fprintf(fpe,"%s\n",g_c_pr[i]);
      fprintf(fpe,"%d\n",g_parent[i]);
    }
	fclose(fpe);
	g_come_in_flag = 1;
	CDialog::OnOK();
}

int get_a_line(FILE *fpe,char buf[])
{
	int c,i;

	i = 0;
	c = fgetc1(fpe);
	while ((c != 13)&&(c != -1)){
		buf[i++] = c;
		c = fgetc1(fpe);
    }
	buf[i] = 0;
	if (c == -1)
		return -1;
	else
		c = fgetc1(fpe);
	if (c == -1)
		return -1;
	return 0;
}

int fgetc1(FILE *fpe)
{
	int ret,c;

	if (g_end_p == 0){
		ret = fread(g_f_buffer,1,20000,fpe);
		if ((ret == 0)||(ret == -1))
			return -1;
		g_end_p = ret;
		g_begin_p = 1;
		c = g_f_buffer[0];
		return c;
	}
	else if (g_begin_p == g_end_p){
		ret = fread(g_f_buffer,1,20000,fpe);
		if ((ret == 0)||(ret == -1))
			return -1;
		g_end_p = ret;
		g_begin_p = 1;
		c = g_f_buffer[0];
		return c;
	}
	else{
		c = g_f_buffer[g_begin_p++];
		return c;
	}
}

void Csbsgl::OnChangebyjx() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function to send the EM_SETEVENTMASK message to the control
	// with the ENM_CHANGE flag ORed into the lParam mask.
	
	// TODO: Add your control notification handler code here
	int i,j,flag;
	CString str;
	char buf[40];

	i = 0;
	GetDlgItemText(IDC_byjx,str);
	strcpy(buf,str.GetBuffer(40));
    for (i=0;i<g_end_sbs;i++){
		flag = 0;
		for (j=0;j<strlen(buf);j++){

			if ((buf[j] != g_e_abbr[i][j])&&(buf[j] != '?')){
				flag = 1;
				break;
			}
/*
			if (strstr(g_e_abbr[i],buf) != NULL){
				flag = 0;
				break;
			}
*/
		}
		if (flag == 0){
			if (g_e_abbr[i][j] == 0){
			  if (g_old_htreeitem != g_htreeitem[i]){
				if (g_old_htreeitem != NULL){
					m_tree.SetItemState(g_old_htreeitem,0,0xffff);
				}
			  }
			  m_tree.Select(g_htreeitem[i],TVGN_FIRSTVISIBLE);
			  m_tree.SetItemState(g_htreeitem[i],TVIS_DROPHILITED,0xffff);
			  set_cur_sel(i);
			  g_old_htreeitem = g_htreeitem[i];
			  m_tree.Invalidate(TRUE);
			  g_cur_sb_search_pos = i+1;
			  return;
			}
		}
	}
    for (i=0;i<g_end_sbs;i++){
		flag = 1;
		for (j=0;j<strlen(buf);j++){
/*			if ((buf[j] != g_e_abbr[i][j])&&(buf[j] != '?')){
				flag = 1;
				break;
			}
*/
			if (strstr(g_e_abbr[i],buf) != NULL){
				flag = 0;
				break;
			}
		}
		if (flag == 0){
			if (g_old_htreeitem != g_htreeitem[i]){
				if (g_old_htreeitem != NULL){
					m_tree.SetItemState(g_old_htreeitem,0,0xffff);
				}
			}
			m_tree.Select(g_htreeitem[i],TVGN_FIRSTVISIBLE);
			m_tree.SetItemState(g_htreeitem[i],TVIS_DROPHILITED,0xffff);
			set_cur_sel(i);
			g_old_htreeitem = g_htreeitem[i];
			m_tree.Invalidate(TRUE);
			g_cur_sb_search_pos = i+1;
			break;
		}
	}
}

void Csbsgl::Onxyg() 
{
	// TODO: Add your control notification handler code here
	
	int i,j,k,flag;
	CString str;
	char buf[40];

	i = 0;
	GetDlgItemText(IDC_byjx,str);
	strcpy(buf,str.GetBuffer(40));
    for (k=0;k<g_end_sbs;k++){
		i = k + g_cur_sb_search_pos;
		i = i % g_end_sbs;
		flag = 1;
		for (j=0;j<strlen(buf);j++){
/*			if ((buf[j] != g_e_abbr[i][j])&&(buf[j] != '?')){
				flag = 1;
				break;
			}
*/
			if (strstr(g_e_abbr[i],buf) != NULL){
				flag = 0;
				break;
			}
		}
		if (flag == 0){
			if (g_old_htreeitem != g_htreeitem[i]){
				if (g_old_htreeitem != NULL){
					m_tree.SetItemState(g_old_htreeitem,0,0xffff);
				}
			}
			m_tree.Select(g_htreeitem[i],TVGN_FIRSTVISIBLE);
			m_tree.SetItemState(g_htreeitem[i],TVIS_DROPHILITED,0xffff);
			set_cur_sel(i);
			g_old_htreeitem = g_htreeitem[i];
			m_tree.Invalidate(TRUE);
			g_cur_sb_search_pos = i+1;
			break;
		}
	}
}

void Csbsgl::set_cur_sel(int n)
{
  SetDlgItemText(IDC_sbmc,g_e_name[n]);
}

void Csbsgl::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	// TODO: Add your message handler code here and/or call default
	
	
	CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}


void Csbsgl::OnSetfocussbmc() 
{
	// TODO: Add your control notification handler code here
	int i;
	CWnd *pwnd;

	pwnd = GetDlgItem(IDC_byjx);
	pwnd->SetFocus();
	Onxyg();
	i = 0;
}

void trim(char *buf)
{
	int i,j;
    char bu[200];

	strcpy(bu,buf);
	j = 0;
	for (i=0;i<strlen(bu);i++){
		if (bu[i] != ' ')
		  buf[j++] = bu[i];
    }
	buf[j] = 0;
}

⌨️ 快捷键说明

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