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

article/2025/10/11 0:03:43

目录

设计背景 

成果展示

设计思路

详细代码 

book包

Book类

BookList类

operation包

IOperation接口

AddOperation类

BorrowOperation类

DelOperation类

DisplayOperation类

ExitOperation类

ReturnOperation类

user包

User类

Admin类

NormalUser类

Test类

总结分析
​​​​​​​


设计背景 

该程序中包含了JAVA的数据类型,变量,运算符,循环选择,方法,数组,类和对象,封装,继承,多态,抽象类和接口等的语法知识,因此很值得那些和小编一样,刚学完JAVA的基本语法知识的道友们来上手自己写一下,来锻炼一下自己的编程能力,回顾JAVA的语法知识。


成果展示

管理员操作页面 

 

普通用户操作页面 

 

 这是主要的两个操作页面,剩余的就是管理员和用户选择性的进行操作,因此这里省略一下,后续朋友们可以学习我的思路和代码,自己实现。


设计思路

因为我们是使用JAVA语言来实现图书管理系统,同时JAVA是一门面向对象的编程语言,因此我们再进行设计的时候要运用JAVA的封装、继承和多态的思想,真正的写出地道的JAVA程序。

我们在设计之前,先对图书馆系统的各个操作进行总结,这里总结如下:

 通过总结,加上我们要体现封装的思想,我们可以创建book包,operation包,user包。来分别存放图书相关的,操作相关的,以及用户相关的类,方便我们管理。具体创建的如下:


详细代码 

book包

Book类

代码如下:

package book;public class Book {private String name;         //书名private String author;       //作者private String type;         //类型private int price;           //价格private boolean isBorrowed;  //是否被借出public Book(String name, String author, int price, String type) {this.name = name;this.author = author;this.type = type;this.price = price;}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 getType() {return type;}public void setType(String type) {this.type = type;}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;}@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", type='" + type + '\'' +", price=" + price +(isBorrowed ? ", 已借出" : ", 未借出") +'}';}
}

在Book类中,我们要注意书名,作者,类型,价格,以及是否被借出均应为private修饰的,同时给他们提供相应的get 和 set方法,以此来体现JAVA封装的特性。同时这里我们应该重写一下toString方法,便于我们后续显示图书。

BookList类

代码如下:

package book;public class BookList {public static final int DEFAULT_SIZE = 10;         //默认书架的容量private Book[] books = new Book[DEFAULT_SIZE];  //书架private int usedSize = 0;                          //书架中已放书籍的数量//这里初始化放三本书public BookList() {books[0] = new Book("三国演义","罗贯中",89,"小说");books[1] = new Book("西游记","吴承恩",78,"小说");books[2] = new Book("红楼梦","曹雪芹",49,"小说");this.usedSize = 3;}public Book getBook(int index) {if (index < 0 || index >= usedSize) {return null;}return books[index];}public void setBook (Book book) {this.books[usedSize] = book;}public void setBook (Book book,int index) {this.books[index] = book;}public int getUsedSize() {return this.usedSize;}public void setUsedSize(int usedSize) {this.usedSize = usedSize;}
}

 在BookList类中,我们要创建相应的Book数组,对应的Book数组即为书架。同时定义UsedSize来显示当前书架中存放的书籍数量,同时提供相应的get和set方法。特别强调:在提供setBook方法时候,我们要进行重载,不仅提供在末尾放一本书的操作,同时应该提供在index位置设置一本书的操作,方便我们后续删除书籍。


operation包

IOperation接口

代码如下:

package operation;import book.BookList;public interface IOperation {void work(BookList bookList);
}

这里应该实现一个IOperation接口,后续的各种操作类应该继承这个接口,因为我们在后续用户进行选择操作的时候,我们可以利用多态进行相应操作,非常重要!!!

AddOperation类

代码如下:

package operation;import book.Book;
import book.BookList;
import java.util.Scanner;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 author = scanner.nextLine();System.out.println("请输入类型:");String type = scanner.nextLine();System.out.println("请输入价格:");int price = scanner.nextInt();Book book = new Book(name,author,price,type);int currentSize = bookList.getUsedSize();for (int i = 0; i < currentSize; i++) {if (bookList.getBook(i).getName().equals(name)) {System.out.println("已经存在这本书了,不能再放入了!");}}bookList.setBook(book);bookList.setUsedSize(currentSize + 1);}
}

