📄 libraryview.cpp
字号:
// 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 + -