冒着开除的风险,让我们解密图书管理之校长看完直夸好IO流下篇

1.前言

  鹏之徙于南冥也,水击三千里,抟扶摇而上者九万里,去以六月息者也。上一篇,点击IO流上篇查看我们冒着大不为,为大家分析了基本思想,对于继上一篇的学习,我们初步了解了学校图书馆管理系统的大概框架,相信大家对于这个项目也有了一定的想法,接下来跟进博主走进这背后的是与非吧,让我们来完善它,走进基层,看看校长凭什么夸你 !
在这里插入图片描述

2.结构设计

  相信大家在上一篇博客的最后,都有看见整个图书馆管理系统的模块展示吧,不了解的同学可自行翻阅上一篇博主的博客,至于博主为什么要那么设计呢?嗯,这是一个很清晰的问题,我们现在就来为大家解答,图书馆管理系统的艰辛之路!

设计思想
  让我们一起来看看项目的分析,该项目也是以增、删、改、查为基础,相信大家都不陌生。与之前的项目一,团队调度有区别的就是:该项目的数据是通过IO流来保存的,这样的优势就是:我们保存的数据不会因为重启项目时被清除掉,一直都会在文件里存在。对于数据的保存的角度来看,是个较好的选择。为什么这样设计,而不是放在一个类里面,一个是为了方便展示,也是方便自己修改,提高可读性,所以采用这样一个架构,这也是养成一个好习惯的开始!
1.首先结合功能设计,设计6个实体类(存放在model类中)
  图书实体:图书编号ISBN、图书名称、作者、出版社、出版日期、印刷次数、单价、图书类型
  图书类型:图书类型编号、图书类型名称
  读者实体:读者编号、读者姓名、出生日期、性别、电话、所在院系、注册日期
  读者类型:读者类型编号、读者类型名称、可借阅天数、可借阅数量
  用户:用户编号、用户名、用户密码
  借阅类型:读者编号、书籍编号、借阅日期、归还日期、罚金

2.然后根据操作设计,创建操作类(存放在dao类里)
  图书信息操作:BookDao
  图书类型操作:BookTypeDao
  读者信息操作:ReaderDao
  读者类型操作:ReaderTypeDao
  用户管理操作:UserDao
  借阅管理操作:BookBorrowDao

3.然后创建工具类util.ut,里面存放自定义的异常 BookException 和工具类 TSUtility和一些其他工具

4.接下来创建一个包存放我们进行读写的txt文件,以及相关的日志信息

5.最后创建我们的视图包view,里面存放了有关界面的类
  图书操作界面类:BookView
  读者操作界面类:ReaderView
  用户操作界面类:UserView
  主界面类:Menu
在这里插入图片描述

  之后创建运行代码就OK啦,整个项目的基本框架算是完成了,接下来就剩下具体一个一个板块来实现啦。

3.信息管理

  根据前面需要的相关类,把类下的基本信息完善掉。

3.1用户信息管理

  比如user里面就应该包含id,name,passwowrd,创建它的get,set方法
  然后完成一个UserDao类,在里面把相关方法写进去
  UserDao.:具体包括登录系统的时候,首先,我们进入到图书管理系统,进入的方式就是通过用户的账号和密码的输入匹配,判断账户密码是否有效;查询所有用户信息;添加用户;修改指定编号的用户的密码;删除指定编号的用户信息
  在这里我创建了下面这些方法:

     //判断账号和密码是否有效
    public static Users check(String name, String password) throws IOException, ClassNotFoundException, InterruptedException {}
     //存入默认账号和密码(初始化)
    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, InterruptedException {}
     //删除用户信息
    public static int deleteUser(Integer id) throws IOException, ClassNotFoundException, BookException {}

  接下来就是实现用户登录的 LoginView 类,去实现UserDao类的具体功能

    //登录界面
    public static void loginFace() throws IOException, ClassNotFoundException, InterruptedException, BookException {}
    //登录界面存在账户密码
    public static void login1() throws IOException, ClassNotFoundException, EOFException, InterruptedException, BookException {}
     //用户管理界面
    public static void usersManagement() throws IOException, ClassNotFoundException, InterruptedException {}

