Design and implementation of online questionnaire survey system based on Spring Boot

Table of Contents

Preface

1. Technology stack

2. Introduction to system functions

Administrator function implementation

Questionnaire management

Questionnaire management

Question management

User Management

News information management

User function implementation

Questionnaire list

Questionnaire

news

Questionnaire records

3. Core code

1. Login module

2. File upload module

3. Code encapsulation


Foreword

Nowadays, all walks of life in society are using their own special software to work. At this time of the development of the Internet, people have found that they cannot do without the Internet. The development of the Internet is inseparable from some new technologies, and new technologies are often produced to solve existing problems. In view of the irregularities in questionnaire survey information management, low fault tolerance rate, and time-consuming and labor-intensive data processing by managers, the use of the newly developed online questionnaire survey system can fundamentally standardize the formality and legality of the entire data processing process.

The online questionnaire survey system can realize functions such as questionnaire management, user management, question management, questionnaire management, and news information management. The system uses Mysql database, Java language, Spring Boot framework and other technologies for programming implementation.

The online questionnaire system can improve the efficiency of solving questionnaire information management problems, optimize the questionnaire information processing process, and ensure the security of stored data. It is a very reliable and safe application.

1. Technology stack

Get the source code at the end
SpringBoot + Vue + JS + jQuery + Ajax…

2. Introduction to system functions

Administrator function implementation

Questionnaire Management

Questionnaire management interface. Administrators can enable or disable existing questionnaires in this interface. They can add new questionnaires, edit and change the information of existing questionnaires, including questionnaire names, concluding remarks and other information. They can delete questionnaires that need to be deleted. You can delete questionnaires according to the Questionnaire name and status of the questionnaire to obtain the required questionnaire information.

Questionnaire Management

Questionnaire management interface, where the administrator can view the questionnaire information submitted by the user. The administrator can directly view the survey details of each questionnaire and delete the questionnaire information.

Question Management

Question management interface. In this interface, administrators can export questions, add new questions, modify and delete specified question information. At the same time, they can view the user’s statistical information on each question option. The statistical information is displayed in a pie chart. exhibit.

User Management

User management interface, where administrators can reset passwords for users, modify basic user information, add new users, and delete user information that needs to be deleted.

News and information management

News information management interface, in which the administrator is responsible for publishing news information, changing part of the news information, and deleting news information that needs to be deleted.

User function implementation

Questionnaire List

Questionnaire list interface, where users select questionnaires and participate in the survey.

Questionnaire

In the questionnaire interface, users mainly answer questions based on the questionnaire question information. After answering the questions, they can select the End Questionnaire button at the top of the interface to leave the questionnaire interface.

News and Information

News information interface, users browse news information in this interface, and edit news titles in the search box in the upper right corner of the interface to obtain matching news information.

Questionnaire Record

Questionnaire record interface, where users can view the record information of participating in the questionnaire survey.

3. Core code

1. Login module

package com.controller;
 
 
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
 
import javax.servlet.http.HttpServletRequest;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
 
import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.TokenEntity;
import com.entity.UserEntity;
import com.service.TokenService;
import com.service.UserService;
import com.utils.CommonUtil;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;
 
/**
 * Login related
 */
@RequestMapping("users")
@RestController
public class UserController{
\t
@Autowired
private UserService userService;
\t
@Autowired
private TokenService tokenService;
 
/**
\t * Log in
*/
@IgnoreAuth
@PostMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
if(user==null || !user.getPassword().equals(password)) {
return R.error("Account or password is incorrect");
}
String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
return R.ok().put("token", token);
}
\t
/**
\t * register
*/
@IgnoreAuth
@PostMapping(value = "/register")
public R register(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
    if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
    return R.error("User already exists");
    }
        userService.insert(user);
        return R.ok();
    }
 
/**
\t * quit
*/
@GetMapping(value = "logout")
public R logout(HttpServletRequest request) {
request.getSession().invalidate();
return R.ok("Exit successfully");
}
\t
/**
     * reset Password
     */
    @IgnoreAuth
@RequestMapping(value = "/resetPass")
    public R resetPass(String username, HttpServletRequest request){
    UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
    if(user==null) {
    return R.error("Account does not exist");
    }
    user.setPassword("123456");
        userService.update(user,null);
        return R.ok("Password has been reset to: 123456");
    }
