JavaWeb学习——day9(图书管理系统初级)

发布于:2025-06-27 ⋅ 阅读:(13) ⋅ 点赞:(0)

1. 项目功能模块设计

1. 登录与权限控制:

  • 登录后,管理员和用户通过 role 进行权限区分,role 可以是 “admin” 或 “user”。
  • 用户和管理员登录成功后分别跳转到不同的界面:
    • 管理员:跳转到管理后台,进行图书管理。
    • 普通用户:跳转到图书浏览界面,只能进行搜索和查阅。

2. 图书管理功能(仅管理员)

  • 图书上架:管理员可以添加新书,包含书名、分类、价格等信息。
  • 图书下架:管理员可以删除已上架的图书。
  • 图书分类:管理员可以给图书分类,帮助用户进行分类查找。

3. 用户功能(普通用户):

  • 搜索功能:普通用户可以通过关键字搜索图书,查看图书信息。
  • 查阅功能:用户可以查看图书的详细信息,包括书名、作者、简介等。

2. 数据库设计

在数据库中,我们需要几个表来存储数据:

  • users 表:存储用户信息,包括用户名、密码、角色(role)。
  • books 表:存储图书信息,包括书名、作者、价格、分类等。
  • categories 表:存储图书分类信息。

示例表结构:

  • users 表:
CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    password VARCHAR(50) NOT NULL,
    role VARCHAR(20) NOT NULL -- role 为 admin 或 user
);
  • books 表:
CREATE TABLE books (
    id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(100) NOT NULL,
    author VARCHAR(100),
    price DECIMAL(10, 2),
    category_id INT,
    available BOOLEAN DEFAULT TRUE -- true 表示在架,false 表示下架
);
  • categories 表:
CREATE TABLE categories (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL
);

创建好后图表结构如图:
在这里插入图片描述

3. 具体功能实现步骤

步骤 1:扩展 UserService 来管理角色

在 UserService.java 中,添加对 role 的判断,用来区分用户和管理员。

public String checkLogin(String username, String password) {
    User user = userDao.findByUsername(username);
    if (user != null && user.getPassword().equals(password)) {
        return user.getRole();  // 返回用户角色("admin" 或 "user")
    }
    return null;
}

步骤 2:修改 LoginServlet 来跳转到不同页面

在 LoginServlet.java 中,判断登录后返回的 role,并跳转到不同的页面。

@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    private UserService userService = new UserService();

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        
        // 检查用户名和密码
        String role = userService.checkLogin(username, password);

        if (role != null) {
            HttpSession session = request.getSession();
            session.setAttribute("username", username);
            session.setAttribute("role", role);  // 保存用户角色

            if ("admin".equals(role)) {
                response.sendRedirect("admin_home.jsp"); // 管理员跳转到管理后台
            } else {
                response.sendRedirect("user_home.jsp"); // 普通用户跳转到用户首页
            }
        } else {
            response.sendRedirect("fail.jsp");
        }
    }
}

步骤 3:管理员后台页面(admin_home.jsp)

管理员登录后可以进入 admin_home.jsp 页面,进行图书的增删改查操作。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Admin Home</title>
</head>
<body>
    <h2>管理员首页</h2>
    <a href="add_book.jsp">添加图书</a>
    <a href="manage_books.jsp">管理图书</a>
    <a href="logout.jsp">登出</a>
</body>
</html>

步骤 4:用户首页(user_home.jsp)

普通用户登录后,跳转到 user_home.jsp 页面,可以浏览和搜索图书。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>User Home</title>
</head>
<body>
    <h2>欢迎,${sessionScope.username}</h2>
    <a href="search_books.jsp">搜索图书</a>
    <a href="logout.jsp">登出</a>
</body>
</html>

步骤 5:添加图书页面(add_book.jsp)

管理员可以在 add_book.jsp 页面填写图书信息,添加图书到数据库。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.sql.*, com.example.util.JDBCUtils" %> <!-- 导入 JDBC 工具类 -->
<html>
<head>
  <title>添加图书</title>
