首页 > 其他分享 >番外-软件设计(17)

番外-软件设计(17)

时间:2023-11-27 09:12:19浏览次数:38  
标签:acc 17 软件设计 番外 state void println balance public

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

实验要求:

1. 提交源代码;

package test22;

 

 

public class Account {

    private AccountState state;

    private String name;

    public Account(String name){

        this.name=name;

        state=new Greenstate(this);

        System.out.println(name+"开户成功!初始金额:0元");

        System.out.println("******************************");

    }

    public void setState(AccountState state){

        this.state=state;

    }

    public AccountState getState() {

        return this.state;

    }

 

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public void deposit(double money){

        state.deposit(money);

    }

    public void withdraw(double money){

        state.withdraw(money);

    }

}

package test22;

 

public abstract class AccountState {

    protected Account acc;

    protected double balance;

    protected String stateName;

    public abstract void stateCheck(double balance);

    public double getBalance() {

        return balance;

    }

    public void setBalance(double balance) {

        this.balance = balance;

    }

    public String getStateName() {

        return stateName;

    }

    public void setStateName(String stateName) {

        this.stateName = stateName;

    }

    public void deposit(double amount) {

        System.out.println(acc.getName()+"存款"+amount+"元");

        balance+=amount;

        stateCheck(balance);

        System.out.println("当前余额:"+balance+"元,当前状态:"+acc.getState().stateName);

    }

    public void withdraw(double amount) {

        System.out.println(acc.getName()+"取款"+amount+"元");

        balance-=amount;

        stateCheck(balance);

        System.out.println("当前余额:"+balance+"元,当前状态:"+acc.getState().stateName);

    }

}

package test22;

 

public class Client {

    public static void main(String args[]){

        Account acc=new Account("zhangrong");

        acc.deposit(1000);

        System.out.println("---------------------------------------");

        acc.withdraw(500);

        System.out.println("---------------------------------------");

        acc.withdraw(2000);

        System.out.println("---------------------------------------");

        acc.withdraw(600);

        System.out.println("---------------------------------------");

        acc.withdraw(200);

    }

}

package test22;

 

public class Greenstate extends AccountState{

     public Greenstate(AccountState state){

                this.acc=state.acc;

                 this.balance=state.balance;

              this.stateName="正常状态";

            }

      public Greenstate(Account acc){

                this.balance=0;

             this.acc=acc;

                this.stateName="正常状态";

            }

      public void stateCheck(double balance){

                 if(balance<-1000){

                       acc.setState(new Redstate(this));

                    }else if(balance>=-1000&&balance<0){

                       acc.setState(new Yellowstate(this));

                    }

             }

  }

package test22;

 

public class Redstate extends AccountState {

 

    public Redstate(AccountState state) {

        this.acc=state.acc;

        this.balance=state.getBalance();

        this.stateName="透支状态";

    }

 

    public void stateCheck(double balance) {

        if(balance >= -1000 && balance < 0){

            acc.setState(new Yellowstate(this));

        }else if(balance >= 0){

            acc.setState(new Greenstate(this));

        }

    }

    public void withdraw(double amount) {

        System.out.println("对不起,"+acc.getName()+",您不能取款");

        System.out.println("当前余额:"+balance+"元,当前状态:"+acc.getState().stateName);

    }

}

package test22;

 

public class Yellowstate extends AccountState {

 

    public Yellowstate(AccountState state) {

        this.acc=state.acc;

        this.balance=state.getBalance();

        this.stateName="欠费状态";

    }

 

    public void stateCheck(double balance) {

        if(balance >=0 ){

            acc.setState(new Greenstate(this));

        }else if(balance < -1000){

            acc.setState(new Redstate(this));

        }

    }

}

2. 注意编程规范。

标签:acc,17,软件设计,番外,state,void,println,balance,public
From: https://www.cnblogs.com/zjsdbk/p/17858415.html

