引言
编写目的
本软件需求规格说明书对高校教学平台作了具体详细的用户需求分析。
本文档的目的是详细地介绍高校教学平台所包含的需求,以便用户能够确认产品的确切需求以及开发人员能够根据需求设计编码,以下叙述将结合文字描述,时序图,流程图,界面原型以及类图等尽可能地通过高校教学平台预期的外部行为和用户可视化行为完整地描述高校教学平台教学系统的功能,性能,用户界面,运行环境,外部接口以及针对用户操作给出的各种响应。
本文档的预期读者有用户(包括在校学生、教师、助教、管理员以及外校游客等),项目经理,开发人员以及跟该项目相关的其他竞争人员和无关人员。
背景
本项目开发的软件为一个高校教学平台。
自21世纪,我们的生活就全面的迈入了全新的信息化时代,教育行业也不例外,逐渐的信息技术开始成为教学与学习的重要工具,从初期的投影仪、电脑教室逐渐发展至互动课堂、在线教育。信息技术日益融入教与学的过程,开始引发教学方式和学习方式的深刻变革。华秦教育表示随着教育信息化的大浪潮下,教育信息化将会越来越深刻的影响到教育的发展,势必影响教育变革。
在2020年发生的新冠疫情更是将在线教学成为教学的刚性需求。在线教学平台需要让老师和学生在线上进行高效率、高质量的教学、学习和交流等活动。
在这一大背景下,教学、学习、交流网站应运而生。超文本特性可实现对教学信息最有效的组织与管理。网络化的学习有利于充分实现交互与共享,有利于激发学生的学习兴趣和充分体现学习主体作用,有利于培养学习者的信息素养和信息能力。另一方面教师利用教学、学习、交流网站可以充分发挥网络特性,对学生,教学进行更为有效的管理,同时也有了更为便利的信息发布手段。
定义
-
HTML
HTML(Hyper Text Markup Language)称为超文本标记语言,是一种标识性的语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet 资源连接为一个逻辑整体。HTML 文本是由 HTML 命令组成的描述性文本,HTML 命令可以说明文字,图形、动画、声音、表格、链接等。
-
CSS
层叠样式表(Cascading Style Sheets)是一种用来表现 HTML(标准通用标记语言的一个应用)或
XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS 不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。 -
UML
统一建模语言(Unified Modeling Language)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言。UML是面向对象设计的建模工具,独立于任何具体程序设计语言。
-
B/S 系统
B/S 结构(Browser/Server,浏览器/服务器模式),是 WEB 兴起后的一种网络构模式,WEB 浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器如 Netscape Navigator 或 Internet Explorer,服务器安装SQL Server、Oracle、MYSQL 等数据库。浏览器通过 Web Server 同数据库进行数据交互。
-
Node.js
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型。Node 是一个让 JavaScript 运行在服务端的开发平台,它让 JavaScript 成为与 PHP、Python、Perl、Ruby 等服务端语言平起平坐的脚本语言。发布于 2009 年 5 月,由 Ryan Dahl 开发,实质是对 Chrome V8 引擎进行了封装。Node 对一些特殊用例进行优化,提供替代的 API,使得 V8 在非浏览器环境下运行得更好。V8 引擎执行 JavaScript 的速度非常快,性能非常好。Node 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效,非常适合在分布式设备上运行数据密集型的实时应用。
-
Vue.js
Vue 是一套用于构建用户界面的渐进式 JavaScript 框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,方便与第三方库或既有项目整合。
-
Django
Django 是一个开放源代码的 Web 应用框架,由 Python 写成。采用了 MTV 的框架模式,即模型 M,视图 V 和模版 T。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是 CMS(内容管理系统)软件。并于 2005年 7 月在 BSD 许可证下发布。这套框架是以比利时的吉普赛爵士吉他手 DjangoReinhardt 来命名的。2019 年 12 月 2 日,Django 3. 0 发布。
参考文献
-
Early Approach to Software Engineering, Pallavi Gore, Kritika Saxena.
-
Practical File of Software Engineering and Testing Laboratory, Aakash Raj.
-
Software Engineering, Principles and Practice, 3rd Edition, Hans van Vliet.
-
Program Manager’s Guidebook for Software Assurance, Dr. Kenneth E. Nidiffer,
Timothy A. Chick, Dr. Carol Woody. -
Experimentation in Software Engineering, Claes Wohlin, Per Runeson, Martin
Host, Magnus C. Ohlsson, Bjorn Regnell, Anders Wesslen. -
IEEE Computer Society/Software Engineering Institute Software Process
Achievement (SPA) Award 2009, Satyendra Kumar, Ramakrishnan M. -
Michael Felderer, Wilhelm Hasselbring, Rick Rabiser, Reiner Jung: Software
Engineering 2020, Fachtagung des GI-Fachbereichs Softwaretechnik, 24.-28.
Februar 2020, Innsbruck, Austria. LNI P-300, Gesellschaft für Informatik
e.V. 2020, ISBN 978-3-88579-694-7. -
Regina Hebig, Robert Heinrich: Combined Proceedings of the Workshops at
Software Engineering 2020 Co-located with the German Software Engineering
Conference 2020 (SE 2020), Innsbruck, Österreich, March 05, 2020. CEUR
Workshop Proceedings 2581, CEUR-WS.org 2020. -
Steffen Becker, Ivan Bogicevic, Georg Herzwurm, Stefan Wagner: Software
Engineering and Software Management, SE/SWM 2019, Stuttgart, Germany,
February 18-22, 2019. LNI P-292, GI 2019, ISBN 978-3-88579-686-2. -
Stephan Krusche, Kurt Schneider, Marco Kuhrmann, Robert Heinrich, Reiner
Jung, Marco Konersmann, Eric Schmieders, Steffen Helke, Ina Schaefer,
Andreas Vogelsang, Björn Annighöfer, Andreas Schweiger, Marina Reich, André
van Hoorn: Proceedings of the Workshops of the Software Engineering
Conference 2019, Stuttgart, Germany, February 19, 2019. CEUR Workshop
Proceedings 2308, CEUR-WS.org 2019. -
Peter Liggesmeyer, Gregor Engels, Jürgen Münch, Jörg Dörr, Norman Riegel:
Software Engineering 2009: Fachtagung des GI-Fachbereichs Softwaretechnik
02.-06.03. 2009 in Kaiserslautern. LNI P-143, GI 2009, ISBN
978-3-88579-237-6. -
Jürgen Münch, Peter Liggesmeyer: Software Engineering 2009 - Workshopband,
Fachtagung des GI-Fachbereichs Softwaretechnik 02.-06.03.2009 in
Kaiserslautern. LNI P-150, GI 2009, ISBN 978-3-88579-244-4. -
《软件工程——实践者的研究方法》,Roger S.Pressman,机械工业出版社
-
《软件需求(第三版)》,Karl Wiegers,Joy Beatty,清华大学出版社
-
《计算机软件产品开发文件编制指南》(GB 8567-88)
-
Information Technology Project Management, Second Edition, Kathy Schwalbe,
Course Technology. -
Successful Project Management, Gido, J. and Clements, J. South-Western
Publishing. -
On Time and Within Budget: Software Project Management Practices and
Techniques, 3rd Edition, Bennatan, E., Wiley. -
Software Project Management: A Unified Framework, Walker Royce,
Addison-Wesley. -
IS Project Management Handbook, Doss, G., Prentice Hall.
-
CMMI: Guidelines for Process Integration and Product ImprovementMary Beth
Chrissis, Mike Konrad, Sandy Shrum. -
CMMI® Distilled: A Practical Introduction to Integrated Process Improvement,
Second Edition, By Dennis M. Ahern, Aaron Clouse, Richard Turner. -
CMMI® SCAMPI Distilled Appraisals for Process Improvement, By Dennis M.
Ahern, Jim Armstrong, Aaron Clouse, Jack R. Ferguson, Will Hayes, Kenneth E.
Nidiffer. -
军用软件能力成熟度模型可重复级实施指南,石柱,中国标准出版社
-
战略管理(原书第6版),Greey Johnson & Kevan Scholes,王军等译,人民邮电出版社
-
复杂产品系统创新管理,陈劲,科学出版社
-
Product Management,4thedition,Donald R. Lehmann & Russell S.
Winer,McGraw-Hill Companies,Inc. -
基于ITIL®的IT服务管理基础篇,Jan van Bon,章斌译,清华大学出版社
-
创新管理-获取持续竞争优势,宁钟,机械工业出版社
-
软件编档导论,金波,清华大学出版社
-
计算机软件工程规范国家标准汇编,中国标准出版社
-
《“软件需求工程”教学安排 20200926》
-
《[G25]“高校教学平台”项目可行性报告》
-
《[G25]“高校教学平台”项目章程》
-
《[G25]“高校教学平台”项目计划》
-
《[G25]“高校教学平台”需求工程计划》
-
《[G25]“高校教学平台”前景与范围》
-
《[G25]“高校教学平台”质量保证计划》
-
《[G25]“高校教学平台”软件需求规格说明书》
-
《[G25]“高校教学平台”系统设计计划》
-
《[G25]“高校教学平台”系统编码与实现计划》
-
《[G25]“高校教学平台”测试计划》
-
《[G25]“高校教学平台”需求变更控制文档》
-
《[G25]“高校教学平台”用户手册》
-
《[G25]“高校教学平台”需求变更控制会规程》
总体设计
用户需求规定
教师、助教
-
在课程主页界面有课程的介绍,包括课程所需知识、相关作业和要求的介绍。
-
可以增添、修改或删除相应的作业。每项作业都有明确的开始和截至时间、是否为个人作业和作业分数在总成绩中所占百分比等,也可以为作业上传相应的文件资料。教师、助教可以查看已布置的作业列表,并查看学生的提交情况与数量。其中查看作业列表时可以按照作业的布置时间、开始时间和截至时间进行排序。在作业发布之后的任何时间内教师都可以在线批改学生的作业、写评语并公布分数。
-
可以增添、修改或删除相应的实验。教师、助教布置实验时可以提供一个在线仿真实验的链接,也可以直接引用导入本系统提供的在线实验系统。每项实验都有明确的开始和截至时间、是否为个人实验和实验分数在总成绩中所占百分比等,也可以为实验上传相应的文件资料。教师、助教可以查看已布置的实验列表,并查看学生的提交情况与数量。其中查看实验列表时可以按照实验的布置时间、开始时间和截至时间进行排序。在实验发布之后的任何时间内教师都可以在线批改学生的实验、写评语并公布分数。
-
可以增加、修改或删除题目(题目共4种类型:判断题、单选题、多选题、填空题,教师、助教需要在添加题目时输入题目的内容和参考答案等)。教师、助教在添加测试时可以从自己的题库中选择已添加的题目拼成一张试卷来发布,并注明测试的起止时间、持续时间、分数所占百分比和测试途中允许退出全屏的最大次数。同时可以查看学生各作业、测试的得分状况。
-
均可以进入该教学班的论坛页面发布或删除自己的帖子,需要输入帖子标题、内容等相关信息。在教学班论坛页面会展示该教学班的所有根帖子列表,用户可以点击帖子的名称进入回复该帖子的所有帖子列表。用户可以任意查看这些帖子并发表回复。只要是教师、助教回复或发表的帖子,都会在帖子前面用红色标注“教师、助教参与”以便学生查找。
-
可以针对某个自己管理的教学班添加、查看、修改、删除相应的章节信息,每个章节可以包含多个资料。教师(助教)可以为各章节添加、查看、修改、删除相应资料,章节列表分为课件、资料、作业、实验、测试等类型,可以根据类型筛选显示部分列表项。可以设置所属章节、资料名称、资料类型、选择附件后可以上传资料,并可以看到资料附件名称、大小和学生的完成进度。点击某条资料后可以跳转到资料详细信息界面,可以看到资料开始时间、所属章节、附件信息等详细信息。
-
可以针对某个自己管理的教学班的各个章节添加、查看、修改、删除相应资料,章节列表分为课件、资料、作业、实验、测试等类型,可以根据类型筛选显示部分列表项。可以设置所属章节、资料名称、资料类型、选择附件后可以上传资料,并可以看到资料附件名称、大小和学生的完成进度。点击某条资料后可以跳转到资料详细信息界面,可以看到资料开始时间、所属章节、附件信息等详细信息。
-
教师可以更新课程章节目录、发布所授课程的资料并设置下载权限、发布作业测试和实验(同时系统应当通知学生)、发布新通知、发表回复帖子和批改作业、测试并公布分数等。
-
对于所有的实验,教师应当提前设置好实验的占分比例以及截至时间,也可以针对个人需要设置超期提交的惩罚措施。(注意,作业批改的分数永远是百分制的,最后系统自动按比例折算),同时在教师布置作业时系统应当提醒教师当前已布置的作业的占分比。
学生
-
在作业截至时间之前可以反复查看作业详情、反复提交作业。每次提交作业都会覆盖之前的版本,但是当老师评分后不能再次提交。提交作业时不仅可以输入与作业相关的文字回答,也可以上传文件资料作为附件。作业截至日期过后学生不能再提交作业,系统会自动给出0分,并且在本教学班的作业列表内显示该作业的状态为未提交。教师、助教打分后,学生可以通过查看作业提交详情查看所获分数与评语。
-
在实验截至时间之前可以反复查看实验详情、反复提交实验。每次提交实验都会覆盖之前的版本,但是当老师评分后不能再次提交。提交实验时不仅可以输入与实验相关的文字回答,也可以上传文件资料作为附件。实验截至日期过后学生不能再提交实验,系统会自动给出0分,并且在本教学班的实验列表内显示该实验的状态为未提交。教师、助教打分后,学生可以通过查看实验提交详情查看所获分数与评语。
-
可以查看自己的成绩,包括测试、作业两大成绩。学生应当在规定的时间内完成测试并提交,如果有任何作弊行为(以教师规定的测试途中允许退出全屏的最大次数为判断标准),应当以0分处理。任何测试均只有一次提交机会。在学生开始答题前,测试的详情页面会显示测试的详细信息(起止时间、持续时间、测试得分所占百分比、测试题型概况、测试途中允许退出全屏的次数)以提醒学生,并且通过弹框让学生确认已经知晓了该测试的须知内容。
-
均可以进入该教学班的论坛页面发布或删除自己的帖子,需要输入帖子标题、内容等相关信息。在教学班论坛页面会展示该教学班的所有根帖子列表,用户可以点击帖子的名称进入回复该帖子的所有帖子列表。用户可以任意查看这些帖子并发表回复。
-
可以查看教师(助教)发布的章节和资料信息,下载相关的资料附件。学生可以查看资料类型,根据类型筛选显示部分列表项。点击具体某项资料可以跳转到信息界面,可以看到资料开始时间、所属章节、附件信息等详细信息。学生查看或下载资料后该项资料的完成进度会同步更新。
-
可以查看教师(助教)发布的资料信息,下载相关的资料附件。学生可以查看资料类型,根据类型筛选显示部分列表项。点击具体某项资料可以跳转到信息界面,可以看到资料开始时间、所属章节、附件信息等详细信息。学生查看或下载资料后该项资料的完成进度会同步更新。
-
学生可以查看已加入的某门课程的具体信息,包括课程章节、与该课程有关的通知列表、与该课程有关的所有资料、与该课程有关的作业、与该课程有关的测试、与该课程有关的实验、与该课程有关的论坛、在该课程的分组情况和目前已获得的成绩。学生对该课程仅有查看下载资料、查看提交作业测试实验、查看发布新帖、查看成绩通知和章节的权限。
管理员
-
可以添加新学生、新教师,分配统一学工号
-
可以添加、修改教师主页
-
可以添加、修改课程基本信息,包括课程介绍、任课老师,选课学生名单等
-
可以添加、修改教学班,包括教学班教师、教学班学生、教学班信息等
-
可以修改、导出考试成绩
-
可以由多人担任
游客
-
可以浏览公开课程和教师介绍
-
可以注册、登录账户,用于记录个人信息、浏览或学习公开课程的信息等
-
要求网站界面简洁大方,有网站导航、相关链接,包括学校官网等
其他需求规定
-
性能需求:
-
系统应保证运行稳定,避免出现崩溃。
-
主流浏览器均能正常访问本系统。
-
系统应能保证至少500人的并发访问。
-
当用户登录以及进行任何操作时,系统应该能及时进行反应,反应的时间在3s以内。
-
系统应该能及时检测出各种非正常情况,如与设备的通信终端,无法连接数据库服务器等,避免长时间等待。
-
用户提交查询操作后响应时间不超过5s。
-
每个页面一般情况下应在2s内加载完毕,高峰期应在6s内加载完毕。
-
系统保证在一周内不超过一次的维护与重启。
-
-
输入输出需求:
- 客户端通过网页形式向用户展现一个简洁友好的操作界面,用户可以点击超链接跳转界面,点击按钮提交表单。
服务器后台处理数据后显示在网页界面上。
- 客户端通过网页形式向用户展现一个简洁友好的操作界面,用户可以点击超链接跳转界面,点击按钮提交表单。
-
数据管理需求:
-
安全:数据库对参与数据库操作的数据都会预处理后再加入查询语句,避免通过网页
SQL
注入的方式获取数据库信息或破坏数据库。数据库中密码通过不可逆加密加密存储,限制过短的密码,减低密泄露的风险。 -
性能:对于需要频繁访问数据库的操作,需要建立持久的数据库连接。一般操作,为减轻数据库负荷,在操作完成后断开连接。
-
对于任何一个系统来说,安全是保证其正常运行的关键因素之一。因此在我们的系统中,对于安全与权限进行了如下设计:
-
所有涉及功能信息或个人信息的网络事务,都应进行加密操作。
-
除浏览菜单外,用户必须登录后才能完成其他操作。
-
不同角色登录入口不同。
-
除游客外每个用户都会有一个初始密码。
-
除游客外每个用户在首次登录系统时必须更换自己的密码。
-
用户修改密码时必须进行验证。
-
用户密码设置具有如下的强度要求:必须8位以上,且为数字与英文的组合。
-
用户无法非法修改数据库。
-
顾客的登录受计算机系统访问控制策略的限制。
-
只有被授权为对应管理员的用户,才能编辑及发布公告。
-
只有被授权为对应管理员的用户,才能编辑及发布作业。
-
只有被授权为对应管理员的用户,才能删除游客评论。
-
只有被授权为对应管理员的用户,才能对论坛进行合并操作。
-
只有被授权为对应管理员的用户或者是发帖本人,才能对论坛进行删帖操作。
-
只有被授权为对应管理员的用户或者是发布课件本人,才能对课件进行删除或修改操作。
-
只有系统管理员有权查看系统日志。
-
任何人都无权修改或删除日志。
-
只有系统管理员有权查看及修改底层数据库数据,且行为应被系统日志记录。
-
游客用户只能访问课程介绍以及被教师公开的课件。
-
只有被对应管理员标明的课件才能被下载。
-
没被对应管理员标明的课件只能在线浏览,不提供下载选项。
-
学生只可查看自己的学习成绩。
-
教师只可查看所教课程的学生成绩。
-
本系统对重要的数据应进行加密,如用户口令、重要参数等。
-
允许系统管理员进行数据的备份和恢复,以防止数据的破坏和丢失。
-
本系统应该能够记录系统运行时所发生的所有错误,包括本机错误和网络错误、这些错误记录便于查找错误的原因。日志同时记录用户的关键性操作信息。
-
当流量过大时,优先限制游客流量防止恶意访问。
-
除此之外,系统应当保证系统自身的安全:
-
系统应当提供一定的限制功能,即只允许在局域网内特定机器上运行用户管理功能。
-
系统应具备加密登录、数据加密传输、数据存储等安全方面的保障,以确保系统的安全性。
-
系统时基于开放的操作系统平台和数据库上的,因此,要求建立操作系统和数据库的安全保障体系,保证操作系统和数据库的安全。
-
对可能发生严重后果的操作要有补救措施。通过补救措施用户可以回到原来的正确状态。对可能造成等待时间较长的操作应该提供取消功能。
-
对一些特殊符号和计算机代码的输入,与系统使用的符号相冲突的字符等进行判断并阻止用户输入该字符;
-
对错误操作支持可逆性处理,如取消系列操作。在输入有效性字符之前应该阻止用户进行只有输入之后才可进行的操作。
-
-
故障处理需求:
-
软件开发团队提供系统维护支持,有完备的内部文档和外部文档。
-
系统报错信息可读性高。
-
文件格式错误时,系统提出警告,保持数据库数据不变。
-
数据库误删除时,可以使用撤销删除修复。
-
重复操作导致卡死时,系统提出警告。
-
访问无权限时,系统发出提示并禁止用户访问。
-
上行文件出错时,系统应提供自主覆盖功能。
-
系统应该提供验证码防止恶意登录。
-
系统应该及时信息备份防止病毒攻击。
-
系统应提供密保方式防止人为破解密码。
-
系统应该能检测到恶意操作。
-
当检测到恶意重复操作时,系统应提出警告并在一段时间内不允许操作。
-
运行环境
本网站主要服务于浙江大学的师生,保证至少 5000
名学生同时取得服务的需求,包括数据存储能力和网络吞吐能力,保证账户一定的安全性。
-
软件运行环境:
-
服务器选用阿里云 ECS 云服务器, 操作系统选择 Linux Ubuntu-20.04
64bit,服务器配置为 8G 内存 4 核 5M 带宽。 -
开发平台后端选择 Python 的 Django 库,前端选择 Vue.js。
-
提供对外服务所要求的相应的安全保障。
-
-
硬件运行环境:
硬件层面对于所使用的服务器有以下要求:
-
CPU:主频率 > 2.0GHz。
-
内存:>= 2GB。
-
硬盘:硬盘容量 > 200GB、转速 >= 5400转/分钟。
-
网卡:百兆网卡。
-
网线、键盘、鼠标、显示器:正常连接使用的设备。
-
基本设计概念和处理流程
- 服务器:
使用阿里云 ECS 云服务器服务器,Python语言编写后端代码,数据库采用
Mysql。当用户通过浏览器使用网站系统时,浏览器接收用户的请求,并传送到服务器或调用内嵌的脚本,分析用户请求,通过数据库接口函数向数据库发送
SQL 查询语句,数据库接收 SQL
查询语句后执行,返回查询结果,处理查询结果后返回给前端,并显示在网站页面上。
- 客户端:
浏览器采用常用的 IE, Chrome, FireFox
等。客户端在不频繁的操作页面时完成操作后断开与数据库的连接以减轻服务器负荷;在操作频繁时保持连接以增加访问速度。
结构
系统模块架构
数据库ER图
人工处理过程
在本系统的运行过程中,可能会出现一些系统无法自动解决的问题,需要人工处理介入来解决,包括学生用户的查看信息、下载资料等,教师用户的发布通知、上传资料、删除资料、发布作业、下载作业等。
其中密码重置过程的人工处理:
当用户忘记密码且未填写邮箱或忘记所填写的邮箱时,可以找到有管理该账户权限的教师或管理员,请求重置密码,并及时填写邮箱信息以便于以后的密码找回。
尚未解决的问题
暂无
接口设计
本系统作为网站系统,用户所有行为均在网页页面上实现,用户通过鼠标点击或键盘输入完成与系统的交互。
用户主要通过按钮、模态框、下拉选择框、下拉菜单、定制的编辑框等可视化元素与服务器后端进行交互。
用户接口
-
管理员
-
登录、注销接口
-
查看、修改学生或教师信息接口
-
添加用户(教师、助教、学生)接口
-
密码修改与重置接口
-
-
教师、助教
-
登录、注销接口
-
查看、修改个人信息接口
-
密码修改或重置接口
-
添加助教接口
-
添加教学班接口
-
添加、修改、删除、查看教学班章节接口。
-
添加、修改、删除、查看教学班资料接口
-
添加、修改、删除、查看教学班作业接口
-
添加、修改、删除、查看教学班实验接口
-
添加、修改、删除、查看教学班测试接口
-
添加、回复、删除、查看教学班论坛帖子接口
-
添加、修改、删除、查看教学班通知接口
-
添加、修改、删除、查看教学班分组接口
-
-
学生
-
登录、注销接口
-
查看、修改个人信息接口
-
密码修改或重置接口
-
上传资料接口
-
查看、提交作业接口
-
查看、提交实验接口
-
查看、提交实验接口
-
查看、新建组队接口
-
添加、回复、删除、查看教学班论坛帖子接口
-
查看通知接口
-
-
游客
-
登录、注销接口
-
密码修改或重置接口
-
查看、筛选所有课程列表接口
-
查看公共课程课程首页信息、公共资料接口
-
查看教师个人主页接口
-
外部接口
本系统的所有数据存储在服务器及数据库中,包括账号密码、资料、通知、作业、实验、题库、测试、课程信息、教师个人信息等数据。资源文件及不适宜数据库表项存储的超长文本存储在文件中。
网页前端获取用户输入后,由网页后端完成与服务器及数据库的交互。利用Python的pymysql库与 MySQL之间的接口完成网站外部接口设计。本系统的初始数据依靠人工导入存储。待系统正式部署运行后,除游客注册的信息意外,所有课程、教师学生账户的数据均由管理员根据学校教务网数据导入。
内部接口
本系统总体分为用户管理、课程管理和教学班管理三个模块,各模块之间耦合度较低,主要通过用户ID或课程ID进行连接:通过用户ID获得不同的权限,登录不同的用户界面;通过课程ID和教学班ID获取相应的数据。
但各模块共享数据库表项,各模块之间相对可以独立开发,但必须先统一数据库数据。
运行设计
运行模块的组合
本系统总体分为用户管理、课程管理和教学班管理三个模块。
用户登录后,根据浏览器存储的cookie(包含用户ID、用户身份类型)进入不同的界面。其中,针对某教学班,教师与助教享有相同的界面和相关操作。学生与教师的界面是不同的。
一门课程可以有多个教师开授多个教学班,因此教学班内主要保留的信息只有课程的一些基本介绍,这通过课程ID利用数据库操作连接。
教师布置作业、实验、测试等,会由数据库进行及时的记录并在学生登录时同步到所有相应的界面上。
因此,虽然各个模块之间不会共享界面,但是共享数据库的数据,通过后端的业务逻辑代码进行相应的操作。后台程序只共享数据库连接。
运行控制
-
界面
用户界面是用户直接与系统交互的部分,界面要求做到简约但不简陋,能引导用户进行无障碍、连续操作。设计时,在为用户提供便捷、快速的操作基础上适当增加细节部分,使得界面具有一定的美观性。
-
运行控制的条件与限制
本项目的开发要求小组成员充分的参与度,能及时保质保量完成任务。且项目开发过程中一定会存在技术上的难点和设备方面的欠缺,需要开发小组合理利用现有设备和资源,积极查找资料解决问题,在完成项目开发的基础上,同时保证项目的可用性、安全性、可维护性、可扩展性等。
-
前台与后台的关系
前台主要展示用户个人基本信息、课程信息、课程内容和教学班基本信息、教学班章节列表、资料列表、作业实验测试论坛和通知的详细信息等显示信息。
后台主要负责业务逻辑, 控制前台显示信息,负责与数据库和前端的数据交互 。
-
运行时的安全控制
本系统含有作业系统和资源共享功能,对数据库的保护比较重要。况且部分教师会比较注重上传资料的版本问题等。同时,启用账号功能,对账户的安全性需要加以保护。系统将对重要信息加密(一般采用不可逆加密算法,如MD5、SHA256等)。数据库操作前预处理参与数据库查询的输入信息,尽量多采用选项选择的方式输入信息
,如果采用文本框输入的方式应当对文字进行一定程度的检查,防止脚本注入等常见攻击。
运行时间
作业系统、资源共享系统需要能够进行文件传输,账户系统会频繁与数据库交互以获取账户信息,会占用较多的数据库资源。
系统数据结构设计
逻辑结构设计要点
用户表(User)
User (User_ID, Password, Name, Department, Email, Phone, Type)
课程表(Course)
Course (Course_ID, Department, Credits, Name, Type, Description, Outline, Teacher_Group)
教学班表(Class)
Class (Class_ID, Course_ID, Semester, Year, Building, Room)
作业表(Assignment)
Assignment (Assignment_ID, Class_ID, Chapter_Number, Name, Description, Percentage, Create_Time, Start_Time, Expire_Time, Type)
实验表(Experiment)
Experiment (Experiment_ID, Class_ID, Chapter_Number, Name, Description, Percentage, Create_Time, Start_Time, Expire_Time, Type)
通知表(Notification)
Notification (Notification_ID, Class_ID, Create_Time, Type, Content)
测试表(Exam)
Exam (Exam_ID, Class_ID, Name, Percentage, Create_Time, Start_Time, Expire_Time, Duration, Punishment_Number)
授课表(Teaches)
Teaches (Teacher_ID, Class_ID)
与课表(Takes)
Takes (Student_ID, Class_ID, Grade)
题库表(Question)
Question (Question_ID, Exam_ID, Score, Type, Description, Content, Answer)
组队表(Team)
Team (Class_ID, Team_Number, Team_Member_ID)
教师详情表(Teacher_Detail)
Teacher_Detail (Teacher_ID, Name, Department, Position, Major, Phone, Email, Address, Description, Teaching_Course, Research_Oriention, Paper, Personal_Homepage)
章节表(Chapter)
Chapter (Class_ID, Chapter_Number, Name, Father_Chpater_Number, Type)
资源表(Resource)
Resource (Resource_ID, Upload_User_ID, Class_ID, Assignment_ID, Experiment_ID, Chapter_Number, Name, Size, Type, Authority, Upload_Time, Start_Time, Expire_Time)
帖子表(Post)
Post (Post_ID, User_ID, Class_ID, Type, Create_Time, Replyto_Post_ID, Title, Content)
提交作业表(Take_Assignment)
Take_Assignment (Take_Assignment_ID, Student_ID, Assignment_ID, Submit_Time, Content, Score, State, Comment)
提交测试表(Take_Exam)
Take_Exam (Student_ID, Exam_ID, Submit_Time, Cheat, Score, State)
提交实验表(Take_Experiment)
Take_Experiment (Take_Experiment_ID, Student_ID, Experiment_ID, Submit_Time, Content, Score, State, Comment)
查看章节表(View_Chapter)
View_Chpater (Class_ID, Chapter_Number, Student_ID, Progress)
物理结构设计要点
用户表(User)
字段名 | 字段含义 | 类型 | 长度 | 默认 | 允许空 | 主键 | 其他 |
---|---|---|---|---|---|---|---|
User_ID | 用户ID | Varchar | 20 | No | Yes | ||
Password | 密码 | Varchar | 20 | ‘123456’ | No | No | Auto_increment |
Name | 姓名 | Varchar | 255 | No | No | ||
Department | 所属学院 | Varchar | 255 | No | No | ||
电子邮件 | Varchar | 255 | No | No | |||
Phone | 联系电话 | Varchar | 20 | Yes | No | ||
Type | 用户类型 | Int | 11 | No | No |
课程表(Course)
字段名 | 字段含义 | 类型 | 长度 | 默认 | 允许空 | 主键 | 其他 |
---|---|---|---|---|---|---|---|
Course_ID | 课程ID | Varchar | 255 | No | Yes | ||
Department | 开课学院 | Varchar | 255 | No | No | ||
Credits | 学分 | Float | No | No | |||
Name | 课程名 | Varchar | 255 | No | No | ||
Type | 课程类别 | Boolean | No | No | |||
Description | 简介 | Text | No | No | |||
Outline | 课程大纲 | Text | Yes | No | |||
Teacher Group | 授课教师组 | Varchar | 255 | Yes | No |
教学班表(Class)
字段名 | 字段含义 | 类型 | 长度 | 默认 | 允许空 | 主键 | 其他 |
---|---|---|---|---|---|---|---|
Class_ID | 教学班ID | Varchar | 255 | No | Yes | ||
Course_ID | 课程ID | Varchar | 255 | No | No | ||
Semester | 学期 | Varchar | 255 | No | No | ||
Year | 学年 | Int | 4 | No | No | ||
Building | 授课教学楼 | Varchar | 255 | No | No | ||
Room | 教室号 | Varchar | 255 | No | no |
作业表(Assignment)
字段名 | 字段含义 | 类型 | 长度 | 默认 | 允许空 | 主键 | 其他 |
---|---|---|---|---|---|---|---|
Assignment_ID | 作业ID | Int | No | Yes | Auto_increment | ||
Class_ID | 教学班ID | Varchar | 255 | No | No | ||
Chapter_Number | 章节序号 | Varchar | 255 | No | No | ||
Name | 作业名 | Varchar | 255 | No | No | ||
Description | 描述 | Text | No | No | |||
Percentage | 分数占比 | Int | No | No | |||
Create_Time | 创建时间 | Datetime | No | No | |||
Start_Time | 开始时间 | Datetime | No | No | |||
Expire_Time | 截止时间 | Datetime | No | No | |||
Type | 作业类型 | Boolean | No | No |
实验表(Experiment)
字段名 | 字段含义 | 类型 | 长度 | 默认 | 允许空 | 主键 | 其他 |
---|---|---|---|---|---|---|---|
Experiment_ID | 实验ID | Int | No | Yes | Auto_increment | ||
Class_ID | 教学班ID | Varchar | 255 | No | No | ||
Chapter_Number | 章节序号 | Varchar | 255 | No | No | ||
Name | 实验名 | Varchar | 255 | No | No | ||
Description | 描述 | Text | No | No | |||
Percentage | 分数占比 | Int | No | No | |||
Create_Time | 创建时间 | Datetime | No | No | |||
Start_Time | 开始时间 | Datetime | No | No | |||
Expire_Time | 截止时间 | Datetime | No | No | |||
Type | 实验类型 | Boolean | No | No |
通知表(Notification)
字段名 | 字段含义 | 类型 | 长度 | 默认 | 允许空 | 主键 | 其他 |
---|---|---|---|---|---|---|---|
Notification ID | 通知ID | Int | No | Yes | Auto_increment | ||
Class_ID | 教学班ID | Varchar | 255 | No | No | ||
Create_Time | 创建时间 | Datetime | No | No | |||
Type | 通知类型 | Boolean | No | No | |||
Content | 内容 | Text | No | no |
测试表(Exam)
字段名 | 字段含义 | 类型 | 长度 | 默认 | 允许空 | 主键 | 其他 |
---|---|---|---|---|---|---|---|
Exam_ID | 测试ID | Int | No | Yes | Auto_increment | ||
Class_ID | 教学班ID | Varchar | 255 | No | No | ||
Name | 测试名 | Varchar | 255 | No | No | ||
Percentage | 测试占比 | Int | No | No | |||
Create_Time | 创建时间 | Datetime | No | No | |||
Start_Time | 开始时间 | Datetime | No | No | |||
Expire_Time | 截止时间 | Datetime | No | No | |||
Duration | 持续时间 | Int | No | No | |||
Punishment Number | 允许退出全屏次数 | Int | No | No |
授课表(Teaches)
字段名 | 字段含义 | 类型 | 长度 | 默认 | 允许空 | 主键 | 其他 |
---|---|---|---|---|---|---|---|
Teacher_ID | 教师ID | Varchar | 20 | No | Yes | ||
Class_ID | 教学班ID | Varchar | 255 | No | Yes |
与课表(Takes)
字段名 | 字段含义 | 类型 | 长度 | 默认 | 允许空 | 主键 | 其他 |
---|---|---|---|---|---|---|---|
Student_ID | 学生ID | Varchar | 20 | No | Yes | ||
Class_ID | 教学班ID | Varchar | 255 | No | Yes | ||
Grade | 所获成绩 | Float | 0 | No | No |
题库表(Question)
字段名 | 字段含义 | 类型 | 长度 | 默认 | 允许空 | 主键 | 其他 |
---|---|---|---|---|---|---|---|
Question_ID | 题目ID | Int | No | Yes | Auto_increment | ||
Exam_ID | 测试ID | Int | No | No | |||
Score | 分值 | Float | No | No | |||
Type | 题型 | Int | No | No | |||
Description | 描述 | Text | No | No | |||
Content | 题目内容 | Text | No | No | |||
Answer | 参考答案 | Text | No | No |
组队表(Team)
字段名 | 字段含义 | 类型 | 长度 | 默认 | 允许空 | 主键 | 其他 |
---|---|---|---|---|---|---|---|
Class_ID | 教学班ID | Varchar | 255 | No | Yes | ||
Team Number | 队伍序号 | Int | No | Yes | |||
Team Member ID | 队伍成员 ID列表 | Text | No | No |
教师详情表(Teacher_Detail)
字段名 | 字段含义 | 类型 | 长度 | 默认 | 允许空 | 主键 | 其他 |
---|---|---|---|---|---|---|---|
Teacher_ID | 教师ID | Varchar | 20 | No | Yes | ||
Name | 教师姓名 | Varchar | 255 | No | No | ||
Department | 所属学院 | Varchar | 255 | No | No | ||
Position | 教师职位 | Varchar | 255 | Yes | No | ||
Major | 教师专业 | Varchar | 255 | Yes | No | ||
Phone | 联系方式 | Varchar | 20 | No | No | ||
电子邮件 | Varchar | 255 | No | No | |||
Address | 联系地址 | Varchar | 255 | No | No | ||
Description | 个人简介 | Text | No | No | |||
Teaching Course | 教授课程 | Text | No | No | |||
Research Orientation | 研究方向 | Text | Yes | No | |||
Paper | 发表论文 | Text | Yes | No | |||
Personal Homepage | 个人主页 | Text | Yes | No |
章节表(Chapter)
字段名 | 字段含义 | 类型 | 长度 | 默认 | 允许空 | 主键 | 其他 |
---|---|---|---|---|---|---|---|
Class_ID | 教学班ID | Varchar | 255 | No | Yes | ||
Chapter Number | 章节序号 | Varchar | 255 | No | Yes | ||
Name | 章节名称 | Varchar | 255 | No | No | ||
Father Chapter Number | 父章节序号 | Varchar | 255 | null | Yes | No | |
Type | 类型 | Int | No | No |
资源表(Resource)
字段名 | 字段含义 | 类型 | 长度 | 默认 | 允许空 | 主键 | 其他 |
---|---|---|---|---|---|---|---|
Resource_ID | 资源ID | Int | No | Yes | Auto_increment | ||
Upload User_ID | 上传用户ID | Varchar | 20 | No | No | ||
Class_ID | 教学班ID | Varchar | 255 | No | No | ||
Assignment_ID | 所属作业ID | Int | null | Yes | No | ||
Experiment_ID | 所属实验ID | Int | null | Yes | No | ||
Chapter Number | 所属章节号 | Varchar | 255 | No | No | ||
Name | 资源名称 | Varchar | 255 | No | No | ||
Size | 资源大小 | Int | No | No | |||
Type | 资源种类 | Varchar | 255 | No | No | ||
Authority | 资源权限 | Boolean | No | No | |||
Upload_Time | 上传时间 | Datetime | No | No | |||
Start_Time | 开始时间 | Datetime | No | No | |||
Expire_Time | 截止时间 | Datetime | No | No |
帖子表(Post)
字段名 | 字段含义 | 类型 | 长度 | 默认 | 允许空 | 主键 | 其他 |
---|---|---|---|---|---|---|---|
Post_ID | 帖子ID | Int | No | Yes | Auto_increment | ||
User_ID | 用户ID | Varchar | 20 | No | No | ||
Class_ID | 教学班ID | Varchar | 255 | No | No | ||
Type | 种类 | Boolean | No | No | |||
Create_Time | 发表时间 | Datetime | No | No | |||
Replyto Post_ID | 回复帖子ID | Int | Yes | No | |||
Title | 帖子标题 | Varchar | 255 | No | No | ||
Content | 帖子内容 | Text | Yes | No |
提交作业表(Take_Assignment)
字段名 | 字段含义 | 类型 | 长度 | 默认 | 允许空 | 主键 | 其他 |
---|---|---|---|---|---|---|---|
Take Assignment ID | 提交ID | Int | No | Yes | Auto_increment | ||
Student_ID | 学生ID | Varchar | 20 | No | No | ||
Assignment ID | 作业ID | Int | No | No | |||
Submit_Time | 提交时间 | Datetime | Yes | No | |||
Content | 提交内容 | Text | Yes | No | |||
Score | 获得分数 | Float | No | No | |||
State | 提交状态 | Int | No | No | |||
Comment | 教师评语 | Varchar | 255 | Yes | No |
提交测试表(Take_Exam)
字段名 | 字段含义 | 类型 | 长度 | 默认 | 允许空 | 主键 | 其他 |
---|---|---|---|---|---|---|---|
Student_ID | 学生ID | Varchar | 20 | No | Yes | ||
Exam_ID | 测试ID | Int | No | Yes | |||
Submit_Time | 提交时间 | Datetime | No | Yes | |||
Cheat | 是否作弊 | Boolean | False | No | No | ||
Score | 获得分数 | Float | No | No | |||
State | 提交状态 | Int | No | No |
提交实验表(Take_Experiment)
字段名 | 字段含义 | 类型 | 长度 | 默认 | 允许空 | 主键 | 其他 |
---|---|---|---|---|---|---|---|
Take Experiment ID | 提交ID | Int | No | Yes | Auto_increment | ||
Student_ID | 学生ID | Varchar | 20 | No | No | ||
Experiment ID | 实验ID | Int | No | No | |||
Submit_Time | 提交时间 | Datetime | Yes | No | |||
Content | 提交内容 | Text | Yes | No | |||
Score | 获得分数 | Float | No | No | |||
State | 提交状态 | Int | No | No | |||
Comment | 教师评语 | Varchar | 255 | Yes | No |
查看章节表(View_Chapter)
字段名 | 字段含义 | 类型 | 长度 | 默认 | 允许空 | 主键 | 其他 |
---|---|---|---|---|---|---|---|
Class_ID | 教学班ID | Varchar | 255 | No | Yes | ||
Chapter Number | 章节序号 | Varchar | 255 | No | Yes | ||
Student_ID | 学生ID | Varchar | 20 | No | Yes | ||
Progress | 查看进度 | Int | 0 | No | No |
数据结构与程序的关系
数据结构为关系型数据库,所以在程序中可以用标准的SQL语句与数据结构进行交互,交互过程中采用通用的数据反问接口。为了保持良好的程序结构,对数据库访问采用Python的pymysql封装类库实现,提高维护性和扩张性。
系统异常设计
出错信息
数据输入 | 处理方法 | 说明 |
---|---|---|
数据库泄露 | 使用加密手段,如sha1和md5双层加密 | 后台服务器被入侵,数据库中用户信息被窃取 |
数据库连接失败 | 修改数据库配置,尝试重新连接 | 配置出错,或并发访问的用户过多 |
数据库丢失 | 定期备份数据库 | 由于物理因素,数据库部分数据丢失 |
数据库乱码 | 统一编码方式 | 客户端和服务器端数据库读取过程编码不一致 |
Cookie出错 | 强制清楚cookie,重新登录 | 用户cookie的token与数据库中用户信息不一致,可能由于用户cookie被劫持,账号被盗取 |
补救措施
项目 | 措施 |
---|---|
数据备份 | 定期备份系统数据,防止当系统数据因不可抗拒力丢失造成的损失。 |
分布存储 | 将系统部署到不同计算机上,减小硬件损坏造成的数据丢失的影响。 |
系统维护设计
概述
我们从三个方面进行系统维护:
项目 | 手段 |
---|---|
数据库 | 销毁数据库连接时使用 try catch语句捕获异常,对不同的错误信息区分输出 |
管理员 | 对整个网站的状况进行控制,以防系统出现不可预计的错误,避免系统显示不合法信息 |
维护人员 | 每次维护后留下完备可读的系统维护日志便于管理员和其他维护人员查看 |
检测点设计
用户模块
-
用户登录、注销、找回密码、修改密码;游客注册、登录
-
教师添加助教
课程模块
-
系统主页介绍
-
课程信息:用户查看课程、查看课程详情、进入课程
教学班模块
-
章节管理:教师或助教增加、修改、删除章节,上传、修改、删除资料,学生查看、下载资料
-
资料管理:教师或助教上传、修改、删除资料,学生查看、下载资料
-
作业管理:教师或助教添加、修改、删除、查看、批改作业,学生查看、提交作业
-
实验管理:教师或助教添加、修改、删除、查看、批改实验,学生查看、提交实验
-
题库管理:教师或助教添加、修改、删除题目
-
测试管理:教师或助教添加、修改、删除、查看、批改测试,学生查看、提交测试
-
论坛管理:教师、助教或学生均可以发布、回复、修改、删除帖子
-
分组管理:教师、助教或学生均可以设置、查看组队信息
-
成绩管理:教师、助教可以查看、修改教学班学生的成绩