特别注意
  在这里设计该功能时,我们选择将数据保存在文件中,也就是用IO流来做。
  确定了IO流,这时,我们可以选择对应的实现方式,(1)集合与IO流结合起来(2)用序列化和反序列化来写。
  1.针对为了简化代码,对于读和写文件,我们可以采用方法的形式,下次就可以直接调用即可,避免了繁琐代码,这对于整个项目都可以采用的方法,
  2.因为我们采用了对象序列化,就会使用Object对象,在这里就会产生一个新的情况,若文件内容为空,就会报 EOFException 异常,因此针对这个的解决办法就是:先用 try/catch 将该异常捕获并抛出,然后存入初始数据值,这样后面存入其他数据时就不会再报这个异常。
  3.在实现序列化和反序列化时,我们序列化的类一定要实现Serializable接口,不然也会抛出异常!

3.2读者信息管理

  读者首先需要的就是完善基本类,Reader包括读者编号、姓名、读者类别、性别、年龄、电话、所在部门、注册日期,然后创建构造方法,还有重写它的to String方法。 ReaderType类包括读者类型名称,可借阅天数,还有可借阅数量。
  接下来就是ReaderDao:完成读者信息添加和读者信息查询与修改功能

    //打印信息
    public static void printInfor(List<Reader> list){}
    //初始化
    public static void initialization() throws IOException, ClassNotFoundException {}
    //读者信息添加
    public static int insertReader(String id, List<ReaderType> list, String name, String age, String sex, String phone, String dept, String reg) throws BookException, IOException, ClassNotFoundException {}
    //查询读者信息
    public static List<Reader> selectReader() throws IOException, ClassNotFoundException {}
    
    public static List<Reader> selectReaderByName(String name) throws IOException, ClassNotFoundException, BookException {}
    
    public static List<Reader> selectReaderByType(String type) throws IOException, ClassNotFoundException, BookException {}
    
    public static List<Reader> selectReaderByDept(String dept) throws IOException, ClassNotFoundException, BookException {}
    //修改读者信息
    public static int updateReader(String id, String typename, String name, Integer age,String sex, String phone, String dept, String reg) throws IOException, ClassNotFoundException, BookException {}
    //删除读者信息
    public static int deleteReader(String id) throws IOException, ClassNotFoundException, BookException {}      

  然后是读者ReaderView类的设计,就是对读者信息的管理,实现界面化,连接上ReaderDao
里面包括了读者类型设置在这里我把罚金系统放在了这里。

设计思路:
  (1)读者信息添加,根据输入的读者编号、姓名、类别、性别、年龄、电话、所在部门、注册日期,完成读者信息的录入。其中要求读者编号和姓名不能为空,读者编号长度为8。
  (2)读者信息查询与修改,用户登录成功之后,可以查询全部读者信息,也可以分别根据读者编号、读者姓名、读者部门、读者类型查询读者信息。读者信息修改根据查询到的读者信息,可以修改各部分。
  (3) 在这里如果文件没有内容,我们也需要先进行初始化的。

3.3图书信息管理

  图书管理部分呢,其实它的设计和读者管理大致差不多,首先就是Book类,BookBorrow类,然后
  BookDao:完成图书信息添加和图书信息查询与修改功能。

    //打印输出
    public static void printInfor(List<Book> list){}
     //初始化
    public static void initialization() throws IOException, ClassNotFoundException {}
    //添加图书信息
    public static int insertBook(String ISBN, String bookname, String author, String publish, String publishdate, String  printtime, String price, BookType bt) throws IOException, ClassNotFoundException, BookException {}
    //查询所有图书信息
    public static List<Book> selectBook() throws IOException, ClassNotFoundException {}
    //根据其他信息查询图书信息
    public static List<Book> selectBookByISBN(String ISBN) throws IOException, ClassNotFoundException, BookException {}
public static List<Book> selectBookByName(String bookname) throws IOException, ClassNotFoundException, BookException {}
    public static List<Book> selectBookByType(String type) throws IOException, ClassNotFoundException, BookException {}
    public static List<Book> selectBookByAuthor(String author) throws IOException, ClassNotFoundException, BookException {}
    public static List<Book> selectBookByPublish(String Publish) throws IOException, ClassNotFoundException, BookException {}
    //修改图书信息
    public static int update(String ISBN, String bookname, String author, String publish, String publishdate, int printtime, double price, BookType bt) throws IOException, ClassNotFoundException, BookException {}
    //删除图书信息
    public static int delete(String ISBN) throws IOException, ClassNotFoundException, BookException {}

