图书管理系统(Java)

article/2025/10/10 15:24:20

📚

  • 一、前言
    • 1.1整体框架
  • 二、book包
    • 2.1Book
    • 2.2BookList
  • 三、user包
    • 3.1、User
    • 3.2、Adminuser
    • 3.3、Normaluser
  • 四、Operation包
    • 4.1、IOperation接口
    • 4.2、AddOperattion
    • 4.3、ShowOperation
    • 4.4、FindOperation
    • 4.5、DelOperation
    • 4.6、BorrowOperation
    • 4.7、ReturnOperation
    • 4.8、ExitOperation
  • 五、main

一、前言

对于图书管理系统的建立,大家在C语言的学习中或多或少听过甚至写过,如今我们的Java学习进行了不少时候了,这次我么尝试用Java来完成图书管理系统的实现。


1.1整体框架

首先我们最开始要构思好我们这个图书管理系统到底有哪些功能。里面究竟有哪些成员。

(1)图书方面:我们会设计图书的姓名、作者、价格、类型以及是否被借出这五个变量。
(2)书架:我们书籍一定是存放在书架上的。这就需要用一个数组来存储我们的书籍。
(3)使用者:使用者我们设计的是两类,一类是管理员,一类是使用者。这两类实现的功能是不一样的
(4)功能实现:管理者将实现查找、新增、删除、显示、退出系统这五个功能。而使用者将实现查找、借阅、归还、退出系统这四个功能。

为了实现以上多种功能我们创建了三个包
book里面实现book书的定义以及booklist书架的实现;事实上我们可以将方法写在booklist这里,但是为了方便区分以及实现我们单独将实现方法写在一个operation包里面,在这个包里里面实现各种功能;最后定义一个user包里面书写管理者和使用者两个方法。
总览:
在这里插入图片描述

二、book包

2.1Book

我们首先定义好各种变量后,创建构造方法以及getter and setter,代码如下:

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 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;}@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +", type='" + type + '\'' +//", isBorrowed=" + isBorrowed +(isBorrowed == true ? " 已经被借出" : " 未被借出") + // 这里由+拼接,都是字符串所以我们输入文字'}';}
}

这里我们看到isBorrowed,默认是一个false类型,我们最后打印三目运算符加一个判断是true代表已经被借出,false代表未被借出。

2.2BookList

我们首先给书架提供三本书(这是个例子,实际写多少随便你的,不重要哈哈),然后定义一个usedSize来表示这分书架有多少本书活着也可以理解为这个数组有多长

