基于springboot+vue的问卷调查系统(前后端分离)

news2024/11/19 14:46:41

博主主页:猫头鹰源码

博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万+、专注Java技术领域和毕业设计项目实战

主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询

文末联系获取

功能分析: 

调查研究人员通过本项目系统注册账号,然后登录账号,在修改个人信息等操作之后,便可以开始进行调查问卷的设计和制作。研究人员确认调查问卷设计和制作完毕之后,就可以选择发布或保存该调查问卷。在问卷调查发布之后,就可以开始进行调查问卷数据的收集和统计。

1、注册系统账号需要填写使用者的用户名、密码、手机号,以及性别和出生日期等信息,然后提交个人信息,在系统检测使用者填写的信息没有问题之后,账号就注册成功了。使用者可以用该账号登录系统,然后进行后续的操作。

2、使用者在登录页面填写好系统账号的用户名和密码,在系统检测确认账号用户名和密码匹配无误后就可以成功进入系统的个人后台,然后就可以建立、设计和编辑调查问卷了。使用者也可以查看自己注册的时候提交的个人信息,同时使用者也可以对已经变更的个人信息进行修改。

3、使用者在建立调查问卷的时候,先是填写好问卷调查的标题,确认之后就可以进入调查问卷的设计。一般情况下,问卷调查的问题类型分为单选题、多选题和文字简答题。使用者在向调查问卷添加问题的时候,先要确定所添加问题的问题类型,然后再填写问题内容和问题选项。

4、在使用者设计好问卷的内容之后,便可以选择发布问卷调查还是保存问卷调查。若选择发布问卷调查,则调查问卷的状态将设为公开,调查对象可以开始填写问卷信息,以供研究人员调查。若选择保存问卷调查,则调查问卷的状态将设为私密,问卷内容仅限使用者个人进行查看,同时使用者可以继续对调查问卷的内容进行修改。

在调查问卷发布之后,使用者就可以查看调查问卷收集到的数据了。使用者进入调查问卷数据的分析页面,系统把对应的调查问卷数据经过整理、统计和分析之后,会在页面中用柱状图、饼状图等数据可视化的形式进行调查问卷数据的展示,研究人员通过页面的显示的数据图形了解该调查问卷收集到的数据后,便可以更清晰地、更有条理地利用问卷调查数据来进行问题的研究。

数据库表结构和ER图:

 

系统包含技术:

后端:springboot,mybatis
前端:element-ui、js、css等
开发工具:idea/vscode
数据库:mysql 5.7
JDK版本:jdk1.8

部分截图说明:

进入首页,未登录也可以填写问卷

下面是登录页面

注册页面

问卷列表

 

填写问卷调查

 

进行问卷分析

 问卷管理

分享问卷

修改密码

部分代码:

 @PostMapping(value = "/allUser")
    @ResponseBody //获取所有用户
    public JSONObject selectAllUsers(){
        JSONObject json = new JSONObject();
        //获取所有用户信息
        List<User> users = userService.selectAllUsers();
        //把结果json化
        JSONObject userList = (JSONObject) JSON.toJSON(users);
        json.put("userlist",userList);
        return json;
    }

    @CrossOrigin
    @PostMapping(value = "api/login")
    @ResponseBody //用户登录
    public JSONObject login(@RequestBody User loginUser){
        JSONObject res = new JSONObject();
        //获取输入的用户名
        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");
            }
        }
        return data;
    }

 

//加载个人问卷信息
    @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数组
            }
            json.put("msg","success");
            json.put("questions",questions);
        }else {
            // 问卷编号有错,返回报错信息
            json.put("msg","error");
        }
        return json;
    }

以上就是部分功能展示,从整体上来看,本系统功能是十分完整的,界面设计简洁大方,交互友好,数据库设计也很合理,规模适中,代码工整,清晰,适合学习使用。

好了,今天就到这儿吧,小伙伴们点赞、收藏、评论,一键三连走起呀,下期见~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/191600.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学校机房高效稳定,一招见效

