文章目录

  • 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.pswp.cn/pingmian/86381.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/86381.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/86381.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【设计模式】策略模式 在java中的应用

文章目录 概述策略模式的定义与应用场景定义应用场景 策略模式的核心设计思想 策略模式的纯Java实现1. 定义策略接口&#xff08;抽象基类&#xff09;2. 设计具体策略类3. 通过示例代码理解策略模式的基本用法 策略模式的优缺点与扩展性分析1. 策略模式在设计中的优势2. 如何让…

Container

目录 一、Containerd 概述 1. 什么是 Containerd 主要特点和功能&#xff1a; 2. Containerd 的起源与背景 二、Containerd 架构 1. 架构概述 2. 核心组件解析 &#xff08;1&#xff09;Storage&#xff08;存储&#xff09; &#xff08;2&#xff09;Metadata&…

C#设计模式-Builder-生成器-对象创建型模式

using System; using System.Collections.Generic;namespace A4_Builder_生成器_对象创建型模式 {// 产品类&#xff1a;最终要构建的复杂对象public class Computer{public string CPU { get; set; }public string GPU { get; set; }public int RAM { get; set; } // GBpublic…

C语言堆内存管理详解:malloc和free的使用指南

在C语言程序设计中&#xff0c;内存管理是一个重要的话题。本文将详细介绍堆内存的分配和释放&#xff0c;重点讲解malloc和free函数的使用方法&#xff0c;并通过实例说明相关注意事项。 一、堆内存与栈内存的区别 在C语言中&#xff0c;内存主要分为堆内存和栈内存&#xf…

探索 Oracle Database 23ai 中的 SQL 功能

探索 Oracle Database 23ai 中的 SQL 功能 介绍目标前提条件 功能 1&#xff1a;使用 FROM 子句功能 2&#xff1a;使用 BOOLEAN 数据类型功能 3&#xff1a;使用 IF NOT EXISTS DDL 子句功能 4&#xff1a;使用 INSERT 插入多行功能 5&#xff1a;使用新的 VALUE 构造函数功能…

SQL(6)

! 会排除null数据 select name from Customer where referee_id ! 2 or referee_id is null; 交叉联结 交叉连接&#xff08;CROSS JOIN&#xff09;-CSDN博客 197. 上升的温度 select a.id from weather as a cross join weather as b on datediff(a.recordDate ,b.recordD…

【Java面试题】cookie、session、jwt/token的异同

以下是对Cookie、Session、Token与JWT的异同的完善分析&#xff0c;结合技术原理、安全性和应用场景进行系统性对比&#xff1a; &#x1f50d; 一、核心概念与工作流程 机制定义工作流程核心特点Cookie客户端存储的小型文本数据1. 服务器通过Set-Cookie响应头下发数据2. 浏览…

数字经济时代科技创业的巨大潜力

2025年3月&#xff0c;42岁的字节跳动创始人张一鸣以655亿美元身家成为中国新首富。这位"80后"企业家白手起家的故事&#xff0c;展现了数字经济时代科技创业的巨大潜力。本文将带您了解张一鸣的成功秘诀&#xff0c;分析网络安全行业的最新趋势&#xff0c;并为计算…

深入剖析Nginx架构及其不同使用场景下的配置

一、Nginx 整体架构概览 1. Nginx简介 Nginx 是采用 C 语言 编写的高性能 Web 服务器、反向代理服务器及邮件代理服务器&#xff0c;特点是&#xff1a;高并发、高可用、低内存占用、模块化设计。 架构核心理念&#xff1a; Master-Worker 多进程模型 事件驱动&#xff08;…

单元测试详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 对于软件测试&#xff0c;我们先按照开发阶段来进行划分&#xff0c;将软件测试分为单元测试、集成测试、系统测试、验收测试&#xff0c;下面我们来聊聊单元测试。…

四款好用的Windows虚拟打印机,文档转PDF

1&#xff0c;Microsoft Print To PDF 2&#xff0c;Foxit Reader PDF Printer 3&#xff0c;Adobe PDF 4&#xff0c;clawPDF 参考文档&#xff1a; https://mp.weixin.qq.com/s/_mt4J2RwhqQE36DRAvc-Rg

《map和set的使用介绍》

引言&#xff1a; 上次我们学习了第一个高阶数据结构—二叉搜索树&#xff0c;趁热打铁&#xff0c;今天我们就再来学习两个数据结构—map和set。 一&#xff1a;序列式容器和关联式容器 前面我们已经接触过STL中的部分容器如&#xff1a;string、vector、list、deque、arra…

PostgreSQL(二十六)分区表管理

目录 一、分区表特点 1、概念&#xff1a; 2、好处&#xff1a; 3、特点&#xff1a; 二、范围分区介绍 1、简介 2、范围分区实验&#xff1a; 三、list分区介绍 1、简介 2、list分区表实验 四、hash分区介绍 1、简介 2、hash分区表实验 五、混合分区介绍 1、简…

概率论中的生日问题,违背直觉?如何计算? 以及从人性金融的角度分析如何违背直觉的?

一、生日问题的概率计算&#xff1a;为何23人就有50%概率撞生日&#xff1f; 1. 问题背景与直觉矛盾 生日问题指&#xff1a;在n个人中&#xff0c;至少有两人生日相同的概率超过50%时&#xff0c;n的最小值是多少&#xff1f; 直觉判断&#xff1a;因一年有365天&#xff0c…

Qt for WebAssembly官方说明文档

链接 Qt for WebAssembly | Qt 5.15

前端自主实现将vue页面转为pdf文件下载

1.vue 转 PDF 在 Vue 项目中将 HTML 页面转换为 PDF 文件是一个常见需求&#xff0c;特别是在需要生成报告或打印页面时。本文将介绍如何使用 html2canvas 和 jspdf 库实现这一功能。 2.安装依赖 首先&#xff0c;我们需要安装两个库&#xff1a;html2canvas 和 jspdf 。可以…

TCP 坚持定时器详解:原理、配置与最佳实践​

一、TCP 坚持定时器基础原理 1.1 坚持定时器的设计目的 TCP 坚持定时器 (TCP Persist Timer) 是 TCP 协议中用于处理接收窗口为零情况的重要机制&#xff0c;其核心设计目的是防止 TCP 连接在窗口更新 ACK 丢失时陷入死锁状态。当 TCP 连接的接收方通告一个窗口大小为 0 的 A…

大厂测开实习和小厂开发实习怎么选

先说选择&#xff0c;这个可以百分百确定选大厂&#xff0c;title很重要。 要想弄清楚那个选择对自己最有利&#xff0c;可以思考下实习的意义是什么&#xff1f; 实习无非就是给简历加分&#xff0c;拿到好offer&#xff0c;高薪offer。 那这就需要思考&#xff0c;简历怎么让…

Unity中的urp和普通的标准渲染管线区别在哪

Unity中的URP&#xff08;Universal Render Pipeline&#xff09;与内置标准渲染管线&#xff08;Built-in Render Pipeline&#xff09;的区别深刻反映了Unity渲染技术的演进方向。以下从架构、性能、功能、工作流等多个维度进行深度分析&#xff1a; 1. 底层架构与设计哲学 标…

Vscode 编写Markdown支持 plantuml书写

1&#xff1a; 下载PlantUml 插件&#xff1a; 2&#xff1a; 安装java https://www.oracle.com/java/technologies/downloads/ 3&#xff1a; 安装Graphviz https://graphviz.org/download/ 4&#xff1a; 下载plantuml.jar https://plantuml.com/zh/download 5&…