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

📄 departmentdlg.cpp

📁 student manager system
💻 CPP
字号:
// DepartmentDlg.cpp : implementation file
//

#include "stdafx.h"
#include "StuManage.h"
#include "DepartmentDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CDepartmentDlg dialog

extern CStuManageApp theApp;

CDepartmentDlg::CDepartmentDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CDepartmentDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDepartmentDlg)
	m_strClass = _T("");
	m_strDepartment = _T("");
	m_strSchool = _T("");
	m_strSpeciality = _T("");
	//}}AFX_DATA_INIT
}


void CDepartmentDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDepartmentDlg)
	DDX_Control(pDX, IDC_TREE_DEPARTMENT, m_treeDepartment);
	DDX_Text(pDX, IDC_EDIT_CLASS, m_strClass);
	DDX_Text(pDX, IDC_EDIT_DEPARTMENT, m_strDepartment);
	DDX_Text(pDX, IDC_EDIT_SCHOOL, m_strSchool);
	DDX_Text(pDX, IDC_EDIT_SPECIALITY, m_strSpeciality);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDepartmentDlg, CDialog)
	//{{AFX_MSG_MAP(CDepartmentDlg)
	ON_NOTIFY(TVN_SELCHANGED, IDC_TREE_DEPARTMENT, OnSelchangedTreeDepartment)
	ON_BN_CLICKED(ID_ADD_DEPARTMENT_BTN, OnAddDepartmentBtn)
	ON_BN_CLICKED(IDC_ADD_DEPARTMENT_BTN_NEXT, OnAddDepartmentBtnNext)
	ON_BN_CLICKED(IDC_EXECUTE_DEPARTMENT_BTN, OnExecuteDepartmentBtn)
	ON_BN_CLICKED(ID_DELETE_DEPARTMENT_BTN, OnDeleteDepartmentBtn)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDepartmentDlg message handlers

BOOL CDepartmentDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	m_strSchool = "中国某某大学";
	
	DWORD dwStyles=GetWindowLong(m_treeDepartment.m_hWnd,GWL_STYLE);//获取树控制原风格	
	dwStyles|=TVS_EDITLABELS|TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT;	
	SetWindowLong(m_treeDepartment.m_hWnd,GWL_STYLE,dwStyles);//重新设置风格
	
	HTREEITEM hRoot,hCur,hChild;//树控制项目句柄		
	TV_INSERTSTRUCT TCItem;//插入数据项数据结构		
	TCItem.hParent=TVI_ROOT;//增加根项		
	TCItem.hInsertAfter=TVI_LAST;//在最后项之后	
	
	TCItem.item.mask=TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE;//设屏蔽		
	TCItem.item.pszText="中国某某大学";		
	TCItem.item.lParam=0;//序号		
	
	hRoot=m_treeDepartment.InsertItem(&TCItem);//返回根项句柄
	
	CString str,sql,str1,str2;
	char* DJ[20];//院系结点
	char* SJ[20][20];//专业结点
	char* CJ[20][20][20];//班级结点
	
	int i,j,m;
	
	str = "院系";
	sql="SELECT * FROM Department WHERE Type = '"+str+"'";
	m_pRecordset_dep.CreateInstance("ADODB.Recordset");
	m_pRecordset_dep->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockOptimistic,adCmdText);	
	
	if(m_pRecordset_dep->GetRecordCount() != 0)
	{
		i=0;
		while(!m_pRecordset_dep->adoEOF)
		{
			str = m_pRecordset_dep->GetCollect("Name").bstrVal;
			DJ[i] = str.LockBuffer();
			//添加院系
			TCItem.hParent=hRoot;			
			TCItem.item.pszText=DJ[i];			
			TCItem.item.lParam=(i+1)*20;//子项序号			
			hCur=m_treeDepartment.InsertItem(&TCItem);			
			//-------------------------------------------------------
			str1 = "专业";
			sql="SELECT * FROM Department WHERE Type = '"+str1+"' and Department = '"+str+"'";			
			m_pRecordset_spe.CreateInstance("ADODB.Recordset");
			m_pRecordset_spe->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockOptimistic,adCmdText);	
			
			if(m_pRecordset_spe->GetRecordCount() != 0)
			{
				j=0;
				while(!m_pRecordset_spe->adoEOF)
				{
					str1 = m_pRecordset_spe->GetCollect("Name").bstrVal;
					SJ[i][j] = str1.LockBuffer();
					//添加专业
					TCItem.hParent=hCur;				
					TCItem.item.pszText=SJ[i][j];				
					TCItem.item.lParam=(i+1)*20+(j+1);//子项序号				
					hChild = m_treeDepartment.InsertItem(&TCItem);
					//--------------------------------------------------
					str2 = "班级";
					sql="SELECT * FROM Department WHERE Type = '"+str2+"' and Speciality = '"+str1+"' and Department = '"+str+"'";			
					m_pRecordset_cla.CreateInstance("ADODB.Recordset");
					m_pRecordset_cla->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockOptimistic,adCmdText);	
					
					if(m_pRecordset_cla->GetRecordCount() != 0)
					{
						m=0;
						while(!m_pRecordset_cla->adoEOF)
						{
							str2 = m_pRecordset_cla->GetCollect("Name").bstrVal;
							CJ[i][j][m] = str2.LockBuffer();
							//添加班级
							TCItem.hParent=hChild;				
							TCItem.item.pszText=CJ[i][j][m];				
							TCItem.item.lParam=(i+1)*20*20+(j+1)*20 +(m+1);//子项序号				
							m_treeDepartment.InsertItem(&TCItem);
							m++;
							m_pRecordset_cla->MoveNext();
						}
						m_treeDepartment.Expand(hChild,TVE_EXPAND);//展开班级树
					}
					m_pRecordset_cla->Close();
					//--------------------------------------------------
					j++;
					m_pRecordset_spe->MoveNext();
				}
				m_treeDepartment.Expand(hCur,TVE_EXPAND);//展开专业树
			}
			m_pRecordset_spe->Close();
			//--------------------------------------------------------
			i++;
			m_pRecordset_dep->MoveNext();
		}
		m_treeDepartment.Expand(hRoot,TVE_EXPAND);//展开院系树
	}
	m_pRecordset_dep->Close();	
	UpdateData(FALSE);
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}


