源码获取私信联系我即可~大家点赞、收藏、关注、评论啦精彩专栏推荐订阅在下方专栏 精彩专栏 推荐订阅Java精品项目案例【2000套】Java精品项目案例【2000套】https://blog.csdn.net/weixin_bysj1987/category_13187075.htmlPython精品项目案例【500套】uniapp/微信小程序/安卓app【1800套】✅文末获取源码✅感兴趣的可以先收藏起来还有大家在毕设选题项目以及论文编写等相关问题都可以找我咨询希望帮助更多的人❤️功能性需求3.1.1 学生用户功能大学生提问箱系统主要面向学生用户和管理员这两个角色来设计功能。学生用户在使用系统之前需要进行注册、登录登录时用账号、密码、验证码来进行身份认证。用户忘记密码时可以使用找回密码的功能来重新设置登录信息。登录成功之后学生用户可以进入到系统首页输入关键词进行搜索或者查看首页轮播图以及页面展示内容。个人账户模块里学生用户可以进入到个人中心对头像进行上传对个人资料进行提交取消修改以及退出登录等操作还可以在修改密码页面完成密码的更改。学生用户用实名提问和匿名提问两种方式参与系统的互动。实名提问模块包含搜索、排序、详情查看、点赞、收藏、发表评论、发表内容、回答问题、查看回答、提交等操作匿名提问模块也具备相同的功能可以满足学生在不同的场景下提出问题的需求。学生提问模块可以实现查询、重置、添加、删除、详情查看、提交、取消等操作学生可以对自身发布的提问进行基本的管理。回答记录模块可以进行查询、重置以及查看详情有利于学生了解自己参与回答过的全部内容。学生用户用例图如图3-1所示。管理员功能管理员登录系统之后可以进入到后台首页对大学生提问箱系统中的用户数据、提问数据、分类数据、互动数据等进行统一的管理。系统用户管理模块主要对系统用户信息进行查看、修改等操作方便管理员了解系统用户的使用情况。实名提问管理模块主要用来管理学生用实名发布的问题内容。提问分类管理模块支持查询、重置、删除、添加、提交、取消等操作管理员可以对系统中已有的问答内容进行修改分类管理以方便问题的查找与检索。学生提问管理模块属于管理员端的主要功能可以对学生的提问进行查询、重置、批量审核、删除、查看详情、审核、公开、私密、确定、取消、实名发布、匿名发布等操作。管理员可以对学生的提问进行审核根据问题内容来决定是否公开展示或者私密处理也可以根据实际情况选择实名发布或者匿名发布。匿名提问管理模块具备查询、重置、删除、查看评论、查看评论功能可以有效地对匿名提问和评论内容进行监管。回答记录管理模块可以实现查询、重置、删除、查看详情的功能问题点赞管理模块可以实现查询、重置、删除、查看详情的功能可以满足后台对于问答互动数据的维护需求。管理员用例图如图3-2所示。业务流程分析用户注册登录流程学生用户进入系统之后如果已经存在账号则可以在登录页面输入账号、密码以及验证码完成身份验证。系统验证成功之后用户就会进入到首页如果账号信息输入有误或者验证码填写不正确系统就会提示用户重新输入。未注册用户可以进入注册页面填写基本的账号信息后提交注册。注册成功之后用户就会返回到登录页面进行登录。如果用户忘记了密码可以通过找回密码的功能来重新设置密码然后用新的密码登录系统。用户注册登录流程如图3-3所示。学生提问流程学生用户在实名提问或者匿名提问页面浏览问题的时候可以利用关键词搜索找到相关的问题然后点击进入详情页面。进入详情页之后用户可以看到问题的内容以及已经给出的回答还可以对问题进行点赞、收藏或者发表评论。用户如果想参与解答在回答区输入回答内容并提交。提交成功之后回答内容会出现在对应的题目下方用户也可以在回答记录页面查看自己的回答历史。学生提问流程如图3-4所示。问题互动流程学生用户在实名提问或者匿名提问页面浏览问题的时候可以利用关键词搜索找到相关的问题然后点击进入详情页面。进入详情页之后用户可以看到问题的内容以及已经给出的回答还可以对问题进行点赞、收藏或者发表评论。用户如果想参与解答在回答区输入回答内容并提交。提交成功之后回答内容会出现在对应的题目下方用户也可以在回答记录页面查看自己的回答历史。问题互动流程如图3-5所示。数据库DROP TABLE IF EXISTS student_user; CREATE TABLE student_user(student_user_id int(11) NOT NULL AUTO_INCREMENT COMMENT 学生用户ID, student_user_id_number varchar(64) NOT NULL UNIQUE comment 学生学号, student_name varchar(64) comment 学生姓名, student_phone varchar(64) comment 学生电话, student_points double(8,2) DEFAULT 0 comment 学生积分, examine_state varchar(16) DEFAULT 已通过 NOT NULL comment 审核状态, user_id int(11) DEFAULT 0 NOT NULL comment 用户ID, create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间, create_by int(11) DEFAULT 1 NOT NULL comment 创建用户ID, update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 更新时间, DROP TABLE IF EXISTS student_questions; CREATE TABLE student_questions(student_questions_id int(11) NOT NULL AUTO_INCREMENT COMMENT 学生提问ID, student_user int(11) DEFAULT 0 comment 学生用户, student_user_id_number varchar(64) comment 学生学号, student_name varchar(64) comment 学生姓名, anonymous_or_not varchar(64) comment 是否匿名, problem_title varchar(64) NOT NULL UNIQUE comment 问题标题, question_category varchar(64) comment 提问分类, number_of_questions varchar(64) comment 提问次数, question_date date comment 提问日期, question_picture varchar(255) comment 提问图片, problem_description text comment 问题描述, publish_status varchar(64) comment 发布状态, examine_state varchar(16) DEFAULT 待审核 NOT NULL comment 审核状态, examine_reply varchar(255) DEFAULT comment 审核回复, real_name_question_limit_times int(8) DEFAULT 1 NOT NULL comment 实名发布限制次数, anonymous_question_limit_times int(8) DEFAULT 1 NOT NULL comment 匿名发布限制次数, create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间, create_by int(11) DEFAULT 1 NOT NULL comment 创建用户ID, update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 更新时间, DROP TABLE IF EXISTS real_name_question; CREATE TABLE real_name_question(real_name_question_id int(11) NOT NULL AUTO_INCREMENT COMMENT 实名提问ID, student_user int(11) DEFAULT 0 comment 学生用户, student_name varchar(64) comment 学生姓名, problem_title varchar(64) NOT NULL UNIQUE comment 问题标题, question_category varchar(64) comment 提问分类, question_date date comment 提问日期, number_of_likes double(8,2) DEFAULT 0 comment 点赞数量, question_picture varchar(255) comment 提问图片, problem_description text comment 问题描述, collect_len int(11) DEFAULT 0 NOT NULL comment 收藏数, comment_len int(11) DEFAULT 0 NOT NULL comment 评论数, answer_record_limit_times int(8) DEFAULT 1 NOT NULL comment 回答问题限制次数, problem_praise_limit_times int(8) DEFAULT 1 NOT NULL comment 点赞问题限制次数, create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间, create_by int(11) DEFAULT 1 NOT NULL comment 创建用户ID, update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 更新时间, DROP TABLE IF EXISTS anonymous_question; CREATE TABLE anonymous_question(anonymous_question_id int(11) NOT NULL AUTO_INCREMENT COMMENT 匿名提问ID, student_user int(11) DEFAULT 0 comment 学生用户, problem_title varchar(64) comment 问题标题, question_category varchar(64) comment 提问分类, question_date date comment 提问日期, number_of_likes double(8,2) DEFAULT 0 comment 点赞数量, question_picture varchar(255) comment 提问图片, problem_description text comment 问题描述, collect_len int(11) DEFAULT 0 NOT NULL comment 收藏数, comment_len int(11) DEFAULT 0 NOT NULL comment 评论数, answer_record_limit_times int(8) DEFAULT 1 NOT NULL comment 回答问题限制次数, problem_praise_limit_times int(8) DEFAULT 1 NOT NULL comment 点赞问题限制次数, create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间, create_by int(11) DEFAULT 1 NOT NULL comment 创建用户ID, update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 更新时间,代码PostMapping(/add) Transactional public MapString, Object add(HttpServletRequest request) throws IOException { service.insert(service.readBody(request.getReader())); return success(1); } Transactional public MapString, Object addMap(MapString,Object map){ service.insert(map); return success(1); } Transactional public MapString, Object addEntity(E entity){ service.insert(entity); return success(1); } PostMapping(/set) Transactional public MapString, Object set(HttpServletRequest request) throws IOException { service.update(service.readQuery(request), service.readConfig(request), service.readBody(request.getReader())); return success(1); } Transactional public MapString, Object setEntity(MapString,String queryMap,MapString,String configMap,E entity) throws IOException { service.updateEntity(queryMap,configMap,entity); return success(1); } RequestMapping(value /del) Transactional public MapString, Object del(HttpServletRequest request) { service.delete(service.readQuery(request), service.readConfig(request)); return success(1); } RequestMapping(/get_obj) public MapString, Object obj(HttpServletRequest request) { MapString, String config service.readConfig(request); if (request.getParameter(like) null || request.getParameter(like).trim().isEmpty()) { config.put(like, 0); } List resultList service.selectBaseList(service.select(service.readQuery(request), config)); if (resultList.size() 0) { JSONObject jsonObject new JSONObject(); jsonObject.put(obj,resultList.get(0)); return success(jsonObject); } else { return success(null); } } public MapString, Object getObjByMap(MapString,String queryMap) { List resultList service.selectBaseList(service.select(queryMap, new HashMap())); if (resultList.size() 0) { JSONObject jsonObject new JSONObject(); jsonObject.put(obj,resultList.get(0)); return success(jsonObject); } else { return success(null); } } RequestMapping(/get_list) public MapString, Object getList(HttpServletRequest request) { MapString, Object map service.selectToPage(service.readQuery(request), service.readConfig(request)); return success(map); } public MapString, Object getListByMap(MapString,String queryMap) { MapString, Object map service.selectToPage(queryMap, new HashMap()); return success(map); } RequestMapping(/list_group) public MapString, Object listGroup(HttpServletRequest request) { MapString,Object map service.selectToList(service.readQuery(request), service.readConfig(request)); MapString,Object result new HashMap(); result.put(result,map); return result; } RequestMapping(/bar_group) public MapString, Object barGroup(HttpServletRequest request) { MapString, Object map service.selectBarGroup(service.readQuery(request), service.readConfig(request)); return success(map); }学生用户功能实现首页功能实现首页功能由SlidesController继承BaseController中的getList方法实现用户进入首页后前端向后端发送轮播图及列表查询请求后端通过readQuery读取关键词条件通过readConfig获取分页配置再调用selectToPage返回页面展示数据。首页界面如图5-1所示。图5-1 首页界面核心代码实现如下RequestMapping(/get_list)public MapString, Object getList(HttpServletRequest request) {MapString, Object map service.selectToPage(service.readQuery(request), service.readConfig(request));return success(map);}注册功能实现注册功能由UserController类中的signUp方法实现。用户提交注册信息后方法先读取用户名并构造查询条件通过selectBaseList判断账号是否已存在若存在则返回提示若不存在则调用insert方法保存用户数据。注册界面如图5-2所示。图5-2 注册界面核心代码实现如下PostMapping(register)public MapString, Object signUp(RequestBody User user) {MapString, String query new HashMap();query.put(username,user.getUsername());List list service.selectBaseList(service.select(query, new HashMap()));if (list.size()0){return error(30000, 用户已存在);登录功能实现登录功能由UserController类中的login方法实现。前端提交账号和密码后方法读取用户名、邮箱、手机号和密码字段对密码进行解密处理再依据账号类型查询用户记录完成身份校验后返回登录结果。登录界面如图5-3所示。图5-3 登录界面核心代码实现如下PostMapping(login)public MapString, Object login(RequestBody MapString, String data, HttpServletRequest httpServletRequest) {String username data.get(username);String email data.get(email);String phone data.get(phone);String password data.get(password);password RsaUtils.decryptByPrivateKey(password);我的账户功能实现我的账户功能由UserController类中的state方法和quit方法实现。state方法通过请求头中的x-auth-token获取当前登录用户编号并查询用户信息返回前端quit方法删除Redis中的token记录完成账户退出操作。我的账户界面如图5-4所示。图5-4 我的账户界面核心代码实现如下GetMapping(state)public MapString, Object state(HttpServletRequest request) {JSONObject ret new JSONObject();String token request.getHeader(x-auth-token);Integer userId tokenGetUserId(token);log.info([返回userId] {},userId);个人首页功能实现个人首页功能由StudentUserController类中的set方法和BaseController类中的upload方法实现。用户上传头像时调用upload保存文件修改资料时set方法读取请求体参数封装学生用户对象后完成资料更新。个人首页界面如图5-5所示。图5-5 个人首页界面核心代码实现如下PostMapping(/upload)public MapString, Object upload(RequestParam(file) MultipartFile file) {log.info(进入方法);if (file.isEmpty()) {return error(30000, 没有选择文件);}修改密码功能实现修改密码功能由UserController类中的change_password方法实现。系统根据请求头token取得当前用户编号读取旧密码后构造查询条件若原密码匹配成功则通过update方法写入新密码并返回修改结果。修改密码界面如图5-6所示。图5-6 修改密码界面核心代码实现如下PostMapping(change_password)public MapString, Object change_password(RequestBody MapString, String data, HttpServletRequest request){String token request.getHeader(x-auth-token);Integer userId tokenGetUserId(token);MapString, String query new HashMap();String o_password data.get(o_password);实名提问功能实现实名提问功能由RealNameQuestionController类中的add方法实现。学生提交实名问题后方法读取请求体数据设置学生用户、学生姓名和问题标题等字段并对问题标题进行重复校验最后调用addEntity保存记录。实名提问界面如图5-7所示。图5-7 实名提问界面核心代码实现如下PostMapping(/add)Transactionalpublic MapString, Object add(HttpServletRequest request) throws IOException {MapString,Object paramMap service.readBody(request.getReader());RealNameQuestion real_name_question new RealNameQuestion();real_name_question.setStudent_user(paramMap.get(student_user)null?null:Integer.valueOf(String.valueOf(paramMap.get(student_user))));匿名提问功能实现匿名提问功能由AnonymousQuestionController类中的add方法实现。用户提交匿名问题后方法读取问题标题、问题分类、提问日期和问题描述等字段封装为匿名提问对象并通过addEntity写入数据库。匿名提问界面如图5-8所示。图5-8 匿名提问界面源码获取私信联系我即可~大家点赞、收藏、关注、评论啦精彩专栏推荐订阅在下方专栏