mfc中有一窗口,一文本文件中存有姓名,账号,密码,身份证号,余额,各个信息用逗号隔开。点击查询按钮就能将文本文件中的姓名,账号,密码,身份证号,余额显示分别显示到对应的控件中。C++具体代码
时间: 2024-03-03 15:50:11 浏览: 160
以下是一个简单的实现,假设窗口类名为CMyDialog,控件ID为IDC_EDIT_NAME, IDC_EDIT_ACCOUNT, IDC_EDIT_PASSWORD, IDC_EDIT_IDCARD, IDC_EDIT_BALANCE,按钮ID为IDC_BUTTON_QUERY,文本文件名为info.txt。
首先需要在初始化对话框时读取文本文件并存储信息到vector中:
```cpp
#include <vector>
#include <fstream>
#include <sstream>
class CMyDialog : public CDialog
{
private:
struct Info {
std::string name;
std::string account;
std::string password;
std::string idcard;
double balance;
};
std::vector<Info> m_infos;
public:
CMyDialog(CWnd* pParent = nullptr)
: CDialog(IDD_MY_DIALOG, pParent)
{
std::ifstream file("info.txt");
if (file.is_open()) {
std::string line;
while (std::getline(file, line)) {
std::istringstream iss(line);
std::string name, account, password, idcard;
double balance;
std::getline(iss, name, ',');
std::getline(iss, account, ',');
std::getline(iss, password, ',');
std::getline(iss, idcard, ',');
iss >> balance;
m_infos.push_back({ name, account, password, idcard, balance });
}
file.close();
}
}
// ...
};
```
接着在按钮的OnClick事件中查找匹配的信息并将其显示到控件中:
```cpp
class CMyDialog : public CDialog
{
// ...
public:
afx_msg void OnBnClickedButtonQuery()
{
CString name, account, password, idcard, balance;
GetDlgItemText(IDC_EDIT_NAME, name);
GetDlgItemText(IDC_EDIT_ACCOUNT, account);
GetDlgItemText(IDC_EDIT_PASSWORD, password);
GetDlgItemText(IDC_EDIT_IDCARD, idcard);
GetDlgItemText(IDC_EDIT_BALANCE, balance);
for (auto& info : m_infos) {
if ((!name || info.name == LPCTSTR(name))
&& (!account || info.account == LPCTSTR(account))
&& (!password || info.password == LPCTSTR(password))
&& (!idcard || info.idcard == LPCTSTR(idcard))
&& (!balance || info.balance == _ttof(balance))) {
SetDlgItemText(IDC_EDIT_NAME, info.name.c_str());
SetDlgItemText(IDC_EDIT_ACCOUNT, info.account.c_str());
SetDlgItemText(IDC_EDIT_PASSWORD, info.password.c_str());
SetDlgItemText(IDC_EDIT_IDCARD, info.idcard.c_str());
SetDlgItemText(IDC_EDIT_BALANCE, std::to_wstring(info.balance).c_str());
return;
}
}
AfxMessageBox(_T("未找到匹配信息"));
}
};
```
注意这里使用了CString和std::wstring之间的转换,以及字符串到数字的转换。同时也需要判断控件是否为空,如果为空则表示用户不想限制这个条件。
阅读全文