2

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

 2 years ago
source link: https://blog.csdn.net/S_yyuan/article/details/120946745
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

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
在这里插入图片描述

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK