基于控制台图书管理系统(Java数据库版)
一、项目简介
在之前的一个月我们学习了MySQL、JDBC、三层架构....但是每个知识点都是独立学习的,学完之后总觉得对知识点有点不太熟练使用,于是我把目光瞄向了之前做过的一个,当时实现这个系统的时候我使用的是文件进行存储数据,现在不一样了,学了数据库之后,存储数据不仅仅只是通过文件了,于是我对这个项目进行了重构。
首先我们先来看整体结构:
由于是重构,所以功能相比上次进行了增加。从图中我们可以看出,这个系统可以通过两种身份进行使用,管理员和操作员。
并且对于整个项目的架构使用的是,分别是UI层(界面展示),BLL层(业务逻辑处理),DAL层(数据访问层)。
在其中很多的功能都是基础的增删查改,所以就不用了再过多叙述。接下来讲述一下在项目进行过程中遇到的问题。
二、遇到的问题
2.1 数据输入
2.1.1 图书编号
在设计的时候,我对图书编号的设计是数字+a的形式。但是怎么让程序识别出我输入的编号跟设计的格式一样呢?我把目光转向了正则表达式。这里对正则表达式展开细讲可能有点多。这里就只看如何实现。
public static String readerISBN(){ String ISBN; for (;;){ ISBN = scanner.nextLine(); String pattren = "\d{2}a"; boolean isMatch = Pattern.matches(pattren,ISBN); if (ISBN.equals("")) { System.out.println("不能输入空值!"); continue; } if (isMatch) { break; } else { System.out.println("请按正确的格式输入图书编号!"); } } return ISBN; }
2.1.2 添加图书出版日期
在添加图书出版日期的时候,由于在数据库中存储的数据是以yyyy-MM-dd的格式存储,但输入的时候,有时候对因为格式不正确导致插入失败,所以也对输入作了处理。
public static String readDate() { SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); String pattren = "((\d{4})-(\d{2})-(\d{2}))"; String dStr; while (true) { dStr = new Scanner(System.in).nextLine(); try { sdf1.setLenient(false); sdf1.parse(dStr); boolean isMatch = Pattern.matches(pattren,dStr); if (isMatch) break; else{ System.out.println("请按格式输入日期!"); continue; } } catch (Exception e) { System.out.println("输入错误!请重新输入:"); } } return dStr; }
2.2 图书借阅以及归还
2.2.1 图书借阅
借阅思路跟之前I/O流的思路基本一样,只不过涉及到了数据库几张表的查询,需要考虑到的判断比较多,这里简单说一下需要考虑到的情况:
- 读者表中是否有读者
- 是否有该编号的读者
- 该读者是否已达到最大借阅数
- 图书馆目前是否有图书可供借阅
- 是否有该编号的图书
- 该编号图书是否被借阅
通过了这些判断才能借阅书籍。
2.2.2 图书归还
同理,归还的思路也跟I/O流的思路基本一样,归还的时候需要考虑到几个点,简单说一下:
- 是否有读者正在借阅书籍
- 是否有该编号的读者
- 该读者是否借阅了书籍
- 是否存在该编号的书籍
- 该读者是否借阅了该编号书籍
- 该读者是否超时
如果读者超时则需先缴纳罚金才能归还书籍。
三、总结
这个项目做完,对数据库、JDBC的知识有了一个很好的运用,也对一个完整的项目流程有了了解。比如Dao层是负责提取数据,Service层则是对数据进行一个处理,View层就是展示作用。其实做一个项目并不难,难的是开头的决心。当你敲出第一个public的时候,其实就会发现原来敲代码这么有趣。