24.11.28

[实验任务一]:银行账户
用Java代码模拟实现课堂上的“银行账户”的实例,要求编写客户端测试代码模拟用户存款和取款,注意账户对象状态和行为的变化。
实验要求:

  1. 画出对应的类图;
    image

  2. 提交源代码;
    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); // 尝试存款到冻结账户
}

}

  1. 注意编程规范。
posted @ 2024-11-28 19:30  起名字真难_qmz  阅读(10)  评论(0)    收藏  举报