📄 bookborrowdlg.cpp
字号:
// BookBorrowDlg.cpp : implementation file
//
#include "stdafx.h"
#include "library.h"
//以下头文件是手工添加的
#include "BookRS1.h"
#include "BorrowRS.h"
#include "CardRS.h"
#include "BookBorrowDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CBookBorrowDlg dialog
CBookBorrowDlg::CBookBorrowDlg(CWnd* pParent /*=NULL*/)
: CDialog(CBookBorrowDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CBookBorrowDlg)
m_strBookNum = _T("");
m_strCardNum = _T("");
//}}AFX_DATA_INIT
}
void CBookBorrowDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CBookBorrowDlg)
DDX_Control(pDX, IDC_LIST_RESULT, m_listResult);
DDX_Control(pDX, IDC_LIST_DETAIL, m_listDetail);
DDX_Text(pDX, IDC_BOOK_NUM, m_strBookNum);
DDX_Text(pDX, IDC_CARD_NUM, m_strCardNum);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CBookBorrowDlg, CDialog)
//{{AFX_MSG_MAP(CBookBorrowDlg)
ON_LBN_SELCHANGE(IDC_LIST_RESULT, OnSelchangeListResult)
ON_BN_CLICKED(IDC_CARD_DETAIL, OnCardDetail)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CBookBorrowDlg message handlers
void CBookBorrowDlg::OnCardDetail()
{
// TODO: Add your control notification handler code here
UpdateData();
CString tmpstr;
CString bookNumm;
CTime today=CTime::GetCurrentTime();
CTimeSpan diffDays;
m_listResult.ResetContent();
if (! IsValidCard(m_strCardNum))
{
return;
}
if (!m_borrowSet.IsOpen())
{
m_borrowSet.Open();
}
m_borrowSet.m_strFilter.Format("cno = %s and return_date is null",m_strCardNum);
m_borrowSet.Requery();
if (m_borrowSet.IsEOF())
{
AfxMessageBox("无借书记录!");
return;
}
while(!m_borrowSet.IsEOF())
{
if (!m_bookSet.IsOpen())
m_bookSet.Open();
CTime myTime=m_borrowSet.m_borrow_date;
CString strTime=myTime.Format("%Y-%m-%d %H:%M:%S");
bookNumm=m_borrowSet.m_bno;
m_bookSet.m_strFilter.Format("bno= '%s'",bookNumm);
m_bookSet.Requery();
tmpstr=m_bookSet.m_title+" 出借日期:"+strTime;
m_listResult.AddString(tmpstr);
m_borrowSet.MoveNext();
}
}
void CBookBorrowDlg::OnOK()
{
UpdateData();//将编辑框中的数据更新到成员变量m_strCardNum和m_strBookNum中
//如果卡号不存在,或者已经挂失、注销等,则拒绝借书
if (!IsValidCard(m_strCardNum)){
//CDialog::OnOK();//调用基类CDialog的OnOK函数来关闭对话框
return;
}
//如果有书过期,或者借书总数超过12本,也返回
if (AnyBookExpired(m_strCardNum)){
AfxMessageBox("借书失败");
CDialog::OnOK();
return;
}
//以上情况都没有问题,才允许外借图书
if (BorrowBook(m_strCardNum,m_strBookNum)){
AfxMessageBox("借书成功");
OnCardDetail();
}
else
{
AfxMessageBox("借书失败");
}
//CDialog::OnOK();
}
bool CBookBorrowDlg::IsValidCard(const CString &cardNum)
{
if (!m_cardSet.IsOpen())
{
m_cardSet.Open();
}
//指定查询条件Cno为用户卡号
if (cardNum == "")
{
AfxMessageBox("请输入卡号!");
return false;
}
else
{
m_cardSet.m_strFilter.Format("Cno='%s'",cardNum);
m_cardSet.Requery();
//结果集为空则表明卡号不存在
if (m_cardSet.IsEOF())
{
AfxMessageBox("该卡号不存在");
return false;
}
}
//以上情况均不存在表明是正常使用中的卡号
return true;
}
bool CBookBorrowDlg::AnyBookExpired(const CString &cardNum)
{
int nBooks=0;
bool flag=false;
CTime today=CTime::GetCurrentTime();
CTimeSpan diffDays;
if (!m_borrowSet.IsOpen())
m_borrowSet.Open();
m_borrowSet.m_strFilter.Format("cno= '%s' and return_date is null ",cardNum);
m_borrowSet.Requery();
while (!m_borrowSet.IsEOF())
{
nBooks++; //总借书数+
CTime myTime=m_borrowSet.m_borrow_date;
diffDays=today-m_borrowSet.m_borrow_date;
if(diffDays.GetDays()>90)
{
AfxMessageBox("有书过期了,不能借书!");
flag = true;
}
m_borrowSet.MoveNext();
}
if ( nBooks > 4 )
{
AfxMessageBox("抱歉,借书总数已达到上限!");
flag = true;
}
return flag;
}
bool CBookBorrowDlg::BorrowBook(const CString &cardNum, const CString &bookNum)
{
CLibraryApp *App = (CLibraryApp *)AfxGetApp();
CTime MinTime = CTime::GetCurrentTime();
if (bookNum == "")
{
AfxMessageBox("请输入图书编号");
return false;
}
if (!m_bookSet.IsOpen())
m_bookSet.Open();
m_bookSet.m_strFilter.Format("bno= '%s'",bookNum);
m_bookSet.Requery();
if (m_bookSet.IsEOF())
{
AfxMessageBox("此书号不存在,请检查输入是否正确。");
return false;
}
if (m_bookSet.m_stockednum==0)
{
if(!m_borrowSet.IsOpen())
m_borrowSet.Open();
m_borrowSet.m_strFilter.Format("bno= '%s' and return_date is null",bookNum);
m_borrowSet.Requery();
while(!m_borrowSet.IsEOF())
{
if (m_borrowSet.m_borrow_date<MinTime)
MinTime=m_borrowSet.m_borrow_date;
m_borrowSet.MoveNext();
}
CTimeSpan span(90,0,0,0);
CTime myTime=MinTime+span;
CString strTime;
strTime=myTime.Format("%Y-%m-%d %H:%M:%S");
AfxMessageBox("该书暂无库存,最近归还时间为 "+strTime+" ");
return false;
}
m_bookSet.Edit();
m_bookSet.m_stockednum--;
m_bookSet.Update();
m_bookSet.Requery();
if(!m_borrowSet.IsOpen())
m_borrowSet.Open();
m_borrowSet.AddNew();
m_borrowSet.m_bno = bookNum;
m_borrowSet.m_cno = cardNum;
m_borrowSet.m_borrow_date = CTime::GetCurrentTime();
m_borrowSet.m_aid = App->admin_ID; //Need to be changed
m_borrowSet.Update();
m_borrowSet.Requery();
return true;
}
void CBookBorrowDlg::OnSelchangeListResult()
{
// TODO: Add your control notification handler code here
CString aColCaption[9];
aColCaption[0]="图书编号: ";
aColCaption[1]="书名: ";
aColCaption[2]="类别: ";
aColCaption[3]="出版年份: ";
aColCaption[4]="出版社: ";
aColCaption[5]="作者: ";
aColCaption[6]="价格: ";
aColCaption[7]="总藏书量: ";
aColCaption[8]="现藏数量: ";
m_listDetail.ResetContent();
int curSel;
CString strDetail;
CString strline;
curSel=m_listResult.GetCurSel();
m_borrowSet.SetAbsolutePosition(curSel+1);
for (unsigned int i=0;i<m_bookSet.m_nFields;i++)
{
CString bookNumm=m_borrowSet.m_bno;
if (!m_bookSet.IsOpen())
m_bookSet.Open();
bookNumm=m_borrowSet.m_bno;
m_bookSet.m_strFilter.Format("bno= '%s'",bookNumm);
m_bookSet.Requery();
m_bookSet.GetFieldValue(i,strDetail);
strline.Empty();
strline+=aColCaption[i];
strline+=strDetail;
m_listDetail.AddString(strline);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -