// BookReadDlg.cpp : implementation file // #include "stdafx.h" #include "test.h" #include "BookReadDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CBookReadDlg dialog CBookReadDlg::CBookReadDlg(CWnd* pParent /*=NULL*/) : CDialog(CBookReadDlg::IDD, pParent) { //{{AFX_DATA_INIT(CBookReadDlg) m_book = _T(""); m_read = _T(""); //}}AFX_DATA_INIT /* CTime time; time.GetCurrentTime(); m_time=time; //初始化为当今的时间 */ } void CBookReadDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CBookReadDlg) DDX_Text(pDX, IDC_BOOKID, m_book); DDX_Text(pDX, IDC_READERID, m_read); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CBookReadDlg, CDialog) //{{AFX_MSG_MAP(CBookReadDlg) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CBookReadDlg message handlers void CBookReadDlg::OnOK() { // TODO: Add extra validation here UpdateData(true); if(m_read==""||m_book=="") { AfxMessageBox("必须填入全部信息"); return; } CoInitialize(NULL); _ConnectionPtr pconnect(__uuidof(Connection)); _RecordsetPtr record(__uuidof(Recordset)); _CommandPtr comd(__uuidof(Command)); pconnect->ConnectionString="Provider=MSDASQL.1;Persist Security Info=False;User ID=Administrator;Data Source=student;Initial Catalog=Library"; pconnect->Open("","","",NULL); comd->put_ActiveConnection(_variant_t((IDispatch *)pconnect)); //查看数据库中是否以有ID为m_book的书籍,如果没有,那么操作失败 //标准SQL语句 CString cmd="select * from BOOK where BID='"; cmd+=m_book; cmd+="'"; comd->CommandText=_bstr_t(cmd);//得到SQL语句 record=comd->Execute(NULL,NULL,adCmdText); if(record->end) { AfxMessageBox("数据库无此书籍或者读者的信息"); return; } //查看数据库中是否以有ID为m_read的读者,如果没有,那么操作失败 cmd="select * from READER where ID='"; cmd+=m_read; cmd+="'"; comd->CommandText=_bstr_t(cmd);//得到SQL语句 record=comd->Execute(NULL,NULL,adCmdText); if(record->end) { AfxMessageBox("数据库无此ID读者的信息"); return; } //查询读者以借书籍的册数 cmd="select count(*) from READBOOK where ID='"; cmd+=m_read; cmd+="'"; comd->CommandText=_bstr_t(cmd);//得到SQL语句 record=comd->Execute(NULL,NULL,adCmdText); //得到记录的总数目,在vCount.lVal中保存 variant_t vCount = record->GetCollect((_variant_t)((long)0)); //查询其借书权限,即可借册数 cmd="select * from READER where ID='"; cmd+=m_read; cmd+="'"; comd->CommandText=_bstr_t(cmd);//得到SQL语句 record=comd->Execute(NULL,NULL,adCmdText); CString num=(char*)(_bstr_t)record->GetCollect("NUM"); if(vCount.lVal>=atoi(num)) { AfxMessageBox("读者所借册数达到最高,请还书后再借"); return; } //查看数据库中是否以有ID为m_book的书籍的状态,如果为“不可借”那么书已经借过或者在由于其他原因不可借 cmd="select * from BOOK where BID='"; cmd+=m_book; cmd+="'"; comd->CommandText=_bstr_t(cmd);//得到SQL语句 record=comd->Execute(NULL,NULL,adCmdText); CString str="可借"; CString restr; restr=(char*)(_bstr_t)record->GetCollect("BSTATE"); int length=str.GetLength(); if(restr.Left(length)!=str) { AfxMessageBox("此书不可借"); return; } //将此书的存储状态设置为不可借 cmd="UPDATE BOOK SET BSTATE='不可借' WHERE BID='"; cmd+=m_book; cmd+="'"; comd->CommandText=_bstr_t(cmd);//得到SQL语句 record=comd->Execute(NULL,NULL,adCmdText); //进行数据存储 cmd="INSERT INTO READBOOK VALUES('"; cmd+=m_read;cmd+="','"; cmd+=m_book;cmd+="','"; CTime time = CTime::GetCurrentTime(); int year = time.GetYear(); //返回年 int month = time.GetMonth(); //返回月份 int date = time.GetDay(); // 返回日数 CString startTime; startTime.Format("%d-%d-%d",year,month,date); CString endTime; endTime.Format("%d-%d-%d",year,month+1,date); cmd+=startTime;cmd+="','"; cmd+=endTime;cmd+="')"; comd->CommandText=_bstr_t(cmd);//得到SQL语句 record=comd->Execute(NULL,NULL,adCmdText); AfxMessageBox("保存到数据库成功"); pconnect->Close(); comd.Release(); record.Release(); pconnect.Release(); CoUninitialize(); m_book=""; m_read=""; UpdateData(false); }