用Java实现简易的图书管理系统(超详细)

这篇具有很好参考价值的文章主要介绍了用Java实现简易的图书管理系统(超详细)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.设计背景

2.设计思路

3.模块展示及代码演示

3.1 Book类的实现

3.2 BookList类的实现(书架)

3.3 异常类的实现(OperationException)

3.4 用户类的实现

3.5 操作接口的实现(定义规范)

3.6 操作类的具体实现

3.6.1 增加操作

3.6.2 查找操作

3.6.3 删除操作

3.6.4 显示操作

3.6.5 借书操作

3.6.6 还书操作

3.6.7 退出功能

3.7 管理员类的实现

3.8 读者类的实现

3.9 Test类

4. 整体效果展示


1.设计背景

图书馆作为每个大学或者城市必不可少的部分,其存放的海量书籍与文献使得其管理显得尤为困难,此时图书管理系统就起到了一个重大的作用。本次就将使用java语言中的异常处理,多态,继承,封装,接口等知识点,来综合性的设计与实现出一个简易的图书管理系统。

2.设计思路

①首先我们需要区分出管理员与普通用户,不同的用户所展示的界面不同,利用继承和多态可以实现这一思路;

②我们可以将各个操作都封装起来,单独的设计成一个类,且这些操作都需要遵循一定的规范,而接口实际上就是定义了一种规范,这里可以使用接口来进行实现。

③我们需要将书的属性进行封装,同时设立一个书架类,即存放的是书的数组。

④我们需要实现管理员能够添加书籍,查找书籍,删除书籍以及显示书籍;

⑤读者能够实现查找书籍,借阅书籍以及归还书籍。

3.模块展示及代码演示

3.1 Book类的实现

我们这里书籍的属性有书名、作者、价格、类型以及是否被借出,我们结合封装性,将属性设置为private权限,并提供相应的get方法和set方法,空参构造器,以及一个不包含是否被借出的构造器(布尔值的默认类型就是false,可以不进行初始化)并需要提供对应的toString()方法的重写(具体重写情况看展示效果),代码实现如下:

public class Book {
    private String name;
    private String author;
    private int price;
    private String type;
    private boolean isBorrowed; //是否被借出
    //构造器
    public Book(){

    }
    public Book(String name,String author,int price,String type){
        this.author=author;
        this.name=name;
        this.price=price;
        this.type=type;
    }

    //get、set方法
    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 int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public boolean isBorrowed() {
        return isBorrowed;
    }

    public void setBorrowed(boolean borrowed) {
        isBorrowed = borrowed;
    }
@Override
//重写toString()
    public String toString() {
        return "Book{" +
                "书名:'" + name + '\'' +
                ", 作者:'" + author + '\'' +
                ", 价格:" + price +
                ", 类型:'" + type + '\'' +
                ", 是否借出:" + isBorrowed +
                '}';
    }
}

3.2 BookList类的实现(书架)

BookList类我们主要提供一个ArrayList的泛型数组来进行Book的存储,便于后面对书籍的操作。

BookList类我们提供一个私有的ArrayList的泛型数组,同时在空参构造器中对其初始化,先加入几本书籍,并提供对应的get和set方法,具体代码实现如下:

import java.util.ArrayList;

public class BookList {
    private ArrayList<Book> books=new ArrayList<Book>();
    public BookList() {
        books.add(new Book("三国演义","罗贯中",19,"小说"));
        books.add(new Book("西游记","吴承恩",29,"小说"));
        books.add(new Book("红楼梦","曹雪芹",25,"小说"));
    }
    public Book getBook(int pos){ //获取某个位置上的书籍
        return books.get(pos);
    }
    public void setBook(int pos,Book book){ //设置某个位置上的书籍
        books.set(pos,book);
    }
    public ArrayList<Book> getBooks(){  //获取书架,便于后面的Operation的使用
        return books;
    }
}

3.3 异常类的实现(OperationException)

异常的出现一般出现在操作中,我们可以通过自定义异常类的方式来处理不同异常情况的发生(也可以不进行定义),我们的自定义也提供一个空参构造器,和一个有参构造器用来打印异常信息(自定义异常类需要继承Exception类),代码实现如下:

public class OperationException extends Exception{
    static final long serialVersionUID=-33875169931L;
    //空参构造器
    public OperationException(){

    }
    public OperationException(String message){
        super(message); //Exception类中存在String参数的构造器和message
    }
}

3.4 用户类的实现

用户类中,我们需要定义用户的名字,同时定义一个抽象方法menu()来给子类管理员类和读者类重写(二者的目录不同),同时要提供set和get方法,并提供抽象Operation方法给子类重写使用(子类的目录不同,执行的操作就会存在差异),代码实现如下:

