话不多说直接上代码
目录
一、Books(图书类)
//图书类
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
+ "]";
}}
二、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 addUser(String s) {
// 不重复即可添加
boolean result = checkUser(s);
if (result == false) {
// 分解然后添加到现有集合里边
String[] arrStr = s.split("-");
Students s1 = new Students(arrStr[0],arrStr[1]);
stus.add(s1);
System.out.println("添加用户成功");
} else {
System.out.println("已有此会员,不能重复添加!");
}
/*String[] arrStr = s.split("-");
for (Students stu2 : stus) {
if (stu2.getSid().equals(arrStr[0]) || stu2.getName().equals(arrStr[1])) {
System.out.println(stu2.getSid()+"-"+stu2.getName()+"用户已存在");
}else {
Students s1 = new Students(arrStr[0],arrStr[1]);
System.out.println(arrStr[0]+"-"+arrStr[1]+"用户添加成功");
}
}*/
}
//查询会员
public Students findBySId(String bid) {
for (Students s : stus) {
if (s.getSid().equals(bid)) {
return s;
}
}
return null;
}
//删除用户
public void removeUser(String bid) {Students b = findBySId(bid);
stus.remove(b);
System.out.println("删除会员成功");
}
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;
}
//校验输入会员和已有的会员是否相同
public boolean checkUser(String s) {
// 比较书号和书名
boolean flag = false;// 默认为不相同——可以增加此图书
String[] arrStr = s.split("-");
for (Students tmp : stus) {
// 比较如果有其中一个相同
if (tmp.getSid().equals(arrStr[0]) || tmp.getName().equals(arrStr[1])) {
// 设置flag为true
flag = true;
}
}return flag;
}
}
三、LibrarySystem(主控制台)
import java.util.Scanner;
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("\t1.增加图书\t\t2.删除图书");
System.out.println("\t3.修改图书\t\t4.单个查询图书");
System.out.println("\t5.查询所有图书 \t6.借书");
// System.out.println("\t\t7.还书\t\t8.查询借书情况");
System.out.println("\t7.还书 \t \t8.查询借书情况");
System.out.println("\t9.增加会员\t\t10.查询会员");
System.out.println("\t11.退出系统");
/*
* 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-11):");
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 < 11) {
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;
case 9:// 增加会员
System.out.println("请输入会员的信息:根据提示(s0001-小张)");
sid = in.next();
lib.addUser(sid);
break;
case 10:// 查询会员
System.out.println("请输入会员的编号:");
sid = in.next();
s = lib.queryStudentsBySid(sid);
if (s != null) {
System.out.println("[会员ID:"+s.getSid()+",会员名称:"+s.getName()+"]");
} else {System.out.println("会员不存在!");
}
break;
}
// 因为要重复显示菜单,这里采用递归调用的方法
LibrarySystem.menu();
}System.out.println("感谢您的使用,再见!");
}
}
四、Students(学生类)
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);
}}
本文介绍了一个简单的图书管理系统的设计与实现,包括图书类、图书馆类、主控制台类和学生类等核心组件。系统支持图书的增删改查、借阅及归还等功能。

被折叠的 条评论
为什么被折叠?