AddOperation类中,我们可以在增加图书的时候,进行重名检验,让我们的系统更加完善

BorrowOperation类

代码如下: 

package operation;import book.Book;
import book.BookList;
import java.util.Scanner;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 currentSize = bookList.getUsedSize();for (int i = 0; i < currentSize; i++) {Book book = bookList.getBook(i);if (book.getName().equals(name)) {if (book.isBorrowed()) {  //已借出System.out.println("该书已被借出!");} else {                  //未借出book.setBorrowed(true);System.out.println("借阅成功!");}return;}}System.out.println("该书不存在!");}
}

在进行借阅的时候,我们要注意不单单是该书是否存在,同时要注意的是验证当前这本书的状态,看是否已经借出。 

DelOperation类

代码如下: 

package operation;import book.Book;
import book.BookList;
import java.util.Scanner;public class DelOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("删除图书!");System.out.println("请输入书名:");Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();int currentSize = bookList.getUsedSize();int index = -1;  //记录删除书籍的位置for (int i = 0; i < currentSize; i++) {Book book = bookList.getBook(i);if (book.getName().equals(name)) {index = i;}}//判定该书是否存在if (index == -1) {System.out.println("删除的书籍不存在!");return;}//挪动书籍for (int i = index; i < currentSize - 1; i++) {Book book = bookList.getBook(i + 1);bookList.setBook(book,i);}//修改usedSizebookList.setUsedSize(currentSize - 1);//因为挪动操作会导致要删除的书籍存放在书架的最后一个位置,因此这里需要将其置为空,彻底删除bookList.setBook(null,currentSize - 1);System.out.println("删除成功!");}
}

删除图书的各种操作在代码中已经注释的较为清楚了,这里不做过多解释。

DisplayOperation类

代码如下:

package operation;import book.BookList;public class DisplayOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("显示图书!");int usedSize = bookList.getUsedSize();if (usedSize == 0) {System.out.println("当前无图书!");return;}System.out.println("图书如下:");for (int i = 0; i < usedSize; i++) {System.out.println(bookList.getBook(i));}}
}

在显示图书操作的时候,我们要验证当前书架是否为空,让我们的系统更加完备。同时这里再打印每一本图书的时候,printLn函数调用的是Book类的toString方法,这里与我们在创建Book类时候重写的toString方法一致,这里运用到了多态和重写的知识,看到这里迷茫的朋友门可以去复习一下相应的多态和重写。

ExitOperation类

代码如下:

package operation;import book.BookList;public class ExitOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("退出系统!");System.exit(0);}
}

 在退出系统的时候,我们可以调用System中的exit方法,同时传入参数,表示的是正常退出。

FindOperation类

代码如下:

package operation;import book.Book;
import book.BookList;
import java.util.Scanner;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 currentSize = bookList.getUsedSize();int index = -1;  //记录查找书籍的位置for (int i = 0; i < currentSize; i++) {Book book = bookList.getBook(i);if (book.getName().equals(name)) {index = i;}}//判定该书是否存在if (index == -1) {System.out.println("查找的书籍不存在!");return;}//打印该书的详细信息System.out.println(bookList.getBook(index));}
}

 查找图书较为简单,但需要强调的是这里打印书籍详细信息的时候运用的仍然是多态。

ReturnOperation类

代码如下:

package operation;import book.Book;
import book.BookList;
import java.util.Scanner;public class ReturnOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("归还图书!");System.out.println("请输入书名:");Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();int currentSize = bookList.getUsedSize();for (int i = 0; i < currentSize; i++) {Book book = bookList.getBook(i);if (book.getName().equals(name)) {book.setBorrowed(false);System.out.println("归还成功!");return;}}System.out.println("该书不存在!");}
}

 归还图书时,我们第一验证书本是否存在,存在后,我们直接将其借出的状态改为false即可

user包

User类

代码如下:

package user;import book.BookList;
import operation.IOperation;public abstract class User {protected String name;              //姓名protected IOperation[] operation;public User(String name) {this.name = name;}public abstract int menu();public void doWork(int choice, BookList books) {operation[choice].work(books);}
}

