【Java实战项目】——图书管理系统(基于文件IO流)

看完的朋友们如果觉得还不错,给博主一个赞吧,你的一个赞,会给博主很大的支持~蟹蟹!
在这里插入图片描述
项目代码链接,提取码: 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 类,因为系统是需要登录的,所以我们需要创建两个界面:loginusersManagement

    //登录界面
    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 将该异常捕获并抛出,然后存入初始数据值,这样后面存入其他数据时就不会再报这个异常

(二)增删改查

后面的增删改查操作,都是差不多的一个结构(如下代码),为什么要这么写呢,因为需要判断该成员的数据是否存在于文件中,根据对应的情况作异常的抛出

      
  • 20
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值