基于控制台图书管理系统(Java数据库版)

一、项目简介

        在之前的一个月我们学习了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流的思路基本一样,只不过涉及到了数据库几张表的查询,需要考虑到的判断比较多,这里简单说一下需要考虑到的情况:

  1. 读者表中是否有读者
  2. 是否有该编号的读者
  3. 该读者是否已达到最大借阅数
  4. 图书馆目前是否有图书可供借阅
  5. 是否有该编号的图书
  6. 该编号图书是否被借阅

        通过了这些判断才能借阅书籍。

2.2.2 图书归还

        同理,归还的思路也跟I/O流的思路基本一样,归还的时候需要考虑到几个点,简单说一下:

  1. 是否有读者正在借阅书籍
  2. 是否有该编号的读者
  3. 该读者是否借阅了书籍
  4. 是否存在该编号的书籍
  5. 该读者是否借阅了该编号书籍
  6. 该读者是否超时

        如果读者超时则需先缴纳罚金才能归还书籍。

三、总结

        这个项目做完,对数据库、JDBC的知识有了一个很好的运用,也对一个完整的项目流程有了了解。比如Dao层是负责提取数据,Service层则是对数据进行一个处理,View层就是展示作用。其实做一个项目并不难,难的是开头的决心。当你敲出第一个public的时候,其实就会发现原来敲代码这么有趣。

猜你喜欢

转载自blog.csdn.net/Michelhjx/article/details/122365248