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

📄 libraryview.cpp

📁 图书借阅管理 图书借阅管理
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// LibraryView.cpp : implementation of the CLibraryView class
//

#include "stdafx.h"
#include "Library.h"

#include "LibrarySet.h"
#include "LibraryDoc.h"
#include "LibraryView.h"
#include "QueryBorrowInfo.h"

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

/////////////////////////////////////////////////////////////////////////////
// CLibraryView

IMPLEMENT_DYNCREATE(CLibraryView, CRecordView)

BEGIN_MESSAGE_MAP(CLibraryView, CRecordView)
	//{{AFX_MSG_MAP(CLibraryView)
	ON_COMMAND(ID_QUERY_BORROW, OnQueryBorrow)
	ON_COMMAND(ID_INSERT_BORROW, OnInsertBorrow)
	ON_COMMAND(ID_DELETE_BORROW, OnDeleteBorrow)
	ON_EN_KILLFOCUS(IDC_BOOKNAME, OnKillfocusBookname)
	ON_EN_KILLFOCUS(IDC_CARDID, OnKillfocusCardid)
	ON_EN_KILLFOCUS(IDC_PRIVIDER, OnKillfocusPrivider)
	ON_BN_CLICKED(IDC_INLIBRIRY, OnInlibriry)
	ON_COMMAND(ID_UNQUERY_BORROW, OnUnqueryBorrow)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CRecordView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CRecordView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CRecordView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CLibraryView construction/destruction

CLibraryView::CLibraryView()
	: CRecordView(CLibraryView::IDD)
{
	//{{AFX_DATA_INIT(CLibraryView)
	m_pSet = NULL;
	m_sBookName = _T("");
	m_sISBN = _T("");
	m_sPrice = _T("");
	m_sPrivider = _T("");
	m_sPrividerAddr = _T("");
	m_sLinkMan = _T("");
	m_nBorrowCardNum = 0;
	m_nPrividerPhone = 0;
	m_olePublishDate = COleDateTime::GetCurrentTime();
	m_sPublishing = _T("");
	m_sReaderAddr = _T("");
	m_sReaderName = _T("");
	m_nReaderPhone = 0;
	m_oleSignDate = COleDateTime::GetCurrentTime();
	m_sWriterName = _T("");
	m_oleBuyDate = COleDateTime::GetCurrentTime();
	//}}AFX_DATA_INIT
	// TODO: add construction code here
	m_bAdding = FALSE;
}

CLibraryView::~CLibraryView()
{
}

void CLibraryView::DoDataExchange(CDataExchange* pDX)
{
	CRecordView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CLibraryView)
	DDX_Text(pDX, IDC_BOOKNAME, m_sBookName);
	DDX_Text(pDX, IDC_ISBN, m_sISBN);
	DDX_Text(pDX, IDC_PRICE, m_sPrice);
	DDX_Text(pDX, IDC_PRIVIDER, m_sPrivider);
	DDX_Text(pDX, IDC_PRIVIDERADDR, m_sPrividerAddr);
	DDX_Text(pDX, IDC_LINKMAN, m_sLinkMan);
	DDX_Text(pDX, IDC_CARDID, m_nBorrowCardNum);
	DDX_Text(pDX, IDC_PRIVIDERPHONE, m_nPrividerPhone);
	DDX_Text(pDX, IDC_PUBLISHDATE, m_olePublishDate);
	DDX_Text(pDX, IDC_PUBLISHING, m_sPublishing);
	DDX_Text(pDX, IDC_READERADDR, m_sReaderAddr);
	DDX_Text(pDX, IDC_READERNAME, m_sReaderName);
	DDX_Text(pDX, IDC_READERPHONE, m_nReaderPhone);
	DDX_Text(pDX, IDC_SIGNDATE, m_oleSignDate);
	DDX_Text(pDX, IDC_WRITERNAME, m_sWriterName);
	DDX_FieldCheck(pDX, IDC_INLIBRIRY, m_pSet->m_InLibrary, m_pSet);
	DDX_FieldText(pDX, IDC_BOOKID, m_pSet->m_LibraryBookCode, m_pSet);
	DDX_Text(pDX, IDC_BUYDATE, m_oleBuyDate);
	//}}AFX_DATA_MAP
}