public abstract class User {
    private String name;
    public User(String name){
        this.name=name;
    }
    public User(){
    }

    public abstract void menu();

    public String getName(){
        return name;
    }

    public void setName(String name){
        this.name=name;
    }
    public abstract void Operation(int n, BookList bookList)throws OperationException;
//子类的Operation会抛出异常来处理异常,父类也需要抛出异常,
//因为父类抛出异常大小要大于子类重写方法抛出的异常
}

3.5 操作接口的实现(定义规范)

我们需要执行的操作有增加,删除,显示,查找等,他们都需要遵循一定的规范,而这个规范就由接口来实现,在增删查改等操作中,他们的主要方式就是工作,即work(),故接口中提供对应的work()方法供接口的实现类,即各种操作进行重写,代码实现如下:

public interface IOperation{
    void work(BookList bookList)throws Exception;
}

3.6 操作类的具体实现

3.6.1 增加操作

我们需要将操作类实现操作接口,同时为重写的方法提供书架类,便于进行操作。代码实现如下:

添加操作并没有什么异常,在简易图书系统中不需要对书籍的信息进行检验。

import java.util.Scanner;
public class AddOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("新增图书!");
        Scanner scan=new Scanner(System.in);
        System.out.println("请输入要新增图书的名字:");
        String name=scan.next();
        System.out.println("请输入作者的名字:");
        String author=scan.next();
        System.out.println("请输入图书的价格:");
        int price=scan.nextInt();
        System.out.println("请输入图书的类型:");
        String type=scan.next();
        Book book=new Book(name,author,price,type); //新建书籍
        bookList.getBooks().add(book); //使用ArrayList的add来进行图书的添加
        System.out.println("添加成功!");
    }
}

3.6.2 查找操作

查找操作只有两种情况,一种是找到了,另一种自然就是没找到,在没找到的时候我们就可以选择抛出一个异常,查找操作的具体实现还是通过遍历来实现,代码如下:

import java.util.Scanner;
//查找功能的实现
public class FindOperation implements IOperation{
    @Override
    public void work(BookList bookList) throws OperationException {
        Scanner scan=new Scanner(System.in);
        System.out.println("请输入你想要查找的书名:");
        String name=scan.next();
        boolean flag=true;
        for(int i=0;i<bookList.getBooks().size();i++){
            if(bookList.getBooks().get(i).getName().equals(name)){
                flag=false;
                System.out.println("找到了!   信息如下:");
                System.out.println(bookList.getBooks().get(i));
            }
        }
        if(flag){
            throw new OperationException("没有找到该书");
        }
    }
}

3.6.3 删除操作

删除操作同理,也是提供相应的书名,然后进行搜索,如果找到了,就使用remove()方法进行删除,否则就抛出一个异常,具体还是通过遍历实现:

public class DelOperation implements IOperation{
    public void work(BookList bookList)throws OperationException{
        System.out.println("请输入你想要删除的书籍:");
        Scanner scan=new Scanner(System.in);
        String name=scan.next();
        boolean flag=true;
        for(int i=0;i< bookList.getBooks().size();i++){
            if(bookList.getBooks().get(i).getName().equals(name)){
                flag=false;
                System.out.println("查找到了,请问是否要进行删除:"+name+"(Y/N)");
                if(scan.next().equalsIgnoreCase("y")){ //进行删除操作
                    bookList.getBooks().remove(i);
                    System.out.println("删除成功!");
                }
            }
        }
        if(flag){
            throw new OperationException("未查找到该书籍!");
        }
    }
}

3.6.4 显示操作

显示操作较为好实现,因为重写过book的toString()方法了,所以可以直接遍历BookList进行输出即可,代码如下:

public class DisplayOperation implements IOperation{
    //显示功能的实现
    //结合book类的重写进行
    @Override
    public void work(BookList bookList) throws OperationException {
        for(int i=0;i<bookList.getBooks().size();i++){
            System.out.println(bookList.getBooks().get(i)); //直接输出
        }
    }
}

3.6.5 借书操作

借书操作的实现也相同,先提供一个书名,然后遍历书架,若有则判断其是否已被借出,如果是,则抛出一个异常,否则就借出成功,并更改书的借出状态;若没有,即抛出一个未找到的异常。

