目录

今日良言:星光不问赶路人,时光不负有心人

一、效果展示

1.1管理员界面

1.2普通用户界面

二、详细分析

2.1构建框架

2.2连接所有模块

2.3增删等功能实现

三、完整代码


今日良言:时光

一、效果展示

1. 1管理员界面

登录界面+功能界面

 展示图书

 查找图书

 新增图书

 删除图书

 退出系统

1.2.普通用户界面

登录界面+功能界面

查找图书

借阅图书

 归还图书

 退出系统

 二、详细分析

下面我们就来了解一下如何实现该图书系统

2.1构建框架

完整框架图如下:

我们想完成一个项目,最基本的就是构建好框架,就像盖房子一样,第一步永远是打地基

首先,我们知道该图书系统对于使用人员的划分有两类,一类是管理员,一类是普通用户,因此,我们就可以输入数字进行身份选择,对此我们可以创建一个包(user),包里面有三个类:Admin(管理员),NormalUser(普通用户),还有一个抽象类User。User类主要是被用来继承的,User类是父类,子类是Admin和NormalUser,我们可以将对于顺序表的各种功能对于该图书系统的人而言,我们首先需要有一个名字(私有属性name)

后续需要的成员以及方法,我们可以一步一步来添加。

需要注意的是,子类Admin和NormalUser在构造之前需要先帮父类User进行构造,如下图(Adimin):

其次,我们对于每类人可以对该图书系统进行什么操作就难免产生好奇。管理可以查找图书、新增图书、删除图书以及查看所有图书(即:展示图书)  如下图:

而普通用户可以进行的操作有:查找图书、借阅图书以及归还图书,如下图

当清楚使用人员以后,我们就可以对图书进行操作,首先,一本图书的信息有:图书名、作者、价格、类型、以及是否被借阅。因此,我们可以创建一个类(书),里面包含五个私有属性,如下图

因为图书系统有很多书,所以我们会想到使用顺序表,这样的话,对于图书的操作(增删改查)等,就可以对该顺序表进行操作,所以说,我们需要创建一个类(BookList)首先我们需要清楚该类(顺序表)中的成员,书以及下标(usedSize)表示存储书本的容量,如下图:

使用set和get方法访问私有成员,但是,我们这里需要注意一下,如果想要得到一本书的信息,因为是顺序表,我们可以直接进行下标访问,而set方法也需要如下:

我们这里通过BookList的构造方法,来创建三本书,默认一开始就有三本书

对于书籍的操作,我们可以新建一个包book,包下有两个类:Book和BookList

对于顺序表(BookList)的操作,我们可以重新创建一个包(Operation),该包里面就是管理员以及普通用户的操作,当然,也可以直接在BookList类里面添加各种操作。

需要注意的是,我们这里为了巩固使用接口这个知识点,这里创建了一个接口IOperation ,而接口里面只有一个抽象方法work,该方法的参数是BookList  bookList,因为我们要对顺序表进行操作

而后,对于顺序表的各种操作需要继承IOperation接口,来继承这个抽象方法work以此来操作顺序表,需要注意的是,每个继承了IOperation接口的类都需要重写这个抽象方法,我们拿添加类(AddOperation)来举例,如下图:

至此,我们基本上构建好了框架。下面就是对于内部的创建。

2.2连接所有模块

创建一个TextMain类,来进行测试。首先,需要有一个顺序表,实例化一个BookList类的对象booKList,而后,我们需要进行登录操作,该静态方法(login)无参数,但是有返回值,返回值这里我们需要注意一下,我们先输入姓名(name),然后选择身份(管理员 or 普通用户),这里,可以使用向上转型(对于向上转型的知识点,我在上一篇博客仔细解释过,不太理解的可以看一下上一篇博客),用户输入的数字不同,返回值就不同,选择1就返回一个管理员对象,选择0就返回一个普通用户对象,用一个父类的引用user来接收返回值,如下图

发生向上转型以后,跳转到不同的菜单,因此,我们可以在user包中的父类User中可以创建一个抽象方法(menu 菜单),子类NormalUser 和 Admin 需要重写这个menu抽象方法,依次来展示菜单。如下图:

Adimin类重写menu方法

NormalUser类重写menu方法

