基于Springboot + vue +MySQL 在线答疑管理系统 (含源码)

目录

📚 前言

📑摘要

📑系统架构

📚 数据库设计

   💬  管理员信息实体属性图

   💬 学生信息实体属性图

   💬 教师信息实体属性图

   💬 试题信息实体图

📚 系统功能的具体实现

 💬 管理员功能模块

         管理员登录管理

学生信息管理

教师管理

 💬 教师后台功能模块

教师登录

个人中心

试卷管理

试题管理

 💬 学生后台功能模块

问题发布管理

疑难解答管理

考试管理

✒️ 源码实现

💖 源码获取

😁 联系方式


📚 前言

📑博客主页:@丘比特惩罚陆

💖欢迎关注:点赞收藏⭐留言✒
💬系列专栏:Java Springboot 毕设实战专栏
🎮 加入社区: 丘比特惩罚陆
🥇人生格言:选对方向,每走一步都是进步!
✒️欢迎大佬指正,一起学习!一起加油!

👏 希望大家能小手一动,帮忙点个赞!


📑摘要

   本文从学生的功能要求出发,建立了在线答疑系统,系统中的功能模块主要是实现管理员权限;首页、个人中心、学生管理、教师管理、问题发布管理、疑难解答管理。教师权限:首页、个人中心、疑难解答管理、试卷管理试题管理考试管理。学生权限;首页、个人中心、问题发布管理、疑难解答管理、考试管理等功能部分。


📑 功能结构    

    在线答疑系统,主要包括管理员、教师、学生用户角色,对于学生角色不同,所使用的功能模块相应不同。

  1. 管理员权限;首页、个人中心、学生管理、教师管理、问题发布管理、疑难解答管理
  2. 教师权限:首页、个人中心、疑难解答管理、试卷管理、试题管理、考试管理。
  3. 学生权限;首页、个人中心、问题发布管理、疑难解答管理、考试管理等功能模块的管理维护等操作

📑系统架构

   此次管理系统的关键技术和架构由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主!!

😁 联系方式

文章最底下有微信联系方式!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丘比特惩罚陆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值