chenluhua1980
2026-01-10 ded981a2ac5dbb456bafce5468d7289bc45e313b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
// CChangePasswordDlg.cpp: 实现文件
//
 
#include "stdafx.h"
#include "Servo.h"
#include "afxdialogex.h"
#include "ChangePasswordDlg.h"
#include "UserManager.h"
#include "SystemLogManager.h"
 
 
// CChangePasswordDlg 对话框
 
IMPLEMENT_DYNAMIC(CChangePasswordDlg, CDialogEx)
 
CChangePasswordDlg::CChangePasswordDlg(CWnd* pParent /*=nullptr*/)
    : CDialogEx(IDD_DIALOG_CHANGE_PASSWORD, pParent)
{
}
 
CChangePasswordDlg::~CChangePasswordDlg()
{
}
 
bool CChangePasswordDlg::changeUserPassword(UserManager& userManager, const std::string& username, const std::string& newPassword)
{
    if (!userManager.changePassword(username, newPassword)) {
        AfxMessageBox(_T("修改用户密码失败。"));
        return false;
    }
 
    return true;
}
 
void CChangePasswordDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_EDIT_CHANGE_USERNAME, m_editUsername);
    DDX_Control(pDX, IDC_EDIT_CHANGE_CURRENT_PASSWORD, m_editCurrentPassword);
    DDX_Control(pDX, IDC_EDIT_CHANGE_NEW_PASSWORD, m_editNewPassword);
    DDX_Control(pDX, IDC_EDIT_CHANGE_CONFIRM_PASSWORD, m_editConfirmPassword);
}
 
 
BEGIN_MESSAGE_MAP(CChangePasswordDlg, CDialogEx)
    ON_BN_CLICKED(IDOK, &CChangePasswordDlg::OnBnClickedOk)
END_MESSAGE_MAP()
 
 
// CChangePasswordDlg 消息处理程序
 
 
BOOL CChangePasswordDlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();
 
    // 设置窗口标题和初始值
    SetWindowText(_T("修改密码"));
 
    UserManager& userManager = UserManager::getInstance();
    if (userManager.isLoggedIn()) {
        m_editUsername.SetWindowText(userManager.getCurrentUser().c_str());
    }
 
    return TRUE;
}
 
void CChangePasswordDlg::OnBnClickedOk()
{
    CString username, currentPassword, newPassword, confirmPassword;
    m_editUsername.GetWindowText(username);
    m_editCurrentPassword.GetWindowText(currentPassword);
    m_editNewPassword.GetWindowText(newPassword);
    m_editConfirmPassword.GetWindowText(confirmPassword);
 
    if (username.IsEmpty() || currentPassword.IsEmpty() || newPassword.IsEmpty() || confirmPassword.IsEmpty()) {
        AfxMessageBox(_T("所有字段均为必填项。"));
        return;
    }
 
    if (newPassword.Compare(confirmPassword) != 0) {
        AfxMessageBox(_T("新密码与确认密码不匹配。"));
        return;
    }
 
    SystemLogManager& logManager = SystemLogManager::getInstance();
    if (newPassword.Compare(currentPassword) == 0) {
        EndDialog(IDCANCEL);
        return;
    }
 
#ifdef UNICODE
    std::string strUsername = CStringA(username);
    std::string strCurrentPassword = CStringA(currentPassword);
    std::string strNewPassword = CStringA(newPassword);
#else
    std::string strUsername = username;
    std::string strCurrentPassword = currentPassword;
    std::string strNewPassword = newPassword;
#endif
 
    UserManager& userManager = UserManager::getInstance();
    if (userManager.isLoggedIn() && strCurrentPassword.compare(userManager.getCurrentPass()) == 0) {
        if (changeUserPassword(userManager, strUsername, strNewPassword)) {
            EndDialog(IDOK);
            logManager.log(SystemLogManager::LogType::Info, "修改密码成功!", strUsername);
        }
    }
    else {
        if (userManager.login(strUsername, strCurrentPassword)) {
            if (changeUserPassword(userManager, strUsername, strNewPassword)) {
                EndDialog(IDOK);
                logManager.log(SystemLogManager::LogType::Info, "修改密码成功!", strUsername);
            }
            else {
                userManager.logout();
            }
        }
        else {
            AfxMessageBox(_T("当前用户名或密码输入错误。"));
        }
    }
}