news 2026/10/6 15:08:09

JSP+SQL Server课设文档实战:从E-R图到可运行系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JSP+SQL Server课设文档实战:从E-R图到可运行系统

简介:这份资源是面向计算机专业学生与课程设计学习者的软件工程课设文档,主题为企业员工信息管理系统,适合正在准备课程设计、需要参考完整项目文档结构与写作思路的同学。文档围绕员工管理效率低下、手工操作易出错等现实问题展开,采用模块化设计思想,在Windows XP环境下以SQL 2005为数据库平台,使用jsp实现数据输入、修改、存储与查询等功能,并涵盖系统特点、国内外研究现状及开发工具简介等内容。资源包共1个doc文件,大小约247KB,即一份完整的Word版课设报告,可直接用于格式参考与内容借鉴。目前已有47人学习下载。读者可从中获取完整的课设文档框架、需求分析与系统设计表述、数据库与jsp技术介绍,以及摘要、引言、研究现状等章节的写作范例,便于快速搭建自己的课程设计文档体系。

1. 一份 JSP+SQL Server 2005 的课设文档,为什么现在还有人翻出来用

如果你正在做软件工程课程设计,选题是「企业员工信息管理系统」,技术栈被指定为 JSP + SQL Server,那你大概率已经翻到过这份 Word 文档。它不是源码包,也不是可运行项目,而是一份完整的课设报告:从可行性研究、需求分析、数据流图、E-R 图,到概要设计、详细设计、系统测试,最后还有一节经验与教训。全文围绕员工、部门、职位、签到四个核心实体展开,模块划分清晰,文档结构基本对齐软件工程课程设计的评分点。

这份资源的实际价值在于:它把「一个课设该写什么」这件事讲全了。很多人卡的不是代码,而是文档不知道按什么框架写、需求分析写到什么颗粒度、测试章节怎么凑够篇幅。这份文档给了一个可以直接参照的骨架。适合两类人:一是需要快速搭出课设报告结构的学生,二是想拿它当需求模板、再自己补代码的开发者。下面按「文档怎么拆、环境怎么搭、表怎么建、坑在哪」的顺序讲。

2. 把 Word 文档拆成可执行的技术资产:从章节结构到数据库表设计

2.1 文档里真正能落地的三类内容

这份文档表面上是报告,实际上藏了三类可提取的资产。第一类是需求描述,比如「管理员能对员工信息进行增加、删除、查询和修改」,这句话直接对应一个 CRUD 模块。第二类是数据模型,文档里给了员工、部门、职位、签到四张 E-R 图,实体和联系都标了,照着转成建表语句就行。第三类是测试用例思路,界面测试、功能测试、需求测试、性能测试四类,每类都列了具体检查点,比如删除时要点「取消」看数据是否真的没删。

我一般会先把文档通读一遍,用不同颜色标出这三类内容。需求描述用蓝色,数据模型用绿色,测试点用黄色。标完之后你会发现,真正需要自己补的只有代码实现和界面,文档已经把「做什么」和「怎么验」写清楚了。

2.2 从 E-R 图到建表语句的转换

文档里的 E-R 图是图片形式,没法直接导出 SQL。常见做法是照着图手动写建表语句。四张表的关系是:一个员工对应一个部门、一个职位、一条签到记录。下面是我按文档描述整理的建表脚本,字段名和类型按课设常见习惯补全:

