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

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

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本系统主要实现对图书馆图书借阅信息的管理,主要管理读者信息、图书信息、借阅与归还信息、系统用户的信息。 (1)读者信息管理:能够对读者的基本信息进行管理,包括新增读者,如学校新来一名教师,想要借书,就必须先添加读者信息读者信息的修改,如学生转到别的专业,此时要修改学生的基本信息;删除读者信息,比如某个学生中途退学了,可以将其信息删除。查询读者信息,比如有同学拾到了一张借阅卡,卡上有学生的编号,通过此号来查询学生的联系电话,从而可以找到学生。 (2)图书信息管理:能够对图书的基本信息进行管理,包括新增图书,学校每年会购进新书,此时需要将新书的信息录入系统中;图书信息的修改,如学生借书后将图书丢失,此时需要修改图书的总数量,使总数减1;删除图书,学校在购进新书的同时,每年会对过期的图书进行清理,不再提供借阅,此时就需要将这些图书的信息从系统中删除。查询图书的信息,比如要查看有哪些是Java相关的书籍或者指定ISBN号的图书等。 (3)图书借阅信息管理:能够对图书的借阅信息进行记录,包括读者信息、图书信息、借阅时间等信息。 (4)图书归还信息管理:能够对图书的借阅信息进行记录,包括读者信息、图书信息、归还时间、是否超期、罚金等信息。 (5)系统用户信息管理:能够对系统用户的信息进行管理,包括增加新的系统操作用户,对当前系统用户的密码进行修改,以及删除某一用户。 --------------------- 作者:forever_kirito 来源:CSDN 原文:https://blog.csdn.net/forever_kirito/article/details/79111987 版权声明:本文为博主原创文章,转载请附上博文链接!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值