首页 > 编程语言 >【Java】—— Java面向对象进阶:Java中的账户管理-基础账户与可透支账户的实现与测试

【Java】—— Java面向对象进阶:Java中的账户管理-基础账户与可透支账户的实现与测试

时间:2024-09-02 18:23:37浏览次数:12  
标签:透支 CheckAccount Java 进阶 账户 double withdraw public

目录

1. 基础账户类(Account)

2. 测试基础账户类

3. 可透支账户类(CheckAccount)

4. 测试可透支账户类

运行结果


1. 基础账户类(Account)

        写一个名为Account的类模拟账户。该类的属性和方法如下图所示。该类包括的属性:账号id,余额balance,年利率annualInterestRate;包含的方法:访问器方法(getter和setter方法),返回月利率的方法getMonthlyInterest(),取款方法withdraw(),存款方法deposit()。

        写一个用户程序测试Account类。在用户程序中,创建一个账号为1122、余额为20000、年利率4.5%的Account对象。使用withdraw方法提款30000元,并打印余额。 再使用withdraw方法提款2500元,使用deposit方法存款3000元,然后打印余额和月利率。

        提示:在提款方法withdraw中,需要判断用户余额是否能够满足提款数额的要求,如果不能,应给出提示。 运行结果如图所示:

package exer6;

/**
 * ClassName:IntelliJ IDEA
 * Description:
 * 1、写一个名为Account的类模拟账户。该类的属性和方法如下图所示。
 * 该类包括的属性:账号id,余额balance,年利率annualInterestRate;
 * 包含的方法:访问器方法(getter和setter方法),返回月利率的方法getMonthlyInterest(),
 * 取款方法withdraw(),存款方法deposit()。
 *
 * @Author zyjstart
 * @Create:2024/9/2 17:06
 */
public class Account {
    private int id;
    private double balance;
    private double annualInterestRate;  // 年利率

    // 构造器
    public Account() {
    }

    public Account(int id, double balance, double annualInterestRate) {
        this.id = id;
        this.balance = balance;
        this.annualInterestRate = annualInterestRate;
    }

    // get、set方法

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }

    public double getAnnualInterestRate() {
        return annualInterestRate;
    }

    public void setAnnualInterestRate(double annualInterestRate) {
        this.annualInterestRate = annualInterestRate;
    }


    /**
     * 获取月利率的方法
     *
     * @return 月利率
     */
    public double getMonthlyInterest() {
        return annualInterestRate / 12;  // 月利率 = 年利率/12
    }

    // 取款方法withdraw()

    /**
     * 取钱操作
     * @param amount 取钱金额
     */
    public void withdraw(double amount) {
        if (balance >= amount) {
            balance -= amount;
        }
        else {
            System.out.println("余额不足!");
        }
    }

    // 存款方法deposit()

    /**
     * 存钱操作
     * @param amount 存钱金额
     */
    public void deposit(double amount){
        if (amount > 0){
            balance += amount;
        }
    }
}
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

2. 测试基础账户类

package exer6;

/**
 * ClassName:IntelliJ IDEA
 * Description:
 *      写一个用户程序测试Account类。在用户程序中,创建一个账号为1122、余额为20000、年利率4.5%的Account对象。
 *      使用withdraw方法提款30000元,并打印余额。
 *      再使用withdraw方法提款2500元,使用deposit方法存款3000元,然后打印余额和月利率。
 * @Author zyjstart
 * @Create:2024/9/2 17:20
 */
public class AccountTest {
    public static void main(String[] args) {
        // 创建Account的一个实例
        Account account = new Account(1122, 20000, 0.045);
        // 取钱30000
        account.withdraw(300000);
        System.out.println("您的账户余额为:" + account.getBalance());
        account.withdraw(2500);
        // 存钱2500
        account.deposit(3000);
        System.out.println("您的账户余额为:" + account.getBalance());
        System.out.println("您的月利率为:" + account.getMonthlyInterest());
    }
}
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

测试结果

3. 可透支账户类(CheckAccount)

        创建Account类的一个子类CheckAccount代表可透支的账户,该账户中定义一个属性overdraft代表可透支限额。在CheckAccount类中重写withdraw方法,其算法如下:

