JAVA图书管理系统详细代码

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

图书管理系统

代码主要分为四个大部分,主函数,图书相关函数,操作,以及使用者。分为三个包:book、operation、user和一个单独的主函数。

主函数

import book.BookList;
import user.AdiminUser;
import user.NormalUser;
import user.User;

import java.util.Scanner;

public class Main {
    public static User login() {
        System.out.println("请输入姓名:");
        Scanner scan=new Scanner(System.in);
        String name=scan.nextLine();
        System.out.println("请输入你的身份(1->管理员  0->用户):");
        int id=scan.nextInt();
        if(id==1){
            return new AdiminUser(name);
        }else{
            return new NormalUser(name);
        }
    }

    public static void main(String[] args) {
        BookList bookList =new BookList();
        while(true) {
        User user=login();
            int choice = user.menu();
            user.doOperation(choice, bookList);//对图书进行相关的操作
        }
    }
}

图书相关操作(operation包)

操作接口

对于每一个操作都有相近的一部分,刚好可以用接口,在User(使用者)中利用接口类型的数组来进行相关的操作。在下面的User中会具体说。

package operation;

import book.Book;
import book.BookList;

public interface IOpreation {

    public void work(BookList booklist);
}

增加图书

增加图书只需要在数组的最后添加即可,于是要利用booklist.getUsedsize();得到图书数组的使用长度,决定要增加的图书应该所在的位置。

package operation;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class AddOperation implements IOpreation{
    @Override
    public void work(BookList booklist) {

        System.out.println("新增图书");
        int size=booklist.getUsedsize();
        Scanner scan=new Scanner(System.in);
        System.out.println("请输入图书名称:");
        String name=scan.nextLine();
        System.out.println("请输入图书作者:");
        String anuthor=scan.nextLine();
        System.out.println("请输入图书价格:");
        int price=scan.nextInt();
        System.out.println("请输入图书种类:");
        String type=scan.nextLine();
        Book book=new Book(name,anuthor,price,type);
        booklist.setBooklist(size,book);
        System.out.println("新增书籍成功");
        booklist.setUsedsize(size+1);
    }
}

借阅图书

对于借阅图书只需要将图书信息中的布尔型变量isBorrowed变量变为true即可,首先还是要遍历booklist找到该书。

package operation;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class BorrowOperation implements IOpreation {
    public void work(BookList booklist){
        System.out.println("借阅图书");
        Scanner scan=new Scanner(System.in);
        System.out.println("请输入要借阅的书籍名称:");
        String name=scan.nextLine();
        int size=booklist.getUsedsize();
        for (int i = 0; i <size ; i++) {
            Book book=booklist.getBook(i);
            if(book.getName().equals(name)){
                book.setBorrowed(true);
                System.out.println("借阅成功");
                System.out.println("该书籍的信息为:");
                System.out.println(book);
                return;
            }
        }
        System.out.println("该书籍不存在");
    }
}

删除书籍

类似于借阅书籍,首先要先找到你要删除的书籍,因此设置一个中间变量,index来判断是否存在该书籍,对于书籍同样也是要遍历booklist,对于删除操作只需要用后一个覆盖前一个的内容即利用for循环前移即可。

package operation;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class DeleteOperation implements IOpreation{
    @Override
    public void work(BookList booklist) {
        System.out.println("删除图书");
        Scanner scan=new Scanner(System.in);
        System.out.println("请输入要删除的图书名称:");
        String name= scan.nextLine();
        int size=booklist.getUsedsize();
        int index=-1;
        for (int i = 0; i <size ; i++) {
            Book book=booklist.getBook(i);
            if(book.getName().equals(name)){
                index=i;
                break;
            }
        }
        if(index==-1){
            System.out.println("不存在你想要删除的书籍");
        }
        //删除操作
        for (int i = index; i <size-1 ; i++) {
            Book book=booklist.getBook(i+1);
            booklist.setBooklist(i,book);
        }
        System.out.println("删除成功");
       booklist.setUsedsize(size-1);
    }
}

显示书籍

同样利用booklist.getUsedsize();得到数组的使用长度,然后利用for循环将每本书依次打印出来即可。

package operation;

import book.Book;
import book.BookList;

import java.util.Arrays;

public class DisplayOperation implements IOpreation{
    @Override
    public void work(BookList booklist) {
        System.out.println("显示图书");
       int size=booklist.getUsedsize();
        for (int i = 0; i < size; i++) {
            Book book=booklist.getBook(i);
            System.out.println(book);
        }
    }
}

