www.gusucode.com > VC++毕业设计_高校宿舍管理系统附论文源码程序 > VC++毕业设计_高校宿舍管理系统附论文源码程序/code/源代码/LeftTreeView.cpp
//Download by http://www.NewXing.com // LeftTreeView.cpp : implementation file // #include "stdafx.h" #include "Inhabitants.h" #include "InhabitantsDoc.h" #include "LeftTreeView.h" #include "MainFrm.h" #include "UsersListView.h" #include "UserinfoView.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CLeftTreeView IMPLEMENT_DYNCREATE(CLeftTreeView, CTreeView) CLeftTreeView::CLeftTreeView() { } CLeftTreeView::~CLeftTreeView() { } BEGIN_MESSAGE_MAP(CLeftTreeView, CTreeView) //{{AFX_MSG_MAP(CLeftTreeView) ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged) ON_COMMAND(ID_OPERATE_DELETE, OnOperateDelete) ON_UPDATE_COMMAND_UI(ID_OPERATE_DELETE, OnUpdateOperateDelete) ON_WM_LBUTTONDOWN() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CLeftTreeView drawing void CLeftTreeView::OnDraw(CDC* pDC) { CDocument* pDoc = GetDocument(); // TODO: add draw code here } ///////////////////////////////////////////////////////////////////////////// // CLeftTreeView diagnostics #ifdef _DEBUG void CLeftTreeView::AssertValid() const { CTreeView::AssertValid(); } void CLeftTreeView::Dump(CDumpContext& dc) const { CTreeView::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CLeftTreeView message handlers //将数据库中的所有学生到加到树中 void CLeftTreeView::AddUsersToTree() { CInhabitantsDoc* pDoc = (CInhabitantsDoc*)GetDocument(); if(pDoc==NULL) return; //清空树 GetTreeCtrl().DeleteAllItems(); //取数据库中得所有记录 CString strSql = "select * from house"; CCommand<CAccessor<CHouseAccessor> > dbHouse; long* pCount = new long; if(dbHouse.Open(pDoc->m_dbHouse.m_session,strSql,NULL,pCount) != S_OK) { AfxMessageBox("error"); delete pCount; return; } delete pCount; if(dbHouse.MoveFirst() == S_OK) { do { AddUserToTree(dbHouse.m_roomtype,dbHouse.m_buildingnum, dbHouse.m_roomnum,dbHouse.m_bednum); } while( dbHouse.MoveNext() == S_OK ); } dbHouse.Close(); } void CLeftTreeView::OnInitialUpdate() { CTreeView::OnInitialUpdate(); //设置树风格 ::SetWindowLong(m_hWnd,GWL_STYLE,WS_VISIBLE | WS_TABSTOP | WS_CHILD | WS_BORDER| TVS_HASBUTTONS | TVS_LINESATROOT | TVS_HASLINES | TVS_DISABLEDRAGDROP|TVS_SHOWSELALWAYS); //为树视图创建图标连表 CInhabitantsApp* pApp = (CInhabitantsApp*)AfxGetApp(); CTreeCtrl* pTreeCtrl = &GetTreeCtrl(); m_ImageList.Create(16,16,ILC_COLOR16,4,4); m_ImageList.Add(pApp->LoadIcon(IDI_ICON_SECTION)); m_ImageList.Add(pApp->LoadIcon(IDI_ICON_BUILDING)); m_ImageList.Add(pApp->LoadIcon(IDI_ICON_CELL)); m_ImageList.Add(pApp->LoadIcon(IDI_ICON_USER)); pTreeCtrl->SetImageList(&m_ImageList,TVSIL_NORMAL); //将学生加入树中 AddUsersToTree(); pTreeCtrl->SortChildren(TVI_ROOT); } void CLeftTreeView::AddUserToTree(CString strStudentName,int nBuildingNum,int nRoomNum,int nBedNum) { HTREEITEM hSectionItem = AddSectionToTree(strStudentName); HTREEITEM hBuildingItem = AddBuildingToTree(hSectionItem,nBuildingNum); HTREEITEM hCellItem = AddCellToTree(hBuildingItem,nRoomNum); if(hCellItem == NULL) return; CTreeCtrl* pCtrl = &GetTreeCtrl(); TV_INSERTSTRUCT TCItem;//插入数据项数据结构 TCItem.hParent = hCellItem; TCItem.hInsertAfter = TVI_LAST; TCItem.item.mask=TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE;//设屏蔽 TCItem.item.lParam=0;//序号 TCItem.item.iImage=3;//正常图标 TCItem.item.iSelectedImage=3;//选中时图标 CString str; str.Format("%d号床铺",nBedNum); TCItem.item.pszText = (LPTSTR)(LPCTSTR)str; pCtrl->InsertItem(&TCItem); pCtrl->SortChildren(hCellItem); } //将宿舍类型加到树视图中 HTREEITEM CLeftTreeView::AddSectionToTree(CString strStudentName) { CTreeCtrl* pCtrl = &GetTreeCtrl(); HTREEITEM hRootItem = pCtrl->GetRootItem(); if(hRootItem) { while(hRootItem) { CString strItemText = pCtrl->GetItemText(hRootItem); if(strItemText == strStudentName) return hRootItem; hRootItem = pCtrl->GetNextSiblingItem(hRootItem); } } TV_INSERTSTRUCT TCItem;//插入数据项数据结构 TCItem.hParent = TVI_ROOT; TCItem.hInsertAfter = TVI_LAST; TCItem.item.mask=TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE;//设屏蔽 TCItem.item.lParam=0;//序号 TCItem.item.iImage=0;//正常图标 TCItem.item.iSelectedImage=0;//选中时图标 TCItem.item.pszText = (LPTSTR)(LPCTSTR)strStudentName; HTREEITEM hSectionItem = pCtrl->InsertItem(&TCItem); pCtrl->SortChildren(TVI_ROOT); return hSectionItem; } HTREEITEM CLeftTreeView::AddBuildingToTree(HTREEITEM hSectionItem, int nBuildingnum) { if(hSectionItem == NULL) return NULL; CTreeCtrl* pCtrl = &GetTreeCtrl(); CString strBuildingNum; strBuildingNum.Format("%d号楼",nBuildingnum); if(pCtrl->ItemHasChildren(hSectionItem)) { HTREEITEM hItem = pCtrl->GetChildItem(hSectionItem); while(hItem) { CString strItemText = pCtrl->GetItemText(hItem); if(strItemText == strBuildingNum) return hItem; hItem = pCtrl->GetNextSiblingItem(hItem); } } TV_INSERTSTRUCT TCItem;//插入数据项数据结构 TCItem.hParent = hSectionItem; TCItem.hInsertAfter = TVI_LAST; TCItem.item.mask=TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE;//设屏蔽 TCItem.item.lParam=0;//序号 TCItem.item.iImage=1;//正常图标 TCItem.item.iSelectedImage=1;//选中时图标 TCItem.item.pszText = (LPTSTR)(LPCTSTR)strBuildingNum; HTREEITEM hBuildingItem = pCtrl->InsertItem(&TCItem); pCtrl->SortChildren(hSectionItem); return hBuildingItem; } HTREEITEM CLeftTreeView::AddCellToTree(HTREEITEM hBuildingItem, int nRoomnum) { if(hBuildingItem == NULL) return NULL; CTreeCtrl* pCtrl = &GetTreeCtrl(); CString strRoomNum; strRoomNum.Format("%d房间",nRoomnum); if(pCtrl->ItemHasChildren(hBuildingItem)) { HTREEITEM hItem = pCtrl->GetChildItem(hBuildingItem); while(hItem) { CString strItemText = pCtrl->GetItemText(hItem); if(strItemText == strRoomNum) return hItem; hItem = pCtrl->GetNextSiblingItem(hItem); } } TV_INSERTSTRUCT TCItem;//插入数据项数据结构 TCItem.hParent = hBuildingItem; TCItem.hInsertAfter = TVI_LAST; TCItem.item.mask=TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE;//设屏蔽 TCItem.item.lParam=0;//序号 TCItem.item.iImage=2;//正常图标 TCItem.item.iSelectedImage=2;//选中时图标 TCItem.item.pszText = (LPTSTR)(LPCTSTR)strRoomNum; HTREEITEM hCellItem = pCtrl->InsertItem(&TCItem); pCtrl->SortChildren(hBuildingItem); return hCellItem; } void CLeftTreeView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult) { NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; *pResult = 0; //获得被选择项 CTreeCtrl* pCtrl = &GetTreeCtrl(); HTREEITEM hSelItem = pCtrl->GetSelectedItem(); m_hHitItem = hSelItem; //如果没有项被选择,则将右边的列表视图清空 CMainFrame* pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd; if(hSelItem == NULL) { pFrame->SwitchToView(USERSVIEW); pFrame->m_pUsersView->ShowUsers(""); return; } //判断选择项在树中的位置 HTREEITEM hParentItem = pCtrl->GetParentItem(hSelItem); CString strSql,strStudentName,strBuildingNum,strRoomNum,strBedNum; if(hParentItem == NULL) { //小区 CString strStudentName = pCtrl->GetItemText(hSelItem); strSql.Format("select * from house where roomtype = '%s'",strStudentName); pFrame->SwitchToView(USERSVIEW); pFrame->m_pUsersView->ShowUsers(strSql); return; } hParentItem = pCtrl->GetParentItem(hParentItem); if(hParentItem == NULL) { //楼 strStudentName = pCtrl->GetItemText(pCtrl->GetParentItem(hSelItem)); CString str = pCtrl->GetItemText(hSelItem); int n = str.Find("号楼"); strBuildingNum = str.Left(n); strSql.Format("select * from house where roomtype = '%s' and buildingnum = %s", strStudentName,strBuildingNum); pFrame->SwitchToView(USERSVIEW); pFrame->m_pUsersView->ShowUsers(strSql); return; } hParentItem = pCtrl->GetParentItem(hParentItem); if(hParentItem == NULL) { //单元 strStudentName = pCtrl->GetItemText(pCtrl->GetParentItem (pCtrl->GetParentItem(hSelItem))); CString str = pCtrl->GetItemText(pCtrl->GetParentItem(hSelItem)); int n = str.Find("号楼"); strBuildingNum = str.Left(n); str = pCtrl->GetItemText(hSelItem); n = str.Find("房间"); strRoomNum = str.Left( n ); strSql.Format("select * from house where roomtype = '%s' and buildingnum = %s and roomnum = %s", strStudentName,strBuildingNum,strRoomNum); pFrame->SwitchToView(USERSVIEW); pFrame->m_pUsersView->ShowUsers(strSql); return; } //选择项是房间号,则右边视图显示该住户的详细信息 strStudentName = pCtrl->GetItemText(pCtrl->GetParentItem (pCtrl->GetParentItem(pCtrl->GetParentItem(hSelItem)))); CString str = pCtrl->GetItemText(pCtrl->GetParentItem (pCtrl->GetParentItem(hSelItem))); int n = str.Find("号楼"); strBuildingNum = str.Left(n); str = pCtrl->GetItemText(pCtrl->GetParentItem(hSelItem)); n = str.Find("房间"); strRoomNum = str.Left( n ); strBedNum = pCtrl->GetItemText(hSelItem); pFrame->SwitchToView(USERINFOVIEW); pFrame->m_pUserinfoView->UpdateUserInfo(strStudentName, atoi(strBuildingNum.GetBuffer(0)), atoi(strRoomNum.GetBuffer(0)), atoi(strBedNum.GetBuffer(0))); } void CLeftTreeView::OnOperateDelete() { if( m_hHitItem == NULL ) return; CMainFrame* pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd; CInhabitantsDoc* pDoc = (CInhabitantsDoc*)GetDocument(); CTreeCtrl* pCtrl = &GetTreeCtrl(); HTREEITEM hParentItem = pCtrl->GetParentItem( m_hHitItem ); CString strSql; if( hParentItem == NULL && m_hHitItem != NULL ) { //宿舍类型 CString strStudentName = pCtrl->GetItemText(m_hHitItem); strSql.Format("delete * from house where roomtype = '%s'",strStudentName); if(this->MessageBox("你真的要删除该宿舍区中的所有学生吗?", "中南民族大学学生宿舍管理系统",MB_YESNO)==IDNO) return; } else if( hParentItem != NULL && pCtrl->GetParentItem(hParentItem) == NULL ) { //楼 CString strStudentName = pCtrl->GetItemText(pCtrl->GetParentItem(m_hHitItem)); CString str = pCtrl->GetItemText(m_hHitItem); int n = str.Find("号楼"); CString strBuildingNum = str.Left(n); strSql.Format("delete * from house where roomtype = '%s' and buildingnum = %s", strStudentName,strBuildingNum); if(this->MessageBox("你真的要删除该楼中的所有学生吗?", "中南民族大学学生宿舍管理系统",MB_YESNO)==IDNO) return; } else if( pCtrl->GetParentItem(hParentItem) != NULL && pCtrl->GetParentItem(pCtrl->GetParentItem(hParentItem)) == NULL ) { //房间 CString strStudentName = pCtrl->GetItemText( pCtrl->GetParentItem(pCtrl->GetParentItem(m_hHitItem))); CString str = pCtrl->GetItemText(pCtrl->GetParentItem(m_hHitItem)); int n = str.Find("号楼"); CString strBuildingNum = str.Left(n); str = pCtrl->GetItemText(m_hHitItem); n = str.Find("房间"); CString strRoomNum = str.Left( n ); strSql.Format("delete * from house where roomtype = '%s' and buildingnum = %s and roomnum = %s", strStudentName,strBuildingNum,strRoomNum); if(this->MessageBox("你真的要删除该房间中的所有学生吗?", "中南民族大学学生宿舍管理系统",MB_YESNO)==IDNO) return; } else { //学生 CString strStudentName = pCtrl->GetItemText(pCtrl->GetParentItem( pCtrl->GetParentItem(pCtrl->GetParentItem(m_hHitItem)))); CString str = pCtrl->GetItemText(pCtrl->GetParentItem( pCtrl->GetParentItem(m_hHitItem))); int n = str.Find("号楼"); CString strBuildingNum = str.Left(n); str = pCtrl->GetItemText(pCtrl->GetParentItem(m_hHitItem)); n = str.Find("房间"); CString strRoomNum = str.Left( n ); CString strBedNum = pCtrl->GetItemText(m_hHitItem); strSql.Format("delete * from house where roomtype = '%s' and buildingnum = %s and roomnum = %s and bednum = %s", strStudentName,strBuildingNum,strRoomNum,strBedNum); if(this->MessageBox("你真的要删除该学生吗?","中南民族大学学生宿舍管理系统",MB_YESNO)==IDNO) return; } pDoc->DeleteUser(strSql); AddUsersToTree(); } void CLeftTreeView::OnUpdateOperateDelete(CCmdUI* pCmdUI) { pCmdUI->Enable(m_hHitItem != NULL); }