www.pudn.com > PBMS.rar > BorrowDlg.cpp


// BorrowDlg.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "PBMS.h" 
#include "BorrowDlg.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CBorrowDlg dialog 
 
 
CBorrowDlg::CBorrowDlg(CWnd* pParent /*=NULL*/) 
	: CDialog(CBorrowDlg::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(CBorrowDlg) 
	//}}AFX_DATA_INIT 
	m_canEdit = true; 
} 
 
 
void CBorrowDlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CBorrowDlg) 
	DDX_Control(pDX, IDC_BUTTON_BORROWAGAIN, m_btnBorrowAgain); 
	DDX_Control(pDX, IDC_BUTTON_REB, m_btnReborrow); 
	DDX_Control(pDX, IDC_BUTTON_EDIT, m_btnEdit); 
	DDX_Control(pDX, IDC_BUTTON_RETURN, m_btnReturn); 
	DDX_Control(pDX, IDC_BUTTON_DEL, m_btnDel); 
	DDX_Control(pDX, IDC_BUTTON_ADD, m_btnAdd); 
	DDX_Control(pDX, IDC_LIST_BOWLIST, m_listBorrow); 
	//}}AFX_DATA_MAP 
} 
 
IMPLEMENT_DYNCREATE(CBorrowDlg, CDialog) 
BEGIN_MESSAGE_MAP(CBorrowDlg, CDialog) 
	//{{AFX_MSG_MAP(CBorrowDlg) 
	ON_BN_CLICKED(IDC_BUTTON_RETURN, OnButtonReturn) 
	ON_WM_PAINT() 
	ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd) 
	ON_BN_CLICKED(IDC_BUTTON_EDIT, OnButtonEdit) 
	ON_BN_CLICKED(IDC_BUTTON_REB, OnButtonReb) 
	ON_BN_CLICKED(IDC_BUTTON_DEL, OnButtonDel) 
	ON_NOTIFY(NM_DBLCLK, IDC_LIST_BOWLIST, OnDblclkListBowlist) 
	ON_BN_CLICKED(IDC_BUTTON_BORROWAGAIN, OnButtonBorrowAgain) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CBorrowDlg message handlers 
 
BOOL CBorrowDlg::OnInitDialog()  
{ 
	CDialog::OnInitDialog(); 
	//重排列控件位置 
	AlignControls(); 
	//*==============修改List控件风格===================*// 
	DWORD dwStyle = m_listBorrow.GetStyle(); 
	dwStyle |= LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_SHOWSELALWAYS ; 
	m_listBorrow.SetExtendedStyle(dwStyle); 
	//*=================================================*// 
	//设置list控件列名 
	SetColumnName(); 
	//初始化list控件数据 
	RefreshColumnData(); 
	return TRUE;  // return TRUE unless you set the focus to a control 
	              // EXCEPTION: OCX Property Pages should return FALSE 
} 
 
/*=========================PreTranslateMessage======================================== 
说明: 
	重载PreTranslateMessage函数是为了确保用户回车时不关闭对话框, 
	而使其焦点指向下一个控件 
====================================================================================*/ 
BOOL CBorrowDlg::PreTranslateMessage(MSG* pMsg)  
{ 
 	BOOL handle = FALSE; 
	if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN) 
 	{ 
		CWnd *pCurrent = NULL; 
		pCurrent = GetFocus();//指向当前获得焦点的子窗口 
		if (pCurrent) 
		{ 
			CWnd *pNext = NULL; 
			pNext = GetNextDlgTabItem(pCurrent); 
			pNext->SetFocus();//焦点指向下一个子窗口 
			handle = TRUE; 
		} 
	} 
	return (handle ? handle : CDialog::PreTranslateMessage(pMsg)); 
} 
 
