Java图书管理系统(全代码有详细注释 可做期末作业参考)-- 共11个功能

本文介绍了一个简单的图书管理系统的设计与实现,包括图书类、图书馆类、主控制台类和学生类等核心组件。系统支持图书的增删改查、借阅及归还等功能。

话不多说直接上代码

 

目录

一、Books(图书类)

二、Library(图书馆类)

三、LibrarySystem(主控制台)

四、Students(学生类)


 

 

一、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);
    }

}

 

 

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZTLJQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值