24.11.28
[实验任务一]:银行账户
用Java代码模拟实现课堂上的“银行账户”的实例,要求编写客户端测试代码模拟用户存款和取款,注意账户对象状态和行为的变化。
实验要求:
-
画出对应的类图;
![image]()
-
提交源代码;
Account类
package org.test.ruanjiansheji.zhuangtai;
class Account {
private String owner;
private double balance;
private AccountState state;
public Account(String owner, double balance) {
this.owner = owner;
this.balance = balance;
this.state = new NormalState();
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
public void setState(AccountState state) {
this.state = state;
}
public void deposit(double amount) {
state.deposit(this, amount);
}
public void withdraw(double amount) {
state.withdraw(this, amount);
}
public void checkState() {
if (balance >= 0) {
setState(new NormalState());
} else if (balance < 0 && balance > -1000) {
setState(new OverdrawnState());
} else if (balance <= -1000) {
setState(new FrozenState());
}
}
public String getOwner() {
return owner;
}
}
主类
package org.test.ruanjiansheji.zhuangtai;
// 状态接口
interface AccountState {
void deposit(Account account, double amount);
void withdraw(Account account, double amount);
}
// 正常状态
class NormalState implements AccountState {
@Override
public void deposit(Account account, double amount) {
account.setBalance(account.getBalance() + amount);
System.out.println("存款成功,存入金额: " + amount + ",当前余额: " + account.getBalance());
account.checkState();
}
@Override
public void withdraw(Account account, double amount) {
account.setBalance(account.getBalance() - amount);
System.out.println("取款成功,取出金额: " + amount + ",当前余额: " + account.getBalance());
account.checkState();
}
}
// 透支状态
class OverdrawnState implements AccountState {
@Override
public void deposit(Account account, double amount) {
account.setBalance(account.getBalance() + amount);
System.out.println("存款成功,存入金额: " + amount + ",当前余额: " + account.getBalance());
account.checkState();
}
@Override
public void withdraw(Account account, double amount) {
System.out.println("账户透支,无法取款: " + amount);
}
}
// 冻结状态
class FrozenState implements AccountState {
@Override
public void deposit(Account account, double amount) {
System.out.println("账户被冻结,无法存款: " + amount);
}
@Override
public void withdraw(Account account, double amount) {
System.out.println("账户被冻结,无法取款: " + amount);
}
}
public class Main {
public static void main(String[] args) {
Account account = new Account("张三", 500);
System.out.println("初始账户余额: " + account.getBalance());
account.deposit(300); // 存款
account.withdraw(1000); // 超额取款
account.withdraw(200); // 再次取款导致透支
account.deposit(700); // 存款恢复余额
account.withdraw(2000); // 大额取款导致冻结
account.deposit(100); // 尝试存款到冻结账户
}
}
- 注意编程规范。


浙公网安备 33010602011771号