/*=========================SetColumnName============================================== 
说明: 
	为List控件设置列名 
====================================================================================*/ 
void CBorrowDlg::SetColumnName() 
{ 
	int index = 0; 
	//设置列名 
	m_listBorrow.InsertColumn(index++,"序号",LVCFMT_LEFT);//注:这里的序号不是ID号 
	m_listBorrow.InsertColumn(index++,"书名",LVCFMT_LEFT); 
	m_listBorrow.InsertColumn(index++,"索书号",LVCFMT_LEFT); 
	m_listBorrow.InsertColumn(index++,"文学书",LVCFMT_LEFT); 
	m_listBorrow.InsertColumn(index++,"借阅日期",LVCFMT_LEFT); 
	m_listBorrow.InsertColumn(index++,"续借日期",LVCFMT_LEFT); 
	m_listBorrow.InsertColumn(index++,"应还书日期",LVCFMT_LEFT); 
	m_listBorrow.InsertColumn(index++,"续借次数",LVCFMT_LEFT); 
	m_listBorrow.InsertColumn(index++,"图书馆",LVCFMT_LEFT); 
} 
 
/*=========================SizeAllColumn============================================== 
说明: 
							调整列的宽度 
====================================================================================*/ 
void CBorrowDlg::SizeAllColumn() 
{ 
	CHeaderCtrl *pHeader = m_listBorrow.GetHeaderCtrl();//获取标题控件 
	ASSERT(pHeader); 
	if (pHeader) 
	{ 
		m_listBorrow.SetRedraw(false);//关闭功能重画,直到全部列大小都设置好以后再整体重画,解决闪烁问题 
		for (int i = 0 ;i < pHeader->GetItemCount(); i++) 
		{ 
			m_listBorrow.SetColumnWidth(i,LVSCW_AUTOSIZE);//首先按列中值最长的宽度设置 
			int temp1 = m_listBorrow.GetColumnWidth(i); 
			m_listBorrow.SetColumnWidth(i,LVSCW_AUTOSIZE_USEHEADER);//再按标题宽度设置 
			int temp2 = m_listBorrow.GetColumnWidth(i); 
			m_listBorrow.SetColumnWidth(i,max(temp1,temp2)); 
		}//end-for 
		m_listBorrow.SetRedraw();//开启重画功能,让系统重画已经设置好的列表控件 
		m_listBorrow.Invalidate();//发送WM_PAINT消息 
	}//end-if 
} 
 
/*=========================RefreshColumnData========================================== 
说明: 
	刷新列表控件中的数据 
====================================================================================*/ 
bool CBorrowDlg::RefreshColumnData() 
{ 
	CString szItem; 
	//首先清除原来数据 
	m_listBorrow.DeleteAllItems(); 
	BOOKINFO book; 
	int posInList = 0;	//某一项在列表中的位置 
	//将用户所借书籍列表中数据在List控件中显示 
	for (int index = 0; index < m_userBooks.GetSize(); index ++) 
	{ 
		book = m_userBooks.GetAt(index); 
		//仅显示未还的书籍信息 
		if (!book.IsReturn) 
		{ 
			//ID 
			szItem.Format("%d",posInList + 1); 
			m_listBorrow.InsertItem(posInList,szItem); 
			//书名 
			m_listBorrow.SetItemText(posInList,1,book.name ); 
			//书号 
			m_listBorrow.SetItemText(posInList,2,book.bookNumber ); 
			//文学书 
			if (book.IsLiterature) 
			{ 
				szItem = _T("是"); 
			} 
			else 
			{ 
				szItem = _T("否"); 
			} 
			m_listBorrow.SetItemText(posInList,3,szItem); 
			//借书时间 
			szItem = book.borrowTime.Format("%Y-%m-%d"); 
			m_listBorrow.SetItemText(posInList,4,szItem); 
			//续借时间 
			if (book.reborrowTime.m_status == 2) 
			{ 
				//没有续借 
				szItem = _T(""); 
			} 
			else 
			{ 
				szItem = book.reborrowTime.Format("%Y-%m-%d"); 
			} 
			m_listBorrow.SetItemText(posInList,5,szItem); 
			//应还书时间,若年为1970说明是标记无效的时间 
			if (book.shouldReTime.GetYear() != 1970) 
			{ 
				szItem = book.shouldReTime.Format("%Y-%m-%d"); 
				m_listBorrow.SetItemText(posInList,6,szItem); 
			} 
			//续借次数 
			szItem.Format("%d",book.reborrowCount); 
			m_listBorrow.SetItemText(posInList,7,szItem); 
			//图书馆 
			m_listBorrow.SetItemText(posInList,8,book.LibName); 
			//为该项绑定数据---在m_userBooks数组中的位置index 
			m_listBorrow.SetItemData(posInList,index); 
			posInList ++; 
		}//end-if 
	}//end-for 
	//设置列宽 
	SizeAllColumn(); 
	return true; 
} 
 
