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

📄 querydlg.cpp

📁 LibraryManageDM.rar 数据库设计图书馆管理系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -