毕业设计——基于springboot+mybatis的在线问卷系统设计与实现+源码+综述+部署

需要系统程序源码或系统部署的小伙伴,可以私信博主

基于SpringBoot+MyBatis的在线问卷系统设计与实现综述

一、引言

在线问卷系统是现代信息收集和分析的重要工具,广泛应用于市场调研、学术研究、客户满意度调查等多个领域。基于SpringBoot和MyBatis的在线问卷系统,通过集成这两个框架的优势,可以快速构建出功能丰富、性能稳定的问卷管理系统,为用户提供便捷的问卷创建、发布、收集、分析和管理的功能。

二、系统架构设计

系统采用SpringBoot作为后端开发框架,利用其快速搭建和易于集成的特性,简化了开发流程,提高了开发效率。同时,结合MyBatis作为持久层框架,实现了与数据库的灵活交互,确保了数据的准确性和完整性。

系统架构主要分为以下几个层次:

用户界面层:负责与用户进行交互,提供问卷的创建、编辑、发布、查看等功能界面。
业务逻辑层:处理问卷系统的核心业务逻辑,包括问卷的生成、数据的存储和查询、统计结果的分析等。
数据访问层:通过MyBatis实现与数据库的交互,完成数据的增删改查操作。

三、系统功能模块

用户管理模块:实现用户的注册、登录、权限管理等功能,确保系统的安全性和数据的保密性。

问卷管理模块:提供问卷的创建、编辑、发布、删除等功能,支持多种题型和问卷样式的自定义设置。

数据收集模块:通过在线填写或导入数据的方式,收集问卷的应答数据,并实时保存到数据库中。

数据分析模块:对收集到的问卷数据进行统计分析,生成图表和报告,帮助用户快速了解调查结果。

系统管理模块:包括日志管理、数据备份、系统配置等功能,确保系统的稳定性和可维护性。

四、系统实现与优化

在实现过程中,我们注重系统的性能、安全性和易用性。通过合理的数据库设计、索引优化和缓存策略,提高了系统的查询效率和响应速度。同时,采用Spring Security等安全框架,确保系统的数据安全和用户隐私。

此外,为了提升用户体验和系统的智能化水平,我们还可以引入一些先进的技术和算法。例如,利用机器学习算法对问卷数据进行深度分析,挖掘潜在的用户需求和趋势;采用前端框架(如Vue.js或React)构建出响应式、交互性强的用户界面;利用WebSocket等技术实现实时数据更新和推送等。

五、总结与展望

基于SpringBoot和MyBatis的在线问卷系统设计与实现,为现代信息收集和分析提供了强有力的支持。通过合理的系统架构设计和功能模块实现,系统能够满足用户对于问卷管理的多样化需求,提高信息收集和处理的效率。

然而,随着技术的不断发展和用户需求的不断变化,在线问卷系统也需要不断进行优化和升级。未来,我们可以进一步探索新技术在问卷系统中的应用,提升系统的智能化水平和用户体验;同时,加强与其他系统的集成和协同工作,实现更广泛的数据共享和业务协同。

部署相关说明:
前后端分离的、支持跨域访问的REST风格的Vue.js+Spring Boot项目,开发工具为IDEA,数据库为MySQL。

数据库名称:questionnaire
字符集:UTF-8

user表
在这里插入图片描述paper表
在这里插入图片描述question表
在这里插入图片描述answer表
在这里插入图片描述
API

编码方式均为UTF-8
1.管理员相关
1.1 注册
接口地址

domain/api/v1/register

1

请求方式

HTTP POST
请求示例

{
“username”: “Alice”,
“password”: “123456”,
“email”: “alice@gmail.com”
}

1
2
3
4
5

请求参数
参数	类型	是否必须	取值范围	说明
username	String	Y	2-64个字符	用户名(昵称)
password	String	Y	6-64个字符	登录密码
email	String	Y	5-64个字符且格式正确	邮箱

返回参数

返回示例

{
“code”: 0,
“msg”: “ok”,
“data”: 0
}

1
2
3
4
5

参数说明
参数	类型	是否必须	取值范围	说明
code	int	Y	-	请求状态码
msg	String	Y	-	消息提示
data	int	N	-	结果数据

code说明
状态值 说明
-1 token失效或未登录(用于需要登录后才能进行的操作)
0 请求成功(全文适用,下文不再赘述)
1 系统异常(全文适用,下文不再赘述)
2 参数不正确(全文适用,下文不再赘述)

