package com.university.cd;
import java.time.LocalDate;
import java.time.Period;
import java.time.format.DateTimeFormatter;
import java.util.Iterator;
import java.util.Scanner;
/**
* 使用数组以及目前所学知识点完成一个迷你DVD租赁系统
* @author lenovo
* 2021年7月7日-上午10:03:42
*/
public class DvdControl {
//创建一个Scanner对象,实例化对象
static Scanner input = new Scanner(System.in);
//声明数组变量用来存储DVD的相关信息
static int size;//DVD的数量
static String []dvdName;//存储DVD名称
static int []dvdPrices;//存储DVD的价格
static boolean []dvdStatus;//存储DVD的状态:true-借出,false-未借出
static String []dvdDates;//存储DVD的借出日期
public static void main(String[] args) {
//系统静态初始化
size = 100; //DVD存放大小
//DVD相关数组分配空间
dvdName = new String[size];
dvdPrices = new int[size];
dvdStatus = new boolean[size];
dvdDates = new String[size];
//初始化3个数据
dvdName[0] = "速度与激情1";
dvdPrices[0] = 2;
dvdStatus[0] = false;
dvdDates[0] = null;
dvdName[1] = "速度与激情2";
dvdPrices[1] = 3;
dvdStatus[1] = true;
dvdDates[1] = "2021年05月15日";
dvdName[2] = "速度与激情3";
dvdPrices[2] = 5;
dvdStatus[2] = false;
dvdDates[2] = null;
while(true) {
//选择菜单
System.out.println("==========迷你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.归还DVD============");
System.out.println("===========7.退出系统============");
//选择设置
System.out.println("请选择:");
//choose变量是菜单选项
String choose = input.next();
switch(choose) {
case "1" -> {//新增DVD
addDVD();
}
case "2" -> {//删除DVD
deleteDVD();
}
case "3" -> {//修改DVD
editDVD();
}
case "4" -> {//查看DVD
listDVD();
}
case "5" -> {//租借DVD
rentDVD();
}
case "6" -> {//归还DVD
returnDVD();
}
case "7" -> {//退出系统
System.out.println("谢谢使用!");
System.exit(0);
}
}
}
}
//归还DVD
private static void returnDVD() {
System.out.println("DVD管理系统-->归还DVD");
//1、录入要归还的dvd名称
System.out.print("请输入要归还的dvd名称:");
String name = input.next();
//2、查找dvd在数组中的位置
int index = -1;
for(int i=0;i<dvdName.length&&dvdName[i]!=null;i++) {
if(name.equals(dvdName[i])) {
//找到了,记住下标
index = i;
//退出循环
break;
}
}
//3、实现归还的业务逻辑
if(index == -1) {
System.out.println("要归还的DVD不存在!");
}else {
//判断dvd的状态,是否已经借出
if(!dvdStatus[index]) {
System.out.println("DVD未借出!");
}else {
//计算租金
//获取当前系统的日期对象
LocalDate nowDate = LocalDate.now();
//获取借出日期字符串
String rentDateString = dvdDates[index];
//构建一个日期对象格式化实例
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
//传递参数按照给定的格式化对象解析给定的日期字符串,返回日期对象
LocalDate rentDateObj = LocalDate.parse(rentDateString, formatter);
//创建日期间隔实例
Period betweenPeriod = Period.between(nowDate, rentDateObj);
//获取两个日期之间间隔的天数
int days = betweenPeriod.getDays();
//计算租金
int money = days*dvdPrices[index];
//输出租金信息
System.out.printf("租借天数:%d,每天:%d元,合计:%d元",days,dvdPrices[index],money);
//改变dvd的状态和借出日期
dvdStatus[index] = false;
dvdDates[index] = null;
System.out.println("归还DVD成功!");
}
}
System.out.println("------------------------------------");
}
//租借DVD
private static void rentDVD() {
System.out.println("DVD管理系统-->租借DVD");
//1.录入租借的DVD名称
System.out.print("请输入要租借的DVD名称:");
String name = input.next();
//2.查找dvd在数组中的下标
int index = -1;
for(int i = 0;i<dvdName.length&&dvdName[i]!=null;i++) {
if(name.equals(dvdName[i])) {
//找到了
index = i;
//退出循环
break;
}
}
//3.实现租借逻辑
if(index == -1) {
System.out.println("要租借的DVD不存在!");
}else {
//判断DVD是否已经被借走
if(dvdStatus[index]) {
System.out.println("DVD已经被借走!");
}else {
//修改DVD相关数组,实现借出的逻辑
//修改DVD的状态和借出日期
dvdStatus[index] = true;
// 系统当前的日期,并格式化为特定的字符串格式
//获取当前系统日期
LocalDate nowDate = LocalDate.now();
//获取日期格式化实例
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
//获取当前系统日期的格式化串
String nowString = nowDate.format(formatter);
//设置dvd借出日期
dvdDates[index] = nowString;
System.out.println("DVD借出成功!");
}
}
System.out.println("------------------------------------");
}
//删除DVD
private static void deleteDVD() {
System.out.println("DVD管理系统-->删除DVD");
//1.录入要删除的DVD名称
System.out.print("请录入要删除的DVD名称:");
String name = input.next();
//遍历dvdName数组,查找dvd,返回其下标
int index = -1;
for (int i =0;i<dvdName.length&&dvdName[i]!=null;i++) {
if(name.equals(dvdName[i])) {
//找到了,记住下标
index = i;
//退出循环
break;
}
}
if(index == -1) {
System.out.println("要删除的DVD不存在,不能删除!");
}else {
//dvd存在,判断是否已经借出
if(dvdStatus[index]) {
System.out.println("DVD已经借出不能修改!");
}else {
//3.删除dvd
//特殊情况,如果被删除元素位于最后一个
if(index == dvdName.length-1) {
dvdName[index] = null;
dvdPrices[index] = 0;
dvdStatus[index] = false;
dvdDates[index] = null;
}else {
//以index为界,后面的元素诸逐个覆盖前面一个元素
for(int i = index;i<dvdName.length-2;i++) {
dvdName[i] = dvdName[i+1];
dvdPrices[i] = dvdPrices[i+1];
dvdStatus[i] = dvdStatus[i+1];
dvdDates[i] = dvdDates[i+1];
}
}
}
}
System.out.println("删除成功!");
}
//修改DVD
private static void editDVD() {
System.out.println("DVD管理系统-->修改DVD");
//1.控制台输入并接收要修改的DVD信息
//接收修改的DVD名
System.out.println("请输入要修改的DVD名称:");
String name = input.next();
//遍历dvdName数组,查找dvd,返回其下标
int index = -1;
for (int i =0;i<dvdName.length&&dvdName[i]!=null;i++) {
if(name.equals(dvdName[i])) {
//找到了,记住下标
index = i;
//退出循环
break;
}
}
//判断dvd是否存在
if(index == -1) {
System.out.println("要修改的DVD不存在");
}else {
//dvd存在,判断dvd是否已经借出
if(dvdStatus[index]) {
System.out.println("DVD已经借出,不能修改信息!");
}else {
//录入修改的信息:价格、状态、借出日期
System.out.print("请输入新的名称(输入1不修改):");
name = input.next();
System.out.print("请输入新的价格(输入0不修改):");
int price = input.nextInt();
System.out.println("请输入新的状态(1.不修改 2.可借 3.已借出)");
String status = input.next();
System.out.println("请输入借出日期(输入1不修改 2.格式:yyyy年mm月dd日):");
String date = input.next();
//跟新名称数组
if(!"1".equals(name)) {
dvdName[index] = name;
}
//跟新价格数组
if(price!=0) {
dvdPrices[index] = price;
}
//跟新状态
if(!"1".equals(status)) {
dvdStatus[index] = "2".equals(status)?false:("3".equals(status)?true:dvdStatus[index]);
}
//跟新借出日期
if(!"1".equals(date)) {
dvdDates[index] = date;
}
System.out.println("跟新成功!");
}
}
}
//新增DVD
private static void addDVD() {
System.out.println("DVD租赁系统-->新增DVD");
//1.录入DVD的名称和价格
System.out.print("请输入DVD的名称:");
String name = input.next();
System.out.print("请输入DVD的价格:");
int price = input.nextInt();
//2.将新录入的DVD信息添加到数组中
int index = -1;//定义变量存储DVD数组的空元素下标
for(int i = 0; i < dvdName.length; i++) {//循环遍历DVD数组,查找空元素的下标
if(dvdName[i] == null) {//当前下标为空元素,记下当前下标
index = i;
break;//退出循环
}
}
//判断index是否还为-1
if(index == -1) {
//若index仍然为-1即说明数组已经满了,无空元素
System.out.println("新增DVD失败!DVD仓库已满!");
}else {
//若index不为-1,则有空元素,将新增DVD信息录入进去
dvdName [index] = name;
dvdPrices [index] = price;
dvdStatus [index] = false;
dvdDates [index] = null;
System.out.println("新增DVD成功!");
}
System.out.println("==========================");
}
//查看DVD
private static void listDVD() {
System.out.println("DVD租赁系统-->查看DVD");
//打印表头
System.out.printf("%-3s%-8s%-5s%-5s%-12s\n","序号","碟片名称","租赁单价","碟片状态","借出日期");
//循环遍历dvd数组
for(int i=0;i<dvdName.length&&dvdName[i]!=null;i++) {
System.out.printf("%-3d%-8s%-5d%-5s%-12s\n",(i+1),dvdName[i],dvdPrices[i],(dvdStatus[i]?"借出":"可借"),dvdDates[i]==null?"":dvdDates[i]);
}
System.out.println("------------------------------------");
}
}