退出系统

package operation;

import book.Book;
import book.BookList;

public class ExitOperation implements IOpreation{
    @Override
    public void work(BookList booklist) {

        System.out.println("退出系统");
        System.exit(0);
    }
}

查找图书

主要是比较booklist中图书的名字与输入的名字之间是否相同,要先将数组中的某一本图书赋给一个Book类的变量book然后才能进行比较(Book book=booklist.getBook(i);)book.getName().equals(name)。

package operation;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class FindOperation implements IOpreation{
    @Override
    public void work(BookList booklist) {
        System.out.println("查找图书");
        Scanner scan=new Scanner(System.in);
        System.out.println("请输入要查找的书籍名称:");
        String name=scan.nextLine();
        int size=booklist.getUsedsize();
        for (int i = 0; i <size ; i++) {
            Book book=booklist.getBook(i);
            if(book.getName().equals(name)){
                System.out.println("查找成功,该书籍的信息为:");
                System.out.println(book);
                return;
            }
        }
        System.out.println("不存在你要查找的书籍");
    }
}

归还书籍

和借阅图书进行对比可只,借阅图书是将isBorrowed变量由false变为true,那么归还图书就是将isBorrowed变量由true变为false.

package operation;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class ReturnOperation implements IOpreation{
    @Override
    public void work(BookList booklist) {
        System.out.println("归还图书");
        Scanner scan=new Scanner(System.in);
        System.out.println("请输入要归还的书籍名称:");
        String name=scan.nextLine();
        int size=booklist.getUsedsize();
        for (int i = 0; i <size ; i++) {
            Book book=booklist.getBook(i);
            if(book.getName().equals(name)){
                book.setBorrowed(false);
                System.out.println("归还成功");
                System.out.println("该书籍的信息为:");
                System.out.println(book);
                break;
            }
        }
    }
}

图书及“书架”(book包)

图书

需要说明的是在重写的toString函数中(toString函数在Object类中,它被认为是所有类的父类)(isBorrowed == true ? " 已借出 “:” 未借出 ") 将true和false转换为文字。

package book;

public class Book {
    private String name;
    private String author;
    private int price;
    private String type;
    private boolean isBorrowed;

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

    public boolean isBorrowed() {
        return isBorrowed;
    }

    public void setBorrowed(boolean borrowed) {
        isBorrowed = borrowed;
    }

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

    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\t' +
                ", author='" + author + '\t' +
                ", price=" + price +
                ", type='" + type + '\t' +
                (isBorrowed == true ? " 已借出 ":" 未借出 ") +
                '}';
    }
}

“书架”

书架就可以看成以Book为基本数据类型的一个数组,要设立数组使用长度,便于后续操作。

package book;

public class BookList {
    private Book[] booklist=new Book[10];
    private int usedsize;
    public BookList(){
        this.booklist[0]=new Book("三国演义","罗贯中",28,"小说");
        this.booklist[1]=new Book("水浒传","施耐庵",36,"小说");
        this.booklist[2]=new Book("红楼梦","曹雪芹",56,"小说");
        this.booklist[3]=new Book("西游记","吴承恩",35,"小说");
        this.usedsize=4;
    }

    public int getUsedsize() {
        return usedsize;
    }

    public void setUsedsize(int usedsize) {
        this.usedsize = usedsize;
    }
    public void setBooklist(int pos,Book book){
        booklist[pos]=book;
    }
    public Book getBook(int pos){
        return booklist[pos];
    }
}

使用人群(user包)

user父类

这里有一个protected IOpreation[] iOpreations;即接口类型的数组,主要是在它的子类中,在构造函数中需要根据它们各自的功能实例化各个操作。

package user;

import book.BookList;
import operation.IOpreation;

public abstract class User {
    protected String name;
    protected IOpreation[] iOpreations;
    public User(String name){
        this.name=name;
    }
    public abstract int menu();
    public void doOperation(int choice, BookList bookList){
        this.iOpreations[choice].work(bookList);
    }


}

普通使用人员

上面说的 IOpreation[] iOpreations,在这里就实例化了

