一、项目简介
在之前的一个月我们学习了MySQL、JDBC、三层架构....但是每个知识点都是独立学习的,学完之后总觉得对知识点有点不太熟练使用,于是我把目光瞄向了之前做过的一个基于I\O流的图书管理系统,当时实现这个系统的时候我使用的是文件进行存储数据,现在不一样了,学了数据库之后,存储数据不仅仅只是通过文件了,于是我对这个项目进行了重构。
首先我们先来看整体结构:
由于是重构,所以功能相比上次进行了增加。从图中我们可以看出,这个系统可以通过两种身份进行使用,管理员和操作员。
并且对于整个项目的架构使用的是三层架构,分别是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的时候,其实就会发现原来敲代码这么有趣。
本文转载自: https://blog.csdn.net/Michelhjx/article/details/122365248
版权归原作者 Michelhjx 所有, 如有侵权,请联系我们删除。
版权归原作者 Michelhjx 所有, 如有侵权,请联系我们删除。