当菜单展示好以后,我们可以提醒用户输入自己想要进行的操作,所以 这里的menu方法的返回类型为int。 当管理员或者普通用户选择了相应操作后,我们就要对该操作进行实现,因此,在User类中创建一个返回类型是void 的方法 doOperation,该方法的参数有两个:一个BookList bookList,以及一个 int choice,这个choice 就是我们刚刚在对应身份下选择的操作。 在测试类TextMain中调用这个doOperation方法:

这里的循环是为了一直让使用者可以进行多次操作。

User类中实现doOperation方法之前,我们需要创建一个Operation类型的数组operation,该数组中的元素就是使用者选择的各种操作,当子类Admin 和 NormalUser继承了父类后,对该数组进行扩展,如下:

父类User

Admin类

NormalUser类

这样,返回我们刚刚分析的那里,当使用者对菜单进行选择后,调用父类User中的doOperation方法来实现用户选择的操作,如下图

这里的operations[choice]就是用户选择的功能,而后调用每个功能类(增删改查等)中的work方法对顺序表(BookList)进行操作。以上就连接好了所有功能。

2.3增删改查等功能实现

退出系统功能不做解释,如下图:

查找图书功能

实现思路:这个功能实现其实和顺序表查询数据的功能一模一样,只是我们的顺序表中的元素都是Book类的元素。 当使用者输入自己要查询的书名时,我们进行循环查找,从第一个元素开始,每次先得到该位置的书籍的信息,然后进行字符串比较,使用equals方法即可,当书名一样的时候,我们就打印这本书,提醒用户查找成功,如果查找失败,也提醒用户,如下图代码:

新增书籍功能

实现思路:首先提醒管理员输入要添加书籍的信息,这里需要注意的是,当输入类型为int的价格(price)时,输入类型是就需要注意使用next()方法,而不是nextLine()方法,因为当输入价格以后,我们输入回车结束此次输入数据操作,但是如果后面使用的是nextLine()方法的话,会读取空格,因此,在我们还未输入类型之前就结束了输入操作,具体详细解释可参见下面这篇博客:Java中.next()和.nextLine()的区别_zxfly6的博客-CSDN博客_java nextline

因为管理员添加书籍时,默认书籍未被借出,所以无需输入,直接创建一个变量即可,然后创建要添加的这本书,将该书采用尾插法,插入到当前顺序表(bookList)的userSize下标处,然后,让userSize加一即可,最后提醒管理员添加成功。如下图代码:

删除图书功能

实现思路: 首先输入想要删除图书的名字,然后遍历查找,当匹配成功以后结束循环,循环以后,先要进行判断,是因为遍历结束还是因为匹配成功导致循环结束,当如果遍历结束,就提醒管理员无这本书,匹配成功以后,如果要删除这本书,就要挪动顺序表(bookList)  pos位置以后的元素向前覆盖,注意数组越界问题,首先得到pos+1位置的书,然后将其放到pos位置,循环进行操作,当删除以后,usedSize减一,提醒管理员删除成功。如下图代码:

展示书籍功能

实现思路:循环打印书籍即可,如下代码:

 借阅书籍功能

实现思路:跟查询图书功能类似,首先用书输入书名,循环进行匹配,匹配成功以后将这本书的借阅状态设置为“借出”,即可,如下图代码:

归还图书功能

实现思路:与借阅图书功能一样,输入书名后进行匹配,如果匹配成功的话,就将借阅状态设置为“未借出”即可,如下图代码:

三、完整代码

我将完整代码放到了github仓库中,下面链接可自取

Java/实战项目java/TextBook at main · mhy2656810734/Java (github.com)

