Java——图书借阅系统「建议收藏」

**项目需求:**为图书阅览室开发一个图书借阅系统,最多可存50本书,实现图书的管理。图书借阅系统具备以下功能:1.查看图书信息菜单选择查看功能,展示当前所有图书的相关信息,效果如下。case2: System.out.println(“—>查看图书”); System.out.println(“序号\t状态\t名称\t\t借出日期”); for(…

大家好,又见面了,我是你们的朋友全栈君。

**

项目需求:

**
为图书阅览室开发一个图书借阅系统,最多可存50本书,实现图书的管理。图书借阅系统具备以下功能:
1.查看图书信息
菜单选择查看功能,展示当前所有图书的相关信息,效果如下。
在这里插入图片描述

case 2:
				System.out.println("--->查看图书");
				System.out.println("序号\t状态\t名称\t\t借出日期");
				for(int i = 0;names[i] != null;i ++){ 
   
					String situation = (states[i] == 0)?"已借出":"可借";
					System.out.print((i+1) + "\t" + situation + "\t《" + names[i] + "》\t");
					if(states[i] == 0){ 
   
						System.out.println(dates[i]);
					}else{ 
   
						System.out.println();
					}
				}
				System.out.println("*************************");
				break;

2.新增图书信息
菜单选择新增功能,根据提示输入新增的图书信息,添加到库存:效果如下。如果图书货架已满,即达到50本图书,则提示增加失败的信息。
在这里插入图片描述
在这里插入图片描述

case 1:
				System.out.println("--->新增图书");
				int a = 0;
				for(;a < names.length;a ++){ 
   
					if(names[a] == null){ 
   
					System.out.print("请输入图书名称:");
				    names[a]= input.next();//录入书名
					System.out.println("\n" + "新增《" +names[a] +"》成功!");
					
					//将图书信息存入数组中
					states[a] = 1;
					times[a] = 0;
					dates[a] = null;
					break;
					}
				}
				if(a == 50){ 
   
					System.out.println("货架已满,增加失败");
				}
				System.out.println("*************************");
				break;

3.删除图书信息
执行“删除”命令,输入要删除的图书名称后进行删除,效果如下。如果图书为借出状态,不允许删除。如果没有在图书列表中找到该图书信息,则提示:“没有找到匹配信息!”
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

case 3:
				System.out.println("--->删除图书");
				System.out.println("请输入图书名称");
				String book = input.next();
				boolean check1 = false;//判断是否找到需要删除的书目,false为未找到
				for(int b = 0;names[b] != null;b ++){ 
   
					if(names[b].equals(book)){ 
   
						check1 = true;
						if(states[b] == 1){ 
   //图书未借出,可以删除
							System.out.println("删除《" +book + "》成功!");
							int i = b;
							for(;i <names.length-1;i ++){ 
   
								states[i] = states[i+1];//第三本书未借出
								names[i] = names[i+1];
								dates[i] = dates[i+1];
								times[i] = times[i+1];
							}//将数组内容前移
							
							//将最后一本书的位置进行初始化
							states[i] = 1;//第三本书未借出
							names[i] = null;
							dates[i] = null;
							times[i] = 0;
							break;
						}else{ 
   
							System.out.println("图书已借出,无法删除!");
							break;
						}
				    }
				}
				if(check1 == false){ 
   
					System.out.println("没有找到匹配信息!");
				}
				System.out.println("*************************");
				break;

4.借出图书
执行“借出”命令,实现图书的借出,效果如下。如果该图书已被借出,则系统提示“XXX已被借出”。如果没有找到该图书信息,则系统提示:“没有找到匹配信息!”借出日期是以(年-月-日)的格式进行输入的。
在这里插入图片描述
在这里插入图片描述

case 4:
				System.out.println("--->借出图书");
				System.out.println("请输入图书名称:");
				String lend = input.next();
				boolean check2 = false;//判断想要借出的书是否能找到,false为未找到,true为找到
				for(int b = 0;names[b] != null;b ++){ 
   
					if(names[b].equals(lend)){ 
   //如果该书存在
						check2 = true;//想要借的书能被找到
						if(states[b] == 1){ 
   //如果图书未借出
							System.out.println("请输入借出日期(年-月-日):");
							dates[b] = input.next();
							while(judge(dates[b]) == false){ 
   
								System.out.println("日期非法,请重新输入!");
								dates[b] = input.next();
							}
							states[b] = 0;//将当前图书的状态转化为借出
							times[b] ++;//当前图书的借出次数加一
						}else{ 
   //如果图书已经借出
							System.out.println(names[b] + "已被借出!");						
						}
						break;
					}
				}
				if(check2 == false){ 
   
					System.out.println("没有找到匹配信息!");
				}
				System.out.println("*************************");
				break;

5.归还图书
执行“归还”命令,实现归还图书,并计算租金(1元/天),效果如下。如果归还的图书未被借出,则系统提示:“该图书没有被借出!无法进行归还操作。”如果归还的图书与列表中的图书不匹配,则系统提示:“没有找到匹配信息!”
在这里插入图片描述
在这里插入图片描述

case 5:
				System.out.println("--->归还图书");
				System.out.println("请输入图书名称:");
				String back = input.next();
				boolean check3 = false;//判断想要归还的书是否能找到,false为未找到,true为找到
				for(int b = 0;names[b] != null;b ++){ 
   
					if(names[b].equals(back)){ 
   //如果该书存在
						check3 = true;//想要借的书能被找到
						if(states[b] == 0){ 
   //如果图书已经借出
							System.out.println("请输入归还日期(年-月-日):");
							String returnDate = input.next();
							while(judge(returnDate) == false){ 
   
								System.out.println("日期非法,请重新输入!");
								returnDate = input.next();
							}
							System.out.println("归还《" + back + "》成功!");
							System.out.println("借出日期:" + dates[b]);
							System.out.println("归还日期:" + returnDate);
							int money = 0;
							try { 
   
								money = daysBetween(dates[b],returnDate);
							} catch (ParseException e) { 
   
								e.printStackTrace();
							}
							System.out.println("应付租金(元):" + money );
							states[b] = 1;//将当前图书的状态转化为未借出 
						}else{ 
   //如果图书未借出
							System.out.println("该书没有被借出,无法进行归还操作!");						
						}
						break;
					}
				}
				if(check3 == false){ 
   
					System.out.println("没有找到匹配信息!");
				}
				System.out.println("*************************");
				break;
public class bookLending { 
   
	//定义函数,用于判断日期是否合法
	static boolean judge (String str) { 
   
		SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd");//括号内为日期格式,y代表年份,M代表年份中的月份(为避免与小时中的分钟数m冲突,此处用M),d代表月份中的天数
		try { 
   
			sd.setLenient(false);//此处指定日期/时间解析是否不严格,在true是不严格,false时为严格
			sd.parse(str);//从给定字符串的开始解析文本,以生成一个日期
		}
		catch (Exception e) { 
   
			return false;
		}
		return true;
	}
public static int daysBetween(String smdate,String bdate) throws ParseException{ 
   
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
			Calendar cal = Calendar.getInstance();
			cal.setTime(sdf.parse(smdate));
			long time1 = cal.getTimeInMillis();
			cal.setTime(sdf.parse(bdate));
			long time2 = cal.getTimeInMillis();
			long between_days=(time2-time1)/(1000*3600*24);
		return Integer.parseInt(String.valueOf(between_days));
		}

6.借出排行榜
将所有数目按照借出次数从大到小进行排序
在这里插入图片描述

	public static void printBook(String[] names, int[] times, int[] sortBook, int number){ 
   
		int[] another = times.clone();//复制数组
		int i = 0;
		int max = another[0];//求出借出次数的最大值,用于设置循环条件
		for(int p = 0;p <= max;p ++){ 
   //从0至借出次数最大值,依次查询借出次数对应的书的下标,并存储在sortBook数组中
			for(int q = 0;q < number;q ++){ 
   //遍历次数数组,将符合条件的数组值的下标存储在sortBook数组中
				if(times[q] == p){ 
   
					sortBook[i++] = q;
				}
			}
		}
		System.out.println("序号\t" + "书名\t\t" + "借出次数");
		for(int x = (number-1);x >= 0;x --){ 
   //打印借出次数排行榜
			System.out.println((number-x) + "\t" + names[sortBook[x]] + "\t\t" + times[sortBook[x]]);
		}
		System.out.println("*************************");
	}
case 0:
				int number = 0;//初始化书目总数未0
				for(;names[number] != null;number ++){ 
   }//求出当前书目总数
				int[] sortBook = new int[number];
	            printBook(names,times,sortBook, number);//调用函数导出借出排行榜
				break;

7.退出
当用户执行“退出”命令时,结束本程序;

以下为总代码:

package bookLending;

import java.util.Scanner;
import java.text.SimpleDateFormat;
import java.util.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class bookLending { 
   
	//定义函数,用于判断日期是否合法
	static boolean judge (String str) { 
   
		SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd");//括号内为日期格式,y代表年份,M代表年份中的月份(为避免与小时中的分钟数m冲突,此处用M),d代表月份中的天数
		try { 
   
			sd.setLenient(false);//此处指定日期/时间解析是否不严格,在true是不严格,false时为严格
			sd.parse(str);//从给定字符串的开始解析文本,以生成一个日期
		}
		catch (Exception e) { 
   
			return false;
		}
		return true;
	}
	public static void printBook(String[] names, int[] times, int[] sortBook, int number){ 
   
		int[] another = times.clone();//复制数组
		int i = 0;
		int max = another[0];//求出借出次数的最大值,用于设置循环条件
		for(int p = 0;p <= max;p ++){ 
   //从0至借出次数最大值,依次查询借出次数对应的书的下标,并存储在sortBook数组中
			for(int q = 0;q < number;q ++){ 
   //遍历次数数组,将符合条件的数组值的下标存储在sortBook数组中
				if(times[q] == p){ 
   
					sortBook[i++] = q;
				}
			}
		}
		System.out.println("序号\t" + "书名\t\t" + "借出次数");
		for(int x = (number-1);x >= 0;x --){ 
   //打印借出次数排行榜
			System.out.println((number-x) + "\t" + names[sortBook[x]] + "\t\t" + times[sortBook[x]]);
		}
		System.out.println("*************************");
	}
	public static int daysBetween(String smdate,String bdate) throws ParseException{ 
   
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
			Calendar cal = Calendar.getInstance();
			cal.setTime(sdf.parse(smdate));
			long time1 = cal.getTimeInMillis();
			cal.setTime(sdf.parse(bdate));
			long time2 = cal.getTimeInMillis();
			long between_days=(time2-time1)/(1000*3600*24);
		return Integer.parseInt(String.valueOf(between_days));
		}

	public static void main(String[] args) { 
   
		//定义数据主体:图书
		int[] states = new int[50];//状态,0:已借出,1:可借
		String[] names = new String[50];//名称
		String[] dates = new String[50];//借出日期,二维数组将年月日分别存储,便于计算日期
		int[] times = new int[50];//借出次数

		//初始化四个数据
		states[0] = 0;//第一本书已借出
		names[0] = "数据结构";
		dates[0] = "2018-7-1";//第一本书于2018年7月1日借出
		times[0] = 1;//第一本书已借出一次
		
		states[1] = 1;//第二本书未借出
		names[1] = "数据库";
		dates[1] = null;
		times[1] = 0;//第二本书还未借出过
		
		states[2] = 1;//第三本书未借出
		names[2] = "离散数学";
		dates[2] = null;
		times[2] = 0;//第三本书还未借出过
		
		states[3] = 1;//第四本书未借出
		names[3] = "编译原理";
		dates[3] = null;
		times[3] = 0;//第四本书还未借出过
		
		//搭建程序流程框架
		Scanner input = new Scanner(System.in);
		int num = -1;//用户输入0时返回主菜单,num在借阅操作后进行重新赋值
		boolean flag = false;//记录用户是否退出系统,true为退出,false为不退出
		System.out.println("欢迎使用图书借阅系统");
		
		do{ 
   
			System.out.println("---------------------");
			System.out.println("0.借出排行榜");
			System.out.println("1.新增图书");
			System.out.println("2.查看图书");
			System.out.println("3.删除图书");
			System.out.println("4.借出图书");
			System.out.println("5.归还图书");
			System.out.println("6.退出");
			System.out.println("---------------------");
			System.out.println("请选择:");
			int choose = input.nextInt();
			switch(choose){ 
   
			case 0:
				int number = 0;//初始化书目总数未0
				for(;names[number] != null;number ++){ 
   }//求出当前书目总数
				int[] sortBook = new int[number];
	            printBook(names,times,sortBook, number);//调用函数导出借出排行榜
				break;
			case 1:
				System.out.println("--->新增图书");
				int a = 0;
				for(;a < names.length;a ++){ 
   
					if(names[a] == null){ 
   
					System.out.print("请输入图书名称:");
				    names[a]= input.next();//录入书名
					System.out.println("\n" + "新增《" +names[a] +"》成功!");
					
					//将图书信息存入数组中
					states[a] = 1;
					times[a] = 0;
					dates[a] = null;
					break;
					}
				}
				if(a == 50){ 
   
					System.out.println("货架已满,增加失败");
				}
				System.out.println("*************************");
				break;
			case 2:
				System.out.println("--->查看图书");
				System.out.println("序号\t状态\t名称\t\t借出日期");
				for(int i = 0;names[i] != null;i ++){ 
   
					String situation = (states[i] == 0)?"已借出":"可借";
					System.out.print((i+1) + "\t" + situation + "\t《" + names[i] + "》\t");
					if(states[i] == 0){ 
   
						System.out.println(dates[i]);
					}else{ 
   
						System.out.println();
					}
				}
				System.out.println("*************************");
				break;
			case 3:
				System.out.println("--->删除图书");
				System.out.println("请输入图书名称");
				String book = input.next();
				boolean check1 = false;//判断是否找到需要删除的书目,false为未找到
				for(int b = 0;names[b] != null;b ++){ 
   
					if(names[b].equals(book)){ 
   
						check1 = true;
						if(states[b] == 1){ 
   //图书未借出,可以删除
							System.out.println("删除《" +book + "》成功!");
							int i = b;
							for(;i <names.length-1;i ++){ 
   
								states[i] = states[i+1];//第三本书未借出
								names[i] = names[i+1];
								dates[i] = dates[i+1];
								times[i] = times[i+1];
							}//将数组内容前移
							
							//将最后一本书的位置进行初始化
							states[i] = 1;//第三本书未借出
							names[i] = null;
							dates[i] = null;
							times[i] = 0;
							break;
						}else{ 
   
							System.out.println("图书已借出,无法删除!");
							break;
						}
				    }
				}
				if(check1 == false){ 
   
					System.out.println("没有找到匹配信息!");
				}
				System.out.println("*************************");
				break;
			case 4:
				System.out.println("--->借出图书");
				System.out.println("请输入图书名称:");
				String lend = input.next();
				boolean check2 = false;//判断想要借出的书是否能找到,false为未找到,true为找到
				for(int b = 0;names[b] != null;b ++){ 
   
					if(names[b].equals(lend)){ 
   //如果该书存在
						check2 = true;//想要借的书能被找到
						if(states[b] == 1){ 
   //如果图书未借出
							System.out.println("请输入借出日期(年-月-日):");
							dates[b] = input.next();
							while(judge(dates[b]) == false){ 
   
								System.out.println("日期非法,请重新输入!");
								dates[b] = input.next();
							}
							states[b] = 0;//将当前图书的状态转化为借出
							times[b] ++;//当前图书的借出次数加一
						}else{ 
   //如果图书已经借出
							System.out.println(names[b] + "已被借出!");						
						}
						break;
					}
				}
				if(check2 == false){ 
   
					System.out.println("没有找到匹配信息!");
				}
				System.out.println("*************************");
				break;
			case 5:
				System.out.println("--->归还图书");
				System.out.println("请输入图书名称:");
				String back = input.next();
				boolean check3 = false;//判断想要归还的书是否能找到,false为未找到,true为找到
				for(int b = 0;names[b] != null;b ++){ 
   
					if(names[b].equals(back)){ 
   //如果该书存在
						check3 = true;//想要借的书能被找到
						if(states[b] == 0){ 
   //如果图书已经借出
							System.out.println("请输入归还日期(年-月-日):");
							String returnDate = input.next();
							while(judge(returnDate) == false){ 
   
								System.out.println("日期非法,请重新输入!");
								returnDate = input.next();
							}
							System.out.println("归还《" + back + "》成功!");
							System.out.println("借出日期:" + dates[b]);
							System.out.println("归还日期:" + returnDate);
							int money = 0;
							try { 
   
								money = daysBetween(dates[b],returnDate);
							} catch (ParseException e) { 
   
								e.printStackTrace();
							}
							System.out.println("应付租金(元):" + money );
							states[b] = 1;//将当前图书的状态转化为未借出 
						}else{ 
   //如果图书未借出
							System.out.println("该书没有被借出,无法进行归还操作!");						
						}
						break;
					}
				}
				if(check3 == false){ 
   
					System.out.println("没有找到匹配信息!");
				}
				System.out.println("*************************");
				break;
			case 6:
				flag = true;
				break;
			default:
				flag = true;
				break;
		
			}
			if(flag == true){ 
   
				break;
			}else{ 
   
				System.out.println("输入0返回");
				num = input.nextInt();
			}
		}while(num == 0);
		System.out.println("谢谢使用!");
	}
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/125949.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • HTML5实战与剖析之HTMLDocument变化(readyreState属性、兼容模式和head属性)「建议收藏」

    HTML5实战与剖析之HTMLDocument变化(readyreState属性、兼容模式和head属性)「建议收藏」之前为大家介绍了些许关于HTML5新添加的小东东,想必大家也有所了解了。今天为大家介绍HTML5中有关HTMLDocument方面新添加的内容。那么HTML5中有关HTMLDocument方面新添加的内容都有什么呢?HTML5中有关HTMLDocument方面新添加的内容有readyState属性、兼容模式判断和head属性。下面就为大家一一介绍这些新添加的小东东吧。

  • 在线IEEE浮点二进制计算器工具「建议收藏」

    在线IEEE浮点二进制计算器工具「建议收藏」在线IEEE浮点二进制计算器工具在线IEEE浮点二进制计算器工具这是一个小计算器,旨在帮助您了解用于浮点计算的IEEE754标准。它是用JavaScript实现的,并且可以与Chrome和Firefox的最新桌面版本一起使用。我尚未在其他浏览器上进行过测试。如果您在左侧的三个框中之一中输入浮点数字,然后按Enter键,您将在右侧看到该数字的位模式。您可以输入使用通常在编程语言接受的语法,比如数字42,2.345,12E-3,等;您可以输入值NaN,Inf和-Inf直接;并且您还可以使用语法输入分

    2022年10月20日
  • linux系统怎么利用LVM扩容

    linux系统怎么利用LVM扩容引言:在linux系统下,如果在虚拟机层面进行扩容,首先是挂载一块虚拟机硬盘,然后在linux系统底下去分区,然后对挂载到新的目录,但是,如果是对linux系统里面的文件目录本身进行扩容的话,只能使用LVM来进行扩容,本文将分两部分介绍,第一部分是如何创建LVM的分区,第二部分是如何对文件目录本身利用LVM来进行扩容:创建LVM分区:1如下图,我这里有一块硬盘已经分区,如果直接对这块硬盘创建LVM分区,会报错,因此,可以先清除掉这块硬盘的分区这里本身已经分了区,如果要使用这块硬盘进行L…

  • javascript 类数组概念详解

    javascript 类数组概念详解

  • vue文件上传功能_vue如何自定义组件

    vue文件上传功能_vue如何自定义组件vue的文件上传组件upload,拥有支持多种格式文件上传,单文件多文件等都支持,许多项目现在都少不了文件上传功能,但是vue的upload组件如果直接引用,肯定也有一些不方便之处,有的时候需要传参数,需要手动触发上传方法,而不是选择了文件就上传,所以结合我项目实例,写一vue自定义文件上传的实现,包括前端和后台的处理以及参数的接收。一、先认识一下vue的upload组件,官网链接ht…

  • Unreal Engine 4 C++ 能够创建角色Zoom摄像头(资源)

    Unreal Engine 4 C++ 能够创建角色Zoom摄像头(资源)

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号