/*=========================OnButtonReturn============================================= 
说明: 
	“还书”按钮事件处理函数。将书籍属性设置为已经还,并记录下还书时间,将 
	书籍从本面板的list控件中删除,显示到已还面板中的list控件中 
注意: 
	这里并没有数据库保存工作,只是修改m_userBooks中的数据,当面板关闭时才 
	进行数据保存工作 
====================================================================================*/ 
void CBorrowDlg::OnButtonReturn()  
{ 
	//对用户的选择进行判断 
	POSITION pos = m_listBorrow.GetFirstSelectedItemPosition(); 
	if (!pos) 
	{ 
		AfxMessageBox("请选择您要还的书籍,一次可选多本。"); 
		return; 
	} 
	//*==============设置用户还书时间===================*// 
	CReturnTimeDlg	reDlg; 
	if (reDlg.DoModal() == IDCANCEL) 
	{ 
		return; 
	} 
	//*=================================================*// 
 
	//*=============获取用户选择的数据项================*// 
	int nItem; 
	BOOKINFO	bookinfo; 
	while(pos) 
	{ 
		nItem = m_listBorrow.GetNextSelectedItem(pos);//nItem从0开始计算 
		//首先获取该书在队列中的位置 
		DWORD d = m_listBorrow.GetItemData(nItem); 
		//设置该书状态为已还 
		bookinfo = m_userBooks.GetAt((int)d); 
		bookinfo.IsReturn = true; 
		//设置还书时间 
		bookinfo.returnTime.SetDate(reDlg.m_returnTime.GetYear(),reDlg.m_returnTime.GetMonth(),reDlg.m_returnTime.GetDay()); 
		m_userBooks.SetAt((int)d,bookinfo); 
	}//end-while 
	//*=================================================*// 
	//重新绘制列表数据 
	RefreshColumnData(); 
 
	//*==============保存数据到数据库===================*// 
	CPBMSView *pMyView = (CPBMSView *)GetParent(); 
	pMyView->DataExchange(2);//调用父窗口(即View窗口)函数实现数据存储 
	//*=================================================*//	 
} 
 
void CBorrowDlg::OnPaint()  
{ 
	CPaintDC dc(this); // device context for painting 
	//重排列控件位置 
	AlignControls(); 
} 
 
