引言
各位小伙伴大家好,今天跟大家分享一个小项目,基于文本界面实现图书管理系统(基于IO流实现),这个项目集成了java几乎基础的知识,值得一练,下面我将跟大家一起回顾与分享一下在该项目的心得与注意的点。
目录
一、项目概述
二、项目所遇到的问题及解决方案
问题一:IO流写文件数据方式的选择。
问题二:各类,模块之间的联动。
问题三:一定要注意各个小细节的提示信息
问题四:基础信息维护要与我们的操作类分开。
问题五:借阅问题。
三、项目代码
视频演示:
代码:
系统用户信息管理:能够对系统用户的信息进行管理,包括增加新的系统操作用户,对当前系统用户的密码进行修改,以及删除某一用户。
以及项目模块图:
User模块是用来存放IO流创建的文件的。
这个问题开始拿到手这个项目的时候我是去做的用户管理模块,当时想着用properties集合去做,但是会出现一个问题就是我其他的数据不太好去匹配,所以我选用了ArrayList集合去存储每个对象,再采用序列化的方法将存储了我所有对象的集合序列化到文件里面去,需要使用的时候,反序列化出来集合即可得到我的每一个对象。因此,我推荐使用序列化操作,可以省去很多不必要的步骤,因为每个模块几乎都是增,删,改,查,做好了序列化操作,其他需要序列化的时候调用方法即可。
我这里是将序列化与反序列化做成一个方法,
private static File file = new File("E:\\java练习\\project2librarymanagementsystem\\src\\managesystem\\User\\ReaderType.txt");
/**
* 序列化
*/
public static void serializable(ArrayList typeArrayList) {
try {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
oos.writeObject(typeArrayList);
oos.flush();
oos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 反序列化
*/
public static ArrayList turnSerializable() {
ArrayList typeArrayList = new ArrayList();
try {
if (!file.exists()) {
file.createNewFile();
}
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
//强转集合
typeArrayList = (ArrayList) ois.readObject();
ois.close();
} catch (Exception e) {
System.out.println("文件首次创建成功");;
}
return typeArrayList;
}
将文件路径作为一个静态成员变量,方便调用,该序列化方法仅供参考,可自行设计,思路是这样。
比如说,我的读者类型类和读者实体类是分开的,但是我读者实体类应该要有读者类型类的成员变量,在修改或者是添加新的读者时,直接可以将读者类型定义好的数据添加到读者当中,类似这样:
我们通过选择类型,就直接可以添加相应的读者类型,当然,做这一步你一定要做到类写好了,进行测试的时候去做。罚金和图书类型等以此类推。
例如用户在使用某个功能他能看到什么,他不知道你写的什么,你的所有代码均是为客户服务,因此你的功能应该让别人看懂,让别人会使用。
例如图书的增删改查,我们就采用1就行了,如果我们要修改图书类型等等信息,我们就要进入5菜单,在选择2操作进行增删改查。这里的每一个功能都尽量写一个方法,即方便找bug,也方便重复使用等等。读者和罚金依次类推。
借阅问题是本项目最难的一部分,你需要考虑的问题大致有以下几点:
1.借阅的限制条件,读者的限制阅读天数,限制借阅数量,以及每本书限制借阅的数量。
借阅天数和借阅数量即根据每个读者类型限制的条件去匹配即可,那么每本书的限制借阅数量就应该是全图书馆的借阅数量去匹配,尤其注意这两个限制条件不要搞混。
限制条件如何去做呢,我们相出了一种办法,通过给借阅类给一个状态变量,去控制,如果借了书没还,状态即为false(就是去数有几个false去匹配条件,这样做的好处就是避免了写入文件导致的数据错乱问题),那么我们根据读者ID就可以匹配到该读者有多少本书未还,限制他的借阅数量,根据图书的ISBN码就可以去匹配该图书在馆内有多少本数未还,限制馆内该图书的借阅。也就是书借光了,不能再借了。
当我们还完书之后,状态就应该改成true,因为true我们不去匹配他。还书的时间和罚金匹配也是如此,罚金规则可以自行设置,主要有三点,罚金的规则是根据你还书的时间减去你借书的时间去得出来的,至于发多少,罚金类是有设置的,可以设置其他 规则,这个就看你自己;再者就是如果该读者借书超过自己能借的书,那就不能借了,必须还了才可以借;另外,图书的借阅数量也是如此,借完可以提示已无书可借。
归还之后一定记得改状态为true。
这里放一个演示视频,演示只是走一遍大概流程,细节在代码中去体现,代码放在下方,欢迎大家下载体验,以及发现问题互相交流,谢谢。
基于文本界面的图书管理系统(IO版)
链接:https://pan.baidu.com/s/1uwWSF7oidDQ3zBrIVrIbtg
提取码:sfra
文章最后,一起阅读一下名人名句:打打鸡血,一起加油。
只有经历过地狱般的磨砺,才能练就创造天堂的力量;只有流过血的手指,才能弹出世间的绝响。——泰戈尔