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

📄 settingdlg.cpp

📁 LibraryManageDM.rar 数据库设计图书馆管理系统
💻 CPP
字号:
// SettingDlg.cpp : implementation file
//

#include "stdafx.h"
#include "LibraryManage.h"
#include "SettingDlg.h"
#include "InputDlg.h"
#include "CommonFunc.h"
// CSettingDlg dialog

IMPLEMENT_DYNAMIC(CSettingDlg, CDialog)

CSettingDlg::CSettingDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CSettingDlg::IDD, pParent)
    , strSQL_(_T(""))
    , strType_(_T(""))
    , dNumber_(0)
    , strRSName_(_T(""))
    , bSelected_(FALSE)
    , strRemarks_(_T(""))
{    
}

CSettingDlg::~CSettingDlg()
{
}

void CSettingDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSettingDlg)
    DDX_Control(pDX, IDC_TYPELIST, ctrlTypeList);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CSettingDlg, CDialog)
	//{{AFX_MSG_MAP(CSettingDlg)
    ON_BN_CLICKED(IDC_ADD, OnBnClickedAdd)
    ON_BN_CLICKED(IDC_MOD, OnBnClickedMod)
    ON_BN_CLICKED(IDC_DEL, OnBnClickedDel)
    ON_NOTIFY(NM_CLICK, IDC_TYPELIST, OnNMClickTypelist)
	ON_NOTIFY(NM_DBLCLK, IDC_TYPELIST, OnDblclkTypelist)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

void CSettingDlg::RefreshData()
{
    BOOL ret;
    switch (type_)
    {
    case BOOK:
        if (bkRS.IsOpen())bkRS.Close();
        ret = bkRS.Open(AFX_DB_USE_DEFAULT_TYPE, strSQL_);
        break;
    case READER:
        if (rdRS.IsOpen())rdRS.Close();
        ret = rdRS.Open(AFX_DB_USE_DEFAULT_TYPE, strSQL_);
        break;
    case PUNISH:
        if (phRS.IsOpen())phRS.Close();
        ret = phRS.Open(AFX_DB_USE_DEFAULT_TYPE, strSQL_);
        break;
    }
    if(FALSE == ret)
    {
        AfxMessageBox(IDS_OPENDBFAIL);
        return ;
    }

    //// Updating a control or window with large amounts of data may cause 
    //// flicker. In such cases it may be better to turn off drawing

    ctrlTypeList.SetFocus();
    ctrlTypeList.DeleteAllItems();
    ctrlTypeList.SetRedraw(FALSE);
    int i;
    CString strTmp;
    switch (type_)
    {
    case BOOK:
        i = 0;
        while(!bkRS.IsEOF())
        {
            ctrlTypeList.InsertItem(i, bkRS.strTypeName_);
            strTmp.Format(_T("%d"), bkRS.nNumber_);
            ctrlTypeList.SetItemText(i, 1, strTmp);
            ctrlTypeList.SetItemText(i++, 2, bkRS.strRemarks_);
            bkRS.MoveNext();
        }
        bkRS.Close();
        break;
    case READER:
        i = 0;
        while(!rdRS.IsEOF())
        {
            ctrlTypeList.InsertItem(i, rdRS.strTypeName_);
            strTmp.Format(_T("%d"), rdRS.nNumber_);
            ctrlTypeList.SetItemText(i, 1, strTmp);
            strTmp.Format(_T("%f"), rdRS.dPunishLimit_);
            ctrlTypeList.SetItemText(i++, 2, strTmp);
            rdRS.MoveNext();
        }
        rdRS.Close();
        break;
    case PUNISH:
        i = 0;
        while(!phRS.IsEOF())
        {
            ctrlTypeList.InsertItem(i, phRS.strTypeName_);
            strTmp.Format(_T("%f"), phRS.dNumber_);
            ctrlTypeList.SetItemText(i, 1, strTmp);
            ctrlTypeList.SetItemText(i++, 2, phRS.strRemarks_);
            phRS.MoveNext();
        }
        phRS.Close();
        break;
    }
    ctrlTypeList.SetRedraw();
    ctrlTypeList.Invalidate();     //! 使窗口无效
    ctrlTypeList.UpdateWindow();   //! 强制更新窗口
}
// CSettingDlg message handlers
BOOL CSettingDlg::OnInitDialog()
{
    CDialog::OnInitDialog();

    // TODO:  Add extra initialization here
    if (!theApp.IsManager())
    {
        GetDlgItem(IDC_ADD)->EnableWindow(FALSE);
        GetDlgItem(IDC_MOD)->EnableWindow(FALSE);
        GetDlgItem(IDC_DEL)->EnableWindow(FALSE);
    }
    CString strWinText;
    CString strCol[3];
    strCol[2] = _T("备注说明");
    CRect rect;
    ctrlTypeList.GetClientRect(&rect);
    int width = rect.Width()/3;
    switch (type_)
    {
    case BOOK:
        strWinText = _T("图书设置");
        strCol[0]  = _T("图书类别");
        strCol[1]  = _T("可借天数");
        strSQL_    = _T("SELECT * FROM BOOKTYPE");
        strRSName_ = _T("BookType");
        break;
    case READER:
        strWinText = _T("读者设置");
        strCol[0]  = _T("读者类别");
        strCol[1]  = _T("可借书册数");
        strCol[2]  = _T("罚款限额");
        strSQL_    = _T("SELECT * FROM READERTYPE");
        strRSName_ = _T("ReaderType");
        break;
    case PUNISH:
        strWinText = _T("罚款设置");
        strCol[0]  = _T("罚款类别");
        strCol[1]  = _T("罚款系数");
        strSQL_    = _T("SELECT * FROM PUNISHTYPE");
        strRSName_ = _T("PunishType");
        break;
    }
    SetWindowText(strWinText);
    for (int i=0; i<3; ++i)
    {
        ctrlTypeList.InsertColumn(i, strCol[i], LVCFMT_LEFT, width);
    }
    ctrlTypeList.SetExtendedStyle(ctrlTypeList.GetExtendedStyle() | \
        LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);

    RefreshData();
    GetDlgItem(IDC_MOD)->EnableWindow(FALSE);
    GetDlgItem(IDC_DEL)->EnableWindow(FALSE);
    return TRUE;  // return TRUE unless you set the focus to a control
    // EXCEPTION: OCX Property Pages should return FALSE
}