this.iOpreations=new IOpreation[]{
                new FindOperation(),
                new BorrowOperation(),
                new ReturnOperation(),
                new ExitOperation()

对于选择的操作序号我们也要返回,从而在主函数中调用User类中的doOperation操作,要注意在上面对操作进行实例化时要与下面菜单的顺序一致。

package user;

import operation.*;

import java.util.Scanner;

public class NormalUser extends User {
    public NormalUser(String name) {
        super(name);
        this.iOpreations=new IOpreation[]{
                new FindOperation(),
                new BorrowOperation(),
                new ReturnOperation(),
                new ExitOperation()
        };
    }
    public int menu(){
        System.out.println("********普通人员菜单*********");
        System.out.println("欢迎"+name+"进入图书借阅系统");
        System.out.println("0                   查找书籍");
        System.out.println("1                   借阅书籍");
        System.out.println("2                   归还书籍");
        System.out.println("3                   退出系统");
        Scanner scan=new Scanner(System.in);
        int choice=scan.nextInt();
        return choice;
    }
}

管理员

与上面的普通人员除了操作不同之外,其他都是同样的道理。文章来源地址https://www.toymoban.com/news/detail-492918.html

package user;

import operation.*;

import java.util.Scanner;

public class AdiminUser extends User{
    public AdiminUser(String name) {
        super(name);
        this.iOpreations=new IOpreation[]{
                new DisplayOperation(),
                new DeleteOperation(),
                new AddOperation(),
                new FindOperation(),
                new ExitOperation()
        };
    }
    public int menu() {
        System.out.println("********管理员菜单**********");
        System.out.println("欢迎"+name+"进入管理员菜单");
        System.out.println("0                   显示书籍");
        System.out.println("1                   删除书籍");
        System.out.println("2                   增加书籍");
        System.out.println("3                   查找书籍");
        System.out.println("4                   退出系统");
        System.out.println("***************************");
        Scanner scan = new Scanner(System.in);
        int choice = scan.nextInt();
        return choice;
    }
}

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

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

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

相关文章

  • 图书管理系统(Java简单版)(完整代码+详解)

    目录 详解:  BookList类: InOperation接口  User类(父类) 和 Main类(这俩要一起看) 完整代码  book包  Book类  BookList类 operation包   AddBook类 BorrowBook类 DeleteBook类 FindBook类 PrintBook类 ReturnBook类 Exit类 InOperation接口 user包  Domestic类 Administrator类 User类  Main类  按照上图逻辑来写

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

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

    2024年02月03日
    浏览(87)
  • 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的图书借阅管理系统设计与实现(源代码+数据库+部署文档+部署视频)

           图书管理系统 该系统对数据进行保存、修改、删除等管理。为用户提供了一个友好、简单快捷的运行操作平台。该统对数据进行保存、修改、删除等管理,为用户提供了一个友好、简单快捷的运行操作平台。本系统的各界面设计友好、流程正确、功能也较为完善,

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

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

    2024年02月05日
    浏览(128)
  • 图书管理系统(含完整代码)

    课题背景 一、主要研究内容 二、需求分析 1.功能性需求分析 2.非功能性需求分析 三、系统整体架构设计 四、相关代码 1.文件存储 1.1.存储用户信息 1.2.存储图书信息 2.密码保护 五、完整代码 1.图书借阅管理系统.py  2.user.py 3.manager.py 基于Python开发的一款图书借阅管理系统。

    2024年02月06日
    浏览(78)
  • Java web图书管理系统、在线图书借阅管理系统(带文档)

     大家好,我是DeBug,很高兴你能来阅读!作为一名热爱编程的程序员,我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里,我将会结合实际项目经验,分享编程技巧、最佳实践以及解决问题的方法。无论你是初学者还是有一定经验的程序员,我都希望能够为你

    2024年01月23日
    浏览(50)
  • 【Java】图书管理系统

    书写一个图书管理系统,其中要包含以下功能:借阅书籍、浏览书籍、查找书籍、添加书籍、删除书籍、修改书籍 (书写这个程序主要是为了巩固我们之前学习的基础语法,因此在这个程序书写的过程中我们将尽量运用我们之前学的大部分知识。同时值得一提的是,这篇文章

    2024年02月05日
    浏览(38)
  • 图书管理系统【java】

    目录 🥇1.设计背景 🔎2.设计思路 🔑3.book包 📗3.1 Book类的实现 📕3.2 BookList类的实现(书架) 🔑4.user包 📙4.1 User类的实现 📒4.2 AdminUser(管理员) 📘4.3 Normal(普通用户) 👜5.opera包 1️⃣5.1 IOperation接口的实现 2️⃣AddOperation(添加操作) 3️⃣FindOperation(查找操作) 4️⃣

    2024年02月03日
    浏览(64)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包