目录
看完的朋友们如果觉得还不错,给博主一个赞吧,你的一个赞,会给博主很大的支持~蟹蟹!
项目代码链接,提取码: 35xa
项目梳理
【项目前提】
掌握java基本语法
熟悉使用流程控制
理解面向对象思想
熟练封装,继承,多态 熟悉使用接口,异常
熟悉使用集合 熟悉掌握I/o流相关操作
【项目内容】
项目功能结构图:
项目功能如下:
(1)读者信息管理:包括读者信息添加和读者信息查询与修改功能。用户登录成功之后,可以浏览所有读者的信息,也可以检索特定读者的信息;同时,可以对读者信息进行维护,包括增加、删除及修改。具体信息包括读者类型(读者的类型决定着他可以借到书的最大数量和最大归还天数)、读者姓名、出生日期、性别、电话、所在院系、注册日期等。(相关存储数据可通过I/O流直接存在文件,可也直接在文件里读的数据)
(2)图书信息管理:包括图书信息添加和图书信息查询与修改功能。用户登录成功之后,可以浏览所有图书信息和检索特定图书的信息;也可以对图书信息进行维护。包括添加图书、删除图书以及修改图书信息。具体信息包括:图书ISBN、图书名称、作者、出版社、出版日期、印刷次数、单价、图书类别等。(相关存储数据可通过I/O流直接存在文件,可也直接在文件里读的数据)
(3)图书借阅管理:包括图书借阅和图书归还功能。图书借阅功能,先输入读者的编号,然后输入要借阅的图书的信息,记录系统当前时间即借阅时间;图书归还功能,输入读者的编号,选择其名下已借阅的图书,判断当前日期即归还日期与借阅日期的差值是否超过了规定的期限,计算罚金,从而进行图书的归还操作。具体信息包括:借阅日期、归还日期、罚金。由于要计算罚金,故需要知道该读者的读者类型,根据类型判断其可借图书天数、可借图书数量等。(相关存储数据可通过I/O流直接存在文件,可也直接在文件里读的数据)
(4)基础信息维护:包括图书类别设置、读者类别设置及罚金设置。图书类别设置,可以对图书的类别进行增加、删除、修改和查询;读者类别设置可以对读者的类别进行增加、删除、修改和查询;罚金设置,可以指定超期一天的罚金标准。(相关存储数据可通过I/O流直接存在文件,可也直接在文件里读的数据)
(5)用户管理 :包括修改密码、用户添加和删除。修改密码,是指当前用户修改自己的密码;用户添加和删除,是对新增和去除系统用户时对用户信息的维护。(相关存储数据可通过I/O流直接存在文件,可也直接在文件里读的数据)
【项目注意】
1、注意命名(类名,包名,方法名,注释等),请严格遵循Java命名规则完成项目。
参考文献:https://blog.csdn.net/yang_best/article/details/42169549
2、每一个业务逻辑操作需要加上日志打印功能(用I/o流实现,比如什么时候进行了增删改等操作,需要有记录,或者发现异常了也需要将信息同步在日志文件里)
3、每个功能模块,如果有异常抛出,需要自定义异常来进行处理
【结构设计】
首先结合功能设计,设计6个实体类(存放在Entity_class文件夹):
图书实体:图书编号ISBN、图书名称、作者、出版社、出版日期、印刷次数、单价、图书类型
图书类型:图书类型编号、图书类型名称
读者实体:读者编号、读者姓名、出生日期、性别、电话、所在院系、注册日期
读者类型:读者类型编号、读者类型名称、可借阅天数、可借阅数量 用户:用户编号、用户名、密码
用户类型:用户账号、用户密码
借阅类型:读者编号、书籍编号、借阅日期、归还日期、罚金
然后根据操作设计,创建操作类(存放在operate文件夹里)
图书信息操作:BookDao
图书类型操作:BookTypeDao
读者信息操作:ReaderDao
读者类型操作:ReaderTypeDao
用户管理操作:UserDao
借阅管理操作:BookBorrowDao
然后创建工具包Tool_class,存放自己创建的异常 BookException 和工具类 TSUtility
再创建一个包存放我们进行读写的txt文件
最后创建我们的视图包view,里面存放了有关界面的类
图书操作界面类:BookView
读者操作界面类:ReaderView
用户操作界面类:UserView
主界面类:Menu
创建后的大致结构如下:
信息管理
用户管理
方法创建
(一)先将 User 类补充完整,创建了三个成员变量 id、name、password,然后创建构造方法和set/get方法
(二)再补充 UserDao 类,这里我创建了如下方法:(注意:这里的异常都是后面写代码时补充上去的,开始创建时不用添加)
//判断账号和密码是否有效
public static Users check(String name, String password) throws IOException, ClassNotFoundException{
}
//存入默认账号和密码(初始化)
public static void initialization() throws IOException{
}
//查询所有信息
public static List<Users> selectUser() throws IOException, ClassNotFoundException{
}
//添加用户信息
public static int insertUser(String name, String password) throws IOException, ClassNotFoundException, BookException{
}
//修改用户信息
public static int updateUserPWD(Integer id, String pwd) throws IOException, ClassNotFoundException, BookException{
}
//删除用户信息
public static int deleteUser(Integer id) throws IOException, ClassNotFoundException, BookException{
}
(三)最后补充 LoginView 类,因为系统是需要登录的,所以我们需要创建两个界面:login 和 usersManagement
//登录界面
public static void login() throws IOException, ClassNotFoundException, EOFException, InterruptedException{
}
//用户管理界面
public static void usersManagement() throws IOException, ClassNotFoundException, BookException{
}
设计思路(整个项目都适用)
敲黑板了!!!重点来了,这是贯穿整个项目的中心思想
(一)读写数据
因为该项目主要是基于文件IO流进行读写的,所以我在工具类中写了两个新的方法,用于从文件中读取和存储数据到文件,这样就避免了代码的重复使用。
而在该项目里我读写数据用的文件IO流主要是对象序列化流,先将所有数据存储到一个集合中,然后将集合存入文件中,因为需要与所有实体类相匹配,我们返回和传入的对象都是设计的Object对象
下列代码就是工具类TSUtility中新建的两个方法
//从文件读数据
public static Object readFile(File file) throws IOException, ClassNotFoundException {
ObjectInputStream ois=new ObjectInputStream(new FileInputStream(file));
Object o=ois.readObject();
ois.close();
return o;
}
//向文件写数据
public static void returnFile(Object obj,File file) throws IOException {
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(file));
oos.writeObject(obj);
oos.close();
}
但是这样使用序列化存储数据后,就发现了一个问题,若文件内容为空,就会报 EOFException 异常,我的解决方法是:先用 try/catch 将该异常捕获并抛出,然后存入初始数据值,这样后面存入其他数据时就不会再报这个异常
(二)增删改查
后面的增删改查操作,都是差不多的一个结构(如下代码),为什么要这么写呢,因为需要判断该成员的数据是否存在于文件中,根据对应的情况作异常的抛出