校园安全作为公共安全领域重要的一部分&#xff0c;一直以来都格外受到重视。近年来&#xff0c;各地区陆续发布了多项加强校园安全管理的政策、法规及标准规范&#xff0c;旨在贯彻落实构建“平安校园”的宗旨&#xff0c;不断完善校园的人防、物防、技防建设。 学校机房常见四…

AutoLisp演练(二)

一、自动绘制出多个等半径圆相切 1.输入基准点baspt 2.输入小圆半径rad 3. 输入欲相切的圆的数量num 4.自动绘制出多个等半径圆相切 5. 涉及到相关变量&#xff0c;设定为baspt、rad、num、midpt、cenpt、kk、ang1、ang2 二、程序代码实现 三、测试及效果 测试一 四、…

盘点一些惊艳一时的 CSS 属性

✨ 个人主页&#xff1a;山山而川~xyj ⚶ 作者简介&#xff1a;前端领域新星创作者&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步&#xff0c;一起加油&#xff01; &#x1f386; 系列专栏&#xff1a; web 大前端 &#x1f680; 学习格言&#xff1a;与其临…

2023爬虫学习笔记 -- 某狗网站爬取数据

一、爬取某狗网站的首页1、导入需要的库文件import requests2、指定我们要访问的网址网页"https://www.sogou.com"3、获取服务器的返回的所有信息响应requests.get(网页)4、通过text属性&#xff0c;从返回信息中读取字符串内容响应内容响应.text5、查看读取到的内容…

唐宇迪机器学习实战课程笔记(全)