相关文章

  • 番外-软件设计(19)
    当股票的价格上涨或下降5%时,会通知持有该股票的股民,当股民听到价格上涨的消息时会买股票,当价格下降时会大哭一场。实验要求:1. 提交源代码;packagetest21; importjava.util.ArrayList;publicclassGufenextendsSubject{    publicvoidup(){        Sys......
  • 番外-软件设计(18)
    旅游的出行方式有乘坐飞机旅行、乘火车旅行和自行车游,不同的旅游方式有不同的实现过程,客户可以根据自己的需要选择一种合适的旅行方式。实验要求:1. 提交源代码;packagetest23; publicclassAirplaneStrategyimplementsTravelStrategy{     publicvoidtravel()......
  • Xcode 15 and iOS 17 - Error: DT_TOOLCHAIN_DIR cannot be used to evaluate LIBRARY
    热烈欢迎,请直接点击!!!进入博主AppStore主页,下载使用各个作品!!!注:博主将坚持每月上线一个新app!!Podfile文件添加如下内容后,重新podinstall:post_installdo|installer|#fixxcode15DT_TOOLCHAIN_DIR-removeafterfixoficially-https://github.com/CocoaPods/CocoaPod......
  • 软件设计6
    [实验任务一]:向量的原型用C++完成数学中向量的封装,其中,用指针和动态申请支持向量长度的改变,使用浅克隆和深克隆复制向量类,比较这两种克隆方式的异同。实验要求:1. 画出对应的类图;   2. 提交源代码(用C+  完成);#include"stdafx.h" usingnamespacestd;  ......
  • C++11以及17部分特性
    1//1、并发支持2//1.1、C++11内存模型:3//a.原子性(Atomicity):对于原子类型(std::atomic),其成员函数的操作是原子的,不会被其他线程中断。4//b.可见性(Visibility):对于非原子类型,通过使用互斥量或同步操作来确保共享数据的可见性,即在一个线程中对共享数据的......
  • [Codeforces] CF1799B Equalize by Divide
    序列操作(divide.cpp)—CF1799B—1200题目描述给您一个\(a_1,a_2,\dotsa_n\)这样的正整数数组,您可以对它进行多次(可以是零次)这样的操作:选择两个索引\(i,j(1\leqi,j\leqn,i\neqj)\);将\(a_i\)赋值为\(\lceil\frac{a_i}{a_j}\rceil\)。这里的\(\lceilx\rceil\)......
  • [Codeforces] CF1747C Swap Game
    游戏(game.cpp)—CF1747C—1200\(时间:1s\space|\space空间:250MB\)题面翻译Alice和Bob两个人在玩游戏。有一个长度为\(n\)的序列\(a\),Alice和Bob两人轮流完成一个操作,Alice先开始。每个人可以将数列的第一个数减\(1\),并将它与后面序列的一个数进行交换,如果一个......
  • 2023.11.17-20湖北 武汉 2023第五届全国生物医学数据挖掘与计算学术会议拟于2023年1
     2023第五届全国生物医学数据挖掘与计算学术会议拟于2023年11月17日-20日于华中科技大学举行。会议简介:     全国生物医学数据挖掘与计算学术会议是一个专注于生物医学大数据算法、软件与人工智能方法的重要学术盛会。生物医学领域的快速发展导致了大量的生物医学数据......
  • 第17章_反射机制--尚硅谷2023
    #第17章_反射机制讲师:尚硅谷-宋红康(江湖人称:康师傅)官网:http://www.atguigu.com本章专题与脉络1.反射(Reflection)的概念1.1反射的出现背景Java程序中,所有的对象都有两种类型:编译时类型和运行时类型,而很多时候对象的编译时类型和运行时类型不一致。Objectobj=new......
  • 面向对象软件设计中常见的问题 - 为什么要定义类的私有方法
    "为什么要定义私有方法?"这是一个在面向对象软件设计中常见的问题,涉及到封装性、安全性和设计灵活性等方面的考虑。首先,让我们来看看为什么要使用私有方法。封装性(Encapsulation):面向对象编程的一个基本原则是封装,即将对象的内部细节隐藏起来,只暴露必要的接口给外部。私有方法是......