当前位置:网站首页 > 编程语言 > 正文

工具类图书名称(工具类图书名称怎么取)



从我开始学习java到如今,也已经有了一个月的时间,那么为了验证一个月里我们学习到的知识是否有真的学习透彻,今天我将试着使用之前学到的几乎所有知识,来试着做一个"图书管理系统"的小小练习,此篇文章也比较适合java的初学者进行阅读和复习哦~

📚 既然想要实现一个" 图书管理系统 ",我们首先就需要思考一下:我们日常生活中的" 图书管理系统 ",应该具备哪些功能呢?

① 用户角度

⭐ 就像图书馆一样,我们的" 图书管理系统 "中也应该要摆放很多的书籍(展示图书)

⭐ 来往的顾客应该能查看各种书籍,并且借书还书

⭐ 那么既然要借书,还书,我们就需要做到查找想要找的书

⭐ 我们还需要做到对书籍个数,以及是否有库存进行判断

⭐ 在当下书籍种类繁多的情况下,我们最好根据书籍热度,来展现图书热门榜为读者提供建议

⭐ 那么图书热度榜,自然就是需要读者来点赞决定,需要实现读者图书点赞和统计个数功能

② 管理员角度

⭐ 首先,管理员和普通用户有着本质的区别,管理员登录是需要密码(以及验证码)的

⭐ 为了便于图书管理,我们应该将图书统计到一起并且一次性展示出来

⭐ 而管理员管理图书,也需要时常下架图书上架图书

⭐ 同时,为了方便管理,管理员也要能查找图书

⭐ 为了防止有时图书导入信息错误,需要做到修改图书信息

⭐ 时下图书种类众多,难免有重名出现,因此我们需要为图书加上书号,通过书号分辨

③ 总结思路图

📚 我们想要实现的效果

📌 思路图:

📕 user 包

这个思路很简单,就是 User,底下分支一个"管理员"和"普通用户"就好了~

📕 operation 包

为了方便操作,以及增加代码的可读性和可维护性,我们可以将(用户)(管理员)方法分别放入两个对应的数组,数组下标代表的就是对应的方法。

而为了将各种方法都产生关联,并能够通过此关联来将其变成数组,我们就需要:

⭐ 创建各种方法的方法类

⭐ 创建接口,使所有方法类实现该接口

⭐ 在方法类中分别实现该方法,最后放在对应的方法数组中

 

📕 book 包

此类也是很简单的定义,既然要管理图书,肯定要定义Book类以及相关信息:

"书名","书号","数量","作者","类型“"等等......

然后我们还需要一个用于存放图书的"书架",BookList:

"书架容量","已有图书数量"等等......

① Book类

📚 Book类所拥有的属性"书名","书号","数量","作者","类型","热度"。

那么我们就写出它们,并且写出对应的get和set方法,以及空参构造无参构造,还有重写toString~

② BookList类

📚 既然是"书架类",那么就需要存储图书

📕 我们可以使用ArrayList<Book>创建一个集合"books";

📕 可以创建一个书店的最大图书容量(不可变);

📕 我们可以在调用构造方法时,初始化一些书籍;

然后实现get set 构造方法~

③ User类

User 是"普通用户"和"管理员"的父类,但虽然是父类,有些方法却不能在User中清晰的定义,比如"当我们想使用 普通用户 或 管理员 时,两者的使用方法与菜单并不相同"

并且,在我们的设计思想中,"管理员"是需要登陆的,而"普通用户"是不需要登陆的,两者之间有着本质的差别~

所以我们的User类需要是一个抽象类,并且决定使用哪个身份的方法DoUser()需要是抽象方法

④ NormalUser(用户)类

对于NormalUser类,是User的子类,所以我们需要在其中实现DoUser()方法,而用户类的使用方法很简单,我们只需要在选择用户类后,new一个用户类对象,并调出其菜单就可以了:

而其中DoUser()就是我们需要的实现选择方法的主体代码,之后我们会通过:

⭐ 使用一个User类变量user接收创建出的(管理员/普通用户);

⭐ 循环调用user.DoUser(),依次进行每次的菜单打印以及选项选择;

怎么样~是不是很巧妙呢(作者是萌新..所以作者觉得还挺巧妙的..)

⑤ AdminUser(管理)类

到了管理员类,就并没有那么普通用户那么简单了,因为在我们的计划当中,管理员是需要进行登录操作的

📚 那么我们来理清一下登录操作的注意点

⭐ 一次程序运行当中,只需要登录一次。

⭐ 验证码的格式为(4个随机大小写的英文字母和1个随机位置出现的数字)。

接下来就让我们一步步的去将管理员类写出来吧~