void CDepartmentDlg::OnSelchangedTreeDepartment(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here

	SetStatus(TRUE,TRUE,TRUE);

	CString sql;
	CString text;
	CString name,type,department,speciality;
		
	//获取选中的内容
	HTREEITEM hCurItem;
	hCurItem=m_treeDepartment.GetSelectedItem ();
	text=m_treeDepartment.GetItemText(hCurItem);

	if(text.CollateNoCase("中国某某大学") != 0)
	{
		sql="SELECT * FROM Department where Name='"+text+"'";
		m_pRecordset_spe.CreateInstance("ADODB.Recordset");
		m_pRecordset_spe->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockOptimistic,adCmdText);
		if(m_pRecordset_spe->GetRecordCount()!=0)
		{
			type = m_pRecordset_spe->GetCollect("Type").bstrVal;
			if(type.CompareNoCase("院系") == 0)
			{
				m_strDepartment = text;
				m_strSpeciality = "";
				m_strClass = "";
			}
			else if(type.CompareNoCase("专业") == 0)
			{
				m_strDepartment = m_pRecordset_spe->GetCollect("Department").bstrVal;
				m_strSpeciality = text;
				m_strClass = "";
			}
			else if(type.CollateNoCase("班级") == 0)
			{
				m_strDepartment = m_pRecordset_spe->GetCollect("Department").bstrVal;
				m_strSpeciality = m_pRecordset_spe->GetCollect("Speciality").bstrVal;
				m_strClass = text;				
			}
			else
			{
				return;
			}
		}
		
		m_pRecordset_spe->Close();
	}
	
	else
	{
		return;
	}

	UpdateData(FALSE);	
	*pResult = 0;
}