/*=========================AlignControls============================================== 
说明: 
	初始化界面时或重画面板时重排列控件位置 
====================================================================================*/ 
void CBorrowDlg::AlignControls() 
{ 
	//*=========首先调整面板自身大小(与父窗口一样)====*// 
	CRect rect; 
	this->GetParent()->GetWindowRect(&rect); 
	ScreenToClient(&rect); 
	this->MoveWindow(&rect); 
	//*=================================================*// 
 
	//*==============调整按钮位置=======================*// 
	int	  width= rect.Width(); 
	int	  dis = width/6;				//间距 
 
	CRect rButton; 
	m_btnReturn.GetWindowRect(&rButton); 
	ScreenToClient(&rButton); 
	int	height = rButton.Height();		//按钮高度 
 
	//调整还书按钮位置 
	rButton.bottom = rect.bottom;		//按钮底与面板底对齐 
	rButton.top = rect.bottom - height; 
	m_btnReturn.MoveWindow(&rButton);	//设置新位置 
	//调整再借按钮位置 
	rButton.left  += dis; 
	rButton.right += dis; 
	m_btnBorrowAgain.MoveWindow(&rButton); 
	//调整编辑按钮位置 
	rButton.left  += dis; 
	rButton.right += dis; 
	m_btnEdit.MoveWindow(&rButton); 
	//调整添加按钮位置 
	rButton.left  += dis; 
	rButton.right += dis; 
	m_btnAdd.MoveWindow(&rButton); 
	//调整续借按钮位置 
	rButton.left  += dis; 
	rButton.right += dis; 
	m_btnReborrow.MoveWindow(&rButton); 
	//调整删除按钮位置 
	rButton.left  += dis; 
	rButton.right += dis; 
	m_btnDel.MoveWindow(&rButton); 
 
 
	//调整按钮风格 
	m_btnReturn.SetFlat(FALSE); 
	m_btnBorrowAgain.SetFlat(FALSE); 
	m_btnEdit.SetFlat(FALSE); 
	m_btnAdd.SetFlat(FALSE); 
	m_btnDel.SetFlat(FALSE); 
	m_btnReborrow.SetFlat(FALSE); 
 
	m_btnReturn.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30); 
	m_btnReturn.SetColor(CButtonST::BTNST_COLOR_FG_IN, RGB(255,0,0)); 
 
	m_btnBorrowAgain.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30); 
	m_btnBorrowAgain.SetColor(CButtonST::BTNST_COLOR_FG_IN, RGB(255,0,0)); 
 
	m_btnEdit.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30); 
	m_btnEdit.SetColor(CButtonST::BTNST_COLOR_FG_IN, RGB(255,0,0)); 
 
	m_btnAdd.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30); 
	m_btnAdd.SetColor(CButtonST::BTNST_COLOR_FG_IN, RGB(255,0,0)); 
 
	m_btnDel.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30); 
	m_btnDel.SetColor(CButtonST::BTNST_COLOR_FG_IN, RGB(255,0,0)); 
 
	m_btnReborrow.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30); 
	m_btnReborrow.SetColor(CButtonST::BTNST_COLOR_FG_IN, RGB(255,0,0)); 
	//*=================================================*//	 
	 
	//*==============调整列表控件位置===================*// 
	//将客户区进行修整 
	rect.DeflateRect(10,10,10,10); 
	rect.bottom -= height;//减去按钮高度 
	m_listBorrow.MoveWindow(&rect); 
	//*=================================================*//	 
} 
 
/*=========================DestroyWindow============================================== 
说明: 
	重载此函数主要是在窗口关闭时保存用户修改的数据,即数据库 
	保存工作在这里进行 
====================================================================================*/ 
BOOL CBorrowDlg::DestroyWindow()  
{ 
	// TODO: Add your specialized code here and/or call the base class 
	return CDialog::DestroyWindow(); 
} 
 
