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.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&…