用MFC基于对话框,不使用数据库设计一个简单的银行账户管理程序,在登录界面用户可以选择直接登录或创建新账号。账户的信息有账号(唯一)、姓名、余额、身份证号码。登录后,允许用户进行如下操作:存款、取款、查询。具体步骤及代码
时间: 2023-12-28 20:04:36 浏览: 130
好的,我可以为您讲解一下基于 MFC 对话框的银行账户管理程序的设计和实现。由于您要求不使用数据库,我们可以使用数据结构来保存账户信息。
首先,我们需要设计一个 Account 类来表示银行账户,其中包含账号、姓名、余额和身份证号码等属性,以及对这些属性进行操作的方法。示例代码如下:
```cpp
class Account {
public:
Account(int id, CString name, double balance, CString id_number);
void deposit(double amount);
void withdraw(double amount);
double get_balance();
int get_id();
CString get_name();
CString get_id_number();
private:
int id_;
CString name_;
double balance_;
CString id_number_;
};
```
接下来,我们需要在对话框类中添加控件,如按钮和文本框,以便用户可以进行操作。在登录界面中,我们可以添加两个按钮,一个用于直接登录,一个用于创建新账号。在账户管理界面中,我们可以添加文本框用于输入账号和操作金额,以及按钮用于进行存款、取款和查询等操作。
在程序中,我们需要维护一个账户列表,用于保存所有的账户信息。当用户登录时,我们可以在列表中查找对应的账户信息,并将其保存在当前对话框类中。当用户进行操作时,我们可以根据当前账户信息和操作金额来更新账户列表和界面显示。
下面是一个简单的实现示例,仅供参考:
```cpp
// BankAccountDlg.h
#pragma once
#include "afxwin.h"
#include <vector>
#include "Account.h"
// CBankAccountDlg 对话框
class CBankAccountDlg : public CDialogEx {
public:
CBankAccountDlg(CWnd* pParent = NULL); // 标准构造函数
enum { IDD = IDD_BANKACCOUNT_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
virtual BOOL OnInitDialog();
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedLoginBtn();
afx_msg void OnBnClickedCreateBtn();
afx_msg void OnBnClickedDepositBtn();
afx_msg void OnBnClickedWithdrawBtn();
afx_msg void OnBnClickedQueryBtn();
private:
std::vector<Account> account_list_;
Account current_account_;
CEdit account_id_edit_;
CEdit amount_edit_;
CStatic balance_text_;
};
// BankAccountDlg.cpp
#include "stdafx.h"
#include "BankAccount.h"
#include "BankAccountDlg.h"
#include "afxdialogex.h"
#include "Account.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CBankAccountDlg 对话框
CBankAccountDlg::CBankAccountDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CBankAccountDlg::IDD, pParent) {}
void CBankAccountDlg::DoDataExchange(CDataExchange* pDX) {
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_ACCOUNT_ID_EDIT, account_id_edit_);
DDX_Control(pDX, IDC_AMOUNT_EDIT, amount_edit_);
DDX_Control(pDX, IDC_BALANCE_TEXT, balance_text_);
}
BEGIN_MESSAGE_MAP(CBankAccountDlg, CDialogEx)
ON_BN_CLICKED(IDC_LOGIN_BTN, &CBankAccountDlg::OnBnClickedLoginBtn)
ON_BN_CLICKED(IDC_CREATE_BTN, &CBankAccountDlg::OnBnClickedCreateBtn)
ON_BN_CLICKED(IDC_DEPOSIT_BTN, &CBankAccountDlg::OnBnClickedDepositBtn)
ON_BN_CLICKED(IDC_WITHDRAW_BTN, &CBankAccountDlg::OnBnClickedWithdrawBtn)
ON_BN_CLICKED(IDC_QUERY_BTN, &CBankAccountDlg::OnBnClickedQueryBtn)
END_MESSAGE_MAP()
BOOL CBankAccountDlg::OnInitDialog() {
CDialogEx::OnInitDialog();
return TRUE;
}
void CBankAccountDlg::OnBnClickedLoginBtn() {
CString account_id_str;
account_id_edit_.GetWindowText(account_id_str);
int account_id = _ttoi(account_id_str);
for (auto& account : account_list_) {
if (account.get_id() == account_id) {
current_account_ = account;
CString balance_str;
balance_str.Format(_T("%.2f"), current_account_.get_balance());
balance_text_.SetWindowText(balance_str);
return;
}
}
MessageBox(_T("账户不存在"), _T("错误"), MB_OK | MB_ICONERROR);
}
void CBankAccountDlg::OnBnClickedCreateBtn() {
CString name_str, id_number_str;
name_str.Format(_T("新账户%d"), account_list_.size() + 1);
int id_number = rand() % 900000 + 100000;
id_number_str.Format(_T("%d"), id_number);
Account new_account(account_list_.size() + 1, name_str, 0, id_number_str);
account_list_.push_back(new_account);
MessageBox(_T("创建成功"), _T("提示"), MB_OK | MB_ICONINFORMATION);
}
void CBankAccountDlg::OnBnClickedDepositBtn() {
CString amount_str;
amount_edit_.GetWindowText(amount_str);
double amount = _ttof(amount_str);
current_account_.deposit(amount);
for (auto& account : account_list_) {
if (account.get_id() == current_account_.get_id()) {
account = current_account_;
break;
}
}
CString balance_str;
balance_str.Format(_T("%.2f"), current_account_.get_balance());
balance_text_.SetWindowText(balance_str);
}
void CBankAccountDlg::OnBnClickedWithdrawBtn() {
CString amount_str;
amount_edit_.GetWindowText(amount_str);
double amount = _ttof(amount_str);
if (amount > current_account_.get_balance()) {
MessageBox(_T("余额不足"), _T("错误"), MB_OK | MB_ICONERROR);
return;
}
current_account_.withdraw(amount);
for (auto& account : account_list_) {
if (account.get_id() == current_account_.get_id()) {
account = current_account_;
break;
}
}
CString balance_str;
balance_str.Format(_T("%.2f"), current_account_.get_balance());
balance_text_.SetWindowText(balance_str);
}
void CBankAccountDlg::OnBnClickedQueryBtn() {
CString balance_str;
balance_str.Format(_T("%.2f"), current_account_.get_balance());
balance_text_.SetWindowText(balance_str);
}
```
注意,以上示例代码仅供参考,具体实现可能因需求而异,您需要根据自己的需求进行修改和完善。
阅读全文