Java图书管理系统(代码及详解)

article/2025/10/10 23:55:47

图书管理系统在C、C++、Java学习中我们都会进行练习来串联我们学习的一些知识以及使用场景,这里跟着我我带大家敲Java版本!

结果展示:

这是我们最终实现的图书管理系统,下面我们慢慢来

思路:

Java是面向对象的语言特点是:封装、继承、多态。我们在实现每一个功能的时候需要注意这些才能体现出Java语言的风格。

我们先把需要的操作先罗列出来然后再一点点实现这个图书管理系统,一个图书管理一定要有书的属性、书架、需要的一些操作、用户界面以及串联其他们的操作

我给大家列出来了:

我们把这三个大方向做包,分别在三个包下做这些内容

我们先了解下toString方法:

这里的book是一个类的对象

如果我们用System.out.println(book)会得到什么呢?会不会想的是对应的地址哈希地址但是为什么呢?其实每一个类都会有对应的toString方法在Object这个父类当中如果传入的是空内容返回的是null否则返回
Main$Student@1b6d3586一类的东西,如果我们重写这个方法就可以直System.out.println(book)来得出书籍的所有属性!

1.1 Book (book包)

在这个类里我们参加实例成员书名,作者,价格,类型,借阅情况。(这里的成员我们用private修饰体现封装)然后留出对应的访问方法来访问这些内容

成员

private String name;private String author;private int price;private boolean isBorrowed;private String type;

 对应的访问方法

并且在构造方法中就加入这些属性来构架出这个书。

重写toString方法访书籍的属性

这样我们写完Book这个类

public class Book {private String name;private String author;private int price;private boolean isBorrowed;private String type;@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +", isBorrowed=" +((isBorrowed==true)?"已被借阅":"未被借阅" )+", type='" + type + '\'' +'}';}public Book(String name, String author, int price, String type) {this.name = name;this.author = author;this.price = price;this.type = type;}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 boolean isBorrowed() {return isBorrowed;}public void setBorrowed(boolean borrowed) {isBorrowed = borrowed;}public String getType() {return type;}public void setType(String type) {this.type = type;}
}

1.2 BookList(book包)

暑假中我们放一个Book类型的数组存放书籍,用usedSize来记录书籍的本数也都是用private修表现封装,留出对应的访问方法。这里我们先初始化三本书

 books[0]=new Book("西游记", "吴承恩", 111, "名著");books[1]=new Book("三国演义", "罗贯中", 222, "名著");books[2]=new Book("红楼梦", "曹雪芹", 333, "名著");

这样我们的BookList类也写完了,这里还是很容易实现的

public class BookList {Book books[]=new Book[10];private int usedSize;public BookList() {books[0]=new Book("西游记", "吴承恩", 111, "名著");books[1]=new Book("三国演义", "罗贯中", 222, "名著");books[2]=new Book("红楼梦", "曹雪芹", 333, "名著");usedSize=3;}public Book getBooks(int pos) {return books[pos];}public int getUsedSize() {return usedSize;}public void setUsedSize(int usedSize) {this.usedSize = usedSize;}public void setBooks(int pos,Book book) {this.books[pos] = book;}
}

2.1  opperation包下的类

因为每一个操作都需要访问书架BookList所以我们留一个IOperation的接口里面留一个

work(BookList bookList);方法让下面的操作访问书架

2.1.1  AddOperation(添加操作)

这里新增图书并放在书架的顶部位置

getUsedSize在BookList类中得到书的本数并在对应的位置放上添加的数再让书的本书+1

public class AddOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("添加图书");Scanner scanner=new Scanner(System.in);System.out.println("请输入添加书籍的名称》");String name=scanner.nextLine();System.out.println("请输入作者的姓名》");String auther=scanner.nextLine();System.out.println("请输入书籍的价格》");int price=scanner.nextInt();System.out.println("请输入书籍的类型》");scanner.nextLine();String type=scanner.nextLine();Book book=new Book(name,auther,price,type);bookList.setBooks(bookList.getUsedSize(),book);System.out.println("添加成功!");bookList.setUsedSize(bookList.getUsedSize()+1);}
}

2.1.2  DeltOperation(删除操作)

遍历寻找要找的书籍并把每一个书籍向前移动,到了链表就可以更加快捷

需要注意的是名字的比较要用equals方法 A.equals(B)如果使用A==B比较的是它们对应的地址

