基于javaweb+mysql的springboot调查问卷管理系统(java+springboot+vue+elementui+maven+mysql)
运行环境
Java≥8、MySQL≥5.7、Node.js≥10
开发工具
后端:eclipse/idea/myeclipse/sts等均可配置运行
前端:WebStorm/VSCode/HBuilderX等均可
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb+mysql的SpringBoot调查问卷管理系统(java+springboot+vue+elementui+maven+mysql)
项目介绍
- 本项目的在线问卷调查调查系统是基于SpringBoot开发的,采用了前后端分离模式来开发。
- 前端开发使用了Vue、Element UI,后端的开发则是使用了SpringBoot、MyBatis技术。
项目配置
- 下载项目压缩包,在IDEA或者Eclipse软件中打开,并修改application.yml文件中数据库的用户和密码 > * 在本地的MySQL数据库中导入项目的sql文件 > * 在编译器中运行该项目:此为SpringBoot框架,启动主类Main方法
- 在浏览器中输入localhost:8181后按回车键进入系统
//旧密码错误,返回错误信息
json.put("msg","oldPass-err");
}
}else{
//当前用户不存在,返回错误信息
json.put("msg","user-err");
}
return json;
}
@CrossOrigin
@PostMapping(value = "api/setName")
@ResponseBody // 修改用户名(保持username的唯一性)
public JSONObject setUsername(@RequestBody User user){
JSONObject json = new JSONObject();
int id = user.getId();//获取用户的id
String username = user.getUsername();
if (!"".equals(username) && username != null){
String before = userService.getNameById(id);//获取原本的username值
if (before.equals(username)){
json.put("msg","same");// 用户名没有变化
}else{
User temp = userService.findUserByName(username);//检测用户名是否被占用
if (temp==null){
//查找为空,用户名可以修改
int res = userService.setUsername(id,username);//修改当前账号的用户名
if (res > 0){
json.put("msg","success");//修改成功
json.put("username",username);
}else{
json.put("msg","error");//出现错误,修改失败
}
}else{
//用户名已存在,修改失败
json.put("msg","fail");
}
}
}else{
//出现错误,修改失败
json.put("msg","error");
}
//数据有误,返回错误信息
json.put("msg","err");
}
return json;
}
//获取问卷标题
@CrossOrigin
@PostMapping(value = "api/getStitle")
@ResponseBody
public JSONObject getStitle(@RequestBody JSONObject data){
JSONObject json = new JSONObject();
// 获取问卷编号
int sid = data.getInteger("sid");
if (sid>0){
// 根据问卷编号 获取问卷标题
String stitle = surveyService.getStitleBySid(sid);
if (stitle!=null && !"".equals(stitle)){
//操作成功,返回信息
json.put("msg","success");
json.put("stitle",stitle);
}else{
//操作失败,返回信息
json.put("msg","fail");
}
}else {
//问卷编号有误,返回错误信息
json.put("msg","err");
}
return json;
}
//修改问卷标题
@CrossOrigin
@PostMapping(value = "api/setStitle")
@ResponseBody
public JSONObject editStitle(@RequestBody JSONObject data){
JSONObject json = new JSONObject();
//获取问卷编号
int sid = data.getInteger("sid");
//获取要修改的问卷标题
String stitle = data.getString("stitle");
if (stitle!=null && !"".equals(stitle) && sid>0){
}
}
}
//更新回答统计表
if (flag){
int count = countService.updateCount(sid);
if (count < 0)
flag=false;//更新失败
}
//返回操作结果
if (flag)
json.put("msg","success");
else
json.put("msg","fail");
return json;
}
//获取问卷的回答数据
@CrossOrigin
@PostMapping(value = "api/getResponse")
@ResponseBody
public JSONObject getResponseListBySid(@RequestBody JSONObject data){
JSONObject json = new JSONObject();
//获取问卷编号
int sid = data.getInteger("sid");
String stitle = surveyService.getStitleBySid(sid);
json.put("stitle",stitle);
int num = countService.getNum(sid);
json.put("num",num);
//获取该问卷的问题编号和题目类型列表
List<JSONObject> ques = questionService.getQuesInfo(sid);
JSONArray responses = new JSONArray();//记录该问卷所有回答
//遍历列表
for (JSONObject que:ques) {
JSONObject queData = new JSONObject();
String qtitle = que.getString("qtitle");//获取问题内容
int qid = que.getInteger("qid");//获取问题编号
int qtype = que.getInteger("qtype");//获取问题类型
//选择题
if (qtype==1||qtype==2){
//获取选项信息列表
List<JSONObject> ops = optionService.getOpsInfo(qid);
JSONArray legend = new JSONArray();
json.put("msg","same");//sex没有改变,修改失败
}else{
//可以修改
int res = userService.setDate(id,date);
if (res > 0){
json.put("msg","success");//修改成功
json.put("birthdate",date);
}else {
json.put("msg","error");//出现错误,修改失败
}
}
}else{
//出现错误,修改失败
json.put("msg","fail");
}
return json;
}
}
@Controller
public class QuestionCtrl {
@Resource
private QuestionService questionService;
@Resource
private OptionService optionService;
@Resource
private ResponseService responseService;
@Resource
private SurveyService surveyService;
//给新问卷添加题目列表
@CrossOrigin
@PostMapping(value = "api/addQuesList")
int count = countService.updateCount(sid);
if (count < 0)
flag=false;//更新失败
}
//返回操作结果
if (flag)
json.put("msg","success");
else
json.put("msg","fail");
return json;
}
//获取问卷的回答数据
@CrossOrigin
@PostMapping(value = "api/getResponse")
@ResponseBody
public JSONObject getResponseListBySid(@RequestBody JSONObject data){
JSONObject json = new JSONObject();
//获取问卷编号
int sid = data.getInteger("sid");
String stitle = surveyService.getStitleBySid(sid);
json.put("stitle",stitle);
int num = countService.getNum(sid);
json.put("num",num);
//获取该问卷的问题编号和题目类型列表
List<JSONObject> ques = questionService.getQuesInfo(sid);
JSONArray responses = new JSONArray();//记录该问卷所有回答
//遍历列表
for (JSONObject que:ques) {
JSONObject queData = new JSONObject();
String qtitle = que.getString("qtitle");//获取问题内容
int qid = que.getInteger("qid");//获取问题编号
int qtype = que.getInteger("qtype");//获取问题类型
//选择题
if (qtype==1||qtype==2){
//获取选项信息列表
List<JSONObject> ops = optionService.getOpsInfo(qid);
JSONArray legend = new JSONArray();
JSONArray series = new JSONArray();
for (JSONObject op:ops) {
String username = registerUser.getUsername();
username = HtmlUtils.htmlEscape(username);
if (!"".equals(username)){
User temp = userService.findUserByName(username);//查找用户名是否被占用
if (temp == null){
//可以进行注册
int res = userService.addUser(registerUser);
if (res > 0) // 注册成功
data.put("msg", "success");
else // 注册失败
data.put("msg","fail");
}else {
//用户名不可用
data.put("msg","unusable");
}
}
return data;
}
@CrossOrigin
@PostMapping(value = "api/getName")
@ResponseBody // 获取当前用户的用户名
public JSONObject getName(@RequestBody User user){
JSONObject json = new JSONObject();
int id = user.getId();
String username = userService.getNameById(id);
if (username != null && !"".equals(username))
json.put("username",username);
else
json.put("username","error");
return json;
}
@CrossOrigin
@PostMapping(value = "api/userInfo")
@ResponseBody //获取当前用户信息
public JSONObject getUserInfo(@RequestBody User curUser){
JSONObject json = new JSONObject();
int id = curUser.getId();
//根据id获取当前用户信息
User user = userService.findUserById(id);
//将结果json化
JSONObject userInfo = (JSONObject) JSON.toJSON(user);
json.put("user",userInfo);
return json;
}
@Controller
public class SurveyCtrl {
@Resource
private SurveyService surveyService;
@Resource
private QuestionService questionService;
@Resource
private OptionService optionService;
@Resource
private ResponseService responseService;
//加载所有问卷信息_old
@CrossOrigin
@PostMapping(value = "api/allSurveys")
@ResponseBody
public JSONObject getAllSurveys(){
JSONObject json = new JSONObject();
//获取SurveyList
List<Survey> surveys = surveyService.getAllSurveys();
//把结果json化
JSONArray allSurveyList = JSONArray.parseArray(JSON.toJSONString(surveys));
json.put("allSurveyList",allSurveyList);
return json;
}
//加载所有问卷信息_05.05
@CrossOrigin
@PostMapping(value = "api/surveysInfo")
@ResponseBody
public JSONObject getSurveysInfo(){
JSONObject json = new JSONObject();
//获取List jsonObject:sid,stitle,count
List<JSONObject> surveysList = surveyService.getSurveysInfo();
JSONArray surveys = JSONArray.parseArray(JSON.toJSONString(surveysList));
json.put("tableData",surveys);
return json;
}
//根据关键字查找相关的问卷_old
@CrossOrigin
@PostMapping(value = "api/SurveySearch")
@ResponseBody
public JSONObject getSurveyList(@RequestBody String keyword){
JSONObject json = new JSONObject();
System.out.println(keyword);
//判断关键字是否为空
if (keyword == null || "".equals(keyword)){
//关键字为空 返回所有问卷
flag=false;
break;
}
}
}
if (!flag) break;
}else if (qtype==3){
//问题为简答题,直接添加问题信息
int count = questionService.addQueText(qtitle,3,sid);//添加简答题
if (count > 0)
flag = true;//添加成功
else{
flag=false;
break;
}
}
}
if (flag){
//操作成功
json.put("msg","success");
}else{
json.put("msg","fail");
}
return json;
}
//修改问卷的问题及选项信息
@CrossOrigin
@PostMapping(value = "api/editSurvey")
@ResponseBody
public JSONObject editSurvey(@RequestBody JSONObject data){
JSONObject json = new JSONObject();
//设置flag记录操作过程
boolean flag = false;
//获取该问卷的编号
int sid = data.getInteger("sid");
JSONObject queList = data.getJSONObject("quesList");
//先做删除操作,再做修改操作
JSONArray delQues = queList.getJSONArray("delQues");//获取要删除的问题编号数组
JSONArray delOps = queList.getJSONArray("delOps");//获取要删除的选项编号数组
//删除问题操作
if (delQues.size()>0){
//遍历数组
for (int i = 0; i < delQues.size(); i++) {
JSONObject que = delQues.getJSONObject(i);
//获取问题编号、题目类型
int qid = que.getInteger("qid");
int qtype = que.getInteger("qtype");
//若题目为选择题
if (qtype==1||qtype==2){
//先删除对应题目的所有选项信息
int countOps = optionService.delOptionsByQid(qid);
if (countOps>0){
// 获取问卷编号
int sid = data.getInteger("sid");
if (sid>0){
// 根据问卷编号 获取问卷标题
String stitle = surveyService.getStitleBySid(sid);
if (stitle!=null && !"".equals(stitle)){
//操作成功,返回信息
json.put("msg","success");
json.put("stitle",stitle);
}else{
//操作失败,返回信息
json.put("msg","fail");
}
}else {
//问卷编号有误,返回错误信息
json.put("msg","err");
}
return json;
}
//修改问卷标题
@CrossOrigin
@PostMapping(value = "api/setStitle")
@ResponseBody
public JSONObject editStitle(@RequestBody JSONObject data){
JSONObject json = new JSONObject();
//获取问卷编号
int sid = data.getInteger("sid");
//获取要修改的问卷标题
String stitle = data.getString("stitle");
if (stitle!=null && !"".equals(stitle) && sid>0){
//根据问卷编号修改问卷标题
int count = surveyService.setStitle(sid, stitle);
if (count>0){
//修改成功,返回信息
json.put("msg","success");
json.put("stitle",stitle);
}else {
//修改失败,返回信息
json.put("msg","fail");
}
}else {
//数据有误,返回错误信息
json.put("msg","err");
}
return json;
}
//标题信息json化
json.put("stitle",stitle);
json.put("publish",publish);
List<Question> questionList = questionService.getQuestionListBySid(sid);
//转化成JSON数组
JSONArray ques = JSONArray.parseArray(JSON.toJSONString(questionList));
JSONArray questions = new JSONArray();
for (Object q:ques) {
//强制转换
JSONObject que = (JSONObject) q;
//获取当前问题的问题编号、题目类型
int qid = que.getInteger("qid");
int qtype = que.getInteger("qtype");
//选择题
if(qtype==1 || qtype==2){
//获取问题对应的选项内容
List<Option> optionList = optionService.getOptionListByQid(qid);
JSONArray options = JSONArray.parseArray(JSON.toJSONString(optionList));
que.put("options",options);//把选项列表数组放进问题内容中
}
questions.add(que);//直接添加进问题列表json数组
}
json.put("msg","success");
json.put("questions",questions);
}else {
// 问卷编号有错,返回报错信息
json.put("msg","error");
}
return json;
}
//新建问卷信息
@CrossOrigin
@PostMapping(value = "api/addSurveyInfo")
@ResponseBody
public JSONObject addSurveyInfo(@RequestBody JSONObject survey){
JSONObject json = new JSONObject();
// 获取新问卷的标题
String stitle = survey.getString("stitle");
// 获取创建者的用户编号
int uid = survey.getInteger("uid");
// 创建新的问卷
Survey newSurvey = new Survey();
newSurvey.setStitle(stitle);
newSurvey.setUid(uid);
//设置flag记录问题记录过程
boolean flag = false;
//遍历问题列表
for (Object q:ques) {
//强制转换
JSONObject que = (JSONObject) q;
//获取该问题的题目类型
int qtype = que.getInteger("qtype");
//获取该问题内容
String qtitle = que.getString("qtitle");
if (qtype==1||qtype==2){
//问题为选择题,先添加问题信息,并获取问题编号
Question quesChos = new Question();
quesChos.setQtype(qtype);
quesChos.setQtitle(qtitle);
quesChos.setSid(sid);
int qid = questionService.addQueChos(quesChos);//添加选择题
if (qid>0){
//问题添加成功,获取对应的选项列表
JSONArray ops = que.getJSONArray("options");
for (Object o:ops) {
//强制转换
JSONObject op = (JSONObject) o;
//获取选项值
String value = op.getString("value");
//添加问题选项
int res = optionService.addOption(value,qid);
if (res>0)
flag = true;//选项添加成功
else{
flag=false;
break;
}
}
}
if (!flag) break;
}else if (qtype==3){
//问题为简答题,直接添加问题信息
int count = questionService.addQueText(qtitle,3,sid);//添加简答题
if (count > 0)
flag = true;//添加成功
else{
flag=false;
break;
}
}
}
if (flag){
//操作成功
json.put("msg","success");
}else{
json.put("msg","fail");
}
return json;
String username = loginUser.getUsername();
username = HtmlUtils.htmlEscape(username);
//获取输入的密码
String password = loginUser.getPassword();
password = HtmlUtils.htmlEscape(password);
//在数据库查找
User curUser = userService.findUser(username,password);
if (curUser==null){
//用户名或密码输入错误
res.put("msg","fail");
}else{
//登录成功
res.put("msg","success");
// 把登录用户的id和name传过去
int id = curUser.getId();
String name = curUser.getUsername();
res.put("id",id);
res.put("name",name);
}
return res;
}
@CrossOrigin
@PostMapping(value = "api/register")
@ResponseBody //用户注册
public JSONObject register(@RequestBody User registerUser){
JSONObject data = new JSONObject();
// 获取注册用户的用户名
String username = registerUser.getUsername();
username = HtmlUtils.htmlEscape(username);
if (!"".equals(username)){
User temp = userService.findUserByName(username);//查找用户名是否被占用
if (temp == null){
//可以进行注册
int res = userService.addUser(registerUser);
if (res > 0) // 注册成功
data.put("msg", "success");
else // 注册失败
data.put("msg","fail");
}else {
//用户名不可用
data.put("msg","unusable");
}
}
public JSONObject getResponseListBySid(@RequestBody JSONObject data){
JSONObject json = new JSONObject();
//获取问卷编号
int sid = data.getInteger("sid");
String stitle = surveyService.getStitleBySid(sid);
json.put("stitle",stitle);
int num = countService.getNum(sid);
json.put("num",num);
//获取该问卷的问题编号和题目类型列表
List<JSONObject> ques = questionService.getQuesInfo(sid);
JSONArray responses = new JSONArray();//记录该问卷所有回答
//遍历列表
for (JSONObject que:ques) {
JSONObject queData = new JSONObject();
String qtitle = que.getString("qtitle");//获取问题内容
int qid = que.getInteger("qid");//获取问题编号
int qtype = que.getInteger("qtype");//获取问题类型
//选择题
if (qtype==1||qtype==2){
//获取选项信息列表
List<JSONObject> ops = optionService.getOpsInfo(qid);
JSONArray legend = new JSONArray();
JSONArray series = new JSONArray();
for (JSONObject op:ops) {
//配置legend
int oid = op.getInteger("oid");
String option = op.getString("option");
legend.add(option);
//获取回答数据
int value = responseService.getCountByOid(oid);
//单选题
if (qtype==1){
JSONObject seriesData = new JSONObject();
seriesData.put("value",value);
seriesData.put("name",option);
series.add(seriesData);
}else{
//多选题
series.add(value);
}
}
queData.put("legend",legend);
queData.put("series",series);
}else{
//简答题
int id = user.getId();
String username = userService.getNameById(id);
if (username != null && !"".equals(username))
json.put("username",username);
else
json.put("username","error");
return json;
}
@CrossOrigin
@PostMapping(value = "api/userInfo")
@ResponseBody //获取当前用户信息
public JSONObject getUserInfo(@RequestBody User curUser){
JSONObject json = new JSONObject();
int id = curUser.getId();
//根据id获取当前用户信息
User user = userService.findUserById(id);
//将结果json化
JSONObject userInfo = (JSONObject) JSON.toJSON(user);
json.put("user",userInfo);
return json;
}
@CrossOrigin
@PostMapping(value = "api/resetPass")
@ResponseBody // 重置账号密码
public JSONObject resetPassword(@RequestBody User user){
JSONObject json = new JSONObject();
//获取账号的用户名
String username = user.getUsername();
//获取账号的手机号
String telephone = user.getTelephone();
//获取账号的新密码
String newPass = user.getPassword();
//调用业务逻辑层接口,检查系统中是否存在与用户名对应的账号
User res = userService.findUserByName(username);
//1.存在该账号
if (res!=null){
if (res.getTelephone().equals(telephone)){
//1.1 手机号与该账号的手机号对应,可以重置密码
int count = userService.resetPass(res.getId(),newPass);
if (count > 0){
//1.1.1 密码重置成功,返回操作结果
json.put("msg","success");
json.put("surveyData",surveys);
}
return json;
}
//加载个人问卷信息
@CrossOrigin
@PostMapping(value = "api/mySurveys")
@ResponseBody
public JSONObject getSurveyByUid(@RequestBody User curUser){
JSONObject json = new JSONObject();
//获取输入的用户名
int uid = curUser.getId();
List<Survey> res = surveyService.getSurveysByUid(uid);
JSONArray surveyList = JSONArray.parseArray(JSON.toJSONString(res));
json.put("mysurveylist",surveyList);
return json;
}
//获取问卷内容
@CrossOrigin
@PostMapping(value = "api/surveyPage")
@ResponseBody
public JSONObject getSurveyPage(@RequestBody Survey survey){
JSONObject json = new JSONObject();
//获取问卷编号
int sid = survey.getSid();
if (sid>0){
//获取问卷标题
String stitle = surveyService.getStitleBySid(sid);
//获取问卷状态
int publish = surveyService.getPublishBySid(sid);
//标题信息json化
json.put("stitle",stitle);
json.put("publish",publish);
List<Question> questionList = questionService.getQuestionListBySid(sid);
//转化成JSON数组
JSONArray ques = JSONArray.parseArray(JSON.toJSONString(questionList));
JSONArray questions = new JSONArray();
for (Object q:ques) {
//强制转换
JSONObject que = (JSONObject) q;
//获取当前问题的问题编号、题目类型
int qid = que.getInteger("qid");
int qtype = que.getInteger("qtype");
//选择题
if(qtype==1 || qtype==2){
//获取问题对应的选项内容
List<Option> optionList = optionService.getOptionListByQid(qid);
JSONArray options = JSONArray.parseArray(JSON.toJSONString(optionList));
que.put("options",options);//把选项列表数组放进问题内容中
}
questions.add(que);//直接添加进问题列表json数组
public JSONObject delSurvey(@RequestBody JSONObject data){
JSONObject json = new JSONObject();
//设置flag记录操作过程
boolean flag = false;
//获取问卷编号
int sid = data.getInteger("sid");
//先获取该问卷的问题列表
List<Question> questionList = questionService.getQuestionListBySid(sid);
//遍历问题列表
if (questionList.size()>0){
for (Question que:questionList) {
//获取问题编号、题目类型
int qid = que.getQid();
int qtype = que.getQtype();
//选择题
if (qtype!=3){
//先删除对应题目的所有选项信息
int countOps = optionService.delOptionsByQid(qid);
if (countOps>0){
flag = true;
}else {
break;
}
}
//再删除该条问题信息
questionService.delQuestionByQid(qid);
//保险一点,删掉该条问题的回答数据
responseService.delResponseByQid(qid);
}
}else {
flag = true;
}
//最后删除该条问题并删除该问题的统计数据
int countSurvey = surveyService.delSurveyBySid(sid);
if (countSurvey>0 && flag){
json.put("msg","success");
}else{
json.put("msg","fail");
}
return json;
}
}
json.put("msg","success");
json.put("stitle",stitle);
}else {
//修改失败,返回信息
json.put("msg","fail");
}
}else {
//数据有误,返回错误信息
json.put("msg","err");
}
return json;
}
//切换问卷状态
@CrossOrigin
@PostMapping(value = "api/setPublish")
@ResponseBody
public JSONObject editPublish(@RequestBody JSONObject data){
JSONObject json = new JSONObject();
//获取当前操作的问卷编号
int sid = data.getInteger("sid");
//获取当前问卷的状态
int publish = data.getInteger("publish");
//判断当前问卷状态
if (publish==1){
// 若当前问卷状态为已发布,则切换成未发布
int count = surveyService.setPublish(0,sid);
if (count>0) {
json.put("msg", "success");//操作成功
}else
json.put("msg","fail");//操作失败
}else if (publish==0){
// 若当前问卷状态为未发布,则切换成已发布
int count = surveyService.setPublish(1,sid);
if (count>0)
json.put("msg","success");//操作成功
else
json.put("msg","fail");//操作失败
}else {
// 数据信息出现错误,返回错误信息
json.put("msg","err");
}
if (keyword == null || "".equals(keyword)){
//关键字为空 返回所有问卷
List<JSONObject> surveys = surveyService.getSurveysInfo();
//把结果json化
JSONArray allSurveyList = JSONArray.parseArray(JSON.toJSONString(surveys));
json.put("res",allSurveyList);
}else{
//根据关键字查找
List<JSONObject> surveyList = surveyService.surveysSearch('%'+keyword+'%');
//把结果json化
JSONArray keySurveyList = JSONArray.parseArray(JSON.toJSONString(surveyList));
json.put("res",keySurveyList);
}
return json;
}
//根据关键字搜索个人问卷信息
@CrossOrigin
@PostMapping(value = "api/getSurveyByUid")
@ResponseBody
public JSONObject getSurveyListByUid(@RequestBody JSONObject data){
JSONObject json = new JSONObject();
//获取用户编号
int uid = data.getInteger("uid");
//获取关键字
String keyword = data.getString("keyword");
if (keyword!=null && !"".equals(keyword) && uid>0){
//根据关键字搜索问卷
List<Survey> surveyList = surveyService.getMySurveysByKey(uid,'%'+keyword+'%');
JSONArray surveys = JSONArray.parseArray(JSON.toJSONString(surveyList));
//返回搜索结果
json.put("surveyData",surveys);
}
return json;
}
//加载个人问卷信息
@CrossOrigin
@PostMapping(value = "api/mySurveys")
@ResponseBody
public JSONObject getSurveyByUid(@RequestBody User curUser){
JSONObject json = new JSONObject();
//获取输入的用户名
int uid = curUser.getId();
List<Survey> res = surveyService.getSurveysByUid(uid);
JSONArray surveyList = JSONArray.parseArray(JSON.toJSONString(res));
json.put("mysurveylist",surveyList);
return json;
}
//获取问卷内容
@CrossOrigin
@PostMapping(value = "api/surveyPage")