数据库实践之在线考试网站 1 使用说明文档 1.1 数据库源的建立 本设计提供了教师.xlsx、题库 样例.xlsx、学生表.xlsx 三个文件,用来导入数据库。 1.2 应用程序使用 1.3 开发环境简介 操作系统:Windows 10、Linux DBMS: mysql Ver 8.0.20 for Linux on x86_64 (Source distribution) 应用程序开发环境:IntelliJ IDEA Educational Edition 2019.3.1、Visual Studio Code 数据源:Microsoft Office Excel Java版本:JDK1.8.0_251 2 需求分析 2.1 项目功能说明 项目共有三个角色:管理员、教师、学生。其中管理员可以增、删、改教师账号、重置学生密码、导入题库和开始正式考试。教师可以按照班级从excel文件自动导入学生账号,可以对学生账号增删改查。 本系统有模拟考试和正式考试功能,考试时间60分钟。教师可以管理自己班级的模拟考试时间,可以提前设置考试日期和时间;管理员可以开启正式考试,可以提前设置考试日期和时间。 考试系统的试卷由题库随机生成,有判断题、单选题和多选题3种题型。题库表可以由管理员上传,支持覆盖军事理论4大章节。模拟考试完成后可以显示学生打错的选项和标准答案,辅助学生提高成绩。考完过后会自动判卷,将学生成绩传到对应老师的页面。 考试到一个小时未点提交,系统将会自动提交试卷。提交试卷后,教师可以立马看到对应学生的成绩。 在教师页面可以提前设置模拟考试的时间周期,自动开启考试自动关闭考试,管理员可以设置正式考试的考试的时间周期,自动开启自动关闭考试。 开始考试前需要学生勾选《福州大学考试守则》,才能进入考试。系统会保存学生的考试时间和已达选项,避免学生勿关考试页面导致考试剩余时间清零。用户右上角的个人中心可以显示学生学号和姓名,以便监考老师检查核实。 系统采用前后端分离的方式,前端采用nginx部署,通过反向代理实现负载均衡。 2.2 系统流程分析
3 概念结构设计 3.1 E-R图
3.2 关系模型 管理员(账号,密码) 学生(学号,姓名,密码,班级名,得分) 教师(教师号,姓名,密码) 班级教师表(班级号,班级名,教师号,考试开始时间,考试结束时间,班级考试状况 ) 试卷(试卷编号,开始时间,结束时间,学生学号,教师号) 题目(题目编号,题目章节,题干,题目类型,选项信息1,选项信息2,选项信息3,选项信息4,正确答案) 试卷_试题(试卷编号,题目编号,学生答案,结果正误判断) 3.3 详细设计 3.3.1 基本表 管理员信息表(admin)序号字段名称字段描述类型位数属性1username管理员用户名varchar20主键、非空唯一2password密码varchar50非空教师表(teacher)序号字段名称字段描述类型位数属性1teacher_id教师编号varchar20主键、非空唯一2password教师密码varchar50非空3name教师姓名varchar20学生表(student)序号字段名称字段描述类型位数属性1student_id学生编号varchar20主键、非空唯一2password密码varchar50非空3name学生姓名varchar204classroom学生所在班级varchar305score学生最终成绩int 试卷表(paper)序号字段名称字段描述类型位数属性1id试卷编号int主键、非空唯一、自增2student_id学生编号varchar20外键3teacher_id教师编号varchar20外键4begin考试开始时间datatime5over考试结束时间datatime6score得分int题目表(question)序号字段名称字段描述类型位数属性1id题目编号int主键、非空唯一、自增2chapter题目章节varchar103title题目题干varchar1004type题目类型varchar1005option1选项1varchar506option2选项2varchar507option3选项3varchar508option4选项4varchar509answer标准答案varchar10试卷题目表(paper_question)序号字段名称字段描述类型位数属性1paper_id试卷编号int主键2question_id题目编号int主键3student_answer学生答案int4check答案是否正确tinyint1班级教师表(class_teacher)序号字段名称字段描述类型位数属性1class_id班级编号int主键、非空唯一、自增2class_name班级名称varchar20非空、唯一3teacher_id老师编号varchar20外键4start_time考试开始时间timestamp5over_time考试结束时间timestamp6class_status班级考试状况int 3.3.2 基本表的建立 1、管理员信息表 2、教师表 3、学生表 4、试卷表 5、题目表 6、试卷题目表 7、班级教师表 4 编程设计 后端在收到操作时要对操作用户的权限进行判断(过滤器)对于没登录的用户转跳到登录界面对于权限不够的用户转跳到权限不足的页面。 第一次登录时必须强制修改密码,不允许其他操作,在用户操作其他方法时强制下线(删除userId,username,character,注销userId)(过滤器)考试分为模拟考和真实考试模拟考在:一段时间内都可以考,考试时间按照考生进入考试的时间计算,并且在考试结束后直接返回做题情况(细节待补充).正式考试:考试开始时间在管理员按下考试开始时统一开始计算,考试结束后返回提交成功页面。 要调用的函数路径为 4.1 cookie约定 userId:用户登录后的用户idusername:用户登录后的用户的教师号/学号/admincharacter:用户角色student/teacher/admin 4.2 函数约定 login 参数{ “username”:”用户名”, “password”:”md5加密后的用户密码” } username:代表用户名password:代表md5加密后的用户密码 返回值{ “status”:0|1|2|3 } status:代表登录状态,0代表登录失败,1代表登录成功,2代表第一次登录未修改密码,3代表重复登录 功能用户登入设置userId,每次用户登录后获得的userId都是随机的设置username设置character依据用户组转跳页面对于第一次登录的用户,其只能进行修改密码的操作,其他的操作可认为其未登录 logout 参数void 返回值void 功能删除userId删除username删除character后端注销userId转跳到index.html changePassword 参数{ “newPassword”:”md5加密后的新密码” } newPassword:代表用户md5加密后的新密码 返回值void 功能设置新密码 examStatus 参数{ “examType”:0|1 }examType代表考试类型,0代表正式考试,1代表模拟考试 返回值{ “examStart”:0|1 }examStart:代表考试状态,0代表未开始,1代表开始 功能根据考试类型,返回对应考试状态 getPaper 参数void 返回值{ “paperId”:string, “date”:string, “Qtype”:[ number, number, number], “data”:[ { //单选 “title”:string, “choice”:[ string, string, string, string ] }, … { //多选 “title”:string, “choice”:[ string, string, string, string ] }, … { //判断 “title”:string }, … ] } examId:考卷的唯一id,为随机值date:代表考试剩余的时间,返回结束时的时间string “YYYY/MM/DD hh:mm:ss”Qtype:分别代表单选,多选,判断的题目数量不同类型的题目有不同格式,data里必须严格按照单选,多选,判断的顺序排列 功能返回考试试题 submitPaper 参数[ [ number, number, number], [ number, number, …] ] 第一个数组:分别代表单选,多选,判断的题目数量第二个数组:代表考生选的选项,范围为0-15,使用二进制表示:0代表未选1代表A选项或正确2代表B选项或错误4代表C选项8代表D选项多选题则是选项的累加 返回[ [ number, number, number], [ number, number, …] ] 格式同上功能提交学生选项如果是模拟考则返回答案,正式考试返回null一定要用服务器数据来判断是否是模拟考,不能用cookie getClassInExam 参数void 返回[ { “className”:string, “classId”:sting, “classStatus”:0|1|2, “examTime”:string } … ] className:班级名称,如”软件工程三班”classId:班级唯一idclassStatus:班级状态,是否在考试中,0代表不在考试中,1代表在模拟考试,2代表在正式考试examTime:如果班级在考试,返回班级考试时间段,格式”YYYY/MM/DD HH:mm:ss ~ YYYY/MM/DD HH:mm:ss” 功能查询对应教师账号的所有班级考试状态 setClassInExam 参数[ { “className”:string, “classId”:sting, “classStatus”:0|1|2, “examTime”:string } … ] className:班级名称,如”软件工程三班”classId:班级唯一idclassStatus:班级状态,是否在考试中,0代表不在考试中,1代表在模拟考试,2代表在正式考试examTime:如果设置班级在考试,返回班级考试时间段,格式”YYYY/MM/DD HH:mm:ss ~ YYYY/MM/DD HH:mm:ss” 返回{ “status”:0|1 } status:0设置失败,1设置成功 功能设置指定班级的考试时间范围如果该班级考试已开放,再次设置考试时间应当返回设置失败 doImportStudentExcel 参数//受到layui限制,数据格式为FormData “file”:上传的文件 “className”:上传的班级名称 返回{ “status”:0|1 } status:0设置失败,1设置成功对于参数不够返回失败 功能上传班级学生名单,为xls或xlsx delectClass 参数[string,string,…] 一个包含删除班级classId的数组 返回{ “status”:0|1 } status:0设置失败,1设置成功 功能删除指定班级 getStudentInfo 参数{ “classId”:string, } classId:要的学生信息的班级id,”ALL”代表所有学生信息 返回[ { “studentName”:string, “studentNo”:number, “studentScore”:number, } ] studetnName:代表学生姓名 studentNo:代表学生学号studentScore:代表学生成绩功能指定班级的学生信息 getTeacherList 参数void 返回[ { “teacherId”:string, “teacherName”:sting } … ] teacherId:教师唯一idteacherName:教师姓名teacherStatus:教师状态,false表示教师被删除功能查询所有的教师账号 resetPassword 参数[ String … ] String:代表要重置密码的学生或教师的ID 返回void 功能重置密码 doImportQuestionExcel 参数//受到layui限制,数据格式为FormData “file”:上传的文件 返回{ “status”:0|1 } status:0设置失败,1设置成功对于参数不够返回失败 功能上传题库文件 setOfficialExam 参数 { “examTime”:string } … examTime:如果设置班级正式考试,返回班级考试时间段,格式”YYYY/MM/DD HH:mm:ss ~ YYYY/MM/DD HH:mm:ss” 返回{ “status”:0|1 } status:0设置失败,1设置成功 功能设置正式考试 deleteTeacher 参数[ String ] String:将要删除的教师ID 返回void 功能删除教师 doImportTeacherExcel 参数//受到layui限制,数据格式为FormData “file”:上传的文件 返回{ “status”:0|1 } status:0设置失败,1设置成功对于参数不够返回失败 功能上传教师文件 getServerIP 参数void 返回{ “IP”:String, “port”:String } 功能返回当前服务器的IP和端口号 getClientIP 参数void 返回{ “IP”:String, “port”:String } 功能返回当前客户端的IP和端口号 5 用户使用说明书 5.1 用户登录模块 用户登录模块可以实现对用户的合法性进行检查、通过用户登录账号对用户权限的判断,并通过不同权限的用户限制其能访问的页面。 用户首次访问时主页如下,主页包括考试通知和管理员通知两个栏目,考试通知用于展示关于考试安排、考生须知、其他实现等,管理员通知用于展示管理员通知和系统使用手册。
用户可以通过右上角登录按钮进行登录,当用户未登录时管理员、老师或学生按钮会强制弹出登录界面。
若用户输入的用户名和密码正确,将会跳转到登录用户对应权限的界面。当用户登录密码为初始密码时,会弹出修改密码窗口强制用户修改密码。若不正确则会弹出用户名或密码错误。
5.2 学生用户 5.2.1 学生用户个人中心 本系统允许用户修改密码、和登出。修改密码按钮将会弹出修改密码窗口,登出按钮将会直接登出。
5.2.2 学生主页界面 学生主页允许学生参加正式考试和模拟考试。正式考试和模拟考试界面均有考试须知,并要求同学勾选《福州大学网络考试守则》才允许进入考试。
5.2.3 学生正式考试界面 正式考试界面支持显示考试剩余时间,学生可以通过右上角结束考试按钮提前结束考试。
5.2.4 学生模拟考试界面 模拟考试界面与正式考试界面大体相同,在学生提交试卷之后,可以看到模拟考试的答题情况。
5.3 教师用户 5.3.1 教师用户个人中心 本系统允许用户修改密码、和登出。修改密码按钮将会弹出修改密码窗口,登出按钮将会直接登出。
5.3.2 考试管理
教师可以通过“考试信息”的 “+” 选择班级的 考试时间,若当前班级已处于考试状态,将不允许教师添加考试状态。教师可以通过多选班级批量设定考试时间。
通过“考试信息”的 “-” 可以删除班级的模拟考试状态,将不允许教师删除正式考试的状态。
班级表上方右侧工具栏可供教师筛选列、导出表到Excel、打印等操作。
在班级表处可查找班级名、考试状态、考试时间,其中班级名和考试状态允许排序以供快速查找。而右侧的“操作”工具栏可设置单个班级的考试状态或删除单个班级的考试状态。
5.3.3 班级管理 班级管理页面如下,支持上传班级表、筛选列、导出到Excel、打印班级表、删除班级表等操作。
上传按钮仅支持上传.xls、.xlsx 两种文件。
右侧操作按钮可让教师删除导入的班级表。
5.3.4 学生管理 学生管理界面如下,允许教师查看学生考试成绩、选择班级查看学生成绩、将学生成绩通过学号排序、通过姓名排序、通过成绩排序、筛选表格列信息、导出学生成绩到Excel、打印等操作。
可选择要查看成绩的班级。
5.4 管理员用户 5.4.1 管理员用户个人中心 本系统允许用户修改密码、和登出。修改密码按钮将会弹出修改密码窗口,登出按钮将会直接登出。
5.4.2 教师名单管理 教师名单管理页面如下,支持管理员导入教师名单文件,批量删除教师、表格列筛选、导出为Excel、打印、表格可通过教师账号、教师姓名排序、重置教师密码等操作。
上传教师名单文件仅支持.xls或.xlsx文件。
支持批量删除教师。
可以“重置密码”按钮重置当前教师密码为初始密码。
5.4.3 学生密码管理 学生密码管理的页面如下,支持管理员通过学生账号、学生姓名排序、重置学生密码为初始密码。
重置学生密码将会二次询问是否确定重置。
6 总结 在这次实践过程中,我们学到了非常多新的课堂之外的知识。 在项目初期,我们需要不断的制定模型,优化模型来使得这个数据库能够非常完善地实现这次的军事理论考试系统。首先就是建表,在建表的时候我们应当注意在不同的实体之间不要有过多的冗余属性,所以在这过程中,我们应当不断的优化这种关系,来使得之后系统对数据库操作的时候能够方便快捷且不易出错。在开发过程当中,我们采用了前后端分离式的开发,这就需要我们两边同时进行编程、调试,然而这又是一个完整的项目,就需要我们之间的代码是一个同步的状态,在使用github之前的我们,代码是非常分离的,都各自保存在本地的目录下,这样子非常不利于我们项目的开发,于是到中期,我们采用了github来进行代码管理与版本控制,这样就使得大家的代码都是一个同步的状态,彼此之间的进度也能够互相同步,这样的工具在这样的网课时代也更是我们开发过程中的好帮手。 在之后的程序调试,一些专门的工具例如postman、mockjs进行代码的调试,过程中也遇到了许多的困难,但是在大家的群策群力之下,这些bug也都被一一解决掉了。在最后的联调环节,虽然磕磕绊绊但也还算稳步进展,总而言之,这次的实践过程让我们第一次感受到了协同开发的历程,也更加了解了相关知识,是一次非常不错的历程。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/88278.html