首页 > 分享 > MFC用户注册和登录功能实现(详细)

MFC用户注册和登录功能实现(详细)

首先,创建一个MFC应用程序,并添加两个对话框:登录对话框和注册对话框。在登录对话框中添加用户名和密码的输入框,以及登录和注册按钮;在注册对话框中添加用户名、密码和确认密码的输入框,以及注册按钮。

在程序的主窗口类中添加以下代码:

class CMyAppDlg : public CDialogEx

{

public:

CMyAppDlg(CWnd* pParent = nullptr);

#ifdef AFX_DESIGN_TIME

enum { IDD = IDD_MYAPP_DIALOG };

#endif

protected:

virtual void DoDataExchange(CDataExchange* pDX);

protected:

HICON m_hIcon;

virtual BOOL OnInitDialog();

afx_msg void OnPaint();

afx_msg HCURSOR OnQueryDragIcon();

DECLARE_MESSAGE_MAP()

private:

CLoginDlg m_loginDlg;

CRegisterDlg m_registerDlg;

CString m_strUserName;

CString m_strPassword;

CString m_strConfirmPassword;

public:

afx_msg void OnBnClickedBtnLogin();

afx_msg void OnBnClickedBtnRegister();

};

在OnInitDialog()函数中,将登录对话框和注册对话框的指针保存下来,以便后续调用。同时,为登录按钮和注册按钮添加消息响应函数。

BOOL CMyAppDlg::OnInitDialog()

{

CDialogEx::OnInitDialog();

ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);

if (pSysMenu != nullptr)

{

CString strAboutMenu;

strAboutMenu.LoadString(IDS_ABOUTBOX);

if (!strAboutMenu.IsEmpty())

{

pSysMenu->AppendMenu(MF_SEPARATOR);

pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);

}

}

SetIcon(m_hIcon, TRUE);

SetIcon(m_hIcon, FALSE);

m_loginDlg.Create(IDD_LOGIN_DIALOG, this);

m_registerDlg.Create(IDD_REGISTER_DIALOG, this);

return TRUE;

}

登录按钮的消息响应函数如下:

void CMyAppDlg::OnBnClickedBtnLogin()

{

m_loginDlg.ShowWindow(SW_SHOW);

}

点击登录按钮后,显示登录对话框。

注册按钮的消息响应函数如下:

void CMyAppDlg::OnBnClickedBtnRegister()

{

m_registerDlg.ShowWindow(SW_SHOW);

}

点击注册按钮后,显示注册对话框。

在登录对话框类和注册对话框类中,分别添加用户名、密码和确认密码的成员变量,并在DoDataExchange()函数中添加数据交换。在登录对话框类中,添加一个登录按钮的消息响应函数,用于验证用户名和密码;在注册对话框类中,添加一个注册按钮的消息响应函数,用于验证用户名和密码是否符合要求,并将其保存到文件中。

登录对话框类的代码如下:

class CLoginDlg : public CDialogEx

{

public:

CLoginDlg(CWnd* pParent = nullptr);

virtual ~CLoginDlg();

#ifdef AFX_DESIGN_TIME

enum { IDD = IDD_LOGIN_DIALOG };

#endif

protected:

virtual void DoDataExchange(CDataExchange* pDX);

protected:

HICON m_hIcon;

virtual BOOL OnInitDialog();

afx_msg void OnPaint();

afx_msg HCURSOR OnQueryDragIcon();

DECLARE_MESSAGE_MAP()

private:

CString m_strUserName;

CString m_strPassword;

CEdit m_editUserName;

CEdit m_editPassword;

public:

afx_msg void OnBnClickedBtnLogin();

};

登录对话框类的DoDataExchange()函数如下:

void CLoginDlg::DoDataExchange(CDataExchange* pDX)

{

CDialogEx::DoDataExchange(pDX);

DDX_Text(pDX, IDC_EDIT_USERNAME, m_strUserName);

DDX_Text(pDX, IDC_EDIT_PASSWORD, m_strPassword);

DDX_Control(pDX, IDC_EDIT_USERNAME, m_editUserName);

DDX_Control(pDX, IDC_EDIT_PASSWORD, m_editPassword);

}

登录按钮的消息响应函数如下:

void CLoginDlg::OnBnClickedBtnLogin()

{

UpdateData(TRUE);

if (m_strUserName.IsEmpty() || m_strPassword.IsEmpty())

{

MessageBox(_T("用户名或密码不能为空!"), _T("错误"), MB_OK | MB_ICONERROR);

return;

}

CString strFilePath = _T("users.txt");

CStdioFile file;

if (file.Open(strFilePath, CFile::modeRead))

{

CString strLine;

while (file.ReadString(strLine))

{

CString strUserName, strPassword;

int nIndex = strLine.Find(_T(':'));

if (nIndex != -1)

{

strUserName = strLine.Left(nIndex);

strPassword = strLine.Mid(nIndex + 1);

if (strUserName == m_strUserName && strPassword == m_strPassword)

{

MessageBox(_T("登录成功!"), _T("提示"), MB_OK | MB_ICONINFORMATION);

EndDialog(IDOK);

return;

}

}

}

file.Close();

}

MessageBox(_T("用户名或密码错误!"), _T("错误"), MB_OK | MB_ICONERROR);

}