-- 部门表:文档中部门信息管理模块对应 CREATE TABLE department ( dept_id INT PRIMARY KEY IDENTITY(1,1), -- 部门编号,自增主键 dept_name NVARCHAR(50) NOT NULL, -- 部门名称 dept_desc NVARCHAR(200) -- 部门描述,可选 ); -- 职位表:文档中职位信息管理模块对应 CREATE TABLE position ( pos_id INT PRIMARY KEY IDENTITY(1,1), -- 职位编号 pos_name NVARCHAR(50) NOT NULL, -- 职位名称 pos_level INT DEFAULT 1 -- 职位等级,默认1 ); -- 员工表:核心表,外键关联部门和职位 CREATE TABLE employee ( emp_id INT PRIMARY KEY IDENTITY(1,1), -- 员工编号 emp_name NVARCHAR(30) NOT NULL, -- 姓名 emp_gender NVARCHAR(2), -- 性别 emp_phone NVARCHAR(20), -- 联系电话 dept_id INT FOREIGN KEY REFERENCES department(dept_id), -- 所属部门 pos_id INT FOREIGN KEY REFERENCES position(pos_id), -- 所属职位 hire_date DATE -- 入职日期 ); -- 签到表:文档中签到管理模块,支持加一和清零 CREATE TABLE attendance ( att_id INT PRIMARY KEY IDENTITY(1,1), -- 签到记录编号 emp_id INT FOREIGN KEY REFERENCES employee(emp_id), -- 员工 att_count INT DEFAULT 0, -- 签到次数 last_date DATE -- 最后签到日期 );

这段脚本的关键点在于外键约束。文档里明确写了「一个员工对应一个职位,一个员工对应一个部门」,所以 employee 表里 dept_id 和 pos_id 都设成外键。签到表的 att_count 字段对应文档里说的「签到次数加一、签到次数清零」两个操作,用 UPDATE 语句就能实现,不需要单独建流水表。如果你的课设要求记录每次签到明细,那就再加一张 attendance_log 表,把每次操作记下来。

2.3 管理员登录模块的最小实现

文档里管理员登录模块的描述是:输入正确用户名密码进入系统,错误则停留在登录页。用 JSP 实现的话,核心就是一个表单提交加一次数据库查询。下面是最小可用版本:

<%@ page language="java" contentType="text/html; charset=UTF-8" %> <%@ page import="java.sql.*" %> <% // 获取表单提交的用户名和密码 String username = request.getParameter("username"); String password = request.getParameter("password"); if (username != null && password != null) { // 数据库连接,按你本机 SQL Server 配置改 String url = "jdbc:sqlserver://localhost:1433;databaseName=emp_db"; String dbUser = "sa"; String dbPass = "你的密码"; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); conn = DriverManager.getConnection(url, dbUser, dbPass); // 参数化查询,避免拼接 SQL String sql = "SELECT * FROM admin WHERE username=? AND password=?"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, username); pstmt.setString(2, password); rs = pstmt.executeQuery(); if (rs.next()) { // 登录成功,写入 session session.setAttribute("adminName", username); response.sendRedirect("employee_list.jsp"); } else { out.println("<p style='color:red'>用户名或密码错误</p>"); } } catch (Exception e) { out.println("数据库连接异常:" + e.getMessage()); } finally { if (rs != null) rs.close(); if (pstmt != null) pstmt.close(); if (conn != null) conn.close(); } } %>

这里有几个参数需要按你的环境改:url 里的 databaseName 改成你实际建的库名,dbUser 和 dbPass 改成你的 SQL Server 账号。注意文档里写的是 SQL Server 2005,驱动类名是com.microsoft.sqlserver.jdbc.SQLServerDriver,如果你用的是更早的 JDBC 驱动,类名可能是com.microsoft.jdbc.sqlserver.SQLServerDriver,这个要看你导入的 jar 包版本。登录成功后跳转到 employee_list.jsp,这个页面负责展示员工列表,对应文档里员工管理模块的查询功能。

3. 环境搭建与 Tomcat 部署:从 SQL Server 2005 到可运行页面

3.1 数据库连接配置的三种方式

文档里运行环境写的是 Win2k Server + SQL Server 2000/2005 + Tomcat。现在很少有人用 Win2k 了,但 SQL Server 2005 在 Windows 10/11 上还是能装的,只是需要手动开启 TCP/IP 协议。我一般会先确认三件事:SQL Server 服务是否启动、TCP/IP 是否启用、端口是不是 1433。

连接配置有三种常见写法。第一种是直接写在 JSP 里,像上面那段代码一样,优点是简单,缺点是改密码要翻每个文件。第二种是写一个 DBUtil 类,把连接逻辑抽出来:

