Java基础阶段项目之DVD租赁

这个项目介绍了如何创建一个简单的DVD租赁系统,包括用户登录、查看所有DVD、添加、删除和借还DVD等功能。用户登录有三次机会,登录成功后可以进行各种操作。在代码实现上,使用了主类(DVDMain)处理流程,属性和行为类(DVD)封装属性,以及数据管理类(DVDManagement)实现具体功能。在借出和删除操作中,注意了集合的实时更新以保持数据一致性。

java初级阶段项目之DVD租赁(详细)

一:功能介绍

  1. 用户登录(有三次机会,分别有对应的提示)
    输入错误时的提示:
    输入错误时的提示登录成功:
    登录成功时的提示
  2. 查看所有的DVD数据信息:
    所有DVD数据信息
  3. 添加DVD
    添加DVD
  4. 查看新增的DVD
    查看新增的DVD
  5. 删除DVD
    删除失败:
    删除DVD失败
    删除成功:
    删除成功
    删除结果查询:
    所有DVD数据集合中:
    ![查看删除结果](https://img-blog.csdnimg.cn/20190731184133953.png
    新增DVD数据集合中(因为万物可爱是新增的数据):
    查看删除结果
  6. 借出DVD
    借出失败:
    借出失败
    借出成功:
    借出成功
  7. 查看借出列表
    查看借出列表
  8. 归还DVD:

归还DVD

  1. 退出:

退出

二:代码

  1. 项目的主类(DVDMain类)
    此代码中包含整个代码运行的主要流程。
    主要包括:用户登录,登录成功后的操作处理
package com.hire;//包

// 这个是DVD项目的主类,用来执行主菜单,完成整个项目的流程

import java.util.ArrayList;
import java.util.Scanner;

public class DVDMain {

	public static void main(String[] args) {
		
		//首先创建DVD类型的容器,用于做数据的处理。
		ArrayList<DVD> array=new ArrayList<DVD>();
		
		//用于存储新增加的DVD
		ArrayList<DVD> arr=new ArrayList<DVD>();
		
		//用于存储借出列表
		ArrayList<DVD> rentArray=new ArrayList<DVD>();
		
		//对DVD系统进行初始化
		DVDManagement.initDvd(array,rentArray);
		
		//用户登录
		DVD.setUsername("admin");
		DVD.setPassword("123456");
		boolean adminFlag=false;
		for(int i=0;i<3;i++) {
			DVDManagement.userAdminSystem();
			if((DVD.getUsername().equals(DVDManagement.username))
			  &&(DVD.getPassword().equals(DVDManagement.password))) {
				adminFlag=true;break;
			}
			else {
				 if(i<2)System.out.println("您输入的信息有误!您还有"+(2-i)+"次机会!");
			}
		}
		
		//登录成功
		if(adminFlag) {
			System.out.println("---------\t欢迎来到闵小太阳DVD租赁屋\t---------");
			while(true) {
				System.out.println("请输入您想要进行的操作:");
				System.out.println("1:查看所有的DVD");
				System.out.println("2:查看最近新增的DVD");
				System.out.println("3:查看借出列表");
				System.out.println("4:添加DVD");
				System.out.println("5:删除DVD");
				System.out.println("6:借出DVD");
				System.out.println("7:归还DVD");
				System.out.println("8:退出");
				Scanner sc=new Scanner(System.in);
				int operationNumber=sc.nextInt();
				boolean flag=false;
				switch( operationNumber) {
					case 1:DVDManagement.checkAllDVD(array);				break;
					case 2:DVDManagement.preferenceNewDVD(arr);				break;
					case 3:DVDManagement.loanListDVD(rentArray);			break;
					case 4:DVDManagement.addDVD(array,arr);					break;
					case 5:DVDManagement.removeDVD(array, arr);				break;
					case 6:DVDManagement.rentDVD(array,arr,rentArray);		break;
					case 7:DVDManagement.returnDVD(array,arr,rentArray);	break;
					case 8:
					default:System.out.println("谢谢您的使用!QAQ");
							System.exit(0); 						break;	
							//(java虚拟机退出)JVM退出
				}
			}
		}
		//登录失败
		else System.out.println("您的账号已经被锁定,请与管理员联系!");
	}

}

  1. 项目的属性和行为类(DVD类)
    属性主要包括DVD名称,DVD借出时间,DVD借出次数,DVD当前的借出状态。
    行为主要是对上述属性的封装。
package com.hire;
/*
 * 本类是存放本项目中所需要的基本变量,从而对基本变量进行
 * */
public class DVD {
	
		//所有的成员均用private修饰,以保护数据的安全性
		private static String username;
		private static String password;
		private String dvdName;//DVD名字
		private String hireDate;//借出日期
		private int hireCounts;//借出次数
		private String dvdStatus;//借出状态
		
		//无参构造方法
		public DVD() {
			
		}
		
		//有参构造方法,用来获取每个对象的值
		public DVD(String dvdName, String hireDate, int hireCounts, String dvdStatus) {
			this.dvdName = dvdName;
			this.hireDate = hireDate;
			this.hireCounts = hireCounts;
			this.dvdStatus = dvdStatus;
		}
		
		//getXxx()方法和setXxx()方法,用来获取和设置数据
		public String getDvdName() {
			return dvdName;
		}
		public void setDvdName(String dvdName) {
			this.dvdName = dvdName;
		}
		public String getHireDate() {
			return hireDate;
		}
		public void setHireDate(String hireDate) {
			this.hireDate = hireDate;
		}
		public int getHireCounts() {
			return hireCounts;
		}
		public void setHireCounts(int hireCounts) {
			this.hireCounts = hireCounts;
		}
		public String getDvdStatus() {
			return dvdStatus;
		}
		public void setDvdStatus(String dvdStatus) {
			this.dvdStatus = dvdStatus;
		}

		public static String getUsername() {
			return username;
		}

		public static void setUsername(String username) {
			DVD.username = username;
		}

		public static String getPassword() {
			return password;
		}

		public static void setPassword(String password) {
			DVD.password = password;
		}		
}

  1. 项目实现各个功能的子代码块合集(DVDManagement数据管理类)
    包括一下类:(包含了集合的增删改查)
    查看当前所有DVD
    查看当前新增的DVD
    查看DVD借出列表
    增加DVD
    删除DVD
    借出DVD
    归还DVD
package com.hire;

import java.util.ArrayList;
import java.util.Scanner;

public class DVDManagement {
	
 		//用户登录系统
		public static String username;//用于接收用户键入的用户名
		public static String password;//用于接收用户键入的密码
		public static void userAdminSystem() {
			Scanner sc=new Scanner(System.in);
			System.out.println("请输入您的用户名:");
			username=sc.nextLine();
			System.out.println("请输入您的密码:");
			password=sc.nextLine();
		}
		
		//DVD初始化
		public static void initDvd(ArrayList<DVD> array,ArrayList<DVD> array2) {
			DVD data;
			data=new DVD("千与千寻","0000/00/00",168,"未借出");
			array.add(data);
			data=new DVD("大鱼海棠","2019/06/06",133,"已借出");
			array.add(data);
			array2.add(data);
			data=new DVD("扫毒","2018/12/06",10,"已借出");
			array.add(data);
			array2.add(data);
			data=new DVD("星际穿越","0000/00/00",23,"未借出");
			array.add(data);
			data=new DVD("微微一笑","2016/11/23",133,"已借出");
			array.add(data);
			array2.add(data);
		}
		
		//查看所有的DVD
		public static void checkAllDVD(ArrayList<DVD> array) {
			//首先判断集合里面有没有数据
			if(array.size()==0) 
				System.out.println("对不起!目前没有相应的数据提供给您!请回去重新做您的选择!");
			else {
				System.out.println("DVD名字\t\tDVD是否借出\t借出时间\t\t\t借出次数");
				for(int i=0;i<array.size();i++) {
					DVD a=array.get(i);
					System.out.println(a.getDvdName()+"\t\t"+a.getDvdStatus()+"\t\t"+a.getHireDate()+"\t\t"+a.getHireCounts());
				}
			}
		}
		
		//查看最近新增的DVD
		public static void preferenceNewDVD(ArrayList<DVD> arr) {
			//首先判断集合里面有没有数据
			if(arr.size()==0) 
				System.out.println("对不起!目前没有相应的数据提供给您!请回去重新做您的选择!");
			else {
				System.out.println("DVD名字\t\tDVD是否借出\t借出时间\t\t\t借出次数");
				for(int i=0;i<arr.size();i++) {
					DVD a=arr.get(i);
					System.out.println(a.getDvdName()+"\t\t"+a.getDvdStatus()+"\t\t"+a.getHireDate()+"\t\t"+a.getHireCounts());
				}
			}
		}
		
		//查看借出列表
		public static void loanListDVD(ArrayList<DVD> arr) {
			//首先判断集合里面有没有数据
			if(arr.size()==0) 
				System.out.println("对不起!目前没有相应的数据提供给您!请回去重新做您的选择!");
			else {
				System.out.println("DVD名字\t\tDVD是否借出\t借出时间\t\t\t借出次数");
				for(int i=0;i<arr.size();i++) {
					DVD a=arr.get(i);
					System.out.println(a.getDvdName()+"\t\t"+a.getDvdStatus()+"\t\t"+a.getHireDate()+"\t\t"+a.getHireCounts());
				}
			}
		}
		
		/*
		 * 添加DVD
		 * arr1为存储所有DVD数据的集合
		 * arr2为存储新增的DVD数据的集合
		 * 所以,当添加了新的DVD时需要同时更新这两个集合
		 * */
		public static void addDVD(ArrayList<DVD> arr1,ArrayList<DVD> arr2) {
			Scanner sc = new Scanner(System.in);
			String name;
			while(true) {
				System.out.println("请输入您想要添加的DVD名字:");
				name = sc.nextLine();
				boolean flag = false;//用来做标记,避免出现重复的DVD。
			
				for(int x=0; x<arr1.size(); x++) {
					DVD s = arr1.get(x);
					if(s.getDvdName().equals(name)) {
						flag = true; 
						break;
					}
				}
				if(flag) 
					System.out.println("您输入的DVD已经存在,请回去重新输入您想要添加的DVD名字:");
				else break; 	
			}
			//为新增的DVD设置初始数据,并同时更新添加给上述的两个集合
			DVD s = new DVD(name,"0000/00/00",0,"未借出");
			arr1.add(s);
			arr2.add(s);
			System.out.println("添加DVD成功");
		}
		
		//删除DVD
		public static void removeDVD(ArrayList<DVD> arr1,ArrayList<DVD> arr2) {
			System.out.println("请输入您想要删除DVD名字:");
			Scanner sc = new Scanner(System.in);
			String name=sc.nextLine();
			/*
			 * 删除时需要判断新增集合和存储所有DVD的集合是否含有该DVD,
			 * 如果有,则需要同时都删除,而且,只要新增DVD集合中如果有,则所有DVD集合中肯定有该DVD
			 * */
			//分别记录集合1,和集合2的位置
			int index = -1,index1=-1;
			
			for(int x=0; x<arr1.size(); x++) {
				DVD s = arr1.get(x);
				if(s.getDvdName().equals(name)) {
					index = x;
					break;
				}
			}
			
			for(int x=0; x<arr2.size(); x++) {
				DVD s = arr2.get(x);
				if(s.getDvdName().equals(name)) {
					index1 = x;
					break;
				}
			}
			//如果为-1则为该集合中不存在输入的DVD
			if(index == -1) {
				System.out.println("不好意思,你要删除DVD信息不存在,请回去重新你的选择");
			}else {
				//如果存在,则进行删除操作。
				arr1.remove(index);
				System.out.println("删除DVD成功");
				if(index1!=-1)arr2.remove(index1);
			}
		}
		
		/*
		 * 借出DVD
		 * 如果借出了,则同时需要更新集合1和集合2的借出状态。
		 * 并且同时更新借出列表(集合)
		 * */
		public static void rentDVD(ArrayList<DVD> arr1,ArrayList<DVD> arr2,ArrayList<DVD> arr3) {
			System.out.println("请输入您想要借出的DVD名字:");
			Scanner sc=new Scanner(System.in);
			String name=sc.nextLine();
			int index=-1,index1=-1,index2=-1;
			for(int i=0;i<arr1.size();i++) {
				DVD s=arr1.get(i);
				if(name.equals(s.getDvdName())) {
					index=i;break;
				}
			}
			for(int i=0;i<arr2.size();i++) {
				DVD s=arr2.get(i);
				if(name.equals(s.getDvdName())) {
					index1=i;break;
				}
			}
		
			if(index==-1)System.out.println("对不起!您想要的DVD不存在,请回去重新做您的选择!");
			else {
				System.out.println("请去前台取出您选择的DVD!");
				DVD s=arr1.get(index);
				DVD s1=new DVD(s.getDvdName(),"2019-07-31",s.getHireCounts()+1,"已借出");
				arr1.set(index, s1);
				if(index1!=-1) arr2.set(index1, s1);
				arr3.add(s1);	
			}
		}
		
		/*
		 * 归还DVD
		 * 如果归还的DVD在集合1,和集合2中,则需要更新其借出状态,如果不存在在其中,则添加即可。
		 * 并同时删除借出列表(集合)的相对应的数据。
		 * */
		public static void returnDVD(ArrayList<DVD> arr1,ArrayList<DVD> arr2,ArrayList<DVD> arr3) {
			System.out.println("请输入您想要归还的DVD:");
			Scanner sc=new Scanner(System.in);
			String name=sc.nextLine();
			
			int index=-1,index1=-1,index2=-1;
			for(int i=0;i<arr1.size();i++) {
				DVD s=arr1.get(i);
				if(name.equals(s.getDvdName())) {
					index=i;break;
				}
			}  
			for(int i=0;i<arr2.size();i++) {
				DVD s=arr2.get(i);
				if(name.equals(s.getDvdName())) {
					index1=i;break;
				}
			}
			for(int i=0;i<arr3.size();i++) {
				DVD s=arr3.get(i);
				if(name.equals(s.getDvdName())) {
					index2=i;break;
				}
			}
			DVD s1=new DVD();
			if(index!=-1) {
				DVD s=arr1.get(index);
				s1=new DVD(s.getDvdName(),"未借出",s.getHireCounts()+1,s.getHireDate());
				arr1.set(index, s1);
			}
			else {
				DVD s=new DVD(name,"0000/00/00",1,"未借出");
				arr1.add(s);
			}
			if(index1!=-1) {
				DVD s=arr2.get(index1);
				s1=new DVD(s.getDvdName(),s.getHireDate(),s.getHireCounts()+1,"未借出");
				arr2.set(index1, s1);
			}
			else {
				DVD s=new DVD(name,"0000/00/00",1,"未借出");
				arr2.add(s);
			}
			if(index2!=-1)arr3.remove(index2);
			System.out.println("归还成功!");
		}
}

三:总结

一:代码总结:
1,首先是登录界面的登录功能超过三次锁定用户,要用三次循环,最后一次做特殊处理
2,然后是主菜单上的操作,为了实现不退出就一直执行的功能,选择用while(true){},在退出的时候选择用system.exit()退出虚拟机。
3,功能介绍方面的话需要注意的就是,在借出的时候,如果数据库中有,则借出,此时需要更新含有全部DVD信息的集合,
还有新增DVD信息的集合,还有储存DVD借出列表的集合。因为要改变其状态为借出,还要及时更新DVD借出列表
4,删除的时候要注意新增DVD集合中,也要及时进行更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值