鹏之徙于南冥也,水击三千里,抟扶摇而上者九万里,去以六月息者也。上一篇,我们冒着大不为,为大家分析了基本思想,对于继上一篇的学习,我们初步了解了学校图书馆管理系统的大概框架,相信大家对于这个项目也有了一定的想法,接下来跟进博主走进这背后的是与非吧,让我们来完善它,走进基层,看看校长凭什么夸你 !
相信大家在上一篇博客的最后,都有看见整个图书馆管理系统的模块展示吧,不了解的同学可自行翻阅上一篇博主的博客,至于博主为什么要那么设计呢?嗯,这是一个很清晰的问题,我们现在就来为大家解答,图书馆管理系统的艰辛之路! |
设计思想
让我们一起来看看项目的分析,该项目也是以增、删、改、查为基础,相信大家都不陌生。与之前的项目一,团队调度有区别的就是:该项目的数据是通过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啦,整个项目的基本框架算是完成了,接下来就剩下具体一个一个板块来实现啦。
根据前面需要的相关类,把类下的基本信息完善掉。
比如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接口,不然也会抛出异常!
读者首先需要的就是完善基本类,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) 在这里如果文件没有内容,我们也需要先进行初始化的。
图书管理部分呢,其实它的设计和读者管理大致差不多,首先就是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类就是对上面那个类进行结合实现界面的一个类,就不做展示啦。
基础信息的维护这里就不作多的阐述,设计思想都是一致的,相比于信息管理,是较简单的。该模块下有,读者类别的设置,图书类别的设置,还有罚金的设置;读者类别,就是当我们再添加读者时,可以将读者类别当做读者类的一个属性添加进去。就比如说,我们当前添加的读者类型为学生,那么就在可以单独设置学生的可借阅图书的天数和图书的数量。同理,图书类别的设置,就可以把图书进行分类。罚金的设置:可以根据不同类型的读者,设置不同类型的罚金。
//打印信息
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
具体代码