package com.qfeud.MiniDVDSystem;
//描述类DVD类 ---》 提供DVD基础信息的存储
import java.util.Objects;
public class DVD {
private String name;//DVD名称
private int state;//DVD借出状态(0:已借出,1:可借)
private int date;//DVD借出日期
private int count;//借出次数
public DVD() {
}
public DVD(String name, int state, int date, int count) {
this.name = name;
this.state = state;
this.date = date;
this.count = count;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
}
public int getDate() {
return date;
}
public void setDate(int date) {
this.date = date;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
//为了打印DVD对象信息方便
@Override
public String toString() {
return (state == 0 ? "已借出" : "可借")+"\t\t《"+name+"》\t"+
(date == 0 ? "" : date+"日")+"\t\t"+(count == 0 ? "" : count+"次");
}
//为了提供比较DVD信息操作 ---》 名字相同就是认为是同一个对象
@Override
public boolean equals(Object o) {
//1.现将Object了类对象o向下转型为DVD类型
DVD other = (DVD)o;
return this.name.equals(other.name);
}
@Override
public int hashCode() {
return name.hashCode()+count;
}
}
package com.qfeud.MiniDVDSystem;
//DVD中要执行的操作
public interface IDVDInterface {
/**
* 增加DVD影片
* @param dvds 存储DVD信息数组
* @param dvd 要添加DVD信息
* @return true ---> 新增成功 false ---> 新增失败
*/
boolean addDVD(DVD[] dvds ,DVD dvd);
/**
* 查看DVD影片
* @param dvds 存储DVD信息数组
*/
void selectDVD(DVD[] dvds);
/**
* 删除DVD影片
* @param dvds 存储DVD信息数组
* @param dvd 要删除DVD信息
* @return true ---> 删除成功 false ---> 删除失败
*/
boolean deleteDVD(DVD[] dvds ,DVD dvd);
/**
* 借出DVD影片
* @param dvds 存储DVD信息数组
* @param dvd 要借出DVD信息
* @return true ---> 借出成功 false ---> 借出失败
*/
boolean lendDVD(DVD[] dvds ,DVD dvd);
/**
* 归还DVD影片
* @param dvds 存储DVD信息数组
* @param dvd 要归还DVD信息
* @return true ---> 归还成功 false ---> 归还失败
*/
boolean returnDVD(DVD[] dvds ,DVD dvd);
}
package com.qfeud.MiniDVDSystem;
import com.sun.javafx.logging.JFRInputEvent;
//只要是实现接口类,实现类都不需要在末尾添加Impl,代表是接口的实现类
public class DVDManagerImpl implements IDVDInterface{
@Override
public boolean addDVD(DVD[] dvds, DVD dvd) {
//1.数组中存储了满了,不允许在添加DVD对象
if(dvds[dvds.length-1] != null){
System.out.println("抱歉,DVD存储碟片信息已满,不能在新增DVD了.............");
return false;
}
/*
2.DVD存储信息如果有名字相同的就不允许在存了 --> 只要DVD名字相等,就认为是相同对象
可以在DVD类中提供equals重写,比较原则就是DVD的名称
*/
if(DVDUtils.isExistSameDVD(dvds,dvd)) {
System.out.println("抱歉,DVD存储的碟盘信息有重名的,不能进行新增DVD了.........");
return false;
}
//3.向DVD数组中新增数据
for(int i = 0 ; i<dvds.length;i++){
if(dvds[i] == null){ //判断等于null,证明数组当前位置没有存数据,所以可以进行存储
dvds[i] = dvd;
break;
}
}
return true;
}
@Override
public void selectDVD(DVD[] dvds) {
//定义一个变量【打印序号】
int cut = 0;
//提供打印数据表头
System.out.println("序号\t\t状态\t\t名称\t\t借出日期\t\t借出次数");
for (DVD dvd : dvds){
if(dvd != null){ //证明获取出存储的DVD信息了
//因为要打印DVD的信息了,所以可以提供toString重写完成信息打印操作
System.out.println((++cut)+"\t\t"+dvd);
}
}
}
@Override
public boolean deleteDVD(DVD[] dvds, DVD dvd) {
//1.不存在DVD数组中DVD信息对象,不进行删除【原则:判断DVD的名字】
if(!DVDUtils.isExistSameDVD(dvds,dvd)){
System.out.println("抱歉,DVD中不存在您要删除的影片:"+dvd.getName()+"不能删除...........");
return false;
}
//2.借出DVD不能删除
for(DVD dvdTemp : dvds){
//为了防止空指针和判断要删除DVD信息的存在【找到DVD信息】
if(dvd != null && dvdTemp != null && dvdTemp.equals(dvd)){
//判断找到DVD信息借出状态 ---》 如果为0,证明已借出,无法删除
if(dvdTemp.getState() == 0){
System.out.println("抱歉,DVD中您要删除影片,已经被借出:"+dvd.getName()+"不能删除...........");
return false;
}
}
}
//3.删除数组中DVD信息
for(int i =0 ; i<dvds.length;i++){
//为了防止空指针,判断传入删除对象与数组中对象位置
if(dvd != null && dvd.equals(dvds[i])){
dvds[i] = null;
//将数组中有DVD信息数据放置到一起,没有数据放置到一起,保证addDVD操作是可以执行
for(int j = i; j<dvds.length-1;j++){
dvds[j] = dvds[j+1];
}
//需要将最后以为赋值为null
dvds[dvds.length-1] = null;
break;
}
}
return true;
}
@Override
public boolean lendDVD(DVD[] dvds, DVD dvd) {
//1.不存在DVD数组中DVD信息对象,不进行借出【原则:判断DVD的名字】
if(!DVDUtils.isExistSameDVD(dvds,dvd)){
System.out.println("抱歉,DVD中不存在您要借出的影片:"+dvd.getName()+"不能借出...........");
return false;
}
//2.借出DVD不能借出
for(DVD dvdTemp : dvds){
//为了防止空指针和判断要删除DVD信息的存在【找到DVD信息】
if(dvd != null && dvdTemp != null && dvdTemp.equals(dvd)){
//判断找到DVD信息借出状态 ---》 如果为0,证明已借出,无法借出
if(dvdTemp.getState() == 0){
System.out.println("抱歉,DVD中您要借出影片,已经被借出:"+dvd.getName()+"不能借出...........");
return false;
}
}
}
//3.借出DVD的信息修改
for(int i = 0 ; i<dvds.length;i++){
if(dvd!= null && dvd.equals(dvds[i])){
//修改存储在数组中的DVD信息
dvds[i].setState(0); //将可借状态修改Wie借出
dvds[i].setDate(dvd.getDate());//修改借出日期
dvds[i].setCount( dvds[i].getCount()+1);//修改借出次数
break;
}
}
return true;
}
@Override
public boolean returnDVD(DVD[] dvds, DVD dvd) {
//1.不存在DVD数组中DVD信息对象,不进行归还【原则:判断DVD的名字】
if(!DVDUtils.isExistSameDVD(dvds,dvd)){
System.out.println("抱歉,DVD中不存在您要归还的影片:"+dvd.getName()+"不能归还...........");
return false;
}
//2.可借DVD不能归还
for(DVD dvdTemp : dvds){
//为了防止空指针和判断要删除DVD信息的存在【找到DVD信息】
if(dvd != null && dvdTemp != null && dvdTemp.equals(dvd)){
//判断找到DVD信息借出状态 ---》 如果为1,证明可借,无法归还
if(dvdTemp.getState() == 1){
System.out.println("抱歉,DVD中您要归还影片,是可借状态:"+dvd.getName()+"不能归还...........");
return false;
}
}
}
//3.提供归还操作
for(int i = 0 ; i<dvds.length;i++){
if(dvd != null && dvds[i] !=null && dvd.equals(dvds[i])){
//将DVD状态修改为可借
dvds[i].setState(1);
//将DVD时间信息修改为0
dvds[i].setDate(0);
break;
}
}
return true;
}
}
package com.qfeud.MiniDVDSystem;
//DVD工具类
public class DVDUtils {
private DVDUtils(){}
/**
* 判断数组中是否存在相同DVD对象
* @param dvds 存储DVD信息对象数组
* @param dvd 外界得到DVD对象【与数组中进行比较】
* @return true 证明存储相同DVD false 证明没有存储相同DVD
*/
public static boolean isExistSameDVD(DVD[] dvds,DVD dvd){
for(DVD dvdtmp : dvds){
if (dvdtmp != null && dvd != null && dvdtmp.equals(dvd)){
return true; //证明找到了相同DVD对象
}
}
//for循环中return一次都不执行,证明没有相同DVD对象
return false;
}
}
package com.qfeud.MiniDVDSystem;
import java.util.Arrays;
import java.util.Scanner;
//提供的执行类 ---》 DVD程序主体运行
public class MiniDVDSystem {
public static void main(String[] args) {
//1.提供获取用户输入
Scanner input = new Scanner(System.in);
//2.提供初始化数据操作
/*2.1提供第一种创建方式
【提供存储DVD信息数组,存储DVD类的对象,所以数组中存储的数据类型DVD,DVD是类即引用类型】
创建了一个容量为6的数组,没有存储数据之前,数组中存储的值是---》[null,null,null,null,null,null];
*/
DVD[] dvds = new DVD[6];
//提供基础数据存储 ---》[DVD对象1,DVD对象2,DVD对象3,null,null,null]
dvds[0] = new DVD("罗马假日",0,1,15);
dvds[1] = new DVD("风声鹤唳",1,0,12);
dvds[2] = new DVD("浪漫满屋",1,0,30);
/*2.2 提供第二种创建方式
初始容量是6,现在只存储3个对象,剩余三个对象是没有,所以使用 null占位
DVD[] dvds2 = {
new DVD("罗马假日",0,1,15),
new DVD("风声鹤唳",1,0,12),
new DVD("浪漫满屋",1,0,30),
null,null,null
};
*/
//3.创建一个操作DVD业务对象
DVDManagerImpl manager = new DVDManagerImpl();
//4.模拟DVD业务执行操作
while(true){
//4.1提供实现菜单页面
System.out.println("欢迎进入到miniDVD管理系统");
System.out.println("-------------------------------------------------------------");
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.退出DVD");
System.out.println("-------------------------------------------------------------");
System.out.println("请选择:");
//4.2接收用户输入的数据
int num = input.nextInt();
//提供一个DVD对象创建,存储外界数据,方便在业务逻辑中进行数据传递操作
DVD dvd = new DVD();
switch (num){
//4.3业务处理调用逻辑
case 1:
System.out.println("--->新增DVD");
System.out.println("请输入DVD的名字:");
dvd.setName(input.next());
dvd.setState(1);//设置DVD的状态信息
if(manager.addDVD(dvds,dvd)){
System.out.println("新增DVD"+dvd.getName()+"成功");
}else{
System.out.println("新增DVD"+dvd.getName()+"失败");
}
break;
case 2:
System.out.println("--->查看DVD");
manager.selectDVD(dvds);
break;
case 3:
System.out.println("--->删除DVD");
System.out.println("删除DVD的名字:");
dvd.setName(input.next());
if(manager.deleteDVD(dvds,dvd)){
System.out.println("删除DVD"+dvd.getName()+"成功");
}else{
System.out.println("删除DVD"+dvd.getName()+"失败");
}
break;
case 4:
System.out.println("--->借出DVD");
System.out.println("借出DVD的名字:");
dvd.setName(input.next());
System.out.println("借出DVD的日期:");
dvd.setDate(input.nextInt());
if(manager.lendDVD(dvds,dvd)){
System.out.println("借出DVD"+dvd.getName()+"成功");
}else{
System.out.println("借出DVD"+dvd.getName()+"失败");
}
break;
case 5:
System.out.println("--->归还DVD");
System.out.println("归还DVD的名字:");
dvd.setName(input.next());
if(manager.returnDVD(dvds,dvd)){
System.out.println("归还DVD"+dvd.getName()+"成功");
}else{
System.out.println("归还DVD"+dvd.getName()+"失败");
}
break;
default:
System.out.println("--->退出DVD");
System.out.println("谢谢使用Thanks♪(・ω・)ノ");
return;
}
}
}
}