1 课题概述
1.1 课题意义
此系统为计算机科学与技术系毕业设计阶段选题系统。目前教务网的毕业设计选题系统前端简陋,交互逻辑差,不符合用户操作习惯。对于移动端设备未进行优化适配,用户体验较差。为提升学生与教师的使用体验,需要开发一套全新的毕业设计选题系统。
1.2 课题目标
此课题实现计算机系毕设选题整套流程的系统开发,包括学生端、教师端、管理员端。根据真实流程,基本功能包括学生及教师用户信息导入,毕设题目新增、编辑、删除、查询,管理员审核,学生选题、重选,导出选题结果表格、各阶段时间设定等功能。界面风格简洁,易用性强,程序模块具有可扩展性。
1.3 开发环境
硬件:Windows 10/OS X、内存16G、Intel i7-8700
软件:IntelliJ IDEA、Tomcat9、DataGrip、Chrome、JDK1.8
2 课题设计
2.1 数据库设计
一、 sysuser表
用于存储用户的个人账号信息的表,如用户名、密码、姓名、联系电话等,包含username、truename、password、mobile等字段。sysuser表的结构如表2-1所示。
主键
|
字段名
|
数据类型(长度)
|
是否允许为空
|
备注
|
是
|
id
|
int(20)
|
否
|
主键ID
|
|
username
|
varchar(50)
|
否
|
用户名(学号)
|
|
password
|
varchar(100)
|
否
|
用户密码
|
|
email
|
varchar(100)
|
是
|
电子邮箱
|
|
mobile
|
varchar(100)
|
是
|
手机号
|
|
status
|
tinyint(4)
|
否
|
状态 0可用 1禁用
|
|
create_time
|
datetime(0)
|
是
|
创建时间
|
|
truename
|
varchar(255)
|
是
|
实名
|
|
permission
|
int(1)
|
否
|
权限
|
|
lastlogin
|
timestamp(6)
|
是
|
最后登录时间
|
|
token
|
varchar(255)
|
是
|
登录令牌
|
表2-1 sysuser表
二、 topics表
用于存储课题信息的表,如教师姓名、课题名称、所用语言等,包含authorid、topictitle、sumnum等字段。topics表的结构如表2-2所示。
主键
|
字段名
|
数据类型(长度)
|
是否允许为空
|
备注
|
是
|
id
|
int(11)
|
否
|
主键ID
|
|
authorid
|
int(255)
|
是
|
申请人ID
|
|
topictitle
|
varchar(255)
|
是
|
课题名称
|
|
sumnum
|
int(10)
|
是
|
课题人数
|
|
availablenum
|
int(10)
|
是
|
可选人数
|
|
level1
|
varchar(10)
|
是
|
难易度
|
|
address
|
varchar(255)
|
是
|
实习地点
|
|
technology
|
varchar(255)
|
是
|
实现技术
|
|
topicdetail
|
text(0)
|
是
|
课题详情
|
|
status
|
int(2)
|
是
|
状态
|
|
selectednum
|
int(2)
|
是
|
已选人数
|
表2-2 topics表
三、 sysopentime表
用于存储选题系统的各阶段系统开放时间,如教师上传课题时间、上传课题截止时间、第一轮选题时间等,包含uploadstart、uploadend、choosestart等字段。sysopentime表的结构如表2-3所示。
主键
|
字段名
|
数据类型(长度)
|
是否允许为空
|
备注
|
是
|
id
|
int(255)
|
否
|
主键ID
|
|
uploadstart
|
timestamp(6)
|
否
|
上传开始时间
|
|
uploadend
|
timestamp(6)
|
否
|
上传结束时间
|
|
choosestart
|
timestamp(6)
|
否
|
一轮选题开始时间
|
|
chooseend
|
timestamp(6)
|
否
|
一轮选题结束时间
|
|
checkstart
|
timestamp(6)
|
否
|
一轮确认开始时间
|
|
checkend
|
timestamp(6)
|
否
|
一轮确认结束时间
|
|
chooseagainstart
|
timestamp(6)
|
否
|
二轮选题开始时间
|
|
chooseagainend
|
timestamp(6)
|
否
|
二轮选题结束时间
|
|
checkagainstart
|
timestamp(6)
|
否
|
二轮确认开始时间
|
|
checkagainend
|
timestamp(6)
|
否
|
二轮确认结束时间
|
表2-3 sysopentime表
四、 firstround表
用于存储一轮选题结果的信息,如选题学生ID、课题ID、申请时间等,包含selectuserid、topicid、createtime等字段。firstround表的结构如表2-4所示。
主键
|
字段名
|
数据类型(长度)
|
是否允许为空
|
备注
|
是
|
id
|
int(11)
|
否
|
主键ID
|
|
selectuserid
|
int(11)
|
是
|
选题学生ID
|
|
topicid
|
int(11)
|
是
|
课题ID
|
|
createtime
|
varchar(255)
|
是
|
申请时间
|
|
status
|
int(6)
|
是
|
状态 0待确认 1确认完毕 2打回
|
表2-4 firstround表
五、 secondround表
同表2-4 firstround表,用于存储二轮选题信息,下略。
2.2 系统设计
学生毕设选题系统总体架构如图2-5所示。
图2-5 系统总体架构图
一、 学生端
包括学生登录/登出、完善及修改个人信息、修改密码、选择至多三个课题、取消选择、查看课题详情及选题情况、查看我已选择的课题、查看最终确认的课题及课题详情、按教师名或课题名搜索题目等功能。如图2-6所示。
图2-6 学生端结构图
二、 教师端
包括教师登录/登出、修改及完善个人信息、修改密码、提交课题、取消已提交的课题、修改课题信息、查看课题审批结果、查看已被学生选择的课题、选择课题对应的学生、查看已选择的学生、查看未被选择的课题等。如图2-7所示。
图2-7 教师端结构图
三、 管理员端
包括管理员登录/登出、修改及完善个人信息、修改密码、设定系统各阶段开放时间、查看课题详情、审核课题(审批通过/驳回)、查看课题审核结果、删除已审批的课题、查看学生选题结果、删除学生选题、查看未被教师选择的学生、查看未被学生选择的课题、一键为未被教师选择的学生分配课题、添加及删除教师/学生账号、从表格导入教师/学生账号、一键清空教师及学生账号、课题搜索、按教师或学生姓名搜索课题等。如图2-8所示。
图2-8 管理员端结构图
3 课题实现
本系统使用Springboot、Mybatis、Shiro及MySQL实现。前端使用Bootstrap框架、jQuery等技术。后端采用典型MVC框架。限于文章篇幅,下面仅以部分功能模块举例说明。