BOOL CLibraryView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CRecordView::PreCreateWindow(cs);
}

void CLibraryView::OnInitialUpdate()
{
	m_pSet = &GetDocument()->m_librarySet;
	CRecordView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();
	
	// 移动到第一条记录
	if (m_pSet->IsBOF() == FALSE)
		m_pSet->MoveFirst();
	else
		m_pSet->SetFieldNull(NULL);

	// 显示记录集内容
	ShowSetData();
}

/////////////////////////////////////////////////////////////////////////////
// CLibraryView printing

BOOL CLibraryView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CLibraryView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CLibraryView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CLibraryView diagnostics

#ifdef _DEBUG
void CLibraryView::AssertValid() const
{
	CRecordView::AssertValid();
}

void CLibraryView::Dump(CDumpContext& dc) const
{
	CRecordView::Dump(dc);
}

CLibraryDoc* CLibraryView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CLibraryDoc)));
	return (CLibraryDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CLibraryView database support
CRecordset* CLibraryView::OnGetRecordset()
{
	return m_pSet;
}


/////////////////////////////////////////////////////////////////////////////
// CLibraryView message handlers

void CLibraryView::OnQueryBorrow() 
{
	CQueryBorrowInfo dlg;
	if (dlg.DoModal() == IDOK)
	{
		// 各种查询条件
		CString sBookInfoCondition = "";
		CString sBorrowInfoCondition = "";
		CString sBorrowCardCondition = "";

		// 从书目信息表的查询
		if (dlg.m_sBookName != "")
			sBookInfoCondition += "书名 = '" + dlg.m_sBookName + "' AND ";
		if (dlg.m_sWriter != "")
			sBookInfoCondition += "作者 = '" + dlg.m_sWriter + "' AND ";
		if (dlg.m_sISBN != "")
			sBookInfoCondition += "书号 = '" + dlg.m_sISBN + "' AND ";
		if (dlg.m_sPublishingHouse != "")
			sBookInfoCondition += "出版社 = '" + dlg.m_sPublishingHouse + "' AND ";
		if (dlg.m_sYear != "" && dlg.m_sCondition != "" && dlg.m_sMonth != "")
		{
			// 得到月份
			CString sMonth;
			if (dlg.m_sMonth.Left(1) == "1")
				sMonth = dlg.m_sMonth.Left(2);
			else
				sMonth = dlg.m_sMonth.Mid(1, 1);

			if (dlg.m_sCondition == "等于")
				sBookInfoCondition += "出版日期 >= #" + sMonth + "/1/" + dlg.m_sYear + "# AND 出版日期 <= #" + sMonth + "/31/" + dlg.m_sYear + "# AND ";
			if (dlg.m_sCondition == "大于")
				sBookInfoCondition += "出版日期 > #" + sMonth + "/31/" + dlg.m_sYear + "# AND ";
			if (dlg.m_sCondition == "小于")
				sBookInfoCondition += "出版日期 < #" + sMonth + "/1/" + dlg.m_sYear + "# AND ";			
		}
		sBookInfoCondition += "图书ID > 0";

		if (sBookInfoCondition != "图书ID > 0")
		{
			// 关闭书目信息记录集
			if (m_BookInfoSet.IsOpen() == TRUE)
				m_BookInfoSet.Close();

			// 查找指定条件的记录
			m_BookInfoSet.m_strFilter = sBookInfoCondition;

			// 打开记录集
			m_BookInfoSet.Open();

			if (m_BookInfoSet.GetRecordCount() > 0)
			{
				// 为借阅信息表的查询添加条件
				CString sTemp;
				sTemp.Format("图书ID = %d AND ", m_BookInfoSet.m_BookInfoID);
				sBorrowInfoCondition += sTemp;
			}

			// 关闭记录集
			m_BookInfoSet.Close();
		}

		// 从借书卡信息表进行查询
		if (dlg.m_sBorrowCardNum != "")
			sBorrowCardCondition += "卡号 = " + dlg.m_sBorrowCardNum + " AND ";
		if (dlg.m_sBorrower != "")
			sBorrowCardCondition += "持有人 = '" + dlg.m_sBorrower + "' AND ";
		sBorrowCardCondition += "借书卡ID > 0";

		if (sBorrowCardCondition != "借书卡ID > 0")
		{
			// 关闭借书卡信息记录集
			if (m_BorrowerCardSet.IsOpen() == TRUE)
				m_BorrowerCardSet.Close();

			// 查找指定条件的记录
			m_BorrowerCardSet.m_strFilter = sBorrowCardCondition;

			// 打开记录集
			m_BorrowerCardSet.Open();

			if (m_BorrowerCardSet.GetRecordCount() > 0)
			{
				// 为借阅信息表的查询添加条件
				CString sTemp;
				sTemp.Format("借书卡ID = %d AND ", m_BorrowerCardSet.m_BorrowCardID);
				sBorrowInfoCondition += sTemp;
			}

			// 关闭记录集
			m_BorrowerCardSet.Close();
		}

		// 从借阅信息表进行查询
		if (dlg.m_sLibraryBookID != "")
			sBorrowInfoCondition += "馆藏图书编号 = '" + dlg.m_sLibraryBookID + "' AND ";
		if (dlg.m_bInLibrary == 0)
			sBorrowInfoCondition += "是否在库 = 0 AND ";
		if (dlg.m_bInLibrary == 1)
			sBorrowInfoCondition += "是否在库 = 1 AND ";
		sBorrowInfoCondition += "馆藏图书ID > 0";

		// 关闭数据库
		if (m_pSet->IsOpen() == TRUE)
			m_pSet->Close();

		// 查找到指定卡号的记录
		m_pSet->m_strFilter = sBorrowInfoCondition;

		// 打开数据库
		m_pSet->Open();

		// 移动到第一条记录
		if (m_pSet->IsBOF() == FALSE)
			m_pSet->MoveFirst();
	}
}

void CLibraryView::OnUnqueryBorrow() 
{
	// 关闭数据库
	if (m_pSet->IsOpen() == TRUE)
		m_pSet->Close();

	// 无限定条件
	m_pSet->m_strFilter = "";	

	// 打开数据库
	m_pSet->Open();
}

void CLibraryView::OnInsertBorrow() 
{
	// 移动到最后记录
	m_pSet->MoveLast();

	// 添加新的书目信息
	m_pSet->AddNew();
	m_bAdding = TRUE;

	// 设置空值
	SetNullValue();

	// 更新显示
	UpdateData(FALSE);
}

void CLibraryView::OnDeleteBorrow() 
{
	// 得到当前删除的书目ID
	int ID = m_pSet->m_BookInfoID;

	// 删除记录
	m_pSet->Delete();

	// 滚动到下一条记录
	m_pSet->MoveNext();

	// 防止越界
	if (m_pSet->IsEOF() == TRUE)
		m_pSet->MoveLast();
	if (m_pSet->IsBOF() == TRUE)
		m_pSet->SetFieldNull(NULL);

	// 更新显示
	UpdateData(FALSE);

	// 关闭记录集
	if (m_pSet->IsOpen())
		m_pSet->Close();

	// 对当前图书ID进行查询
	m_pSet->m_strFilter.Format("图书ID = %d", ID);

	// 打开记录集
	m_pSet->Open();

	// 如果删除的图书不存在复本则删除相关的书目信息记录
	if (m_pSet->GetDefaultConnect() == 0)
	{
		// 关闭记录集
		if (m_BookInfoSet.IsOpen())
			m_BookInfoSet.Close();

		// 查找对应的书目记录
		m_BookInfoSet.m_strFilter.Format("图书ID = %d", ID);

		// 打开记录集
		m_BookInfoSet.Open();

		// 删除该记录
		m_BookInfoSet.Delete();

⌨️ 快捷键说明

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