📕 首先,密码不一定只有一个,所以我们可以使用 ArrayList<Integer> list 创建一个整型变量的集合可以先设置一个初始密码,如果忘记了初始密码,我们可以通过"创建密码"来 add 一个集合成员,作为新的密码:

📕 接下来我们需要做的就是将" 登录 "功能也创建出来,这需要我们" 输入正确的密码 "并且" 输入正确的验证码 ":

验证码:通过Random()的方法,使字母大小写,数字出现位置,字母的Ascii值都变成一个范围内的随机数,由此生成符合要求的五位数验证码:

⭐ 登录:传入 " 密码集合 list ",判断输入的密码是否在list中,然后再随机生成一个验证码,通过用户输入字符串查看是否与验证码相同,如果相同则提示登陆成功,并且使用菜单方法:

📕 然后我们要注意,一次程序运行当中,只需要登录一次,就需要我们定义一个"被static 修饰的 int 类变量计数器"在第一次登陆成功时,使计数器++,防止后续有可能出现的"再次使用菜单时可能会重新登陆..."等失误操作:

最后就是我们的菜单啦,这个和刚刚的普通用户没什么区别,大家看一看格式就好:

由我们最开始的代码思路设计可以看出,在代码运行之初,我们需要依次输入"名字","选择身份",然后通过(直接/间接)的方式进入对应身份菜单通过对应身份user.DoUser() 得到操作的方法下标,然后进行操作...

📚 我们进行一个思路梳理

⭐ 输入名字(1次)

⭐ 输入身份(1次)

⭐ 打印菜单与选择(n次)

这样看就有思路了吧~这就是思路梳理的重要性~

📕 登陆方法 login()

需要注意的是,在login()方法中,我们没法确定,返回值到底使NormalUser还是AdminUser,所以我们使用之前所学到的"向上转型"~使用父类User去接收子类,使子类发生自动的向上转型~

📕 主函数main

我们通过 int choice 接收每一次做出的选择,然后就可以通过这个选择,对图书管理系统中的

bookList进行各种各样的操作啦,至此,普通用户和管理员,以及主函数的基本架构已经基本大

功告成接下来我们只需要一步步的将我们想要实现的方法代码写出来,并通过接口进行分装数

组,最后加入到主函数基本框架中就ok啦~

(感觉只是迈出了一步啊喂...)

初步工作 : 创建方法类数组

首先,我们需要按照最开始的思路导图来创建一个接口IOPeration用于使各种方法类产生关联,从而达到创建方法数组的目的

📌 需要注意的是:

⭐ 因为每个方法类里也只会填入一个方法,所以此接口中只需要一个方法就足够;

⭐ 因为需要对书架中的书进行操作,所以我们需要在接口中的方法设定一个(BookList)参数;

我们定义好了接口之后,就需要将所有的方法类都实现这个接口,并且重写方法

以此类推......

而后我们就可以实现:通过IOPeration[]数组的形式,为"管理员"创建一个存放对应功能的数组,同样也为"普通用户"创建一个存放对应功能的数组;在其中存放实现了IOPeration接口中的work方法的方法,存入IOPeration[]数组中的方法就会自动发生向上转型,从而实现了"多态"的效果;

📌 注意:我们需要在父类User中补充一个定义IOPeration[] ioPerations的方法数组,便于后续"管理员"和"普通用户"进行方法数组实现的操作;

 

然后我们回到(管理员)中,在构造方法中同时为管理员加上"方法数组"

同时回到(普通用户)中,在构造方法中同时为普通用户加上"方法数组":

然后我们再回到main中:续写我们之前马上完成的主函数框架

我们知道,之前的主函数基本框架中,我们写到:

接下来我们就使用 choice 来调用 user 中的 ioPerations[] 数组中的 [choice] 下标对应的方法

这段思路或许有些绕,我们将这些信息总理起来统计成图片,便于大家理解

① ShowBook(展示图书)

展示图书还是比较简单的一步,只需要注意这一点

⭐ 展示图书需要根据书号的先后进行排序;

那么Book类是一个我们自己定义的类,想要让它能够使用Arrays.sort方法,就需要我们对compareTo进行重写,或者自己写几个排序的方法~这也就用到了我们上一篇"抽象类和接口"中所讲到的知识了。

📚 注:(因为我们后面还需要做一个"热度排行榜",所以我们需要有两种排序方式,因此我们不采用通过Comparable接口重写"compareTo"的方法,而是自己创建两个"::sort排序方法"~)

然后通过该排序方法,对Book[]进行排序后输出

我们测试一下:

看来我们排序成功了~

② Leave(离开图书店)

这个就是最简单的方法了,我们只需要一个exit(0)表示程序正常结束就ok啦~

