JAVA数组程序练习(一):DVD管理系统

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("------------------------------------");
	}
}

上一篇:如何使用Joyoshare Video Converter将DVD转换为MP3格式?


下一篇:Windows提权漏洞集合