// DBUtil.java:统一管理数据库连接 public class DBUtil { private static final String URL = "jdbc:sqlserver://localhost:1433;databaseName=emp_db"; private static final String USER = "sa"; private static final String PASS = "你的密码"; static { try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } } // 获取连接 public static Connection getConnection() throws SQLException { return DriverManager.getConnection(URL, USER, PASS); } // 关闭资源,按 ResultSet -> Statement -> Connection 顺序 public static void close(Connection conn, Statement stmt, ResultSet rs) { try { if (rs != null) rs.close(); } catch (SQLException e) {} try { if (stmt != null) stmt.close(); } catch (SQLException e) {} try { if (conn != null) conn.close(); } catch (SQLException e) {} } }

第三种是用连接池,比如 Tomcat 自带的 DBCP。课设级别用第二种就够了,代码量少,调试也方便。DBUtil 里的 close 方法要注意关闭顺序,先关 ResultSet 再关 Statement 最后关 Connection,顺序反了在某些驱动下会报错。

3.2 Tomcat 部署的目录结构与 web.xml 配置

JSP 项目在 Tomcat 里的标准目录结构是这样的:

emp-system/ ├── src/ # Java 源码,编译后放到 WEB-INF/classes ├── WebContent/ │ ├── WEB-INF/ │ │ ├── web.xml # 部署描述符 │ │ ├── classes/ # 编译后的 class 文件 │ │ └── lib/ # 依赖 jar 包 │ ├── login.jsp # 登录页 │ ├── employee_list.jsp # 员工列表 │ ├── employee_add.jsp # 新增员工 │ └── ...

web.xml 里最少要配一个欢迎页和 session 超时:

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5"> <welcome-file-list> <welcome-file>login.jsp</welcome-file> </welcome-file-list> <session-config> <session-timeout>30</session-timeout> </session-config> </web-app>

部署的时候,把整个 emp-system 文件夹拷到 Tomcat 的 webapps 目录下,启动 Tomcat,访问http://localhost:8080/emp-system/就能看到登录页。如果 404,先检查文件夹名和访问路径是否一致;如果 500,看 Tomcat 日志里有没有 ClassNotFoundException,通常是 jar 包没放到 WEB-INF/lib 下。

3.3 员工信息增删改查的 SQL 实现

文档里员工管理模块要求实现增加、删除、改动、查询四个功能。下面以查询和新增为例,给出对应的 SQL 和 JSP 调用方式:

-- 查询:支持按姓名模糊查询,对应文档中「按单一查询条件进行查询」 SELECT e.emp_id, e.emp_name, e.emp_gender, e.emp_phone, d.dept_name, p.pos_name, e.hire_date FROM employee e LEFT JOIN department d ON e.dept_id = d.dept_id LEFT JOIN position p ON e.pos_id = p.pos_id WHERE e.emp_name LIKE '%' + ? + '%' ORDER BY e.emp_id DESC; -- 新增:插入员工记录 INSERT INTO employee (emp_name, emp_gender, emp_phone, dept_id, pos_id, hire_date) VALUES (?, ?, ?, ?, ?, ?); -- 删除:按员工编号删除 DELETE FROM employee WHERE emp_id = ?; -- 修改:按员工编号更新信息 UPDATE employee SET emp_name=?, emp_gender=?, emp_phone=?, dept_id=?, pos_id=?, hire_date=? WHERE emp_id=?;

查询语句用了 LEFT JOIN,这样即使员工没分配部门或职位,记录也能查出来。文档里提到「多个查询条件组合查询」,如果要支持按部门+职位组合筛选,就在 WHERE 后面加AND d.dept_id=? AND p.pos_id=?,参数按顺序传进去。删除操作要注意,如果签到表里有该员工的记录,直接删 employee 会触发外键约束报错。常见做法是先删签到记录再删员工,或者把外键设成 ON DELETE CASCADE。

4. 课设文档写作避坑:从测试章节到 E-R 图的五个翻车点

4.1 测试章节写成功能复述

现象:测试章节把功能模块又描述了一遍,比如「测试了员工新增功能,可以新增员工」。原因:没理解测试章节要写的是「怎么测、预期什么、实际什么」。解决:按文档里已有的四类测试框架来写,每类至少给一个具体用例。比如界面测试可以写「登录页输入错误密码,预期停留在登录页并提示错误,实际符合预期」。功能测试可以写「删除员工时点击取消,预期数据不删除,实际数据仍在」。