public class DeltOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("删除图书");System.out.println("请输入你想要删除书籍的名称》");Scanner scanner=new Scanner(System.in);String name=scanner.nextLine();int size=bookList.getUsedSize();boolean key=false;for (int i = 0; i < size-1; i++) {if (bookList.getBooks(i).getName().equals(name)||key==true) {Book book=bookList.getBooks(i+1);bookList.setBooks(i,book);}}bookList.setUsedSize(bookList.getUsedSize()-1);System.out.println("删除成功!");}
}

2.1.3  DisPlayOperation(书籍展示)

这里的就用到了Book类中对Objecrt的toString方法重写

这里肯定会有人疑问为什么不直接用Systeam.out.println(books[i])来输出书籍的信息呢?

这里的books是private修饰的我们做了封装处理,

public class DisPlayOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("显示图书");int size=bookList.getUsedSize();for (int i = 0; i < size; i++) {System.out.println(bookList.getBooks(i));}}
}

2.1.4  FindOperation(查找操作)

这里的寻找对应名字也要用equals方法

public class FindOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("查找图书");System.out.println("请输入想要查找的图书》");Scanner scanner=new Scanner(System.in);String name=scanner.nextLine();int size= bookList.getUsedSize();for (int i = 0; i < size; i++) {if (bookList.getBooks(i).getName().equals(name)) {System.out.println(bookList.getBooks(i));return;}}System.out.println("未找到你想要寻找的书");}
}

 2.1.5  BorrowOperation(借阅操作)

这里遍历一遍再将对应位置的借阅情况更改下就好了

public class BorrowOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("借阅图书");System.out.println("请输入你要借阅书籍的名称》");Scanner scanner=new Scanner(System.in);String name=scanner.nextLine();int size=bookList.getUsedSize();for (int i = 0; i < size; i++) {if(bookList.getBooks(i).getName().equals(name)) {bookList.getBooks(i).setBorrowed(true);System.out.println("借阅成功!");return;}}System.out.println("未找到相关书籍!");}
}

2.1.6 ReturnOperation (归还操作) 

public class ReturnOperaion implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("归还图书");System.out.println("请输入你要归还图书的名称》");Scanner scanner=new Scanner(System.in);String name= scanner.nextLine();for (int i = 0; i < bookList.getUsedSize(); i++) {if(bookList.getBooks(i).getName().equals(name)) {bookList.getBooks(i).setBorrowed(true);System.out.println("归还成功!期待下次借阅!");return;}}System.out.println("未找到此书籍!归还失败!请到前台咨询此服务!");}
}

 2.1.7 ReturnOperation (退出系统)

public class ExitOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("退出程序");exit(1);}
}

users包的操作实现用户和管理者的界面与操作逻辑

3.1.1 User类

这个类是用户和管理者的父类需要被继承,这样设计的一方面原因是面向对象语言的特点,还有一方面是这样实现可以简略代码的重复便于理解

这个类中我们要定义name来存放用户和管理者的名字,menu菜单功能在这个里面不需要实现就使用抽象类abstract修饰再对应的子类实现对应的菜单,操作需要按照菜单进行操作所以我们需要一个IOperation这个类的操作数组有人会异或为什么是IOpernation类型呢?这只是一个接口为什么要用它,这里其实发生了向上转型,这个数组将存放各种书架操作,而这些操作是需要IOpernation接口,全部展开就是IOpernation iOpernation=new AddOpernation......这些操作,可以理解成父类继承的向上转型然后再运行时发生动态绑定将对应的menu方法和操作方法替换

里面写一个doOperation实现功能方法

this.iOperations[choice].work(bookList)里this就是本类的iOpernations操作数组的第choice个操作对应的work实现方法。

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

3.1.2  AdminUser管理员

重写对应的menu和对应的操作数组

public class AdminUser extends User{public AdminUser(String name) {super(name);this.iOperations=new IOperation[] {new ExitOperation(),new DisPlayOperation(),new FindOperation(),new AddOperation(),new DeltOperation()};}@Overridepublic int menu() {System.out.println("hello "+name);System.out.println("1.显示图书");System.out.println("2.查找图书");System.out.println("3.添加图书");System.out.println("4.删除图书");System.out.println("0.退出系统");System.out.println("请输入你的操作》");Scanner scanner=new Scanner(System.in);int choice=scanner.nextInt();return choice;}
}

3.1.3 NormalUser用户

也是重写对应的menu以及操作方法数组

