大家好!我是岛上程序猿,感谢您阅读本文,欢迎一键三连哦。
💞当前专栏:Java毕业设计
精彩专栏推荐👇🏻👇🏻👇🏻
目录
一、项目简介
近些年来,我国高等教育规模不断扩大,在校大学生人数屡创新高,大学生心理健康问题也日益严峻。虽然各高等学校对心理健康教育的重视程度较高,网络心理健康教育虽然已经起步,但利用程度仍然较低。因此,构建一个高效的心理健康系统,作为传统人工方式的一种有效补充,是解决当前困境的一种有效思路。利用当前成熟的互联网技术,构建开发一款时下流行的B/S架构的大学生心理健康系统,通过该平台学生可以及时反馈自身的心理状态、健康状况,使心理老师能够及时了解,师生之间可以及时交流,帮助学生解决心理健康问题,为在校学生提供线上的心理辅导途径。
二、系统设计
2.1软件功能模块设计
(1)学生模块
该模块供大学生群体使用,大学生提供系统注册、登陆、个人信息修改等账户及登陆功能,同时设计在线测试、在线资讯、留言资讯等功能,学生可以通过心理测试来对自己的心理健康程度进行自我判断,并选择适合的心理辅导老师进行在线资讯或者通过留言与老师预约线下资讯的时间。实现心理资讯线上、线下相结合的,既保护了学生的隐私,又能节省师生的时间和经历。
(2)心理辅导老师模块
该模块供心理辅导老师使用,老师提供系统注册、登陆、个人信息修改等账户及登陆功能,并可以发布心理测试题、查看对应账户的留言、与学生在线交流等功能。通过上述功能,心理辅导老师可以把握学生的心理健康程度,并对潜在的有心理问题隐患的同学加以注意。
(3)管理员模块
管理员使用管理员账户登陆系统,拥有系统最高权限,可以对系统数据进行管理和维护,包括学生账户和教师账户及其数据的管理,便于对系统进行及时维护,方式系统因故障导致的数据泄露、服务中断等问题。
2.2数据库设计
数据库中需要存储用户及各个模块子功能等基本信息以及用户的历史行为信息,这些信息将会被展示在应用端的用户界面上并且会被用于进行数据分析。在该数据概念设计过程中,使用了实体联系模型(EntityRelationship Model,简称E-R模型)来确定系统实体(Entity)、实体的属性(attribute)以及实体间的联系(relationship)。
三、系统项目部分截图
3.1用户注册登陆的设计与实现
用户登录是用户在系统登录页面上,通过用户名及对应登录密码,登录系统个人账户,新用户提供用户注册功能,注册后跳转至登陆界面。按照功能需求差异,分为管理员、学生和心理咨询老师三种登陆功能权限。
登录时,用户向服务器发送登录数据请求,携带编辑框中输入的用户名信息和密码信息,服务器通过查询数据库进行比对,如果匹配成功发送成功响应,如果匹配失败发送失败码,客户端通过接受服务端返回的结果,来判断用户是否成功登陆。
具体流程设计图如下所示:
实现效果如下图:
3.2心理咨询师功能
心理咨询师通过注册登陆系统,可以编辑、修改、发布、删除心理知识内容,并对文字评论进行查看。并可以编辑、修改、发布、删除心理调查问卷,并对问卷及结果进行查看管理。
实现效果如下图所示:
3.3学生功能
大学生通过系统注册、登陆、个人信息修改等账户及登陆功能,可以在线测试、在线咨询、留言资讯等功能,学生可以通过心理测试来对自己的心理健康程度进行自我判断,并选择适合的心理辅导老师进行在线资讯或者通过留言与老师预约线下资讯的时间。
3.4后台功能
后台管理功能是为系统管理员提供后续维护、审核、编辑等功能,便于管理人员定期对系统进行维护。系统提供以下功能和权限:
个人中心
管理员可以自定义管理账户名称及密码;
学生管理
管理员可以添加、编辑、删除学生的信息,便于对平台注册学生进行管理;
四、论文目录
1.绪论 6
1.1研究背景 6
1.2国内现状 6
1.3研究的意义 7
1.4 论文结构 7
2.系统可行性及需求分析 8
2.1.系统可行性需求分析 8
2.2 系统功能性需求分析 9
2.2.1核心功能性需求分析 10
2.2.2性能需求分析 10
3.项目技术选择 11
3.1Java程序语言 11
3.1.1 Java简介 11
3.1.2 Java主要特性 12
3.2技术框架 14
3.2.1 SSM框架 14
3.2.2 MyBatis 15
3.3 数据库 15
4.系统设计实现 16
4.1 系统功能设计 16
4.1.1 核心功能模块设计 16
4.1.2 其它功能要求 17
4.2数据库页表设计 17
4.3系统详细实现 19
4.3.1 用户注册登陆的设计与实现 19
4.3.2在线心理测试功能 19
4.3.3在线咨询功能 20
4.3.4 留言咨询功能 20
4.3.5个人中心 20
5.软件测试 21
5.1软件测试的目的 21
5.2 软件测试的常用方式 21
5.2.1静态测试和动态测试 21
5.2.2黑盒测试、白盒测试和灰盒测试 22
5.2.3手动测试和自动化测试 22
5.3测试用例 23
5.4测试结果 23
6.总结与展望 23
6.1 研究总结 23
6.2 展望 24
参考文献 25
致 谢 26
五、部分核心代码
4.1 用户部分
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;
/**
* 登录相关
*/
@RequestMapping("users")
@RestController
public class UserController{
@Autowired
private UserService userService;
@Autowired
private TokenService tokenService;
/**
* 登录
*/
@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("账号或密码不正确");
}
String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
return R.ok().put("token", token);
}
/**
* 注册
*/
@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("用户已存在");
}
userService.insert(user);
return R.ok();
}
/**
* 退出
*/
@GetMapping(value = "logout")
public R logout(HttpServletRequest request) {
request.getSession().invalidate();
return R.ok("退出成功");
}
/**
* 密码重置
*/
@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("账号不存在");
}
user.setPassword("123456");
userService.update(user,null);
return R.ok("密码已重置为:123456");
}
/**
* 列表
*/
@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);
}
/**
* 列表
*/
@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));
}
/**
* 信息
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") String id){
UserEntity user = userService.selectById(id);
return R.ok().put("data", user);
}
/**
* 获取用户的session用户信息
*/
@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);
}
/**
* 保存
*/
@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("用户已存在");
}
userService.insert(user);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
UserEntity u = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername()));
if(u!=null && u.getId()!=user.getId() && u.getUsername().equals(user.getUsername())) {
return R.error("用户名已存在。");
}
userService.updateById(user);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
userService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}
4.2文件部分
package com.controller;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
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;
/**
* 上传文件映射表
*/
@RestController
@RequestMapping("file")
@SuppressWarnings({"unchecked","rawtypes"})
public class FileController{
@Autowired
private ConfigService configService;
/**
* 上传文件
*/
@RequestMapping("/upload")
public R upload(@RequestParam("file") MultipartFile file, String type,HttpServletRequest request) throws Exception {
if (file.isEmpty()) {
throw new EIException("上传文件不能为空");
}
String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);
String fileName = new Date().getTime()+"."+fileExt;
File dest = new File(request.getSession().getServletContext().getRealPath("/upload")+"/"+fileName);
file.transferTo(dest);
if(StringUtils.isNotBlank(type) && 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);
}
/**
* 下载文件
*/
@IgnoreAuth
@RequestMapping("/download")
public void download(@RequestParam String fileName, HttpServletRequest request, HttpServletResponse response) {
try {
File file = new File(request.getSession().getServletContext().getRealPath("/upload")+"/"+fileName);
if (file.exists()) {
response.reset();
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName+"\"");
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setContentType("application/octet-stream; charset=UTF-8");
IOUtils.write(FileUtils.readFileToByteArray(file), response.getOutputStream());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
获取源码或论文
如需对应的源码,可以评论或者私信都可以。