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

📄 unitclasstree.cpp

📁 课程设计的简单Access学生数据库系统
💻 CPP
字号:
// UnitClassTree.cpp: implementation of the UnitClassTree class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "SM.h"
#include "UnitClassTree.h"

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

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

//##ModelId=40A481F80218
UnitClassTree::UnitClassTree(CTreeCtrl *Tree):UnitTree(Tree)
{
	pClassTable = new CDaoTableDef(&theDatabase);
	pClassTable->Open(_T("Class"));
	pClassRS = new CDaoRecordset();
	pClassRS->Open(pClassTable);
}

//##ModelId=40A481F80223
UnitClassTree::~UnitClassTree()
{
	pClassRS->Close();
	pClassTable->Close();
	delete pClassRS;
	delete pClassTable;
}

//##ModelId=40A481F801B8
void UnitClassTree::LoadAll(int ID, HTREEITEM parent)
{
	COleVariant var;
	var.ChangeType(VT_I4);
	var.lVal = (long)ID;

	pUnitRS->SetCurrentIndex(_T("id"));	
	if(pUnitRS->Seek("=", &var))
	{
		CDaoVariant v_ID, v_name, v_superior;

		//插入当前树结点
		v_ID = pUnitRS->GetFieldValue("ID");
		v_name = pUnitRS->GetFieldValue("Unit");
		v_superior = pUnitRS->GetFieldValue("Superior_id");
		Units.push_back(Unit(v_ID.AsInt(), v_name.AsString(), v_superior.AsInt()));
		HTREEITEM item = pTree->InsertItem(v_name.AsString(), 1, 0, parent);
		Items.push_back(item);
		Types.push_back(0);
		Points.push_back(Units.size()-1);
		pTree->SetItemData(item, DWORD(Items.size()-1));
		

		//插入子结点
		pUnitRS->SetCurrentIndex(_T("Superior_id"));
		if(pUnitRS->Seek("=", &var))
		{
			vector<int> childs;
			int id, sid;
			do
			{
				id = pUnitRS->GetFieldValue("ID").lVal;
				sid = pUnitRS->GetFieldValue("Superior_id").lVal;
				if(sid == ID)
					childs.push_back(id);
				else
					break;//或并非孩子结点
				
				pUnitRS->MoveNext();
			}
			while(!pUnitRS->IsEOF());//库底
			for(int i=0; i<childs.size(); i++)
				LoadAll(childs[i], item);
			//
			//插入班级
		}	
		pClassRS->SetCurrentIndex(_T("ID"));
		pClassRS->SetCurrentIndex(_T("Superior_id"));
		if(pClassRS->Seek("=", &var))
		{
			CDaoVariant v_class_ID, v_class_name, v_class_superior, v_class_teacher;
			HTREEITEM child_item;
			do
			{
				v_class_ID = pClassRS->GetFieldValue("ID");
				v_class_name = pClassRS->GetFieldValue("Class");
				v_class_superior = pClassRS->GetFieldValue("Superior_id");
				v_class_teacher = pClassRS->GetFieldValue("Teacher_id");
				if(v_class_superior.AsInt()==ID)
				{
					Classes.push_back(
										Class(v_class_ID.AsInt(), 
											  v_class_name.AsString(),
											  v_class_superior.AsInt(),
											  v_class_teacher.AsInt()
											 )
									  );
					child_item = pTree->InsertItem(v_class_name.AsString(), 2, 2, item);
					Items.push_back(child_item);
					pTree->SetItemData(child_item, DWORD(Items.size()-1));
					Types.push_back(1);
					Points.push_back(Classes.size()-1);
				}
				else
					break;//或并非孩子结点
				pClassRS->MoveNext();
			}
			while(!pClassRS->IsEOF());//库底
		}
	}
}

//##ModelId=40A481F801B7
Unit& UnitClassTree::GetSelectUnit()
{
	HTREEITEM item = pTree->GetSelectedItem();
	ASSERT(item != NULL);
	
	if(item != NULL)
	{
		int pos = pTree->GetItemData(item);
		if(Types[pos] == 1)//is Class
			return Units[Points[pTree->GetItemData(pTree->GetParentItem(item))]];
		else
			return Units[Points[pos]];
	}
	else
		return Units[0];//缺省返回	
}

//##ModelId=40A481F801B6
int UnitClassTree::GetSelectType()
{
	HTREEITEM item = pTree->GetSelectedItem();
	ASSERT(item != NULL);
	if(item)
	{
		int pos = pTree->GetItemData(item);
		return Types[pos];
	}
	else
	{
		return -1;
	}
}