public class BorrowOperation implements IOperation{
    public void work(BookList bookList)throws OperationException{
        System.out.println("请输入你想要借的书:");
        Scanner scan=new Scanner(System.in);
        String name=scan.next();
        boolean flag=true;
        for(int i=0;i< bookList.getBooks().size();i++){
            if(bookList.getBooks().get(i).getName().equals(name)){ //查找到该书籍在图书馆中
                flag=false;
                if(bookList.getBooks().get(i).isBorrowed()==true){
                    throw new OperationException("借书失败,该书已被借出");
                }else{ //书未被借出
                    System.out.println("借出成功!");
                    bookList.getBooks().get(i).setBorrowed(true);
                }
            }
        }
        //出循环了,仍未找到
        if(flag) {
            throw new OperationException("未查找到该书");
        }
    }
}

3.6.6 还书操作

还书操作的过程,也是提供相应的书名,遍历书架,若有该书,则进行归还,同时设置其状态为未被借出状态;如果未找到该书,也抛出一个异常。

public class ReturnOperation implements IOperation{
    @Override
    public void work(BookList bookList) throws Exception {
        Scanner scan=new Scanner(System.in);
        System.out.println("请输入你要归还的书籍:");
        String name=scan.next();
        boolean flag=true;
        for(int i=0;i<bookList.getBooks().size();i++){
            if(bookList.getBooks().get(i).getName().equals(name)){
                flag=false;
                System.out.println("成功归还!");
                bookList.getBooks().get(i).setBorrowed(false);
            }
        }
        if(flag){
            throw new OperationException("查无此书!");
        }
    }
}

3.6.7 退出功能

退出功能的实现较为简单,我们这里使用System类中的静态方法exit来进行实现,代码如下:

//退出功能的实现
public class ExitOperation implements IOperation {
    @Override
    public void work(BookList bookList) throws OperationException {
        System.out.println("是否要进行退出?"+"(Y/N)");
        Scanner scan=new Scanner(System.in);
        if(scan.next().equalsIgnoreCase("Y")){
            System.out.println("退出成功!");
            System.exit(0);
        }
    }
}

3.7 管理员类的实现

首先,管理员类需要继承于用户类,同时实现用户类中的抽象方法menu(),同时实现抽象方法Operation(),这里可以利用接口的多态性来进行实现,同时我们要对Operation抛出的异常进行处理,同时抛出在选择过程中会出现的异常,代码如下:

