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("谢谢使用!");
	}
}

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Q学习(Q-learning)入门小例子及python实现

    Q学习(Q-learning)入门小例子及python实现一、从马尔科夫过程到Q学习#有一定基础的读者可以直接看第二部分Q学习(Q-learning)算法是一种与模型无关的强化学习算法,以马尔科夫决策过程(MarkovDecisionProcesses,MDPs)为理论基础。标准的马尔科夫决策过程可以用一个五元组<S,A,P,R,γ>表示,其中:S是一个离散有界的状态空间; A是一个离散的动作空间; P为状态转…

    2022年10月4日
    0
  • idea修改properties文件编码_idea使用maven

    idea修改properties文件编码_idea使用maven结果图:

    2022年9月21日
    0
  • 驱动开发利器Microsoft Windows Driver Kit 7.1.0下载

    在Windows2000与WindowsXP系统采用是WINDDK来开发WINDOWS驱动程序,我手头也有WINDDK,可是从WindowsVista开始之后,一般采用MicrosoftW

    2021年12月26日
    60
  • c语言的单片机编曲,要的就是强大……C语言编的《最炫民族风》(转)[通俗易懂]

    c语言的单片机编曲,要的就是强大……C语言编的《最炫民族风》(转)[通俗易懂]该楼层疑似违规已被系统折叠隐藏此楼查看此楼—————————————————————————————————-以下是读入的内容————《最炫民族风》:36,s6,s132s2ss3ss2s1s2s1s6,36,s6,s135s2…

    2022年9月13日
    0
  • C# winform 界面美化技巧(扁平化设计)

    C# winform 界面美化技巧(扁平化设计)C#winform界面美化技巧(扁平化设计)关于C#界面美化的一些小技巧在不使用第三方控件如IrisSkin的前提下,依然可以对winform做出让人眼前一亮的美化首先,我们先来实现主界面的扁平化此处分为两个步骤,第一步是更改winform自带的MainForm窗体属性,第二步是添加窗体事件。将主窗体FormBorderStyle更改为None,这样就得到了一个无边框的窗体(w…

    2022年5月28日
    36
  • KeyPal硬件钱包[通俗易懂]

    KeyPal硬件钱包[通俗易懂]KeyPal-一款多场景、易操作、全方位保护多链数字资产的硬件钱包以下文章来源于KeyPal硬件钱包,作者KeyPal2021年8月9日,TokenPocket发布了第一款服务于区块链领域的硬件钱包产品——KeyPal。KeyPal硬件钱包是TokenPocket基于开源项目自行深度研发出的一款多链的、多重认证、多方位保护用户数字资产的硬件钱包。KeyPal具有诸多亮点,从安全性、外观表现、材质用料、智能应用和公链支持等各方面都有不错的表现,是当前市面上最具性价比的一款硬件钱包。下面就..

    2022年8月30日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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