2024.11.25(周一)
用Java代码模拟实现课堂上的“银行账户”的实例,要求编写客户端测试代码模拟用户存款和取款,注意账户对象状态和行为的变化。
实验要求:
1. 画出对应的类图;
2. 提交源代码;
3. 注意编程规范。
1、类图
2、源代码
(1)GreenState.java
package rjsj.no22;
public class GreenState extends AccountState{
public GreenState(double balance,Account acc) {
this.balance = balance;
this.account = acc;
this.stateName = "正常状态";
}
}
(2)RedState.java
package rjsj.no22;
public class RedState extends AccountState{
public RedState(AccountState state) {
this.balance = state.balance;
this.account = state.account;
this.stateName="透支状态";
}
public void withdraw(double amount) {
System.out.println(account.getOwner()+"取款"+amount);
System.out.println("抱歉,您的账户已处于透支状态,不能取款!");
}
}
(3)YellowState.java
package rjsj.no22;
public class YellowState extends AccountState{
public YellowState(AccountState state) {
this.balance = state.balance;
this.account = state.account;
this.stateName="欠费状态";
}
}
(4)Account.java
package rjsj.no22;
public class Account {
private AccountState state;
private String owner;
public AccountState getState() {
return state;
}
public void setState(AccountState state) {
this.state = state;
}
public String getOwner() {
return owner;
}
public void deposit(double amount) {
state.deposit(amount);
}
public void withdraw(double amount) {
state.withdraw(amount);
}
public Account(String owner, double initBalance) {
this.owner = owner;
this.state = new GreenState(initBalance,this);
System.out.println(this.owner + "开户成功!银行卡初始金额:" + initBalance);
System.out.println("----------------------------------------------------");
}
}
(5)AccountState.java
package rjsj.no22;
public abstract class AccountState {
protected Account account;//账户名
protected double balance;//账户金额
protected String stateName;//当前状态
public void deposit(double amount) {
System.out.println(account.getOwner() + "存款" + amount);
this.balance = this.balance + amount;
stateCheck();
System.out.println("账户余额:" + this.balance);
System.out.println("账户状态:" + account.getState().stateName);
}
public void withdraw(double amount) {
System.out.println(account.getOwner() + "取款" + amount);
this.balance = this.balance - amount;
stateCheck();
System.out.println("账户余额:" + this.balance);
System.out.println("账户状态:" + account.getState().stateName);
}
public void stateCheck(){//状态审查
if( balance >= -1000 && balance < 0 ) {
account.setState(new YellowState(this));
}else if( balance < -1000 ) {
account.setState(new RedState(this));
}else if ( balance > 0 ){
account.setState(new GreenState(this.balance,this.account));
}
}
}
(6)Client.java
package rjsj.no22;
public class Client {
public static void main(String[] args) {
Account account = new Account("张三",100);
account.deposit(8888);
System.out.println("------------------------------");
account.withdraw(666);
System.out.println("------------------------------");
account.deposit(50);
System.out.println("------------------------------");
account.withdraw(9000);
System.out.println("------------------------------");
account.withdraw(50000);
System.out.println("------------------------------");
account.deposit(3000);
System.out.println("------------------------------");
account.withdraw(100);
}
}
分类:
2024年秋 / 每日博客
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
2023-11-25 《程序员修炼之道——从小工到专家》读后感6
2023-11-25 《程序员修炼之道——从小工到专家》读后感5
2023-11-25 11.24(周五)总结
2023-11-25 11.23(周四)总结
2023-11-25 11.22(周三)总结
2023-11-25 11.21(周二)总结
2023-11-25 11.20(周一)总结