前言

没有使用数据库,没有使用JDBC 单纯的拿列表开发的一个图书管理系统,主要目的在于练习java一些基础的知识,感兴趣的可以下载代码了解一下。

提醒

这个是基于列表的增删改查,列表是在运行的时候会保存数据,但是当程序结束后,一切有恢复原来的模样,在写这个最简单的图书管理系统,用的是简化版的三层架构,为了之后完善方便。

三层架构可以非常快速的将这个系统修改成使用数据库版本,达到真正的存储数据。

软件界面

屏幕截图 2023-03-15 211050

目录结构

dao 数据层

  • Book 存放图书属性
  • ListBook 主要的列表存储功能都在这里

service 业务层

  • xxxxxxxxxx public static void main(String[] args){  Map map = new HashMap();  //定义Map对象  map.put(“apple”,”新鲜的苹果”);  //向集合中添加对象  map.put(“computer”,”配置优良的计算机”);  map.put(“book”,”堆积成山的图书”);  map.put(“time”,new Date());  String key = “book”;  boolean contains=map.containsKey(key);  //判断是否包含指定的键值  if(contains){  //如果条件为真    System.out.println(“在Map集合中包含键名”+key);  //输出信息 }else{    System.out.println(“在Map集合中不包含键名”+key); }}​java

  • Delete 删除图书

  • Updata 修改图书

    image-20230316080700127

view 视图层

  • Index 欢迎界面
  • Login 登录界面 账号admin 密码 123456
  • Ui 主界面

实现功能

(1)添加书籍。

(2)下架书籍。

(3)修改书籍 可修改书名、作者、出版社、出版时间。

(4)借阅书籍。

(5)归还书籍。

(6)查询书籍。

(7)查询日志。

(8)退出程序。

逻辑判断特色

(1)在图书外借的时候不能下架书籍。

(2)已经拥有的图书,不能再继续添加。

(3)字符串验证,输入字符串的时候不会导致程序终止。

(4)登录出错不会中断程序。

(5)借走的书籍不能再借。实现功能

截图演示

image-20230316081712238

image-20230316081805118

image-20230316081849175

2023.3.16更新

1.本次更新加入了日志记录,可以查询用户干了什么,以及图书最重要的功能 借书和还书,以及修复了一些bug;

image-20230316194604495

2.新增加的类

  • Listlog.java
  • Log.java
  • Inbook.java
  • Outbook.java

3.增加了数字验证,输入字符串的时候不会导致程序终止。

4.增加了图书重名验证

2023.3.17 更新

1.修复登录错误程序结束。

2.增加逻辑判断

  • 在图书外借的时候不能下架书籍。
  • 已经拥有的图书,不能再继续添加
  • 增强程序的健壮性

2023.3.20 更新

  • 修复删除后借阅书籍列表出界问题
  • 增加修改书籍数字验证
  • 增加书籍id显示

2023.3.30增加jdbc链接数据库

使用jdbc去对接的话,需要重新构建CRUD 这样难免会花费很长的时间。

为了快速的修改成使用JDBC连接的MySQL,没有改动列表的那些存储,而是把列表整体的存储进去,访问的速度会慢很多,但是学习期间不需要考虑大数量的表查询。

  1. 添加jar包

  2. 对于ListBook进行改动,增加三个方法,去掉列表初始化

    查询book表所有信息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    public static void read() throws SQLException, ClassNotFoundException{
    String url = "jdbc:mysql://localhost:3306/book";
    String username = "root";
    String password = "root";

    // 1. 加载 JDBC 驱动程序
    Class.forName("com.mysql.cj.jdbc.Driver");

    // 2. 获取数据库连接对象
    Connection conn = DriverManager.getConnection(url, username, password);

    // 3. 创建 Statement 对象
    Statement stmt = conn.createStatement();

    // 4. 执行 SQL 查询语句
    String sql = "SELECT * FROM book";
    ResultSet rs = stmt.executeQuery(sql);

    // 5. 处理查询结果集
    while (rs.next()) {
    Book book = new Book(rs.getInt("id"),rs.getString("bookname"),rs.getString("author"),rs.getString("print"), rs.getString("pubdata"),rs.getString("state"),rs.getInt("count"));
    listbook.add(book);
    }

    rs.close();
    stmt.close();
    conn.close();

    for (Book book : listbook) {
    String string = book.toString();
    System.out.println(string);
    }
    }

    更新book表数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public static void updata() throws ClassNotFoundException, SQLException {
String url = "jdbc:mysql://localhost:3306/book";
String username = "root";
String password = "root";

// 1. 加载 JDBC 驱动程序
Class.forName("com.mysql.cj.jdbc.Driver");

// 2. 获取数据库连接对象
Connection conn = DriverManager.getConnection(url, username, password);
//编写sql语句
String sql = "UPDATE book SET bookname=?, author=?, print=?, pubdata=?, state=?,count=? WHERE id=?";
//创建 Statement 对象
PreparedStatement preparedStatement = conn.prepareStatement(sql);
int j=0;
for (Book book : listbook) {
preparedStatement.setString(1, book.getBookname());
preparedStatement.setString(2, book.getAuthor());
preparedStatement.setString(3, book.getPrint());
preparedStatement.setString(4, book.getPubDate());
preparedStatement.setString(5, book.getState());
preparedStatement.setInt(6, book.getCount());
preparedStatement.setInt(7, book.getId());
int i1 = preparedStatement.executeUpdate();
j = j + i1;
//判断是否需要插入数据
if (i1 == 0) {
add(j);

}
}
preparedStatement.close();
conn.close();
}

插入book表数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 public static void add(int j) throws ClassNotFoundException, SQLException {
String url = "jdbc:mysql://localhost:3306/book";
String username = "root";
String password = "root";

// 1. 加载 JDBC 驱动程序
Class.forName("com.mysql.cj.jdbc.Driver");

// 2. 获取数据库连接对象
Connection conn = DriverManager.getConnection(url, username, password);
//编写sql语句
String sql = "insert into book values(?,?,?,?,?,?,?);";
//创建 Statement 对象
PreparedStatement preparedStatement = conn.prepareStatement(sql);
for (int i=j; i <listbook.size(); i++) {
Book book = listbook.get(i);
preparedStatement.setInt(1, book.getId());
preparedStatement.setString(2, book.getBookname());
preparedStatement.setString(3, book.getAuthor());
preparedStatement.setString(4, book.getPrint());
preparedStatement.setString(5, book.getPubDate());
preparedStatement.setString(6, book.getState());
preparedStatement.setInt(7, book.getCount());
preparedStatement.executeUpdate();
}

preparedStatement.close();
conn.close();
}

后续更新

这个项目目前就结束到这里了,日志和用户也非常好增加,以后有时间再弄

视频演示

代码下载

无数据库版本

MySQL数据库版本