这里我们要注意两个方面:(很重要!)

第一:我们要设置一个抽象方法menu,因为我们管理员和普通用户的操作菜单不同,因此依靠他们各自的类进行重写menu方法更加合适

第二:我们在User类中创建一个IOperation[] operation 的数组,因为我们管理员和普通用户菜单选择的不同,我们要对这个数组进行相应的初始化,同时这里我们可以创建操作的数组,也多亏于我们设计的IOperation接口,这里很重要,希望多想一想!

Admin类

代码如下:

package user;import operation.*;
import java.util.Scanner;
import java.util.Scanner;public class Admin extends User{public Admin(String name) {super(name);operation = new IOperation[]{new ExitOperation(),new FindOperation(),new AddOperation(),new DelOperation(),new DisplayOperation(),};}@Overridepublic int menu() {System.out.println("***********************************");System.out.println("Hello " + super.name + " 欢迎来到图书管理系统");System.out.println("1. 查找图书");System.out.println("2. 新增图书");System.out.println("3. 删除图书");System.out.println("4. 显示图书");System.out.println("0. 退出系统");System.out.println("***********************************");System.out.println("请选择你的操作:");Scanner scanner = new Scanner(System.in);int choice = scanner.nextInt();while (choice < 0 || choice > 4) {System.out.println("选择不合法,请重新输入");choice = scanner.nextInt();}return choice;}
}

我们在Admin类中重写menu方法,同时对operation数组进行初始化。

NormalUser类

代码如下:

package user;import operation.*;
import java.util.Scanner;public class NormalUser extends User{public NormalUser(String name) {super(name);this.operation = new IOperation[]{new ExitOperation(),new FindOperation(),new BorrowOperation(),new ReturnOperation()};}@Overridepublic int menu() {System.out.println("***********************************");System.out.println("Hello " + super.name + " 欢迎来到图书借阅系统");System.out.println("1. 查找图书");System.out.println("2. 借阅图书");System.out.println("3. 归还图书");System.out.println("0. 退出系统");System.out.println("***********************************");System.out.println("请选择你的操作:");Scanner scanner = new Scanner(System.in);int choice = scanner.nextInt();while (choice < 0 || choice > 3) {System.out.println("选择不合法,请重新输入");choice = scanner.nextInt();}return choice;}
}

同样的我们在NormalUser类中重写menu方法,并且初始化operation数组。

Test类

代码如下:

import java.util.Scanner;import book.BookList;
import user.Admin;
import user.NormalUser;
import user.User;public class Test {public static User login() {Scanner scanner = new Scanner(System.in);System.out.println("请输入姓名:");String name = scanner.nextLine();System.out.println("请选择身份:");System.out.println("0》 管理员  1》 用户");int choice = scanner.nextInt();if (choice == 0) {return new Admin(name);} else {return new NormalUser(name);}}public static void main(String[] args) {//先创建一个书架BookList bookList = new BookList();//用户登录User user = login();while (true) {//根据choice来确定要进行的操作int choice = user.menu();user.doWork(choice,bookList);}}
}

 在测试类中,我们通过创建一个书架,同时写一个登录方法,最后通过一个死循环一直进行选择操作,最后当用户选择退出系统时候会直接终止。

总结分析

在实现这个图书管理系统的时候,我们多次运用多态,每一次的使用都应该让我们再三思考使用的妙处,这对于我们以后java的学习又很大帮助。同时提醒各位道友在写这样的一个系统的时候,记得引入相应的包,否则就会报错。

这样一个简单的图书管理系统运用了java的大部分语法知识,很值得各位道友去自我实现一下,真的受益匪浅。

最后,感谢各位道友的浏览,希望对每一个人都有帮助,同时制作不易,希望各位道友可以关注,评论,收藏走一波,后续会后更多优质好文线上,非常感谢!!!


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

相关文章

图书管理系统(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…

MySQL函数(经典收藏)

MySQL函数&#xff08;经典收藏&#xff09; MySQL函数 MySQL数据库提供了很多函数包括&#xff1a; 数学函数&#xff1b;字符串函数&#xff1b;日期和时间函数&#xff1b;条件判断函数&#xff1b;系统信息函数&#xff1b;加密函数&#xff1b;格式化函数&#xff1b; …