/*=========================OnButtonAdd================================================ 
说明: 
	添加书籍事件处理函数 
====================================================================================*/ 
void CBorrowDlg::OnButtonAdd()  
{ 
	CBookInfoDlg	dlg; 
	BOOKINFO		newbook; 
	//将图书馆信息传给对话框 
	dlg.m_libsInfo.Copy(m_libsInfo); 
	//显示图书信息对话框 
	if (dlg.DoModal() == IDOK) 
	{ 
		//将新添书籍信息读取 
		newbook = dlg.m_curBookInfo; 
		//设置用户ID 
		newbook.UserID = m_curUserID; 
		//假期时间及允许借书时间 
		for (int i = 0; i < m_libsInfo.GetSize(); i++) 
		{ 
			if (newbook.LibID == m_libsInfo.GetAt(i).id) 
			{ 
				newbook.HasHoliday = m_libsInfo.GetAt(i).HasHoliday; 
				newbook.holiday_begin = m_libsInfo.GetAt(i).holiday_begin; 
				newbook.holiday_end = m_libsInfo.GetAt(i).holiday_end; 
				newbook.canborrowTime = m_libsInfo.GetAt(i).canborrowTime; 
				newbook.canreborrowTime = m_libsInfo.GetAt(i).canreborrowTime; 
				break; 
			} 
		}//end-for 
		//设置还书时间 
		GetReturnTime(&newbook); 
		//设置本书未还 
		newbook.IsReturn = false; 
		//续借时间设置 
		newbook.reborrowTime.SetStatus(COleDateTime::null); 
		//还书时间设置 
		newbook.returnTime.SetStatus(COleDateTime::null); 
		//添加到队列中 
		m_userBooks.Add(newbook); 
		//重新显示列表 
		RefreshColumnData(); 
		//*==============保存数据到数据库===================*// 
		CPBMSView *pMyView = (CPBMSView *)GetParent(); 
		pMyView->DataExchange(2);//调用父窗口(即View窗口)函数实现数据存储 
		//*=================================================*//			 
	}//end-if(DoModal) 
} 
 
 
/*=========================GetReturnTime============================================== 
说明: 
	获取还书时间,日后图书馆制度变更后,程序修改只需在此模块进行 
参数: 
	pBI:书籍的所有信息,返回值也在其中的shouldReTime字段中 
 
====================================================================================*/ 
void CBorrowDlg::GetReturnTime(PBOOKINFO pBI) 
{ 
	//中间变量 
	CTime t_borrow,t_reborrow; 
	t_borrow = CTime(pBI->borrowTime.GetYear(),pBI->borrowTime.GetMonth(),pBI->borrowTime.GetDay(),0,0,0); 
	// 
	if (pBI->reborrowCount == 0)//没有续借过 
	{ 
		//如果没有时间则无法计算还书时间 
		if (pBI->borrowTime.m_status == 2) 
		{ 
			pBI->shouldReTime = CTime(1970,12,30,0,0,0); 
			return; 
		} 
		CTimeSpan t_span; 
		if (pBI->IsLiterature) { 
			t_span = CTimeSpan(30, 0, 0, 0);	// 文学书只借30天 
		}else{ 
			t_span = CTimeSpan(30 * pBI->canborrowTime,0,0,0); 
		} 
		 
		pBI->shouldReTime = t_borrow + t_span; 
	} 
	else	//续借过 
	{ 
		t_reborrow = CTime(pBI->reborrowTime.GetYear(),pBI->reborrowTime.GetMonth(),pBI->reborrowTime.GetDay(),0,0,0); 
		//如果没有时间则无法计算还书时间		 
		if (pBI->reborrowTime.m_status == 2) 
		{ 
			pBI->shouldReTime = CTime(1970,12,30,0,0,0); 
			return; 
		}		 
		//CTimeSpan t_span = CTimeSpan(30 * pBI->canreborrowTime,0,0,0); 
		//2005-9-25 
		CTimeSpan t_span; 
		if (pBI->IsLiterature) { 
			t_span = CTimeSpan(30, 0, 0, 0);	// 文学书只借30天 
		}else{ 
			t_span = CTimeSpan(30 * pBI->canreborrowTime,0,0,0); 
		} 
 
		pBI->shouldReTime = t_reborrow + t_span; 
	} 
	//*==============还书时间在假期中的处理=============*// 
	if (pBI->HasHoliday)//图书馆有假期 
	{ 
		CTime h_begin,h_end; 
		h_begin = CTime(pBI->holiday_begin.GetYear(),pBI->holiday_begin.GetMonth(),pBI->holiday_begin.GetDay(),0,0,0); 
		h_end   = CTime(pBI->holiday_end.GetYear(),pBI->holiday_end.GetMonth(),pBI->holiday_end.GetDay(),0,0,0); 
		//如果还书时间在假期中 
		if (pBI->shouldReTime > h_begin && pBI->shouldReTime < h_end ) 
		{ 
			CTimeSpan t_span; 
			t_span = pBI->shouldReTime - h_begin; 
			pBI->shouldReTime = h_end + t_span; 
		}//end-if(在假期) 
	}//end-if(图书馆有假期) 
	//*=================================================*// 
} 
 