//##ModelId=40A481F801B5
Class& UnitClassTree::GetSelectClass()
{
	HTREEITEM item = pTree->GetSelectedItem();
	ASSERT(item != NULL);
	
	if(item != NULL)
	{
		int pos = pTree->GetItemData(item);
		if(Types[pos] == 1)//is Class
		{
			return Classes[Points[pTree->GetItemData(item)]];
		}
	}
	ASSERT(Classes.size() != 0);
	return Classes[0];//缺省返回		
}

//##ModelId=40A481F801A5
bool UnitClassTree::SetSelectClass(int ID)
{
	int pos=0;
	while(pos<Classes.size())
	{
		if(Classes[pos].ID==ID) 
			break;
		pos++;
	}

	if(pos == Classes.size())
		return false;

	for(int i=0;i<Types.size();i++)
	{
		if(Types[i]==1 && Points[i]==pos)
			break;
	}
	if(i==Types.size())
		return false;
	pTree->Select(Items[i], TVGN_FIRSTVISIBLE);
	pTree->SelectItem(Items[i]);
	return true;
}

//##ModelId=40A481F8017A
bool UnitClassTree::SetSelectUnit(int ID)
{
	int pos=0;
	while(Units[pos].ID!=ID && pos<Units.size())
		pos++;

	if(pos == Units.size())
		return false;

	for(int i=0;i<Types.size();i++)
	{
		if(Types[i]==0 && Points[i]==pos)
			break;
	}
	if(i==Types.size())
		return false;
	pTree->Select(Items[i], TVGN_FIRSTVISIBLE);
	pTree->SelectItem(Items[i]);
	return true;
}

//##ModelId=40A481F80179
void UnitClassTree::Clear()
{
	UnitTree::Clear();
	Points.clear();
	Classes.clear();
	Types.clear();
}

//##ModelId=40A481F80169
bool UnitClassTree::IsChild(int father_id, int child_id, int type)
{
	return false;
}

//##ModelId=40A481F80168
void UnitClassTree::ReLoad()
{
	Clear();
	Load();
}

//##ModelId=40A481F8015A
void UnitClassTree::DeleteClass(long id)
{
	long t_id;
	HTREEITEM item , parent_item , next_item;
	item = pTree->GetSelectedItem();
	parent_item = pTree->GetParentItem(item);
	next_item = pTree->GetNextSiblingItem(item);
	if(!next_item)
		next_item = pTree->GetPrevSiblingItem(item);
	if(!next_item)
		next_item = parent_item;
	int pos = pTree->GetItemData(next_item);
	bool type = Types[pos]==1;
	t_id = type ? Classes[Points[pos]].ID : Units[Points[pos]].ID;
	ReLoad();
	if(type)
		SetSelectClass(t_id);
	else
		SetSelectUnit(t_id);
}

//##ModelId=40A481F80158
void UnitClassTree::DeleteUnit(long id)
{
	ReLoad();
}

//##ModelId=40A481F8014B
void UnitClassTree::NewClass(long id)
{
	ReLoad();
	SetSelectClass(id);
}

//##ModelId=40A481F80149
void UnitClassTree::NewUnit(long id)
{
	ReLoad();
	SetSelectUnit(id);
}

//##ModelId=40A481F8013C
void UnitClassTree::UpdateUnit(long id)
{
	ReLoad();
	SetSelectUnit(id);
}

//##ModelId=40A481F8013A
void UnitClassTree::UpdateClass(long id)
{
	ReLoad();
	SetSelectClass(id);
}

//##ModelId=40A481F80138
Class& UnitClassTree::GetClass(HTREEITEM item)
{
	if(item != NULL)
	{
		int pos = pTree->GetItemData(item);
		if(Types[pos] == 1)//is Class
		{
			return Classes[Points[pTree->GetItemData(item)]];
		}
	}
	ASSERT(Classes.size() != 0);
	return Classes[0];//缺省返回		
}

//##ModelId=40A481F8012A
int UnitClassTree::GetType(HTREEITEM item)
{
	int pos = pTree->GetItemData(item);
	return Types[pos];
}

//##ModelId=40A481F80128
Unit& UnitClassTree::GetUnit(HTREEITEM item)
{
	if(item != NULL)
	{
		int pos = pTree->GetItemData(item);
		if(Types[pos] == 1)//is Class
			return Units[Points[pTree->GetItemData(pTree->GetParentItem(item))]];
		else
			return Units[Points[pos]];
	}
	else
		return Units[0];//缺省返回	
}

⌨️ 快捷键说明

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