1. 线性回归1.1线性回归理论1.2线性回归实战2.分类模型评估(Mnist实战SGD_Classifier)2.1 K折交叉验证K-fold cross validation2.2 混淆矩阵Confusion Matrix2.3 准确率accuracy、精度precision、召回率recall、F12.4 置信度confidence2.5 ROC曲线3.训练调参基本功(LinearRegre…

1612_PC汇编语言_条件以及控制结构

全部学习汇总&#xff1a; GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 这一次简单看看条件分支以及控制结构&#xff0c;感觉看完这部分之后&#xff0c;汇编的大部分框架已经有个差不多了。我的目的并不是成为汇编高手&#xff0c;因此…

数据处理——增删改

文章目录插入数据方式一&#xff1a;values方式2&#xff1a;将查询结果插入到表中更新数据删除数据MySQL8新特性&#xff1a;计算列综合案例插入数据 用INSERT插入数据 方式一&#xff1a;values 使用这种语法一次只能向表中插入一条数据。 情况1&#xff1a;为表的所有字段…

1月,不要跳槽

新年结束了&#xff0c;一些不满现状&#xff0c;被外界的“高薪”“好福利”吸引的人&#xff0c;一般就在这时候毅然决然地跳槽了。 在此展示一套学习笔记 / 面试手册&#xff0c;年后跳槽的朋友可以好好刷一刷&#xff0c;还是挺有必要的&#xff0c;它几乎涵盖了所有的软件…

通信原理笔记—码间串扰与波形传输无失真的条件(奈奎斯特第一准则)

目录 波形传输的无失真条件&#xff1a; 码间串扰问题&#xff1a; 奈奎斯特第一准则&#xff1a; 在抽样判决时刻没有码间串扰的信号波形示例&#xff1a; 具有最窄频带的无码间串扰基带传输系统&#xff1a; 无码间串扰基带系统的主要参数&#xff1a; 一种典型的滚降…

golang中的图像image处理详解

常用的图像格式有png&#xff0c;jpeg&#xff0c;gif&#xff0c;对应的文件后缀为png&#xff0c;jpg&#xff0c;gif&#xff0c;当然文件的具体内容编码才能证明存放的是哪种文件&#xff0c;图像文件的头部都存储了具体标志&#xff0c;比如jpeg前缀\xffd8&#xff0c;png…

Redis实现消息队列

7、Redis消息队列 7.1 Redis消息队列-认识消息队列 什么是消息队列&#xff1a;字面意思就是存放消息的队列。最简单的消息队列模型包括3个角色&#xff1a; 消息队列&#xff1a;存储和管理消息&#xff0c;也被称为消息代理&#xff08;Message Broker&#xff09;生产者&…

定位tcp连接或端口是属于哪个进程

首先要知道tcp连接的端口号&#xff0c;要么是本地端口号要是么remote端口号。有的端口号我们已知&#xff0c;有的端口号可以通过日志获取&#xff0c;也可以抓包获取&#xff0c;如然后是用netstat命令获取pidlinux下使用netstat -anpt&#xff08;a是输出所有n是展示端口号&…

【✓基础算法 2.4】KMP(完结)

当模式串和主串的子串有不匹配时&#xff0c;便往后退一步&#xff0c;看是否能走通&#xff0c;如果不能&#xff0c;则进行退—— KMP 目录 一、KMP算法简介 二、手算求next数组 三、next数组实现代码 四、完整代码实现 1、java 2、c 一、KMP算法简介 当主串的子串…

软件测试刚入职,很茫然怎么办~

毕业后能直接到公司开始工作&#xff0c;是多少人都想要却得不到的机遇&#xff0c;你现在茫然无非是因为对软件测试是做什么的不了解&#xff0c;也不知道软件测试的职业规划到底是怎么样的~ 既然已经进入了公司&#xff0c;那就要珍惜机会&#xff0c;多学习&#xff0c;多问…

redis7 Cluster模式 集群

1.Redis集群模式介绍 Cluster模式是Redis3.0开始推出的Redis Cluster属于AP模型采用无中心结构&#xff0c;每个节点保存数据和整个集群状态, 每个节点都和其他所有节点连接官方要求&#xff1a;至少6个节点才可以保证高可用&#xff0c;即3主3从&#xff1b;扩展性强、更好做到…

[GUET-CTF2019]re

于尘世中携一支笔&#xff0c;绘春风十里。 1.查壳 64bit加了UPX壳 2.使用Kali Linux脱壳 re脱壳3.静态分析 shift加F12打开string窗口 发现可疑字符&#xff0c;点击跟进 光标放在aCorrect&#xff0c;点击快捷键X查看引用这个字符串的地方 点击跟进 按下F5反编译 将函数重命…

为什么AI爆炸式增长会对元宇宙产生巨大影响

欢迎来到Hubbleverse &#x1f30d; 关注我们 关注宇宙新鲜事 &#x1f4cc; 预计阅读时长&#xff1a;9分钟 本文仅代表作者个人观点&#xff0c;不代表平台意见&#xff0c;不构成投资建议。 想想你梦想中的房子。也许它有高高的拱形天花板、温暖的壁炉和宽阔的窗户&…

Allegro如何打开丝印位号的飞线操作指导

Allegro如何打开丝印位号的飞线操作指导 用Allegro做PCB设计的时候,移动器件的位号,会有根飞线实时提示位号是属于哪个器件的,如下图 但是只有在临时移动丝印位号的时候才会显示飞线,如何让所有的器件位号的全部显示,具体操作如下 选择Setup选择User Preferences

如何通过Zabbix Docker配置HTTPS访问系统?

概述 前面文章曾介绍过如果使用docker-compose快速部署一个Zabbix系统&#xff0c;但是部署的Zabbix系统是使用http协议进行访问的。有时候为了保证安全。我们需要配置使用https协议进行访问。 下面就讲述如何使用自签名的ssl证书配置https访问。&#xff08;注&#xff1a;若是…

开发者对抗软件创新焦虑的“180 法则” | 对话MongoDB CTO Mark Porter

在 MongoDB 首席技术官 Mark Porter 看来&#xff0c;创新滞后并不是因为公司缺乏灵感或创造力&#xff0c;而是因为他们被迫将时间花费在维护传统框架上&#xff0c;导致数据相关工作举步维艰&#xff0c;这是大多数组织都存在的问题。那么&#xff0c;对于企业而言&#xff0…