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

📄 bookborrowdlg.cpp

📁 mysql+visual C++编写的mini图书馆数据库管理系统
💻 CPP
字号:
// BookBorrowDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Library.h"
#include "BookRS1.h"
#include "BorrowRS.h"
#include "CardRS.h"
#include "BookBorrowDlg.h"
#include "CurrentBorrowDlg.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_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_BN_CLICKED(IDC_SEE_ALREADY_BORROW, OnSeeAlreadyBorrow)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CBookBorrowDlg message handlers

void CBookBorrowDlg::OnOK() 
{
	// TODO: 在此添加控件通知处理程序代码
	// 将编辑框中数据更新到成员变量m_strCardNum和m_strBookNum中
	UpdateData();
	// 如果管理员未登录,则拒绝借书
	if(flag==0)
	{
		AfxMessageBox("管理员登录后方可借书!\n请联系管理员进行登录操作!");
		CDialog::OnOK(); //调用基类CDialog的OnOK函数来关闭对话框
        return;
	}
    // 如果卡号不存在,则拒绝借书
	if(! IsValidCard(m_strCardNum)){
		CDialog::OnOK(); //调用基类CDialog的OnOK函数来关闭对话框
		return;
	}

	// 如果借书超过5本,提示还书后才可再借
	if(BookNumExceed(m_strCardNum)){
		CDialog::OnOK(); //调用基类CDialog的OnOK函数来关闭对话框
		return;
	}
	
	// 如果有书逾期未还,提示还书后才可再借
	if(BookTimeExceed(m_strCardNum)){
		CDialog::OnOK(); //调用基类CDialog的OnOK函数来关闭对话框
		return;
	}

	// 如果该书无库存,输出该书无库存,且输出最近归还的时间。
	if(! HaveStock(m_strBookNum)){
		CDialog::OnOK();
		return;
	}

	// 以上都没问题,才允许外借图书
	if(BorrowBook(m_strCardNum,m_strBookNum)){
		AfxMessageBox("恭喜,借书成功!");
	}
	else{
		AfxMessageBox("抱歉,借书失败!");
	}
	CDialog::OnOK();	
}

bool CBookBorrowDlg::IsValidCard(const CString &cardNum)
{
	// 检查card表是否已打开
	if(! m_cardSet.IsOpen()){
		m_cardSet.Open();
	}

	// 指定查询条件cno为用户卡号
	m_cardSet.m_strFilter.Format("cno='%s'",cardNum);
	m_cardSet.Requery();

	// 结果集为空则表明卡号不存在
	if(m_cardSet.IsEOF()){
		AfxMessageBox("对不起,您输入的卡号不正确!");
		return false;
	}

	// 以上情况不存在说明是正常使用中的卡号
	return true;

}

bool CBookBorrowDlg::HaveStock(const CString &bookNum)
{
	// 检查book表是否已打开
	if(! m_bookSet.IsOpen()){
		m_bookSet.Open();
	}

	// 指定查询条件ISBN为书编号
	m_bookSet.m_strFilter.Format("ISBN='%s'",bookNum);
	m_bookSet.Requery();

	// 结果集为空则表明书号不存在
	if(m_bookSet.IsEOF()){
		AfxMessageBox("对不起,你输入的书号不正确!");
		return false;
	}

	// 库存量为0,输出该书无库存,且输出最近归还的时间
	if(m_bookSet.m_stock_num==0){
        if(! m_borrowSet.IsOpen()){
		  m_borrowSet.Open();
		}
        m_borrowSet.m_strFilter.Format("ISBN='%s'",bookNum);
		CTime date=m_borrowSet.m_return_date;
		while(!m_borrowSet.IsEOF())
		{
			m_borrowSet.MoveNext();
			if(m_borrowSet.m_return_date<date)
				date=m_borrowSet.m_return_date;
		}
		CString sorrymsg="对不起,此图书暂无库存\n最近归还日期为\n";
        CString s = date.Format( "%Y-%m-%d %H:%M:%S" );
		sorrymsg+=s;
		CString end="\n请稍后再来借阅!";
        sorrymsg+=end; 
		AfxMessageBox(sorrymsg);   
		return false;
	}

	// 以上情况不存在说明该书可借
	return true;

}

bool CBookBorrowDlg::BorrowBook(const CString &cardNum, const CString &bookNum)
{
	CTimeSpan span(30,0,0,0); //30天的时间间隔
	CTime nextMonth = CTime::GetCurrentTime()+span;  //30天后的日期

	if(! m_bookSet.IsOpen()){
		m_bookSet.Open();
	}

	m_bookSet.m_strFilter.Format("ISBN='%s'",bookNum);
	m_bookSet.Requery();
	
	//开始修改记录
	m_bookSet.Edit();
	m_bookSet.m_stock_num=m_bookSet.m_stock_num-1;
	m_bookSet.Update();

	//在borrow表中增加一条借书记录
	if(! m_borrowSet.IsOpen()){
		m_borrowSet.Open();
	}

	m_borrowSet.AddNew();
	m_borrowSet.m_ISBN=bookNum;
	m_borrowSet.m_cno=cardNum;
	m_borrowSet.m_borrow_date=CTime::GetCurrentTime();
	m_borrowSet.m_return_date=nextMonth;
	m_borrowSet.m_dealer=GlobalAdminID;
	m_borrowSet.Update();
	m_borrowSet.Requery();
	return true;

}

bool CBookBorrowDlg::BookNumExceed(const CString &cardNum)
{
	int num=0;
    if(! m_borrowSet.IsOpen()){
		m_borrowSet.Open();
	}
	m_borrowSet.m_strFilter.Format("cno='%s'",cardNum);
    m_borrowSet.Requery();
	while(!m_borrowSet.IsEOF())
	{
		num++;
		m_borrowSet.MoveNext();
	}
	if(num>=5)
	{
		AfxMessageBox("对不起,你的借书上限是5本!\n请归还若干图书后再借!");
        return true;
	}
	else 
		return false;
}

bool CBookBorrowDlg::BookTimeExceed(const CString & cardNum)
{
	bool flag=false;
	CTime Today = CTime::GetCurrentTime();
	CString s="您有到期仍未归还的图书,请及时归还后再借!\n过期图书如下:\n";
    if(! m_borrowSet.IsOpen()){
		m_borrowSet.Open();
	}
    if(! m_bookSet.IsOpen()){
		m_bookSet.Open();
	}
	m_borrowSet.m_strFilter.Format("cno='%s'",cardNum);
    m_borrowSet.Requery();
	while(!m_borrowSet.IsEOF())
	{
		if(m_borrowSet.m_return_date<Today)
		{
			flag=true;
           	m_bookSet.m_strFilter.Format("ISBN='%s'",m_borrowSet.m_ISBN);
            m_bookSet.Requery();
			s+=m_bookSet.m_title;
			s+="\n";
		}
		m_borrowSet.MoveNext();
	}
	if(flag==true)
		AfxMessageBox(s);
    return flag;
}

void CBookBorrowDlg::OnSeeAlreadyBorrow() 
{
	// TODO: Add your control notification handler code here
	// 将编辑框中数据更新到成员变量m_strCardNum和m_strBookNum中
	UpdateData();
	GlobalCardNum=m_strCardNum;
	CCurrentBorrowDlg currentBorrowDlg;
	currentBorrowDlg.DoModal();
}

⌨️ 快捷键说明

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