1、实验要求
本实验要求:根据书籍借阅的天数计算归还日期。
1-1. 业务说明:
1-1.1. 本实验以图书馆借阅书籍为业务背景。
1-1.2. 图书馆书籍归还时间规定如下:
1)任何书籍自借阅日起,15天内必须归还(标准极限时间)。
2)用户也可以明确告知图书馆书籍的归还日期,例如:10天后归还。
3)用户自定义的书籍归还日期,不能超过图书馆规定的极限时间:15天。
1-2. 创建工程并配置环境:
1-2.1. 限制1. 工程取名:SE_JAVA_EXP_E025。
1-2.2. 限制2. 创建包,取名:cn.campsg.java.experiment。
1-3. 创建工具类:
1-3.1. 限制1. 在包cn.campsg.java.experiment下创建工具类:DateUtils。
+ 业务说明: 1) 工具类是系统开发中常见的组件,它用于提供各种计算函数。 2) 为方便在实际生产环境中调用,工具类内的计算函数均为静态函数。 |
1-3.2. 技术常识:本实验需确保工具类DateUtils不可被继承。
1-3.3. 技术常识:本实验需确保工具类DateUtils不可被实例化。
1-4. 创建归还日期计算函数:
1-4.1. 限制1. 函数名:getReturnDate。
1-4.2. 该函数以系统时间为基准,按用户自定义的归还日期计算书籍的归还日。
1-4.3. 书籍归还日期虽可以由用户自定义,但是不能超过15天。
1-5. 创建标准归还日期计算函数:
1-5.1. 限制1. 函数名:getReturnDate。
1-5.2. 限制2:该函数必须定义成函数重载形式。
1-5.3. 该函数以系统时间为基准,计算图书馆规定的书籍极限归还日期(15天)。
1-6. 使用工具类:
1-6.1. 限制1. 在包cn.campsg.java.experiment下创建主类:MainClass。
1-6.2. 调用标准归还日期计算函数,获得书籍的极限归还日期。
1-6.3. 向控制台输出:"图书馆规定最晚归还日期:" + 书籍的极限归还日期。
1-6.4. 调用归还日期计算函数,按用户输入的归还日期获得书籍归还日。
1)如函数返回null,输出:"借阅时间过长"
2)否则,输出:"书籍实际归还日期:" + 书籍归还日。
2、实现思路
2-1. 按实验要求创建工程并配置环境。
2-2. 创建工具类:
2-2.1. 在包cn.campsg.java.experiment下创建工具类:DateUtils。
2-2.2. 在DateUtils的类定义处增加final关键字,防止被其他类继承。
2-2.3. 为DateUtils增加私有的0参构造函数,防止被实例化。
2-3. 创建归还日期计算函数:
2-3.1. 定义并实现归还日期计算函数,形式如下:
+ 提示 /** * 根据自定义借阅天数计算书籍归还日期。 * @param divDate 借阅天数 * @return 书籍归还日期,null:借阅天数无效 */ public static String getReturnDate(int divDate) { } |
2-3.2. 在DateUtils类中,定义极限归还日常量:STANDARD_RET_DATE。
2-3.3. 为常量赋值15。
+ 提示 /* 图书馆规定的标准书籍借阅归还日期 */ public static final int STANDARD_RET_DATE = 15; |
2-3.4. 判断用户自定义的归还日期是否有效:
1) 如果参数divDate大于极限归还日常量,那么函数返回null。
2-3.5. 计算归还日期:
1)获取当前系统时间:实例化java.util.Date对象。
2)通过getTime()方法将系统时间转换为毫秒。
3)将用户自定义的归还天数(divDate)转换成毫秒:
divDate * 24 * 60 * 60 * 1000(天 * 小时 * 分钟 * 秒钟 * 毫秒)
4)实际归还日期 = 系统毫秒时间 + 用户自定义归还日毫秒时间。
2-3.6. 格式化日期:
1)再次实例化java.util.Date对象,对象参数为:实际归还日期。
2)创建格式化日期类的对象SimpleDateFormat。
3)传入日期格式:yyyy-MM-dd(y代表年,M代表月,d代表天)。
4)返回格式化为String类型的日期。
2-4. 创建标准归还日期计算函数:
2-4.1. 定义并实现标准归还日期计算函数(重载函数),形式如下:
+ 提示 /** * 根据图书馆规定的标准借阅天数计算书籍归还日期。 * @return 书籍归还日期 */ public static String getReturnDate() { } |
2-4.2. 调用上一步骤中实现的:归还日期计算函数。
2-4.3. 参数传入:STANDARD_RET_DATE(15天)。
2-4.4. 返回日期。
+ 业务说明: 1) 定义重载函数的目的在于:确保相同名称的函数具有不同的特性,通过参数个数与类型的差异性实现不同的业务需求。 2) 本实验,1参函数允许用户自定义归还日,0参函数则直接返回图书馆规定的归还日期。 3) 本实验巧妙地实现了重载函数之间的相互调用,确保函数代码的最高维护性。 |
2-5. 使用工具类:
2-5.1. 在包cn.campsg.java.experiment下创建MainClass类。
2-5.2. 在MainClass类中添加函数主入口(main函数)。
2-5.3. 调用0参getReturnDate函数,获得书籍的极限归还日期。
2-5.4. 向控制台输出:"图书馆规定最晚归还日期:" + 书籍的极限归还日期。
2-5.5. 调用1参getReturnDate函数,参数输入10,获得书籍的归还日期。
2-5.6. 根据返回做出如下判断:
1)如函数返回null,输出:"借阅时间过长"
2)否则,输出:"书籍实际归还日期:" + 书籍归还日。
package cn.campsg.java.experiment;
import java.text.SimpleDateFormat;
import java.util.*;
public final class DateUtils { // 防止被其他类继承
// 定义图书馆规定的标准书籍借阅归还日期常量
public static final int STANDARD_RET_DATE = 15;
private DateUtils() { // 防止被实例化
super();
}
// 根据自定义借阅天数计算书籍归还日期
public static String getReturnDate(int divDate) {
if (divDate > STANDARD_RET_DATE)
return null;
else {
Date date = new Date();
SimpleDateFormat returnDate = new SimpleDateFormat("yyyy-MM-dd");
return returnDate.format(date.getTime() + divDate * 24 * 60 * 60 * 1000);
}
}
// 根据图书馆规定的标准借阅天数计算书籍归还日期
public static String getReturnDate() {
return getReturnDate(STANDARD_RET_DATE);
}
}
package cn.campsg.java.experiment;
public class MainClass {
public static void main(String[] args) {
System.out.println("图书馆规定最晚归还日期:" + DateUtils.getReturnDate());
if (DateUtils.getReturnDate(10) != null) // 测试借阅天数10
System.out.println("书籍实际归还日期:" + DateUtils.getReturnDate(10));
else
System.out.println("借阅时间过长");
}
}