void CSettingDlg::OnBnClickedAdd()
{
    // TODO: Add your control notification handler code here
    CInputDlg dlg;
    switch (type_)
    {
    case BOOK:
        dlg.strWindowTitle = _T("添加图书类别");
        dlg.strType = _T("图书类别");
        dlg.strContent = _T("可借天数");
        break;
    case READER:
        dlg.strWindowTitle = _T("添加读者类别");
        dlg.strType = _T("读者类别");
        dlg.strContent = _T("可借书册数");
        dlg.strMarks = _T("罚款限额");
        break;
    case PUNISH:
        dlg.strWindowTitle = _T("添加罚款类别");
        dlg.strType = _T("罚款类别");
        dlg.strContent = _T("罚款系数");
        break;
    }
    INT_PTR ret = dlg.DoModal();
    if (IDOK != ret) return;
    strType_ = dlg.GetTypeString();
    dNumber_ = dlg.GetNumber();
    strRemarks_ = dlg.GetRemarks();
    strSQL_.Format(_T("SELECT * FROM %s WHERE Type = '%s'"), strRSName_, strType_);
    BOOL bRet;
    switch (type_)
    {
    case BOOK:
        if (bkRS.IsOpen())bkRS.Close();
        if(!bkRS.Open(AFX_DB_USE_DEFAULT_TYPE, strSQL_))
        {
            AfxMessageBox(IDS_OPENDBFAIL);
            return ;
        }
        if(bkRS.GetRecordCount() != 0)
        {
            bkRS.Close();
            AfxMessageBox(IDS_TYPEEXIST);
            return;
        }
        bkRS.AddNew();
        bkRS.strTypeName_ = strType_;
        bkRS.nNumber_     = int(dNumber_);
        bkRS.strRemarks_  = strRemarks_;
        bRet = bkRS.Update();
        bkRS.Close();
        break;
    case READER:
        if (rdRS.IsOpen())rdRS.Close();
        if(!rdRS.Open(AFX_DB_USE_DEFAULT_TYPE, strSQL_))
        {
            AfxMessageBox(IDS_OPENDBFAIL);
            return ;
        }
        if(rdRS.GetRecordCount() != 0)
        {
            rdRS.Close();
            AfxMessageBox(IDS_TYPEEXIST);
            return;
        }
        rdRS.AddNew();
        rdRS.strTypeName_ = strType_;
        rdRS.nNumber_     = int(dNumber_);
        rdRS.dPunishLimit_  = StrToDouble(strRemarks_);
        bRet = rdRS.Update();
        rdRS.Close();
        break;
    case PUNISH:
        if (phRS.IsOpen())phRS.Close();
        if(!phRS.Open(AFX_DB_USE_DEFAULT_TYPE, strSQL_))
        {
            AfxMessageBox(IDS_OPENDBFAIL);
            return ;
        }
        if(phRS.GetRecordCount() != 0)
        {
            phRS.Close();
            AfxMessageBox(IDS_TYPEEXIST);
            return;
        }
        phRS.AddNew();
        phRS.strTypeName_ = strType_;
        phRS.dNumber_     = dNumber_;
        phRS.strRemarks_  = strRemarks_;
        bRet = phRS.Update();
        phRS.Close();
        break;
    }
    if (TRUE == bRet)
    {
        MessageBox(_T("添加成功!"), theApp.strSystemName);
        strSQL_.Format(_T("SELECT * FROM %s"), strRSName_);
        RefreshData();
    }
    else
    {
        MessageBox(_T("添加失败!"), theApp.strSystemName);
    }
}