</head>
<body>
<h2>添加图书</h2>
<form action="add_book" method="post">
  书名:<input type="text" name="title"><br>
  作者:<input type="text" name="author"><br>
  价格:<input type="text" name="price"><br>
  分类:
  <select name="category">
    <%
      try {
        Connection conn = JDBCUtils.getConnection();
        String sql = "SELECT * FROM categories"; // 查询所有分类
        PreparedStatement stmt = conn.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();
        while (rs.next()) {
          String categoryName = rs.getString("name");
          int categoryId = rs.getInt("id");
          out.println("<option value='" + categoryId + "'>" + categoryName + "</option>");
        }
        rs.close();
        stmt.close();
        conn.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }
    %>
  </select><br>
  <input type="submit" value="添加">
</form>
</body>
</html>

步骤 6:图书搜索与浏览页面(search_books.jsp)

普通用户可以在 search_books.jsp 页面输入书名或作者进行图书搜索。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.List, com.example.model.Book" %>
<html>
<head>
  <title>搜索图书</title>
</head>
<body>
<h2>搜索结果</h2>

<!-- 搜索框,供用户输入书名或作者 -->
<form action="search_books" method="get">
  <input type="text" name="query" placeholder="请输入书名或作者">
  <input type="submit" value="搜索">
</form>

<hr>

<!-- 显示搜索结果 -->
<table border="1">
  <thead>
  <tr>
    <th>书名</th>
    <th>作者</th>
    <th>价格</th>
    <th>分类</th>
    <th>操作</th>
  </tr>
  </thead>
  <tbody>
  <%
    List<Book> books = (List<Book>) request.getAttribute("searchResults");  // 获取搜索结果
    if (books != null && !books.isEmpty()) {
      for (Book book : books) {
  %>
  <tr>
    <td><%= book.getTitle() %></td>
    <td><%= book.getAuthor() %></td>
    <td><%= book.getPrice() %></td>
    <td><%= book.getCategoryId() %></td>
    <td>
      <a href="view_book?id=<%= book.getId() %>">查看</a>
    </td>
  </tr>
  <%
    }
  } else {
  %>
  <tr>
    <td colspan="5">没有找到符合条件的图书。</td>
  </tr>
  <%
    }
  %>
  </tbody>
</table>

<br><br>
<a href="admin_home.jsp">返回管理首页</a>  <!-- 管理员才有权限 -->
</body>
</html>

步骤 7: 管理员图书管理页面(manage_books.jsp)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.List, com.example.model.Book" %>
<html>
<head>
  <title>图书管理页面</title>
</head>
<body>
<h2>图书管理页面</h2>

<!-- 显示所有图书 -->
<table border="1">
  <thead>
  <tr>
    <th>书名</th>
    <th>作者</th>
    <th>价格</th>
    <th>分类</th>
    <th>操作</th>
  </tr>
  </thead>
  <tbody>
  <%
    List<Book> books = (List<Book>) request.getAttribute("books");  // 获取传递的图书列表
    if (books != null && !books.isEmpty()) {
      for (Book book : books) {
  %>
  <tr>
    <td><%= book.getTitle() %></td>
    <td><%= book.getAuthor() %></td>
    <td><%= book.getPrice() %></td>
    <td><%= book.getCategoryId() %></td>
    <td>
      <a href="edit_book.jsp?id=<%= book.getId() %>">编辑</a> |
      <a href="delete_book?id=<%= book.getId() %>">删除</a>
    </td>
  </tr>
  <%
    }
  } else {
  %>
  <tr>
    <td colspan="5">暂无图书信息。</td>
  </tr>
  <%
    }
  %>
  </tbody>
</table>

<br><br>
<a href="add_book.jsp">添加新图书</a>  <!-- 进入添加图书页面 -->
<a href="logout.jsp">登出</a>
</body>
</html>

项目结构如图:
在这里插入图片描述

4. 效果展示:

管理员登陆界面:

在这里插入图片描述

添加图书:

在这里插入图片描述

用户登陆:

在这里插入图片描述

搜索图书:

在这里插入图片描述

搜索结果:

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到