在登录按钮的消息响应函数中,首先获取用户名和密码的输入值,然后判断它们是否为空。如果为空,则弹出错误提示框;否则,打开保存用户信息的文件,逐行读取文件内容,查找用户名和密码是否匹配。如果匹配,则弹出成功提示框,并关闭登录对话框;否则,弹出错误提示框。

注册对话框类的代码如下:

class CRegisterDlg : public CDialogEx

{

public:

CRegisterDlg(CWnd* pParent = nullptr);

virtual ~CRegisterDlg();

#ifdef AFX_DESIGN_TIME

enum { IDD = IDD_REGISTER_DIALOG };

#endif

protected:

virtual void DoDataExchange(CDataExchange* pDX);

protected:

HICON m_hIcon;

virtual BOOL OnInitDialog();

afx_msg void OnPaint();

afx_msg HCURSOR OnQueryDragIcon();

DECLARE_MESSAGE_MAP()

private:

CString m_strUserName;

CString m_strPassword;

CString m_strConfirmPassword;

CEdit m_editUserName;

CEdit m_editPassword;

CEdit m_editConfirmPassword;

public:

afx_msg void OnBnClickedBtnRegister();

};

注册对话框类的DoDataExchange()函数如下:

void CRegisterDlg::DoDataExchange(CDataExchange* pDX)

{

CDialogEx::DoDataExchange(pDX);

DDX_Text(pDX, IDC_EDIT_USERNAME, m_strUserName);

DDX_Text(pDX, IDC_EDIT_PASSWORD, m_strPassword);

DDX_Text(pDX, IDC_EDIT_CONFIRM_PASSWORD, m_strConfirmPassword);

DDX_Control(pDX, IDC_EDIT_USERNAME, m_editUserName);

DDX_Control(pDX, IDC_EDIT_PASSWORD, m_editPassword);

DDX_Control(pDX, IDC_EDIT_CONFIRM_PASSWORD, m_editConfirmPassword);

}

注册按钮的消息响应函数如下:

void CRegisterDlg::OnBnClickedBtnRegister()

{

UpdateData(TRUE);

if (m_strUserName.IsEmpty() || m_strPassword.IsEmpty() || m_strConfirmPassword.IsEmpty())

{

MessageBox(_T("用户名、密码或确认密码不能为空!"), _T("错误"), MB_OK | MB_ICONERROR);

return;

}

if (m_strPassword != m_strConfirmPassword)

{

MessageBox(_T("密码和确认密码不一致!"), _T("错误"), MB_OK | MB_ICONERROR);

return;

}

CString strFilePath = _T("users.txt");

CStdioFile file;

if (file.Open(strFilePath, CFile::modeCreate | CFile::modeNoTruncate | CFile::modeReadWrite))

{

CString strLine;

while (file.ReadString(strLine))

{

CString strUserName;

int nIndex = strLine.Find(_T(':'));

if (nIndex != -1)

{

strUserName = strLine.Left(nIndex);

if (strUserName == m_strUserName)

{

MessageBox(_T("用户名已存在!"), _T("错误"), MB_OK | MB_ICONERROR);

file.Close();

return;

}

}

}

file.SeekToEnd();

file.WriteString(m_strUserName + _T(':') + m_strPassword + _T('n'));

file.Close();

MessageBox(_T("注册成功!"), _T("提示"), MB_OK | MB_ICONINFORMATION);

EndDialog(IDOK);

}

}

在注册按钮的消息响应函数中,首先获取用户名、密码和确认密码的输入值,然后判断它们是否为空,以及密码和确认密码是否一致。如果有任何一个条件不符合要求,则弹出错误提示框;否则,打开保存用户信息的文件,逐行读取文件内容,查找用户名是否已存在。如果已存在,则弹出错误提示框;否则,将用户名和密码保存到文件中,并弹出成功提示框,并关闭注册对话框。

相关知识

一个用MFC的DC实现画图的工具带各种控件资源
用户登录
用户登录界面设计代码html
鲜花预约配送系统:从需求分析到功能实现
【详细源码及文档】基于JSP网上花店销售系统的设计与实现
MFC=VisualC6.0library.rar很好的MFC=Visual C++6.0类库大全
AI 绘画新秀 Leonardo 保姆级注册、使用教程
登录/注册
基于Javaweb的网上花店系统的设计与实现(Java+Mysql+SSM+万字文档+系统源码+数据库 +调试)
基于SpringBoot+Vue+uniapp的花卉库存管理系统的详细设计和实现(源码+lw+部署文档+讲解等)

网址: MFC用户注册和登录功能实现(详细) https://m.huajiangbk.com/newsview948793.html

所属分类:花卉
上一篇: SSM(3) —— 用户注册和登
下一篇: ASP.NET 链接sql数据库