📄 querydlg.cpp
字号:
// QueryDlg.cpp : implementation file
//
#include "stdafx.h"
#include "QueryDlg.h"
#include "BookRegDlg.h"
#include "ReaderRegDlg.h"
#include "BorrowManageDlg.h"
#include "CommonFunc.h"
// CQueryDlg dialog
IMPLEMENT_DYNAMIC(CQueryDlg, CDialog)
CQueryDlg::CQueryDlg(CWnd* pParent /*=NULL*/)
: CDialog(CQueryDlg::IDD, pParent)
, strID_(_T(""))
, strName_(_T(""))
, strType_(_T(""))
, strSQL_(_T(""))
, bSQL_(FALSE)
, qType_(QBOOK)
, strSID_(_T(""))
, strSType_(_T(""))
, strSName_(_T(""))
, nCount_(0)
, strBookID_(_T(""))
, strReaderID_(_T(""))
, bSelected_(FALSE)
, CanModify_(FALSE)
, bRefresh_(FALSE)
{
}
CQueryDlg::~CQueryDlg()
{
}
void CQueryDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CQueryDlg)
DDX_Text(pDX, IDC_EDIT_ID, strID_);
DDX_Text(pDX, IDC_EDIT_NAME, strName_);
DDX_CBString(pDX, IDC_COMBO_TYPE, strType_);
DDX_Control(pDX, IDC_COMBO_TYPE, ctrlType_);
DDX_Text(pDX, IDC_EDIT_SQL, strSQL_);
DDX_Control(pDX, IDC_RESULTLIST, ctrlResultList);
DDX_Check(pDX, IDC_CHECK_SQL, bSQL_);
DDX_Text(pDX, IDC_ID, strSID_);
DDX_Text(pDX, IDC_TYPE, strSType_);
DDX_Text(pDX, IDC_NAME, strSName_);
DDX_Control(pDX, IDC_READERID, ctrlReader_);
DDX_Control(pDX, IDC_BOOKID, ctrlBook_);
DDX_Control(pDX, IDC_EDIT_READERID, ctrlReaderID_);
DDX_Control(pDX, IDC_EDIT_BOOKID, ctrlBookID_);
DDX_Text(pDX, IDC_EDIT_READERID, strReaderID_);
DDX_Text(pDX, IDC_EDIT_BOOKID, strBookID_);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CQueryDlg, CDialog)
//{{AFX_MSG_MAP(CQueryDlg)
ON_BN_CLICKED(IDOK, OnBnClickedOk)
ON_BN_CLICKED(IDC_CHECK_SQL, OnBnClickedCheckSql)
ON_NOTIFY(NM_CLICK, IDC_RESULTLIST, OnNMClickResultlist)
ON_BN_CLICKED(IDC_MODIFY, OnBnClickedModify)
ON_BN_CLICKED(IDC_DELETE, OnBnClickedDelete)
ON_NOTIFY(NM_DBLCLK, IDC_RESULTLIST, OnDblclkResultlist)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CQueryDlg::GenerateSQL(const CString& strKey0, const CString& strField0, BOOL IsStr0,
const CString& strKey1, const CString& strField1, BOOL IsStr1,
const CString& strKey2, const CString& strField2, BOOL IsStr2,
const CString& strRSName, CString& strSQL)
{
if (strKey0.IsEmpty() && strKey1.IsEmpty() && strKey2.IsEmpty())
{
strSQL.Format(_T("SELECT * FROM %s"), strRSName);
}// 查询所有(000)
else if (!strKey0.IsEmpty())
{
if (IsStr0)
{
strSQL.Format(_T("SELECT * FROM %s WHERE %s = '%s'"),
strRSName, strField0, strKey0);
}
else
{
strSQL.Format(_T("SELECT * FROM %s WHERE %s = %s"),
strRSName, strField0, strKey0);
}
}// 根据ID可以确定唯一的一个结果(包含100、101、110、111四种情况)
else if (strKey1.IsEmpty() && !strKey2.IsEmpty())
{
if (IsStr2)
{
strSQL.Format(_T("SELECT * FROM %s WHERE %s = '%s'"),
strRSName, strField2, strKey2);
}
else
{
strSQL.Format(_T("SELECT * FROM %s WHERE %s = %s"),
strRSName, strField2, strKey2);
}
}// 查询同一个类别的所有记录(001)
else if (!strKey1.IsEmpty() && strKey2.IsEmpty())
{
if (IsStr2)
{
strSQL.Format(_T("SELECT * FROM %s WHERE %s = '%s'"),
strRSName, strField1, strKey1);
}
else
{
strSQL.Format(_T("SELECT * FROM %s WHERE %s = %s"),
strRSName, strField1, strKey1);
}
}// 查询同一个名字的所有记录(010)
else
{
CString str[2];
if (IsStr1)str[0].Format(_T("'%s'"), strKey1);
else
str[0].Format(_T("%s"), strKey1);
if (IsStr2)str[1].Format(_T("'%s'"), strKey2);
else
str[1].Format(_T("%s"), strKey2);
strSQL.Format(_T("SELECT * FROM BookInfo WHERE %s = '%s' AND %s = %s"),
strRSName, strField2, str[2], strField1, str[1]);
}// 查询所给类别中具有所给名字的所有记录(011)
}
void CQueryDlg::InsertText(int nItem)
{
ctrlResultList.InsertItem(nItem, strDatas_[0]);
for (UINT i=1; i<nCount_; ++i)
{
ctrlResultList.SetItemText(nItem, i, strDatas_[i]);
}
}
// CQueryDlg message handlers
BOOL CQueryDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
CString strWinText;
GetDlgItem(IDC_MODIFY)->EnableWindow(FALSE);
GetDlgItem(IDC_DELETE)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_SQL)->EnableWindow(FALSE);
switch (qType_)
{
case QBOOK:
strWinText = _T("图书查询");
strSID_ = _T("图书编号");
strSName_ = _T("图书名");
strSType_ = _T("图书类型");
nCount_ = 11;
strColumns_[0] = _T("编号");
strColumns_[1] = _T("书名");
strColumns_[2] = _T("类型");
strColumns_[3] = _T("作者");
strColumns_[4] = _T("出版社");
strColumns_[5] = _T("价格");
strColumns_[6] = _T("出版日期");
strColumns_[7] = _T("入库日期");
strColumns_[8] = _T("在馆数");
strColumns_[9] = _T("借出数");
strColumns_[10] = _T("备注说明");
if (bktRS.IsOpen())bktRS.Close();
if (bktRS.Open(AFX_DB_USE_DEFAULT_TYPE, _T("SELECT * FROM BookType")))
{
while(!bktRS.IsEOF())
{
ctrlType_.AddString(bktRS.strTypeName_);
bktRS.MoveNext();
}
bktRS.Close();
}
GetDlgItem(IDC_DELETE)->SetWindowText(_T("遗失"));
break;
case QREADER:
strWinText = _T("读者查询");
strSID_ = _T("读者编号");
strSName_ = _T("读者姓名");
strSType_ = _T("读者类型");
nCount_ = 12;
strColumns_[0] = _T("编号");
strColumns_[1] = _T("姓名");
strColumns_[2] = _T("性别");
strColumns_[3] = _T("类型");
strColumns_[4] = _T("部门名");
strColumns_[5] = _T("联系电话");
strColumns_[6] = _T("手机号码");
strColumns_[7] = _T("邮箱");
strColumns_[8] = _T("注册日期");
strColumns_[9] = _T("所欠罚款");
strColumns_[10] = _T("住址");
strColumns_[11] = _T("备注说明");
if (rdtRS.IsOpen())rdtRS.Close();
if (rdtRS.Open(AFX_DB_USE_DEFAULT_TYPE, _T("SELECT * FROM ReaderType")))
{
while(!rdtRS.IsEOF())
{
ctrlType_.AddString(rdtRS.strTypeName_);
rdtRS.MoveNext();
}
rdtRS.Close();
}
GetDlgItem(IDC_DELETE)->SetWindowText(_T("注销"));
break;
case QBORROW:
strWinText = _T("借阅信息查询");
strSID_ = _T("借阅记录编号");
nCount_ = 8;
strColumns_[0] = _T("读者编号");
strColumns_[1] = _T("图书编号");
strColumns_[2] = _T("借阅日期");
strColumns_[3] = _T("归还日期");
strColumns_[4] = _T("是否归还");
strColumns_[5] = _T("可否续借");
strColumns_[6] = _T("操作员");
strColumns_[7] = _T("归还期限");
ctrlReader_.ShowWindow(SW_NORMAL);
ctrlBook_.ShowWindow(SW_NORMAL);
ctrlReaderID_.ShowWindow(SW_NORMAL);
ctrlBookID_.ShowWindow(SW_NORMAL);
GetDlgItem(IDC_NAME)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_TYPE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_COMBO_TYPE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDIT_NAME)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_DELETE)->SetWindowText(_T("归还"));
GetDlgItem(IDC_MODIFY)->SetWindowText(_T("续借"));
break;
}
SetWindowText(strWinText);
CRect rect;
ctrlResultList.GetClientRect(&rect);
int width = rect.Width() / 8;
for (UINT i=0; i<nCount_; ++i)
{
ctrlResultList.InsertColumn(i, strColumns_[i], LVCFMT_LEFT, width);
}
ctrlResultList.SetExtendedStyle(ctrlResultList.GetExtendedStyle() | \
LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
HICON hIcon;
hIcon = theApp.LoadIcon(IDI_QUERYICON);
SetIcon(hIcon, FALSE);
UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CQueryDlg::OnBnClickedCheckSql()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if (bSQL_)
GetDlgItem(IDC_EDIT_SQL)->EnableWindow(TRUE);
else
GetDlgItem(IDC_EDIT_SQL)->EnableWindow(FALSE);
UpdateData(FALSE);
}
void CQueryDlg::OnNMClickResultlist(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
POSITION pos;
// 从列表中获取选择选项的资料
int i = ctrlResultList.GetSelectedCount();
if (i <= 0)
{
bSelected_ = FALSE;
GetDlgItem(IDC_MODIFY)->EnableWindow(FALSE);
GetDlgItem(IDC_DELETE)->EnableWindow(FALSE);
return ;
}
else
{
pos = ctrlResultList.GetFirstSelectedItemPosition();
i = ctrlResultList.GetNextSelectedItem(pos);
}
bSelected_ = TRUE;
for (UINT j=0; j<nCount_; ++j)
{
strDatas_[j] = ctrlResultList.GetItemText(i, j);
}
if (theApp.IsManager())
{
CanModify_ = TRUE;
if ((qType_ == QBORROW) && (strDatas_[4] != _T("否")))
{
GetDlgItem(IDC_MODIFY )->EnableWindow(FALSE);
GetDlgItem(IDC_DELETE)->EnableWindow(FALSE);
}
else
{
GetDlgItem(IDC_MODIFY )->EnableWindow(TRUE);
GetDlgItem(IDC_DELETE)->EnableWindow(TRUE);
}
}
else
{
if (qType_ == READER)
{
if (strDatas_[0] == theApp.GetOperator())
{
CanModify_ = TRUE;
GetDlgItem(IDC_MODIFY)->EnableWindow(TRUE);
}
}
}
*pResult = 0;
}
void CQueryDlg::OnBnClickedOk()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
CString strSQL;
CString strField[3];
CString strKey[3];
BOOL IsStr[3];
if (bSQL_)
{
strSQL = strSQL_;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -