📄 settingdlg.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 + -