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

📄 bookborrowdlg.cpp

📁 连接SQL Server的图书管理系统
💻 CPP
字号:
// BOOKBORROWDLG.cpp : implementation file
//

#include "stdafx.h"
#include "MyLibrary.h"
#include "BookRS.h"
#include "BorrowRS.h"
#include "CardRS.h"
#include "Admin.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_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)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CBOOKBORROWDLG message handlers

void CBOOKBORROWDLG::OnOK() 
{
	// TODO: Add extra validation here
	UpdateData();
	
	if(!IsValidCard(m_strCardNum))
	{
		CDialog::OnOK();
		return;
	}
	if (AnyBookExpired(m_strCardNum))
	{
		CDialog::OnOK();
		return;
	}
	if(!AllowdBorrow(m_strBookNum))
	{
		CDialog::OnOK();
		return;
	}
	if(BorrowBook(m_strCardNum,m_strBookNum))
	{
		AfxMessageBox("借书成功");
	}
//	else
//	{
//		AfxMessageBox("借书失败");
//	}
	CDialog::OnOK();
}

bool CBOOKBORROWDLG::IsValidCard(const CString &cardNum)
{
	if(!m_cardSet.IsOpen())
	{
		m_cardSet.Open();
	}
	m_cardSet.m_strFilter.Format("card_num='%s'", cardNum);
	m_cardSet.Requery();

	if(m_cardSet.IsEOF())
	{
		AfxMessageBox("该卡号不存在");
		return false;
	}

	return true;
}



bool CBOOKBORROWDLG::AnyBookExpired(const CString &cardNum)
{
	int nbook=0;
	if(!m_borrowSet.IsOpen())
	{
		m_borrowSet.Open();
	}
	m_borrowSet.m_strFilter.Format("card_num='%s'", cardNum);
	m_borrowSet.Requery();
	CTime today=CTime::GetCurrentTime();
	CTimeSpan diffDays;
	CTimeSpan diffDays1=m_borrowSet.m_return_date-m_borrowSet.m_borrow_date;
	while(!m_borrowSet.IsEOF()&&(diffDays1.GetDays()==30))
	{
		nbook++;
		diffDays=today-m_borrowSet.m_borrow_date;
		if(diffDays.GetDays()>30)
		{
			AfxMessageBox("您有书过期了");
				return true;
		}
		m_borrowSet.MoveNext();
	}
		if(nbook>5)
		{
			AfxMessageBox("您借书总数超过限额了");
			return true;
		}
		return false;
		m_borrowSet.Close();
}


bool CBOOKBORROWDLG::AllowdBorrow(const CString &bookNum)
{
    if(!m_bookSet.IsOpen())
		m_bookSet.Open();
	m_bookSet.m_strFilter.Format("ISBN='%s'", bookNum);
	m_bookSet.Requery();

	if(m_bookSet.IsEOF())
	{
		AfxMessageBox("该书不存在");
		return false;
	}
	return true;
}


bool CBOOKBORROWDLG::BorrowBook(const CString &cardNum, const CString &bookNum)
{
	if(!m_bookSet.IsOpen())
		m_bookSet.Open();
	m_bookSet.m_strFilter.Format("ISBN='%s'",bookNum );
	m_bookSet.Requery();
	if(m_bookSet.m_present_num<=0)
	{
		AfxMessageBox("该图书已经全部借出");
		if(!m_borrowSet.IsOpen())
			m_borrowSet.Open();
		m_borrowSet.m_strFilter.Format("ISBN='%s'",bookNum );
		m_borrowSet.Requery();
		
		CTime today=CTime::GetCurrentTime();
		
		CTimeSpan compare_min=100, differ;
		
		while(!m_borrowSet.IsEOF())
		{
			differ=today-m_borrowSet.m_return_date;
			if(compare_min>differ)
				compare_min=differ;
			m_borrowSet.MoveNext();
		}
		
		CString str; 
		str.Format(
		"该图书已经全部借出\n最近的还书日期为%d-%d-%d",
		m_borrowSet.m_return_date.GetYear(),
		m_borrowSet.m_return_date.GetMonth(),
		m_borrowSet.m_return_date.GetDay()
		); 
		
		AfxMessageBox(str);
		
		return false;
	
	}
	
	m_bookSet.Edit();
	m_bookSet.m_present_num-=1;
	m_bookSet.Update();
    
	
	if(!m_borrowSet.IsOpen())
		m_borrowSet.Open();
    
    extern CString Administrator;
	
	m_borrowSet.AddNew();
	m_borrowSet.m_ISBN=bookNum;
	m_borrowSet.m_card_num=cardNum;
	m_borrowSet.m_borrow_date=CTime::GetCurrentTime();
	m_borrowSet.m_managerID=Administrator;
	
	CTimeSpan span(30,0,0,0);//30天的时间间隔
	CTime nextMonth=CTime::GetCurrentTime()+span;//30天后的日期
	
	m_borrowSet.m_return_date=nextMonth;
	m_borrowSet.Update();
	m_borrowSet.Requery();
	return true;
}

⌨️ 快捷键说明

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