开题时如果只能说“学生上传作业教师在线批改还要接入 Python 智能分析”这个题目还不能进入开发阶段。更稳妥的做法是先写一条验收脚本谁登录、提交什么数据、系统返回什么结果、答辩时如何重复操作。本文以“课程作业提交与教师批阅系统”为例推荐默认采用 Spring Boot Vue MySQL 单体结构把 Python 放在离线数据处理位置只有模型、样本和离线验证条件都明确时才把 Python 服务接入主流程。第一次评审把模糊题目改成可重复动作图落地路径示意 · 五步验收脚本展示从登录到批阅结果的可重复演示路径“智能课程作业管理平台”看起来有技术含量实际上至少包含文件上传、课程管理、提交截止、教师批阅、成绩统计、查重、OCR、自动评分和消息提醒。功能名越多验收时越难证明每个模块真的工作。先把题目改成一个可指认的范围面向一门课程的作业提交与批阅系统实现学生提交、教师批阅、成绩查询和截止状态控制不承诺自动判断答案正确性。这个改法牺牲了“智能”标签却保留了清晰的业务链路。答辩演示可以固定为教师创建作业学生提交文件教师填写分数和评语学生查看结果。每一步都有输入和输出数据库也能留下记录。验收脚本应该先于页面原型建议把第一版验收脚本写成下面这样而不是先画十几个页面1. 使用教师账号登录创建课程“Java Web 开发”和作业“第三次实验”设置截止时间。2. 使用学生账号加入课程上传一个小于指定大小的 PDF 文件提交状态从“草稿”变为“已提交”。3. 教师打开提交记录填写分数 86 和评语提交后状态变为“已批阅”。4. 学生重新登录只能查看自己的分数和评语不能修改教师结果。5. 对同一作业重复提交时系统按明确规则处理允许覆盖或拒绝重复提交不能依靠口头解释。这五步已经足够支撑一个本科系统的核心演示。通知、统计图和导出 Excel 可以作为扩展不能反过来成为主链路的前置条件。对照题目范围哪些内容值得留下图系统架构示意 · 单体主链路边界说明核心业务为何集中在SpringBoot单体内下面的判断不是“功能越少越好”而是看每项功能能否形成稳定的验收证据。功能方向输入是否稳定是否需要额外数据答辩证据建议课程、作业、截止时间表单字段固定否页面与数据库记录保留文件提交与批阅文件类型需限制否上传记录、分数、评语保留成绩统计来源是系统内成绩否按课程汇总结果保留为扩展OCR 提取作业答案文件版式差异大是识别文本准确性难说明暂停Python 自动评分需要题目、答案和标注样本是模型结果需对照实验不放主链路多端实时协作批改需要冲突处理和长连接否但联调复杂现场复现成本高删除这里有一个容易被忽略的反例文件上传成功不等于“作业批阅系统”成立。如果教师批阅接口没有记录grader_id、score、comment和reviewed_at演示只能证明文件进了服务器不能证明业务闭环完成。因此表结构和验收脚本要同时设计。默认技术栈单体 Java 负责主链路图数据流示意 · 功能取舍看证据对比保留功能与高风险扩展的验收依据本题唯一推荐的默认组合是 Spring Boot Vue 3 MySQL。后端负责登录、权限、作业状态和批阅结果Vue 负责教师端与学生端页面MySQL 保存课程、作业、提交记录和批阅记录。开发环境可按学校现有条件选择 JDK 17、Spring Boot 3.x、Node.js 18 以上和 MySQL 8如果导师或服务器仍是 JDK 8应把 Spring Boot 版本切换到与 JDK 8 兼容的维护线不能只改pom.xml。核心表不宜一开始拆成十几张。一个可讨论的最小结构如下course课程编号、课程名称、教师编号。assignment课程编号、标题、截止时间、状态。submission作业编号、学生编号、文件路径、提交时间、状态。review提交编号、教师编号、分数、评语、批阅时间。submission可以对(assignment_id, student_id)建唯一约束前提是业务规则规定每名学生只能保留一份最终提交。如果要求保留多次提交就不能使用这个唯一约束而应增加版本号或提交序号。这个选择必须写进需求文档否则前端按钮和数据库约束会互相冲突。示例提交接口的最小边界下面是示意代码未声明已经运行。它只展示接口边界不包含完整鉴权、文件扫描和异常处理正式实现时必须补充文件类型、大小、路径穿越和权限校验。PostMapping(/assignments/{id}/submissions)public Submission submit(PathVariable Long id,RequestParam MultipartFile file,AuthenticationPrincipal LoginUser user) {if (file.isEmpty()) {throw new IllegalArgumentException(file is empty);}return submissionService.submit(id, user.getUserId(), file);}接口的输入是作业编号、当前用户和文件输出是提交记录。不要在这个接口里顺便调用 OCR、自动评分和消息推送否则一次上传失败会变成多个模块同时排查的问题。Python 什么时候应该进入主流程我的默认判断是没有可授权样本和固定评价方法时Python 不应成为答辩主链路。Python 可以先承担两个低风险任务生成演示用测试数据或离线统计系统内已有成绩。这样既能体现 Python 的使用又不会让登录、提交和批阅依赖模型服务。这个判断可以被推翻但切换条件要写清楚如果论文核心就是“作业文本分类”或“自动评分”并且开题前已经取得不少于 500 条可使用的标注样本定义了训练集、测试集和评价指标且模型能脱离网页完成重复推理才考虑让 Spring Boot 通过 HTTP 调用 Python 服务。500 条是工程预算门槛不是对任何学校数据现状的断言没有数据来源时应在文档中写“未知待核实”。一个典型死胡同是先做 OCR再决定系统需求。设计阶段很容易拿几份格式统一的 PDF 得到漂亮结果但真实课程作业可能是扫描件、照片、表格或手写内容。若输入格式未锁定OCR 输出就无法成为稳定验收证据。正确的停点不是继续调模型而是把第一版输入限制为可读 PDF并把识别功能移出核心验收链路。一次边界审查四个问题必须能回答把题目交给导师前逐项填写下面的清单。答案不能只写“后续完善”。谁产生数据学生上传的文件、教师填写的分数还是外部接口返回的数据哪个结果必须可重复同一账号、同一作业和同一文件再次操作时状态如何变化哪个角色能修改结果学生能否修改提交教师能否改分管理员是否参与审核答辩如何恢复现场数据库是本地初始化还是依赖公网服务、临时账号和第三方密钥可执行的开题检查顺序1. 先写一条五分钟内能完成的演示脚本删掉脚本中无法准备输入的功能。2. 为每个核心动作写输入、输出和失败条件例如空文件、过期提交、越权查看。3. 按脚本反推四张业务表检查状态字段是否能解释每一次页面变化。4. 用 Spring Boot 完成三类接口登录与角色、作业提交、批阅结果Vue 只实现对应页面。5. 用 MySQL 初始化教师、学生、课程、作业和一条提交记录确保断网时仍能展示主流程。6. 只有当主流程稳定后再决定是否加入 Python 分析、统计图或文件导出。这里的“稳定”指设计上能重复不代表本文已经替你运行了项目。未实际验证的内容包括具体依赖版本、文件存储方式、学校服务器权限和导师对论文创新性的要求都需要在本地环境逐项核实。最后保留什么取决于验收证据课程作业提交与批阅系统的价值不在于堆出 OCR、机器学习和实时协作而在于把角色、状态、数据和权限讲清楚。默认采用 Spring Boot Vue MySQLPython 先作为离线辅助当数据规模、评价指标和模型职责都达到切换条件再把它提升为独立服务。如果一个功能无法在验收脚本中说明输入、输出和失败处理它就不该出现在第一版题目里。