public class Admin extends User{
    public Admin(String name){
        super(name);
    }
    public void menu(){
        System.out.println("尊敬的管理员:"+this.getName()+"欢迎来到图书管理系统");
        System.out.println("1.查找图书");
        System.out.println("2.新增图书");
        System.out.println("3.删除图书");
        System.out.println("4.显示图书");
        System.out.println("0.退出系统");
    }
    public  void Operation(int n,BookList bookList)throws OperationException{
        IOperation iOperation=null;
        switch(n){
            case 0:
                iOperation= new ExitOperation();
                break;
            case 1:
                iOperation=new FindOperation();
                break;
            case 2:
                iOperation=new AddOperation();
                break;
            case 3:
                iOperation=new DelOperation();
                break;
            case 4:
                iOperation= new DisplayOperation();
                break;
            default:
                throw new OperationException("输入错误,请重新输入!");
        }
        try {
            iOperation.work(bookList);
        }catch(OperationException e){
            System.out.println(e.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

3.8 读者类的实现

读者类与管理员类同理,代码如下:

public class Reader extends User{
    public Reader(String name){
        super(name);
    }
    @Override
    public void menu() {
        System.out.println("尊敬的读者:"+this.getName()+"欢迎来到图书馆");
        System.out.println("1.查找图书");
        System.out.println("2.借阅图书");
        System.out.println("3.归还图书");
        System.out.println("0.退出系统");
    }
    public void Operation(int n, BookList bookList)throws OperationException {
        IOperation iOperation=null;
        switch(n){
            case 0:
                iOperation= new ExitOperation();
                break;
            case 1:
                iOperation=new FindOperation();
                break;
            case 2:
                iOperation=new BorrowOperation();
                break;
            case 3:
                iOperation=new ReturnOperation();
                break;
            default:
                throw new OperationException("输入错误,请重新输入!");
        }
        try {
            iOperation.work(bookList);
        }catch(OperationException e){
            System.out.println(e.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

3.9 Test类

此时,我们所有的框架都已经搭建好了,只需要在Test类中添加main方法进行测试即可,代码如下:

public class Test {
    public static void main(String[] args){
        System.out.println("请输入你的身份:");
        System.out.println("管理员/普通用户(0/1)");
        Scanner scan=new Scanner(System.in);
        int choice=scan.nextInt();
        System.out.println("请输入你的姓名:");
        User user=null;
        BookList bookList=new BookList();
        switch(choice){ //进行身份的选择
            case 0:
                user=new Admin(scan.next());
                break;
            case 1:
                user=new Reader(scan.next());
        }
        IOperation iOperation=null;
        do {
            user.menu();
            System.out.println("请输入你要进行的操作:");
            int input=scan.nextInt();
            if(input==0){
                System.out.println("退出成功");
                return;
            }
            try {
                user.Operation(input, bookList);
            }catch(OperationException e){
                System.out.println(e.getMessage());
            }
        }while(true);
    }
}

4. 整体效果展示

图书管理系统java,项目,java,开发语言

图书管理系统java,项目,java,开发语言

源码地址在这:JavaSenior/day_02/src · 夕夕夕夕夕立/java - 码云 - 开源中国 (gitee.com)文章来源地址https://www.toymoban.com/news/detail-778552.html

到了这里,关于用Java实现简易的图书管理系统(超详细)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于Java+Spring的图书管理系统详细设计和实现

     博主介绍 : ✌ 全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精彩专栏 推荐订阅 👇🏻 不然下次找不到哟  java项

    2024年02月03日
    浏览(87)
  • 基于java和sqlserver建立的简易图书管理系统

    游览所有图书、查找书籍、建立新图书,借出和归还图书,删除某一图书 选择需要的操作 释放连接 Idea,JDK13,驱动包Microsoft JDBC Driver 8.2.2 for SQL Server 数据库:sqlserver2019 Database:library Table:Book Book:书籍编号,书籍名称,书籍作者,库存量 管理员名:sa 密码:123456 官网下

    2024年02月08日
    浏览(44)
  • Java连接数据库实现图书馆管理系统(详细教程)

    该功能用到的软件为 IDEA 、Navicat 、云服务器(非必须) 源码下载 https://www.aliyundrive.com/s/UTz8pNxobGK 在自己的服务器或者电脑本机安装数据库系统,本次系统演示的数据库版本为5.6。 1.创建图书管理数据库library 字符集为:utf8 -utf8_general_ci 2.设计好将要使用的sql语句 视图、存储

    2024年02月06日
    浏览(49)
  • 基于Java+Spring+Html的图书借阅管理系统详细设计和实现

    博主介绍 : ✌ 全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精彩专栏 推荐订阅 👇🏻 不然下次找不到哟  java项目

    2024年02月04日
    浏览(80)
  • 图书管理借阅系统【Java简易版】Java三大特征封装,继承,多态的综合运用

    前言 前几篇文章讲到了Java的基本语法规则,今天我们就用前面学到的数组,类和对象,封装,继承,多态,抽象类,接口等做一个图书管理借阅系统。 Java语言是面向对象的,所以首先要分析完成这个图书管理系统,有哪些对象: 👱使用者User 📘书Book 📲操作Operation 使用者

    2024年02月14日
    浏览(44)
  • 【JAVA】 图书管理系统(javaSE简易版 内含画图分析) | 期末大作业&课程设计

    作者主页:paper jie 的博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《JAVA》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造,将javaSE基础知识一网打尽,希望可以帮到读者们哦。 其他专栏:《算法详

    2024年02月09日
    浏览(49)
  • 图书管理系统(Java实现,十个数据表,含源码、ER图,超详细报告解释,2020.7.11更新)...

    图书管理系统数据库设计实验报告 2020.7.11 修改了表的结构,表之间增加了外键联系,更加完整且符合第三范式。 数据库设计实验报告 疫情期间,大家都只能够在家里,不能去到学校,此时需要在图书馆借书,就是只能通过网络来操作了。因此,网上图书馆就此诞生了,有了

    2024年02月05日
    浏览(128)
  • JAVA图书管理系统详细代码

    代码主要分为四个大部分,主函数,图书相关函数,操作,以及使用者。分为三个包:book、operation、user和一个单独的主函数。 操作接口 对于每一个操作都有相近的一部分,刚好可以用接口,在User(使用者)中利用接口类型的数组来进行相关的操作。在下面的User中会具体说

    2024年02月09日
    浏览(55)
  • 图书管理系统(简易版)

    目录 一、该图书管理系统涉及Java的知识点 二、该图书管理系统包含的功能 数组的增删查 抽象类 接口 面向对象的封装、继承和多态 图书管理系统的使用人群分为两种:①管理人员,②普通用户 具体实现:抽象类的继承 User类(父类): AdminUser类(管理员)  NormalUser类(普通用

    2024年02月08日
    浏览(40)
  • 万字超详细的Java图书管理系统

    💕”生命中的每个人都是一个故事,而每个故事都值得被讲述“💕 🎆作者:不能再留遗憾了🎆 🐼专栏:Java学习🐼 🚗该文章主要内容:用Java实现简单的图书管理系统 各位朋友们大家好,今天我为大家分享是可以被称为小项目的图书管理系统,这个小项目运用了我们前面

    2024年02月03日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包