Java实现简单图书管理系统

article/2025/10/11 0:36:17

目录

利物浦是冠军!

一、图书管理系统的功能

二、图书管理系统的基本实现思路

1、Book包

2、user包

3、operation包

4、利用Main函数来连接所有包

 三、图书管理系统的具体实现

1、Book包

(1)book类

(2)bookList类

2、operation包

(1)IOperation接口的实现

(2)图书管理系统功能实现

3、User包

(1)User类

 (2)AdminUser(管理员)与Normal(普通用户)类

 4、Main

四、总结


利物浦是冠军!

哈喽大家好,欢迎大家一起学习利物浦夺得足总杯之后的第一篇文章!!!

一、图书管理系统的功能

这个图书管理系统,我将会利用Java为源代码实现两种不同的模式,一种是面向管理员开启的菜单和功能,一种是面向所有普通用户来提供的菜单和功能。这些功能包括对于图书的借阅,归还,增加,删除,查找以及显示,接下来的文章我们将会具体用Java源代码来实现这些功能,假如哪块有错误欢迎在评论区指出。

二、图书管理系统的基本实现思路

因为图书管理系统功能比较多,因此我们会建立三个包来封装不同的功能以便于后面的使用。

1、Book包

(1)首先我们要向实现这个图书管理系统,必不可少的就是图书,因此我们需要建立一个Book类来定义一本图书。

(2)接下来就是存储书本的东西,因此我们继续得实现一个BookList类,用来当做书架存储书籍。

2、user包

这个包是用来定义用户功能的,不同的用户有不同的功能

(1)首先我们需要构建一个父类User类,这个父类是一个抽象方法,因为不同的用户拥有不同的功能,然后实现一个操作方法。

(2)接下了我们就可以建立管理员以及普通用户的类了,首先他两是User的子类,然后因为每个人的功能不一样,因此每个人的菜单选项也不一样,实现的功能也不一样,因此我们需要在他们各自的类里面在构建父类User的抽象方法,操作方法父类早已建好因此就不需要我们构建了。

3、operation包

这个包用来用户各种功能的实现

(1)首先我们可以建立一个接口IOperation,在这个接口里面实现一个方法,然后后面的方法直接重载方法就可以。

(2)实现不同的功能,每一种功能都具有接口IOperation,这样每一种方法也就是IOperation类。

4、利用Main函数来连接所有包

上面的的步骤我们都实现了之后,我们就可以开始吧所有功能整合起来实现我们的这个系统,利用Main类来构造一个方法确定用户的类型,然后根据不用的类型安排对应的菜单,这样就是大致的框架,如下图

 三、图书管理系统的具体实现

1、Book包

(1)book类

这个book类主要是存放一本书的具体信息,这个信息包括书名,作者,价格,类型,是否被借出。并且为了安全起见,我们需要吧这些信息全部都用private来修饰,因此我们需要提供很多方法来实现修改和得到数值。

public class Book {private String name;//书名private String author;//作者private double price;//价钱private String type;//类型private boolean isBorrowde;//是否被借出@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +", type='" + type + '\'' +"," + ((isBorrowde == true)?"已经借出":"没有被借出") +'}';}public Book(String name, String author, double 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 double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public String getType() {return type;}public void setType(String type) {this.type = type;}public boolean isBorrowde() {return isBorrowde;}public void setBorrowde(boolean borrowde) {isBorrowde = borrowde;}}

(2)bookList类

这个bookList的功能类似于书架 ,因此他有一个很重要的功能,就是存储书籍,所以我们可以构建一个Book类的数组来存储图书,并且定义一个sizeBook来记录书籍中存储了多少书,因为这两个东西都是用private修饰的,因此我们需要构建方法来使用和修改

public class BookList {private Book []books = new Book[10];//初始化图书存储表private int sizeBook;//实际记录书本个数public BookList(){books[0] = new Book("三国演义","罗贯中",19.2,"小说");books[1] = new Book("活着","余华",29.3,"小说");sizeBook = 2;}/*** 得到存储系统存储书本数量* @return*/public int getSize(){return sizeBook;}/**** @param size 改变书本存储的个数*/public void setBookSize(int size){this.sizeBook = size;}/**** @param pos 必须合法,* @return 返回对应下标的书籍*/public Book getBook(int pos){return books[pos];}/**** @param pos 坐标* @param book 要放入的书本信息*/public void setBook(int pos,Book book){books[pos] = book;}}

2、operation包

这个包主要就是功能的实现

(1)IOperation接口的实现

这个接口会提供一个方法,关于接下来各种类实现的。

public interface Ioperation {void work(BookList bookList);
}

(2)图书管理系统功能实现

a、 AddOperation

public class AddOperation implements Ioperation{@Overridepublic void work(BookList bookList) {Scanner in = new Scanner(System.in);System.out.println("增加图书:");System.out.println("请输入图书的名字:");String name = in.nextLine();System.out.println("请输入图书的作者:");String author = in.nextLine();System.out.println("请输入图书的价格:");double price = in.nextDouble();System.out.println("请输入图书的类型:");String type = in.nextLine();Book book = new Book(name,author,price,type);int pos = bookList.getSize();bookList.setBook(pos,book);bookList.setBookSize(pos++);System.out.println("插入完成!");}
}

b、BorrowOperation

public class BorrowOperation implements Ioperation {@Overridepublic void work(BookList bookList) {System.out.println("借阅图书!");System.out.println("请输入你想借阅图书的名字:");Scanner in = new Scanner(System.in);String name = in.nextLine();for (int i = 0; i < bookList.getSize(); i++) {Book book = bookList.getBook(i);if (book.getName().equals(name)) {book.setBorrowde(true);System.out.println("借阅成功!");return;}}}
}

c、DelOperation

public class DelOperation implements Ioperation {@Overridepublic void work(BookList bookList) {System.out.println("删除图书!");Scanner in = new Scanner(System.in);System.out.println("请输入你想删除图书的名字:");String name = in.nextLine();int size = bookList.getSize();for(int i = 0; i < bookList.getSize();i++){Book book = bookList.getBook(i);if(book.getName().equals(name)){for(int k = i; k < bookList.getSize(); k++){bookList.setBook(k,bookList.getBook(k + 1));
//                    Book book1 = bookList.getBook(k+1);
//                    bookList.setBook(k,book1);}//bookList.setBook(size,null);bookList.setBookSize(size-1);return;}}System.out.println("没有找到需要删除的图书");}
}

 d、DisplayOperation

public class DisplayOperation implements Ioperation{@Overridepublic void work(BookList bookList) {System.out.println("显示图书!");for(int i = 0; i < bookList.getSize(); i++){Book book = bookList.getBook(i);System.out.println(book);}}}

 e、ExitOperation

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

f、FindOperation

public class FindOperation implements Ioperation{@Overridepublic void work(BookList bookList) {System.out.println("查找图书!");System.out.println("请输入你想查找图书的名字:");Scanner in = new Scanner(System.in);String name = in.nextLine();for(int i = 0; i < bookList.getSize();i++){Book book = bookList.getBook(i);if(book.getName().equals(name)){System.out.println("找到了!");System.out.println(book);return;}}System.out.println("没找到!");}
}

g、ReturnOperation

public class ReturnOperation implements Ioperation{@Overridepublic void work(BookList bookList) {System.out.println("归还图书!");System.out.println("请输入你想归还图书的名字:");Scanner in = new Scanner(System.in);String name = in.nextLine();for (int i = 0; i < bookList.getSize(); i++) {Book book = bookList.getBook(i);if (book.getName().equals(name)) {book.setBorrowde(false);System.out.println("归还成功!");return;}}}
}

3、User包

 

在User这个包中我们有两个用户类型,一个是管理员,一个是普通用户,因此他们都具有不同的菜单,不同的菜单实现不同的功能,但是他们的用户姓名都是一样的 ,因此这个User就可以当做一个父类,以父类为基础构建子类

(1)User类

这个是一个抽象父类,我们需要定义一个姓名,并且定义一个以IOperation为基本类型的数组,但是双方菜单都不一样,因此菜单方法需要抽象化,然后就是实现功能的方法,这个方法很巧妙,首先我们可以先利用通过菜单的选项,来实现IOperation数组里面的具体类,并且调用嘞个类里面的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 choose, BookList bookList){this.ioperations[choose].work(bookList);}}

