迷你DVD管理器
1、开发环境
①开发语言②开发工具
2、案例覆盖的技能点
①理解程序的基本概念-----程序、变量、数据类型
②会使用顺序、选择、循环、跳转语句编写程序
③会使用数组,操作数据
④会使用方法
⑤会定义类、创建和使用对象
3、项目需求
(1) 数据初始化
① 创建项目DVDMgr,创建类DVDSet类,添加四个属性DVD名称 (name),DVD状态(state),借出日期(time),借出次数(count)注:0表示已借 1:表示可借
(2) 实现菜单切换
① 执行程序,输出系统主菜单。用户根据提示的主菜单,输入功能编号实现菜单显示和菜单的切换,具体要求如下:
- 当输入0-6时,输出相关的菜单项信息,如果输入的不是0-6则重复输入
- 显示“输入0返回”。输入0,则返回主菜单,否则退出系统,终止程序的运行,输出提示信息“谢谢使用,欢迎下次光临”。
- 实现借出排行榜
① 对所有的DVD按照借出次数进行降序排序,并显示排序后的结果,内容包括序号、DVD名称、借出次数
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
欢 迎 使 用 迷 你 DVD 管 理 器
******************************************************************
0. 借出排行榜
1. 新 增 DVD
2. 查 看 DVD
3. 删 除 DVD
4. 借 出 DVD
5. 归 还 DVD
6. 退 出
******************************************************************
请选择: 2
---> 查看DVD
序号 状 态 名称 借出日期
1 已借出 <<罗马假日>> 2019-7-1
2 可 借 <<风声鹤唳>>
3 可 借 <<浪漫满屋>>
******************************************************************
输入0返回:0
(4) 实现新增DVD
① 为用户显示系统中提供的DVD信息,获取新增DVD名称
② 要求用户输入DVD名称
③ 如果DVD名称已存在,则输出该DVD已存在,如果DVD名不存在,则将该DVD信息添加到数组中
欢 迎 使 用 迷 你 DVD 管 理 器
******************************************************************
0. 借出排行榜
1. 新 增 DVD
2. 查 看 DVD
3. 删 除 DVD
4. 借 出 DVD
5. 归 还 DVD
6. 退 出
******************************************************************
请选择: 1
---> 新增DVD
请输入DVD名称: 私人定制
新增《私人定制》成功!
**************************
输入0返回:0
欢 迎 使 用 迷 你 DVD 管 理 器
******************************************************************
0. 借出排行榜
1. 新 增 DVD
2. 查 看 DVD
3. 删 除 DVD
4. 借 出 DVD
5. 归 还 DVD
6. 退 出
******************************************************************
请选择: 3
---> 删除DVD
请输入DVD名称: <<私人定制>>
没有找到匹配信息!
******************************************************************
输入0返回:0
(6) 实现删除DVD
可以删除处于“可借”状态的DVD,具体要求如下
- 获取要删除的DVD名称
- 如果DVD不存在,则显示“没有找到匹配信息!”
- 如果要删除的DVD名称存在,则判断是否为可借状态,如果是可借状态则可以删除DVD信息,如果是已借状态,则显示“该DVD已借出,不能删除”
欢 迎 使 用 迷 你 DVD 管 理 器
******************************************************************
0. 借出排行榜
1. 新 增 DVD
2. 查 看 DVD
3. 删 除 DVD
4. 借 出 DVD
5. 归 还 DVD
6. 退 出
******************************************************************
请选择: 3
---> 删除DVD
请输入DVD名称: 私人定制
删除《私人定制》成功!
******************************************************************
输入0返回:0
(7) 实现借出DVD
① 可以借出处于“可借”状态的DVD,具体要求如下:
- 获取要借出的DVD名称
- 判断该DVD是否存在,如果DVD不存在,则显示“没有找到匹配信息”
- 如果DVD存在,则判断借出状态,如果是可借状态,则获取借出日期,并将该DVD的状态修改为“已借”
- 如果DVD的状态为“已借”状态,则显示“该DVD已借出”
欢 迎 使 用 迷 你 DVD 管 理 器
******************************************************************
0. 借出排行榜
1. 新 增 DVD
2. 查 看 DVD
3. 删 除 DVD
4. 借 出 DVD
5. 归 还 DVD
6. 退 出
******************************************************************
请选择: 4
---> 借出DVD
请输入DVD名称: 浪漫满屋
请输入借出日期(年-月-日):2019-01-07
借出《浪漫满屋》成功!
******************************************************************
输入0返回:0
(5) 实现查看DVD
① 遍历系统中已有的DVD信息,并逐条显示输出,内容包括:序号、状态、名称、借出日期
② 如果是借出状态则显示借出日期,如果是可借状态则不显示借出日期
欢 迎 使 用 迷 你 DVD 管 理 器
******************************************************************
0. 借出排行榜
1. 新 增 DVD
2. 查 看 DVD
3. 删 除 DVD
4. 借 出 DVD
5. 归 还 DVD
6. 退 出
******************************************************************
请选择: 2
---> 查看DVD
序号 状 态 名称 借出日期
1 已借出 <<罗马假日>> 2019-7-1
2 可 借 <<风声鹤唳>>
3 已借出 <<浪漫满屋>> 2019-01-07
******************************************************************
输入0返回:0
欢 迎 使 用 迷 你 DVD 管 理 器
-------------------------------------
0. 借出排行榜
1. 新 增 DVD
2. 查 看 DVD
3. 删 除 DVD
4. 借 出 DVD
5. 归 还 DVD
6. 退 出
******************************************************************
请选择: 2
---> 查看DVD
序号 状 态 名称 借出日期
1 已借出 <<罗马假日>> 2019-7-1
2 可 借 <<风声鹤唳>>
3 可 借 <<浪漫满屋>>
4 可 借 <<私人定制>>
******************************************************************
输入0返回:0
(8) 实现归还DVD
可以归还处于“已借”状态的DVD,具体要求如下:
- 获取归还的DVD名称
- 判断DVD是否存在,如果DVD不存在,则显示“没有找到匹配信息”
- 如果DVD存在,判断DVD状态,如果是“可借”状态,则显示“该DVD没有借出”
- 如果DVD的状态为“已借”状态,则获取“归还日期(年-月-日)”并显示“归还成功”、借出时间、归还时间
- 计算租金:5元/1天
欢 迎 使 用 迷 你 DVD 管 理 器
******************************************************************
0. 借出排行榜
1. 新 增 DVD
2. 查 看 DVD
3. 删 除 DVD
4. 借 出 DVD
5. 归 还 DVD
6. 退 出
******************************************************************
请选择: 5
---> 归还DVD
请输入DVD名称: 浪漫满屋
请输入归还日期(年-月-日):2019-01-10
归还《浪漫满屋》成功!
借出日期为:2014-01-07
归还日期为:2014-01-10
******************************************************************
输入0返回:0
欢 迎 使 用 迷 你 DVD 管 理 器
******************************************************************
0. 借出排行榜
1. 新 增 DVD
2. 查 看 DVD
3. 删 除 DVD
4. 借 出 DVD
5. 归 还 DVD
6. 退 出
******************************************************************
请选择: 2
---> 查看DVD
序号 状 态 名称 借出日期
1 已借出 <<罗马假日>> 2019-7-1
2 可 借 <<风声鹤唳>>
3 可 借 <<浪漫满屋>>
******************************************************************
输入0返回:0
欢 迎 使 用 迷 你 DVD 管 理 器
******************************************************************
0. 借出排行榜
1. 新 增 DVD
2. 查 看 DVD
3. 删 除 DVD
4. 借 出 DVD
5. 归 还 DVD
6. 退 出
******************************************************************
请选择:6
谢谢使用!
DVD管理器实现代码如下
package dvd;
public class DvdTest {
public static void main(String[] args) {
DvdManager m=new DvdManager();//创建对象用的是无参构造
m.init();//在执行菜单之前要执行初始方法,为数组赋值,不执行的话里面什么都没有
m.menu();
DVD d1= new DVD ("罗马假日",1, null,2);
DVD d2 = new DVD("骨语",0, "2022-1-15",5);
DVD[]ds = new DVD[10];//由于d1,d2设置的类型为DVD类型,所以数组用的也是DVD类型,数组中想要存储什么类型的数据就把数组定义成什么类型的
}
}
package dvd;
//这个.java文件是用来做框架的
import java.util.Scanner;
public class DvdManager {
//用于存储DVD类型的数据
private DVD[] ds = new DVD[10];//为数组添加几个初始数据,将对象存储在数组中
Scanner sc = new Scanner(System.in);//下面有好多要用直接定义成成员变量
/*public DvdManager () {//可以用这个构造方法来替代下面初始化,在main中不用写DvdManager()
ds [0]= new DVD("罗马假日",1,null,13);
ds [1]= new DVD("奥特曼",0,"2022-10-10",23);
ds [2]= new DVD("天线宝宝",1,null,15);
ds [3]= new DVD("花园宝宝",0,"2022-10-9",25);
}*/
public void init(){//初始化
//创建对象
DVD d1 = new DVD("罗马假日", 1, null, 13);
DVD d2 = new DVD("奥特曼", 0, "2022-10-10", 23);
DVD d3 = new DVD("天线宝宝", 1, null, 15);
DVD d4 = new DVD("花园宝宝", 0, "2022-10-9", 15);
//把数据放到数组中
ds[0] = d1;
ds[1] = d2;
ds[2] = d3;
ds[3] = d4;
}
public void menu(){
int back;
do {
System.out.println("欢迎使用迷你DVD 管理器");
System.out.println("*****************");
System.out.println("0、借出排行榜");
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("******************");
System.out.println("请选择:");
Scanner sc = new Scanner(System.in);
int choise = sc.nextInt();//选择功能序号
while (choise > 6 || choise < 0) {//如果不是0-6从新输入
System.out.println("请输入0-6之间的选项");
choise = sc.nextInt();
}
switch (choise) {//根据选择的序号执行对应的功能
case 0:
rank();
break;
case 1:
addDvd();
break;
case 2:
query();
break;
case 3:
delete();
break;
case 4:
lend();
break;
case 5:
back();
break;
/*case 6:
System.out.println("谢谢使用,欢迎下次光临");
System.exit(0);//结束整个程序
*/
}
if (choise == 6) {
System.out.println("谢谢使用,欢迎下次光临");
break;//这个break退出的是do...while循环,不结束整个程序
}
System.out.println("输入0返回");
back = sc.nextInt();
} while (back == 0);//如果back的值为0则继续循环
/*System.out.println("欢迎下次光临");//如果用的是case6,输出结果为谢谢使用,欢迎下次光临
* 如果用的是if(choise==6,输出结果为,谢谢使用,欢迎下次光临,
* 欢迎下次光临)*/
}
public void rank() {//借出排行
int count = 0;//遍历出dvd数组中有多少个对象
for (DVD d : ds) {
if (d != null) {
count++;//如果有值,count加一
}
}
DVD[] dvd = new DVD[count];//根据dvd对象的个数创建一个新数组,用于数组排序,由于[count]所以不存在空数组
System.arraycopy(ds, 0, dvd, 0, count);//将ds数组中的数据复制到新数组中
for (int i = 0; i < dvd.length - 1; i++) {//选择排序
for (int j = i + 1; j < dvd.length; j++) {
dvd[i].getCount();
if (dvd[i].getCount() < dvd[j].getCount()) {//比较的对象的借出次数
DVD a = dvd[i];//数据交换位置,升序
dvd[i] = dvd[j];
dvd[j] = a;
}
}
}
System.out.println("序号\t名称\t\t借出次数");//遍历排序后的数组,将数据输出
for (int c = 0; c < dvd.length; c++) {
System.out.println(" " + (c + 1) + "\t《" + dvd[c].getName() + "》\t" + dvd[c].getCount());
}
}
public void addDvd(){//新增dvd
System.out.println("--->新增DVD\n");
System.out.println("请输入DVD名称:");
String name = sc.next();
int index = exits(name);
if (index != -1) {
System.out.println("该《" + name + "》已存在");
} else {
DVD d = new DVD(name, 1, null, 0);
for (int i = 0; i < ds.length; i++) {
if (ds[i] == null) {
ds[i] = d;
break;
}
}
System.out.println("新增《" + name + "》成功! ");
System.out.println("****************************");
}
}
public void query(){//查询dvd
System.out.println("--->查看DVD\n");
System.out.println("序号\t\t状态\t\t\t名称\t\t\t日期");//遍历数组,读取数据
for (int i = 0; i < ds.length; i++) {
if (ds[i] != null) {//非空判断,否则出现空指针异常
/*if(ds [i].getState()==1) {//如果状态为1可借,则没有借出日期
System.out.println(" "+(i+1)+"\t"+"可借\t《"+ds[i].getName()+"》");
}else{
System.out.println(" "+(i+1)+"\t"+"己借\t《"+ds[i].getName()+"》"+ds [i].getDate ());
}*/
//也可以用下面的方法来查看DVD
System.out.println(" " + (i + 1) + "\t\t" + (ds[i].getState() == 1 ? "可借" : "已借") + "\t\t《" + ds[i].getName() + "》"
+ "\t\t" + (ds[i].getState() == 1 ? "" : ds[i].getDate()));//三元运算符
//用ds[i]太麻烦,可以定义个变量接受DVD d=ds[i];
}
}
System.out.println("*******************");
}
public void delete(){//删除dvd
System.out.println("--->删除DVD\n");
System.out.println("请输入DVD名称: ");
String name = sc.next();
int index = exits(name);
if (index != -1){//判断DVD是否存在
if (ds[index].getState() == 1){//判断状态是否是可借状态
for (int i=index; i<ds.length-1; i++){//ds.length-1,否则越界
ds[i] = ds[i+1];//数据向前移动一位
}
ds[ds.length-1] = null;//将最后的那个数据赋值为null
System.out.println("《"+name + "》删除成功!");
}else{
System.out.println("该《" + name + "》已借出,不能删除");
}
}else{
System.out.println("没有找到匹配信息! ");
}
}
public void lend(){//借出
System. out.println (" --->借出DVD\n");
System.out.println ("请输入DVD名称:Ⅰ ");
String name = sc.next ();
int index = exits(name);
if(index != -1){
if(ds [index].getState ()==1) {
System. out.println ("请输入借出日期(年-月-日): ");
String date = sc.next ();
ds [index].setState (0) ;
ds [index] .setDate (date) ;
int count = ds [index].getCount ( )+1;
ds [index] .setCount (count) ;
System. out.println ("借出《"+name+"》成功!");
}else {
System.out.println("该《" + name + "》已借出,不能借出");
}
}
}
public void back(){//归还
System.out.println ( "--->归还DVD\n" ) ;
System. out.println ("请输入DVD名称: ");
String name = sc.next ();
int index = exits (name) ;
if (index != -1) {//如果dvd存在,判断dvd的借出状态
if(ds [index].getState( )==1) {
System.out.println ("该《"+name+"》未借出,不能归还");
}else{
System.out.println ("请输入归还日期(年-月-日): ");
String backDate = sc.next ( ) ;
ds [index].setState (1);
String lendDate = ds [index].getDate();//在借出日期初始化之前先保存
ds [index].setDate(null);//归还后将借出日期删除,初始化
System.out.println("《"+name+"》归还成功");
System.out.println("借出日期为:"+lendDate);
System.out.println("归还日期为:"+backDate);
}
}else{
System.out.println ("没有找到匹配信息!");
}
}
/**
* @param name:传入的DVD名称//这是什么意思?????????????怎么弄出来的?????????
* @return如果DVD存在,返回该DVD对应的下标,如果不存在返回-1//对应的数组练习题中有
*/
public int exits (String name){
int index = -1;//表示找到的下标
for (int i = 0; i < ds.length; i++) {
if (ds[i] != null && ds[i].getName().equals(name)) {//非空判断,否则出现空指针异常
index = i;
break;
}
}
return index;
}
}
package dvd;
/*
*1、添加私有变量。2、提供get/ set方法。3、提供构造方法
*/
//对于这种只有成员变量,get/set方法,构造方法的类成为实体类
public class DVD {
private String name;
private int state;//dvd状态0∶已借1;可借
private String date;
private int count;
public void setName(String name) {
this.name = name;
}
public String getName(){
return name;
}
public void setState(int state) {
this.state = state;
}
public int getState(){
return state;
}
public void setDate(String date){
this.date= date;
}
public String getDate(){
return date;
}
public void setCount(int count){
this.count = count;
}
public int getCount(){
return count;
}
public DVD(){}
public DVD(String name ,int state,String date,int count) {
this.name = name;
this.state = state;
this.date = date;
this.count = count;
}
}