设计思路
  (1)图书信息添加,根据录入的图书ISBN、类别、图书名称、作者、出版社、出版日期、印刷次数、单价完成图书信息添加。
  (2)图书信息查询与修改,用户登录成功之后,可以浏览所有图书信息,也可以根据ISBN、图书名称、图书类别、作者、出版社检索特定图书的相关信息。图书信息修改根据查询到的读者信息,可以修改各部分。
  BookBorrowDao包括图书借阅和图书归还功能

    //初始化
    public static void initialization() throws IOException, ParseException, BookException, ClassNotFoundException {}
    //查询指定编号读者的借书信息
    public static List<BorrowBook> selectBorrowByReaderId(String readerid) throws BookException, IOException, ClassNotFoundException {}
    //查看所有借阅信息
    public static void selectAllBorrow() throws IOException, ClassNotFoundException {}
    //图书借阅,(借阅者的编号,图书编号,借阅日期)
    public static int borrowBook(String readerid,String ISBN, String  borrowdate) throws IOException, ClassNotFoundException, BookException, ParseException {}
    //图书归还,(还书者的编号,图书编号,归还日期)
    public static int returnBook(String readerid,String ISBN,String returndate,List<BorrowBook> list) throws  IOException, ClassNotFoundException, ParseException, BookException {}

设计思路
  (1)图书借阅,根据用户输入的读者编号,则显示出该读者的姓名、类别,及该读者的借阅情况。然后录入该读者的最新借阅的图书ISBN,显示出该图书的相关信息,确定借阅后,将该借阅信息录入(包括读者编号、图书ISBN,当前日期即借阅日期)。
  (2)图书归还,图书归还功能,输入读者的编号,则显示出该读者名下已借阅的图书,选中要归还的图书,判断当前日期即归还日期与借阅日期的差值是否超过了规定的期限,计算罚金,从而进行图书的归还操作,更新借阅信息表的归还日期为当前日期。

  然后BookView类就是对上面那个类进行结合实现界面的一个类,就不做展示啦。

4.基础信息维护

  基础信息的维护这里就不作多的阐述,设计思想都是一致的,相比于信息管理,是较简单的。该模块下有,读者类别的设置,图书类别的设置,还有罚金的设置;读者类别,就是当我们再添加读者时,可以将读者类别当做读者类的一个属性添加进去。就比如说,我们当前添加的读者类型为学生,那么就在可以单独设置学生的可借阅图书的天数和图书的数量。同理,图书类别的设置,就可以把图书进行分类。罚金的设置:可以根据不同类型的读者,设置不同类型的罚金。

        //打印信息
        public static void printInfor(List<ReaderType> list){}
        //初始化
        public static void initialization() throws IOException, ClassNotFoundException {}
        //查询全部读者类型信息
        public static List<ReaderType> selectReaderType() throws IOException, ClassNotFoundException {}
         //查询指定类型名的读者类型信息
        public static List<ReaderType> selectReaderType(String type) throws IOException, ClassNotFoundException, BookException {}
        //添加读者类型
        public static int insertReaderType(Integer id, String typename, Integer num, Integer limit) throws IOException, ClassNotFoundException, BookException {}
        //修改读者类型
        public static int updateReaderType(Integer id, String typename, Integer num, Integer limit) throws IOException, ClassNotFoundException, BookException {}
         //删除读者类型
        public static int deleteReaderType(Integer id) throws IOException, ClassNotFoundException, BookException {}

  该模块主要注意的就是: 在某个类型被使用的时候,我们就不能让该类型被修改和删除!(添加一个判断语句,利用循环遍历实现。)
  在罚金设置这里:因为我们需要根据不同的类型来设置罚金,这里要注意的是,罚金的文件读写方式并不是用的对象序列化,所以,在这里我们用Properties通过键值对的形式,可以很好地将罚金设置出来。想要了解该类,可以参考博主之前的文件IO流Properties
在这里插入图片描述

5. 总结

  该项目是我学Java以来自己制作的功能最为复杂,设计内容最丰富的项目,同时也是耗费我时间最久的项目,项目中还有很多地方的代码是可以继续优化的,而且还有很多可以增加用户体验的功能是可以再添加的。
  整个项目的制作过程也是我查缺补漏的一个过程,将我之前学习的比较薄弱的部分给进行了增强,同时也将一些之前学的扎实的部分进行了加固。到此这篇关于Java实战之基于I/O流设计的图书馆管理系统的文章就介绍到这了。下面是关于本次项目的具体代码,有兴趣的欢迎下载,运行体验一下,嘿嘿嘿!!!
链接:https://pan.baidu.com/s/1VVud8D253i1pbFEF6Uhp6A
提取码:yy52
具体代码链接
在这里插入图片描述

  • 75
    点赞
  • 98
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 87
    评论
评论 87
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

铅华殿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值