JavaWeb在线学习系统毕设全攻略:从功能设计到部署上线

JavaWeb在线学习系统毕设全攻略:从功能设计到部署上线 简介在计算机专业的毕业设计选题中JavaWeb技术栈始终占据着重要位置。它涵盖了Servlet、JSP、JDBC、MySQL等核心基础知识是理解Web应用前后端交互原理的经典路径。对于学生而言选择一个需求清晰且业务闭环完整的项目至关重要基于JavaWeb的在线学习系统正是这样一个高性价比的选择。它可以完整呈现多角色权限管理、课程资源组织、学习进度跟踪以及在线测验等核心功能模块。从数据库表结构设计、核心代码实现到IDEA环境下的部署运行每一个环节都能检验并巩固工程实践能力。本文基于实际毕设指导经验深入讲解在线学习系统的功能边界、权限矩阵、数据库脚本要点、关键功能的具体实现技巧并提供答辩前的测试用例与演示建议助力毕业生高效完成一份完整、可运行、有技术亮点的毕业设计。 每年到了毕设季总有一批人被JavaWeb折腾得欲哭无泪。不是搞不清MVC就是数据库连接老出问题再不然就是项目做完了一看界面停留在十年前的水平。作为一个带过不少毕业生、也帮人改过无数份代码的过来人我越来越觉得JavaWeb在线学习系统这类题目其实是毕设里性价比很高的一个选择。需求清晰、技术栈经典、业务逻辑不复杂但足够完整做完之后无论是应付答辩还是写进简历都有东西可讲。但前提是你得把它做对、做完整、做得像个能上线的东西而不是一坨只跑得起来的demo。这篇文章就围绕“基于JavaWeb的在线学习系统”这个项目从功能设计、数据库脚本、核心代码实现到IDEA里的部署全流程把里面真正值钱的细节一次讲透。1. 这个系统到底解决什么问题毕设选题的核心考量很多同学选毕设题目的第一反应是“越新越好”——微服务、分布式、人工智能恨不得把所有时髦词汇堆在题目里。但说句实在话本科阶段的毕设老师真正看的是你是不是把一个完整的业务闭环想清楚了、做出来了而不是你用了多少天花乱坠的技术名词。在线学习系统正好卡在这个点上。1.1 从业务场景倒推需求在线学习系统的核心使用场景很朴素一个学生登录进来能看到课程列表点进课程详情查看章节内容看视频或者下载资料还能做做随堂测验一个教师登录进来能管理自己名下的课程往课程里添加章节、上传课件一个管理员登录进来管用户、管所有课程的上下架、看统计数据。就这三个角色三套权限几乎能把JavaWeb阶段要学的核心知识全部覆盖掉。这不是我拍脑袋想的而是很多实际商用在线教育平台的基本盘。你去翻任何一家在线教育SaaS产品的功能清单本质都是这套东西再加一些营销、支付、直播的复杂度。做毕设的时候把基础盘做扎实答辩时老师问“你这个系统定位是什么”你就可以很清晰地讲出来面向高校或培训机构的轻量级在线学习平台解决的是课程资源集中管理、学生自主学习进度跟踪的问题。1.2 为什么选JavaWeb而不是其他技术栈这个问题在毕设开题时经常被问。我的回答很简单JavaWeb是学校教学的主线数据结构和Java基础课程学完之后Servlet、JSP、JDBC、MySQL这套组合是教材上白纸黑字写过的东西。你不需要额外去解释为什么选它毕业设计委员会的老师也不会质疑你的技术路线。更重要的是JavaWeb的知识体系里每一个环节都在这个项目里有用武之地Servlet处理请求分发对应登录校验、权限控制JSP做视图渲染对应课程列表、详情页展示JDBC操作数据库对应所有增删改查Filter统一处理编码和登录状态Listener在应用启动时加载基础数据。这套组合虽然“老”但五脏俱全。如果你在完成基础版之后还有余力再往上叠加Spring、SpringMVC、MyBatis甚至Spring Boot难度曲线是平滑的不会断层。反过来一上来就啃Spring Cloud全家桶大概率前两周就把自己劝退了。1.3 毕设级别的工作量边界在线学习系统的功能可以做得很庞大但毕设必须克制。我见过最离谱的选题是“基于微服务架构的在线教育平台”一个学生要在一个学期内做完最后交上来的东西连登录都报错。合理的功能边界应该是这样学生端注册登录、浏览课程、课程详情、学习章节内容、下载资料、做测验、查看成绩、收藏课程、个人信息修改教师端登录、管理自己的课程、课程下建章节、上传课件资料、出题和发布测验管理端登录、用户管理启用禁用、课程审核上下架、公告发布、基础数据统计。这个规模一个人全职做两到三个月每天保持三四个小时的有效编码时间是完全能做完的。而且每一块拿出来都有可展示的界面和可演示的流程答辩的时候不会冷场。2. 系统功能模块拆解先画清楚图再动手写代码我见过太多人拿到题目就开始建表、写Servlet写了一个月发现模块之间对不上又推倒重来。正确的做法是先把功能模块拆清楚定好角色边界再落数据库设计。这一步省下来的时间远比你想的多。2.1 三个角色的权限矩阵权限控制是JavaWeb项目里最容易翻车的地方很多毕设的代码里普通学生直接访问admin的URL就能进入管理页面这属于最致命的逻辑漏洞。在线学习系统中我建议用一张权限矩阵把你系统的全部路由管起来功能模块学生教师管理员注册/登录可用可用用管理员账号初始化浏览/搜索课程可用可用可用在线学习章节可用可用可用下载课件资料可用可用可用收藏课程可用不可用不可用学习进度记录可用不可用不可用提交测验/查看成绩可用不可用不可用课程管理增删改不可用仅自己的课程全部课程章节/资料管理不可用仅自己的课程全部用户管理不可用不可用可用课程上下架/审核不可用提交申请审核操作公告管理查看查看发布/删除数据统计不可用自己课程的数据全站数据这张表既是需求文档也是你写Filter权限拦截时的依据。Student、Teacher、Admin三种角色各有一个入口访问任何非本角色的资源时统一跳转到403页面这个逻辑用Filter统一处理而不是在每个Servlet里重复判断。2.2 课程内容组织的层级结构在线学习系统里课程内容怎么组织直接决定数据库表怎么设计。我用的是最常见的三级结构课程Course→ 章节Chapter→ 课时/资源Lesson。课程有标题、封面、简介、分类、难度、教师、发布时间章节属于某个课程有序号、标题、内容介绍课时是真正承载学习内容的粒度可以是视频链接、富文本内容、附件文件。有的同学习惯把视频直接存在项目目录里这会有两个问题一是项目打包后体积巨大二是数据库里没有办法记录访问量、学习进度这些元数据。正确做法是数据库里存文件路径或者URL文件本身放到服务器上的一个独立目录用虚拟路径映射出去。这样既方便维护也方便以后迁移到对象存储。2.3 学习轨迹与测验模块怎么融合很多在线学习系统的毕设只做了课程展示和视频播放但我觉得学习轨迹和测验才是这个系统的灵魂。学生学完一个章节后系统应该记录“已学完”的状态学完全部章节后可以参加测验。这个设计能把“在线学习”从单纯的内容展示升级为有完整教学闭环的产品。具体实现上我用一张学习记录表learn_record来存储用户每章节的学习状态包含用户ID、章节ID、学习时间、是否完成。当用户点击“标记学完”按钮或者视频播放到结尾时前端可以监听播放结束事件向后端发一个AJAX请求后端更新完成状态。测验模块则是一张试卷表关联多道试题学生提交答案后后端逐题比对自动计算得分。2.4 容易忽略但答辩常被问的辅助功能除了上面这些主干功能还有几个看着不起眼但特别能撑场面的功能点。一个是搜索别傻乎乎地在Servlet里拼LIKE查询你要把搜索关键词做一下空值判断和特殊字符转义然后支持按课程名称模糊搜索和按分类过滤一个是分页课程列表、用户列表、学习记录都必须做分页这几乎是答辩老师必问的点一个是公告模块别小看它它能让整个系统的“完整感”提升一大截。这些功能单独拎出来都很简单但合在一起老师会觉得“这个学生是真的把系统当产品来做的”而不是为了凑功能硬堆代码。3. 技术选型的逻辑为什么这套组合适合毕设技术选型这件事本质是在“学习价值”和“完成度”之间找平衡。JavaWeb体系里可选的路不少我按实际经验把几种常见组合的优劣说清楚。3.1 JSPServletJavaBean的经典路线这个组合是最传统的JavaWeb方案也是很多学校教材的主线。它的优点非常明显没有框架的魔法黑盒每一个请求从浏览器到Servlet再到JSP的完整链路你都能看见发生了什么。这对理解HTTP协议、请求转发、作用域这些底层概念非常有帮助。缺点也很突出开发效率低。每写一个功能模块要写Servlet、要写JavaBean、要写JSP页面数据封装和类型转换全靠手动代码量很大。所以如果选这条路一定要做好代码复用把BaseServlet抽出来把DBUtils封装好不然写到后面会非常崩溃。3.2 SSM与SpringBoot的升维选择如果你已经有了一定的Java基础或者学校的课程已经讲到框架我建议直接上SSMSpringSpringMVCMyBatis甚至SpringBoot。理由很实际现在的企业开发基本没人再用纯Servlet写业务了你去实习或者工作面对的代码库大概率是SpringBoot项目。毕设用SpringBoot在答辩时更能说明你有跟上技术趋势的能力简历上也更好写。但要注意选SpringBoot不等于不用学Servlet。Filter、Listener、Session这些概念底层逻辑是一样的SpringBoot只是帮你封装掉了大量配置。我在后面拆解核心实现的时候会先用Servlet的方式讲清楚原理再给出SpringBoot下的对应写法这样两种路线的读者都能用上。3.3 前端层的现实选择很多毕设的在线学习系统界面做得惨不忍睹红红绿绿的table堆在一起毫无设计感。可老师也是正常人一份排版清晰、界面干净的项目第一印象分就高了不少。前端技术我推荐用Bootstrap或者Layui。现在做毕设的同学已经比我们那会儿幸福多了Layui把所有后台管理的组件都封装好了表格、分页、弹窗、表单校验全是现成的你只需要写一点JS去调接口。Bootstrap的优势是生态大、文档多、遇到问题好搜。如果是SpringBoot技术栈还可以顺手用Thymeleaf模板引擎服务端渲染做起来比JSP还顺手。3.4 开发工具和运行环境的坑这一节值得单说因为环境问题卡住的次数比写代码还多。IDEA分社区版和旗舰版旗舰版自带Tomcat集成社区版需要自己配置外部Tomcat。数据库推荐用MySQL 5.7或8.0Navicat或者IDEA自带的Database工具都能连导出SQL脚本时注意编码选UTF-8。JDK版本建议用8或11别一上来就装JDK 17甚至更新的版本。倒不是说新版本不好而是很多教材、博客、网上的依赖版本都是基于JDK8写的你用了新JDK以后Tomcat版本、Maven依赖版本全都得跟着调稍微不匹配就报各种莫名其妙的错这对毕设来说完全没必要。4. 数据库脚本的设计与使用这一步决定项目的生死数据库设计是JavaWeb项目的命脉。我改过太多毕业设计代码大部分运行报错或逻辑混乱根子都在表结构设计不合理。在线学习系统的数据库脚本我建议控制在10到15张表之间少了说明功能不完整多了说明你模块拆得太碎反而显得冗余。4.1 核心数据表的结构与关系以我常用的设计方案为例核心表分为四组。第一组是用户相关用户表user、角色表role、用户角色关联表user_role如果你不想做复杂的RBAC也可以简单地在用户表里加一个role字段但那样扩展性差答辩时也容易被问到。第二组是课程相关课程表course、分类表category、章节表chapter、课时表lesson、课程收藏表favorite。课程表里要有封面URL、课程简介、难度等级、审核状态字段课时表里除了标题和内容还要有排序字段和资源文件路径。第三组是学习行为相关学习记录表learn_record、测验表exam、试题表question、答题记录表answer_record。学习记录表用于跟踪学习进度测验表和试题表是一对多的关系答题记录表存学生的每次作答明细。第四组是系统运营相关公告表notice、评论表comment。这两张表可以独立也可以用联合外键关联用户和课程看你的具体需求。4.2 字段类型选择的几个细节这些细节看起来小但每一个都可能让你在答辩时翻车。比如主键我强烈建议用int自增主键而不是UUID字符串原因很简单自增主键在InnoDB引擎下走聚簇索引查询性能更好代码写起来也更简洁用一个KeyHolder就能拿到自增ID。比如存时间的字段统一用datetime不要用timestamp。timestamp有2038年问题而且受时区影响你和别人联调环境不一样查出来的时间对不上排查起来特别痛苦。再比如文本字段课程简介用text没问题但用户昵称、标题这类字段设定varchar长度时要预留余地别卡得太死。还有一个容易被忽略的就是所有表都要有create_time和update_time这两个字段这几乎是行业惯例了也是老师判断你有没有工程经验的一个细节。4.3 数据库脚本的三种导入方式拿到别人的项目源码或者你自己写完导出脚本后把数据库跑起来是最关键的一步。我在IDEA里最常用的三种方式分别是第一种是用命令行。打开命令行窗口进入MySQL的bin目录执行mysql -u root -p后输入密码然后执行source /path/to/online_learning.sql;。这种方式最大的坑是文件路径里的反斜杠和中文目录名建议把SQL脚本放到一个纯英文路径下再执行。第二种是用Navicat。右键点击连接选择“运行SQL文件”选中你的脚本开始执行。这种方式适合不熟悉命令行的同学但要注意Navicat执行时如果遇到编码问题脚本里的中文注释和初始数据会变成乱码。解决方法是执行前先把脚本用记事本另存为UTF-8编码。第三种是IDEA的Database工具。展开你的数据库连接右键点击数据库选择“Run SQL Script”在弹出的窗口里选择脚本注意右下角的编码格式选择UTF-8这个细节特别容易被人忽略。4.4 一条好脚本必须包含的内容一个合格的数据库脚本不是只有CREATE TABLE就完了。我从规范性的角度列出几条硬性要求开头要有DROP TABLE IF EXISTS这样脚本可以重复执行不然第二次导入就会报错每张表要有COMMENT注释说明这张表的用途字段也要有COMMENT要包含初始数据比如管理员账号、测试学生账号、几个课程分类、一两门示例课程。这些数据不是可有可无的而是老师打开系统进行功能演示时的第一手材料要定义好表之间的外键关系。这里我多说一句有些同学为了省事不建外键逻辑上靠应用层控制这在生产环境是大忌但毕设阶段我建议把外键建上因为老师会用Navicat的ER图来看你的表关系外键能让ER图一目了然。5. 关键功能实现详解从登录鉴权到在线学习链路这一部分我挑几个最核心、最有技术含量的功能实现来拆解。每个功能都能直接照抄进你自己的项目里而且我会说明为什么这样做而不是只给结论。5.1 登录鉴权与验证码登录是系统入口实现质量直接关联到整个项目给人的第一印象。网上很多毕设项目的登录就是比对一下用户名密码完全不设防就算在测试阶段也显得特别业余。我建议至少加上验证码和密码加密存储这两道防线。验证码我用的是Java原生的BufferedImage生成图片把随机字符串画上去再在图片上加一些干扰线然后将正确答案存到Session里。用户提交时先用验证码比对再查数据库。这里有一个非常容易踩的坑验证码比对前要把用户输入的验证码trim一下去掉空格而且比较要忽略大小写否则用户体验很糟糕。密码加密我推荐使用MD5加盐虽然MD5已经不算安全了但对毕设来说比明文存储强太多了而且实现起来也简单。Java标准库的MessageDigest就能做不需要额外引依赖。盐值可以用用户名加上一个固定的私密字符串拼在一起再取哈希这样相同的密码在不同用户下存储的密文也不同。登录成功之后把用户对象和角色信息存入Session再用一个LoginFilter统一拦截需要登录的URL。核心逻辑是public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) { HttpServletRequest req (HttpServletRequest) request; HttpSession session req.getSession(); Object user session.getAttribute(loginUser); if (user null) { // 判断是否为AJAX请求 String xrw req.getHeader(X-Requested-With); if (XMLHttpRequest.equals(xrw)) { response.setContentType(application/json;charsetUTF-8); response.getWriter().write({\code\:401,\msg\:\未登录\}); } else { ((HttpServletResponse) response).sendRedirect(req.getContextPath() /login.jsp); } return; } chain.doFilter(request, response); }这个Filter里最值钱的细节是AJAX请求的判断。很多毕设里前端页面用AJAX调接口时如果Session过期后端直接重定向结果AJAX拿到一个HTML页面解析失败又没有任何报错提示用户完全不知道发生了什么。加上这段判断之后前端就能捕获到401统一跳转到登录页或弹出登录框。5.2 课程列表的展示与分页课程列表页是学生进入系统后看到的第一个页面也是性能优化的关键点。如果不做分页课程一多页面加载就慢数据库压力也大。我做了一个通用的分页查询工具类放在BaseServlet里复用。分页的核心SQL大家应该都很熟SELECT * FROM course WHERE status 1 ORDER BY create_time DESC LIMIT #{offset}, #{pageSize}但真正值钱的不是这条SQL而是分页参数的封装。我写了一个PageBean类包含pageNum, pageSize, totalCount, totalPages这些字段。后端接收前端传过来的pageNum和pageSize计算offset查出当前页数据再查一次总数封装成PageBean返回给前端。这个过程中最容易被忽略的是pageSize的校验。前端如果传一个pageSize10000你就会一次性查出上万条数据页面直接卡死。我的做法是在服务端做一次上限控制超过50就强制改成50这是个很实用的防呆设计。5.3 在线学习的核心链路章节展示与进度记录学生点击某门课程进入学习页面后左侧是章节树右侧是章节内容。这里涉及两个关键实现一是章节树怎么组装二是学习进度怎么记录。章节树的组装我建议不要用递归去数据库里查。因为章节的数据量不会特别大一次把某门课程的全部章节查出来在Java内存里按parentId组装成树结构代码更简单效率也更高。等以后量大了再优化成懒加载不迟。学习进度的记录我用的是异步上报方案。前端在页面加载时通过AJAX向后端发送一个“开始学习”请求后端往学习记录表里插入或更新一条记录把最近学习时间和进度百分比存进去。学生点击“标记学完”按钮时再次发送AJAX将完成状态置为true。这里有一个细节值得单独强调试卷页面的倒计时和提交逻辑。测验页面通常需要限制答题时间我用JS做倒计时时间到了自动提交并且提交前做二次确认防止用户误操作丢失答案。这种交互上的细节在答辩演示时特别加分因为老师会觉得你考虑到了真实使用场景。5.4 测验的自动判分与成绩统计在线测验的核心价值在于自动判分。我设计的规则是测验由一组单选题和一组多选题组成题目表里存标准答案。学生提交后后端遍历学生的答案和标准答案做比对单选题逐个判断多选题把选项排序后比较字符串全部匹配才得分。判分逻辑里有一个容易被忽略的细节多选题的选项顺序。我在存入答案时先把选项排序再比较这样学生选择“A,C”和“C,A”是同样的结果不会因为顺序问题被误判。判断题也类似统一存“1”和“0”前端显示“对/错”后端存取都用数字。成绩统计这块我做了两个维度。一是单次测验的成绩记录历史成绩列表页展示每次的分数和用时二是按学生的维度统计平均分、测验次数、最高分教师端可以看自己课程下所有学生的成绩分布。这些统计SQL都不复杂但做出来后整个系统的数据洞察感就出来了。6. 在IDEA里跑通整个项目的完整流程代码写完了最怕的就是部署。我被问过无数次“博主我这个项目怎么启动不起来”几乎每次都是环境问题。这里把从零到一在IDEA里跑通在线学习系统的完整流程写一遍每一步都标好注意点。6.1 导入项目和配置Tomcat如果你拿到的是别人给的源码第一步不是急着打开而是先看项目结构。判断它是Maven项目还是普通Web项目根目录有pom.xml的就是Maven项目需要先配置好Maven仓库IDEA会自动下载依赖这个过程可能很慢建议先检查一下Maven的镜像源换成国内镜像。普通Web项目会有一个.idea目录或者iml文件导入方式是File → New → Project from Existing Sources选择项目根目录IDEA会自动识别Web模块。导入完成后检查Project Structure里的Artifacts有没有包含lib目录下的所有jar包这一步是Web项目最常见的问题点漏了的话启动时准报ClassNotFound。Tomcat的配置也很简单Run → Edit Configurations → 左上角加号 → Tomcat Server → Local在Deployment里把项目的war包加进去Application context填/online_learning这个路径就是浏览器访问的根路径。6.2 数据库连接的坑与规避数据库连不上是启动失败的头号原因。我在代码里统一使用一个properties文件管理连接参数然后在监听器或静态代码块里初始化连接池。推荐使用Druid或C3P0不要每次请求都创建一个Connection性能差距非常大。连接参数里有一个特别容易被坑的点MySQL 8.0的驱动类名是com.mysql.cj.jdbc.Driver而5.7及以前是com.mysql.jdbc.Driver两者不通用。URL里还要注意加上useSSLfalseserverTimezoneAsia/Shanghai否则控制台会有警告而且时间字段的存取可能出现问题。另一个坑就是前面提过的数据库脚本导入导入完成后一定要先查一下数据是否完整。执行几条SELECT语句确认表数量和初始数据都对上了再启动项目不然启动成功但页面报错排查成本更高。6.3 控制台常见报错与修复速查表我把这些年帮人排过的最高频错误整理成一张表你遇到问题先对着查一遍报错信息主要原因解决方案ClassNotFoundException: com.mysql.jdbc.DriverJDBC驱动包缺失把mysql-connector-java的jar包放进WEB-INF/libPort 8080 was already in use端口被占用命令行执行netstat -ano查PID杀掉占用进程或改Tomcat端口Communications link failure数据库连接失败检查MySQL服务是否启动、URL端口和库名是否正确Access denied for user用户名密码错误核对properties里的账号密码注意别用root但密码填错Invalid bound statementMapper映射没扫到检查MyBatis的mapper-locations路径是否匹配HTTP Status 404项目路径不对检查Application context配置浏览器地址要和Deployment路径一致HTTP Status 500业务代码异常看IDEA控制台完整堆栈定位到具体Servlet和行号这些问题的排查链路并不复杂但如果你不知道是什么原因可能一晚上都耗在一个标点符号上。建议大家记住一个原则看报错永远看第一行不要被长长的堆栈吓住真正的原因就在最上面。7. 答辩前必须做好的几件事测试用例、演示脚本与加分项很多同学代码写得不错但答辩时演示翻车最后分数不如预期特别可惜。我从答辩角度给出几个实操建议这些比再写一百行代码都有用。7.1 准备一条完整的主演示链路答辩时时间有限不可能把每个功能都点一遍。你要设计一条三十秒内能走完的主链路把系统的核心亮点全串起来。我建议用管理员账号登录 → 进入课程管理 → 把一门课程从“下架”改成“上架” → 切换到学生账号 → 搜索到这门课程 → 点进详情 → 学习一个章节 → 做一个测验 → 查看成绩。这条链路覆盖了三个角色、两套权限、五个功能模块班主任和评委老师看完就能立刻判断“这个系统是完整可运行的”。记得把账号密码写在答辩PPT的第一页免得到时候手忙脚乱找账号。7.2 准备好被追问的“为什么”答辩老师最爱问三类问题一是技术选型为什么用这个数据库、这个框架二是安全设计密码怎么存的登录状态怎么维持的SQL注入怎么防的三是业务逻辑课程审核的流程是什么测验判分怎么处理多选。针对这些问题你在答辩前把项目里几个关键决策的“为什么”想清楚。比如验证码为什么要存Session而不存Cookie分页为什么用LIMIT而不是一次性查出所有数据为什么用连接池而不是每次新建连接。能回答清楚“为什么”比回答“怎么做的”更能体现你的真实水平。7.3 一些低成本但高加分的小功能如果你的时间还剩一两周我建议加几个不复杂但很加分的功能个人学习数据看板用ECharts画一个学习时长、课程完成度的图表这个功能在后台管理员端用一条SQL聚合加一个页面就能完成但视觉效果非常炸裂记住密码功能登录页加一个记住密码的勾选把用户名用Cookie存30天用户体验提升明显操作日志用一个Filter拦截所有请求把操作记录写入一张日志表这个功能在答辩时可以直接证明你考虑了系统的可审计性。这几个功能单独看都不难加起来以后系统给人的“完成度”感觉就完全不一样了。7.4 论文撰写的几个提示在线学习系统对应的毕设论文核心章节安排一般是需求分析、系统设计、数据库设计、系统实现、系统测试。写论文的时候有个技巧数据库设计这一章把ER图和表结构放全系统实现这一章每个功能模块都配界面截图和核心代码片段加上对这些代码的说明字数就非常容易达标。系统测试这一章不要只写“系统运行正常”要写具体的测试用例输入什么数据、预期结果、实际结果、是否通过。我建议至少写十五到二十条用例覆盖登录、权限、CRUD、边界情况比如空值、超长字符串、非法ID老师看到这种测试用例会觉得你的工程素养是真的到位的。最后再分享一个我个人的经验给项目写一个README.md。里面写清楚项目简介、技术栈、数据库初始化方法、运行步骤、默认账号。这个文件不仅对答辩有用你以后找工作把它挂到GitHub上也是一份很漂亮的敲门砖。我见过太多人答辩结束就把项目压缩包丢进网盘吃灰其实这个作品是你大学四年技术积累的直观证明值得认真对待。本文还有配套的精品资源点击获取