在当今数字流媒体盛行的时代,传统的DVD租赁业务似乎已成为过去。但作为一个经典的业务模型,实现一个DVD管理系统仍然是学习编程的绝佳练手项目。今天,我将带大家深入分析一个用Java实现的迷你DVD管理系统,探讨其设计思路、实现细节以及可能的优化方向。
这个DVD管理系统主要提供以下功能:
新增DVD
查看所有DVD
删除DVD
借出DVD
归还DVD
计算租金DVD
系统使用数组存储数据,通过静态方法实现各功能模块。
系统使用四个并行数组来存储DVD信息:
static int[] indexes = new int[50]; // 存储DVD序号
static String[] states = new String[50]; // 存储DVD状态("可借"或"已借出")
static String[] names = new String[50]; // 存储DVD名称
static String[] dates = new String[50]; // 存储借出/归还日期
初始化时预设三个DVD:
indexes[0] = 1; states[0] = "已借出"; names[0] = "罗马假日"; dates[0] = "2010-7-1";
indexes[1] = 2; states[1] = "可借"; names[1] = "风声鹤唳"; dates[1] = "";
indexes[2] = 3; states[2] = "可借"; names[2] = "浪漫满屋"; dates[2] = "";
1.查看DVD(queryDVD)
public static void queryDVD() {
System.out.println("查看DVD\n");
System.out.println("序号\t状态\t名称\t借出日期");
for (int i = 0; i < names.length; i++) {
if (names[i] != null) {
System.out.println(indexes[i] + "\t" + states[i] + "\t" + names[i] + "\t" + dates[i]);
} else {
break;
}
}
}
这个方法遍历names数组,打印所有非空的DVD信息,格式化为表格形式。
2.新增DVD(addDVD)
public static void addDVD() {
System.out.println("--->新增DVD\n");
System.out.println("请输入DVD名称");
String name = input.next();
for (int i = 0; i < names.length; i++) {
if (names[i] == null) {
names[i] = name;
indexes[i] = i + 1;
states[i] = "可借";
dates[i] = "";
System.out.println("新增《" + name + "》成功");
break;
}
}
}
找到第一个空位插入新DVD,自动分配序号,初始状态设为"可借"。
3.删除DVD(delDVD)
删除操作较为复杂,需要处理数组元素的移动:
public static void deleteName(int index) {
int lastIndex = -1;
// 找到最后一个非空元素
for (int i = index; i < names.length; i++) {
if (names[i] == null) {
lastIndex = i - 1;
break;
} else {
lastIndex = i;
}
}
// 将后续元素前移
for (int i = index; i < lastIndex; i++) {
names[i] = names[i + 1];
states[i] = states[i + 1];
dates[i] = dates[i + 1];
}
names[lastIndex] = null;
}
4.借出与归还功能
借出DVD时会检查状态:
if (states[index].equals("可借")) {
states[index] = "已借出";
dates[index] = lendDate;
System.out.println("借出成功");
}
归还DVD时会计算租金:
public static int payment(String lendDate, String returnDate) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
Date parse = sdf.parse(lendDate);
Date parse1 = sdf.parse(returnDate);
return (int) ((parse1.getTime() - parse.getTime()) / (1000 * 60 * 60 * 24));
} catch (ParseException e) {
e.printStackTrace();
}
return -1;
}
优点:
代码结构清晰,功能模块划分明确
使用简单的数组实现了基本管理功能
包含完整的增删改查操作
日期处理和租金计算功能实用
改进建议:
使用ArrayList代替数组,避免手动管理数组大小
将DVD信息封装为对象,而不是使用并行数组
增加数据持久化功能(如文件存储)
添加输入验证和异常处理
实现更友好的用户界面
这个迷你DVD管理系统虽然简单,但涵盖了Java编程的许多基础概念,包括数组操作、循环控制、方法封装和日期处理等。对于初学者来说,这是一个很好的学习案例,可以通过扩展它来练习更高级的Java特性。
希望这篇解析能帮助你理解这个系统的实现原理。如果你有兴趣,可以尝试实现上面提到的改进建议,让这个系统变得更加强大和实用。