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)
blank

相关推荐

  • 八大免费SSL证书-给你的网站免费添加Https安全加密

    八大免费SSL证书-给你的网站免费添加Https安全加密

    2021年10月14日
  • 监督学习、无监督学习、半监督学习、强化学习、自监督学习

    监督学习、无监督学习、半监督学习、强化学习、自监督学习一文读懂监督学习、无监督学习、半监督学习、强化学习四种方式 青烟王国 图:pixabay「机器人圈」导览:一般说来,训练深度学习网络的方式主要有四种:监督、无监督、半监督和强化学习。在接下来的文章中,机器人圈将逐个解释这些方法背后所蕴含的理论知识。除此之外,机器人圈将分享文献中经常碰到的术语,并提供与数学相关的更多资源。本文编译自硅谷著名的风险投资机构安德森霍洛维茨基金,作…

  • Spring Cloud 学习笔记(1 / 3)「建议收藏」

    SpringCloud学习笔记(2/3)SpringCloud学习笔记(3/3)—01_前言闲聊和课程说明02_零基础微服务架构理论入门03_第二季Boot和Cloud版本选型04_Cloud组件停更说明05_父工程Project空间新建06_父工程pom文件07_复习DependencyManagement和Dependencies08_支付模块构建(上)09_支付模块构建(中)10_支付模块构建(下)11_热部署Devtool

  • Modbus 通讯协议 (RTU传输模式)「建议收藏」

    Modbus 通讯协议 (RTU传输模式)「建议收藏」第一章Modbus协议简介Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,

  • jdbctemplate常用方法_cannot create jdbc driver of

    jdbctemplate常用方法_cannot create jdbc driver of/*StreamTypeEnumValues*/varadTypeBinary=1;varadTypeText=2;/*LineSeparatorEnumValues*/varadLF=10;varadCR=13;varadCRLF=-1;/*StreamWriteEnumValues*/varadWriteChar=0;varadWriteLin…

    2022年10月14日
  • mysql的端口是多少_如何查看db2数据库的端口

    mysql的端口是多少_如何查看db2数据库的端口查看mysql端口号(mysql端口号是多少)2020-05-0722:11:45共10个回答如何查看mysql的端口号1使用命令showglobalvariableslike’port’;查看端口号2修改端口,编辑/etc/my.cnf文件,早期版本有可能是my.conf文件名,增加端口参数,并且设定端口,注意该端口未被使用,保存退出.总结:注意修改的端口不要被占用,而且要有规划,不要轻意的总…

发表回复

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

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