ok呀,没有问题~

③ FindBook(查找图书)

这需要(用户/管理员)输入图书的名字,然后再通过查找图书方法,打印出要找出的书

📌 注意点:

⭐ 有时会出现相同名字的图书,相同名字的书也要列出,并通过书号排序。

⭐ 如生活中的搜索一致,并非完全输入才能显示图书,如:

如果输入"斗破苍穹",会显示出"斗破苍穹缘起","斗破苍穹三上云岚宗","斗破苍穹年番"...等;

⭐ Books[]中不能有多余数据出现,因为"id"是"String类"而非"int类",默认为"null"而非"0",无法使用compareTo重写方法进行排序!

(如果不去除多余数据,当进行排序时会报错)

④ BorrowBook(借阅图书)

对于借阅图书,也并不需要过多繁琐的工作,需要注意的有以下几点

⭐ 由于可能拥有"同名书籍",故不通过书名借阅,而是通过书号借阅;

⭐ 每次借阅需要判断余量,如果此书已无余量则借书失败;

对于已借过的书籍需要在其名字后加上一个"已借";

(书籍有限,同一个用户只能对同一本书借阅一本);

我们可以看到,借阅书籍成功的进行了标记,并且余量也成功的减少了~

⑤ ReturnBook(归还图书)

想要归还图书,就要先有借阅图书的记录,所以归还图书是要基于借阅图书的前提下的

归还图书有以下注意事项

⭐ 通过输入书号查找对应书籍,如果没有(已借)标记,则归还失败;

⭐ 如果拥有(已借)标记,则归还图书,并删除标记,余量+1;

⑥ SupportBook(支持图书)

支持图书,顾名思义,就像我们在网上给博客"点赞!收藏!!关注!!!"一样~

我们需要做的是对"目标图书"进行投票,使其热度up up up~

支持图书的注意事项:

⭐ 其实没啥注意事项...只要能找到图书就能够进行支持

⑦ Rankings(热度排行榜)

实现热度排行榜就需要我们定义一个compareTo方法,使得Arrays.sort()方法会让Book[]数组中的书,热度从高到低排序打印

通过热度进行比较的compareTohot()方法重写:

方法实现:

至此~普通用户的功能就全部完成了

⑧ AddBook(上架图书)

上架图书需要我们输入"书名","书号","上架数量","作者","类型","初始热度"

上架图书需要注意的是:

⭐ "书号"必须是数字,所以我们需要对"书号"进行判断,如果不是数字则上架失败;

⭐ 判断是否已有该"书号",如果已有,则上架失败;

⭐ 还记得我们最开始定义了一个被 static final 保护的图书容量嘛?

 

我们的书店总图书数量不能超过这个图书容量,所以如果(原有书数量 + 上架书数量 > MAX_SIZE)

则上架失败;

⑨ DeleteBook(删除图书)

这个没什么好说的啦~通过id查找图书并删除就好了~

⑩ ReviseBook(修改图书信息)

同样的,先用id找到图书,然后输入新的各种信息

需要注意的是:

⭐ 只能修改书号,书名,热度以外的其他数据;

⭐ 记得判断图书数量,不能超过图书容量;

📖 管理员:

📖 普通用户:

📖 BookMain:

 

📖 book package

Book.java:
 
BookList.java:
 

📖 operation package:

上架图书:
 
借阅图书:
 
删除图书:
 
查找图书:
 
离开图书店:
 
热度排行榜:
 
归还图书:
 
修改图书:
 
展示图书:
 
支持图书:
 

📖 user package:

用户(User):
 
管理员(AdminUser):
 
普通用户(NormalUser):
到此这篇工具类图书名称(工具类图书名称怎么取)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!
                            

版权声明


相关文章:

  • 上一章返回目录怎么弄(返回上一层目录的命令是)2024-12-05 21:45:05
  • vsz是什么缩写(vsl是什么缩写)2024-12-05 21:45:05
  • stan工具(stm工具箱)2024-12-05 21:45:05
  • 三星c7000参数配置(三星c7000怎么样好用吗)2024-12-05 21:45:05
  • autokey(autokey怎么用)2024-12-05 21:45:05
  • latex编辑器难吗(latex文本编辑器)2024-12-05 21:45:05
  • pdfView为什么打印不了(pdf为什么无法打印当前页)2024-12-05 21:45:05
  • 102协议与104协议区别(104规约协议)2024-12-05 21:45:05
  • 获取位置权限怎么设置(获取位置权限怎么设置不了)2024-12-05 21:45:05
  • 群晖 密码忘记(群晖忘记登陆密码)2024-12-05 21:45:05
  • 全屏图片