/*=========================OnButtonEdit=============================================== 
说明: 
	编辑事件处理函数 
====================================================================================*/ 
void CBorrowDlg::OnButtonEdit()  
{ 
	//对用户的选择进行判断 
	POSITION pos = m_listBorrow.GetFirstSelectedItemPosition(); 
	if (!pos) 
	{ 
		AfxMessageBox("请选择您要编辑的书籍,每次只可编辑一本。"); 
		return; 
	} 
	//*==============获取当前选择的书籍信息=============*// 
	//获取该书在队列中的位置 
	int nItem = m_listBorrow.GetNextSelectedItem(pos);//nItem从0开始计算 
	DWORD d = m_listBorrow.GetItemData(nItem); 
	//获取信息 
	BOOKINFO willEditbook = m_userBooks.GetAt((int)d); 
	//*=================================================*// 
 
	//*==============显示对话框,进行编辑===============*// 
	CBookInfoDlg	dlg; 
	//将图书馆信息传给对话框 
	dlg.m_libsInfo.Copy(m_libsInfo); 
	//将要编辑的图书信息传入对话框对象 
	dlg.m_curBookInfo = willEditbook; 
	//显示图书信息对话框 
	if (dlg.DoModal() == IDOK) 
	{ 
		//若用户修改了借书时间或是续借时间,则重新计算还书时间 
		if (dlg.m_curBookInfo.borrowTime != willEditbook.borrowTime && dlg.m_curBookInfo.reborrowTime != willEditbook.reborrowTime ) 
		{ 
			GetReturnTime(&dlg.m_curBookInfo); 
		} 
		m_userBooks.SetAt((int)d,dlg.m_curBookInfo); 
		//重新显示列表 
		RefreshColumnData(); 
		//*==============保存数据到数据库===================*// 
		CPBMSView *pMyView = (CPBMSView *)GetParent(); 
		pMyView->DataExchange(2);//调用父窗口(即View窗口)函数实现数据存储 
		//*=================================================*//			 
	}//end-if(DoModal)	 
	//*=================================================*// 
} 
 
 
void CBorrowDlg::OnButtonReb()  
{ 
	//对用户的选择进行判断 
	POSITION pos = m_listBorrow.GetFirstSelectedItemPosition(); 
	if (!pos) 
	{ 
		AfxMessageBox("请选择您要续借的书籍,一次可选多本。"); 
		return; 
	} 
	//*==============设置用户续借时间===================*// 
	CReturnTimeDlg	rebDlg; 
	if (rebDlg.DoModal() == IDCANCEL) 
	{ 
		return; 
	} 
	//*=================================================*// 
	 
	//*=============获取用户选择的数据项================*// 
	int nItem; 
	BOOKINFO	bookinfo; 
	while(pos) 
	{ 
		nItem = m_listBorrow.GetNextSelectedItem(pos);//nItem从0开始计算 
		//首先获取该书在队列中的位置 
		DWORD d = m_listBorrow.GetItemData(nItem); 
		//设置该书状态为已还 
		bookinfo = m_userBooks.GetAt((int)d); 
		//设置续借时间 
		bookinfo.reborrowTime.SetDate(rebDlg.m_returnTime.GetYear(),rebDlg.m_returnTime.GetMonth(),rebDlg.m_returnTime.GetDay()); 
		//设置还书时间 
		GetReturnTime(&bookinfo); 
		//续借次数修改 
		bookinfo.reborrowCount ++; 
		m_userBooks.SetAt((int)d,bookinfo); 
	}//end-while 
	//*=================================================*// 
	//重新绘制列表数据 
	RefreshColumnData(); 
 
	//*==============保存数据到数据库===================*// 
	CPBMSView *pMyView = (CPBMSView *)GetParent(); 
	pMyView->DataExchange(2);//调用父窗口(即View窗口)函数实现数据存储 
	//*=================================================*//	 
} 
 