void CDepartmentDlg::OnAddDepartmentBtn() //同级别
{
	// TODO: Add your control notification handler code here
	if(theApp.m_Level != 2)
	{
		AfxMessageBox("您无权进行院系设置");
		return;
	}

	SetStatus(TRUE,TRUE,TRUE);

	CString sql;
	CString text;
	CString name,type,department,speciality;
	
	//获取选中的内容
	HTREEITEM hCurItem;
	hCurItem=m_treeDepartment.GetSelectedItem ();
	text=m_treeDepartment.GetItemText(hCurItem);

	if(text.CollateNoCase("中国某某大学") != 0)
	{
		sql="SELECT * FROM Department where Name='"+text+"'";
		m_pRecordset_spe.CreateInstance("ADODB.Recordset");
		m_pRecordset_spe->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockOptimistic,adCmdText);
		if(m_pRecordset_spe->GetRecordCount()!=0)
		{
			type = m_pRecordset_spe->GetCollect("Type").bstrVal;//接点处的类型
			if(type.CompareNoCase("院系") == 0)//如果为院系,专业、班级为无效状态
			{
				SetStatus(TRUE,FALSE,FALSE);
				m_strDepartment = "";//等待输入
				m_flag = 0;
			}
			else if(type.CompareNoCase("专业") == 0)//如果为专业,班级为无效状态
			{
				SetStatus(FALSE,TRUE,FALSE);
				m_strSpeciality = "";//等待输入
				m_flag = 1;
			}
			else if(type.CollateNoCase("班级") == 0)//如果为班级
			{
				SetStatus(FALSE,FALSE,TRUE);
				m_strClass = "";//等待输入
				m_flag = 2;
			}
			else
			{
				return;
			}
		}
		
		m_pRecordset_spe->Close();
	}
	
	else
	{
		return;
	}

	UpdateData(FALSE);		
}

void CDepartmentDlg::OnAddDepartmentBtnNext() 
{
	// TODO: Add your control notification handler code here
	if(theApp.m_Level != 2)
	{
		AfxMessageBox("您无权进行院系设置");
		return;
	}
	SetStatus(TRUE,TRUE,TRUE);

	CString sql;
	CString text;
	CString name,type,department,speciality;
	
	//获取选中的内容
	HTREEITEM hCurItem;
	hCurItem=m_treeDepartment.GetSelectedItem ();
	text=m_treeDepartment.GetItemText(hCurItem);

	if(text.CollateNoCase("中国某某大学") != 0)
	{
		sql="SELECT * FROM Department where Name='"+text+"'";
		m_pRecordset_spe.CreateInstance("ADODB.Recordset");
		m_pRecordset_spe->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockOptimistic,adCmdText);
		if(m_pRecordset_spe->GetRecordCount()!=0)
		{
			type = m_pRecordset_spe->GetCollect("Type").bstrVal;//接点处的类型
			if(type.CompareNoCase("院系") == 0)//如果为院系,专业、班级为无效状态
			{
				SetStatus(FALSE,TRUE,FALSE);
				m_strSpeciality = "";//等待输入
				m_flag = 3;
			}
			else if(type.CompareNoCase("专业") == 0)//如果为专业,班级为无效状态
			{
				SetStatus(FALSE,FALSE,TRUE);
				m_strClass = "";//等待输入
				m_flag = 4;
			}
			else if(type.CollateNoCase("班级") == 0)//如果为班级
			{
				SetStatus(FALSE,FALSE,FALSE);
				AfxMessageBox("没有下一级别");				
			}
			else
			{
				return;
			}
		}
		
		m_pRecordset_spe->Close();
	}
	
	else
	{
		return;
	}

	UpdateData(FALSE);	
}

void CDepartmentDlg::SetStatus(BOOL status1,BOOL status2,BOOL status3)
{
	GetDlgItem(IDC_EDIT_DEPARTMENT)->EnableWindow(status1);
	GetDlgItem(IDC_EDIT_SPECIALITY)->EnableWindow(status2);
	GetDlgItem(IDC_EDIT_CLASS)->EnableWindow(status3);
}


void CDepartmentDlg::OnDeleteDepartmentBtn() 
{
	// TODO: Add your control notification handler code here
	if(theApp.m_Level != 2)
	{
		AfxMessageBox("您无权进行院系设置");
		return;
	}
	SetStatus(TRUE,TRUE,TRUE);

	CString sql;
	CString text;
	CString name,type,department,speciality;
	
	//获取选中的内容
	HTREEITEM hCurItem;
	hCurItem=m_treeDepartment.GetSelectedItem ();
	text=m_treeDepartment.GetItemText(hCurItem);

	if(text.CollateNoCase("中国某某大学") != 0)
	{
		sql="SELECT * FROM Department where Name='"+text+"'";
		m_pRecordset_spe.CreateInstance("ADODB.Recordset");
		m_pRecordset_spe->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockOptimistic,adCmdText);
		if(m_pRecordset_spe->GetRecordCount()!=0)
		{
			type = m_pRecordset_spe->GetCollect("Type").bstrVal;//接点处的类型
			if(type.CompareNoCase("院系") == 0)//如果为院系,专业、班级为无效状态
			{
				m_flag = 5;
			}
			else if(type.CompareNoCase("专业") == 0)//如果为专业,班级为无效状态
			{
				m_flag = 6;
			}
			else if(type.CollateNoCase("班级") == 0)//如果为班级
			{
				m_flag = 7;
			}
			else
			{
				return;
			}
		}
		
		m_pRecordset_spe->Close();
	}
	
	else
	{
		return;
	}

	UpdateData(FALSE);		
}