如果(取款金额<账户余额),
    可直接取款
如果(取款金额>账户余额),
    计算需要透支的额度
    判断可透支额overdraft是否足够支付本次透支需要,如果可以
        将账户余额修改为0,冲减可透支金额
    如果不可以
        提示用户超过可透支额的限额

        要求:写一个用户程序测试CheckAccount类。在用户程序中,创建一个账号为1122、余额为20000、年利率4.5%,可透支限额为5000元的CheckAccount对象。

使用withdraw方法提款5000元,并打印账户余额和可透支额。

再使用withdraw方法提款18000元,并打印账户余额和可透支额。

再使用withdraw方法提款3000元,并打印账户余额和可透支额。

提示:

(1)子类CheckAccount的构造方法需要将从父类继承的3个属性和子类自己的属性全部初始化。

(2)父类Account的属性balance被设置为private,但在子类CheckAccount的withdraw方法中需要修改它的值,因此应修改父类的balance属性,定义其为protected。

运行结果如下图所示:

package exer6;

/**
 * ClassName:IntelliJ IDEA
 * Description:
 *      创建Account类的一个子类CheckAccount代表可透支的账户,该账户中定义一个属性overdraft代表可透支限额。
 *      在CheckAccount类中重写withdraw方法:
 *      如果(取款金额<账户余额),
 *  	    可直接取款
 *      如果(取款金额>账户余额),
 * 	        计算需要透支的额度
 * 	        判断可透支额overdraft是否足够支付本次透支需要,如果可以
 * 		    将账户余额修改为0,冲减可透支金额
 * 	        如果不可以
 * 		    提示用户超过可透支额的限额
 * @Author zyjstart
 * @Create:2024/9/2 17:29
 */
public class CheckAccount extends Account {
    private double overdraft;   // 可透支限额

    // 构造器


    public CheckAccount() {
    }

    public CheckAccount(double overdraft) {
        this.overdraft = overdraft;
    }

    public CheckAccount(int id, double balance, double annualInterestRate, double overdraft) {
        super(id, balance, annualInterestRate);
        this.overdraft = overdraft;
    }

    // get  set方法
    public double getOverdraft() {
        return overdraft;
    }

    public void setOverdraft(double overdraft) {
        this.overdraft = overdraft;
    }

    /**
     * 针对于可透支的账户的取钱操作
     * @param amount 取钱金额
     */
    @Override
    public void withdraw(double amount){
        if (getBalance() >= amount){
            // 取钱金额 < 账户金额,直接再账户里取,这里调用父类的存钱操作
            super.withdraw(amount);
        }else if (getBalance() + overdraft >= amount){

            overdraft -= amount - getBalance();
            super.withdraw(getBalance());
        }else {
            System.out.println("超过可透支限额!");
        }
    }
}

4. 测试可透支账户类

最后,我们编写一个测试类CheckAccountTest来验证CheckAccount类的功能。

package exer6;

/**
 * ClassName:IntelliJ IDEA
 * Description:
 *      写一个用户程序测试CheckAccount类。
 *      在用户程序中,创建一个账号为1122、余额为20000、年利率4.5%,可透支限额为5000元的CheckAccount对象。
 *
 *      使用withdraw方法提款5000元,并打印账户余额和可透支额。
 *      再使用withdraw方法提款18000元,并打印账户余额和可透支额。
 *      再使用withdraw方法提款3000元,并打印账户余额和可透支额。
 * @Author zyjstart
 * @Create:2024/9/2 17:51
 */
public class CheckAccountTest {
    public static void main(String[] args) {
        CheckAccount ca = new CheckAccount(1122,20000,0.045,5000);
        ca.withdraw(5000);
        System.out.println("您的账户余额为:" + ca.getBalance());
        System.out.println("您可透支额为:" + ca.getOverdraft());

        ca.withdraw(18000);
        System.out.println("您的账户余额为:" + ca.getBalance());
        System.out.println("您可透支额为:" + ca.getOverdraft());

        ca.withdraw(3000);
        System.out.println("您的账户余额为:" + ca.getBalance());
        System.out.println("您可透支额为:" + ca.getOverdraft());
    }
}

