简介这份《教务管理系统软件项目计划任务书》是北方民族大学软件工程专业的课程设计报告面向软件工程、项目管理方向的学生与任课教师也可作为软件项目立项、WBS 分解与进度估算的写作参考。文档围绕基于区块链技术的教务管理系统展开覆盖项目开发背景与意义、系统层次图与功能描述、生存期模型选择、技术选型理由并给出基于功能分解和基于开发过程的两套 WBS 方案以及规模估算、成本估算、进度计划细化等项目管理内容读者可据此理清需求分析、系统设计、实现、测试、部署各阶段的文档骨架与估算方法。资源为 1 个 doc 文件压缩包约 1.47MB单文档即可完整查阅便于直接套用目录结构改写。目前已有 1669 人学习下载适合课程设计选题、项目计划书撰写及项目管理流程梳理时对照参考。1. 教务管理系统软件项目计划任务书不是作文是一份可被评审和复算的工程交付物评审会上最常见的一幕专家翻到第三页就停住了。前两页写着系统采用先进架构、界面友好、性能优良再往后是一张漂亮的工期横道图但没有一行字说明选课并发 3000 人时响应时间不超过 3 秒该怎么测。这份《教务管理系统软件项目计划任务书》要签字、要作为后续验收的依据它本质上是一份可以逐条对照、逐条复算的工程交付物不是给领导看的说明文。任务书必须回答四件事范围边界在哪哪些子系统做哪些明确不做、数据从谁流到谁数据流图与数据字典、每个阶段什么时候交什么里程碑与交付物、什么状态算通过可判定的验收标准。它的读者是签字人、监理和半年后接手维护的同事所以每一句完成都要能被外部人员用命令或操作验证一次。这份材料适合两类人一类是学校信息中心或教务处的技术负责人要自己把任务书写出来并兜住进度另一类是承接教务管理系统的软件项目经理需要在两周内交出一份格式合规、内容经得起追问的 .doc 文件。下面按内容骨架 → 自动生成 → 格式与预览排错 → 单一数据源推进。2. 教务管理系统任务书的内容骨架与数据流图怎么画进 doc一份能过评审的任务书结构比文采重要。骨架定了写起来就是填空骨架没定写到第五章就会发现范围、进度、验收三块互相打架。2.1 教务管理系统任务书的六段式骨架我一般把正文压成六段每段对应一类评审提问。段落必须回答的问题常见缺陷建设背景与目标现有教务流程卡在哪个环节痛点能否量化只写提升管理效率范围与边界做哪些子系统明确列出不做的部分缺不做清单后期无限扩范围功能需求条目每条需求的输入、处理逻辑、输出只有功能名称没有数据数据流与数据字典数据从谁流到谁字段类型与取值范围只有一张图没有字典进度与里程碑每阶段起止日期、交付物、责任人只写总工期 120 天验收与变更判定标准、测试方法、变更审批链写符合甲方要求范围与边界这一段值得多花半小时。不做清单至少写五条例如不做与财务系统的学费对账、不做微信小程序端、不做历史数据清洗仅提供导入模板。这一段的字数成本很低但它决定了后期扯皮的边界。功能需求条目建议按子系统分组学籍管理、排课与教室调度、选课、成绩与考务、教师工作量统计。每条需求的写法是角色 动作 数据 约束比如学生在选课开放期内提交选课申请系统按教学班容量与先修课规则判定返回选课结果与失败原因。这句话里已经隐含了三条可测的验收点。2.2 用 DOT 描述教务管理系统数据流图并导出为图片数据流图在 Word 里手画改一次要挪半天。用 Graphviz 写成文本改一行重新渲染一次插图位置不变。digraph edu_dfd { rankdirLR; node [shapebox, fontnameSimSun, fontsize10]; edge [fontnameSimSun, fontsize9]; stu [label学生]; tea [label教师]; adm [label教务管理员]; subgraph cluster_sys { label教务管理系统; styledashed; course [label选课处理]; grade [label成绩录入与审核]; plan [label培养方案管理]; store [label教务数据库]; } stu - course [label选课申请]; course - store [label选课记录]; course - stu [label选课结果]; tea - grade [label成绩单]; grade - store [label成绩记录]; adm - plan [label课程与学分规则]; plan - store [label教学计划]; store - grade [label选课名单]; }渲染命令dot -Tpng -Gdpi200 dfd.dot -o dfd.png dot -Tsvg dfd.dot -o dfd.svg-Gdpi200决定位图分辨率Word 里插图宽度按厘米算200dpi 打印出来不糊。-Tsvg输出矢量图插进 doc 后缩放不失真但部分旧版 Office 打开 SVG 会显示为空白框交付给甲方时优先插 PNG。数据流图至少要有一张顶层图和一张选课子图顶层图只画外部实体与系统边界子图再展开到处理过程。提示中文字体要在 node 和 edge 上都声明 fontname只写一处时部分环境会回退成方框。2.3 参数化字段与验收标准把完成写成可判定条件验收标准写成系统运行稳定等于没写。可判定的写法包含三个要素操作、观测点、阈值。需求编号验收操作观测点阈值FR-033000 名学生 5 分钟内并发提交选课接口 P95 响应时间≤ 3 秒FR-07导入 8000 条成绩记录导入成功条数 / 失败明细成功率 100%失败可导出FR-11断网后恢复重连继续提交选课数据重复率0 条重复记录这张表后面会被直接搬进测试用例所以编号要稳定别在修改时重排。建议在任务书里就固定FR-xx编号后续需求变更用CR-xx追加不覆盖原编号版本差异一眼可见。3. 用 python-docx 生成教务管理系统任务书的最小可跑脚本格式合规的任务书排版重复度极高固定的字号、行距、页边距、页脚页码、封面表格。手工排十次就会出错脚本排一百次结果一致。3.1 依赖与模板准备python -m venv venv source venv/bin/activate pip install python-docx graphviz pyyamlpython-docx负责生成 OOXML.docxgraphviz包只是调用本地dot命令的封装渲染仍需要系统里装好 Graphviz。模板有两个流派一是从空白 Document 开始样式全在代码里定义二是准备一份template.docx只保留样式和页眉页脚正文用docxtpl填充。任务书这种结构固定的文档第二种更省事但样式一旦在代码里就要把Normal样式的中文字体设对。from docx import Document from docx.shared import Pt, Cm from docx.oxml.ns import qn doc Document() normal doc.styles[Normal] normal.font.name Times New Roman normal.font.size Pt(12) # 中文必须单独设 eastAsia只设 font.name 时 Word 会回退成默认宋体 normal.element.rPr.rFonts.set(qn(w:eastAsia), 仿宋_GB2312) normal.paragraph_format.line_spacing 1.5 normal.paragraph_format.space_after Pt(0)qn(w:eastAsia)是命名空间转换函数把w:eastAsia展开成完整 XML 标签。这一行漏掉西文是 Times New Roman中文却变成宋体打印出来两种字混排评审一眼就能看出来。3.2 正文、表格与数据流图的插入逻辑def add_heading(doc, text, level): h doc.add_heading(text, levellevel) for run in h.runs: run.font.name 黑体 run._element.rPr.rFonts.set(qn(w:eastAsia), 黑体) return h add_heading(doc, 三、功能需求与验收标准, 2) headers [需求编号, 验收操作, 观测点, 阈值] rows [ (FR-03, 3000 人 5 分钟内并发选课, 接口 P95 响应时间, ≤ 3 秒), (FR-07, 导入 8000 条成绩记录, 导入成功率, 100%), (FR-11, 断网恢复后继续选课, 重复记录数, 0 条), ] table doc.add_table(rows1, colslen(headers)) table.style Table Grid for i, h in enumerate(headers): table.rows[0].cells[i].text h for r in rows: cells table.add_row().cells for i, v in enumerate(r): cells[i].text v # 数据流图宽度按厘米给高度按比例自动缩放 doc.add_picture(dfd.png, widthCm(15)) doc.save(教务管理系统软件项目计划任务书.docx)table.style Table Grid必须显式设置否则表格只有内容没有框线导出 PDF 后看不见网格。add_picture只给width时python-docx会按原图宽高比自动算高度别同时给宽高图片会被拉伸变形。3.3 字号、行距、页边距与页脚页码的参数怎么设任务书排版参数一般由甲方模板约定不约定时按下面这套走国内的正式文件基本通用。参数取值说明正文中文字体仿宋_GB2312 三号找不到该字体时降级为仿宋一级标题黑体三号章标题居中或顶格按模板二级标题楷体_GB2312 三号节标题行距固定值 28 磅比 1.5 倍行距更稳避免图片撑行页边距上 3.7cm 下 3.5cm 左 2.8cm 右 2.6cm公文常见值页脚页码居中宋体小五封面与目录不编页码页边距用section对象设置sec doc.sections[0] sec.top_margin Cm(3.7) sec.bottom_margin Cm(3.5) sec.left_margin Cm(2.8) sec.right_margin Cm(2.6) sec.header_distance Cm(1.5) sec.footer_distance Cm(1.75)行距如果用固定值注意图片所在段落要单独改成单倍行距否则 15cm 宽的图会被 28 磅行距裁掉上下边缘。这是导出后图片只剩一条缝的最常见原因。3.4 目录域与页码域生成后要按一次 F9python-docx不会计算页码和目录只能插入域代码打开 Word 后刷新才显示。from docx.oxml import OxmlElement def add_page_field(paragraph): run paragraph.add_run() begin OxmlElement(w:fldChar); begin.set(qn(w:fldCharType), begin) instr OxmlElement(w:instrText); instr.set(qn(xml:space), preserve) instr.text PAGE end OxmlElement(w:fldChar); end.set(qn(w:fldCharType), end) run._r.append(begin); run._r.append(instr); run._r.append(end) add_page_field(doc.sections[0].footer.paragraphs[0])目录用同样的方式插入TOC \o 1-3 \h \z \u域。脚本生成完直接发给甲方对方打开会看到错误未找到目录项体验很差。稳妥做法是生成后用 LibreOffice 做一次更新域并转 PDF交 PDF 给评审交 docx 给存档。4. doc 与 docx 的格式坑无法预览、批量转换与版本比对标题里带.doc后缀不是小事。很多单位的模板、流转系统、在线预览组件只认其中一种交付前不做一次转换验证很容易在评审当天卡住。4.1 .doc 无法预览的根因二进制复合文档与 OOXML 的差别.doc是二进制复合文档格式内部是若干个流WordDocument、Table、Data 等拼在一个文件里必须由 Office 或兼容组件解析才能还原成可视内容。.docx是 ZIP 容器加一堆 XML浏览器端或服务端的在线预览组件大多只实现了 OOXML 解析。所以在只支持 OOXML 的预览页面上传.doc表现就是转圈、空白或直接报无法预览。判断手里文件到底是哪一种别信后缀# 看文件魔数OLE2 复合文档 vs ZIP file 教务管理系统软件项目计划任务书.doc # 输出含 Composite Document File V2 的是真 .doc # 输出含 Zip archive 的是被改名的 .docx # 直接列出内部结构佐证 unzip -l 教务管理系统软件项目计划任务书.doc | head如果unzip能列出word/document.xml说明这个文件其实是 docx只是后缀被改成了 doc。把后缀改回去就能被在线预览识别。反过来file报 Composite Document 的就必须真转换。4.2 LibreOffice 无头批量转换与结果校验服务器上装 LibreOffice用无头模式批量转比调 Office 自动化稳定得多。# 单个文件doc - docx libreoffice --headless --convert-to docx \ --outdir out/ 教务管理系统软件项目计划任务书.doc # 单个文件docx - pdf供评审传阅 libreoffice --headless --convert-to pdf:writer_pdf_Export \ --outdir out/ 教务管理系统软件项目计划任务书.docx # 批量把目录下所有 doc 转 docx每个文件独立进程避免锁冲突 find ./src -name *.doc -print0 | while IFS read -r -d f; do libreoffice --headless --convert-to docx --outdir ./out $f /dev/null 21 echo converted: $f done--headless不启动图形界面--outdir指定输出目录不指定时输出到源文件同目录。批量场景每个文件单独起进程是因为同一个 LibreOffice 实例被并发调用时会互相抢用户配置目录表现为随机失败。转换后必须校验不能只看返回码import zipfile, pathlib def check_docx(path): p pathlib.Path(path) assert p.stat().st_size 10_000, f{p} 体积过小可能转换失败 with zipfile.ZipFile(p) as z: names z.namelist() assert word/document.xml in names, 缺少正文部件 xml z.read(word/document.xml).decode(utf-8, ignore) # 关键内容抽查标题和表格数不能丢 assert 验收标准 in xml, 正文关键词丢失 assert xml.count(w:tbl) 3, f表格数量异常: {xml.count(w:tbl)} check_docx(out/教务管理系统软件项目计划任务书.docx)w:tbl是表格根标签数一遍就知道转换有没有吞表格w:drawing数一遍就知道数据流图还在不在。公式、文本框、艺术字这三类对象在二进制转换中丢失概率最高任务书里尽量避免使用。注意WPS 的新建菜单里默认只有 docx、xlsx、pptx 这类新格式需要显式选择文字文档*.doc或在另存为里选 Word 97-2003 格式才会产出二进制 .doc。甲方要求 .doc 时先确认是硬性要求还是模板遗留能谈成 docx 就省掉后面所有转换环节。4.3 用 git 管理任务书文本化与人读 diff 的取舍任务书要经历十几轮修改靠任务书_v3_最终_改2.doc命名迟早失控。git 能管二进制但二进制 diff 只显示文件已更改评审时无法看出改了哪句。实用做法是双轨.docx/.pdf作为交付物归档正文的源数据放在 YAML 里图表源文件放在.dot、.csv里这两类都是文本diff 一眼可见。git add content/plan.yaml diagram/dfd.dot git commit -m FR-07 验收阈值由 99% 调整为 100%补充失败明细导出 git tag v1.3-评审稿打 tag 的价值在于回溯评审后如果有人问上一版里程碑是怎么写的git show v1.2-评审稿:content/plan.yaml直接看内容不用去翻旧 docx。二进制交付物放单独的dist/目录用.gitattributes标记为二进制避免 git 误判为文本做行尾转换。5. 单一数据源YAML 生成 doc、甘特图与文档自检到这一步任务书的内容已经在脚本里硬编码了改一个日期要动代码不可持续。把内容抽到 YAMLdocx、甘特图、评审用的纯文本摘要全部从同一份数据生成才叫单一数据源。project: name: 教务管理系统 period: [2025-03-01, 2025-08-31] milestones: - id: M1 name: 需求确认 start: 2025-03-01 end: 2025-03-20 owner: 张工 deliverable: 需求规格说明书 accept: 评审签字通过 requirements: - id: FR-03 desc: 并发选课 metric: P95 响应时间 threshold: 3s先校验再渲染把结构性错误挡在生成之前import yaml, datetime, sys data yaml.safe_load(open(content/plan.yaml, encodingutf-8)) errs [] prev_end None for m in sorted(data[milestones], keylambda x: x[start]): s datetime.date.fromisoformat(str(m[start])) e datetime.date.fromisoformat(str(m[end])) if e s: errs.append(f{m[id]} 结束早于开始) if prev_end and s prev_end: errs.append(f{m[id]} 与上一里程碑日期重叠) if not m.get(owner): errs.append(f{m[id]} 缺责任人) prev_end e if errs: sys.exit(校验失败:\n \n.join(errs))日期重叠和缺责任人是任务书退回率最高的两类问题用脚本拦比人工核对可靠。校验通过后再调用第 3 章的生成函数产出 docx同时用matplotlib的broken_barh按start/end画甘特图存成 PNG 插进附件页。最后一步是生成后读回自检防止代码跑通了但文档是空的from docx import Document doc Document(out/教务管理系统软件项目计划任务书.docx) text \n.join(p.text for p in doc.paragraphs) tables doc.tables # 每条需求编号都必须出现在正文表格里缺一条就说明渲染漏了 for r in data[requirements]: hit any(r[id] in c.text for t in tables for row in t.rows for c in row.cells) assert hit, f{r[id]} 未出现在文档表格中 assert data flow not in text.lower(), 存在占位符未替换这个自检脚本放进 CI 或提交前的pre-commit每次生成后跑一遍。真正省时间的不是生成而是让漏渲染这类低级错误在发出邮件之前就报错——w:tbl计数、需求编号回查、占位符扫描这三项基本能覆盖任务书 90% 的交付事故。本文还有配套的精品资源点击获取