 (2)AdminUser(管理员)与Normal(普通用户)类

管理员具有增加,删除,查找,打印图书的功能,因此我们在管理员的IOperation数组中应该具有这几种类

普通用户也一样,普通用户具有借阅,归还,查找,打印图书的功能。

public class AdminUser extends User{public AdminUser(String name) {super(name);this.ioperations = new Ioperation[]{new ExitOperation(),new AddOperation(),new FindOperation(),new DisplayOperation(),new DelOperation()};}@Overridepublic int menu() {System.out.println(this.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 in = new Scanner(System.in);int choose = in.nextInt();return choose;}
}
public class NormalUser extends User{@Overridepublic int menu() {System.out.println(this.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 in = new Scanner(System.in);int choose = in.nextInt();return choose;}public NormalUser(String name) {super(name);this.ioperations = new Ioperation[]{new ExitOperation(),new DisplayOperation(),new FindOperation(),new BorrowOperation(),new ReturnOperation()};}
}

 4、Main

Main主要作用是把这些功能串起来,并且实现整个图书管理系统的整合,因此他必须具备一个让用户选择自己身份的方法,我们可以构建一个方法为用户提供选择,然后在开始下一步,下一步就比较巧妙了,因为他发生了动态转型,我们可以利用User来调用菜单,这样不同的User就可以实现不同的菜单,接下来就正常运行

public class Main {public static User login(){System.out.println("请输入你的姓名:");Scanner in = new Scanner(System.in);String name = in.nextLine();System.out.println("请选择你要进入的系统: 1.管理员  2.普通用户");int input = in.nextInt();if(input == 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 choose = user.menu();user.doOperation(choose,bookList);}}
}

四、总结

这个图书管理系统,更多的是对于构建一个系统框架的理解,并且利用了多态和继承,还有接口以及 抽象的应用,可以说对于我来说不仅仅试一次挑战,更多的对于一种编程习惯的培养,希望大家可以认真学习,假如代码要是有什么漏洞欢迎指出,谢谢!


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

相关文章

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

MySql常用函数大全(详细)

一、数学函数 &#xff08;1&#xff09;ABS&#xff08;x&#xff09;返回绝对值&#xff1b;例&#xff1a; &#xff08;2&#xff09;PI&#xff08;&#xff09;返回圆周率的函数&#xff0c;默认值为小数后六位&#xff1b;例&#xff1a; &#xff08;3&#xff09;求函…

齐全且实用的MySQL函数使用大全

目录 一、MySQL函数介绍 二、MySQL函数分类 &#xff08;一&#xff09;单行函数 ①字符串函数 ②数学函数 ③日期函数 ④流程控制函数 ⑤系统信息函数 ⑥其他函数 &#xff08;二&#xff09;聚合函数 三、函数使用示例 &#xff08;一&#xff09;字符函数 ①le…

sql注入的小工具介绍

sql注入的小工具介绍 啊D注入工具&#xff1a; pangolin&#xff08;穿山甲&#xff09; 穿山甲&#xff1b;Pangolin&#xff08;中文译名为穿山甲&#xff09;一款帮助渗透测试人员进行Sql注入测试的安全工具&#xff0c;是深圳宇造诺赛科技有限公司(Nosec)旗下的网站安全测…

sql注入检测工具 mysql_SQL注入测试

简介 SQL 注入是一种专门针对SQL语句的攻击方式。通过把SQL命令插入到web表单提交、输入域名或者页面请求的查询字符串中&#xff0c;利用现有的程序&#xff0c;来非法获取后台的数据库中的信息。在web的测试中涉及到的会比较多些。 注入原理 存在注入的原因是后台在编写程序时…

mysql注入扫描网站漏洞工具_网站安全检测,高手必备几款SQL注入工具

按照百度说法&#xff0c;SQL注入是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串&#xff0c;最终达到欺骗服务器执行恶意的SQL命令。 利用SQL注入&#xff0c;攻击者可远程利用SQL注入漏洞&#xff0c;窃取用户数据库数据&#xff0c;包括用户名、密码、登…