运行结果

        通过以上步骤,我们成功实现了基础账户和可透支账户的模拟,并通过测试类验证了这些类的功能。希望这篇文章能够帮助你理解如何在Java中使用类和对象来模拟现实世界中的复杂系统。

标签:透支,CheckAccount,Java,进阶,账户,double,withdraw,public
From: https://blog.csdn.net/weixin_63106307/article/details/141826274

相关文章

  • 高级java每日一道面试题-2024年9月02日-基础篇-什么是脏读、不可重复读和幻读?
    如果有遗漏,评论区告诉我进行补充面试官:什么是脏读、不可重复读和幻读?我回答:在数据库事务的并发控制中,脏读(DirtyRead)、不可重复读(Non-repeatableRead)和幻读(PhantomRead)是三种常见的并发问题,它们主要涉及到事务的隔离级别和一致性。了解这些问题有助于我们设计更健......
  • 高级java每日一道面试题-2024年9月02日-基础篇-如何处理嵌套事务?
    如果有遗漏,评论区告诉我进行补充面试官:如何处理嵌套事务?我回答:处理嵌套事务(NestedTransactions)是Java开发中一个常见的问题,特别是在涉及多个数据库操作时。嵌套事务指的是在一个事务中又开始了另一个事务,形成了事务的层次结构。处理嵌套事务需要特别注意事务的边界......
  • JAVA List<Map<String, Object>> sort 多个排序写法
     基本方法/***排序=**@paramlist*@paramsort_key*@return*/publicstaticList<Map<String,Object>>sort(List<Map<String,Object>>list,Stringsort_key,Booleanasc,Stringsort_key2,Boole......
  • Java平衡树--查找树的新建与树的实现
    Java学习+面试指南:https://javaxiaobear.cn1、查找树的定义一棵2-3查找树要么为空,要么满足满足下面两个要求:2-结点含有一个键(及其对应的值)和两条链,左链接指向2-3树中的键都小于该结点,右链接指向的2-3树中的键都大于该结点。3-结点含有两个键(及其对应的值)和三条链,左链接指向的2......
  • Java 最小优先队列API设计与实现
    Java学习+面试指南:https://javaxiaobear.cn最小的元素放在数组的索引1处。每个结点的数据总是小于等于它的两个子结点的数据。1、API设计类名MinPriorityQueue构造方法MinPriorityQueue(intcapacity):创建容量为capacity的MinPriorityQueue对象成员方法privatebooleanless(inti......
  • Java 堆的设计,如何用堆进行排序
    Java学习+面试指南:https://javaxiaobear.cn1、堆的定义堆是计算机科学中一类特殊的数据结构的统称,堆通常可以被看做是一棵完全二叉树的数组对象。1、堆的特性它是完全二叉树,除了树的最后一层结点不需要是满的,其它的每一层从左到右都是满的,如果最后一层结点不是满的,那么要求左满右......
  • Java最大优先队列设计与实现
    Java学习+面试指南:https://javaxiaobear.cn1、API设计类名MaxPriorityQueue构造方法MaxPriorityQueue(intcapacity):创建容量为capacity的MaxPriorityQueue对象成员方法privatebooleanless(inti,intj):判断堆中索引i处的元素是否小于索引j处的元素privatevoideach(inti,int......
  • Java索引优先队列设计思路与实现
    Java学习+面试指南:https://javaxiaobear.cn1、实现思路存储数据时,给每一个数据元素关联一个整数,例如insert(intk,Tt),我们可以看做k是t关联的整数,那么我们的实现需要通过k这个值,快速获取到队列中t这个元素,此时有个k这个值需要具有唯一性。最直观的想法就是我们可以用一个T[]ite......
  • Java二叉树的遍历以及最大深度问题
    Java学习+面试指南:https://javaxiaobear.cn1、树的相关概念1、树的基本定义树是我们计算机中非常重要的一种数据结构,同时使用树这种数据结构,可以描述现实生活中的很多事物,例如家谱、单位的组织架构、等等。树是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为......
  • 运行开发模板报错lombok java 无法将类 XX类中的构造器 X应用到给定类型|java: 找不到
    一.运行环境IntelliJIDEA2024.1.4  IDEA旗舰版二.解决方法1.更改lombok版本→1.8.30<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>provided</scope......