当前位置: 首页 > news >正文

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("※ 请输入有效的数字!");}}}
}

运行结果 

 

 

知识点 

  1. 面向对象设计(类、对象、封装)

  2. 集合框架的使用和操作

  3. 异常处理机制

  4. 流程控制结构

  5. 字符串处理

  6. 输入输出操作

  7. 排序算法实现

  8. 代码组织和模块化设计

表格

知识点分类具体内容与项目中的体现
面向对象编程(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+ 风格)

http://www.lryc.cn/news/606006.html

相关文章:

  • 如何在 Ubuntu 24.04 或 22.04 LTS Linux 上安装 DaVinci Resolve
  • 【01】大恒相机SDK C++开发 —— 初始化相机,采集第一帧图像、回调采集、关闭相机
  • FastAPI的请求-响应周期为何需要后台任务分离?
  • Spire.XLS for .NET 中, 将 Excel 转换为 PDF 时, 如何设置纸张大小为A4纸,并将excel内容分页放置?
  • VBA代码解决方案第二十七讲:禁用EXCEL工作簿右上角的关闭按钮
  • 微信小程序性能优化与内存管理
  • 辐射源定位方法简述
  • 【25-cv-08807】David携Tyrone Acierto 雕塑版权发案
  • ros2--参数指令--rqt
  • sqli-labs:Less-16关卡详细解析
  • 揭秘动态测试:软件质量的实战防线
  • vue+elementui实现问卷调查配置可单选、多选、解答
  • 代码随想录day51图论2
  • Elasticsearch DSL 核心语法大全:match、bool、range、聚合查询实战解析
  • 软件项目中如何编写项目计划书?指南
  • SpringBoot3.x入门到精通系列:1.1 简介与新特性
  • 代码随想录刷题Day21
  • SELinux 核心概念与访问控制机制解析
  • 数据库学习------数据库事务的特性
  • 【计算机组成原理】第二章:数据的表示和运算(上)
  • Python爬虫06_Requests政府采购严重违法失信行为信息记录爬取
  • Android U 软件fota版本后APN更新逻辑
  • CSS入门指南:从选择器到样式布局
  • SQL 中 WHERE 与 HAVING 的用法详解:分组聚合场景下的混用指南
  • Spring AI 系列之二十八 - Spring AI Alibaba-基于Nacos的prompt模版
  • HCIP面试第一章内容总结
  • 【LeetCode 热题 100】4. 寻找两个正序数组的中位数——(解法一)线性扫描
  • 【ARM】PK51关于内存模式的解析与选择
  • 全基因组关联分析(GWAS)中模型参数选择:MLM、GLM与FarmCPU的深度解析
  • 【08】大恒相机SDK C#发开 —— 多相机采集