\t
/**
     * list
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,UserEntity user){
        EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
    PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
        return R.ok().put("data", page);
    }
 
/**
     * list
     */
    @RequestMapping("/list")
    public R list(UserEntity user){
       EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
      ew.allEq(MPUtil.allEQMapPre( user, "user"));
        return R.ok().put("data", userService.selectListView(ew));
    }
 
    /**
     * information
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") String id){
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }
    
    /**
     * Get the user's session user information
     */
    @RequestMapping("/session")
    public R getCurrUser(HttpServletRequest request){
    Long id = (Long)request.getSession().getAttribute("userId");
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }
 
    /**
     * save
     */
    @PostMapping("/save")
    public R save(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
    if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
    return R.error("User already exists");
    }
        userService.insert(user);
        return R.ok();
    }
 
    /**
     * Revise
     */
    @RequestMapping("/update")
    public R update(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
        userService.updateById(user);//Update all
        return R.ok();
    }
 
    /**
     * delete
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        userService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}

2. File upload module

package com.controller;
 
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.UUID;
 
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
 
import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.ConfigEntity;
import com.entity.EIException;
import com.service.ConfigService;
import com.utils.R;
 
/**
 * Upload file mapping table
 */
@RestController
@RequestMapping("file")
@SuppressWarnings({"unchecked","rawtypes"})
public class FileController{
@Autowired
    private ConfigService configService;
/**
\t * upload files
*/
@RequestMapping("/upload")
public R upload(@RequestParam("file") MultipartFile file,String type) throws Exception {
if (file.isEmpty()) {
throw new EIException("The uploaded file cannot be empty");
}
String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1);
File path = new File(ResourceUtils.getURL("classpath:static").getPath());
if(!path.exists()) {
path = new File("");
}
File upload = new File(path.getAbsolutePath(),"/upload/");
if(!upload.exists()) {
upload.mkdirs();
}
String fileName = new Date().getTime() + "." + fileExt;
File dest = new File(upload.getAbsolutePath() + "/" + fileName);
file.transferTo(dest);
FileUtils.copyFile(dest, new File("C:\Users\Desktop\jiadian\springbootl7own\src\main\resources\static\upload" + "/" + fileName));
if(StringUtils.isNotBlank(type) & amp; & amp; type.equals("1")) {
ConfigEntity configEntity = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));
if(configEntity==null) {
configEntity = new ConfigEntity();
configEntity.setName("faceFile");
configEntity.setValue(fileName);
} else {
configEntity.setValue(fileName);
}
configService.insertOrUpdate(configEntity);
}
return R.ok().put("file", fileName);
}
\t
/**
\t * download file
*/
@IgnoreAuth
@RequestMapping("/download")
public ResponseEntity<byte[]> download(@RequestParam String fileName) {
try {
File path = new File(ResourceUtils.getURL("classpath:static").getPath());
if(!path.exists()) {
path = new File("");
}
File upload = new File(path.getAbsolutePath(),"/upload/");
if(!upload.exists()) {
upload.mkdirs();
}
File file = new File(upload.getAbsolutePath() + "/" + fileName);
if(file.exists()){
/*if(!fileService.canRead(file, SessionManager.getSessionUser())){
getResponse().sendError(403);
}*/
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", fileName);
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);
}
} catch (IOException e) {
e.printStackTrace();
}
return new ResponseEntity<byte[]>(HttpStatus.INTERNAL_SERVER_ERROR);
}
\t
}

3. Code packaging

package com.utils;
 
import java.util.HashMap;
import java.util.Map;
 
/**
 * Return data
 */
public class R extends HashMap<String, Object> {
private static final long serialVersionUID = 1L;
\t
public R() {
put("code", 0);
}
\t
public static R error() {
return error(500, "Unknown exception, please contact the administrator");
}
\t
public static R error(String msg) {
return error(500, msg);
}
\t
public static R error(int code, String msg) {
R r = new R();
r.put("code", code);
r.put("msg", msg);
return r;
}
 
public static R ok(String msg) {
R r = new R();
r.put("msg", msg);
return r;
}
\t
public static R ok(Map<String, Object> map) {
R r = new R();
r.putAll(map);
return r;
}
\t
public static Rok() {
return new R();
}
 
public R put(String key, Object value) {
super.put(key, value);
return this;
}
}

The knowledge points of the article match the official knowledge files, and you can further learn related knowledge. Java Skill TreeHomepageOverview 138070 people are learning the system