题目描述
设计和实现一个Java Account 类,要求有以下功能:
- 定义 Account 类,包含以下属性:ID (整数型), Balance (双精度浮点型), Rate (双精度浮点型), Date (Calendar 对象, 代表年份、月份、日)。
- 没有参数的构造函数,默认值为 ID: 0, Balance: 0, Rate: 0, Date: 1970年1月1日0时0分0秒。
- 标准方法:带参构造函数用于初始化账户对象,获取和设置账户属性(id, balance, rate, date);
- 方法:
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
类,包含了 id
, balance
, rate
, 和 date
属性。然后,我们提供两个静态构造函数 createDefaultInstance
和 withDefaultParameters
来创建不同参数的新账户对象。其中,createDefaultInstance
使用默认的参数初始化 Account 对象,而 withDefaultParameters
则为给定参数的 Account 创建对象。接着,我们实现了 withdraw
方法和 deposit
方法,分别用于取款和存款。这些方法内部使用了相应的公式计算应得利息,并检查账户余额是否小于取款金额,若如此则输出错误消息,否则进行相应的取款或存款操作。此外,我们还提供了 calculateInterest
方法来计算账户的年利率,该方法基于实际的日历天数与一整年的 24 小时制日期进行换算。最后,我们定义了一个公共静态方法 getInstance
来获取当前日期,这可以在运行时根据需要设置成不同的日期。
注意,这个例子没有对单元测试进行编写,你需要根据具体的需求添加适当的测试用例,以确保账户功能在各种情况下都能正常工作。同时,为了保证结果的准确性,可能需要根据实际情况调整计算年利率的方法,比如使用更精确的公历年份、月份以及日数等。
© 版权声明
本站资源来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!
THE END