当前位置: 首页 > news >正文

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

文章目录

  • 1. 项目功能模块设计
    • 1. 登录与权限控制:
    • 2. 图书管理功能(仅管理员)
    • 3. 用户功能(普通用户):
  • 2. 数据库设计
  • 3. 具体功能实现步骤
    • 步骤 1:扩展 UserService 来管理角色
    • 步骤 2:修改 LoginServlet 来跳转到不同页面
    • 步骤 3:管理员后台页面(admin_home.jsp)
    • 步骤 4:用户首页(user_home.jsp)
    • 步骤 5:添加图书页面(add_book.jsp)
    • 步骤 6:图书搜索与浏览页面(search_books.jsp)
    • 步骤 7: 管理员图书管理页面(manage_books.jsp)
  • 4. 效果展示:
    • 管理员登陆界面:
      • 添加图书:
    • 用户登陆:
      • 搜索图书:
      • 搜索结果:

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();@Overrideprotected 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. 效果展示:

管理员登陆界面:

在这里插入图片描述

添加图书:

在这里插入图片描述

用户登陆:

在这里插入图片描述

搜索图书:

在这里插入图片描述

搜索结果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/260168.html

相关文章:

  • Day 2 学习主题「面向对象 + Pythonic 风格」
  • Linux服务器部署Leantime与cpolar构建低成本团队协作环境
  • 数据分享:汽车行业-汽车属性数据集
  • 英特尔汽车业务败走中国,喊出“All in”才过两个月
  • 测试方法的分类
  • 香港维尔利健康科技集团推出AI辅助医学影像训练平台,助力医护人才数字化转型
  • aws(学习笔记第四十七课) codepipeline-docker-build
  • 深入解析设备管理系统新趋势:物联网与云原生驱动的智能化实践
  • 软件测试之基于博客系统项目的性能测试
  • 大数据赋能智慧城市:从数据洪流到科学规划的“智慧之匙”
  • 互联网医院系统源码解析:如何实现视频问诊、电子处方等核心功能?
  • 详解零拷贝
  • 面试150 验证回文串
  • 七天学会SpringCloud分布式微服务——02——第一个微服务项目
  • Redis-基本命令
  • Tailwind CSS 尺寸控制
  • 兰洋科技上合组织论坛发表专题分享,全球液冷布局引领绿色算力未来
  • 开发基于Jeston Orin Nx 开发版 16G的实现
  • YOLO+ONNX+PyQt打包为exe踩坑记录
  • ASP.NET Core Web API 实现 JWT 身份验证
  • (LeetCode 面试经典 150 题 ) 55. 跳跃游戏 (贪心)
  • 人工智能中的集成学习:从原理到实战
  • 用 PyTorch 构建液态神经网络(LNN):下一代动态深度学习模型
  • 从Yocto中获取源码用传统的方式单独编译
  • 网络分层模型与协议体系技术研究报告
  • 【力扣 中等 C】467. 环绕字符串中唯一的子字符串
  • OBCP第三章 OceanBase SQL 引擎高级技术学习笔记
  • 【C++11】右值引用和移动语义
  • 云效代码仓库导入自建gitlab中
  • 多相机人脸扫描设备如何助力高效打造数字教育孪生体?