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

📄 usermanagedlg.cpp

📁 LibraryManageDM.rar 数据库设计图书馆管理系统
💻 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 + -