4.2 E-R 图属性标注不全

现象:E-R 图只画了实体框和联系线,没标属性。原因:画图时只关注了实体关系,忘了属性是 E-R 图的三要素之一。解决:每个实体至少标出主键和两到三个普通属性。员工实体标 emp_id、emp_name、emp_gender;部门实体标 dept_id、dept_name;职位实体标 pos_id、pos_name。联系上如果有属性也要标,比如签到联系上的签到次数。

4.3 数据流图层次混乱

现象:数据流图里同时出现了顶层图和二层图的内容,外部实体和加工混在一起。原因:没按自顶向下逐层分解的方法画。解决:顶层图只画一个加工(整个系统)和外部实体(管理员),第一层分解出登录、员工管理、部门管理、职位管理、签到管理五个加工,第二层再对每个加工细化。文档里给了图 2 和图 3,照着那个层次来就行。

4.4 可行性研究写成技术堆砌

现象:可行性研究章节大段介绍 JSP 和 SQL Server 的特点,没落到「这个项目为什么可行」。原因:把开发工具简介的内容复制过来了。解决:可行性研究分经济、操作、技术、运行四个方面,每个方面用两三句话说明「成本可接受、操作简单、技术能实现、环境能跑起来」就够了。文档里 3.1 和 3.2 是工具简介,二里的可行性研究是另一回事,别混在一起写。

4.5 参考文献与正文引用脱节

现象:正文里写了「根据某某理论」,但参考文献列表里找不到对应条目。原因:写的时候先写了正文,参考文献最后凑的。解决:正文里每引用一个观点,就在句末加 [1] 这样的标注,最后按标注顺序整理参考文献。课设至少引 5 篇,其中 2 篇可以是教材,3 篇可以是期刊或会议论文。注意参考文献格式要统一,GB/T 7714 是课设常用标准。

5. 从课设到可演示系统:三个让答辩加分的细节

5.1 给签到模块加一个日期校验

文档里签到模块只有「加一」和「清零」两个操作,答辩时老师很容易问「同一天重复签到怎么办」。加一个日期校验就能堵住这个口子:

// 签到加一:先查最后签到日期,不是今天才允许加 public boolean checkIn(int empId) { String sql = "SELECT last_date FROM attendance WHERE emp_id=?"; // ... 查询得到 lastDate java.sql.Date today = new java.sql.Date(System.currentTimeMillis()); if (lastDate != null && lastDate.equals(today)) { return false; // 今天已签到,不允许重复 } String update = "UPDATE attendance SET att_count=att_count+1, last_date=? WHERE emp_id=?"; // ... 执行更新 return true; }

这段逻辑的关键是lastDate.equals(today)这个判断。java.sql.Date 的 equals 比较的是日期值,不是对象引用,所以可以直接用。如果 last_date 字段允许为空,要先判空再比较,否则会抛 NullPointerException。

5.2 用过滤器统一处理中文乱码

JSP 项目最常见的问题就是中文乱码。表单提交的中文到后台变成问号,或者数据库里的中文查出来是乱码。与其在每个 JSP 里写request.setCharacterEncoding("UTF-8"),不如加一个过滤器:

// EncodingFilter.java:统一设置请求和响应编码 public class EncodingFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { req.setCharacterEncoding("UTF-8"); resp.setContentType("text/html;charset=UTF-8"); chain.doFilter(req, resp); } public void init(FilterConfig config) {} public void destroy() {} }

web.xml 里配一下:

<filter> <filter-name>encoding</filter-name> <filter-class>com.emp.filter.EncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

