MFC创建一个登录窗口,窗口有两个按钮,一个为登陆,一个为创建账号。要求用一文本储存多个用户的账号信息(文本内容包括姓名,卡号,密码,身份证号),任意一个用户可用账号和密码登陆,新用户也可以创建账号并储存到文本中。具体代码
时间: 2024-02-21 22:56:46 浏览: 24
以下是一个简单的 MFC 登录窗口程序,其中包括了两个按钮:Login 和 Register,以及一个文本框用于输入用户名和密码。用户账号信息保存在一个文本文件中,每行的格式为“姓名,卡号,密码,身份证号”。
首先,创建一个 MFC 对话框应用程序,并在资源视图中添加一个编辑框(ID 为 IDC_EDIT1)和两个按钮(ID 分别为 IDC_BUTTON1 和 IDC_BUTTON2)。
然后,在对话框类的头文件中定义一个结构体,用于保存用户账号信息:
```c++
struct UserInfo {
CString name;
CString cardNo;
CString password;
CString idNo;
};
```
接下来,在对话框类的头文件中添加以下函数声明:
```c++
// 读取用户账号信息
void LoadUserInfo();
// 保存用户账号信息
void SaveUserInfo();
// 登录按钮的响应函数
afx_msg void OnBnClickedButtonLogin();
// 注册按钮的响应函数
afx_msg void OnBnClickedButtonRegister();
```
然后,实现这些函数的具体代码。首先是 LoadUserInfo 函数,用于从文本文件中读取用户账号信息:
```c++
void CMyDialogDlg::LoadUserInfo() {
CString line;
CStdioFile file;
if (file.Open(_T("userinfo.txt"), CFile::modeRead | CFile::typeText)) {
while (file.ReadString(line)) {
UserInfo info;
int pos = 0;
pos = line.Find(_T(','));
info.name = line.Left(pos);
line = line.Mid(pos + 1);
pos = line.Find(_T(','));
info.cardNo = line.Left(pos);
line = line.Mid(pos + 1);
pos = line.Find(_T(','));
info.password = line.Left(pos);
line = line.Mid(pos + 1);
info.idNo = line;
m_userInfo.push_back(info);
}
file.Close();
}
}
```
这个函数打开名为 userinfo.txt 的文本文件,并逐行读取其中的内容,将每个用户的账号信息保存到一个 vector 中。
接下来是 SaveUserInfo 函数,用于将修改后的用户账号信息保存回文本文件:
```c++
void CMyDialogDlg::SaveUserInfo() {
CStdioFile file;
if (file.Open(_T("userinfo.txt"), CFile::modeCreate | CFile::modeWrite | CFile::typeText)) {
for (auto& info : m_userInfo) {
CString line;
line.Format(_T("%s,%s,%s,%s"), info.name, info.cardNo, info.password, info.idNo);
file.WriteString(line + _T("\n"));
}
file.Close();
}
}
```
接下来是 OnBnClickedButtonLogin 函数,用于响应登录按钮的点击事件:
```c++
void CMyDialogDlg::OnBnClickedButtonLogin() {
CString username, password;
GetDlgItemText(IDC_EDIT1, username);
GetDlgItemText(IDC_EDIT2, password);
for (auto& info : m_userInfo) {
if (info.cardNo == username && info.password == password) {
MessageBox(_T("登录成功!"));
return;
}
}
MessageBox(_T("用户名或密码错误!"));
}
```
这个函数首先从用户名和密码的编辑框中获取输入的内容,然后遍历保存用户账号信息的 vector,查找是否有与输入的用户名和密码匹配的用户。如果找到了匹配的用户,弹出一个消息框提示登录成功;否则弹出一个消息框提示用户名或密码错误。
最后是 OnBnClickedButtonRegister 函数,用于响应注册按钮的点击事件:
```c++
void CMyDialogDlg::OnBnClickedButtonRegister() {
CRegisterDlg dlg;
if (dlg.DoModal() == IDOK) {
UserInfo info;
info.name = dlg.m_name;
info.cardNo = dlg.m_cardNo;
info.password = dlg.m_password;
info.idNo = dlg.m_idNo;
m_userInfo.push_back(info);
SaveUserInfo();
MessageBox(_T("注册成功!"));
}
}
```
这个函数创建一个 CRegisterDlg 对话框,并等待用户输入注册信息。如果用户点击了对话框的确定按钮,就将用户的账号信息保存到 vector 中,并调用 SaveUserInfo 函数将修改后的用户账号信息保存回文本文件。最后弹出一个消息框提示注册成功。
最后,在对话框类的构造函数中调用 LoadUserInfo 函数,以便在程序启动时加载用户账号信息:
```c++
CMyDialogDlg::CMyDialogDlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_MYDIALOG_DIALOG, pParent)
{
// ...
LoadUserInfo();
}
```
完整代码如下: