编写一个Java程序来设计和实现一个Account 类

题目描述

设计和实现一个Java Account 类,要求有以下功能:

  1. 定义 Account 类,包含以下属性:ID (整数型), Balance (双精度浮点型), Rate (双精度浮点型), Date (Calendar 对象, 代表年份、月份、日)。
  2. 没有参数的构造函数,默认值为 ID: 0, Balance: 0, Rate: 0, Date: 1970年1月1日0时0分0秒。
  3. 标准方法:带参构造函数用于初始化账户对象,获取和设置账户属性(id, balance, rate, date);
  4. 方法:
    • withdraw(amount: double) :取款操作,根据年利率与取款金额计算应得利息并从账户余额中扣除;如果没有足够的余额,则打印”The balance of account is insufficient!”;
    • deposit(amount: double) :存款操作,根据年利率与存款金额计算应得利息并从账户余额中增加;如果没有足够的余额,则打印”The balance of account is insufficient!”;
    • getDefasDal() :获取当前日期,可以参考API文档或博客文章(这里以 Java API 提供者Date 类为例),其逻辑是通过创建 Date 对象并获取当前日期的 hourOfDay 字段来得到一天中的 24 小时制时间,然后返回当天的日期。

案例代码

import java.util.Calendar;
 
public class Account {
    private int id;
    private double balance;
    private double rate;
    private Calendar date;
 
    public Account(int id, double balance, double rate, Calendar date) {
        this.id = id;
        this.balance = balance;
        this.rate = rate;
        this.date = date;
    }
 
    // 带参构造函数
    public static Account createDefaultInstance() {
        return new Account(0, 0, 0, Calendar.getInstance());
    }
 
    // 标准构造函数
    public static Account withDefaultParameters(int id, double balance, double rate) {
        return new Account(id, balance, rate, Calendar.getInstance());
    }
 
    // 方法:
    public void withdraw(double amount) {
        if (balance < amount) {
            System.out.println("The balance of account is insufficient!");
        } else {
            // 计算应得利息
            double interest = calculateInterest(amount);
            // 减少余额
            balance -= amount * interest / 100;
            // 输出取款信息
            System.out.println("Amount withdrawn: " + amount);
            System.out.println("Interest: " + interest);
        }
    }
 
    public void deposit(double amount) {
        if (balance < amount) {
            System.out.println("The balance of account is insufficient!");
        } else {
            // 计算应得利息
            double interest = calculateInterest(amount);
            // 在账户余额中增加
            balance += amount * interest / 100;
            // 输出存款信息
            System.out.println("Amount deposited: " + amount);
            System.out.println("Interest: " + interest);
        }
    }
 
    private double calculateInterest(double amount) {
        int year = date.get(Calendar.YEAR);
        int month = date.get(Calendar.MONTH);
        int day = date.get(Calendar.DAY_OF_MONTH);
 
        // 考虑日历的实际天数(例如:1月1日是28天),将得到的一年中的 24 小时制日期转换为实际天数
        int daysInMonth = (int) Math.floor((month + 1) / 12);
        int dayOfWeek = (int) ((day % 7) + 1);
 
        // 计算应得利息
        double interest = (daysInMonth * rate * amount) / 365.25;
        return interest;
    }
 
    // 获取当前日期
    public static Calendar getInstance() {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, 9);
        calendar.set(Calendar.MINUTE, 30);
        calendar.set(Calendar.SECOND, 30);
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar;
    }
}

上述代码首先定义了 Account 类,包含了 idbalancerate, 和 date 属性。然后,我们提供两个静态构造函数 createDefaultInstance 和 withDefaultParameters 来创建不同参数的新账户对象。其中,createDefaultInstance 使用默认的参数初始化 Account 对象,而 withDefaultParameters 则为给定参数的 Account 创建对象。接着,我们实现了 withdraw 方法和 deposit 方法,分别用于取款和存款。这些方法内部使用了相应的公式计算应得利息,并检查账户余额是否小于取款金额,若如此则输出错误消息,否则进行相应的取款或存款操作。此外,我们还提供了 calculateInterest 方法来计算账户的年利率,该方法基于实际的日历天数与一整年的 24 小时制日期进行换算。最后,我们定义了一个公共静态方法 getInstance 来获取当前日期,这可以在运行时根据需要设置成不同的日期。

注意,这个例子没有对单元测试进行编写,你需要根据具体的需求添加适当的测试用例,以确保账户功能在各种情况下都能正常工作。同时,为了保证结果的准确性,可能需要根据实际情况调整计算年利率的方法,比如使用更精确的公历年份、月份以及日数等。

© 版权声明
THE END
喜欢就支持一下吧
点赞7赞赏 分享