Java图书管理系统(新手上路,欢迎提建议)
1 需求分析
1.1 运行程序显示主界面
1.2 图书查询
不需要登录,可以查询图书
输入图书编号精确查询,如果有就把书的信息显示出来,没有就提示没有的信息
按图书名称查询, 输入书名, 把包含该书名的相关图书都显示出来
1.3 读者登录
输入读者证编号, 密码登录, 登录成功后, 读者可以查看个人的信息(不显示密码), 修改个人信息, 查看当前借阅图书的信息, 修改密码, 借书, 还书
1.4 管理员操作
系统初始化一个管理员, 管理员登录后, 修改密码; 添加读者就是给读者办理借书证, 删除读者信息, 查询读者信息(包括读者密码) , 添加图书就是新书上架, 删除图书...
最后把读者信息, 图书信息, 借阅记录都序列化到文件中
2 面向对象设计
1. 图书类:属性(实例变量):编号,名称,作者,价格(根据实体类规范编写)
2. 读者类:属性(实例变量):姓名,读者证编号,读者证密码,借阅的书
3. 图书管理类:方法:按图书编号查询,按图书名称查询
4. 读者管理类:方法:登陆验证,查看个人信息,查看借阅信息,修改密码,借书,还书
5. 管理员管理类:方法:登陆验证,添加读者信息,删除读者信息,查询读者信息,添加图6.书信息,删除图书信息
7. 视图管理类
8. 测试类
3 面向对象编程
Book.java
package bookmanager;
import java.io.Serializable;
import java.util.Objects;
/**
* 定义图书类
* jian
* 2020/11/21 0021
*/
public class Books implements Serializable {
private static final long serialVersionUID = -929670940268505000L;
private String bookId;//图书编号
private String bookName;//图书名称
private String bookAuthor;//图书作者
private double bookPrice;//图书价格
public String getBookId() {
return bookId;
}
public Books setBookId(String bookId) {
this.bookId = bookId;
return this;
}
public String getBookName() {
return bookName;
}
public Books setBookName(String bookName) {
this.bookName = bookName;
return this;
}
public String getBookAuthor() {
return bookAuthor;
}
public Books setBookAuthor(String bookAuthor) {
this.bookAuthor = bookAuthor;
return this;
}
public double getBookPrice() {
return bookPrice;
}
public Books setBookPrice(double bookPrice) {
this.bookPrice = bookPrice;
return this;
}
@Override
public String toString() {
return "图书信息:" +
"图书编号:" + bookId + '\'' +
", 图书名称:" + bookName + '\'' +
", author = " + bookAuthor + '\'' +
", price = " + bookPrice ;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Books books = (Books) o;
return Double.compare(books.bookPrice, bookPrice) == 0 &&
Objects.equals(bookId, books.bookId) &&
Objects.equals(bookName, books.bookName) &&
Objects.equals(bookAuthor, books.bookAuthor);
}
@Override
public int hashCode() {
return Objects.hash(bookId, bookName, bookAuthor, bookPrice);
}
}
Reader.java
package bookmanager;
import java.io.Serializable;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
/**
* 定义读者类
* jian
* 2020/11/21 0021
*/
public class Reader implements Serializable {
private static final long serialVersionUID = 2968219903370960241L;
//读者姓名
private String readerName;
//存储读者证编号
private String readerId;
//存储读者证密码
private String readerPassword;
//定义List集合存储借阅的书
private List<Books> readerBookList = new LinkedList<>();
public String getReaderName() {
return readerName;
}
public Reader setReaderName(String readerName) {
this.readerName = readerName;
return this;
}
public String getReaderId() {
return readerId;
}
public Reader setReaderId(String readerId) {
this.readerId = readerId;
return this;
}
public String getReaderPassword() {
return readerPassword;
}
public Reader setReaderPassword(String readerPassword) {
this.readerPassword = readerPassword;
return this;
}
public List<Books> getReaderBookList() {
return readerBookList;
}
public Reader setReaderBookList(List<Books> readerBookList) {
this.readerBookList = readerBookList;
return this;
}
@Override
public String toString() {
return "读者信息:" +
"读者姓名:" + readerName + '\'' +
", 读者证编号:" + readerId + '\'' +
", 读者证密码:" + readerPassword ;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Reader reader = (Reader) o;
return Objects.equals(readerName, reader.readerName) &&
Objects.equals(readerId, reader.readerId) &&
Objects.equals(readerPassword, reader.readerPassword) &&
Objects.equals(readerBookList, reader.readerBookList);
}
@Override
public int hashCode() {
return Objects.hash(readerName, readerId, readerPassword, readerBookList);
}
}
BookManager.java
package bookmanager;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
/**
* 定义图书管理类
* jian
* 2020/11/21 0021
*/
public class BooksManager {
// 定义List存储图书
private List<Books> booksList = new ArrayList<>();
BooksManager(){
booksList.add(new Books().setBookId("book001").setBookName("java入门").setBookAuthor("张三").setBookPrice(40));
booksList.add(new Books().setBookId("book002").setBookName("java提高").setBookAuthor("李四").setBookPrice(30));
booksList.add(new Books().setBookId("book003").setBookName("java入门").setBookAuthor("王五").setBookPrice(20));
}
//序列化
public void saveBooks() {
try {
ObjectOutputStream bookOos = new ObjectOutputStream(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\book.txt"));
for (Books book : booksList) {
bookOos.writeObject(book);
}
} catch (IOException e) {
e.printStackTrace();
}
}
//返回所有图书
public List<Books> allBooks(){
return booksList;
}
//按图书编号查询图书
public Books queryBookById(String id) {
for (Books book : booksList) {
if (id.equals(book.getBookId())) {
return book;
}
}
return null;
}
//按图书名称查询
public List<Books> queryBookByName(String name) {
List<Books> list = new ArrayList<>();
for (Books book : booksList) {
if (book.getBookName().contains(name)) {
list.add(book);
}
}
return list;
}
}
ReaderManager.java
package bookmanager;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* 定义读者管理类
* jian
* 2020/11/21 0021
*/
public class ReaderManager {
// 定义List存储读者
private List<Reader> readerList = new ArrayList<>();
ReaderManager() {
readerList.add(new Reader().setReaderName("张三").setReaderId("reader001").setReaderPassword("123456"));
}
//返回所有读者
public List<Reader> allReaders(){
return readerList;
}
//序列化
public void saveReader() {
try {
ObjectOutputStream readerOos = new ObjectOutputStream(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\reader.txt"));
ObjectOutputStream readerBookOos = new ObjectOutputStream(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\readerBook.txt"));
for (Reader reader : readerList) {
readerOos.writeObject(reader);
readerBookOos.writeObject(reader.getReaderBookList());
}
} catch (IOException e) {
e.printStackTrace();
}
}
//登陆验证
public Reader login(String id, String password) {
for (Reader reader : readerList) {
if (id.equals(reader.getReaderId()) && password.equals(reader.getReaderPassword())) {
return reader;
}
}
return null;
}
//查看个人信息
public void seeInformation(Reader reader) {
System.out.println( "个人信息:" + "\n姓名:" + reader.getReaderName() + "\n读者证编号:" + reader.getReaderId());
}
//修改密码
public void changePassword(Reader reader, String password) {
reader.setReaderPassword(password);
}
//借书
public boolean borrowBooks(Reader reader, String id, List<Books> booksList) {
for (Iterator<Books> iterator = booksList.iterator(); iterator.hasNext(); ) {
Books book = iterator.next();
if (id.equals(book.getBookId())) {
iterator.remove();
reader.getReaderBookList().add(book);
return true;
}
}
return false;
}
//还书
public boolean returnBook(Reader reader, String id, List<Books> bookList) {
for (Iterator<Books> iterator = reader.getReaderBookList().iterator(); iterator.hasNext(); ) {
Books book = iterator.next();
if (id.equals(book.getBookId())) {
iterator.remove();
bookList.add(book);
return true;
}
}
return false;
}
//查看借阅信息
public List<Books> lookBorrow(Reader reader) {
return reader.getReaderBookList();
}
}
AdminManager.java
package bookmanager;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.*;
/**
* 定义管理员类
* jian
* 2020/11/21 0021
*/
public class AdminManager {
// 定义Map存储管理员账号和密码
private Map<String, String> map = new HashMap<>();
AdminManager() {
map.put("admin", "666");
}
//序列化
public void saveAdmin() {
try {
ObjectOutputStream adminOos = new ObjectOutputStream(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\admin.txt"));
adminOos.writeObject(map);
} catch (IOException e) {
e.printStackTrace();
}
}
//登陆验证
public boolean login(String username, String password) {
if (password.equals(map.get(username))) {
return true;
}
return false;
}
//添加读者信息
public void addReader(Reader reader,List<Reader> readerList) {
readerList.add(reader);
}
//删除读者信息
public boolean deleteReader(String id,List<Reader> readerList) {
for (Iterator<Reader> iterator = readerList.iterator(); iterator.hasNext(); ) {
Reader reader = iterator.next();
if (id.equals(reader.getReaderId())) {
iterator.remove();
return true;
}
}
return false;
}
//查询读者信息
public Reader seeReader(String id,List<Reader> readerList) {
for (Reader reader : readerList) {
if (id.equals(reader.getReaderId())) {
return reader;
}
}
return null;
}
//添加图书信息
public void addBook(Books book,List<Books> booksList) {
booksList.add(book);
}
//删除图书信息
public boolean deleteBook(String id,List<Books> booksList) {
for (Iterator<Books> iterator = booksList.iterator(); iterator.hasNext(); ) {
Books book = iterator.next();
if (id.equals(book.getBookId())) {
iterator.remove();
return true;
}
}
return false;
}
}
ViewManager.java
package bookmanager;
import java.util.List;
import java.util.Scanner;
/**
* 定义视图类
* jian
* 2020/11/21 0021
*/
public class ViewManager {
private Scanner input = new Scanner(System.in);
private AdminManager adminManager = new AdminManager();
private ReaderManager readerManager = new ReaderManager();
private BooksManager booksManager = new BooksManager();
//主视图
public void showMainView() {
while (true) {
//运行程序显示主界面
System.out.println("=================图书管理系统=================");
System.out.println("1 图书查询");
System.out.println("2 读者登陆");
System.out.println("3 管理员登陆");
System.out.println("0 退出");
System.out.println("请输入你的操作");
int option1 = input.nextInt();
switch (option1) {
case 1:
//图书查询
queryBookView();
break;
case 2:
//读者登陆
readerLoginView();
break;
case 3:
//管理员登陆
adminLoginView();
break;
case 0:
//对象序列化
booksManager.saveBooks();
readerManager.saveReader();
adminManager.saveAdmin();
return;
default:
System.out.println("选择操作有误");
}
}
}
//管理员登陆视图
public void adminLoginView() {
System.out.println("-------------管理员登录-------------");
System.out.println("请输入用户名");
String username = input.next();
System.out.println("请输入密码");
String password = input.next();
if(adminManager.login(username, password)){
adminHandleView();
}else {
System.out.println("用户名或密码错误,登陆失败");
}
}
//读者登陆视图
public void readerLoginView() {
System.out.println("-------------读者登录-------------");
System.out.println("请输入读者编号");
String id = input.next();
System.out.println("请输入密码");
String password = input.next();
Reader reader = readerManager.login(id, password);
if (reader == null){
System.out.println("编号或密码错误,登陆失败");
}else {
readerHandleView(reader);
}
}
//管理员操作界面
public void adminHandleView() {
while (true) {
//管理员操作界面
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("请输入你的选择");
int option = input.nextInt();
switch (option) {
case 1:
addReaderView();
break;
case 2:
deleteReaderView();
break;
case 3:
searchReaderView();
break;
case 4:
addBooksView();
break;
case 5:
deleteBooksView();
break;
case 6:
return;
default:
System.out.println("选择有误");
}
}
}
//删除图书
public void deleteBooksView() {
System.out.println("请输入要删除的图书编号");
String id = input.next();
if (adminManager.deleteBook(id,booksManager.allBooks())){
System.out.println("删除成功");
}else {
System.out.println("不存在编号为" + id + "的图书");
}
}
//添加图书
public void addBooksView() {
System.out.println("----------------添加图书----------------");
System.out.println("请输入编号");
String id = input.next();
System.out.println("请输入名称");
String name = input.next();
System.out.println("请输入作者");
String author = input.next();
System.out.println("请输入价格");
double price = input.nextDouble();
adminManager.addBook(new Books().setBookId(id).setBookName(name).setBookAuthor(author).setBookPrice(price),booksManager.allBooks());
System.out.println("添加成功");
}
//查询读者信息
public void searchReaderView() {
System.out.println("请输入要查询的读者证编号");
String id = input.next();
Reader reader = adminManager.seeReader(id,readerManager.allReaders());
if (reader == null){
System.out.println("不存在编号为" + id + "的读者");
}else {
System.out.println(reader);
System.out.println("借阅信息:");
List<Books> list = reader.getReaderBookList();
for (Books books : list) {
System.out.println(books);
}
}
}
//删除读者信息
public void deleteReaderView() {
System.out.println("请输入删除的读者证编号");
String id = input.next();
if(adminManager.deleteReader(id,readerManager.allReaders())){
System.out.println("删除成功");
}else {
System.out.println("不存在编号为" + id + "的读者");
}
}
//添加读者信息
public void addReaderView() {
System.out.println("请输入添加的读者姓名");
String name = input.next();
System.out.println("请输入读者证编号");
String id = input.next();
System.out.println("请输入读者证密码");
String password = input.next();
adminManager.addReader(new Reader().setReaderName(name).setReaderId(id).setReaderPassword(password),readerManager.allReaders());
System.out.println("添加成功");
}
//读者操作界面
public void readerHandleView(Reader reader) {
while (true) {
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("请输入你的操作");
int option = input.nextInt();
switch (option) {
case 1:
//查看个人信息
readerManager.seeInformation(reader);
break;
case 2:
//查看借阅信息
lookBorrowView(reader);
break;
case 3:
//修改密码
updateReaderPasswordView(reader);
break;
case 4:
//借书
borrowBooksView(reader);
break;
case 5:
//还书
returnBooksView(reader);
break;
case 6:
//退出
return;
default:
System.out.println("选择有误");
}
}
}
//还书
public void returnBooksView(Reader reader) {
System.out.println("请输入要还的书的编号");
String id = input.next();
List<Books> list = booksManager.allBooks();
boolean isReturnBook = readerManager.returnBook(reader, id, list);
if (isReturnBook){
System.out.println("还书成功");
}else {
System.out.println("不存在编号为" + id + "的图书");
}
}
//借书
public void borrowBooksView(Reader reader) {
System.out.println("请输入要借阅书的编号");
String id = input.next();
List<Books> list = booksManager.allBooks();
boolean isBorrowBooks = readerManager.borrowBooks(reader, id, list);
if (isBorrowBooks){
System.out.println("借阅成功");
}else {
System.out.println("不存在编号为" + id + "的图书");
}
}
//修改密码
public void updateReaderPasswordView(Reader reader) {
System.out.println("请输入新密码");
String newPassword = input.next();
readerManager.changePassword(reader,newPassword);
System.out.println("修改成功");
}
//查看借阅信息
public void lookBorrowView(Reader reader) {
List<Books> list = readerManager.lookBorrow(reader);
if (list == null){
System.out.println("没有借阅图书记录");
}else {
for (Books books : list) {
System.out.println(books);
}
}
}
//图书查询
public void queryBookView() {
System.out.println("-------------图书查询-------------");
System.out.println("1 按图书编号查询 2 按图书名称查询");
int option = input.nextInt();
switch (option) {
case 1:
queryBooksByIdView();
break;
case 2:
queryBooksByNameView();
break;
default:
System.out.println("选择有误");
}
}
//根据名称显示图书
public void queryBooksByNameView() {
System.out.println("请输入图书名称");
String name = input.next();
List<Books> list = booksManager.queryBookByName(name);
for (Books books : list) {
System.out.println(books);
}
}
//根据编号显示图书
public void queryBooksByIdView() {
System.out.println("请输入图书编号");
String id = input.next();
Books book = booksManager.queryBookById(id);
if (book == null){
System.out.println("不存在编号为:" + id + "的图书");
}else {
System.out.println(book);
}
}
}
Test.java
package bookmanager;
/**
* 编写测试类
* jian
* 2020/11/21 0021
*/
public class Test {
public static void main(String[] args) {
ViewManager viewManager = new ViewManager();
viewManager.showMainView();
}
}