void CBorrowDlg::OnButtonDel()  
{ 
	//对用户的选择进行判断 
	POSITION pos = m_listBorrow.GetFirstSelectedItemPosition(); 
	if (!pos) 
	{ 
		AfxMessageBox("请选择您要删除的书籍,一次可选多本。"); 
		return; 
	} 
	//首先提出删除警告 
	if (AfxMessageBox("继续操作将永久删除所选书籍信息!是否要继续?",MB_YESNO) == IDNO) 
	{ 
		return; 
	} 
	//*=============获取用户选择的数据项================*// 
	CArray temp_books; 
	int			nItem; 
	BOOKINFO	bookinfo; 
	temp_books.Append(m_userBooks); 
	m_userBooks.RemoveAll();		//将其清空 
	while(pos) 
	{ 
		nItem = m_listBorrow.GetNextSelectedItem(pos);//nItem从0开始计算 
		//首先获取该书在队列中的位置 
		DWORD d = m_listBorrow.GetItemData(nItem); 
		bookinfo = temp_books.GetAt((int)d); 
		bookinfo.Id = 0;//设置标记 
		temp_books.SetAt((int)d,bookinfo); 
	}//end-while 
	//将被设置标记的书籍删除 
	for (int i = 0; i < temp_books.GetSize(); i ++) 
	{ 
		if (temp_books.GetAt(i).Id != 0) 
		{ 
			m_userBooks.Add(temp_books.GetAt(i)); 
		} 
	} 
	//*=================================================*// 
	//重新绘制列表数据 
	RefreshColumnData(); 
 
	//*==============保存数据到数据库===================*// 
	CPBMSView *pMyView = (CPBMSView *)GetParent(); 
	pMyView->DataExchange(2);//调用父窗口(即View窗口)函数实现数据存储 
	//*=================================================*//			 
} 
 
//将双击默认功能设为编辑 
void CBorrowDlg::OnDblclkListBowlist(NMHDR* pNMHDR, LRESULT* pResult)  
{ 
	// TODO: Add your control notification handler code here 
	if (m_canEdit) 
	{ 
		OnButtonEdit(); 
	} 
	*pResult = 0; 
} 
 
 
 
/*=========================MyEnableCtrl=============================================== 
说明: 
	使按钮能用与不能用。 
====================================================================================*/ 
void CBorrowDlg::MyEnableCtrl(BOOL enable) 
{ 
	m_btnAdd.EnableWindow(enable); 
	m_btnBorrowAgain.EnableWindow(enable); 
	m_btnDel.EnableWindow(enable); 
	m_btnEdit.EnableWindow(enable); 
	m_btnReborrow.EnableWindow(enable); 
	m_btnReturn.EnableWindow(enable); 
	if (enable) 
	{ 
		m_canEdit = true; 
	} 
	else 
	{ 
		m_canEdit = false; 
	} 
} 
 
/***************************************************************************** 
 
	与续借不同,相当于重新借书,规则同“借书”,而非“续借”。 
   
*****************************************************************************/ 
void CBorrowDlg::OnButtonBorrowAgain()  
{ 
	//对用户的选择进行判断 
	POSITION pos = m_listBorrow.GetFirstSelectedItemPosition(); 
	if (!pos) 
	{ 
		AfxMessageBox("请选择您要续借的书籍,一次可选多本。"); 
		return; 
	} 
	//*==============设置用户续借时间===================*// 
	CReturnTimeDlg	rebDlg; 
	if (rebDlg.DoModal() == IDCANCEL) 
	{ 
		return; 
	} 
	//*=================================================*// 
	 
	//*=============获取用户选择的数据项================*// 
	int nItem; 
	BOOKINFO	bookinfo; 
	while(pos) 
	{ 
		nItem = m_listBorrow.GetNextSelectedItem(pos);//nItem从0开始计算 
		//首先获取该书在队列中的位置 
		DWORD d = m_listBorrow.GetItemData(nItem); 
		bookinfo = m_userBooks.GetAt((int)d); 
		//设置借书时间 
		bookinfo.borrowTime.SetDate(rebDlg.m_returnTime.GetYear(),rebDlg.m_returnTime.GetMonth(),rebDlg.m_returnTime.GetDay()); 
		//续借次数设置为0,续借时间设置为空 
		bookinfo.reborrowCount = 0; 
		bookinfo.reborrowTime.SetStatus(COleDateTime::null); 
		//设置还书时间 
		GetReturnTime(&bookinfo);		 
		m_userBooks.SetAt((int)d,bookinfo); 
	}//end-while 
	//*=================================================*// 
	//重新绘制列表数据 
	RefreshColumnData(); 
	 
	//*==============保存数据到数据库===================*// 
	CPBMSView *pMyView = (CPBMSView *)GetParent(); 
	pMyView->DataExchange(2);//调用父窗口(即View窗口)函数实现数据存储 
	//*=================================================*//		 
}