首页 > 其他分享 >11.25

11.25

时间:2024-12-18 17:52:47浏览次数:8  
标签:acc double void 11.25 amount balance public

软件设计                  石家庄铁道大学信息学院

 

实验 22:状态模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 

1、理解状态模式的动机,掌握该模式的结构;

2、能够利用状态模式解决实际问题。

 

[实验任务一]:银行账户

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

实验要求:

1. 类图;

 

 

2. 源代码;

①、AccountState.java

package org.example.shiyanershier;

public abstract class AccountState {
    protected Account acc;
    protected double balance;
    public abstract void stateCheck();
    public abstract void deposit(double amount);
    public abstract void withdraw(double amount);
}

 

②、GreenState.java

package org.example.shiyanershier;

public class GreenState extends AccountState {

    public GreenState() {}

    public GreenState(double amount, Account account) {
        balance = amount;
        acc = account;
    }

    @Override
    public void stateCheck() {
        if (balance >= 0) {
            acc.setState(new GreenState(balance, acc));
            System.out.println("当前为正常(绿色)状态");
        } else if(balance <0 && balance >= -1000) {
            acc.setState(new YellowState(balance, acc));
            System.out.println("当前为欠费(黄色)状态");
        } else {
            acc.setState(new RedState(balance, acc));
            System.out.println("当前透支(红色)状态");
        }

    }

    @Override
    public void deposit(double amount) {
        balance += amount;
        stateCheck();
    }

    @Override
    public void withdraw(double amount) {
        balance -= amount;
        stateCheck();
    }
}

 

③、RedState.java

package org.example.shiyanershier;

public class RedState extends AccountState {

    public RedState(double amount, Account acc) {
        this.balance = amount;
        this.acc = acc;
    }
    @Override
    public void stateCheck() {
        if (balance >= 0) {
            acc.setState(new GreenState(balance, acc));
            System.out.println("当前为正常(绿色)状态");
        } else if(balance <0 && balance >= -1000) {
            acc.setState(new YellowState(balance, acc));
            System.out.println("当前为欠费(黄色)状态");
        } else {
            acc.setState(new RedState(balance, acc));
            System.out.println("当前透支(红色)状态");
        }

    }

    @Override
    public void deposit(double amount) {
        balance += amount;
        stateCheck();
    }

    @Override
    public void withdraw(double amount) {
        System.out.println("透支状态,无法取款!");
    }
}

 

④、YellowState.java

package org.example.shiyanershier;

public class YellowState extends AccountState {

    public YellowState(double amount, Account acc) {
        this.balance = amount;
        this.acc = acc;
    }

    @Override
    public void stateCheck() {
        if (balance >= 0) {
            acc.setState(new GreenState(balance, acc));
            System.out.println("当前为正常(绿色)状态");
        } else if(balance <0 && balance >= -1000) {
            acc.setState(new YellowState(balance, acc));
            System.out.println("当前为欠费(黄色)状态");
        } else {
            acc.setState(new RedState(balance, acc));
            System.out.println("当前透支(红色)状态");
        }
    }

    @Override
    public void deposit(double amount) {
        balance += amount;
        stateCheck();

    }

    @Override
    public void withdraw(double amount) {
        balance -= amount;
        stateCheck();

    }
}

 

⑤、Account.java

package org.example.shiyanershier;

public class Account {
    private AccountState state;
    private String owner;
    public Account(String owner, double init) {
        this.owner = owner;
        state = new GreenState(init, this);
        System.out.println("账户:" + this.owner + ",余额:" + init);

    }

    public void setState(AccountState state) {
        this.state = state;
    }

    /**
     * 存款
     * @param amount
     */
    public void deposit(double amount) {
        state.deposit(amount);
        System.out.println("现金余额为" + this.state.balance);
    }


    /**
     * 取款
     * @param amount
     */
    public void withdraw(double amount){
        state.withdraw(amount);
        System.out.println("现金余额为" + state.balance);
    }
}

 

⑥、Main.java

package org.example.shiyanershier;

public class Main {
    public static void main(String[] args) {
        Account acc = new Account("何不语", 2500);
        acc.deposit(1000);
        acc.deposit(2000);
        acc.withdraw(5000);
        acc.withdraw(7000);
        acc.deposit(6000);
    }
}

 

3. 运行结果。

 

 

 

标签:acc,double,void,11.25,amount,balance,public
From: https://www.cnblogs.com/zzqq1314/p/18615585

相关文章

  • 11.25~12.15 总结
    题目有点多,这里就不写算法相关内容了(其实也没搞完)。NOIP前主要为了增加一点调试能力去写了大模拟,但是好像用处不是很大。NOIP场上主要的问题是半场开始比较懈怠,以及没有严格测试程序(虽然这次运气比较好没有挂T3和T2的大部分分数)。必须在Linux下测试程序和所有大样例。场......
  • 11.25 每日总结(适配器模式)
    今天学习适配器模式马上要设计模式考试了,ε=(´ο`*)))唉 定义:适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。 定义: 适配器模式将某个类......
  • 11.25
    语句并非按顺序执行 C++ 程序表现得仿佛它们是按顺序执行的,完全遵守了 C++ 流程控制语句的控制。上句话影响优化的计算机行为 | 19中的含糊其辞的“仿佛”正是许多编译器进行优化的基础,也是现代计算机硬件的许多技巧的基础。当然,在底层,编译器能够而且有时也确实会对语句......
  • C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
    前言C#/.NET/.NETCore技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NETCore领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。欢迎投稿、推荐或自荐优质文章、项目、学习资源等......
  • C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
    前言C#/.NET/.NETCore技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NETCore领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。欢迎投稿、推荐或自荐优质文章、项目、学习资源等。......
  • 11.25实验 23:策略模式
    [实验任务一]:旅行方式的选择旅游的出行方式有乘坐飞机旅行、乘火车旅行和自行车游,不同的旅游方式有不同的实现过程,客户可以根据自己的需要选择一种合适的旅行方式。实验要求:1. 画出对应的类图;  2. 提交源代码;packagestrategy; publicclassPerson{    priv......
  • 上周热点回顾(11.25-12.1)
    热点随笔:· 2024年各编程语言运行100万个并发任务需要多少内存? (InCerry)· .NET9-Swagger平替Scalar详解(四) (IT规划师)· 《HelloGitHub》第104期 (削微寒)· MySQL用错了,99%的人已中招 (苏三说技术)· .NETCore线程池(ThreadPool)底层原理浅谈 (叫我安不理)·......
  • 11.25日报
    完成设计模式实验十八,以下为今日实验内容:实验18:迭代器模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解迭代器模式的动机,掌握该模式的结构;2、能够利用迭代器模式解决实际问题。     [实验任务一]:JAVA和C++常见数据结构迭代器的使用信130......
  • 985研一学习日记 - 2024.11.25
    一个人内耗,说明他活在过去;一个人焦虑,说明他活在未来。只有当一个人平静时,他才活在现在。日常1、起床2、健身3、LeetCode刷了1题单词拆分给定一个非空字符串s和一个包含非空单词的列表wordDict,判定s是否可以被空格拆分为一个或多个在字典中出现的单词。该问题......
  • 11.25 周一日常
    11.25周一日常Q1.1200给定x,y,k,k次操作,每次操作:x++,若x可被y整除,x一直除以y。问最终x的值。(x,y,k≤1e9)Q2.1400给定一等差数列a,每次操作:令最大值=mex{a}。问是否可以将a变成0~n-1的排列和最小操作次数。(1e18)Q3.1600给定一数组和lim,设操作l,r:i:l->r,令s=0,s+=a[i];每一步如......