public class NormalUser extends User{public NormalUser(String name) {super(name);this.iOperations=new IOperation[] {new ExitOperation(),new DisPlayOperation(),new FindOperation(),new BorrowOperation(),new ReturnOperaion()};}@Overridepublic int menu() {System.out.println("hello "+name);System.out.println("1.显示图书");System.out.println("2.查找图书");System.out.println("3.借阅图书");System.out.println("4.归还图书");System.out.println("0.退出系统");System.out.println("请输入你的操作》");Scanner scanner=new Scanner(System.in);int choice=scanner.nextInt();return choice;}
}

下面是实现这些所有功能的类

这里我们需要先写一个login里面写登录的基本语言以及选择管理员登录还是用户登录

public static User login() {System.out.println("欢迎来到图书系统!");System.out.println("请输入你的昵称》");Scanner scanner=new Scanner(System.in);String name=scanner.nextLine();System.out.println("1.用户登录    2.管理员登录");int user=scanner.nextInt();if(user==1){return new NormalUser(name);}else {return new AdminUser(name);}}

再使用main来串联起这些所有功能,使对应的用户功能实现在对应的内部实现

 

以上就是图书管理系统的内容了,完整代码放在22_5_18_book/src · 404NOt/Java - 码云 - 开源中国 (gitee.com)

我的总结可能不是十分到位,也可能会有专业上的疏忽欢迎在评论区留言!


http://chatgpt.dhexx.cn/article/J3MF3dx9.shtml

相关文章

JAVA实现简易的图书管理系统(含过程)

目录 设计背景 成果展示 设计思路 详细代码 book包 Book类 BookList类 operation包 IOperation接口 AddOperation类 BorrowOperation类 DelOperation类 DisplayOperation类 ExitOperation类 ReturnOperation类 user包 User类 Admin类 NormalUser类 Test类…

图书管理系统(Java实现)[附完整代码]

作者&#xff1a;爱塔居的博客_CSDN博客-JavaSE领域博主 专栏&#xff1a;JavaSE 作者专栏&#xff1a;大三学生&#xff0c;希望跟大家一起进步&#xff01; 文章目录 目录 文章目录 一、图书管理系统菜单 二、实现基本框架 三、实现业务 3.1 打印所有图书 3.2 退出系统 3.3 查…

JAVA->实现图书管理系统

目录 一、图书管理系统展示 1.管理员 2.普通用户 ​编辑3.操作 二、图书管理系统基本实现思路 book --- 包 1.Book类 注意&#xff1a; 2.BookList类 注意&#xff1a; Opreration --- 包 Operration接口 1.AddOperation -- 增加图书 注意&#xff1a; 2. BorrowO…

Java实现简单的图书管理系统

图书管理系统 简介知识点类封装包继承接口多态 创建书&#xff08;Book&#xff09;书架&#xff08;BookList&#xff09;主函数&#xff08;Main&#xff09;用户&#xff08;User&#xff09;管理员&#xff08;Administrator&#xff09;接口&#xff08;IOperation&#x…

Java基础之图书管理系统

一&#xff1a;建立信息表 为图书管理人员编写一个图书管理系统&#xff0c;图书管理系统的设计主要是实现对图书的管理和相关操作&#xff0c;包括3个表&#xff1a; 图书信息表——存储图书的基本信息&#xff0c;包括书号、书名、作者、出版社、出版日期、存馆数量、定价等…

Java实现简单图书管理系统

目录 利物浦是冠军&#xff01; 一、图书管理系统的功能 二、图书管理系统的基本实现思路 1、Book包 2、user包 3、operation包 4、利用Main函数来连接所有包 三、图书管理系统的具体实现 1、Book包 &#xff08;1&#xff09;book类 &#xff08;2&#xff09;bookL…

Java实现图书管理系统(超详细解析)

图书管理系统简单实现。图书管理系统基于Java&#xff0c;页面使用jsp实现。 用户进入登录页面&#xff0c;输入账号密码&#xff0c;系统会自动检验账号和密码是否匹配&#xff0c;匹配成功则进入图书管理首页。首页查看图书信息&#xff0c;新增图书信息&#xff0c;删除不需…

Java实现简单的图书管理系统(讲解清晰,代码齐全,能正常运行)

目录 实现的样子 大致思路 代码 &#xff08;按照这个目录创建包&#xff09; 首先是book包下&#xff0c;有两个类 book类 bookList类 然后是operation包下&#xff0c;有7个类和1个接口 AddOperation类 BorrowOperation类 DelOperation类 DisplayOperation类 ExitO…

