DVD特工总部,DVD管理系统
目录
题目
代码
项目结构
1. DVD类 (src/dvd/DVD.java)
2. DVD管理类 (src/dvd/DVDManager.java)
3. 主程序类 (src/dvd/MainApp.java)
运行结果
知识点
表格
题目
定义一个类,Dvd类,属性如下 。ArrayList,使用泛型集合
String dvdName; //名字
String lendDate; //借出日期
int status ;//借出状态
int count://借出次数
要求编写一个dvd的管理类实现。
1、添加dvd
2、删除dvd
3、查询dvd
4、借出dvd
5、归还did
6、查看dvd的借出排行数据。
代码
项目结构
DVD-Management-System/
├── src/
│ ├── dvd/
│ │ ├── DVD.java
│ │ ├── DVDManager.java
│ │ └── MainApp.java
1. DVD类 (src/dvd/DVD.java
)
package dvd;public class DVD {private String dvdName; // DVD名称private String lendDate; // 借出日期private int status; // 借出状态 (0:未借出, 1:已借出)private int count; // 借出次数public DVD(String dvdName) {this.dvdName = dvdName;this.status = 0; // 初始状态:未借出this.count = 0; // 初始借出次数:0this.lendDate = "无"; // 初始借出日期}// Getter和Setter方法public String getDvdName() {return dvdName;}public void setDvdName(String dvdName) {this.dvdName = dvdName;}public String getLendDate() {return lendDate;}public void setLendDate(String lendDate) {this.lendDate = lendDate;}public int getStatus() {return status;}public void setStatus(int status) {this.status = status;}public int getCount() {return count;}public void setCount(int count) {this.count = count;}@Overridepublic String toString() {String statusStr = (status == 0) ? "可借" : "已借出(" + lendDate + ")";return String.format("DVD名称: %-15s | 状态: %-15s | 借出次数: %d",dvdName, statusStr, count);}
}
2. DVD管理类 (src/dvd/DVDManager.java
)
package dvd;import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;public class DVDManager {private final ArrayList<DVD> dvdList; // DVD集合public DVDManager() {dvdList = new ArrayList<>();// 初始化一些示例数据initSampleData();}private void initSampleData() {addDVD("泰坦尼克号");addDVD("阿凡达");addDVD("肖申克的救赎");}// 1. 添加DVDpublic void addDVD(String dvdName) {for (DVD dvd : dvdList) {if (dvd.getDvdName().equalsIgnoreCase(dvdName)) {System.out.println("\n※ 《" + dvdName + "》已存在,添加失败!");return;}}dvdList.add(new DVD(dvdName));System.out.println("\n√ 《" + dvdName + "》添加成功!");}// 2. 删除DVDpublic void removeDVD(String dvdName) {DVD foundDVD = null;for (DVD dvd : dvdList) {if (dvd.getDvdName().equalsIgnoreCase(dvdName)) {foundDVD = dvd;break;}}if (foundDVD != null) {dvdList.remove(foundDVD);System.out.println("\n√ 《" + dvdName + "》删除成功!");} else {System.out.println("\n※ 《" + dvdName + "》不存在,删除失败!");}}// 3. 查询DVDpublic void queryDVD(String dvdName) {for (DVD dvd : dvdList) {if (dvd.getDvdName().equalsIgnoreCase(dvdName)) {System.out.println("\n====== DVD信息 ======");System.out.println(dvd);return;}}System.out.println("\n※ 未找到《" + dvdName + "》的相关信息!");}// 4. 借出DVDpublic void lendDVD(String dvdName, String lendDate) {for (DVD dvd : dvdList) {if (dvd.getDvdName().equalsIgnoreCase(dvdName)) {if (dvd.getStatus() == 0) {dvd.setStatus(1);dvd.setLendDate(lendDate);dvd.setCount(dvd.getCount() + 1);System.out.println("\n√ 《" + dvdName + "》借出成功!");} else {System.out.println("\n※ 《" + dvdName + "》已被借出,无法重复借阅!");}return;}}System.out.println("\n※ 《" + dvdName + "》不存在!");}// 5. 归还DVDpublic void returnDVD(String dvdName) {for (DVD dvd : dvdList) {if (dvd.getDvdName().equalsIgnoreCase(dvdName)) {if (dvd.getStatus() == 1) {dvd.setStatus(0);dvd.setLendDate("无");System.out.println("\n√ 《" + dvdName + "》归还成功!");} else {System.out.println("\n※ 《" + dvdName + "》未被借出,无需归还!");}return;}}System.out.println("\n※ 《" + dvdName + "》不存在!");}// 6. 查看借出排行public void showRanking() {if (dvdList.isEmpty()) {System.out.println("\n※ 当前没有DVD数据!");return;}// 创建副本进行排序(不影响原始数据)List<DVD> sortedList = new ArrayList<>(dvdList);sortedList.sort((d1, d2) -> d2.getCount() - d1.getCount()); // 降序排序System.out.println("\n====== DVD借出排行榜 ======");for (int i = 0; i < sortedList.size(); i++) {DVD dvd = sortedList.get(i);System.out.printf("%d. %-15s (借出次数: %d)%n", i + 1, dvd.getDvdName(), dvd.getCount());}}// 显示所有DVD信息public void displayAllDVDs() {if (dvdList.isEmpty()) {System.out.println("\n※ 当前没有DVD数据!");return;}System.out.println("\n====== 所有DVD信息 ======");for (DVD dvd : dvdList) {System.out.println(dvd);}}
}
3. 主程序类 (src/dvd/MainApp.java
)
package dvd;import java.util.Scanner;public class MainApp {public static void main(String[] args) {DVDManager manager = new DVDManager();Scanner scanner = new Scanner(System.in);System.out.println("************************************");System.out.println("* 欢迎使用DVD管理系统 v1.0 *");System.out.println("************************************");while (true) {printMenu();int choice = getIntInput(scanner, "请选择操作: ");switch (choice) {case 1:System.out.print("请输入DVD名称: ");manager.addDVD(scanner.nextLine());break;case 2:System.out.print("请输入要删除的DVD名称: ");manager.removeDVD(scanner.nextLine());break;case 3:System.out.print("请输入要查询的DVD名称: ");manager.queryDVD(scanner.nextLine());break;case 4:System.out.print("请输入要借出的DVD名称: ");String lendName = scanner.nextLine();System.out.print("请输入借出日期(YYYY-MM-DD): ");manager.lendDVD(lendName, scanner.nextLine());break;case 5:System.out.print("请输入要归还的DVD名称: ");manager.returnDVD(scanner.nextLine());break;case 6:manager.showRanking();break;case 7:manager.displayAllDVDs();break;case 0:System.out.println("\n感谢使用,再见!");scanner.close();return;default:System.out.println("\n※ 无效选择,请重新输入!");}}}private static void printMenu() {System.out.println("\n====== DVD管理系统 ======");System.out.println("1. 添加DVD");System.out.println("2. 删除DVD");System.out.println("3. 查询DVD");System.out.println("4. 借出DVD");System.out.println("5. 归还DVD");System.out.println("6. 借出排行榜");System.out.println("7. 显示所有DVD");System.out.println("0. 退出系统");}private static int getIntInput(Scanner scanner, String prompt) {while (true) {System.out.print(prompt);try {return Integer.parseInt(scanner.nextLine());} catch (NumberFormatException e) {System.out.println("※ 请输入有效的数字!");}}}
}
运行结果
知识点
-
面向对象设计(类、对象、封装)
-
集合框架的使用和操作
-
异常处理机制
-
流程控制结构
-
字符串处理
-
输入输出操作
-
排序算法实现
-
代码组织和模块化设计
表格
知识点分类 | 具体内容与项目中的体现 |
---|---|
面向对象编程(OOP) | - 类与对象:DVD , DVDManager , MainApp - 封装:属性 private + getter/setter - 构造方法:带参数构造初始化 |
集合框架 | - 使用 ArrayList<DVD> 存储集合 - 使用泛型保障类型安全 - 操作:add() , remove() , 遍历、排序等 |
异常处理 | - 输入校验:try-catch 捕获 NumberFormatException 异常,避免程序崩溃 |
字符串处理 | - 比较:equalsIgnoreCase() 忽略大小写 - 格式化输出:String.format() - 拼接:toString() 方法中 |
控制流 | - 循环结构:while(true) 实现主菜单 - 条件判断:if-else , switch-case - 跳转控制:break , return |
排序算法 | - 使用 Comparator 自定义比较规则 - 匿名内部类 - Lambda 表达式简化写法 |
输入输出 | - 用户输入:Scanner scanner = new Scanner(System.in) - 输出信息:System.out.println() ,System.out.printf() |
代码组织结构 | - 使用 package dvd; 组织类 - 分层:数据模型、业务逻辑、交互界面 - 方法封装:如 addDVD() 、removeDVD() |
其他基础知识 | - 访问控制:private , public - this 关键字引用当前对象 - static 静态方法,如 printMenu() |
Java关键字/语法特性 | - final 限定集合引用不变 - @Override 表示方法重写 - 初始化块:如 initSampleData() |
设计模式与实践 | - 单一职责原则:每类只处理自己应负责的部分 - 分层设计:模型、服务、表现层清晰分离 - 防御式编程、防重复添加、深拷贝排序 |
Java 8+ 新特性 | - Lambda 表达式 - 类型推断(未显式使用 var ,但结构支持 Java 11+ 风格) |