控制台图书管理系统

时间:2021-05-20 17:48:10

这个系统完成简单的增删改查全查,借还图书,退出系统功能

亮点:借还图书的设计(多加了一个字段—图书数量)、退出系统的控制。

废话不多说,符代码如下:

1.Books类—图书的bean

//图书类
public class Books {

 private String bid; //图书编号
 private String name;//书名
 private String author;//作者
 private String press;//出版社
 private int number;//数量
 
 
 Books(String bid,String name,String author,String press,int number) {
  this.bid = bid;
  this.author = author;
  this.name = name;
  this.press = press;
  this.number = number;
 }
 
 
 public String getBid() {
  return bid;
 }
 public void setBid(String bid) {
  this.bid = bid;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getAuthor() {
  return author;
 }
 public void setAuthor(String author) {
  this.author = author;
 }
 public String getPress() {
  return press;
 }
 public void setPress(String press) {
  this.press = press;
 }
 public int getNumber() {
  return number;
 }
 public void setNumber(int number) {
  this.number = number;
 }
 @Override
 public String toString() {
  return "[  图书id:   " + bid + ", 书名:  " + name + ", 作者:  " + author
    + ", 出版社:  " + press + ", 馆藏数量:  " + number + "]";
 }
 
}

2.Student类—学生bean

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

//学生类
public class Students {

 private String sid;//学号
 private String name;//姓名
 private Map<Books,Integer> lendBooks = new HashMap<Books,Integer>();
 //构造
 Students(String sid,String name) {
  this.sid = sid;
  this.name = name;
 }
 //get set方法
 public String getSid() {
  return sid;
 }
 public void setSid(String sid) {
  this.sid = sid;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public Map<Books, Integer> getLendBooks() {
  return lendBooks;
 }
 public void setLendBooks(Map<Books, Integer> lendBooks) {
  this.lendBooks = lendBooks;
 }
 
 
 //int num:要借的数量  Books b:要借那本书
 public void lendBooks(Books b,int num) {
  Set<Books> keys = this.getLendBooks().keySet();
  for(Books temp:keys) {
   //说明您曾经借过这本书
   if(temp.getBid().equals(b.getBid())) {
    this.getLendBooks().put(temp, this.getLendBooks().get(temp)+num);
       return;
   }
  }
  
  //说明你没有借过这本书
  this.lendBooks.put(b, num);
 }
 //展示所有借的图书
 public void showAllLendBooks() {
  Set<Books> set = this.getLendBooks().keySet();
  
  for(Books b: set) {
   System.out.println("图书编号:"+b.getBid()+" |书名:"+b.getName()+" 借书数量:"+this.getLendBooks().get(b));
  }
 }
 //查询——从借的书本里根据图书id查询
 public Books getBooksByBid(String bid) {
        Set<Books> set = this.getLendBooks().keySet();
  
  for(Books b: set) {
     if(b.getBid().equals(bid)) {
      return b;
     }
  }
  return null;
 }
 
 public int getBooksNumByBook(Books b) {
        Set<Books> set = this.getLendBooks().keySet();
  
  for(Books temp: set) {
     if(temp.getBid().equals(b.getBid())) {
      return this.getLendBooks().get(temp);
     }
  }
  return -1;
  
 }
 
 public void returnBooks(Books b,int num) {
  this.getLendBooks().put(b,this.getLendBooks().get(b)-num);
 }
 
 public void returnBooks(Books b) {
  this.getLendBooks().remove(b);
 }
 
}

3.Library类—负责增删改查及一些封装的操作方法

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

//图书馆类
public class Library {
   
 //图书所有图书的集合
 private Set<Books> books = new HashSet<Books>();
 //图书馆所有学生用户
 private Set<Students> stus = new HashSet<Students>();
 
 Library() {
  //初始化图书和学生
  initBooks();
  initStudents();
 }
 
 //初始化所有的图书
 private void initBooks() {
  Books b1 = new Books("b0001","三国","罗贯中","北京出版社",100);
  Books b2 = new Books("b0002","西游记","吴承恩","北京出版社",50);
  Books b3 = new Books("b0003","水浒","施耐庵","北京出版社",80);
  Books b4 = new Books("b0004","红楼梦","曹雪芹","北京出版社",200);
  //把图书添加到集合里
     books.add(b1);
     books.add(b2);
     books.add(b3);
     books.add(b4);
 }
 
 //初始化所有学生用户
 private void initStudents() {
  Students s1 = new Students("s0001","张三");//管理员
  Students s2 = new Students("s0002","李四");
  Students s3 = new Students("s0003","王五");
  Students s4 = new Students("s0004","赵六");
  //把学生添加到学生集合
  stus.add(s1);
  stus.add(s2);
  stus.add(s3);
  stus.add(s4);
 }
 
