Java实现图书管理系统


 一、分析有主要对象

二、整理思路

三、框架的搭建

四、操作内部的具体实现


一、分析主要对象

我们做的图书管理系统的目的,是可以根据不同的用户,所能执行的操作不一样,主要有增删查改图书等操作,选择这些不同的操作会给我们反馈不一样的结果,而我们的主要对象就有书、书架、用户、操作这四个对象。


二、整理思路

书里面可以放书名、作者、价格等变量,书架是用来放书的,因为书有多本,所以我们可以用数组管理起来,也方便后面的调用,我们可以把书和书架放在同一包用户分为普通用户和管理员用户,也可以把普通用户和管理员用户放在同一个包上,在建立一个用户类,利用多态,抽象类方便将他们统一不同的用户操作也会不同,也可以用一个把许多操作放在一起,再利用接口,通过接口把这些操作串起来。


三、框架的搭建

三个包和一个主方法

包下面创建书类和书架类

在书类我们创建相对的变量(名字,作者,类型,价格,bollen类型判断是否被借出,),在创建设置和得到这些变量的方法,以及构造方法初始化这些变量、重写toString方法,改写成我们想要打印显示出来的效果

代码如下

public class Book {private String name;private String author;private String  type;private int price;private boolean isBorrow;//默认falsepublic Book(String name, String author, String type, int price) {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;}@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", type='" + type + '\'' +", price=" + price +((this.isBorrow == true) ? "已经被借出" :"未被借出") +'}';}
}

创建书架类

里面放书,并且默认初始化三本书创建书类的数组,记录书的数量,设置和得到书的方法和书的数量,还有一个设置和得到书的数组的方法

代码如下

public class BookList{private Book[] books;//管理书的数组private int usedSize;//记录书的数量private static final int DEFAULT_CAPACITY = 10;public BookList(){//默认初始化三本书this.books = new Book[DEFAULT_CAPACITY];books[0] = new Book("三国演义" ,"罗贯中" ,"小说", 10);books[1] = new Book("西游记", "吴承恩","小说",9);books[2] = new Book("红楼梦", "曹雪芹", "小说", 19);this.usedSize = 3;}public Book getBook(int pos) {return books[pos];}public Book setBook(int pos, Book book) {return books[pos] = book;}public Book[] getBooks() {return books;}public int getUsedSize() {return usedSize;}public void setUsedSize(int usedSize) {this.usedSize = usedSize;}
}

创建操作的包里面的类,

用一个接口,统一管理起来这些操作类,如下

使用work方法调用这些类

其他类都实现这个IOperation接口

如下

其他的类也一样,就不展示了

用户包

上面两个用户类继承User类,并且把User定义成抽象类

User类内部具体代码如下:

public abstract class User {protected String name;public User(String name) {this.name = name;}protected IOperation[] iOperations;public abstract int menu();public void doOperation(int choice, BookList bookList) {iOperations[choice].work(bookList);}
}
AdminUser类和NormalUser类
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("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;}
}
public class NormalUser extends User{public NormalUser(String name) {super(name);this.iOperations = new IOperation[] {new ExitOperation(),new FindOperation(),new BorrowOperation(),new ReturnOperation()};}@Overridepublic int menu() {System.out.println("*****普通用户******");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;}
}

写Main主方法

首先,我们要实例化一个书架,然后根据提示输入选择,展示出一个菜单供我们选择,我们要写一个登录的方法,而选择不同,返回的类型也不同,这里运用到向上转型,代码如下

public class Main {public static User login() {Scanner scanner = new Scanner(System.in);System.out.println("请输入您的姓名");String name = scanner.nextLine();System.out.println("请输入您的身份 1、管理员用户 2、普通用户->");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();int choice =user.menu();user.doOperation(choice, bookList);}
}

用user和接口把他们全部串起来

通过我们不同的选择,就会调用不同的操作

四、操作内部的具体实现

AddOperation:

public class AddOperation implements IOperation{public 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, type, price);int currentSize = bookList.getUsedSize();int i = 0;for (; i < currentSize; i++) {Book book1 = bookList.getBook(i);if(book1.getName().equals(name)) {System.out.println("有这本书了,不进行存放");}}if(currentSize == bookList.getBooks().length) {System.out.println("书架放满了");return;} else {bookList.setBook(currentSize,book);bookList.setUsedSize(currentSize + 1);}}
}

BorrowOperation:

public class BorrowOperation implements IOperation{public void work(BookList bookList) {System.out.println("借阅图书");Scanner scanner = new Scanner(System.in);System.out.println("请输入您要借阅的图书");String name = scanner.nextLine();int currentSize = bookList.getUsedSize();for (int i = 0; i < currentSize; i++) {Book book = new BookList().getBook(i);if(book.getName().equals(name)) {book.setBorrow(true);System.out.println("借阅成功");System.out.println(book);return;}}System.out.println("您要查阅的图书没有");}
}

DelOperation:

