springboot大学生提问箱系统
摘 要
高校学生在学习咨询、校园生活及事务反馈方面有着诸多的问答需求,传统的线下咨询以及分散式的交流形式存在着分类不明、答复记录无法追溯、匿名表达受限制、互动反馈不充分等状况。大学生提问箱系统以校园问答场景为依托,从学生提问、回答互动、后台审核管理三个方面出发,有提升沟通规范性、问题处理可追溯的现实意义。
系统主要面向学生用户和管理员,用Vue、SpringBoot和MySQL来完成前后端以及数据层的建设工作,并且使用IntelliJ IDEA来进行项目的开发。系统以实名提问、匿名提问、学生提问、回答记录、问题分类、点赞收藏、评论反馈、用户管理等模块为框架,形成一个完整的从问题发布、互动回答到后台审核维护的流程。
学生用户完成注册登录、个人资料维护、密码修改、实名或者匿名提问、问题检索、点赞收藏、评论发表、回答查看、回答记录查询等操作,管理员完成系统用户管理、提问分类维护、学生提问审核、公开或者私密处理、匿名提问管理、回答记录管理和点赞数据维护。系统运行稳定,界面交互清楚,有较强的校园应用价值。
关键词:大学生提问箱;SpringBoot;Vue;MySQL;问答管理
ABSTRACT
College students have many question-and-answer needs in academic consultation, campus life, and affairs feedback. Traditional offline consultation and scattered communication methods have problems such as unclear classification, untraceable response records, limited anonymous expression, and insufficient interactive feedback. The college student question box system is based on campus question-and-answer scenarios. It focuses on student questioning, answer interaction, and background review management, and has practical significance for improving communication standardization and the traceability of problem handling.
The system mainly serves student users and administrators. Vue, SpringBoot, and MySQL are used to complete the construction of the front end, back end, and data layer, while IntelliJ IDEA is used for project development. The system takes real-name questions, anonymous questions, student questions, answer records, question categories, likes and favorites, comment feedback, and user management as its main modules, forming a complete process from question publishing and interactive answering to background review and maintenance.
Student users can complete registration and login, personal information maintenance, password modification, real-name or anonymous questioning, question retrieval, likes and favorites, comment publishing, answer viewing, and answer record querying. Administrators can complete system user management, question category maintenance, student question review, public or private processing, anonymous question management, answer record management, and like data maintenance. The system runs stably, provides clear interface interaction, and has strong campus application value.
****Key words:****College Student Question Box;SpringBoot;Vue;MySQL;Question Answering Management
目 录
[++++第一章 绪论++++](#第一章 绪论)
[++++1.1 研究背景++++](#1.1 研究背景)
[++++1.2 国内外研究现状++++](#1.2 国内外研究现状)
[++++1.2.1 国内研究现状++++](#1.2.1 国内研究现状)
[++++1.2.2 国外研究现状++++](#1.2.2 国外研究现状)
[++++1.3 研究目标与内容++++](#1.3 研究目标与内容)
[++++1.4 论文结构安排++++](#1.4 论文结构安排)
[++++第二章 相关技术与理论++++](#第二章 相关技术与理论)
[++++2.1 系统开发技术++++](#2.1 系统开发技术)
[++++2.1.1 Java语言++++](#2.1.1 Java语言)
[++++2.1.2 Spring Boot框架++++](#2.1.2 Spring Boot框架)
[++++2.1.3 Vue框架++++](#2.1.3 Vue框架)
[++++2.1.4 MySQL数据库++++](#2.1.4 MySQL数据库)
[++++2.1.5 MyBatis框架++++](#2.1.5 MyBatis框架)
[++++2.2 开发工具++++](#2.2 开发工具)
[++++2.2.1 IntelliJ IDEA++++](#2.2.1 IntelliJ IDEA)
[++++2.2.2 Visual Studio Code++++](#2.2.2 Visual Studio Code)
[++++2.2.3 Navicat++++](#2.2.3 Navicat)
[++++第三章 需求分析++++](#第三章 需求分析)
[++++3.1 功能性需求++++](#3.1 功能性需求)
[++++3.1.1 学生用户功能++++](#3.1.1 学生用户功能)
[++++3.1.2 管理员功能++++](#3.1.2 管理员功能)
[++++3.2 业务流程分析++++](#3.2 业务流程分析)
[++++3.2.1 用户注册登录流程++++](#3.2.1 用户注册登录流程)
[++++3.2.2 学生提问流程++++](#3.2.2 学生提问流程)
[++++3.2.3 问题互动流程++++](#3.2.3 问题互动流程)
[++++3.2.4 管理员提问审核流程++++](#3.2.4 管理员提问审核流程)
[++++3.2.5 提问分类管理流程++++](#3.2.5 提问分类管理流程)
[++++3.2.6 匿名提问管理流程++++](#3.2.6 匿名提问管理流程)
[++++3.2.7 回答记录与点赞管理流程++++](#3.2.7 回答记录与点赞管理流程)
[++++第四章 系统设计++++](#第四章 系统设计)
[++++4.1 系统架构设计++++](#4.1 系统架构设计)
[++++4.2 功能结构设计++++](#4.2 功能结构设计)
[++++4.3 数据库设计++++](#4.3 数据库设计)
[++++4.3.1 概念设计++++](#4.3.1 概念设计)
[++++4.4.2 数据库表设计++++](#4.4.2 数据库表设计)
[++++第五章 系统实现++++](#第五章 系统实现)
[++++5.1 学生用户功能实现++++](#5.1 学生用户功能实现)
[++++5.1.1 首页功能实现++++](#5.1.1 首页功能实现)
[++++5.1.2 注册功能实现++++](#5.1.2 注册功能实现)
[++++5.1.3 登录功能实现++++](#5.1.3 登录功能实现)
[++++5.1.4 我的账户功能实现++++](#5.1.4 我的账户功能实现)
[++++5.1.5 个人首页功能实现++++](#5.1.5 个人首页功能实现)
[++++5.1.6 修改密码功能实现++++](#5.1.6 修改密码功能实现)
[++++5.1.7 实名提问功能实现++++](#5.1.7 实名提问功能实现)
[++++5.1.8 匿名提问功能实现++++](#5.1.8 匿名提问功能实现)
[++++5.1.9 学生提问功能实现++++](#5.1.9 学生提问功能实现)
[++++5.1.10 回答记录功能实现++++](#5.1.10 回答记录功能实现)
[++++5.2 管理员功能实现++++](#5.2 管理员功能实现)
[++++5.2.1 后台首页功能实现++++](#5.2.1 后台首页功能实现)
[++++5.2.2 系统用户功能实现++++](#5.2.2 系统用户功能实现)
[++++5.2.3 实名提问管理功能实现++++](#5.2.3 实名提问管理功能实现)
[++++5.2.4 提问分类管理功能实现++++](#5.2.4 提问分类管理功能实现)
[++++5.2.5 学生提问管理功能实现++++](#5.2.5 学生提问管理功能实现)
[++++5.2.6 匿名提问管理功能实现++++](#5.2.6 匿名提问管理功能实现)
[++++5.2.7 回答记录管理功能实现++++](#5.2.7 回答记录管理功能实现)
[++++5.2.8 问题点赞管理功能实现++++](#5.2.8 问题点赞管理功能实现)
[++++第六章 系统实现++++](#第六章 系统实现)
[++++6.1 测试过程++++](#6.1 测试过程)
[++++6.1.1 测试环境与方法++++](#6.1.1 测试环境与方法)
[++++6.1.2 功能测试++++](#6.1.2 功能测试)
[++++6.1.3 测试结果++++](#6.1.3 测试结果)
[++++6.2 全文小结++++](#6.2 全文小结)
[++++致 谢++++](#致 谢)
第一章 绪论
1.1 研究背景
随着高校学生数量的增加以及校园事务种类的增多,学生在课程学习、生活服务、心理问题、规章咨询、意见反馈等各方面的提问需求也越来越大。传统的问答依靠线下办公室咨询、班级群转发、辅导员人工回答或者零散的表单收集,可以解决一些即时的问题,但是问题分类、答复留痕、匿名表达、审核监管以及数据沉淀等各方面都存在着明显的缺陷。学生提出的疑问很容易被聊天记录所覆盖,重复性的咨询占据了大部分的管理时间,人工整理和转述也会造成信息滞后、遗漏以及理解偏差等问题出现,进而影响到问题解决的速度和服务体验1。随着高校管理逐渐依靠网络平台、移动终端和统一数据资源来开展服务,在这样的大环境下,校园问答场景也应该由分散沟通转变为集中受理、分类管理、过程可追溯。大学生提问箱系统正是为了解决以上问题而建立的应用载体,通过实名提问、匿名提问、互动回答、点赞收藏、评论反馈、后台审核等各方面的功能来解决传统方式中渠道分散、管理粗放、反馈闭环不畅等问题2。
大学生提问箱系统与传统的沟通方式相比,可以大大提高学生提问、问题流转、答复管理的规范性。系统把学生端的注册登录、个人资料修改、实名或者匿名提问、问题检索、评论互动、回答查看等操作集中到一个平台上,可以减少沟通成本,提高问题表达的便利性以及可选择性。管理员可以对用户、提问分类、学生提问、匿名提问、回答记录、点赞数据等进行集中维护,使得问题审核、公开处理、私密处理、内容管理有清晰的流程,促使校园问答资源合理配置。系统所积累的问题、回答以及互动数据,给管理者掌握学生关注点、调整服务安排并改善决策给予支撑。该系统可以提高高校学生服务质量和校园沟通秩序,也可以使校园事务处理流程更加规范,有较强的实用性、社会性。
1.2 国内外研究现状
1.2.1 国内研究现状
近三到五年来,国内高校问答类系统由原来的单一信息发布向校园问题受理场景转变,系统形态更加重视检索入口、分类维护、身份识别、互动反馈、后台审核等基础功能。移动端访问习惯促使校园问答服务由重内容的页面向轻量化的页面转变,学生端重视提问的便捷性,管理端看重内容审核的速度。相关研究大多集中于校园知识问答、学生咨询服务、问题分类管理等方面,给大学生提问箱系统的功能设计提供了一些参照。
张淋星等在2025年提出了一种基于ChatGLM的校园问答系统,主要针对校园知识检索、问答生成以及用户咨询回应进行了设计,为本系统实名提问模块的检索逻辑提供了一些思路,有利于提高学生查找问题详情的效率3。冯欣润等人的2025年研究以ChatGPT为基础,对校园问答平台进行设计,提出学生咨询入口整合、问题响应流程优化、平台服务能力建设,给本系统的首页搜索、登录验证、问题查看提供功能组织的参考4。陆公正等(2024)认为大语言模型可以作为校园问答系统的主体,研究校园场景下问题的语义理解、知识匹配、回答生成,给本系统匿名提问模块问题检索、查看回答提供设计参考5。王继胜在2024年设计出基于知识图谱的医疗问答系统,该文献领域与本研究主题不同,只能作为结构化问答组织方式的对比背景引用,其知识关联思路给本系统提问分类管理提供了一种间接的参照6。朱成雨在2024年设计出基于预训练模型的校园问答系统,主要针对校园问题的理解、答案的匹配、交互页面的实现,为本系统学生提问、回答记录查询提供流程化的设计依据7。戚梦瑶于2022年针对高校问答需求设计了问答系统,主要对高校咨询场景下信息整理、问题提交、用户交互等进行设计,为本系统学生端注册登录、提问发布、回答查看提供基础功能参考8。郑欢等人的2022年设计的基于Neo4j的校园移动社交知识问答系统,主要研究内容包括移动端问答交互、知识节点组织、社交反馈机制,给本系统点赞、收藏、评论反馈模块提供思路9。李奕霖在2022年完成基于IPV6的校园信息问答系统的设计,以校园信息查询、问答服务访问、用户操作流程为实现目标,为本系统首页关键词查询、问题详情查看提供功能流程参考10。郑森洪于2021年对基于交互注意力网络的校园问答进行了研究,主要解决问题语义匹配、答案选择、交互特征提取等问题,给本系统的回答问题、查看回答、回答记录查询等提供了方法上的参考11。
国内研究已经涵盖了校园问答检索、问题分类、内容交互、移动端访问、回答记录等各个方面,可以为本系统核心模块的设计提供支持。现有的成果大多只注重问答算法或者知识的组织,对于学生匿名发言、提问审核、公开与私密处理、点赞数据的维护等管理流程缺少关注。大学生提问箱系统以学生提问、管理员审核、分类维护、互动反馈为主线,对已有研究起到补充作用,适应高校真实管理场景下问答服务的需求。
1.2.2 国外研究现状
国外高校问答研究近三到五年的重点是学生支持服务、入学咨询、课堂互动、教育问答体验。相关系统一般从问答入口简化、咨询内容组织、用户参与提高、隐私保护成本控制四个方面入手,注重学生在学习过程中即时的反馈。研究形态有面向招生咨询的问答系统,也有课堂场景中的在线提问平台。其启示就是用清晰的流程降低学生的表达门槛,用管理端的记录提高服务的可追溯性。
Thanh 等人于2022年提出了一个基于本体问答系统的大学招生咨询系统,利用领域本体来组织招生知识,用户可以通过问题获取匹配的答案,给本系统提问分类管理、关键词搜索、问题详情查看等知识组织提供参考12。Peyton等(2025)对大学聊天机器人在学生支持方面应用进行了综述,涉及常见问题服务、学生咨询支持、使用边界等各方面内容,给本系统实名提问、匿名提问、回答记录管理提供服务流程的启发13。Wadhwa 等人于 2025 年在教育领域多模态问答任务上展开研究,着重探究学习场景里各种信息来源的提问理解情况,此研究的技术目的较为繁杂,而本系统并未包含多模态处理内容,其问题表达理解思路可以作为学生提问详情设计的参照对象14。Jenkins等人于2024年对在线投票问答平台在本科心理学课堂上的参与价值进行了反思,认为学生可以在线上提出问题,教师根据反馈来调整互动方式,给本系统评论发表、回答问题、查看回答模块提供课堂互动场景的启示15。
国外对于学生支持服务、咨询反馈机制、课堂互动参与等方面有较多的经验,在线问答可以减少学生的表达压力。部分成果重视复杂语义理解或者多模态处理,技术深度较高,但是本地部署成本较高,同普通高校轻量级应用需求有距离。本系统借鉴了它重视用户参与、隐私表达、服务记录的思想,结合中国高校日常管理流程,以学生提问、匿名发布、审核维护、回答记录等可以落地的功能为依托,形成适合本土校园场景的设计。
1.3 研究目标与内容
本课题以大学生提问箱系统的设计与实现为研究对象,目的是创建一个面向高校学生问答交流的应用平台,解决传统校园咨询中问题分散、答复记录难保存、匿名表达渠道少、后台审核不方便等各方面的问题。系统以学生用户和管理员为主,学生用户可以完成注册登录、个人资料维护、实名提问、匿名提问、问题搜索、点赞收藏、评论发表、回答问题、回答记录查看等操作,管理员可以对系统用户、提问分类、学生提问、匿名提问、回答记录、问题点赞数据进行管理,提高校园问答处理的规范性、可追溯性。
本课题的研究内容主要有系统需求分析、总体设计、数据库设计、功能实现、系统测试。系统使用Vue做为前端技术,SpringBoot做为后端框架,MySQL做为数据库,采用前后端分离的方式实现页面展示、业务处理、数据存储。功能实现主要是学生端的问答互动、管理员端的审核管理,学生端以提问、查看、评论、点赞、收藏为主,管理员端以分类维护、提问审核、公开私密处理、数据管理为主。利用功能测试对系统主要流程的可用性进行验证,保证系统可以满足大学生提问箱的基本应用需求。
1.4 论文结构安排
本文围绕大学生提问箱系统的设计与实现展开研究,全文共分为六章。
第一章为绪论,主要介绍系统的研究背景、国内外研究现状、研究目标与内容,并说明论文整体结构。
第二章为相关技术与理论,主要介绍系统开发所使用的Java语言、Spring Boot框架、Vue框架、MySQL数据库、MyBatis框架以及相关开发工具。
第三章为需求分析,主要从学生用户和管理员两个角色出发,分析系统的功能需求和主要业务流程,包括注册登录、学生提问、问题互动、管理员审核、分类管理等流程。
第四章为系统设计,主要完成系统架构设计、功能结构设计和数据库设计,为后续功能实现提供基础。
第五章为系统实现,主要介绍学生端和管理员端各功能模块的实现过程,包括登录注册、实名提问、匿名提问、回答记录、用户管理、提问审核、分类管理等功能。
第六章为系统测试与全文小结,主要对系统主要功能进行测试,验证系统是否满足设计要求,并对全文工作进行总结,指出系统后续可改进的方向。
第二章 相关技术与理论
2.1 系统开发技术
2.1.1 Java语言
Java语言是本次大学生提问箱系统后端开发所用的主要编程语言。Java是面向对象的高级编程语言,语法结构清晰、代码可读性好、类库资源丰富,可以满足后端业务逻辑开发的基本要求。在系统开发的过程中,用户注册登录、验证码验证、实名提问、匿名提问、回答问题、评论发表、点赞收藏、后台审核等都需要通过后端程序来完成,所以选择Java语言作为后端开发的基础是很有实用性的。
本科毕业设计中使用Java语言的课程较多,学习基础较好,开发资料比较丰富。大学生提问箱系统中Java主要用来编写实体类、控制层、业务层以及数据处理相关的代码,使得系统可以接收到前端的请求,并且可以执行相应的业务操作。使用Java语言来实现后端功能,可以使得系统的逻辑结构更加清晰,有利于之后的代码调试、功能修改以及系统的维护。
2.1.2 Spring Boot框架
Spring Boot框架是基于Spring体系发展起来的后端开发框架,主要用来快速搭建Java Web项目。相比于传统的Spring框架,Spring Boot简化了大部分的配置工作,用更加简单的方式来完成项目的启动、接口的创建以及业务功能的组织。本次大学生提问箱系统中,Spring Boot主要用作后端服务,对学生的端以及管理员端发送的业务请求进行处理。
在具体的开发过程中,Spring Boot会把前端页面传来的数据传递给控制器,然后由业务层来处理,最后再把处理的结果返回给前端页面。学生用户在注册登录、实名提问、匿名提问、发表评论、点赞收藏、查看回答记录等操作中,需要经过Spring Boot后端接口来处理;管理员对系统用户、提问分类、学生提问审核、匿名提问管理、回答记录管理、问题点赞管理等业务操作,也必须依靠Spring Boot来实现。该框架可以很好地支撑系统的后端功能实现。
2.1.3 Vue框架
Vue是前端开发的常用框架,主要用来创建交互式页面以及管理页面中数据的变化。Vue使用组件化开发的方式,把页面中各个不同的功能区域拆分成相对独立的组件,使页面结构更清晰,便于开发与维护。本次大学生提问箱系统中,学生端首页、登录注册页面、个人中心、实名提问页面、匿名提问页面、学生提问页面和回答记录页面均需要进行页面展示以及用户交互,所以使用Vue框架可以较好地完成前端页面的开发工作。
在具体的实现中,Vue主要做的是前端页面的数据绑定、事件处理以及页面跳转。学生用户在首页输入关键词进行搜索、切换轮播图、查看问题详情、提交提问、发表评论、点赞收藏等操作时,前端页面要对用户的操作做出及时的响应,把相关的数据传送给后台接口。管理员在后台对用户、提问分类、学生提问审核、匿名提问管理、回答记录管理进行管理时,也要通过前端页面来完成查询、重置、添加、删除、查看详情的操作。Vue框架可以将页面操作和数据的变化结合起来,使得系统前端的功能更加完整。
2.1.4 MySQL数据库
MySQL数据库属于开源的关系型数据库管理系统,在中小型Web系统开发当中使用较多。MySQL用表结构来存贮数据,可以凭借字段,主键以及数据表之间的联系来对系统的数据实施组织和管理。本次大学生提问箱系统中,MySQL主要用来存储系统运行过程中产生的各种数据,即学生用户信息、管理员信息、提问分类信息、实名提问信息、匿名提问信息、学生提问记录、回答记录、评论信息、点赞收藏信息等。
MySQL数据库可以进行数据的增删改查操作,可以满足系统日常运行中数据管理的需求。学生用户注册登录、修改个人资料、发布提问、查看回答记录等操作过程中,所涉及到的数据都会被写入或者读取到数据库中;管理员对用户进行维护、提问分类进行维护、学生提问进行审核、匿名提问查看、回答记录进行管理、问题点赞进行管理时,也需要通过数据库来完成数据的查询以及状态的更新。根据合理的数据库表结构以及字段关系的设计,可以使得系统的数据存储更加规范,各个功能模块之间数据的调用也更加清晰。
2.1.5 MyBatis框架
MyBatis是常用的一款Java持久层框架,主要是用来完成Java对象和数据库表之间数据的映射。传统的数据库操作一般要编写很多重复的代码,但是使用MyBatis通过Mapper接口和SQL映射文件可以实现数据库访问操作,使后端代码结构更加清晰。本次大学生提问箱系统中,MyBatis主要用作后端和MySQL数据库之间数据交互的工具,可以实现用户信息查询、提问信息保存、回答记录读取、评论数据管理、点赞数据管理等功能。
Spring Boot接收前端请求,调用业务层方法,MyBatis将业务层传来的数据转成数据库操作语句。当学生用户提交实名提问或者匿名提问的时候,MyBatis把提问内容存入对应的表中;管理员查询学生提问、审核提问或者删除回答记录的时候,MyBatis就会按照条件执行数据查询、修改或者删除操作。使用MyBatis框架之后,后端程序可以更加方便地完成数据库的访问工作,使得系统的数据处理流程更加清晰,也利于后期对SQL语句以及业务功能进行修改。
2.2 开发工具
2.2.1 IntelliJ IDEA
IntelliJ IDEA是Java的集成开发环境,主要是用来写后端项目、调试和运行。该工具可以进行Java项目的创建、代码提示、语法检查、项目依赖管理、程序调试等操作,可以满足Spring Boot项目开发的基本需求。本次大学生提问箱系统的开发使用的是IntelliJ IDEA来搭建后端工程,编写控制层、业务层、数据访问层、实体类代码,实现项目的启动、接口调试、错误排查等操作。
使用IntelliJ IDEA可以对项目目录结构进行直观的管理,方便区分配置文件、控制器类、服务类、Mapper接口和实体类等。开发人员可以利用运行窗口来观察系统启动的状态,并用调试功能去找到接口调用以及数据处理过程里的问题。本科毕业设计中IntelliJ IDEA操作界面清楚,功能齐全,可以很好地支持大学生提问箱系统后端功能的开发和测试。
2.2.2 Visual Studio Code
Visual Studio Code是一款常用的前端代码编辑工具,支持HTML、CSS、JavaScript和Vue文件的编辑,具有代码提示、插件扩展、文件管理和终端运行等功能。本次大学生提问箱系统的开发中,Visual Studio Code主要用作前端页面的编写与调试,包含学生端首页、登录注册页面、个人中心页面、实名提问页面、匿名提问页面、回答记录页面和管理员后台管理页面等。
在前端开发中,Visual Studio Code可以配合Vue项目完成页面结构的编写、样式调整以及交互逻辑的处理。学生端关键词搜索、轮播图切换、提问提交、评论发表、点赞收藏等操作以及管理员端的查询、重置、添加、删除、审核、查看等功能,都可以用本工具进行代码编写和效果测试。使用该工具做前端开发,可以使得页面代码结构更加清晰,有利于发现并修改页面显示、交互方面的问题。
2.2.3 Navicat
Navicat是数据库管理工具,主要用以连接、管理MySQL数据库。使用Navicat可以完成数据库创建、数据表设计、字段设置、数据查看、SQL语句执行、数据备份等工作。本次大学生提问箱系统开发中,Navicat主要用作管理系统数据库,完成用户表、提问分类表、实名提问表、匿名提问表、学生提问表、回答记录表、评论表和点赞收藏表等数据表的创建和维护。
在系统开发、测试时Navicat可以清楚地看到数据库中数据的变化。学生用户完成注册、发布提问、发表评论或者点赞收藏之后,可以使用Navicat来查看相关的数据是否已经成功写入到数据库中;管理员对提问进行审核、公开私密处理、分类删除或者回答记录的管理之后,也可以用Navicat来检查数据库记录是否有相应的改变。使用Navicat可以方便地检查数据结构以及测试结果,保证系统数据库的设计同功能的实现一一对应。
第三章 需求分析
3.1 功能性需求
3.1.1 学生用户功能
大学生提问箱系统主要面向学生用户和管理员这两个角色来设计功能。学生用户在使用系统之前需要进行注册、登录,登录时用账号、密码、验证码来进行身份认证。用户忘记密码时可以使用找回密码的功能来重新设置登录信息。登录成功之后,学生用户可以进入到系统首页,输入关键词进行搜索或者查看首页轮播图以及页面展示内容。个人账户模块里,学生用户可以进入到个人中心,对头像进行上传,对个人资料进行提交,取消修改以及退出登录等操作,还可以在修改密码页面完成密码的更改。
学生用户用实名提问和匿名提问两种方式参与系统的互动。实名提问模块包含搜索、排序、详情查看、点赞、收藏、发表评论、发表内容、回答问题、查看回答、提交等操作,匿名提问模块也具备相同的功能,可以满足学生在不同的场景下提出问题的需求。学生提问模块可以实现查询、重置、添加、删除、详情查看、提交、取消等操作,学生可以对自身发布的提问进行基本的管理。回答记录模块可以进行查询、重置以及查看详情,有利于学生了解自己参与回答过的全部内容。学生用户用例图如图3-1所示。

图3-1 学生用户用例图
3.1.2 管理员功能
管理员登录系统之后可以进入到后台首页,对大学生提问箱系统中的用户数据、提问数据、分类数据、互动数据等进行统一的管理。系统用户管理模块主要对系统用户信息进行查看、修改等操作,方便管理员了解系统用户的使用情况。实名提问管理模块主要用来管理学生用实名发布的问题内容。提问分类管理模块支持查询、重置、删除、添加、提交、取消等操作,管理员可以对系统中已有的问答内容进行修改分类管理,以方便问题的查找与检索。
学生提问管理模块属于管理员端的主要功能,可以对学生的提问进行查询、重置、批量审核、删除、查看详情、审核、公开、私密、确定、取消、实名发布、匿名发布等操作。管理员可以对学生的提问进行审核,根据问题内容来决定是否公开展示或者私密处理,也可以根据实际情况选择实名发布或者匿名发布。匿名提问管理模块具备查询、重置、删除、查看评论、查看评论功能,可以有效地对匿名提问和评论内容进行监管。回答记录管理模块可以实现查询、重置、删除、查看详情的功能,问题点赞管理模块可以实现查询、重置、删除、查看详情的功能,可以满足后台对于问答互动数据的维护需求。管理员用例图如图3-2所示。

图3-2 管理员用例图
3.2 业务流程分析
3.2.1 用户注册登录流程
学生用户进入系统之后,如果已经存在账号,则可以在登录页面输入账号、密码以及验证码完成身份验证。系统验证成功之后,用户就会进入到首页;如果账号信息输入有误或者验证码填写不正确,系统就会提示用户重新输入。未注册用户可以进入注册页面,填写基本的账号信息后提交注册。注册成功之后,用户就会返回到登录页面进行登录。如果用户忘记了密码,可以通过找回密码的功能来重新设置密码,然后用新的密码登录系统。用户注册登录流程如图3-3所示。

图3-3 用户注册登录流程图
3.2.2 学生提问流程
学生用户在实名提问或者匿名提问页面浏览问题的时候,可以利用关键词搜索找到相关的问题,然后点击进入详情页面。进入详情页之后,用户可以看到问题的内容以及已经给出的回答,还可以对问题进行点赞、收藏或者发表评论。用户如果想参与解答,在回答区输入回答内容并提交。提交成功之后,回答内容会出现在对应的题目下方,用户也可以在回答记录页面查看自己的回答历史。学生提问流程如图3-4所示。

图3-4 学生提问流程图
3.2.3 问题互动流程
学生用户在实名提问或者匿名提问页面浏览问题的时候,可以利用关键词搜索找到相关的问题,然后点击进入详情页面。进入详情页之后,用户可以看到问题的内容以及已经给出的回答,还可以对问题进行点赞、收藏或者发表评论。用户如果想参与解答,在回答区输入回答内容并提交。提交成功之后,回答内容会出现在对应的题目下方,用户也可以在回答记录页面查看自己的回答历史。问题互动流程如图3-5所示。

图3-5 问题互动流程图
3.2.4 管理员提问审核流程
学生发布问题之后,管理员登录后台进入学生提问管理模块,可以按照查询条件对待审核的问题进行筛选,也可以查看问题的详细信息。管理员对问题内容进行审核,审核通过的按照系统管理要求公开、私密、实名发布或者匿名发布;不符合要求的,管理员可以取消操作或者删除相关记录。管理员可以利用批量审核的功能对多个需要审核的问题进行审核。管理员提问审核流程如图3-6所示。

图3-6 管理员提问审核流程图
3.2.5 提问分类管理流程
管理员进入提问分类管理模块之后,可以查看系统已经存在的提问分类信息,也可以根据查询条件查找特定的分类。如果需要新增分类,管理员点击添加按钮输入分类名称等信息之后提交,系统保存分类数据。某一个分类如果不再使用,则管理员可以执行删除操作。重置功能用来清除查询条件,取消功能用来放弃当前的编辑操作。提问分类管理可以给实名提问、匿名提问和学生提问提供分类的依据。提问分类管理流程如图3-7所示。

图3-7 提问分类管理流程图
3.2.6 匿名提问管理流程
管理员进入匿名提问管理模块之后可以对匿名提问内容进行查询以及重置操作。管理员点击详情之后可以查看匿名问题的内容及有关信息,也可以查看该问题下面的评论内容。管理员会根据管理要求对匿名提问或者评论进行删除。该流程保留了学生匿名发表的功能,但是后台可以对匿名的内容做必要的管理。匿名提问管理流程如图3-8所示。

图3-8 匿名提问管理流程图
3.2.7 回答记录与点赞管理流程
学生回答问题之后,系统就会产生相应的回答记录。学生可以在回答记录页面查询、重置、查看自己的回答。管理员可以在回答记录管理模块中查看所有的回答记录,对每个回答进行查看或者删除不合适的回答内容。管理员在问题点赞管理模块中可以对问题点赞数据进行查询、重置、查看问题点赞记录、删除等问题点赞管理的操作,使系统的互动数据可以正常使用。回答记录与点赞管理流程如图3-9所示。

图3-9 回答记录与点赞管理流程图
第四章 系统设计
4.1 系统架构设计
大学生提问箱系统采用前后端分层架构,用户界面层主要是学生端页面的展示以及后台页面的操作,应用服务层使用Spring Boot实现登录、提问、审核、回答记录的处理,数据持久层使用MySQL保存业务数据。系统支持层以本地开发环境、文件上传、验证码校验为主要内容,层与层之间通过接口请求来传递数据,结构简单,适合于单机部署环境。系统架构图如图4-1所示。

图4-1 系统架构图
4.2 功能结构设计
大学生提问箱系统以学生用户和管理员两个角色为对象进行功能设计。学生用户侧设置首页、注册、登录、我的账户、个人首页、修改密码、实名提问、匿名提问、学生提问、回答记录等模块,支持问题浏览、账号管理、提问发布、互动回答等操作。管理员侧创建后台首页、系统用户、实名提问管理、提问分类管理、学生提问管理、匿名提问管理、回答记录管理、问题点赞管理等功能模块,可以实现用户管理、内容审核、分类管理、互动数据处理等操作。该系统功能结构如图4-2所示。

图4-2 系统功能结构图
4.3 数据库设计
数据库设计属于系统数据组织的基础工作,关系型模型用表结构保存业务对象,用主键、字段约束和表间关联来控制数据边界。大学生提问箱系统以用户账户、学生资料、提问内容、回答记录、评论信息等数据为基础进行存储结构的搭建,各个数据表之间通过用户编号、问题标题、来源编号等字段实现业务联系。规范化设计可以缩减重复存储,加强字段的语义清楚程度。数据库在实际使用中负责登录验证、提问存入、审核状况维持、回答检索等工作,数据一致性靠字段类型、非空约束、主键约束一起达成。
4.3.1 概念设计
匿名提问实体主要包括匿名提问id、学生用户、问题标题、提问分类、问题描述。实体属性图如图4-3所示。

图4-3 匿名提问实体属性图
回答记录实体主要包括回答记录id、回答用户、问题标题、问题回答、是否采纳。实体属性图如图4-4所示。

图4-4 回答记录实体属性图
评论实体主要包括评论id、内容、昵称、评论人id、创建时间。实体属性图如图4-5所示。

图4-5 评论实体属性图
实名提问实体主要包括实名提问id、学生用户、学生姓名、问题标题、问题描述。实体属性图如图4-6所示。

图4-6 实名提问实体属性图
敏感词汇实体主要包括敏感词汇id、敏感词汇、创建时间、更新时间。实体属性图如图4-7所示。

图4-7 敏感词汇实体属性图
学生提问实体主要包括学生提问id、学生用户、是否匿名、问题标题、审核状态。实体属性图如图4-8所示。

图4-8 学生提问实体属性图
学生用户实体主要包括学生用户id、学生学号、学生姓名、学生电话、学生积分。实体属性图如图4-9所示。

图4-9 学生用户实体属性图
用户账户实体主要包括用户账户id、用户名、密码、手机号码、账户状态。实体属性图如图4-10所示。

图4-10 用户账户实体属性图
系统E-R图如图4-12所示。

图4-12 系统E-R图
4.4.2 数据库表设计
匿名提问表主要用于保存学生匿名发布的问题信息,包括问题标题、提问分类、提问日期、问题描述等内容。如表4-1所示。
表4-1 anonymous_question(匿名提问)
|----|----------------------------|-----------|-------|------|------|----------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | anonymous_question_id | int | | 是 | 是 | 匿名提问ID |
| 2 | student_user | int | | 否 | 否 | 学生用户 |
| 3 | problem_title | varchar | 64 | 否 | 否 | 问题标题 |
| 4 | question_category | varchar | 64 | 否 | 否 | 提问分类 |
| 5 | question_date | date | | 否 | 否 | 提问日期 |
| 6 | number_of_likes | double | | 否 | 否 | 点赞数量 |
| 7 | question_picture | varchar | 255 | 否 | 否 | 提问图片 |
| 8 | problem_description | text | 65535 | 否 | 否 | 问题描述 |
| 9 | collect_len | int | | 是 | 否 | 收藏数 |
| 10 | comment_len | int | | 是 | 否 | 评论数 |
| 11 | answer_record_limit_times | int | | 是 | 否 | 回答问题限制次数 |
| 12 | problem_praise_limit_times | int | | 是 | 否 | 点赞问题限制次数 |
| 13 | create_time | datetime | | 是 | 否 | 创建时间 |
| 14 | create_by | int | | 是 | 否 | 创建用户ID |
| 15 | update_time | timestamp | | 是 | 否 | 更新时间 |
| 16 | extra | text | 65535 | 否 | 否 | 额外信息 |
| 17 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 18 | source_id | int | | 否 | 否 | 来源ID |
| 19 | source_user_id | int | | 否 | 否 | 来源用户 |
回答记录表主要用于保存学生回答问题时产生的数据,包括回答用户、问题标题、问题回答、是否采纳等内容。如表4-2所示。
表4-2 answer_record(回答记录)
|----|---------------------|-----------|-------|------|------|--------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | answer_record_id | int | | 是 | 是 | 回答记录ID |
| 2 | answer_reply | text | 65535 | 否 | 否 | 回答回复 |
| 3 | answer_the_user | int | | 否 | 否 | 回答用户 |
| 4 | create_by | int | | 是 | 否 | 创建用户ID |
| 5 | create_time | datetime | | 是 | 否 | 创建时间 |
| 6 | extra | text | 65535 | 否 | 否 | 额外信息 |
| 7 | problem_description | text | 65535 | 否 | 否 | 问题描述 |
| 8 | problem_title | varchar | 64 | 否 | 否 | 问题标题 |
| 9 | question_answering | text | 65535 | 否 | 否 | 问题回答 |
| 10 | question_category | varchar | 64 | 否 | 否 | 提问分类 |
| 11 | question_date | date | | 否 | 否 | 提问日期 |
| 12 | source_id | int | | 否 | 否 | 来源ID |
| 13 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 14 | source_user_id | int | | 否 | 否 | 来源用户 |
| 15 | student_user | int | | 否 | 否 | 学生用户 |
| 16 | update_time | timestamp | | 是 | 否 | 更新时间 |
| 17 | whether_to_adopt | varchar | 64 | 否 | 否 | 是否采纳 |
评论表主要用于保存问题详情页中的评论数据,包括评论内容、昵称、评论人、来源信息等内容。如表4-3所示。
表4-3 comment(评论)
|----|--------------|-----------|------------|------|------|--------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | avatar | varchar | 255 | 否 | 否 | 头像地址 |
| 2 | comment_id | int | | 是 | 是 | 评论ID |
| 3 | content | longtext | 4294967295 | 否 | 否 | 内容 |
| 4 | create_time | timestamp | | 是 | 否 | 创建时间 |
| 5 | hidden | tinyint | | 否 | 否 | 是否隐藏 |
| 6 | nickname | varchar | 255 | 否 | 否 | 昵称 |
| 7 | reply_to_id | int | | 是 | 否 | 回复评论ID |
| 8 | source_field | varchar | 255 | 否 | 否 | 来源字段 |
| 9 | source_id | int | | 是 | 否 | 来源ID |
| 10 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 11 | sticky | tinyint | | 否 | 否 | 是否置顶 |
| 12 | update_time | timestamp | | 是 | 否 | 更新时间 |
| 13 | user_id | int | | 是 | 是 | 评论人ID |
实名提问表主要用于保存学生实名发布的问题信息,包括学生姓名、问题标题、提问分类、问题描述等内容。如表4-4所示。
表4-4 real_name_question(实名提问)
|----|----------------------------|-----------|-------|------|------|----------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | real_name_question_id | int | | 是 | 是 | 实名提问ID |
| 2 | student_user | int | | 否 | 否 | 学生用户 |
| 3 | student_name | varchar | 64 | 否 | 否 | 学生姓名 |
| 4 | problem_title | varchar | 64 | 是 | 是 | 问题标题 |
| 5 | question_category | varchar | 64 | 否 | 否 | 提问分类 |
| 6 | question_date | date | | 否 | 否 | 提问日期 |
| 7 | number_of_likes | double | | 否 | 否 | 点赞数量 |
| 8 | question_picture | varchar | 255 | 否 | 否 | 提问图片 |
| 9 | problem_description | text | 65535 | 否 | 否 | 问题描述 |
| 10 | collect_len | int | | 是 | 否 | 收藏数 |
| 11 | comment_len | int | | 是 | 否 | 评论数 |
| 12 | answer_record_limit_times | int | | 是 | 否 | 回答问题限制次数 |
| 13 | problem_praise_limit_times | int | | 是 | 否 | 点赞问题限制次数 |
| 14 | create_time | datetime | | 是 | 否 | 创建时间 |
| 15 | create_by | int | | 是 | 否 | 创建用户ID |
| 16 | update_time | timestamp | | 是 | 否 | 更新时间 |
| 17 | extra | text | 65535 | 否 | 否 | 额外信息 |
| 18 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 19 | source_id | int | | 否 | 否 | 来源ID |
| 20 | source_user_id | int | | 否 | 否 | 来源用户 |
学生提问表主要用于保存学生提交后待审核或待发布的问题记录,包括是否匿名、问题标题、审核状态等内容。如表4-5所示。
表4-5 student_questions(学生提问)
|----|--------------------------------|-----------|-------|------|------|----------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | student_questions_id | int | | 是 | 是 | 学生提问ID |
| 2 | student_user | int | | 否 | 否 | 学生用户 |
| 3 | student_user_id_number | varchar | 64 | 否 | 否 | 学生学号 |
| 4 | student_name | varchar | 64 | 否 | 否 | 学生姓名 |
| 5 | anonymous_or_not | varchar | 64 | 否 | 否 | 是否匿名 |
| 6 | problem_title | varchar | 64 | 是 | 是 | 问题标题 |
| 7 | question_category | varchar | 64 | 否 | 否 | 提问分类 |
| 8 | number_of_questions | varchar | 64 | 否 | 否 | 提问次数 |
| 9 | question_date | date | | 否 | 否 | 提问日期 |
| 10 | question_picture | varchar | 255 | 否 | 否 | 提问图片 |
| 11 | problem_description | text | 65535 | 否 | 否 | 问题描述 |
| 12 | publish_status | varchar | 64 | 否 | 否 | 发布状态 |
| 13 | examine_state | varchar | 16 | 是 | 否 | 审核状态 |
| 14 | examine_reply | varchar | 255 | 否 | 否 | 审核回复 |
| 15 | real_name_question_limit_times | int | | 是 | 否 | 实名发布限制次数 |
| 16 | anonymous_question_limit_times | int | | 是 | 否 | 匿名发布限制次数 |
| 17 | create_time | datetime | | 是 | 否 | 创建时间 |
| 18 | create_by | int | | 是 | 否 | 创建用户ID |
| 19 | update_time | timestamp | | 是 | 否 | 更新时间 |
学生用户表主要用于保存学生身份资料及积分数据,包括学生姓名、学生电话、学生学号等内容。如表4-6所示。
表4-6 student_user(学生用户)
|----|------------------------|-----------|----|------|------|--------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | create_by | int | | 是 | 否 | 创建用户ID |
| 2 | create_time | datetime | | 是 | 否 | 创建时间 |
| 3 | examine_state | varchar | 16 | 是 | 否 | 审核状态 |
| 4 | student_name | varchar | 64 | 否 | 否 | 学生姓名 |
| 5 | student_phone | varchar | 64 | 否 | 否 | 学生电话 |
| 6 | student_points | double | | 否 | 否 | 学生积分 |
| 7 | student_user_id | int | | 是 | 是 | 学生用户ID |
| 8 | student_user_id_number | varchar | 64 | 是 | 是 | 学生学号 |
| 9 | update_time | timestamp | | 是 | 否 | 更新时间 |
| 10 | user_id | int | | 是 | 否 | 用户ID |
用户账户表主要用于保存系统登录账户信息,包括用户名、密码、联系方式、账户状态等内容。如表4-7所示。
表4-7 user(用户账户)
|----|-------------|-----------|-----|------|------|-----------------------------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | avatar | varchar | 255 | 否 | 否 | 头像地址 |
| 2 | create_time | timestamp | | 是 | 否 | 创建时间 |
| 3 | email | varchar | 64 | 否 | 否 | 邮箱 |
| 4 | email_state | smallint | | 是 | 否 | 邮箱认证:(0未认证|1审核中|2已认证) |
| 5 | login_time | timestamp | | 否 | 否 | 上次登录时间 |
| 6 | nickname | varchar | 16 | 否 | 否 | 昵称 |
| 7 | open_id | varchar | 255 | 否 | 否 | 针对获取用户信息字段 |
| 8 | password | varchar | 64 | 是 | 否 | 密码 |
| 9 | phone | varchar | 11 | 否 | 否 | 手机号码 |
| 10 | phone_state | smallint | | 是 | 否 | 手机认证:(0未认证|1审核中|2已认证) |
| 11 | state | smallint | | 是 | 否 | 账户状态:(1可用|2异常|3已冻结|4已注销) |
| 12 | user_group | varchar | 32 | 否 | 否 | 所在用户组 |
| 13 | user_id | int | | 是 | 是 | 用户ID |
| 14 | username | varchar | 16 | 是 | 否 | 用户名 |
第五章 系统实现
5.1 学生用户功能实现
5.1.1 首页功能实现
首页功能由SlidesController继承BaseController中的getList方法实现,用户进入首页后,前端向后端发送轮播图及列表查询请求,后端通过readQuery读取关键词条件,通过readConfig获取分页配置,再调用selectToPage返回页面展示数据。首页界面如图5-1所示。

图5-1 首页界面
核心代码实现如下:
@RequestMapping("/get_list")
public Map<String, Object> getList(HttpServletRequest request) {
Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));
return success(map);
}
5.1.2 注册功能实现
注册功能由UserController类中的signUp方法实现。用户提交注册信息后,方法先读取用户名并构造查询条件,通过selectBaseList判断账号是否已存在,若存在则返回提示,若不存在则调用insert方法保存用户数据。注册界面如图5-2所示。

图5-2 注册界面
核心代码实现如下:
@PostMapping("register")
public Map<String, Object> signUp(@RequestBody User user) {
Map<String, 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, "用户已存在");
5.1.3 登录功能实现
登录功能由UserController类中的login方法实现。前端提交账号和密码后,方法读取用户名、邮箱、手机号和密码字段,对密码进行解密处理,再依据账号类型查询用户记录,完成身份校验后返回登录结果。登录界面如图5-3所示。

图5-3 登录界面
核心代码实现如下:
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, 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);
5.1.4 我的账户功能实现
我的账户功能由UserController类中的state方法和quit方法实现。state方法通过请求头中的x-auth-token获取当前登录用户编号,并查询用户信息返回前端;quit方法删除Redis中的token记录,完成账户退出操作。我的账户界面如图5-4所示。

图5-4 我的账户界面
核心代码实现如下:
@GetMapping("state")
public Map<String, Object> state(HttpServletRequest request) {
JSONObject ret = new JSONObject();
String token = request.getHeader("x-auth-token");
Integer userId = tokenGetUserId(token);
log.info("返回userId {}",userId);
5.1.5 个人首页功能实现
个人首页功能由StudentUserController类中的set方法和BaseController类中的upload方法实现。用户上传头像时调用upload保存文件,修改资料时set方法读取请求体参数,封装学生用户对象后完成资料更新。个人首页界面如图5-5所示。

图5-5 个人首页界面
核心代码实现如下:
@PostMapping("/upload")
public Map<String, Object> upload(@RequestParam("file") MultipartFile file) {
log.info("进入方法");
if (file.isEmpty()) {
return error(30000, "没有选择文件");
}
5.1.6 修改密码功能实现
修改密码功能由UserController类中的change_password方法实现。系统根据请求头token取得当前用户编号,读取旧密码后构造查询条件,若原密码匹配成功,则通过update方法写入新密码并返回修改结果。修改密码界面如图5-6所示。

图5-6 修改密码界面
核心代码实现如下:
@PostMapping("change_password")
public Map<String, Object> change_password(@RequestBody Map<String, String> data, HttpServletRequest request){
String token = request.getHeader("x-auth-token");
Integer userId = tokenGetUserId(token);
Map<String, String> query = new HashMap<>();
String o_password = data.get("o_password");
5.1.7 实名提问功能实现
实名提问功能由RealNameQuestionController类中的add方法实现。学生提交实名问题后,方法读取请求体数据,设置学生用户、学生姓名和问题标题等字段,并对问题标题进行重复校验,最后调用addEntity保存记录。实名提问界面如图5-7所示。

图5-7 实名提问界面
核心代码实现如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,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"))));
5.1.8 匿名提问功能实现
匿名提问功能由AnonymousQuestionController类中的add方法实现。用户提交匿名问题后,方法读取问题标题、问题分类、提问日期和问题描述等字段,封装为匿名提问对象,并通过addEntity写入数据库。匿名提问界面如图5-8所示。

图5-8 匿名提问界面
核心代码实现如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> paramMap = service.readBody(request.getReader());
AnonymousQuestion anonymous_question = new AnonymousQuestion();
anonymous_question.setStudent_user(paramMap.get("student_user")==null?null:Integer.valueOf(String.valueOf(paramMap.get("student_user"))));
5.1.9 学生提问功能实现
学生提问功能由StudentQuestionsController类中的add方法实现。前端提交学生提问信息后,方法读取请求体参数,设置匿名状态、问题标题、问题分类和发布状态等数据,并将提问记录保存至数据库。学生提问界面如图5-9所示。

图5-9 学生提问界面
核心代码实现如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> paramMap = service.readBody(request.getReader());
StudentQuestions student_questions = new StudentQuestions();
student_questions.setStudent_user(paramMap.get("student_user")==null?null:Integer.valueOf(String.valueOf(paramMap.get("student_user"))));
5.1.10 回答记录功能实现
回答记录功能由AnswerRecordController类中的add方法实现。学生提交回答内容后,方法读取问题标题、回答用户和回答内容等字段,封装回答记录对象,再调用addEntity完成保存,供用户后续查询详情。回答记录界面如图5-10所示。

图5-10 回答记录界面
核心代码实现如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> paramMap = service.readBody(request.getReader());
AnswerRecord answer_record = new AnswerRecord();
answer_record.setProblem_title(paramMap.get("problem_title")==null?null:String.valueOf(paramMap.get("problem_title")));
5.2 管理员功能实现
5.2.1 后台首页功能实现
后台首页功能由各业务Controller继承BaseController类中的count方法实现。管理员进入后台首页后,前端调用统计接口,后端根据查询条件执行数量统计,并将用户、提问、回答等统计结果返回页面。后台首页界面如图5-11所示。

图5-11 后台首页界面
核心代码实现如下:
@RequestMapping(value = {"/count_group", "/count"})
public Map<String, Object> count(HttpServletRequest request) {
Integer value= service.selectSqlToInteger(service.groupCount(service.readQuery(request), service.readConfig(request)));
return success(value);
}
5.2.2 系统用户功能实现
系统用户功能由StudentUserController类中的add方法和set方法实现。管理员新增或修改学生用户时,方法读取请求体数据,设置学号、姓名、手机号、积分和用户编号等字段,再保存或更新用户资料。系统用户界面如图5-12所示。

图5-12 系统用户界面
核心代码实现如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> paramMap = service.readBody(request.getReader());
StudentUser student_user = new StudentUser();
student_user.setStudent_name(paramMap.get("student_name")==null?null:String.valueOf(paramMap.get("student_name")));
5.2.3 实名提问管理功能实现
实名提问管理功能由RealNameQuestionController类中的set方法和BaseController类中的getList方法实现。管理员通过列表接口查询实名提问,进入详情后修改问题标题、分类、图片和描述等内容,并提交更新。实名提问管理界面如图5-13所示。
图5-13 实名提问管理界面
核心代码实现如下:
@PostMapping("/set")
@Transactional
public Map<String, Object> set(HttpServletRequest request) throws IOException {
Map<String,String> queryMap = service.readQuery(request);
Map<String,String> configMap = service.readConfig(request);
Map<String,Object> paramMap = service.readBody(request.getReader());
5.2.4 提问分类管理功能实现
提问分类管理功能由QuestionCategoryController类中的add方法和set方法实现。管理员添加分类时,方法读取分类名称和创建人信息,封装为QuestionCategory对象后写入数据库,修改时通过set方法更新分类记录。提问分类管理界面如图5-14所示。

图5-14 提问分类管理界面
核心代码实现如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> paramMap = service.readBody(request.getReader());
QuestionCategory question_category = new QuestionCategory();
question_category.setQuestion_class_nameification(paramMap.get("question_class_nameification")==null?null:String.valueOf(paramMap.get("question_class_nameification")));
5.2.5 学生提问管理功能实现
学生提问管理功能由StudentQuestionsController类中的updateExamineState方法实现。管理员在后台传入提问编号和审核状态后,方法校验状态是否合法,查询对应提问记录,再修改examine_state字段。学生提问管理界面如图5-15所示。

图5-15 学生提问管理界面
核心代码实现如下:
@GetMapping("/update_examine_state")
public String updateExamineState(Long id, String newState) throws IOException {
if (!newState.equals("未审核") && !newState.equals("已通过") && !newState.equals("未通过")) {
return "非法的审核状态";
}
Map<String,String> queryMap = new HashMap<>();
5.2.6 匿名提问管理功能实现
匿名提问管理功能由AnonymousQuestionController类中的set方法和BaseController类中的del方法实现。管理员查询匿名提问后,可查看问题详情和评论内容,对需要调整的数据执行修改,对不符合要求的记录执行删除。匿名提问管理界面如图5-16所示。
图5-16 匿名提问管理界面
核心代码实现如下:
@PostMapping("/set")
@Transactional
public Map<String, Object> set(HttpServletRequest request) throws IOException {
Map<String,String> queryMap = service.readQuery(request);
Map<String,String> configMap = service.readConfig(request);
Map<String,Object> paramMap = service.readBody(request.getReader());
5.2.7 回答记录管理功能实现
回答记录管理功能由AnswerRecordController类中的set方法和BaseController类中的del方法实现。管理员通过列表查询回答记录,进入详情后可修改回答内容、采纳状态和回复信息,也可删除不合适的回答数据。回答记录管理界面如图5-17所示。

图5-17 回答记录管理界面
核心代码实现如下:
@PostMapping("/set")
@Transactional
public Map<String, Object> set(HttpServletRequest request) throws IOException {
Map<String,String> queryMap = service.readQuery(request);
Map<String,String> configMap = service.readConfig(request);
Map<String,Object> paramMap = service.readBody(request.getReader());
5.2.8 问题点赞管理功能实现
问题点赞管理功能由ProblemPraiseController类中的add方法和set方法实现。学生点赞后生成点赞记录,管理员可查询、查看或删除点赞数据;新增点赞时,方法还会更新对应实名提问或匿名提问的点赞数量。问题点赞管理界面如图5-18所示。

图5-18 问题点赞管理界面
核心代码实现如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> paramMap = service.readBody(request.getReader());
ProblemPraise problem_praise = new ProblemPraise();
problem_praise.setStudent_user(paramMap.get("student_user")==null?null:Integer.valueOf(String.valueOf(paramMap.get("student_user"))));
第六章 系统实现
6.1 测试过程
6.1.1 测试环境与方法
系统开发完成后,对大学生提问箱系统进行功能测试,主要是对学生用户端、管理员端的各项功能是否可以正常使用进行检验。测试环境为本地开发环境,前端用Vue启动运行,后端用Spring Boot项目启动服务,数据库用MySQL进行数据存储。测试方法主要是黑盒测试,模拟学生用户、管理员的正常操作过程来测试登录注册、问题发布、问题搜索、评论回答、后台审核、分类管理、回答记录管理等各个功能,看系统的页面跳转、数据提交、结果反馈、异常提示是否符合设计要求。
6.1.2 功能测试
1.用户登录测试,见表6-1所示。
表6-1 用户登录
|----|-------|--------------------|-------------|-------------|------|
| 序号 | 测试功能 | 测试步骤 | 预期结果 | 实际结果 | 测试状态 |
| 1 | 用户登录 | 输入正确账号、密码和验证码后点击登录 | 登录成功,进入系统首页 | 登录成功,进入系统首页 | 通过 |
| 2 | 用户登录 | 输入错误密码后点击登录 | 提示密码错误或登录失败 | 提示密码错误或登录失败 | 通过 |
| 3 | 用户登录 | 输入不存在的账号后点击登录 | 提示用户不存在 | 提示用户不存在 | 通过 |
| 4 | 用户登录 | 账号和密码为空直接点击登录 | 提示请输入账号或密码 | 提示请输入账号或密码 | 通过 |
| 5 | 验证码验证 | 输入错误验证码后点击登录 | 提示验证码错误 | 提示验证码错误 | 通过 |
2.注册与个人中心功能测试,见表6-2所示。
表6-2 注册与个人中心
|----|------|--------------|--------------|--------------|------|
| 序号 | 测试功能 | 测试步骤 | 预期结果 | 实际结果 | 测试状态 |
| 1 | 用户注册 | 填写完整注册信息后提交 | 注册成功,可返回登录页面 | 注册成功,可返回登录页面 | 通过 |
| 2 | 用户注册 | 使用已存在账号进行注册 | 提示用户已存在 | 提示用户已存在 | 通过 |
| 3 | 找回密码 | 按要求填写信息并提交 | 密码重置成功 | 密码重置成功 | 通过 |
| 4 | 个人资料 | 上传头像并提交资料 | 资料保存成功 | 资料保存成功 | 通过 |
| 5 | 修改密码 | 输入原密码和新密码后确认 | 密码修改成功 | 密码修改成功 | 通过 |
3.首页搜索功能测试,见表6-3所示。
表6-3 首页搜索
|----|--------|--------------|--------------|--------------|------|
| 序号 | 测试功能 | 测试步骤 | 预期结果 | 实际结果 | 测试状态 |
| 1 | 首页展示 | 进入系统首页 | 正常显示首页内容和轮播图 | 正常显示首页内容和轮播图 | 通过 |
| 2 | 关键词搜索 | 输入问题关键词后点击搜索 | 显示符合关键词的问题列表 | 显示符合关键词的问题列表 | 通过 |
| 3 | 轮播图切换 | 点击轮播图切换按钮 | 轮播图正常切换 | 轮播图正常切换 | 通过 |
| 4 | 查看内容 | 点击首页问题内容 | 进入对应详情页面 | 进入对应详情页面 | 通过 |
| 5 | 空关键词搜索 | 不输入关键词直接搜索 | 显示默认问题列表 | 显示默认问题列表 | 通过 |
4.实名提问功能测试,见表6-4所示。
表6-4 实名提问
|----|------|-------------|---------------|---------------|------|
| 序号 | 测试功能 | 测试步骤 | 预期结果 | 实际结果 | 测试状态 |
| 1 | 实名提问 | 填写完整问题信息后提交 | 提交成功,生成实名提问记录 | 提交成功,生成实名提问记录 | 通过 |
| 2 | 问题搜索 | 输入问题标题关键词查询 | 显示符合条件的问题 | 显示符合条件的问题 | 通过 |
| 3 | 查看详情 | 点击实名问题详情 | 显示问题完整内容和回答信息 | 显示问题完整内容和回答信息 | 通过 |
| 4 | 点赞收藏 | 点击点赞或收藏按钮 | 提示操作成功,数量变化 | 提示操作成功,数量变化 | 通过 |
| 5 | 发表评论 | 输入评论内容后发表 | 评论发布成功并显示 | 评论发布成功并显示 | 通过 |
5.匿名提问功能测试,见表6-5所示。
表6-5 匿名提问
|----|------|-------------|---------------|---------------|------|
| 序号 | 测试功能 | 测试步骤 | 预期结果 | 实际结果 | 测试状态 |
| 1 | 匿名提问 | 填写匿名问题信息后提交 | 提交成功,生成匿名提问记录 | 提交成功,生成匿名提问记录 | 通过 |
| 2 | 匿名搜索 | 输入关键词查询匿名问题 | 显示对应匿名问题列表 | 显示对应匿名问题列表 | 通过 |
| 3 | 查看详情 | 点击匿名问题详情 | 显示匿名问题内容 | 显示匿名问题内容 | 通过 |
| 4 | 回答问题 | 输入回答内容后提交 | 回答提交成功 | 回答提交成功 | 通过 |
| 5 | 查看回答 | 进入问题详情查看回答 | 正常显示回答内容 | 正常显示回答内容 | 通过 |
6.学生提问管理测试,见表6-6所示。
表6-6 学生提问管理
|----|------|-------------|-------------|-------------|------|
| 序号 | 测试功能 | 测试步骤 | 预期结果 | 实际结果 | 测试状态 |
| 1 | 添加提问 | 学生填写问题信息后提交 | 学生提问记录保存成功 | 学生提问记录保存成功 | 通过 |
| 2 | 查询提问 | 输入查询条件后点击查询 | 显示符合条件的提问记录 | 显示符合条件的提问记录 | 通过 |
| 3 | 重置查询 | 点击重置按钮 | 查询条件被清空 | 查询条件被清空 | 通过 |
| 4 | 删除提问 | 选择提问记录后点击删除 | 记录从列表中移除 | 记录从列表中移除 | 通过 |
| 5 | 查看详情 | 点击详情按钮 | 显示提问详细信息 | 显示提问详细信息 | 通过 |
7.管理员审核功能测试,见表6-7所示。
表6-7 管理员审核功能
|----|-------|---------------|------------|------------|------|
| 序号 | 测试功能 | 测试步骤 | 预期结果 | 实际结果 | 测试状态 |
| 1 | 查询待审 | 管理员进入学生提问管理页面 | 显示待审核问题列表 | 显示待审核问题列表 | 通过 |
| 2 | 审核通过 | 对待审核问题点击审核通过 | 审核状态变为已通过 | 审核状态变为已通过 | 通过 |
| 3 | 审核不通过 | 对问题执行未通过操作 | 审核状态变为未通过 | 审核状态变为未通过 | 通过 |
| 4 | 公开处理 | 对问题点击公开 | 问题状态变为公开显示 | 问题状态变为公开显示 | 通过 |
| 5 | 私密处理 | 对问题点击私密 | 问题状态变为私密 | 问题状态变为私密 | 通过 |
8.提问分类管理测试,见表6-8所示。
表6-8 提问分类管理
|----|------|-----------|-------------|-------------|------|
| 序号 | 测试功能 | 测试步骤 | 预期结果 | 实际结果 | 测试状态 |
| 1 | 分类查询 | 输入分类名称后查询 | 显示对应分类信息 | 显示对应分类信息 | 通过 |
| 2 | 添加分类 | 填写分类名称后提交 | 分类添加成功 | 分类添加成功 | 通过 |
| 3 | 删除分类 | 选择分类后点击删除 | 分类从列表中移除 | 分类从列表中移除 | 通过 |
| 4 | 重置查询 | 点击重置按钮 | 查询条件被清空 | 查询条件被清空 | 通过 |
| 5 | 取消操作 | 编辑分类时点击取消 | 返回原页面,不保存修改 | 返回原页面,不保存修改 | 通过 |
9.回答记录与点赞管理测试,见表6-9所示。
表6-9 回答记录与点赞管理
|----|------|-------------|------------|------------|------|
| 序号 | 测试功能 | 测试步骤 | 预期结果 | 实际结果 | 测试状态 |
| 1 | 回答查询 | 学生进入回答记录页面 | 显示本人回答记录 | 显示本人回答记录 | 通过 |
| 2 | 回答详情 | 点击回答记录详情 | 显示回答完整内容 | 显示回答完整内容 | 通过 |
| 3 | 回答删除 | 管理员删除回答记录 | 回答记录从列表中移除 | 回答记录从列表中移除 | 通过 |
| 4 | 点赞查询 | 管理员进入问题点赞管理 | 显示点赞数据列表 | 显示点赞数据列表 | 通过 |
| 5 | 点赞删除 | 管理员删除点赞记录 | 点赞记录删除成功 | 点赞记录删除成功 | 通过 |
6.1.3 测试结果
经过功能测试,大学生提问箱系统各个模块都能正常运行,学生用户可以完成注册登录、个人资料修改、实名提问、匿名提问、问题搜索、评论发表、回答问题、回答记录查看等操作。管理员可以对系统用户进行管理、提问分类进行管理、学生提问审核、匿名提问进行管理、回答记录进行管理、问题点赞进行管理。从测试结果可以看出,系统页面跳转正常、数据提交及查询结果正确,前后端交互符合设计要求。测试过程中没有出现影响系统基本运行的严重问题,系统整体运行状态比较稳定。
6.2 全文小结
本文主要针对大学生提问箱系统的设计与实现展开研究,根据高校学生在学习咨询、校园生活反馈以及问题交流方面的需求,设计并开发出一个面向学生用户和管理员的校园问答管理系统。系统采取前后端分离的方式,前端用Vue框架实现页面的显示以及用户的交互,后端用Spring Boot框架执行业务逻辑的处理,数据库利用MySQL来保存数据。
需求分析阶段论文对系统功能需求、业务流程做了分析,确定了学生用户、管理员两种角色的主要操作。学生用户主要使用首页、注册、登录、我的账户、个人首页、修改密码、实名提问、匿名提问、学生提问和回答记录等功能,管理员主要使用后台首页、系统用户、实名提问管理、提问分类管理、学生提问管理、匿名提问管理、回答记录管理、问题点赞管理等功能。
论文在系统设计阶段完成系统架构设计、功能结构设计、业务流程设计、数据库设计。系统架构采用分层的设计思想,把前端页面、后端业务、数据库存储三者分开,使系统结构更加清晰。数据库设计以用户账户、学生用户、实名提问、匿名提问、学生提问、回答记录、评论等主要的数据表为依托,可以满足系统功能运行中对数据的存储需求。
系统实现阶段根据模块化开发思想完成了学生端、管理员端的功能开发。学生端有账号注册登录、个人资料修改、问题发布、问题查找、点赞收藏、评论发表、回答问题、记录查看等主要功能,管理员端有用户管理、提问分类管理、学生提问审核、匿名提问查看、回答记录管理、点赞数据管理等功能,形成了一套比较完整的校园问答业务流程。
论文对系统的主要功能进行了测试,测试内容包括登录注册、首页搜索、实名提问、匿名提问、学生提问管理、管理员审核、分类管理、回答记录、点赞管理等模块。测试结果表明,系统的功能基本达到预期,主要业务流程可以顺利进行,页面显示以及数据交互比较稳定,可以满足大学生提问箱系统基本的应用要求。
由于开发时间以及个人能力所限,该系统还存在着待完善之处。在此基础上可以对已有功能进行页面交互效果的进一步优化,并完善问题内容审核的规则、数据统计更加详细的方面来提高系统的使用体验以及管理效率。经过本次毕业设计,对Vue、Spring Boot、MySQL等技术有了更深的认识,也提高了系统分析、数据库设计、功能实现、测试调试的能力。
参考文献
- 张恬. 基于大语言模型的图书馆智能问答系统J. 电脑编程技巧与维护,2026,38(4): 109-111.
- 谢晓萍,薛芳. 基于人工智能技术的校园问答系统的设计与应用J. 自动化应用,2025,66(15): 234-236.
- 张淋星,黄毅琛,项凌涵,等. 基于ChatGLM的校园智能问答系统设计与实现J. 现代信息科技,2025,9(14): 66-71.
- 冯欣润,许荣华,田歌亮. 基于ChatGPT的智能问答型智慧校园平台设计研究J. 家电维修,2025,43(2): 89-91.
- 陆公正,刘诚志. 以大语言模型为核心的校园问答系统J. 福建电脑,2024,40(10): 95-98.
- 王继胜. 基于知识图谱的医疗问答系统设计与实现D. 太原:太原师范学院,2024.
- 朱成雨. 基于预训练模型的校园问答系统设计与实现D. 昆明:云南师范大学,2024.
- 戚梦瑶. 面向高校的智能问答系统设计J. 电脑知识与技术,2022,18(36): 33-35.
- 郑欢,陈汝龙. 基于Neo4j的校园移动社交知识问答系统设计与实现J. 电脑编程技巧与维护,2022,34(4): 72-75.
- 李奕霖. 基于IPV6的校园信息问答系统设计与实现D. 青岛:青岛科技大学,2022.
- 郑森洪. 基于交互注意力网络的校园问答研究D. 上海:上海大学,2021.
- Thanh T,Huu D,Tram N,et al. An Ontology-Based Question Answering System for University Admissions AdvisingJ. Intelligent Automation & Soft Computing,2022,36(1): 601-616.
- PEYTON K, UNNIKRISHNAN S, MULLIGAN B. A review of university chatbots for student support: FAQs and beyondJ/OL. Discover Education, 2025, 4: 212026-05-26. DOI:10.1007/s44217-025-00397-7.
- WADHWA H, KARTHIKEYAN T, MAUSAM, et al. Towards multimodal question answering in educational domainC/OL// Proceedings of the 14th International Joint Conference on Natural Language Processing and the 4th Conference of the Asia-Pacific Chapter of the Association for Computational Linguistics. Mumbai: The Asian Federation of Natural Language Processing and The Association for Computational Linguistics, 2025: 1638-16492026-05-26.
- JENKINS L, MAIDMENT D. A reflection on using an online polling and Q&A platform as a method of engagement in undergraduate psychology lecturesJ/OL. Psychology Teaching Review, 2024, 30(2): 40-52
致 谢
时光荏苒,转眼已至毕业季。毕业设计从选题、开题到论文撰写和修改定稿,离不开指导教师的悉心指导。老师治学严谨,在研究思路、论文结构和内容完善等方面给予了耐心帮助。同时,也感谢校外导师在实践环节中提供的指导,使我对实际问题分析和项目完成过程有了更清晰的认识。
本次毕业设计让我经历了从迷茫到逐步明确方向的过程。面对资料整理、方案设计和论文修改中的困难,我通过查阅资料、反复调整和不断完善,提升了独立思考和解决问题的能力。四年的大学学习也使我逐渐建立起较为完整的知识体系。
感谢学校、辅导员和各位任课老师在学习生活中的培养与关心,感谢同窗好友在日常学习和生活中的陪伴与帮助。最后,感谢父母和家人一直以来的理解、支持和鼓励,他们是我求学道路上最坚实的后盾。未来我将继续努力,以认真负责的态度面对新的学习和工作生活。
请关注点赞+私信博主,免费领取项目源码