 public void addBooks(String input) {
  //不重复即可添加
  boolean result = checkBook(input);
  if(result == false) {
   //分解然后添加到现有集合里边
   String[] arrStr = input.split("-");
   Books tmp = new Books(arrStr[0], arrStr[1], arrStr[2], arrStr[3], Integer.parseInt(arrStr[4]));
   books.add(tmp);
   System.out.println("添加图书成功");
  } else {
   System.out.println("书库已有此数,不能重复添加!");
  }
  
 }
 
 public void removeBooks(String bid) {
  
  Books b = findById(bid);
  
  books.remove(b);
  System.out.println("删除图书成功");
 }
 //修改图书信息——需要图书id和修改后的图书信息
 public void modifyBooks(String bid,String input2) {
  //检查是否存在id和书名相同的图书
  boolean result = checkBook(input2);
  //如果没有
  if(result == false) {
   //则分解然后添加到现有集合里边
   String[] arrStr = input2.split("-");
   //遍历书库
   for (Books b : books) {
    if(b.getBid().equals(bid)) {
     b.setBid(arrStr[0]);
     b.setName(arrStr[1]);
     b.setAuthor(arrStr[2]);
     b.setPress(arrStr[3]);
     b.setName(arrStr[4]);
    }
   }
   System.out.println("修改图书信息成功");
  } else {
   System.out.println("书库已有此数,不能重复添加!");
  }
  
 }
 
 //单个查询图书——通过id返回一个图书对象
 public Books findById(String bid) {
  for(Books b:books) {
   if(b.getBid().equals(bid)) {
    return b;
   }
  }
  return null;
 }
 //全查图书
 public void queryAllBooks() {
  //遍历输出所有的图书
  for(Books b:books) {
   System.out.println(b);
  }
 }
 //查询图书数量——馆存数
 public int queryBooksNumByBook(Books b) {
  int num = -1;
  for(Books temp:books) {
   if(temp.getBid().equals(b.getBid())) {
    num = temp.getNumber();
    return num;
   }
  }
  return num;
 }
 //通过学号查学生——检验学生是否存在于集合中
 public Students queryStudentsBySid(String sid) {
  //遍历学生集合
  for(Students s:stus) {
   if(s.getSid().equals(sid)) {
    return s;
   }
  }
  return null;
 }
//这个还书借书,我是参考网上的例子,经过多次修改才弄好的。
 //借书
 public void lendBooks(Books b,Students s) {
  Scanner in = new Scanner(System.in);
  int num ;
  System.out.println("请输入借书的数量:");
  num = in.nextInt();
  if(queryBooksNumByBook(b)!=-1) {
   if(num>queryBooksNumByBook(b)) {
    System.out.println("借书数量大于馆藏数量,借书失败!");
    return;
   } else {
    //找到要借的图书
    Books temp = findById(b.getBid());
    //从集合中移走
    books.remove(temp);
    //把数量减一
    temp.setNumber(temp.getNumber()-num);
    //刷新集合中的数据
    books.add(temp);
    //添加到放书的书包里
    s.lendBooks(b, num);
    System.out.println("借书成功!");
    return;
   }
  }
 }

 //还书
 public void returnBooks(Books b,Students s) {
  Scanner in = new Scanner(System.in);
  int num ;
  System.out.println("请输入还书的数量:");
  num = in.nextInt();
  if(s.getBooksNumByBook(b)!=-1) {
      if(num > s.getBooksNumByBook(b)) {
         System.out.println("还书数量大于借书数量,还书失败!");
         return;
      } else if(num==s.getBooksNumByBook(b)) {
       Books temp = findById(b.getBid());
    books.remove(temp);
    temp.setNumber(temp.getNumber()+num);
    books.add(temp);
    //还一本
    s.returnBooks(b);
    System.out.println("还书成功!");
      } else {
       Books temp = findById(b.getBid());
    books.remove(temp);
    temp.setNumber(temp.getNumber()+num);
    books.add(temp);
    //还多本
    s.returnBooks(b, num);
    System.out.println("还书成功!");
      }
  }
 }
 //校验输入图书和已有的图书是否相同
 public boolean checkBook(String s) {
  //比较书号和书名
  boolean flag = false;//默认为不相同——可以增加此图书
  String[] arrStr = s.split("-");
  for (Books tmp : books) {
   //比较如果有其中一个相同
   if(tmp.getBid().equals(arrStr[0]) || tmp.getName().equals(arrStr[1])) {
    //设置flag为true
    flag = true;
   }
  }
 
  return flag;
  
 }
 
}

4.LibrarySystem类,负责登录—程序的流程控制

import java.util.Scanner;

import javax.print.attribute.standard.Finishings;


public class LibrarySystem {
 