public class DelOperation implements IOperation{public void work(BookList bookList) {System.out.println("删除图书");Scanner scanner = new Scanner(System.in);System.out.println("请输入您要删除的图书");String name = scanner.nextLine();int currentSize = bookList.getUsedSize();int pos = -1;int i = 0;for (; i < currentSize; i++) {Book book = bookList.getBook(i);if(book.getName().equals(name)) {pos = i;//标记要删除书的下标break;}}if(i == currentSize) {System.out.println("没有您要删除的图书");}int j = pos;//下标[j+1]放在[j]上,往前推for (; j < currentSize - 1; j++) {Book book = bookList.getBook(j + 1);bookList.setBook(j, book);}bookList.setBook(j, null);bookList.setUsedSize(currentSize - 1);}
}

ExitOperation:

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

FindOperation:

public class FindOperation implements IOperation{public void work(BookList bookList) {System.out.println("查找图书");Scanner scanner = new Scanner(System.in);System.out.println("请输入您要查找的图书");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("没找到这本书");}
}

ReturnOperation:

public class ReturnOperation implements IOperation{public void work(BookList bookList) {System.out.println("归还图书");Scanner scanner = new Scanner(System.in);System.out.println("请输入您要归还的图书");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("您要归还的图书不存在");}
}

ShowOperation:

public class ShowOperation implements IOperation{public 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);}}
}

都看到这了,观众老爷方便的话点个赞呗

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/111857.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php预约系统源码 网上预约小程序开发源码 整套系统搭建让在线预约更便捷

随着互联网技术的发展&#xff0c;越来越多的服务行业开始通过网上预约系统来实现便捷的客户管理和服务提供。PHP预约系统源码作为一种成熟的技术方案&#xff0c;可以帮助商家快速搭建自己的预约系统&#xff0c;提高工作效率&#xff0c;优化客户体验。 分享一个php预约系统…

插槽指的是什么?插槽的基础用法体验

什么是插槽 插槽(Slot)是 vue 为组件的封装者提供的能力。允许开发者在封装组件时&#xff0c;把不确定的、希望由用户指定的部分定义为插槽。 <template><p>这是MyCom1组件的第1个p标签</p><&#xff01;--通过slot标签&#xff0c;为用户预留内容占位符…

Chatbot到底提供了哪些便利?来看看“中文版Chatbase”

Chatbot的出现可以说是在极大的程度上改变了企业与客户互动的方式。Chatbot凭借其先进的功能和全天候可用性提供了一系列便捷的功能&#xff0c;为企业和客户提供便利和高效。随着自然语言处理和机器学习算法的进步&#xff0c;Chatbot已经发展到可以提供准确和个性化的响应&am…

Python数据库编程:连接、操作和管理数据库

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 Python作为一门多用途的…

GLSL ES着色器 精度限定字

目录 前言 WebGL支持的三种精度 数据类型的默认精度 float类型没有默认精度 预处理指令 在GLSL ES中常用的三种预处理指令。 预定义的内置宏 前言 GLSL ES新引入了精度限定字&#xff0c;目的是帮助着色器程序提高运行效率&#xff0c;削减内存开支。顾名思义&#xf…

K8S:Yaml文件详解及编写示例

文章目录 一.Yaml文件详解1.Yaml文件格式2.YAML 语法格式 二.Yaml文件编写及相关概念1.查看 api 资源版本标签2.yaml编写案例&#xff08;1&#xff09;相关标签介绍&#xff08;2&#xff09;Deployment类型编写nginx服务&#xff08;3&#xff09;k8s集群中的port介绍&#x…

Matlab图像处理-HSI模型

HSI模型 HSI模型是从人的视觉系统出发&#xff0c;直接使用颜色三要素色调(Hue)、饱和度(Saturation)和亮度&#xff08;Intensity&#xff09;来描述颜色。 亮度是指人眼感知光线的明暗程度。光的能量越大&#xff0c;亮度就越大。 色调是颜色最重要的属性。 它决定了颜色的…

R语言绘图-3-Circular-barplot图

0. 参考&#xff1a; https://r-graph-gallery.com/web-circular-barplot-with-R-and-ggplot2.html 1. 说明&#xff1a; 利用 ggplot 绘制 环状的条形图 (circular barplot)&#xff0c;并且每个条带按照数值大小进行排列。 2 绘图代码: 注意&#xff1a;绘图代码中的字体…

软件系统的验收方法

软件系统的验收是确保软件按照规格要求并满足用户需求的过程。验收过程通常涉及与项目利益相关者&#xff08;包括客户、用户和项目团队&#xff09;一起进行各种测试和评估。以下是一些常见的软件系统验收方法&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#…

地图结构 | 详解八叉树Octomap原理与Rviz可视化

目录 0 专栏介绍1 点云地图的局限性2 八叉树基本原理3 Octovis可视化4 点云转化octomap5 ROS Rviz可视化 0 专栏介绍 &#x1f525;附C/Python/Matlab全套代码&#x1f525;课程设计、毕业设计、创新竞赛必备&#xff01;详细介绍全局规划(图搜索、采样法、智能算法等)&#x…

图像处理:双边滤波

1. 双边滤波 公式含义&#xff1a; q&#xff1a;输入的像素点&#xff0c;它代表上图中55的方框中其中的一个像素点 : 空间域核 : 图像像素域核 (两个二维高斯函数&#xff0c;二维高斯函数的公式为:) 进行了一些小的改动&#xff0c;让他们更加符合我们的要求&#xff0…

Java之String类

作者简介&#xff1a; zoro-1&#xff0c;目前大二&#xff0c;正在学习Java&#xff0c;数据结构等 作者主页&#xff1a; zoro-1的主页 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f496; Java之String类 String的构造String底层String之间…