package book;public class BookList {private static final int DEFAULT_SIZE = 10;private Book[] books = new Book[DEFAULT_SIZE];public BookList() {books[0] = new Book("三国演义","罗贯中",89,"小说");books[1] = new Book("西游记","吴承恩",78,"小说");books[2] = new Book("红楼梦","曹雪芹",49,"小说");this.usedSize = 3;}private int usedSize;// 记录当前books数组当中 有多少本书

开始代码类似于C语言中的宏定义,相信聪明的你一眼就能看懂,一眼丁真啊鉴定为是会做的题。
由于usedSize和这个book都是用private修饰的,我们是不是要给他提供getter and setter方法。
usedSize没毛病但是对于book我们编译器提供的方法不能满足我们的需求的,我们需要在指定位置拿到这一本书,编译器给我们提供的方法是找到这一群书所有的书,显然这需要我们自己来写:

package book;public class BookList {private static final int DEFAULT_SIZE = 10;private Book[] books = new Book[DEFAULT_SIZE];public BookList() {books[0] = new Book("三国演义","罗贯中",89,"小说");books[1] = new Book("西游记","吴承恩",78,"小说");books[2] = new Book("红楼梦","曹雪芹",49,"小说");this.usedSize = 3;}private int usedSize;// 记录当前books数组当中 有多少本书public int getUsedSize() {return usedSize;}public void setUsedSize(int usedSize) {this.usedSize = usedSize;}public Book getBook(int pos) {return this.books[pos];}// 上面book使用private封装的,所以我们用这个方法public void setBook(Book book) {this.books[usedSize] = book;}public void setBook(int pos, Book book) {this.books[pos] = book;}
}

最后重载的方法先不要急,后面它一定能用得上😝

三、user包

3.1、User

(1)我们首先不管他到底是管理员还是普通用户至少他们是有共性的比如说姓名啥的,这样我们就可以先写一个User大类然后让他们去继承

(2)在这里注意:我们定义姓名的时候,用public来定义的话太广泛了点用private定义的话只能在当前类里面调用,因此最好的选择就是用protected去修饰。完成后我们给它提供一个构造方法(别忘了在管理员和普通用户中我们,当子类继承父类后我们要帮助父类构造这个方法)。

(3)我们所有的操作的是对象事实上是booklist也就是对暑假的操作,因而我们需要定义一个接口,然后其他功能去继承。user中再提供一个菜单这样的东西,我们来看user的代码:

package user;import Operation.IOPeration;
import book.BookList;public abstract class User {protected String name;protected IOPeration[] ioPerations;public User(String name) {this.name = name;}public abstract int menu(); // 这里面方法不需要写,于是我们就把它定义成一个抽象方法,相应的类也要改成抽象类public void doWork(int choice, BookList bookList) {this.ioPerations[choice].work(bookList);}
}

3.2、Adminuser

管理员操作,我们先将目录写好,这个变更不复杂,搞清楚了要实现的功能就行。然后重写继承的user构造方法,代码如下:

package user;import Operation.*;import java.util.Scanner;public class AdminUser extends User{public AdminUser(String name) {super(name);this.ioPerations = new IOPeration[] {new ExitOperation(),new FindOperation(),new AddOperation(),new DelOperation(),new ShowOperation()};}public int menu() {System.out.println("*****************************");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("*****************************");System.out.println("请输入你的操作:");Scanner scanner = new Scanner(System.in);int choice = scanner.nextInt();return choice;}
}

3.3、Normaluser

普通用户和管理员用户操作是差不多的,我们直接看代码:

package user;import Operation.*;import java.util.Scanner;public class NormalUser extends User{public NormalUser(String name) {super(name);this.ioPerations = new IOPeration[] {new ExitOperation(),new FindOperation(),new BorrowOperation(),new ReturnOperation()};}public int menu() {System.out.println("*****************************");System.out.println("hello "+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();return choice;}
}

这里面的choice暂时不明白没有关系,这就引入到下面很重要的一个操作接口。我们来看

四、Operation包

4.1、IOperation接口

我们都知道所有的操作对象都是书架,那么我们这就好写了,代码:

package Operation;import book.BookList;public interface IOPeration {void work(BookList bookList);
}

后面继承接口方法的当然也要重写

4.2、AddOperattion

新增图书。
(1)新增图书我们第一步继承了接口的work方法后在里面通过Scanner给用户提供模板,书名啥的。
(2)实例化一个book,在新增图书之前我们首先应该判断的是这个书架到底存不存再已经有的书籍,要是有了,我们就不需要再新增图书了。新增成功后currentSize再加1.我们来看代码:

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("输入价格:");int price = scanner.nextInt();System.out.println("输入类型:");String type = scanner.nextLine();Book book = new Book(name,author,price, type);int currentSize = bookList.getUsedSize();for (int i = 0; i < currentSize; i++) {Book tmp = bookList.getBook(i);if(tmp.getName().equals(name)) {System.out.println("已经存在这本书了,不能再放入了");return;}}bookList.setBook(book); //新增图书成功bookList.setUsedSize(currentSize+1);}}

4.3、ShowOperation

其实上面增加功能我们已经写好了显示图书,因为是数组,我们就直接按照数组的模式用循环来一个一个遍历。输出即可:

package Operation;import book.Book;
import book.BookList;public class ShowOperation implements IOPeration{@Overridepublic void work(BookList bookList) {System.out.println("显示所有图书!");int currentSize = bookList.getUsedSize();for (int i = 0; i < currentSize; i++) {Book book = bookList.getBook(i);System.out.println(book);}}
}

4.4、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();for (int i = 0; i < currentSize; i++) {Book book = bookList.getBook(i);if(book.getName().equals(name)) {System.out.println("找到了这本书!");System.out.println(book);return;// 这是假设我们的书名没有重复}}System.out.println("没有这本书!");}/*public void work(BookList bookList) {System.out.println("查找图书!");}*/
}

4.5、DelOperation

要想删除图书首先我们要查找图书。我们定义一个index表示数组下标,然后后移覆盖

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();// 然后要想删除图书首先我们要查找图书。我们定义一个index表示数组下标,然后后移覆盖int index = -1;int currentSize = bookList.getUsedSize();for (int i = 0; i < currentSize; i++) {Book tmp = bookList.getBook(i);if(tmp.getName().equals(name)) {index = i;break;}}//挪动数据for (int j = index; j < currentSize-1; j++) {// 我们要实现的效果就是bookList[j]=bookList[j+1]后面数将前覆盖Book book = bookList.getBook(j+1);// 找到j+1的位置bookbookList.setBook(j, book); // j+1位置的book给j位置,这样覆盖就完成了}//修改sizebookList.setUsedSize(currentSize-1);//因为删除的是对象,所以把最后一个置为nullbookList.setBook(currentSize-1,null);System.out.println("删除成功!");}
}

我们注意为什么第二个j循环我们写的是小于currentSize-1。假如是五个元素,index到第五个元素的时候后面j+1就会有越界情况.
在这里插入图片描述
到这里我们管理员部分就已经写完辣。下面写普通用户部分。查找我们写完了。

4.6、BorrowOperation

这里我们唯一要注意的地方就是查找到图书后将book.setBorrowed()里面写true这样就借阅成功了。我们来看代码:

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); // 默认书是falseif(book.getName().equals(name) && !book.isBorrowed() ) {book.setBorrowed(true);System.out.println("借阅成功");return;}}}
}

