这个系统完成简单的增删改查全查,借还图书,退出系统功能
亮点:借还图书的设计(多加了一个字段—图书数量)、退出系统的控制。
废话不多说,符代码如下:
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("感谢您的使用,再见!");
}
}