void CSettingDlg::OnBnClickedMod()
{
    // TODO: Add your control notification handler code here
    if (FALSE == bSelected_)
    {
        MessageBox(_T("请选择一个型别!"), theApp.strSystemName);
        return;
    }
    CInputDlg dlg;
    switch (type_)
    {
    case BOOK:
        dlg.strWindowTitle = _T("修改图书类别");
        dlg.strType = _T("图书类别");
        dlg.strContent = _T("可借天数");
        break;
    case READER:
        dlg.strWindowTitle = _T("修改读者类别");
        dlg.strType = _T("读者类别");
        dlg.strContent = _T("可借书册数");
        dlg.strMarks = _T("罚款限额");
        break;
    case PUNISH:
        dlg.strWindowTitle = _T("修改罚款类别");
        dlg.strType = _T("罚款类别");
        dlg.strContent = _T("罚款金额");
        break;
    }
    dlg.SetTypeString(strType_);
    dlg.SetNumber(dNumber_);
    dlg.SetRemarks(strRemarks_);
    dlg.SetModify(TRUE);
	dlg.SetBPunish(FALSE);
    INT_PTR ret = dlg.DoModal();
    if (IDOK != ret) return;
    DOUBLE d = dlg.GetNumber();
    CString str = dlg.GetRemarks();
    if (type_ != PUNISH)
    {
        d = int(d);
    }
    if (dNumber_ == d && str == strRemarks_)
    {
        MessageBox(_T("未修改!"), theApp.strSystemName);
        return ;
    }
    dNumber_ = d;
    strRemarks_ = str;
    strSQL_.Format(_T("SELECT * FROM %s WHERE Type = '%s'"), strRSName_, strType_);
    BOOL bRet;
    switch (type_)
    {
    case BOOK:
        if (bkRS.IsOpen())bkRS.Close();
        if(!bkRS.Open(AFX_DB_USE_DEFAULT_TYPE, strSQL_))
        {
            AfxMessageBox(IDS_OPENDBFAIL);
            return ;
        }
        if(bkRS.GetRecordCount() == 0)
        {
            bkRS.Close();
            AfxMessageBox(IDS_TYPENOTEXIST);
            return;
        }
        bkRS.Edit();
        bkRS.strTypeName_ = strType_;
        bkRS.nNumber_     = int(dNumber_);
        bkRS.strRemarks_  = strRemarks_;
        bRet = bkRS.Update();
        bkRS.Close();
        break;
    case READER:
        if (rdRS.IsOpen())rdRS.Close();
        if(!rdRS.Open(AFX_DB_USE_DEFAULT_TYPE, strSQL_))
        {
            AfxMessageBox(IDS_OPENDBFAIL);
            return ;
        }
        if(rdRS.GetRecordCount() == 0)
        {
            rdRS.Close();
            AfxMessageBox(IDS_TYPENOTEXIST);
            return;
        }
        rdRS.Edit();
        rdRS.strTypeName_ = strType_;
        rdRS.nNumber_     = int(dNumber_);
        rdRS.dPunishLimit_  = StrToDouble(strRemarks_);
        bRet = rdRS.Update();
        rdRS.Close();
        break;
    case PUNISH:
        if (phRS.IsOpen())phRS.Close();
        if(!phRS.Open(AFX_DB_USE_DEFAULT_TYPE, strSQL_))
        {
            AfxMessageBox(IDS_OPENDBFAIL);
            return ;
        }
        if(phRS.GetRecordCount() == 0)
        {
            phRS.Close();
            AfxMessageBox(IDS_TYPENOTEXIST);
            return;
        }
        phRS.Edit();
        phRS.strTypeName_ = strType_;
        phRS.dNumber_     = dNumber_;
        phRS.strRemarks_  = strRemarks_;
        bRet = phRS.Update();
        phRS.Close();
        break;
    }
    if (TRUE == bRet)
    {
        MessageBox(_T("修改成功!"), theApp.strSystemName);
        strSQL_.Format(_T("SELECT * FROM %s"), strRSName_);
        RefreshData();
    }
    else
    {
        MessageBox(_T("修改失败!"), theApp.strSystemName);
    }
}

void CSettingDlg::OnBnClickedDel()
{
    // TODO: Add your control notification handler code here
    if (FALSE == bSelected_)
    {
        AfxMessageBox(IDS_PELEASESEL);
        return;
    }
    if (IDOK != MessageBox(_T("确定要删除该型别!"), theApp.strSystemName))
        return;
    strSQL_.Format(_T("SELECT * FROM %s WHERE Type = '%s'"), strRSName_, strType_);
    switch (type_)
    {
    case BOOK:
        if (bkRS.IsOpen())bkRS.Close();
        if(!bkRS.Open(AFX_DB_USE_DEFAULT_TYPE, strSQL_))
        {
            AfxMessageBox(IDS_OPENDBFAIL);
            return ;
        }
        if(bkRS.GetRecordCount() == 0)
        {
            bkRS.Close();
            AfxMessageBox(IDS_TYPENOTEXIST);
            return;
        }
        bkRS.Delete();
        bkRS.Close();
        break;
    case READER:
        if (rdRS.IsOpen())rdRS.Close();
        if(!rdRS.Open(AFX_DB_USE_DEFAULT_TYPE, strSQL_))
        {
            AfxMessageBox(IDS_OPENDBFAIL);
            return ;
        }
        if(rdRS.GetRecordCount() == 0)
        {
            rdRS.Close();
            AfxMessageBox(IDS_TYPENOTEXIST);
            return;
        }
        rdRS.Delete();
        rdRS.Close();
        break;
    case PUNISH:
        if (phRS.IsOpen())phRS.Close();
        if(!phRS.Open(AFX_DB_USE_DEFAULT_TYPE, strSQL_))
        {
            AfxMessageBox(IDS_OPENDBFAIL);
            return ;
        }
        if(phRS.GetRecordCount() == 0)
        {
            phRS.Close();
            AfxMessageBox(IDS_TYPENOTEXIST);
            return;
        }
        phRS.Delete();
        phRS.Close();
        break;
    }
    strType_.Empty();
    dNumber_ = 0;
    strSQL_.Format(_T("SELECT * FROM %s"), strRSName_);
        RefreshData();
}



void CSettingDlg::OnNMClickTypelist(NMHDR *pNMHDR, LRESULT *pResult)
{
    // TODO: Add your control notification handler code here
    UpdateData(TRUE);
    POSITION pos;
    CString strSQL;
    // 从列表中获取选择选项的资料
    int i = ctrlTypeList.GetSelectedCount();
    if (i <= 0)
    {
        bSelected_ = FALSE;
        GetDlgItem(IDC_MOD)->EnableWindow(FALSE);
        GetDlgItem(IDC_DEL)->EnableWindow(FALSE);
        return ;
    }
    else
    {
        pos = ctrlTypeList.GetFirstSelectedItemPosition();
        i = ctrlTypeList.GetNextSelectedItem(pos);
    }
    bSelected_ = TRUE;
    if (theApp.IsManager())
    {
        GetDlgItem(IDC_MOD)->EnableWindow(TRUE);
        GetDlgItem(IDC_DEL)->EnableWindow(TRUE);
    }
    strType_    = ctrlTypeList.GetItemText(i,0);
    strNumber_  = ctrlTypeList.GetItemText(i,1);
    strRemarks_ = ctrlTypeList.GetItemText(i, 2);
    dNumber_ = StrToDouble(strNumber_);
    *pResult = 0;
}

void CSettingDlg::OnDblclkTypelist(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	OnBnClickedMod();
	*pResult = 0;
}

⌨️ 快捷键说明

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