控制檯圖書管理系統

這個系統完成簡單的增刪改查全查,借還圖書,退出系統功能java

亮點:借還圖書的設計(多加了一個字段—圖書數量)、退出系統的控制。ide

廢話很少說,符代碼以下:this

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類—學生beanrem

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

//學生類
public class Students {input

 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);
 }
 
}it

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("感謝您的使用,再見!");
 
 }

}

相關文章
相關標籤/搜索