Java图书管理系统(第二次修正)

本文介绍了一个基于Java实现的图书管理系统的设计与实现过程。系统包括图书查询、读者登录、管理员操作等功能,并实现了图书及读者信息的序列化存储。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值