图书管理系统【java】

article/2025/10/10 23:41:07

目录

🥇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️⃣DelOperation(删除操作)

5️⃣ShowOperation(显示操作)

6️⃣BorrowOperation(借阅操作)

7️⃣ReturnOperation(归还操作)

8️⃣ExitOperation(退出系统)

⛳6.Main类

🔥7.整体效果


 

🌈今天我们来做一个小东西,目标就是使用学过的知识来实现——《图书管理系统》小练习

🥇1.设计背景

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

00ac3c4f28314ea585e028c11bda6e07.png

🔎2.设计思路

07ffce2ee7a045148a37c81aa9f0bd5a.png

🔑3.book包

📗3.1 Book类的实现

➡️首先我们建立一个 book 的包,在这里我们继续创建一个 book 的类,根据我们的设计思路,我们这里书籍的属性有书名、作者、价格、类型以及是否被借出我们结合封装性,将属性设置为 private 权限,并提供相应的get方法和set方法,空参构造器,以及一个不包含是否被借出的构造器(布尔值的默认类型就是false,可以不进行初始化)并需要提供对应的toString()方法的重写,代码实现如下:

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;}//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;}//toString()方法@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +", type='" + type + '\'' +(isBorrowed == true ? "  已经被借出" : "  未被借出")+'}';}
}

📕3.2 BookList类的实现(书架)

✨作为书架,那么可以放若干本书,那么如何放置若干本书呢?

🙉首先我们提供一个泛型数组,用usedSize来记录当前books数组中有多少本书,并且给出具体的书的参数,供对应的get和set方法

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

🔑4.user包

➡️创建一个user包,这个包有两个用户类型,一个是管理员,一个是普通用户,并且它们的功能各不相同,但是都与要输入用户姓名,因此可以用一个User类当作一个父类

📙4.1 User类的实现

✨首先定义一个用户的名字,同时要提供set和get方法get方法,并提供抽象Operation方法给子类重写使用(用户不同,操作流程不同),同时定义一个抽象方法menu():不同的对象菜单不同

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);//this.iOperations[choice]-------对象}
}

📒4.2 AdminUser(管理员)

✨管理管的操作需要继承用户类,并且实现构造方法,同时实现抽象方法Operation(),包括:退出,查找、新增、删除、显示图书的功能,最后输入具体的操作:

import opera.*;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;}
}

📘4.3 Normal(普通用户)

✨普通用户的操作需要继承用户类,并且实现构造方法,同时实现抽象方法Operation(),包括:退出,查找、借出、归还图书的功能,最后输入具体的操作:

package user;import opera.*;import java.util.Scanner;/*** Created with IntelliJ IDEA.* Description:* User: Lenovo* Date: 2022-11-17* Time: 15:53*/
public class NormalUser extends User{//子类继承父类的构造方法public NormalUser(String name) {super(name);this.iOperations = new IOperation[] {new ExitOperation(),new FindOperation(),new BrrowOperation(),new ReturnOperation()};//拿到当前对象引用,并初始化}@Overridepublic 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;}
}

👜5.opera包

👉建立一个操作包,用来实现具操作的功能,例如添加图书,删除图书等。

1️⃣5.1 IOperation接口的实现

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

2️⃣AddOperation(添加操作)

✨首先我们需要新增一本书,具体的要求之前已经给出,在这里难点就是:我们增加的图书应该放在最后一本书的后边,并且如果这本书存在的话就不需要再次放入。最互放入书籍之后需要将整个书籍数+1

package opera;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++) {Book tmp = bookList.getBook(i);if(tmp.getName().equals(name)) {System.out.println("已经存在这本书,不能再存储了!");return;}}bookList.setBook(book);//修改usedSizebookList.setUsedSize(currentSize+1);}
}

3️⃣FindOperation(查找操作)

✨遍历数组,有两种情况:找到了或者没找到,逻辑思路比较清晰

package opera;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("没有这本书!");}
}

4️⃣DelOperation(删除操作)

✨同样需要遍历数组,找到删除的书籍,在这里一个难点就是:当把书籍的下边删除之后需要将后边的下标依次向前挪动,并在这里挪动的时候不可以发生数组越界。最后书籍数量-1,并且需要将最后一个数组置为null即为没有

package opera;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 tmp = bookList.getBook(i);if(tmp.getName().equals(name)) {index = 1;break;}}//挪动数据for (int j = index; j < currentSize-1; j++) {Book book = bookList.getBook(j+1);bookList.setBook(j,book);}//修改sizebookList.setUsedSize(currentSize-1);//因为删除的是对象 所以把最后一个置为nullbookList.setBook(currentSize-1,null);System.out.println("删除成功!");}
}

5️⃣ShowOperation(显示操作)

✨显示图书比较简单,只需要遍历数组即可

package opera;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);}}
}

6️⃣BorrowOperation(借阅操作)

✨遍历数组,判断其是否已被借出

package opera;import book.Book;
import book.BookList;import java.util.Scanner;public class BrrowOperation 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.isBorrowed()) {book.setBorrowed(true);System.out.println("借阅成功");return;}}}
}

7️⃣ReturnOperation(归还操作)

package opera;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.isBorrowed()) {book.setBorrowed(false);System.out.println("归还成功");return;}}}
}

8️⃣ExitOperation(退出系统)

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

⛳6.Main类

Main类主要是把以上所有功能串起来,并且实现整个图书管理系统

import book.BookList;
import user.AdminUser;
import user.NormalUser;
import user.User;import java.util.Scanner;public class Main {public static User logic() {System.out.println("请输入你的姓名:");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 = logic();while(true) {int choice = user.menu();//动态绑定  1️⃣向上转型;2️⃣重写;3️⃣通过父类引用,调用这个父类和子类重写的方法//根据 choice 和 user 来确定我到底调用哪个对象的哪个操作?user.doWork(choice,bookList);}}}

🔥7.整体效果

c6263a9269244f15867bd6723754accc.png

 

 

 

 

 


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

相关文章

图书管理系统(Java)

&#x1f4da; 一、前言1.1整体框架 二、book包2.1Book2.2BookList 三、user包3.1、User3.2、Adminuser3.3、Normaluser 四、Operation包4.1、IOperation接口4.2、AddOperattion4.3、ShowOperation4.4、FindOperation4.5、DelOperation4.6、BorrowOperation4.7、ReturnOperatio…

图书管理系统(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名的员工列表?…