图书系统(轻松上手)相关推荐

  1. 使用python和pyqt5轻松上手人脸识别系统(含代码)

    使用python和pyqt5轻松上手人脸识别系统(含代码) 一. 环境配置 1.1 python环境配置 1.1.1 安装 anaconda 1.1.2 安装pycharm 1.1.3 配置pip源 ...

  2. 轻松上手系列教程java_小白也能轻松上手的Prometheus教程

    这篇文章将承接此前关于使用Prometheus配置自定义告警规则的文章.在本文中,我们将demo安装Prometheus的过程以及配置Alertmanager,使其能够在触发告警时能发送邮件,但我们将 ...

  3. 实时计算轻松上手,阿里云DataWorks Stream Studio正式发布

    2019独角兽企业重金招聘Python工程师标准>>> Stream Studio是DataWorks旗下重磅推出的全新子产品.已于2019年4月18日正式对外开放使用.Stream ...

  4. 轻松上手写作利器 Markdown:从此文章排版无烦恼

    写作是每个人日常生活和工作中必不可少的内容,无论是写博客.写邮件,还是写报告.写项目方案,都无法避免写作. 在使用 Word 或类似编辑工具写作时,想必你一定纠结过字体.字号.间距等等的排版问题吧! ...

  5. MindSpore Quantum 量子计算编程与实践:轻松上手量子卷积神经网络

    MindSpore Quantum 量子计算编程与实践:轻松上手量子卷积神经网络 在本文中,我们将介绍一些量子信息的基础知识 和 MindQuantum 量子计算框架的基本用法,最后基于 MindQu ...

  6. 尤克里里好不好学?只要3招!没有音乐基础的小白也能轻松上手

    尤克里里凭借其娇小可爱的外形和小清新的音色,吸引了不少的粉丝.很多人对这样一款小乐器产生了浓厚的兴趣,又担心自己没有音乐基础,学不成个样子.其实不用想这么多,尤克里里可是世界上最简单好学的乐器之一了. ...

  7. LiLi USB Creator 便携的 轻松上手使用的Linux安装助手工具

    LiLi(linuxlive) USB Creator是一款便携的,轻松上手使用的Linux安装助手工具,被设计用于创建一个带引导启动功能的应用软件,支持在Windows系统下直接试用运行Linux, ...

  8. 从LFS到BLFS轻松上手

    从LFS到BLFS轻松上手 --关于编译LFS/BLFS的可行性报告 青 铜 镜 严正声明:本贴可能含有危险成份,未满18岁的网友,为了您的身体健康.思想健康和机器健康着想,请勿阅读! 严重警告:如果 ...

  9. Zabbix轻松上手

    zabbix轻松上手 zabbix服务端部署 准备环境 zabbix error问题 zabbix客户端部署 准备环境 zabbix自动发现与自动注册 环境准备 自动发现 自动注册 zabbix-pr ...

最新文章

  1. 如何计算空间一条直线外一点到这条直线的垂足点坐标
  2. 搜索引擎:文本分类——TF/IDF算法
  3. OpenCASCADE可视化:应用交互服务之交互式上下文
  4. android二级联动购物车,Android实现二级购物车的全选加反选、总价功能
  5. iOS利用HealthKit框架从健康app中获取步数信息
  6. 一种用于茶叶病害识别的低阶学习方法
  7. 如何检查CentOS版本– 8种方法
  8. 动态内存函数介绍(malloc, calloc,realloc,free)
  9. 回顾:HTTP/HTTPS/对称加密/非对称加密/session/cookie/token
  10. DirectX 11 Tutorial 1 中文翻译版教程: 在Visual Studio上配置DirectX 11
  11. 数据库的三才阵——人
  12. Modbus的十大问题
  13. 【腾讯TMQ】测试建模兵器谱
  14. 卡通可爱的门户网站登录表单页面
  15. B 站上有哪些很好的学习资源?
  16. 黑马电商项目初始化学习笔记
  17. 如果企业微信不用了怎么解绑手机?
  18. c语言魔除,菜鸟学编程(C语言版)
  19. 武汉大学和厦门大学计算机,武汉大学和厦门大学谁更强,为什么有人说这两所大学名气大于实力...
  20. 一键安装google服务框架(更新最新版google市场)

热门文章

  1. Windows环境下CMD不能正常执行命令
  2. C# OpenCV EmguCV LSD直线检测使用Demo
  3. 应用回归分析之岭回归(Ridge Regression,RR)
  4. 时间序列--自回归模型
  5. 从零搭建MySQL数据库集群(三):搭建混合集群综合应用
  6. 主流计算虚拟化技术/华为的产品介绍
  7. STM32F103的JTAG和SWD接口被禁用,无法下载程序 - 解决办法(亲试可用)
  8. Java初学者练习题
  9. 前端程序员必备的 6 个浏览器插件!
  10. Docker入门指南