用C++设计一个Bank类,实现银行某账户的资金往来账目管理。(主要分为创建用户,存钱,取钱,记录。)
hello,大家好!,我是一名学生党,如果有不严谨的问题请指出,我会积极学习的。
代码如下::
#include <iostream>
#include <string.h>
#include <vector>
#include <ctime>
using namespace std;
class Bank{
private:
string account;
time_t create_time;
double balance;
vector< pair<time_t, double> > history;
public:
Bank(string accountNumber,double balance){
account = accountNumber;
this->balance = balance;
create_time = time(NULL);
}
void deposit(double amount){
balance +=amount;
time_t deposit_time =time(NULL);
history.emplace_back(make_pair(deposit_time, amount));
}
bool Withdraw(double amount){
if(amount>balance){
return false;
}
balance -=amount;
time_t Withdraw_time =time(NULL);
history.emplace_back(make_pair(Withdraw_time, -amount));
return true;
}
void printHistory() {
for (auto& record : history) {
string type = (record.second > 0) ? "存入" : "取出";
cout << "在" << ctime(&record.first) << type << abs(record.second) << "元" << endl;
}
}
double GetBalance()const{
return balance;
}
time_t GetCreateTime() const {
return create_time;
}
vector< pair<time_t, double> >GetHistory()const{
return history;
}
};
int main(){
Bank account("12345",100.0);
account.deposit(50.0);
account.Withdraw(125.0);
account.printHistory();
return 0;
}
超详细分析如下:
第一步,C++标准库
#include <iostream>
#include <string.h>
#include <vector>
#include <ctime>
using namespace std;
其中,iostream 用于输入输出流,string.h 用于处理字符串,vector>用于动态数组,ctime 用于处理日期和时间。using namespace std;是声明命名空间, 可以免去每次调用这些函数和类时都需要加上 std:: 的繁琐操作,但要根据情况而定,不能盲目使用。
第二步,创建一个Bank类,其中包含七个成员函数和四个私有成员变量。
七个成员函数:
1.构造函数 Bank(string accountNumber,double balance)
2.存款函数 void deposit(double amount)
3.取款函数 bool Withdraw(double amount)
4.打印历史记录函数 void printHistory()
5.获取余额函数 double GetBalance() const
6.获取创建时间函数 time_t GetCreateTime() const
7.获取历史记录函数 vector< pair<time_t, double> > GetHistory() const
public :
Bank(string accountNumber,double balance){
account= accountNumber;
this->balance = balance;
create_time = time(NULL);
}
void deposit(double amount){
balance +=amount;
time_t deposit_time =time(NULL);
history.emplace_back(make_pair(deposit_time, amount));
}
其中emplace_back是向容器vector(history)最后添加一个新的元素的方法,每个元素是一个pair,存储了存款时间和金额。
make_pair函数是将deposit_time与amount进行封装成一个pair,再用emplace_back把它添加到容器的末尾。
bool Withdraw(double amount){
if(amount>balance){
return false;
}
balance -=amount;
time_t Withdraw_time =time(NULL);
history.emplace_back(make_pair(Withdraw_time, -amount));
return true;
}
void printHistory() {
for (auto& record : history) {
string type = (record.second > 0) ? "存入" : "取出";
cout << "在" << ctime(&record.first) << type << abs(record.second) << "元" << endl;
}
}
该函数使用了一个for循环来遍历容器。其中,history存储时间戳和交易金额。每次循环都会取出一个记录,使用ctime函数将时间戳转换为可读的时间字符串,并根据交易金额的正负性确定是存入还是取出,并输出相应的信息。其中abs函数用于取交易金额的绝对值。
double GetBalance()const{
return balance;
}
time_t GetCreateTime() const {
return create_time;
}
vector< pair<time_t, double> >GetHistory()const{
return history;
}
const用于声明该值不会改变。
四个私有变量:
(1)字符串类型的账户名(account)
(2)time_t类型的创建时间(create_time)
(3)双精度浮点数类型的余额(balance)
(4)vector<pair<time_t, double>>类型的历史记录(history)。
注意:
1.变量要声明,在Bank类中可以先声明,也可以在最后声明。
2.私有的成员变量只能在该类的成员函数中被访问和修改。
第三步,创建main函数,调用成员函数实现方法。
int main(){
Bank account("12345",100.0);
account.deposit(50.0);
account.Withdraw(125.0);
account.printHistory();
return 0;
}
首先创建了一个带有账户号和初始余额的 Bank 对象 account,然后分别调用了 deposit() 存款、Withdraw() 取款和 printHistory() 打印交易记录的方法。