刚开始接触Java的时候,只要学会面向对象后,就可以开始练习写一些小的项目,例如:
简而言之,就是写一个简易的银行交易系统,存款,取款,转账,查询余额。
首先就是要写出大体框架:
现在就是定义交易类(Transaction),和一个银行账户类(BankAccount):
// 交易类
public class Transaction {
private LocalDateTime time; // 交易时间
private String type; // 交易类型
private BigDecimal amount; // 交易金额
private BigDecimal balance; // 交易后余额
public Transaction() {
}
public Transaction(String type, BigDecimal amount, BigDecimal balance) {
this.time = LocalDateTime.now();
setType(type);
setAmount(amount);
setBalance(balance);
}
public LocalDateTime getTime() {
return time;
}
public void setTime(LocalDateTime time) {
this.time = time;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public BigDecimal getAmount() {
return amount;
}
public void setAmount(BigDecimal amount) {
this.amount = amount;
}
public BigDecimal getBalance() {
return balance;
}
public void setBalance(BigDecimal balance) {
this.balance = balance;
}
// 银行账户类
public class BankAccount {
private String accountNumber; // 银行账号
private String accountName; // 银行账户名称
private BigDecimal balance; // 账户余额
private ArrayList<Transaction> transactionHistory; // 交易历史记录
public BankAccount() {
}
public BankAccount(String accountNumber, String accountName, BigDecimal balance) {
setAccountNumber(accountNumber);
setAccountName(accountName);
setBalance(balance);
this.transactionHistory = new ArrayList<>();
}
public String getAccountNumber() {
return accountNumber;
}
public void setAccountNumber(String accountNumber) {
this.accountNumber = accountNumber;
}
public String getAccountName() {
return accountName;
}
public void setAccountName(String accountName) {
this.accountName = accountName;
}
public BigDecimal getBalance() {
return balance;
}
public void setBalance(BigDecimal balance) {
this.balance = balance;
}
public ArrayList<Transaction> getTransactionHistory() {
return transactionHistory;
}
public void setTransactionHistory(ArrayList<Transaction> transactionHistory) {
this.transactionHistory = transactionHistory;
}
接下来就是写存款,取款,转账和交易记录了。这些内容属于银行账户类,所以可以直接把一些内容放入银行账户类:
// 存款
public void deposit(BigDecimal amount) {
balance = balance.add(amount);
transactionHistory.add(new Transaction("存款", amount, balance));
System.out.println("存款成功,当前余额为:" + balance);
}
// 取款
public void withdraw(BigDecimal amount) {
if (amount.compareTo(balance) == 1) {
System.out.println("余额不足,取款失败");
} else {
balance = balance.subtract(amount);
transactionHistory.add(new Transaction("取款", amount, balance));
System.out.println("取款成功,当前余额为:" + balance);
}
}
// 查询余额
public void queryBalance() {
System.out.println("当前余额为:" + balance);
}
// 转账
public void transfer(BankAccount targetAccount, BigDecimal amount) {
if (amount.compareTo(balance) == 1) {
System.out.println("余额不足,转账失败");
} else {
balance = balance.subtract(amount);
targetAccount.deposit(amount);
transactionHistory.add(new Transaction("转账", amount, balance));
System.out.println("转账成功,当前余额为:" + balance);
}
}
// 查询交易记录
public void printTransactionHistory() {
if (transactionHistory.isEmpty()) {
System.out.println("暂无交易记录");
} else {
System.out.println("+---------------------+----------+---------------------+---------------------+");
System.out.println("| 时间 | 类型 | 金额 | 余额 |");
System.out.println("+---------------------+----------+---------------------+---------------------+");
for (Transaction transaction : transactionHistory) {
LocalDateTime time = transaction.getTime();
String formattedTime = time.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
String type = transaction.getType();
BigDecimal amount = transaction.getAmount();
BigDecimal balance = transaction.getBalance();
System.out.printf("| %s | %8s | %18s | %18s |\n", formattedTime, type, amount, balance);
}
System.out.println("+---------------------+----------+---------------------+---------------------+");
}
}
}
最后再写一个测试类,调用方法:
public class TestBankAccount {
public static void main(String[] args) {
// 创建一个账户对象,并初始化
BankAccount bankAccount=new BankAccount("6228895599","中国工商银行",new BigDecimal("1000"));
// 查询余额
bankAccount.queryBalance();
// 存款
bankAccount.deposit(new BigDecimal("1000"));
// 取款
bankAccount.withdraw(new BigDecimal("200"));
// 打印交易记录
bankAccount.printTransactionHistory();
// 创建一个账户对象,并初始化
BankAccount bankAccount2=new BankAccount("622295588","上海浦发银行",new BigDecimal("100"));
// bankAccount账户 给 bankAccount2转账 200
bankAccount.transfer(bankAccount2,new BigDecimal("200"));
// 打印交易记录
bankAccount2.printTransactionHistory();
}
}