url-pattern 用/*表示拦截所有请求。注意过滤器只对 POST 请求的 setCharacterEncoding 有效,GET 请求的中文乱码要在 Tomcat 的 server.xml 里给 Connector 加URIEncoding="UTF-8"。

5.3 答辩演示前必做的三项检查

第一,数据库连接是否用了本机地址。如果你在宿舍电脑上开发,答辩教室的电脑 IP 不一样,localhost 可能连不上。提前把数据库脚本导出成 .sql 文件,到答辩机上重新执行一遍。第二,Tomcat 端口是否被占用。8080 端口经常被其他软件占用,改成 8081 或 9090 都行,改完记得同步改访问地址。第三,演示数据是否够看。员工表至少准备 10 条记录,部门 3 到 5 个,职位 3 到 5 个,签到记录每人 2 到 3 条。数据太少演示查询和分页时页面会空,老师一看就觉得功能没做完。

我每次带课设答辩前都会把这三项过一遍,尤其是数据库脚本重新执行这一步,血泪经验是有一年答辩机上的 SQL Server 版本和开发机不一样,备份文件还原失败,当场手忙脚乱。从那以后我每次换机器演示都强制走一遍「导出脚本→新建库→执行脚本→改连接配置→启动 Tomcat」这个流程,再也没翻过车。希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/6 15:07:28

FastAPI GPU推理并发控制:避免显存溢出与OOM实战

1. 显存溢出不是模型太大&#xff0c;而是并发入口没设闸 很多人第一次把模型挂到 FastAPI 上&#xff0c;脑子里想的都是“接口通了就行”。本地单条请求跑得飞快&#xff0c; uvicorn main:app --reload 一开&#xff0c;浏览器里点两下&#xff0c;结果也正常。于是放心大…

作者头像 李华
网站建设 2026/10/6 15:06:52

嵌入式以太网接口详解:MAC与PHY之间的MII/RMII/RGMII/SGMII选型指南

1. 先把底层的分工搞清楚&#xff1a;MAC和PHY到底各管哪一段很多嵌入式工程师第一次接触以太网时&#xff0c;最困惑的不是那堆协议栈代码&#xff0c;而是硬件上那一堆引脚到底谁管谁。我以前带过好几个新人&#xff0c;给他们扔一块带网口的核心板&#xff0c;问“MAC在哪、…

作者头像 李华
网站建设 2026/10/6 15:06:49

从CUDA到昇腾CANN 7.0:算子迁移与性能调优实战

作为一个在CUDA上摸爬滚打多年的老开发者&#xff0c;我一直觉得异构计算的世界里&#xff0c;NVIDIA就是默认选项。直到去年底接到一个新项目&#xff0c;目标平台是昇腾310P&#xff0c;我才意识到自己那套CUDA经验并不总能直接平移过去。当时拿到CANN 7.0的安装包&#xff0…

作者头像 李华
网站建设 2026/10/6 15:06:02

本地部署个人知识库:Ollama+FAISS+Python实现离线RAG问答

1. 为什么我要自己搭一个知识库 先说结论&#xff1a;我搭这套东西的起因特别朴素——受够了。受够了收藏夹里躺着几百篇“稍后再读”结果再也没打开过&#xff0c;受够了每次写方案都要重新翻聊天记录找半年前同事发的那份参数表&#xff0c;更受够了把公司内部文档传到各种在…

作者头像 李华
网站建设 2026/10/6 15:05:57

湖景农家菜招牌菜怎么选?从湖鲜土灶到时令蟹季的完整拆解

很多人第一次搜“湖景农家菜一般有哪些招牌菜”&#xff0c;背后其实有两层诉求&#xff1a;一是想吃上地道的农家土菜&#xff0c;二是想坐在能看见湖的地方慢慢吃。湖景农家菜的招牌菜&#xff0c;通常不是某一道固定菜&#xff0c;而是一套围绕“湖鲜土灶时令”组合出来的菜…

作者头像 李华
网站建设 2026/10/6 15:05:17

本地优先云端兜底:Dify+Ollama+DeepSeek私有AI中台实战

1. 为什么我决定不再把核心业务逻辑交给云端 API 1.1 从一次线上事故说起 去年冬天的一个凌晨&#xff0c;我负责的一个内部知识问答系统突然大面积超时。排查了半小时才发现&#xff0c;是上游大模型 API 的调用配额在高峰期被限流了。那一刻我意识到一个问题&#xff1a; 当…

作者头像 李华