目录
一、总览
1.Book类存放图书的基本信息,包括书号、书名、作者、出版社、出版日期、存馆数量、定价。
2.Reader类存放读者的基本信息,包括学号、姓名、学院、专业班级。
3.RbInfor类存放借阅信息,包括借阅者、借阅的图书、借阅的数量、借阅日期、应还日期、归还日期。
4.m_IO类存放Input、Output方法实现与文件的交互。
5.LibrarySystem类展示图书管理系统界面,实现与用户的交互。
二、Book类
1.基本:
(1)实现Serializable接口,可以被序列化
(2)创建BOOK集合,存放book对象;创建静态file对象,通向Books.txt文件。
(3)基本的get、set方法,有参、无参构造器。
(4)重写toString方法。
public class Book implements Serializable {
private String id;
private String bookName;
private String writerName;
private String publishPlace;
private String publishTime;
private double price;
private int number;//存馆数量
private static Scanner sc=new Scanner(System.in);
public static List<Book> BOOK=new ArrayList<Book>();
public static File file=new File("src\\Information\\Books.txt");
public Book(String id, String bookName, String writerName, String publishPlace,
String publishTime, double price, int number) {
this.id = id;
this.bookName = bookName;
this.writerName = writerName;
this.publishPlace = publishPlace;
this.publishTime = publishTime;
this.price = price;
this.number=number;
}
public Book() {
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public String getWriterName() {
return writerName;
}
public void setWriterName(String writerName) {
this.writerName = writerName;
}
public String getPublishPlace() {
return publishPlace;
}
public void setPublishPlace(String publishPlace) {
this.publishPlace = publishPlace;
}
public String getPublishTime() {
return publishTime;
}
public void setPublishTime(String publishTime) {
this.publishTime = publishTime;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
@Override
public String toString() {
return "{" +
"id='" + id + '\'' +
", bookName='" + bookName + '\'' +
", writerName='" + writerName + '\'' +
", publishment='" + publishPlace + '\'' +
", publishTime='" + publishTime + '\'' +
", number=" + number +
", price=" + price +
'}';
}
}
2.Book类方法
(1)图书信息列表显示
public void showBooks(){
int i=1;
if(BOOK.size()==0){
System.out.println("暂无图书信息!");
return;
}
for (Book book : BOOK) {
System.out.println(i+"."+book);
i++;
}
}
(2)图书信息排序(书号、书名,升序)
public void sortBook(){
while (true) {
System.out.println("1.按书号升序排序");
System.out.println("2.按书名升序排序");
System.out.println("请选择:");
String s=sc.nextLine();
if(s.equals("1")){
Collections.sort(BOOK,new MyComparator_id());
showBooks();
return;
}else if(s.equals("2")){
Collections.sort(BOOK,new MyComparator_Bname());
showBooks();
return;
}else{
System.out.println("输入有误!请重新输入");
}
}
}
定义自定义类MyComparator_id和MyComparator_Bname自定义排序规则
class MyComparator_id implements Comparator<Book>{
@Override
public int compare(Book o1, Book o2) {
return Integer.parseInt(o1.getId())-Integer.parseInt(o2.getId());
}
}
class MyComparator_Bname implements Comparator<Book>{
@Override
public int compare(Book o1, Book o2) {
if(o1.getBookName().hashCode()>o2.getBookName().hashCode()
&& o1.getBookName().length()>o2.getBookName().length()){
return 1;
}else
return -1;
}
}
(3) 图书信息新增
public void addBook(){
//书号、书名、作者、出版社、出版日期、存馆数量、定价
System.out.println("请输入书号:");
String id=sc.nextLine();
System.out.println("请输入书名:");
String bookName=sc.nextLine();
System.out.println("请输入作者:");
String writerName=sc.nextLine();
System.out.println("请输入出版社:");
String publishPlace=sc.nextLine();
System.out.println("请输入出版日期:");
String publishTime=null;
System.out.print("年:");
publishTime=sc.nextLine()+"年 ";
System.out.print("月:");
publishTime+=sc.nextLine()+"月 ";
System.out.print("日:");
publishTime+=sc.nextLine()+"日";
System.out.println("请输入定价:");
double price=Double.parseDouble(sc.nextLine());
System.out.println("请输入存馆数量:");
int number=Integer.parseInt(sc.nextLine());
BOOK.add(new Book(id, bookName,writerName,publishPlace, publishTime,price,number));
System.out.println("新增成功!");
}
(4) 图书信息删除、修改
Map<String, Book> maps = new HashMap<>();
while (true) {
System.out.println("1.根据书号删除/修改");
System.out.println("2.根据书名删除/修改");
System.out.println("请选择:");
String select = sc.nextLine();
if (select.equals("1")) {
maps = findBookById();
break;
} else if (select.equals("2")) {
maps = findBookByBookName();
break;
} else {
System.out.println("输入有误,请重新输入");
}
}
System.out.println("请选择所要删除/修改的图书:");
String s=sc.nextLine();
Book book=maps.get(s);//定位所要操作的对象
System.out.println("请选择所要进行的操作:");
System.out.println("1.删除");
System.out.println("2.修改");
String s1=sc.nextLine();
if(s1.equals("1")){
BOOK.remove(book);
System.out.println("删除成功");
}else if(s1.equals("2")){
while (true) {
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("7.定价");
String s2=sc.nextLine();
switch (s2){
case "0":
return;
case "1":
System.out.println("请输入书号:");
book.setId(sc.nextLine());
break;
case "2":
System.out.println("请输入书名:");
book.setBookName(sc.nextLine());
break;
case "3":
System.out.println("请输入作者名:");
book.setWriterName(sc.nextLine());
break;
case "4":
System.out.println("请输入出版社:");
book.setPublishPlace(sc.nextLine());
break;
case "5":
System.out.println("请输入出版日期:");
String publishTime=null;
System.out.print("年:");
publishTime=sc.nextLine()+"年 ";
System.out.print("月:");
publishTime+=sc.nextLine()+"月 ";
System.out.print("日:");
publishTime+=sc.nextLine()+"日";
book.setPublishTime(publishTime);
break;
case "6":
System.out.println("请输入存馆数量:");
book.setNumber(Integer.parseInt(sc.nextLine()));
break;
case "7":
System.out.println("请输入定价:");
book.setPrice(Double.valueOf(sc.nextLine()));
break;
default:
System.out.println("输入有误!请重新输入:");
}
}
}else{
System.out.println("输入有误!");
return;
}
}
(5)图书信息查找(按书名,按作者名,按出版社查找)
public Map<String,Book> findBook() {
while (true) {
System.out.println("1.根据书名查找");
System.out.println("2.根据作者名查找");
System.out.println("3.根据出版社查找");
System.out.println("请选择:");
String s=sc.nextLine();
switch (s){
case "1":
return findBookByBookName();
case "2":
return findBookByWriterName();
case "3":
return findBookByPublishPlace();
default:
System.out.println("输入有误,请重新输入!");
}
}
}
private Map<String,Book> findBookByBookName(){
int index=1;
Map<String,Book> maps=new HashMap<>();
System.out.println("请输入所要查找的图书名:");
String _name=sc.nextLine();
for (Book book : BOOK) {
if(book.getBookName().equals(_name)){
System.out.print(index+".");
System.out.println(book);
maps.put(String.valueOf(index),book);
index++;
}
}
if(maps.isEmpty()){
System.out.println("未查到该图书信息");
return null;
}
return maps;
}
private Map<String,Book> findBookByWriterName(){
int index=1;
Map<String,Book> maps=new HashMap<>();
System.out.println("请输入所要查找的作者名:");
String _name=sc.nextLine();
for (Book book : BOOK) {
if(book.getWriterName().equals(_name)){
System.out.print(index+".");
System.out.println(book);
maps.put(String.valueOf(index),book);
index++;
}
}
if(maps.isEmpty()){
System.out.println("未查到该图书信息");
return null;
}
return maps;
}
private Map<String,Book> findBookByPublishPlace(){
int index=1;
Map<String,Book> maps=new HashMap<>();
System.out.println("请输入所要查找的出版社名:");
String _name=sc.nextLine();
for (Book book : BOOK) {
if(book.getPublishPlace().equals(_name)){
System.out.print(index+".");
System.out.println(book);
maps.put(String.valueOf(index),book);
index++;
}
}
if(maps.isEmpty()){
System.out.println("未查到该图书信息");
return null;
}
return maps;
}
private Map<String,Book> findBookById(){
int index=1;
Map<String,Book> maps=new HashMap<>();
System.out.println("请输入所要查找的书号:");
String _id=sc.nextLine();
for (Book book : BOOK) {
if(book.getId().equals(_id)){
System.out.print(index+".");
System.out.println(book);
maps.put(String.valueOf(index),book);
index++;
}
}
if(maps.isEmpty()){
System.out.println("未查到该图书信息");
return null;
}
return maps;
}
三、Reader类
1.基本:
public class Reader implements Serializable {
private String id;
private String name;
private String school;
private String classNum;
private static Scanner sc=new Scanner(System.in);
public static List<Reader> READER=new ArrayList<Reader>();
public static File file=new File("src//Information//Readers.txt");
public Reader() {
}
public Reader(String id, String name, String school, String classNum) {
this.id = id;
this.name = name;
this.school = school;
this.classNum = classNum;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSchool() {
return school;
}
public void setSchool(String school) {
this.school = school;
}
public String getClassNum() {
return classNum;
}
public void setClassNum(String classNum) {
this.classNum = classNum;
}
@Override
public String toString() {
return "{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", school='" + school + '\'' +
", classNum='" + classNum + '\'' +
'}';
}
}
2.Reader类方法
(1)读者信息展示
public void showReaders(){
if(READER.size()==0){
System.out.println("暂无读者信息!");
return;
}
int i=1;
for (Reader reader : READER) {
System.out.println(i+"."+reader);
i++;
}
}
(2) 读者信息排序(学号、学院)
public void sortReader(){
while (true) {
System.out.println("1.按学号升序排序");
System.out.println("2.按专业学院升序排序");
System.out.println("请选择:");
String s=sc.nextLine();
if(s.equals("1")){
Collections.sort(READER,new MyComparator_Rid());
showReaders();
return;
}else if(s.equals("2")){
Collections.sort(READER,new MyComparator_Rname());
showReaders();
return;
}else{
System.out.println("输入有误!请重新输入");
}
}
}
class MyComparator_Rid implements Comparator<Reader>{
@Override
public int compare(Reader o1, Reader o2) {
return Integer.parseInt(o1.getId())-Integer.parseInt(o2.getId());
}
}
class MyComparator_Rname implements Comparator<Reader>{
@Override
public int compare(Reader o1, Reader o2) {
if(o1.getName().hashCode()>o2.getName().hashCode()
&& o1.getName().length()>o2.getName().length()){
return 1;
}else
return -1;
}
}
(3) 读者信息查找(学号、姓名、专业班级)
public void findReader(){
while (true) {
System.out.println("1.根据学号查找");
System.out.println("2.根据姓名查找");
System.out.println("3.根据专业班级查找");
System.out.println("请选择:");
String s=sc.nextLine();
switch (s){
case "1":
findReaderById();
return;
case "2":
findReaderByName();
return;
case "3":
findReaderBySchool();
return;
default:
System.out.println("输入有误,请重新输入!");
}
}
}
private void findReaderById() {
int index=1;
System.out.println("请输入所要查找的学生学号:");
String _id=sc.nextLine();
for (Reader reader : READER) {
if(reader.getId().equals(_id)){
System.out.print(index+".");
System.out.println(reader);
index++;
}
}
if(index==1){
System.out.println("未查到相关信息");
}
}
private void findReaderByName(){
int index=1;
System.out.println("请输入所要查找的学生姓名:");
String _name=sc.nextLine();
for (Reader reader : READER) {
if(reader.getName().equals(_name)){
System.out.print(index+".");
System.out.println(reader);
index++;
}
}
if(index==1){
System.out.println("未查到相关信息");
}
}
private void findReaderBySchool(){
int index=1;
System.out.println("请输入所要查找的学生的专业班级:");
String _school=sc.nextLine();
for (Reader reader : READER) {
if(reader.getSchool().equals(_school)){
System.out.print(index+".");
System.out.println(reader);
index++;
}
}
if(index==1){
System.out.println("未查到相关信息");
}
}
(4) 读者信息删除、修改
public void delete_GaiReader() throws Exception {
Map<Integer,Reader> maps=new HashMap<>();
int index=1;
System.out.println("请输入所要删除/修改的读者姓名:");
String _name=sc.nextLine();
System.out.println("请输入所要删除/修改的读者学号:");
String _id=sc.nextLine();
for (Reader reader : READER) {
if(reader.name.equals(_name) && reader.id.equals(_id)){
maps.put(index,reader);
index++;
System.out.print(index+".");
System.out.println(reader);
}
}
if(maps.isEmpty()){
System.out.println("未找到该读者!");
return;
}
System.out.println("请选择所要删除/修改的读者:");
int s=Integer.parseInt(sc.nextLine());
Reader reader=maps.get(s);//定位所要操作的读者对象
System.out.println("请选择所要进行的操作:");
System.out.println("1.删除");
System.out.println("2.修改");
String s1=sc.nextLine();
if(s1.equals("1")){
READER.remove(reader);
System.out.println("删除成功");
}else if(s1.equals("2")){
while (true) {
System.out.println("请选择所要修改的信息:");
System.out.println("0.修改完成");
System.out.println("1.学号");
System.out.println("2.姓名");
System.out.println("3.班级");
System.out.println("4.学院专业");
String s2=sc.nextLine();
switch (s2){
case "0":
return;
case "1":
System.out.println("请输入学号:");
reader.setId(sc.nextLine());
break;
case "2":
System.out.println("请输入姓名:");
reader.setName(sc.nextLine());
break;
case "3":
System.out.println("请输入班级:");
reader.setClassNum(sc.nextLine());
break;
case "4":
System.out.println("请输入学院专业:");
reader.setSchool(sc.nextLine());
default:
System.out.println("输入有误!请重新输入:");
}
}
}else{
System.out.println("输入有误!");
return;
}
}
(5) 读者信息新增
public void addReader(){
System.out.println("请输入学号:");
String _id=sc.nextLine();
System.out.println("请输入姓名:");
String _name=sc.nextLine();
System.out.println("请输入班级:");
String _class=sc.nextLine();
System.out.println("请输入学院专业:");
String _school=sc.nextLine();
READER.add(new Reader(_id,_name,_school,_class));
System.out.println("新增成功!");
}
四、RbInfor类
1.基本:
public class RbInfor implements Serializable {
private static SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
private static Scanner sc = new Scanner(System.in);
public static List<RbInfor> RBINFOR = new ArrayList<RbInfor>();
public static File file = new File("src\\Information\\rbInfor.txt");
private Reader m_reader;
private Book m_book;
private int number;
private String BorrowDate;
private String shouldReturnDate;//60天内归还
private String ReturnDate=null;
public RbInfor() {
}
public RbInfor(Reader reader, Book book,int number, String _borrowDate, String _shouldReturnDate) {
this.m_reader = reader;
this.m_book = book;
this.number=number;
this.BorrowDate=_borrowDate;
this.shouldReturnDate=_shouldReturnDate;
}
public int getNumber(){
return number;
}
public void setNumber(int n){
number=n;
}
@Override
public String toString() {
return "{" +
"m_reader=" + m_reader +
", m_book=" + m_book +
", number=" + number+
", BorrowDate='" + BorrowDate + '\'' +
", shouldReturnDate='" + shouldReturnDate + '\'' +
", ReturnDate='" + ReturnDate + '\'' +
'}';
}
}
2.RbInfor类方法
(1)借阅信息列表显示
public void showInfor() {
if(RBINFOR.size()==0){
System.out.println("暂无借阅信息!");
return;
}
int index = 1;
for (RbInfor rbInfor : RBINFOR) {
System.out.print(index+"."+"reader:");
System.out.println(rbInfor.m_reader.toString());
System.out.print("book:");
System.out.println(rbInfor.m_book.toString());
System.out.println("借阅数量"+rbInfor.getNumber()+"借阅日期:"+rbInfor.BorrowDate+ " 应还日期:"+rbInfor.shouldReturnDate);
if(rbInfor.ReturnDate==null){
System.out.println("尚未归还");
}else{
System.out.println("归还日期:"+rbInfor.ReturnDate);
}
index++;
}
}
(2)借阅信息新增
public void addRbInfor() throws ParseException {
//包括学号、姓名、书号、书名、借阅日期、应还日期、归还日期等。
//输入学号+书号,如果该书图书信息表中的存馆数量大于0,则可以借出,
//借出后修改图书信息表中的存馆数量,在图书借阅表添加该同学的借阅。
System.out.println("请输入读者学号:");
String reader_id=sc.nextLine();
for (Reader _reader : Reader.READER) {
if(_reader.getId().equals(reader_id)){
System.out.println("请输入所要借阅的图书号:");
String book_id=sc.nextLine();
for (Book _book : Book.BOOK) {
if(_book.getId().equals(book_id)){
//已找到学号对应的读者和书号对应的图书
System.out.println("请输入所要借阅的图书数量:");
int _number=Integer.parseInt(sc.nextLine());
if(_book.getNumber()>=_number){//可以借出
//借书日期
Date bdate=new Date();
String _BorrowDate=sdf.format(bdate);
//应还日期
Date sdate=new Date(bdate.getTime()+60L*24*60*60*1000);
String _shouldReturnDate=sdf.format(sdate);
RBINFOR.add(new RbInfor(_reader,_book,_number,_BorrowDate,_shouldReturnDate));
//存馆数量-num
_book.setNumber(_book.getNumber()-_number);
System.out.println("添加成功!");
return;
}else{
System.out.println("存馆数量不足!");
return;
}
}
}
System.out.println("书号有误!");
return;
}
}
System.out.println("学号有误!");
}
(3)图书归还
public void ReturnBook() {
//输入学号+书号,修改图书信息表中的存馆数量,在图书借阅表中记录该同学的归还时间。
System.out.println("请输入读者学号:");
Map<String,RbInfor> maps=new HashMap<>();//存放查到的学号+书号对应的借阅信息
String id = sc.nextLine();
int index=1;
for (RbInfor rbInfor : RBINFOR) {
if(rbInfor.m_reader.getId().equals(id)){
System.out.println("请输入图书号:");
id=sc.nextLine();
if(rbInfor.m_book.getId().equals(id)){
//展示信息
System.out.print(index+"."+"reader:");
System.out.println(rbInfor.m_reader.toString());
System.out.print("book:");
System.out.println(rbInfor.m_book.toString());
System.out.println("借阅数量"+rbInfor.getNumber()+"借阅日期:"+rbInfor.BorrowDate+ " 应还日期:"+rbInfor.shouldReturnDate);
if(rbInfor.ReturnDate==null){
System.out.println("尚未归还");
}else{
System.out.println("归还日期:"+rbInfor.ReturnDate);
}
maps.put(Integer.toString(index),rbInfor);
index++;
}
}
}
String select=null;
while (true) {
System.out.println("请选择要归还的图书:");
select = sc.nextLine();
int s=Integer.parseInt(select);//将字符串转为整数
if(s>maps.size()||s<=0){
System.out.println("输入有误,请重新输入");
}
break;
}
RbInfor rbInfor=maps.get(select);
rbInfor.ReturnDate=sdf.format(System.currentTimeMillis());
rbInfor.m_book.setNumber(rbInfor.m_book.getNumber()+rbInfor.getNumber());
System.out.println("归还成功!");
}
(4)借阅信息查找(按学号、书名、学院查找)
public void findRbInfor(){
while (true) {
System.out.println("1.根据读者学号查找");
System.out.println("2.根据图书书名查找");
System.out.println("3.根据读者专业班级查找");
System.out.println("请选择:");
String s=sc.nextLine();
switch (s){
case "1":
findInforByR_id();
return;
case "2":
findInforByB_name();
return;
case "3":
findInforByR_school();
return;
default:
System.out.println("输入有误,请重新输入!");
}
}
}
private void findInforByR_id() {
int index=1;
System.out.println("请输入相关学生学号:");
String _id=sc.nextLine();
for (RbInfor rbInfor : RBINFOR) {
if(rbInfor.m_reader.getId().equals(_id)){
System.out.print(index+".");
System.out.println(rbInfor);
index++;
}
}
if(index==1){
System.out.println("未查到相关信息");
}
}
private void findInforByB_name(){
int index=1;
System.out.println("请输入相关书名:");
String _name=sc.nextLine();
for (RbInfor rbInfor : RBINFOR) {
if(rbInfor.m_book.getBookName().equals(_name)){
System.out.print(index+".");
System.out.println(rbInfor);
index++;
}
}
if(index==1){
System.out.println("未查到相关信息");
}
}
private void findInforByR_school(){
int index=1;
System.out.println("请输入相关读者的专业班级:");
String _school=sc.nextLine();
for (RbInfor rbInfor : RBINFOR) {
if(rbInfor.m_reader.getSchool().equals(_school)){
System.out.print(index+".");
System.out.println(rbInfor);
index++;
}
}
if(index==1){
System.out.println("未查到相关信息");
}
}
五、m_IO类
//将集合中的数据输入文件中
public static <T> void OutPut(File f, List<T> list){
try ( ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(f))) {
oos.writeObject(list);
oos.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
//将文件中的数据读入集合并返回集合
public static <T> List<T> Input(File f) {
List<T> list = new ArrayList<>();
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(f))) {
list=(List<T>)ois.readObject();
} catch (EOFException e) {
return list;
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
return list;
}
六、LibrarySystem类
public class LibrarySystem {
public static Scanner sc = new Scanner(System.in);
//更新集合数据
static {
//将文件中的数据读入集合
Reader.READER=m_IO.Input(Reader.file);
Book.BOOK=m_IO.Input(Book.file);
RbInfor.RBINFOR=m_IO.Input(RbInfor.file);
}
/**
* 系统管理界面
*/
public static void main(String[] args) throws Exception {
while (true) {
showMenu();
System.out.println("请选择您要做的操作:");
String select = sc.nextLine();
int s;
switch (select){
case "0":
System.out.println("退出成功!");
return;
case "1"://图书信息添加
new Book().addBook();
break;
case "2"://图书信息查询
new Book().findBook();
break;
case "3"://图书信息排序
new Book().sortBook();
break;
case "4"://图书信息修改、删除
new Book().delete_GaiBook();
break;
case "5"://读者信息添加
new Reader().addReader();
break;
case "6"://读者信息查询
new Reader().findReader();
break;
case "7"://读者信息排序
new Reader().sortReader();
break;
case "8"://读者信息修改、删除
new Reader().delete_GaiReader();
break;
case "9"://借阅信息新增
new RbInfor().addRbInfor();
break;
case "10"://归还图书
new RbInfor().ReturnBook();
break;
case"11"://借阅信息查询
new RbInfor().findRbInfor();
break;
case"12"://借阅信息查询
new Book().showBooks();
break;
case"13"://借阅信息查询
new Reader().showReaders();
break;
case"14"://借阅信息查询
new RbInfor().showInfor();
break;
default:
System.out.println("输入有误,请重新输入!!!");
}
//结束程序时将集合中数据更新到文件中
flushList();
}
}
//更新集合信息
private static void flushList(){
//将集合数据更新到文件中
m_IO.OutPut(Reader.file,Reader.READER);
m_IO.OutPut(Book.file,Book.BOOK);
m_IO.OutPut(RbInfor.file,RbInfor.RBINFOR);
}
//菜单展示界面
private static void showMenu(){
System.out.println("============图书馆管理系统===================");
System.out.println("0:系统退出");
System.out.println("1:图书信息添加 2:图书信息查询 3:图书信息排序 4: 图书信息的修改、删除");
System.out.println("5:读者信息添加 6:读者信息查询 7:读者信息排序 8: 读者信息的修改、删除");
System.out.println("9:借阅信息新增 10:归还图书 11:借阅信息查询");
System.out.println("12.图书信息展示 13.读者信息展示 14.借阅信息展示");
}