code的补充

code非0时,无data参数,可通过msg判断问题原因
code取0时,若data中有值,则data参数存在,否则无data参数

data说明
状态值 说明
0 注册成功,等待邮件激活
1 邮箱已被注册过且被激活
2 邮箱被注册过,但未激活,重新发送激活邮件
1.2 激活
接口地址

domain/api/v1/activate

1

请求方式

HTTP GET
请求示例

domain/api/v1/activate/code

1

请求参数
参数	类型	是否必须	取值范围	说明
code	String	Y	-	激活码(即随机码)

返回参数


说明

若激活成功,跳转success页面
若激活码已失效,跳转invalid页面

1.3 登录
接口地址

domain/api/v1/login

1

请求方式

HTTP POST
请求示例

{
“email”: “alice@gmail.com”,
“password”: “123456”
}

1
2
3
4

请求参数
参数	类型	是否必须	取值范围	说明
email	String	Y	5-64个字符	邮箱
password	String	Y	6-64个字符	登录密码

返回参数

返回示例

//登录成功
{
“code”: 0,
“msg”: “ok”,
“data”: {
“result”: 0,
“token”: “abcdefghijkl12345”,
“username”: “Alice”,
“email”: "abc@gmail.com
}
}
//登录失败
{
“code”: 0,
“msg”: “password error”,
“data”: {
“result”: 1
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

参数说明
参数	类型	是否必须	取值范围	说明
code	int	Y	-	请求状态码
msg	String	Y	-	消息提示
data	Object	N	-	结果

data说明
参数 类型 是否必须 取值范围 说明
result int Y - 结果
token String N - 登陆成功后用于身份识别,凡请求的URL中含admin都需要将token放入请求header
username String N - 昵称
email String N - 邮箱
result说明
取值 说明
0 登录成功
1 密码错误
2 用户不存在
3 账号未激活

header使用token示例

...
headers: {'token': token }
...

1
2
3

1.4 退出登录
接口地址

domain/api/v1/admin/logout

1

请求方式

HTTP GET
请求示例

请求参数

无

返回参数

返回示例

{
“code”: 0,
“msg”: “ok”,
“data”: 0
}

1
2
3
4
5

参数说明
参数	类型	是否必须	取值范围	说明
code	int	Y	-	请求状态码
msg	String	Y	-	消息提示
data	int	N	-	结果:0.退出成功,1.失败(未登录或登录已超时)

2.问卷相关
2.1 管理员获取问卷列表
接口地址

domain/api/v1/admin/paper-lists

1

请求方式

HTTP GET
请求示例

请求参数

无

返回参数

返回示例

//成功
{
“code”: 0,
“msg”: “ok”,
“data”: [
{“id”: “12345678910”,“title”: “问卷”, “status”: 0, “createTime”: 1536887397173, “startTime”: “2018-09-20”, “endTime”: “2018-10-01”},
{“id”: “22345678910”,“title”: “问卷标题”, “status”: 1, “createTime”: 1536887397666, “startTime”: “2018-09-10”, “endTime”: “2018-10-01”},
{“id”: “32345678910”,“title”: “问题”, “status”: 2, “createTime”: 1536887397888, “startTime”: “2018-09-10”, “endTime”: “2018-09-12”},
{“id”: “42345678910”,“title”: “标题”, “status”: 0, “createTime”: 1536887397173, “startTime”: “”, “endTime”: “”}
]
}
//失败
{
“code”: 1,
“msg”: “server exception”
}
//token过期或未登录,下同
{
“code”: -1,
“msg”: “token expired or not login”,
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

参数说明
参数	类型	是否必须	取值范围	说明
id	String	Y	-	问卷ID
title	String	Y	-	问卷标题
status	int	Y	-	问卷状态:0.未发布,1.已发布,2.已结束
createTime	long	Y	-	问卷创建时的时间戳
startTime	String	Y	-	问卷开达日期,若未设置则是空字符串
endTime	String	Y	-	问卷结束日期,若未设置则是空字符串

2.2 查看问卷
接口地址

domain/api/v1/admin/view-paper

1

请求方式

HTTP POST
请求示例

{
“id”: “4askfj1093jfi9348oueir932”
}

1
2
3

请求参数
参数	类型	是否必须	取值范围	说明
id	String	Y	-	问卷id

返回参数

返回示例

{
“code”: 0,
“msg”: “ok”,
“data”: {
“id”: “4askfj1093jfi9348oueir932”,
“title”: “你幸福吗的调查”,
“status”: 0,
“createTime”: 1536887397173,
“startTime”: “2018-09-12”,
“endTime”: “2018-10-01”,
“questions”: [
{“id”: “1234”, “questionType”:1, “questionTitle”: “你的收入是多少?”, “questionOption”: [“2000以下”, “2000-5000”, “5000+”]},
{“id”: “2234”, “questionType”:2, “questionTitle”: “你家里有哪些家电?”, “questionOption”: [“冰箱”, “洗衣机”, “空调”, “麻将机”]},
{“id”: “3234”, “questionType”:3, “questionTitle”: “说一说你觉得最幸福的事”, “questionOption”: []}
]
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

data参数说明
参数	类型	是否必须	取值范围	说明
id	String	Y	-	问卷ID
title	String	Y	-	问卷标题
status	int	Y	-	问卷状态:0.未发布,1.已发布,2.已结束
createTime	long	Y	-	问卷创建时的时间戳
startTime	String	Y	-	问卷开达日期,若未设置则是空字符串
endTime	String	Y	-	问卷结束日期,若未设置则是空字符串
questions	Array	Y	-	问题列表

questions参数说明
参数	类型	是否必须	取值范围	说明
id	String	Y	-	问题ID
questionType	int	Y	-	问题类型:1.单选题,2.多选题,3.简答题
questionTitle	String	Y	-	问题标题
questionOption	Array	Y	-	问题选项:简答题为空的Array

2.3 新增问卷
接口地址

//与更新问卷共用接口
domain/api/v1/admin/update-paper

1
2

请求方式

HTTP POST
请求示例

{
“title”: “你幸福吗的调查”,
“startTime”: “2018-09-12”,
“endTime”: “2018-10-01”,
“status”: 0,
“questions”: [
{“questionType”:1, “questionTitle”: “你的收入是多少?”, “questionOption”: [“2000以下”, “2000-5000”, “5000+”]},
{“questionType”:2, “questionTitle”: “你家里有哪些家电?”, “questionOption”: [“冰箱”, “洗衣机”, “空调”, “麻将机”]},
{“questionType”:3, “questionTitle”: “说一说你觉得最幸福的事”, “questionOption”: []}
]
}

1
2
3
4
5
6
7
8
9
10
11

请求参数
参数	类型	是否必须	取值范围	说明
title	String	Y	2-64个字符	问卷名称
startTime	String	Y	10个字符	开始日期,若未设置则是空字符串
endTime	String	Y	10个字符	结束日期,若未设置则是空字符串
status	int	Y	0或1	问卷状态,0:不发布仅保存;1:发布(此时start_time和end_time必须有合法取值);

questions参数说明
参数	类型	是否必须	取值范围	说明
questionType	int	Y	-	问题类型:1.单选题,2.多选题,3.简答题
questionTitle	String	Y	1-128字符	问题标题
questionOption	Array	Y	-	问题选项, 是选择题则至少有两个元素,简答题无元素

返回参数

返回示例

{
“code”: 0,
“msg”: “ok”,
“data”: 0
}

1
2
3
4
5

参数说明
参数	类型	是否必须	取值范围	说明
code	int	Y	-	-1.token失效或未登录,0.请求成功,1.系统异常
msg	String	Y	-	提示消息
data	int	N	-	0.成功

2.4 修改问卷
接口地址

//与新增问卷共用接口,仅多一个参数id
domain/api/v1/admin/update-paper

1
2

请求方式

HTTP POST
请求示例

//页面中的数据来自view-paper接口,若管理员选择更新,则删除原id的paper的问题,再为该id的paper插入questions的新题目
{
“id”: “4askfj1093jfi9348oueir932”, //在add-paper中无此参数
“title”: “你幸福吗的调查”,
“status”: 0,
“startTime”: “2018-09-12”,
“endTime”: “2018-10-01”,
“questions”: [
{“questionType”:1, “questionTitle”: “你的收入是多少?”, “questionOption”: [“2000以下”, “2000-5000”, “5000+”]},
{“questionType”:2, “questionTitle”: “你家里有哪些家电?”, “questionOption”: [“冰箱”, “洗衣机”, “空调”, “麻将机”]},
{“questionType”:3, “questionTitle”: “说一说你觉得最幸福的事”, “questionOption”: []}
]
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14

请求参数
参数说明
参数	类型	是否必须	取值范围	说明
id	String	Y	-	问卷ID
title	String	Y	-	问卷标题
status	int	Y	-	问卷状态:0.未发布,1.发布
startTime	String	Y	-	问卷开达日期,若未设置则是空字符串
endTime	String	Y	-	问卷结束日期,若未设置则是空字符串
questions	Array	Y	-	问题列表

questions参数说明
参数	类型	是否必须	取值范围	说明
questionType	int	Y	-	问题类型:1.单选题,2.多选题,3.简答题
questionTitle	String	Y	-	问题标题
questionOption	Array	Y	-	问题选项, 是选择题则至少有两个元素,简答题无元素

返回参数

返回示例

{
“code”: 0,
“msg”: “ok”,
“data”: 0
}

1
2
3
4
5

data参数说明
参数	类型	是否必须	取值范围	说明
data	int	Y	-	0.操作成功,1.操作失败,2.paper的id非法(无此问卷)

2.5 删除问卷
接口地址

domain/api/v1/admin/delete-paper

1

请求方式

HTTP POST
请求示例

{
“idList”: [“4askfj1093jfi9348oueir932”, “sfs6f465vfsdf65sf654s6sf”]
}

1
2
3

请求参数
参数	类型	是否必须	取值范围	说明
idList	Array	Y	-	问卷id列表,至少一个元素

返回参数

返回示例

{
“code”: 0,
“msg”: “ok”,
“data”: 0
}

1
2
3
4
5

data参数说明
参数	类型	是否必须	取值范围	说明
data	int	Y	-	0.操作成功,1.操作失败,2.paper的id非法(无此问卷)

2.6 用户查看问卷(答卷页面)
接口地址

domain/api/v1/user/view-paper?id=4askfj1093jfi9348oueir932

1

请求方式

HTTP GET
请求示例

请求参数
参数	类型	是否必须	取值范围	说明
id	String	Y	-	问卷id

返回参数

返回示例

{
“code”: 0,
“msg”: “ok”,
“data”: {
“status”: 0, //只有status为1时才可作答
“id”: “4askfj1093jfi9348oueir932”,
“title”: “你幸福吗的调查”,
“createTime”: 1536887397173,
“startTime”: “2018-09-12”,
“endTime”: “2018-10-01”,
“questions”: [
{“id”: “1234”, “questionType”:1, “questionTitle”: “你的收入是多少?”, “questionOption”: [“2000以下”, “2000-5000”, “5000+”]},
{“id”: “2234”, “questionType”:2, “questionTitle”: “你家里有哪些家电?”, “questionOption”: [“冰箱”, “洗衣机”, “空调”, “麻将机”]},
{“id”: “3234”, “questionType”:3, “questionTitle”: “说一说你觉得最幸福的事”, “questionOption”: []}
]
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

data参数说明
参数	类型	是否必须	取值范围	说明
status	int	Y	-	问卷状态:0.未发布,1.发布中(可作答),2.已结束,3.无此问卷,4.已发布但未到开始时间
id	String	N	-	问卷ID
title	String	N	-	问卷标题
createTime	long	N	-	问卷创建时的时间戳
startTime	String	N	-	问卷开达日期,若未设置则是空字符串
endTime	String	N	-	问卷结束日期,若未设置则是空字符串
questions	Array	N	-	问题列表

questions参数说明
参数	类型	是否必须	取值范围	说明
id	String	Y	-	问题ID
questionType	int	Y	-	问题类型:1.单选题,2.多选题,3.简答题
questionTitle	String	Y	-	问题标题
questionOption	Array	Y	-	问题选项, 是选择题则至少有两个元素,简答题无元素

补充说明

status为必须参数
若status为0或3,则data中除status外无其他参数
若status为1,data中包含全部参数,用户可正常作答
若status为2或4,data中只包含title、startTime、endTime,用于提示用户

2.7 提交问卷答案
接口地址

domain/api/v1/user/commit-paper

1

请求方式

HTTP POST
请求示例

//页面中的数据来自view-paper接口
{
“id”: “4askfj1093jfi9348oueir932”,
“answers”: [
{“id”: “1234”, “questionType”:1, “answerContent”: [“2000-5000”]}, //单选题,Array中仅一个元素
{“id”: “2234”, “questionType”:2, “answerContent”: [“空调”, “麻将机”]}, //多选,Array中至少一个元素
{“id”: “3234”, “questionType”:3, “answerContent”: [“上了王者”]} //简答
]
}
}

1
2
3
4
5
6
7
8
9
10

请求参数
参数	类型	是否必须	取值范围	说明
id	String	Y	-	问卷ID
answers	Array	Y	-	答案列表

answers参数说明
参数	类型	是否必须	取值范围	说明
id	String	Y	-	问题id
questionType	int	Y	-	问题类型:1.单选,2.多选,3.简答
answerContent	-	Y	0-512字符	答题选项, 是选择题则至少有一个元素,简答题最多一个元素(不答则为无元素)

返回参数

返回示例

{
“code”: 0,
“msg”: “ok”
}

1
2
3
4

data参数说明
参数	类型	是否必须	取值范围	说明
code	int	Y	-	0.操作成功,1.操作失败,2.问卷id无效

2.8 查看问卷数据
接口地址

domain/api/v1/admin/paper-data

1

请求方式

HTTP POST
请求示例

{
“id”: “4askfj1093jfi9348oueir932”
}

1
2
3

请求参数
参数	类型	是否必须	取值范围	说明
id	String	Y	-	问卷id

返回参数

返回示例

{
“code”: 0,
“msg”: “ok”,
“data”: {
“id”: “4askfj1093jfi9348oueir932”,
“title”: “你幸福吗的调查”,
“status”: 0,
“createTime”: 1536887397173,
“startTime”: “2018-09-12”,
“endTime”: “2018-10-01”,
“totalCount”: 140,
“questions”: [
{
“id”: “1234”, “questionType”:1,
“questionTitle”: “你的收入是多少?”,
“questionOption”: [“2000以下”, “2000-5000”, “5000+”],
“answerContent”: [10, 30, 100]
},
{
“id”: “2234”, “questionType”:2,
“questionTitle”: “你家里有哪些家电?”,
“questionOption”: [“冰箱”, “洗衣机”, “空调”, “麻将机”],
“answerContent”: [30, 40, 80, 20]
},
{
“id”: “3234”, “questionType”:3,
“questionTitle”: “说一说你觉得最幸福的事”,
“questionOption”: [],
“answerContent”: [
“从青铜”,
“到黄金”,
“到王者”
]
},
{
“id”: “4234”, “questionType”:3,
“questionTitle”: “说一说你觉得最难过的事”,
“questionOption”: [],
“answerContent”: [
“从王者”,
“到青铜”
]
}
]
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

data参数说明
参数	类型	是否必须	取值范围	说明
id	String	Y	-	问卷ID
title	String	Y	-	问卷标题
status	int	Y	-	问卷状态:0.未发布,1.已发布,2.已结束
createTime	long	Y	-	问卷创建时的时间戳
startTime	String	Y	-	问卷开达日期,若未设置则是空字符串
endTime	String	Y	-	问卷结束日期,若未设置则是空字符串
totalCount	int	Y	-	问卷被达总次数(人次)
questions	Array	Y	-	问题列表

questions参数说明
参数	类型	是否必须	取值范围	说明
id	String	Y	-	问题ID
questionType	int	Y	-	问题类型:1.单选题,2.多选题,3.简答题
questionTitle	String	Y	-	问题标题
questionOption	Array	Y	-	问题选项,选择题是Array,简答题为空字符串
answerContent	Array	Y	-	答案内容,选择题中的元素为int,简答题为String

2.9 下载问卷模板文件
文件地址

domain/template.xls

1

使用方式

下载模板

1

2.10 上传问卷模板文件生成问卷
接口地址

domain/api/v1/admin/upload

1

请求方式

HTTP POST
请求示例

{
“file”: FILE //文件
}

1
2
3

请求参数
参数	类型	是否必须	取值范围	说明
file	FILE	Y	-	文件模板文件(Excel)

返回参数

返回示例

{
“code”: 0,
“msg”: “ok”
}

1
2
3
4

data参数说明
参数	类型	是否必须	取值范围	说明
code	int	Y	-	0.操作成功,1.系统异常,2.文件不合法

常见返回值情形
code	msg
-1	账号未登录或登录已经失效
0	ok
1	异常的具体信息
2	未选择文件!
2	文件类型不支持!
2	文件大小限制在100KB以内!
2	文件转换失败,请注意格式要求!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

毕业小助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值