void CDepartmentDlg::OnExecuteDepartmentBtn() 
{
	// TODO: Add your control notification handler code here
	//open access
	UpdateData(TRUE);
	
	CString sql;
	CString name,department,speciality;
	sql="SELECT * FROM Department ";
	m_pRecordset_spe.CreateInstance("ADODB.Recordset");
	m_pRecordset_spe->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockOptimistic,adCmdText);	

	switch( m_flag ) 
	{
    case 0:
		if(m_strDepartment.CompareNoCase("") == 0)
			AfxMessageBox("请输入新增院系的名称");
		else
		{
			m_pRecordset_spe->AddNew();
			m_pRecordset_spe->PutCollect("Name",(_variant_t)m_strDepartment);
			m_pRecordset_spe->PutCollect("Type",(_variant_t)"院系");
			m_pRecordset_spe->Update();
		}
        break;

    case 1:
	case 3:
		if(m_strSpeciality.CompareNoCase("") == 0)
			AfxMessageBox("请输入新增专业的名称");
		else
		{
			m_pRecordset_spe->AddNew();
			m_pRecordset_spe->PutCollect("Name",(_variant_t)m_strSpeciality);
			m_pRecordset_spe->PutCollect("Type",(_variant_t)"专业");
			m_pRecordset_spe->PutCollect("Department",(_variant_t)m_strDepartment);
			m_pRecordset_spe->Update();
		}
		break;
	case 2:
	case 4:
		if(m_strClass.CompareNoCase("") == 0)
			AfxMessageBox("请输入新增班级的名称");
		else
		{
			m_pRecordset_spe->AddNew();
			m_pRecordset_spe->PutCollect("Name",(_variant_t)m_strClass);
			m_pRecordset_spe->PutCollect("Type",(_variant_t)"班级");
			m_pRecordset_spe->PutCollect("Department",(_variant_t)m_strDepartment);
			m_pRecordset_spe->PutCollect("Speciality",(_variant_t)m_strSpeciality);
			m_pRecordset_spe->Update();
		}
		break;
	case 5:
		if(m_pRecordset_spe->GetRecordCount()!=0)
		{
			m_pRecordset_spe->MoveFirst();
			while(!m_pRecordset_spe->adoEOF)
			{	
				name = m_pRecordset_spe->GetCollect("Name").bstrVal;
				department = m_pRecordset_spe->GetCollect("Department").bstrVal;
				if(m_strDepartment.CompareNoCase(name)==0||m_strDepartment.CompareNoCase(department)==0)				
					m_pRecordset_spe->Delete(adAffectCurrent);
					
				m_pRecordset_spe->MoveNext();
			}
		}
		break;		
	case 6:
		if(m_pRecordset_spe->GetRecordCount()!=0)
		{
			m_pRecordset_spe->MoveFirst();
			while(!m_pRecordset_spe->adoEOF)
			{
				name = m_pRecordset_spe->GetCollect("Name").bstrVal;
				speciality = m_pRecordset_spe->GetCollect("Speciality").bstrVal;
				if(m_strSpeciality.CompareNoCase(name)==0||m_strSpeciality.CompareNoCase(speciality)==0)				
					m_pRecordset_spe->Delete(adAffectCurrent);
					
				m_pRecordset_spe->MoveNext();
			}
		}
		break;
	case 7:
  		if(m_pRecordset_spe->GetRecordCount()!=0)
		{
			m_pRecordset_spe->MoveFirst();
			while(!m_pRecordset_spe->adoEOF)
			{
				name = m_pRecordset_spe->GetCollect("Name").bstrVal;
				if(m_strClass.CompareNoCase(name)==0)	
					m_pRecordset_spe->Delete(adAffectCurrent);	
				
				m_pRecordset_spe->MoveNext();
			}
		}
		break;      
    default :
        break;
	}

	m_pRecordset_spe->Close();	
	m_treeDepartment.DeleteAllItems();
	OnInitDialog();

	m_flag = -1;
}

⌨️ 快捷键说明

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