mfc中有一窗口,一文本文件中存有姓名,账号,密码,身份证号,余额,各个信息用逗号隔开。输入修改的密码,然后点击修改密码按钮,将重新输入的密码替换保存到文本文件中,点击查询按钮后能在对应框中显示出新密码。C++具体代码
时间: 2024-03-04 19:53:30 浏览: 85
用CStdioFile读写文件
以下是一个简单的 MFC 窗口程序,用于实现修改密码和查询密码的功能。该程序将文本文件中的信息读入一个 vector 中,在用户修改密码时更新相应信息,最后将更新后的信息写回文本文件中。
```cpp
#include "stdafx.h"
#include "MFCApplication1.h"
#include "MFCApplication1Dlg.h"
#include <fstream>
#include <sstream>
#include <vector>
using namespace std;
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 对话框
class CMFCApplication1Dlg : public CDialogEx
{
public:
CMFCApplication1Dlg(CWnd* pParent = nullptr); // 标准构造函数
vector<vector<string>> data; // 存储文本文件中的信息
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_MFCAPPLICATION1_DIALOG };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
HICON m_hIcon;
// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
CString m_name;
CString m_account;
CString m_password;
CString m_id;
CString m_balance;
CString m_newPassword;
afx_msg void OnBnClickedButtonQuery();
afx_msg void OnBnClickedButtonModify();
};
CMFCApplication1Dlg::CMFCApplication1Dlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_MFCAPPLICATION1_DIALOG, pParent)
, m_name(_T(""))
, m_account(_T(""))
, m_password(_T(""))
, m_id(_T(""))
, m_balance(_T(""))
, m_newPassword(_T(""))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CMFCApplication1Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT_NAME, m_name);
DDX_Text(pDX, IDC_EDIT_ACCOUNT, m_account);
DDX_Text(pDX, IDC_EDIT_PASSWORD, m_password);
DDX_Text(pDX, IDC_EDIT_ID, m_id);
DDX_Text(pDX, IDC_EDIT_BALANCE, m_balance);
DDX_Text(pDX, IDC_EDIT_NEWPASSWORD, m_newPassword);
}
BEGIN_MESSAGE_MAP(CMFCApplication1Dlg, CDialogEx)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON_QUERY, &CMFCApplication1Dlg::OnBnClickedButtonQuery)
ON_BN_CLICKED(IDC_BUTTON_MODIFY, &CMFCApplication1Dlg::OnBnClickedButtonModify)
END_MESSAGE_MAP()
// CMFCApplication1Dlg 消息处理程序
BOOL CMFCApplication1Dlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 将图标设置为应用程序默认大小的图标。
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
ifstream fin("data.txt");
if (fin.is_open()) {
string line;
while (getline(fin, line)) {
vector<string> row;
istringstream iss(line);
string item;
while (getline(iss, item, ',')) {
row.push_back(item);
}
data.push_back(row);
}
fin.close();
}
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void CMFCApplication1Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
}
HCURSOR CMFCApplication1Dlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CMFCApplication1Dlg::OnBnClickedButtonQuery()
{
// 查询密码
CString account;
GetDlgItemText(IDC_EDIT_ACCOUNT, account);
for (auto& row : data) {
if (row[1] == CT2A(account)) {
m_name = CA2T(row[0].c_str());
m_account = CA2T(row[1].c_str());
m_password = CA2T(row[2].c_str());
m_id = CA2T(row[3].c_str());
m_balance = CA2T(row[4].c_str());
UpdateData(FALSE);
return;
}
}
AfxMessageBox(_T("账号不存在!"));
}
void CMFCApplication1Dlg::OnBnClickedButtonModify()
{
// 修改密码
CString account, newPassword;
GetDlgItemText(IDC_EDIT_ACCOUNT, account);
GetDlgItemText(IDC_EDIT_NEWPASSWORD, newPassword);
for (auto& row : data) {
if (row[1] == CT2A(account)) {
row[2] = CT2A(newPassword);
m_password = m_newPassword;
UpdateData(FALSE);
ofstream fout("data.txt");
for (auto& r : data) {
for (auto& item : r) {
fout << item << ",";
}
fout << endl;
}
fout.close();
return;
}
}
AfxMessageBox(_T("账号不存在!"));
}
```
需要注意的是,本程序中的文本文件 `data.txt` 中每行的信息顺序应与代码中存储的顺序相同,即姓名、账号、密码、身份证号、余额,每个信息之间用逗号隔开。
阅读全文