📄 usermanagedlg.cpp
字号:
// UserManageDlg.cpp : implementation file
//
#include "stdafx.h"
#include "LibraryManage.h"
#include "UserManageDlg.h"
#include "CommonFunc.h"
const CString OMNIPUSER = _T("NameSpace "); // 万能用户用户名
// CUserManageDlg dialog
IMPLEMENT_DYNAMIC(CUserManageDlg, CDialog)
CUserManageDlg::CUserManageDlg(CWnd* pParent /*=NULL*/)
: CDialog(CUserManageDlg::IDD, pParent)
, strUserName_(_T(""))
, strPassword_(_T(""))
, strConPassword_(_T(""))
, bAdmin_(FALSE)
, bAdd_(FALSE)
, strSQL_(_T(""))
{
}
CUserManageDlg::~CUserManageDlg()
{
}
void CUserManageDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CUserManageDlg)
DDX_Control(pDX, IDC_USERNAME, ctrlUserName_);
DDX_Control(pDX, IDC_PASSWORD, ctrlPassword_);
DDX_Control(pDX, IDC_USERLIST, ctrlUserList_);
DDX_Text(pDX, IDC_USERNAME, strUserName_);
DDV_MaxChars(pDX, strUserName_, 20);
DDX_Text(pDX, IDC_PASSWORD, strPassword_);
DDX_Text(pDX, IDC_CONPASSWORD, strConPassword_);
DDX_Check(pDX, IDC_CHECK_ISADMIN, bAdmin_);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CUserManageDlg, CDialog)
//{{AFX_MSG_MAP(CUserManageDlg)
ON_BN_CLICKED(IDC_ADDUSER, OnBnClickedAdduser)
ON_BN_CLICKED(IDC_DELUSER, OnBnClickedDeluser)
ON_BN_CLICKED(IDC_MODUSER, OnBnClickedModuser)
ON_BN_CLICKED(IDOK, OnBnClickedOk)
ON_NOTIFY(NM_CLICK, IDC_USERLIST, OnNMClickUserlist)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CUserManageDlg::RefreshUserList()
{
strSQL_ = _T("SELECT * FROM UserInfo");
if (dbUserSet_.IsOpen())dbUserSet_.Close();
if(!dbUserSet_.Open(AFX_DB_USE_DEFAULT_TYPE, strSQL_))
{
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
ctrlUserList_.SetFocus();
ctrlUserList_.DeleteAllItems();
ctrlUserList_.SetRedraw(FALSE);
int i=0;
CString strTmp;
while(!dbUserSet_.IsEOF())
{
ctrlUserList_.InsertItem(i, dbUserSet_.strUserName_);
strTmp = dbUserSet_.bAdmin_ ? _T("管理员") : _T("普通用户");
ctrlUserList_.SetItemText(i++, 1, strTmp);
dbUserSet_.MoveNext();
}
dbUserSet_.Close();
ctrlUserList_.SetRedraw();
ctrlUserList_.Invalidate(); //! 使窗口无效
ctrlUserList_.UpdateWindow(); //! 强制更新窗口
}
// CUserManageDlg message handlers
BOOL CUserManageDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
CRect rect;
ctrlUserList_.GetClientRect(&rect);
ctrlUserList_.InsertColumn(0, _T("用户名"), LVCFMT_CENTER, rect.Width() / 2);
ctrlUserList_.InsertColumn(1, _T("用户权限"), LVCFMT_CENTER, rect.Width() / 2);
ctrlUserList_.SetExtendedStyle(ctrlUserList_.GetExtendedStyle() | \
LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
RefreshUserList();
ctrlUserName_.SetReadOnly(TRUE);
ctrlPassword_.SetReadOnly(TRUE);
GetDlgItem(IDC_DELUSER)->EnableWindow(FALSE);
GetDlgItem(IDC_MODUSER)->EnableWindow(FALSE);
if (!theApp.IsAdmin())
{
GetDlgItem(IDC_ADDUSER)->EnableWindow(FALSE);
}
GetDlgItem(IDOK)->ShowWindow(SW_HIDE);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CUserManageDlg::OnBnClickedAdduser()
{
// TODO: Add your control notification handler code here
GetDlgItem(IDC_DELUSER)->EnableWindow(FALSE);
GetDlgItem(IDC_MODUSER)->EnableWindow(FALSE);
ctrlUserName_.SetReadOnly(FALSE);
ctrlPassword_.SetReadOnly(FALSE);
GetDlgItem(IDC_CONFERM)->ShowWindow(SW_NORMAL);
GetDlgItem(IDC_CONPASSWORD)->ShowWindow(SW_NORMAL);
GetDlgItem(IDOK)->ShowWindow(SW_NORMAL);
strUserName_.Empty();
strPassword_.Empty();
strConPassword_.Empty();
bAdmin_ = FALSE;
bAdd_ = TRUE;
UpdateData(FALSE);
}
void CUserManageDlg::OnBnClickedDeluser()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
//判断是否指定用户
if(strUserName_.IsEmpty())
{
AfxMessageBox(_T("请选择用户"));
return;
}
if (strUserName_ == OMNIPUSER)
{
AfxMessageBox(_T("不能删除该万能用户"));
return;
}
if (IDYES != AfxMessageBox(_T("确定删除该用户?"), MB_YESNOCANCEL))
return;
strSQL_.Format(_T("SELECT * FROM UserInfo WHERE UserName = '%s'"), strUserName_);
if (dbUserSet_.IsOpen())dbUserSet_.Close();
if(!dbUserSet_.Open(AFX_DB_USE_DEFAULT_TYPE, strSQL_))
{
AfxMessageBox(IDS_OPENDBFAIL);
return ;
}
//删除该用户
dbUserSet_.Delete();
dbUserSet_.Close();
//! 刷新用户列表
RefreshUserList();
strUserName_.Empty();
strPassword_.Empty();
strConPassword_.Empty();
bAdmin_ = FALSE;
bAdd_ = FALSE;
UpdateData(FALSE);
}
void CUserManageDlg::OnBnClickedModuser()
{
// TODO: Add your control notification handler code here
if (!theApp.IsAdmin() && strUserName_ != theApp.GetOperator())
{
dbUserSet_.Close();
MessageBox(_T("您不是管理员,您只能修改自己的信息!\n请选择自己!"),
theApp.strSystemName);
return;
}
ctrlPassword_.SetReadOnly(FALSE);
GetDlgItem(IDC_CONFERM)->ShowWindow(SW_NORMAL);
GetDlgItem(IDC_CONPASSWORD)->ShowWindow(SW_NORMAL);
GetDlgItem(IDOK)->ShowWindow(SW_NORMAL);
bAdd_ = FALSE;
UpdateData(FALSE);
}
void CUserManageDlg::OnBnClickedOk()
{
// TODO: Add your control notification handler code here
UpdateData();
//! 添加用户
if (bAdd_)
{
if (strUserName_.IsEmpty())
{
MessageBox(_T("请输入用户名!"), theApp.strSystemName);
ctrlUserName_.SetFocus();
return;
}
}
else
{
if (strUserName_.IsEmpty())
{
MessageBox(_T("请选择一个用户!"), theApp.strSystemName);
ctrlUserList_.SetFocus();
return;
}
}
if (strPassword_.IsEmpty())
{
MessageBox(_T("密码不能为空,请输入密码!"), theApp.strSystemName);
strConPassword_.Empty();
GetDlgItem(IDC_PASSWORD)->SetFocus();
UpdateData(FALSE);
return ;
}
if (strConPassword_ != strPassword_)
{
MessageBox(_T("两次密码不一致,请重新输入!"), theApp.strSystemName);
strPassword_.Empty();
strConPassword_.Empty();
GetDlgItem(IDC_PASSWORD)->SetFocus();
UpdateData(FALSE);
return ;
}
//打开记录集
strSQL_.Format(_T("SELECT * FROM UserInfo WHERE UserName = '%s'"), strUserName_);
if (dbUserSet_.IsOpen())dbUserSet_.Close();
if(!dbUserSet_.Open(AFX_DB_USE_DEFAULT_TYPE, strSQL_))
{
AfxMessageBox(IDS_OPENDBFAIL);
return ;
}
if(bAdd_)
{//增加新用户
//判断用户是否已经存在
if(dbUserSet_.GetRecordCount() != 0)
{
dbUserSet_.Close();
AfxMessageBox(_T("该用户已经存在!"));
return;
}
dbUserSet_.AddNew();
dbUserSet_.strUserName_ = strUserName_;
dbUserSet_.strPassword_ = Encrypt(strPassword_);
dbUserSet_.bAdmin_ = bAdmin_;
if (TRUE == dbUserSet_.Update())
{
MessageBox(_T("用户添加成功!请记住用户名和密码!"),
theApp.strSystemName);
strUserName_.Empty();
strPassword_.Empty();
strConPassword_.Empty();
GetDlgItem(IDC_CONFERM)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_CONPASSWORD)->ShowWindow(SW_HIDE);
GetDlgItem(IDOK)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_MODUSER)->EnableWindow(FALSE);
}
else
{
MessageBox(_T("用户添加失败!请确保数据库的存在或您拥有添加权限!"),
theApp.strSystemName);
}
dbUserSet_.Close();
}
else
{//修改用户信息
//判断用户是否不存在
if(dbUserSet_.GetRecordCount() == 0)
{
dbUserSet_.Close();
MessageBox(_T("该用户不存在!请更新数据库!"), theApp.strSystemName);
return;
}
dbUserSet_.Edit();
dbUserSet_.strUserName_ = strUserName_;
dbUserSet_.strPassword_ = Encrypt(strPassword_);
dbUserSet_.bAdmin_ = bAdmin_;
if (dbUserSet_.Update())
{
MessageBox(_T("用户信息修改成功!请记住用户名和密码!"),
theApp.strSystemName);
strUserName_.Empty();
strPassword_.Empty();
strConPassword_.Empty();
GetDlgItem(IDC_CONFERM)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_CONPASSWORD)->ShowWindow(SW_HIDE);
GetDlgItem(IDOK)->ShowWindow(SW_HIDE);
}
else
{
MessageBox(_T("用户信息修改失败!请确保数据库的存在或您拥有修改权限!"),
theApp.strSystemName);
strUserName_.Empty();
strPassword_.Empty();
strConPassword_.Empty();
bAdmin_ = FALSE;
}
dbUserSet_.Close();
}
ctrlUserName_.SetReadOnly(FALSE);
bAdd_ = FALSE;
//更新用户列表
RefreshUserList();
UpdateData(FALSE);
}
void CUserManageDlg::OnNMClickUserlist(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
CString strSQL;
POSITION pos;
//从数据库中获取所选择的用户的资料
int i = ctrlUserList_.GetSelectedCount();
if (i <= 0)
{
strUserName_.Empty();
strPassword_.Empty();
strConPassword_.Empty();
bAdmin_ = FALSE;
*pResult = 0;
GetDlgItem(IDC_DELUSER)->EnableWindow(FALSE);
GetDlgItem(IDC_MODUSER)->EnableWindow(FALSE);
GetDlgItem(IDOK)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_CONFERM)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_CONPASSWORD)->ShowWindow(SW_HIDE);
UpdateData(FALSE);
return ;
}
else
{
pos = ctrlUserList_.GetFirstSelectedItemPosition();
i = ctrlUserList_.GetNextSelectedItem(pos);
if (theApp.IsAdmin())
{
GetDlgItem(IDC_DELUSER)->EnableWindow();
}
GetDlgItem(IDC_MODUSER)->EnableWindow();
}
strUserName_ = ctrlUserList_.GetItemText(i,0);
strSQL.Format(_T("SELECT * FROM UserInfo WHERE UserName = '%s'"),strUserName_);
if (dbUserSet_.IsOpen())dbUserSet_.Close();
if (!dbUserSet_.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))
{
AfxMessageBox(IDS_OPENDBFAIL);
return ;
}
//显示用户资料
strPassword_ = Decrypt(dbUserSet_.strPassword_);
strConPassword_ = strPassword_;
bAdmin_ = dbUserSet_.bAdmin_;
dbUserSet_.Close();
ctrlUserName_.SetReadOnly(TRUE);
ctrlPassword_.SetReadOnly(TRUE);
GetDlgItem(IDOK)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_CONFERM)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_CONPASSWORD)->ShowWindow(SW_HIDE);
UpdateData(FALSE);
*pResult = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -