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

📄 bookborrowdlg.cpp

📁 这个是我写的图书馆管理系统
💻 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 + -