4.7、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); // 默认书是falseif(book.getName().equals(name) && book.isBorrowed() ) {book.setBorrowed(false);System.out.println("归还成功");return;}}}
}

4.8、ExitOperation

退出部分作为最后一步,同时也是两种身份共同的功能。与C语言不同的是,Java退出系统是很简单的,如下:

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

五、main

import book.BookList;
import user.AdminUser;
import user.NormalUser;
import user.User;import java.util.Scanner;public class Main {public static User login() {//这里面下面的返回值都是new...类型我们就写他们的父类System.out.println("请输入你的名字:");   //     void没有返回值不行的Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();System.out.println("请输入你的身份:1->管理员   0->普通用户");int choice = scanner.nextInt();if(choice == 1) {return new AdminUser(name);}else {return new NormalUser(name);}}public static void main(String[] args) {BookList bookList = new BookList();User user = login();while(true) {int choice = user.menu();// 根据choice 和user 来确定我到底调用哪个对象的哪个操作(最难)user.doWork(choice, bookList);}}
}

这样子这个图书管理系统我们就写完了。我们来看看运行结果
管理员:
在这里插入图片描述

普通用户:
在这里插入图片描述
在这里插入图片描述


总结:这样我们就完成了一个图书管理系统。实现了几个基本的功能。这就是一个图书管理系统了。
在这里插入图片描述


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

相关文章

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

目录 详解&#xff1a; BookList类&#xff1a; InOperation接口 User类&#xff08;父类&#xff09; 和 Main类&#xff08;这俩要一起看&#xff09; 完整代码 book包 Book类 BookList类 operation包 AddBook类 BorrowBook类 DeleteBook类 FindBook类 Pr…

用java实现图书管理系统。

在学完java基础篇的时候&#xff0c;安排做了一个综合版的java基础项目&#xff0c;可以把之前学到的知识综合运用。 图书管理系统。 一.项目设计到的知识1.MVC设计模式思想&#xff08;分包&#xff09;>项目分包>MVC简单介绍 2.GUI&#xff08;图形化界面&#xff09;3…

Java实现简易版的【图书管理系统】

目录 &#x1f30e;1.分析图书管理系统的功能 &#x1f30d; 2.在IDEA中进行功能类的创建 &#x1f984;2.1 创建一个名为book的包&#xff0c;里面存放书相关的 &#x1f984; 2.2 创建一个名为Operation的包&#xff0c;里面存放对书的所有操作 &#x1f30e; 3.进行用户…

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

图书管理系统在C、C、Java学习中我们都会进行练习来串联我们学习的一些知识以及使用场景&#xff0c;这里跟着我我带大家敲Java版本&#xff01; 结果展示&#xff1a; 这是我们最终实现的图书管理系统&#xff0c;下面我们慢慢来 思路&#xff1a; Java是面向对象的语言特点…

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…