Java课程设计—— 图书管理系统

1系统需求分析 1.1功能需求分析 本课题根据图书信息管理综合分析&#xff0c;便出于方便管理考虑&#xff0c;将图书信息管理系统的功能总结起来&#xff0c;共需要实现以下几个方面功能: 1.1.1管理图书信息 管理所有图书的基本信息&#xff0c;对图书信息的操作包括添加、…

用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…

mysql 数组函数_mysql数组函数知识讲解

MySQL的数组函数有很多种&#xff0c;今天给大家介绍的就是mysql数组中的mysql_fetch_array()函数&#xff0c;mysql_fetch_array()函数的代码编写有什么特点呢&#xff1f; MySQL中有很多功能强大的函数&#xff0c;下面为您介绍的函数mysql_fetch_array()属于MySQL数组函数&a…

MySQL聚合函数

一、聚合函数介绍 1、聚合函数作用于一组数据&#xff0c;并对一组数据返回一个值。 2、聚合函数类型 AVG() SUM() MAX() MIN() COUNT() 3、聚合函数不能嵌套调用。比如不能出现类似“AVG(SUM(字段名称))”形式的调用。 二、AVG和SUM函数 # AVG函数用于求一组数据的平均值&a…

MySql常用函数大全讲解

MySQL数据库中提供了很丰富的函数。MySQL函数包括数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数、加密函数、格式化函数等。通过这些函数&#xff0c;可以简化用户的操作。例如&#xff0c;字符串连接函数可以很方便的将多个字符串连接在一起。在这一讲中…

MySql统计函数COUNT详解

MySql统计函数COUNT详解 1. COUNT()函数概述2. COUNT()参数说明3. COUNT()判断存在4. COUNT()阿里开发规范 1. COUNT()函数概述 COUNT() 是一个聚合函数&#xff0c;返回指定匹配条件的行数。开发中常用来统计表中数据&#xff0c;全部数据&#xff0c;不为NULL数据&#xff0…

MYSQL窗口函数

文章目录 一、为何使用窗口函数二、什么是窗口函数三、窗口函数如何使用3.1 序号函数3.2 分布函数3.3 前后函数3.4 头尾函数3.5 其他函数3.6 聚类窗口函数 一、为何使用窗口函数 在日常工作中经常会遇到类似这样的需求&#xff1a; 怎么样得到各部门工资排名前N名的员工列表?…

MySQL常见函数

一、单行函数 1.1 字符函数 length(str)&#xff1a;统计字符串的字节数&#xff08;取决于编码方式&#xff0c;utf8汉字3字节&#xff0c;gbk汉字2字节&#xff09;concat(str1, str2)&#xff1a;拼接字符substr/substring(str, n1 [,n2])&#xff1a;切割字符&#xff0c…

MySQL常用函数大全(总结篇)

本篇文章讲解是是MySQL的函数方法&#xff0c;涵盖所有的MySQL常见的方法。下面是本篇文章的目录结构&#xff0c;可以根据自己需求点击右方目录查找&#xff1a; 一、数字函数二、字符串函数三、日期函数四、MySQL高级函数 &#xff08;一&#xff09;数字函数 1、ABS(x) 返…

MySQL常用函数大全(实例演示)

此博客主要包括如下类型函数&#xff1a; 一、数字函数 二、字符串函数 三、日期函数 四、MySQL高级函数 一、数字函数 1、ABS(x) 返回x的绝对值 SELECT ABS(-1); 结果&#xff1a; 2、AVG(expression) 返回一个表达式的平均值&#xff0c;expression 是一个字段 SELE…

MySql常用函数大全

MySql常用函数大全 MySQL数据库中提供了很丰富的函数。MySQL函数包括数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数、加密函数、格式化函数等。通过这些函数&#xff0c;可以简化用户的操作。例如&#xff0c;字符串连接函数可以很方便的将多个字符串连接…

MySQL函数大全

目录 &#xff08;一&#xff09;字符函数 ①length(str)函数 ②concat(str1,str2,...)函数 ③upper(str)、lower(str)函数 ④substr(str,start,len)函数 ⑤instr(str,要查找的子串)函数 ⑥trim(str)函数 ⑦lpad(str,len,填充字符)、rpad(str,len,填充字符)函数 ⑧rep…