 private static Scanner in = new Scanner(System.in);
 private static int choice ;//用户的选择
 
 //显示主菜单的方法
 public static void menu() {
  System.out.println("**********西安文理学院图书馆管理系统*************");
  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.还书");
  System.out.println("8.查询借书情况");
  System.out.println("9.退出系统");
  System.out.println("*****************************************");
     System.out.println("请选择(1-9):");
     choice = in.nextInt();
 }
 
 
 public static void main(String[] args) {
  Library lib = new Library();
  String bid ;//图书的编号
  String sid;//学生学号
  Students s=null; //学生对象
  LibrarySystem.menu();
  //用while循环来控制程序跳转流程
  while(choice!=9) {
   switch(choice) {
   case 1://增加图书
    //判断学生
    System.out.println("请输入学生学号");
    
    sid = in.next();
    //判断学号是否存在
    if(lib.queryStudentsBySid(sid) != null) {
     System.out.println("请输入图书的信息:根据提示(b0002-西游记-吴承恩-北京出版社-50)");
     String input = in.next();
     lib.addBooks(input);
    } else {
     System.out.println("此生不存在!");
    }
   
    break;
   case 2://删除图书
    System.out.println("请输入学生学号");
    
    sid = in.next();
    //判断学号是否存在
    if(lib.queryStudentsBySid(sid) != null) {
     //封装成学生,好进行删除操作
     s = lib.queryStudentsBySid(sid);
     System.out.println("请输入要删除的图书id");
     bid = in.next();
     if(lib.findById(bid) != null) {
      //对应要删除的图书
      Books b = lib.findById(bid);
      //要删除的图书信息展示
      System.out.println("您要删除的图书信息显示如下:");
      System.out.println(b);
      //删除图书方法
      lib.removeBooks(bid);
     } else {
      System.out.println("要删除的图书不存在!");
     }
     
    } else {
     System.out.println("不存在该生");
    }
    break;
   
   case 3://修改图书
    //判断学生
    System.out.println("请输入学生学号");
    
    sid = in.next();
    //判断学号是否存在
    if(lib.queryStudentsBySid(sid) != null) {
     //单个查询图书信息
     System.out.println("请输入要修改的图书id");
     bid = in.next();
     Books b = lib.findById(bid);
     System.out.println("图书信息如下");
     System.out.println(b);
     System.out.println("请输入修改后的图书信息:根据提示(b0002-西游记-吴承恩-北京出版社-50)");
     
     String input = in.next();
     lib.modifyBooks(bid, input);
    } else {
     System.out.println("这个学生不存在!");
    }
   
    break;
   
   case 4:
       //按图书编号查找图书
       System.out.println("请输入图书的编号:");
       bid = in.next();
       //查询有无此书
       if(lib.findById(bid) != null) {
        //封装此书
        Books b = lib.findById(bid);
        //输出书的内容——自动调用toString方法
        System.out.println(b);
       } else {
        System.out.println("图书不存在!");
       }
       break;
  
      case 5:
       //查询所有图书
       lib.queryAllBooks();
       break;
     
      case 6://借书
       System.out.println("请输入学生的学号:");
       sid = in.next();
       //判断学生存在——权限
       if(lib.queryStudentsBySid(sid)!=null) {
        s = lib.queryStudentsBySid(sid);
        System.out.println("请输入图书编号:");
        bid = in.next();
        if(lib.findById(bid)!=null) {
           Books b = lib.findById(bid);
           System.out.println(b);
           //借书开始
           lib.lendBooks(b, s);
        } else {
         System.out.println("图书不存在!");
        }
       }
       else {
        System.out.println("学生不存在!");
       }
       break;
     
     
      case 7://还书
       System.out.println("请输入学生的学号:");
       sid = in.next();
       if(lib.queryStudentsBySid(sid)!=null) {
        s = lib.queryStudentsBySid(sid);
        
        s.showAllLendBooks();
        System.out.println("请输入图书编号:");
        bid = in.next();
        //借的图书集里有此图书
        if(s.getBooksByBid(bid)!=null) {
         //得到对应id的图书
         Books b = s.getBooksByBid(bid);
         //归还图书
         lib.returnBooks(b, s);
        } else {
         System.out.println("您没借过该书!");
        }
       }
       else {
        System.out.println("学生不存在!");
       }
       break;
     
      case 8://查询借书情况
       System.out.println("请输入学生学号:");
       sid = in.next();
       s = lib.queryStudentsBySid(sid);
       if(s!=null) {
        //展示所有已借图书
        s.showAllLendBooks();
       } else {
        
        System.out.println("学生不存在!");
       }
       break;
      
   }
   //因为要重复显示菜单,这里采用递归调用的方法
   LibrarySystem.menu();
  }
  
  System.out.println("感谢您的使用,再见!");
 
 }

}