目录
📚 前言
📑博客主页:@丘比特惩罚陆
💖欢迎关注:点赞收藏⭐留言✒
💬系列专栏:Java Springboot 毕设实战专栏
🎮 加入社区: 丘比特惩罚陆
🥇人生格言:选对方向,每走一步都是进步!
✒️欢迎大佬指正,一起学习!一起加油!👏 希望大家能小手一动,帮忙点个赞!
📑摘要
本文从学生的功能要求出发,建立了在线答疑系统,系统中的功能模块主要是实现管理员权限;首页、个人中心、学生管理、教师管理、问题发布管理、疑难解答管理。教师权限:首页、个人中心、疑难解答管理、试卷管理、试题管理、考试管理。学生权限;首页、个人中心、问题发布管理、疑难解答管理、考试管理等功能部分。
📑 功能结构
在线答疑系统,主要包括管理员、教师、学生三个用户角色,对于学生角色不同,所使用的功能模块相应不同。
- 管理员权限;首页、个人中心、学生管理、教师管理、问题发布管理、疑难解答管理
- 教师权限:首页、个人中心、疑难解答管理、试卷管理、试题管理、考试管理。
- 学生权限;首页、个人中心、问题发布管理、疑难解答管理、考试管理等功能模块的管理维护等操作
📑系统架构
此次管理系统的关键技术和架构由B/S结构、java和mysql数据库,是本系统的关键开发技术,对系统的整体、数据库、功能模块、系统页面以及系统程序等设计进行了详细的研究与规划。
三层架构图
📚 数据库设计
ER图是由实体及其关系构成的图,通过E/R图可以清楚地描述系统涉及到的实体之间的相互关系。
💬 管理员信息实体属性图
💬 学生信息实体属性图
💬 教师信息实体属性图
💬 试题信息实体图
📚 系统功能的具体实现
💬 管理员功能模块
管理员登录管理
管理员通过后台登录窗口进行输入自己的账号、密码、验证码等信息,进行登录
学生信息管理
学生信息管理,管理员通过学生信息可以在线查看学号、密码、姓名、性别、头像、院校、班级、手机等信息,进行详情或修改、删除操作
教师管理
教师管理,管理员通过教师管理可以在线查看工号、密码、 姓名、性别、头像、学院、班级、电话等信息,进行查看或修改、删除操作
💬 教师后台功能模块
教师登录
教师通过后台登录窗口进行输入自己的账号、密码、验证码等信息,进行登录
个人中心
个人信息:通过在个人资料管理页面通过查看工号、密码、 姓名、性别、头像、学院、班级、电话可进行查看进行修改、删除等
试卷管理
试卷管理:教师通过列表可以获取试卷名称、考试时长(分钟)、试卷状态,进行查看添加、修改等信息操作
试题管理
教师通过列表可以获取试卷、试题名称、分值、答案、类型等信息,进行添加、修改、查看等信息操作
💬 学生后台功能模块
问题发布管理
问题发布管理,学生通过问题发布管理可以在线查看标题、题目、发布时间、学号、姓名、答案进行详情并添加/修改、删除操作;
疑难解答管理
学生通过疑难解答管理可以在线查看标题、题目、答案、发布时间、学号、姓名、审核回复等信息,进行查看查看提问操作;
考试管理
学生通过考试管理可以在线进行考试/查看答案等
✒️ 源码实现
/**
* 疑难解答
* 后端接口
* @author
* @email
* @date 2020-11-25 17:15:52
*/
@RestController
@RequestMapping("/yinanjieda")
public class YinanjiedaController {
@Autowired
private YinanjiedaService yinanjiedaService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,YinanjiedaEntity yinanjieda, HttpServletRequest request){
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("jiaoshi")) {
yinanjieda.setGonghao((String)request.getSession().getAttribute("username"));
}
EntityWrapper<YinanjiedaEntity> ew = new EntityWrapper<YinanjiedaEntity>();
PageUtils page = yinanjiedaService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, yinanjieda), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,YinanjiedaEntity yinanjieda, HttpServletRequest request){
EntityWrapper<YinanjiedaEntity> ew = new EntityWrapper<YinanjiedaEntity>();
PageUtils page = yinanjiedaService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, yinanjieda), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( YinanjiedaEntity yinanjieda){
EntityWrapper<YinanjiedaEntity> ew = new EntityWrapper<YinanjiedaEntity>();
ew.allEq(MPUtil.allEQMapPre( yinanjieda, "yinanjieda"));
return R.ok().put("data", yinanjiedaService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(YinanjiedaEntity yinanjieda){
EntityWrapper< YinanjiedaEntity> ew = new EntityWrapper< YinanjiedaEntity>();
ew.allEq(MPUtil.allEQMapPre( yinanjieda, "yinanjieda"));
YinanjiedaView yinanjiedaView = yinanjiedaService.selectView(ew);
return R.ok("查询疑难解答成功").put("data", yinanjiedaView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") String id){
YinanjiedaEntity yinanjieda = yinanjiedaService.selectById(id);
return R.ok().put("data", yinanjieda);
}
/**
* 前端详情
*/
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") String id){
YinanjiedaEntity yinanjieda = yinanjiedaService.selectById(id);
return R.ok().put("data", yinanjieda);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody YinanjiedaEntity yinanjieda, HttpServletRequest request){
yinanjieda.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(yinanjieda);
yinanjiedaService.insert(yinanjieda);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody YinanjiedaEntity yinanjieda, HttpServletRequest request){
yinanjieda.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(yinanjieda);
yinanjiedaService.insert(yinanjieda);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody YinanjiedaEntity yinanjieda, HttpServletRequest request){
//ValidatorUtils.validateEntity(yinanjieda);
yinanjiedaService.updateById(yinanjieda);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
yinanjiedaService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 提醒接口
*/
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
@PathVariable("type") String type,@RequestParam Map<String, Object> map) {
map.put("column", columnName);
map.put("type", type);
if(type.equals("2")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date remindStartDate = null;
Date remindEndDate = null;
if(map.get("remindstart")!=null) {
Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindStart);
remindStartDate = c.getTime();
map.put("remindstart", sdf.format(remindStartDate));
}
if(map.get("remindend")!=null) {
Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindEnd);
remindEndDate = c.getTime();
map.put("remindend", sdf.format(remindEndDate));
}
}
Wrapper<YinanjiedaEntity> wrapper = new EntityWrapper<YinanjiedaEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("jiaoshi")) {
wrapper.eq("gonghao", (String)request.getSession().getAttribute("username"));
}
int count = yinanjiedaService.selectCount(wrapper);
return R.ok().put("count", count);
}
}
💖 源码获取
点赞、收藏、关注!!!
非无偿源码!获取源码请添加up主!!
😁 联系方式
文章最底下有微信联系方式!!!