MFC创建一个登录窗口,窗口有两个按钮,一个为登陆,一个为创建账号。要求用一文本储存多个用户的账号信息(文本内容包括姓名,卡号,密码,身份证号),任意一个用户可用账号和密码登陆,新用户也可以创建账号并储存到文本中。具体代码
时间: 2024-02-25 17:59:01 浏览: 16
以下是MFC创建登录窗口的示例代码:
首先,需要在资源文件中创建两个按钮,分别命名为IDC_LOGIN和IDC_CREATE_ACCOUNT。然后在对话框类的头文件中声明以下变量和函数:
```c++
public:
CString m_strUsername; // 用户名
CString m_strPassword; // 密码
private:
CString m_strFilename; // 储存用户信息的文件名
std::vector<User> m_users; // 用户列表
void LoadUsers(); // 加载用户列表
void SaveUsers(); // 保存用户列表
bool Authenticate(); // 验证用户名和密码
void CreateAccount(); // 创建新账号
```
其中User是一个结构体,用于储存用户信息:
```c++
struct User {
CString name;
CString card_number;
CString password;
CString id_number;
};
```
LoadUsers函数用于加载用户列表:
```c++
void CLoginDlg::LoadUsers()
{
m_users.clear();
CStdioFile file;
if (file.Open(m_strFilename, CFile::modeRead | CFile::typeText)) {
CString line;
while (file.ReadString(line)) {
User user;
int pos1 = line.Find(',');
int pos2 = line.Find(',', pos1 + 1);
int pos3 = line.Find(',', pos2 + 1);
user.name = line.Left(pos1);
user.card_number = line.Mid(pos1 + 1, pos2 - pos1 - 1);
user.password = line.Mid(pos2 + 1, pos3 - pos2 - 1);
user.id_number = line.Mid(pos3 + 1);
m_users.push_back(user);
}
file.Close();
}
}
```
SaveUsers函数用于保存用户列表:
```c++
void CLoginDlg::SaveUsers()
{
CStdioFile file;
if (file.Open(m_strFilename, CFile::modeWrite | CFile::modeCreate | CFile::typeText)) {
for (const auto& user : m_users) {
CString line;
line.Format(_T("%s,%s,%s,%s\n"), user.name, user.card_number, user.password, user.id_number);
file.WriteString(line);
}
file.Close();
}
}
```
Authenticate函数用于验证用户名和密码:
```c++
bool CLoginDlg::Authenticate()
{
for (const auto& user : m_users) {
if (user.card_number == m_strUsername && user.password == m_strPassword) {
return true;
}
}
return false;
}
```
CreateAccount函数用于创建新账号:
```c++
void CLoginDlg::CreateAccount()
{
CCreateAccountDlg dlg;
if (dlg.DoModal() == IDOK) {
User user;
user.name = dlg.m_strName;
user.card_number = dlg.m_strCardNumber;
user.password = dlg.m_strPassword;
user.id_number = dlg.m_strIDNumber;
m_users.push_back(user);
SaveUsers();
}
}
```
在对话框类的OnInitDialog函数中需要调用LoadUsers函数来加载用户列表:
```c++
BOOL CLoginDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
m_strFilename = _T("users.txt");
LoadUsers();
// 省略其他代码...
}
```
在按钮的响应函数中调用Authenticate或CreateAccount函数来处理登录或创建账号的操作:
```c++
void CLoginDlg::OnLogin()
{
UpdateData(TRUE);
if (Authenticate()) {
EndDialog(IDOK);
} else {
MessageBox(_T("用户名或密码错误"), _T("错误"), MB_ICONERROR);
}
}
void CLoginDlg::OnCreateAccount()
{
CreateAccount();
}
```
完整代码如下: