//Account.h
#ifndef ACCOUNT_H
#define ACCOUNT_H
class Account
{
public:
Account(int m_accountNumber = 0, double m_availableBalance = 0);// constructor sets attributes 构造函数
double getAvailableBalance() const;// returns available balance 获取余额
void credit(double );// adds an amount to the Account balance 存款
int getAccountNumber() const;// returns account number 获取账号
public:
int accountNumber;// account number账号
double availableBalance;// 余额
};
#endif
//BalanceInquiry.h
class BankDatabase;
class BalanceInquiry//execute函数的实现请参考Deposit类的execute函数实现过程
{
public:
BalanceInquiry(int userAccountNumber, BankDatabase &); // constructor
int getAccountNumber() const; // return account number
BankDatabase & getBankDatabase() const; // return reference to database
void execute(); // perform the transaction 查询账户余额,需验证账户是否存在,即用户输入的账户均为合法账户;输入非合法账户则弹出提示信息。
private:
int accountNumber; // indicates account involved账号
BankDatabase & bankDatabase; // reference to the account info database 数据库引用,在此数据库
}; // end class BalanceInquiry#pragma once
//BankDatabase.h
#include"Account.h"
class BankDatabase//定义一个银行数据库BankDatabase类,用于存储所有账户信息
{
public:
BankDatabase(int arraysize,Account *);// constructor initializes accounts
BankDatabase(const BankDatabase& db);
~BankDatabase();
double getAvailableBalance(int accountNumber);// 根据账号,返回余额
void credit(int accountNumber, double amount);// 向指定账号存入金额
Account * getAccount(int accountNumber);// 根据账号返回指向Account 对象的指针
private:
Account* accounts;//存储所有账户的起始地址
int size;//数据库中账户总数
};
//Deposit.h
class BankDatabase;
class Deposit
{
public:
Deposit(int, BankDatabase &);
int getAccountNumber() const; // return account number
BankDatabase & getBankDatabase() const;// return reference to database
void execute(); // perform the transaction 将amount金额存入指定账户。
private:
double amount; // 存款的金额
int accountNumber; // indicates account involved账号
BankDatabase & bankDatabase; // reference to the account info database 数据库引用,在此数据库
}; // end class Deposit
//Account.cpp
#include<iostream>
#include"Account.h"
using namespace std;
Account::Account(int m_accountNumber, double m_availableBalance)// constructor sets attributes 构造函数
{
accountNumber = m_accountNumber;
availableBalance = m_availableBalance;
}
double Account::getAvailableBalance() const// returns available balance 获取余额
{
return availableBalance;
}
int Account::getAccountNumber() const
{
return accountNumber;
}
void Account::credit(double m_amount)// adds an amount to the Account balance 存款
{
availableBalance += m_amount;
}
//BalanceInquiry.cpp
#include<iostream>
#include"BalanceInquiry.h"
#include"BankDatabase.h"
using namespace std;
BalanceInquiry::BalanceInquiry(int userAccountNumber, BankDatabase &m_db):bankDatabase(m_db) // constructor
{
accountNumber = userAccountNumber;
}
int BalanceInquiry::getAccountNumber() const // return account number
{
return accountNumber;
}
BankDatabase & BalanceInquiry::getBankDatabase() const
{
return bankDatabase;
}
void BalanceInquiry::execute() // perform the transaction 查询账户余额,需验证账户是否存在,即用户输入的账户均为合法账户;输入非合法账户则弹出提示信息。
{
cout << "账户信息:"<<endl;
cout << " - 账号: " << accountNumber << " - 余额: " << bankDatabase.getAvailableBalance(accountNumber) << endl;
}
//BankDatabase.cpp
#include<iostream>
#include"BankDatabase.h"
using namespace std;
BankDatabase::BankDatabase(int arraysize,Account* a)// constructor initializes accounts
{
size = arraysize;
accounts = a;
}
BankDatabase::BankDatabase(const BankDatabase & db)
{
for (int i = 0; i < size; i++)
{
accounts[i]=db.accounts[i];
}
}
BankDatabase::~BankDatabase()
{
delete accounts;
accounts = NULL;
}
double BankDatabase::getAvailableBalance(int accountNumber)// 根据账号,返回余额
{
return (getAccount(accountNumber)->getAvailableBalance());
}
void BankDatabase::credit(int accountNumber, double amount)// 向指定账号存入金额
{
getAccount(accountNumber)->credit(amount);
}
Account * BankDatabase::getAccount(int accountNumber)
{
for (int i = 0; i < size; i++)
{
if (accounts[i].Account::getAccountNumber() == accountNumber)
{
return (&accounts[i]);
}
}
return 0;
}
//Deposit.cpp
#include<iostream>
#include"BankDatabase.h"
#include"Deposit.h"
using namespace std;
Deposit::Deposit(int m_accountNumber, BankDatabase &m_db):bankDatabase(m_db)//存款
{
accountNumber = m_accountNumber;
}
int Deposit::getAccountNumber() const // return account number
{
return accountNumber;
}
BankDatabase & Deposit::getBankDatabase() const
{
return bankDatabase;
}
void Deposit::execute() // perform the transaction 将amount金额存入指定账户。
{
cout << "请输入存款金额: ";
cin >> amount;
bankDatabase.credit(accountNumber, amount);
} // end function execute
//main.cpp
#include<iostream>
using namespace std;
#include"Deposit.h"
#include"BalanceInquiry.h"
#include"BankDatabase.h"// BankDatabase class definition
int enterchoice();
int main()
{
int numberofaccount;
cout << "请输入账户总数:";
cin >> numberofaccount;//账户总数
Account * a = NULL;
a = new Account[numberofaccount];
if (NULL == a)
{
delete[]a;
a = NULL;
}
cout << "请输入" << numberofaccount << " 个账户:" << endl;
for (int i = 0; i < numberofaccount; i++)
{
cout << "账户 " << i + 1 << " 账号:";
int num;
cin >> num;
cout << "账户 " << i + 1 << " 余额:";
double bal;
cin >> bal;
a[i].Account::Account(num, bal);
}
BankDatabase db(numberofaccount,a);
int type;
bool userExit = false;
int currentAccountNumber;
while (!userExit)
{
switch (type = enterchoice())
{
case 1 : // 查询余额
cout << "请输入账号:";
cin >> currentAccountNumber;//目前账号
{BalanceInquiry *tempBal = new BalanceInquiry(currentAccountNumber, db);
tempBal->execute();//在这里实现余额查询,通过动态建立BalanceInquiry对象实现
delete tempBal;
tempBal = NULL; }
break;
case 2 : //存款
cout << "请输入账号:";
cin >> currentAccountNumber;
{Deposit *tempDep = new Deposit(currentAccountNumber, db);
tempDep->execute();//在这里实现存款操作,通过动态建立Deposit对象实现
delete tempDep;
tempDep = NULL; }
break;
case 3 :
userExit = true;
system("pause");
return 0;
break;
}
}
delete a;
a = NULL;
system("pause");
return 0;
}
int enterchoice()
{
int choice;
do {
cout << "\n*******************************" << endl;
cout << "主菜单:" << endl;
cout << "1 - 查询余额" << endl;
cout << "2 - 存款" << endl;
cout << "3 - 退出\n" ;
cout << "*******************************" << endl;
cout << "请输入选择: " ;
cin >> choice;
} while (choice>3 || choice<1);
return choice; // return user’s selection
} // end function displayMainMenu
C++学习交流群:
群号:810196747