這個系統完成簡單的增刪改查全查,借還圖書,退出系統功能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("感謝您的使用,再見!");
}
}